From 324f24222b8ffdef2422548bfe001ff9647a3ac6 Mon Sep 17 00:00:00 2001 From: Kilian Saffran Date: Wed, 17 Feb 2021 10:25:00 +0100 Subject: [PATCH] v20210217 --- .hourtrax/hourtrax.sqlite | Bin 49152 -> 49152 bytes desktopapp/index.fingerprint.html | 90 +- desktopapp/js/app.js | 66 +- desktopapp/js/fingerprint.js | 26 +- desktopapp/js/request.js | 32 +- desktopapp/js/timeclock.js | 78 +- desktopapp/main.js | 6 +- install/.hourtrax/hourtrax.json | 8 + install/.hourtrax/hourtrax.sqlite | Bin 0 -> 45056 bytes install/.hourtrax/ht.sql | 61 + install/.profile | 6 - install/bin/electron/resources/app/admin.html | 117 + .../bin/electron/resources/app/css/clock.css | 236 + .../bin/electron/resources/app/css/clock2.css | 5 + .../electron/resources/app/css/fonts/pot.svg | 133 + .../electron/resources/app/css/fonts/pot.ttf | Bin 0 -> 36644 bytes .../electron/resources/app/css/fonts/pot.woff | Bin 0 -> 36720 bytes .../bin/electron/resources/app/css/icons.css | 464 + .../bin/electron/resources/app/css/theme.css | 1066 + .../bin/electron/resources/app/css/w3pro.css | 378 + .../electron/resources/app/img/POT-logo.png | Bin 0 -> 20930 bytes .../electron/resources/app/img/dks_1000.png | Bin 0 -> 68554 bytes .../app/img/favicon/android-icon-144x144.png | Bin 0 -> 12179 bytes .../app/img/favicon/android-icon-192x192.png | Bin 0 -> 16669 bytes .../app/img/favicon/android-icon-36x36.png | Bin 0 -> 2527 bytes .../app/img/favicon/android-icon-48x48.png | Bin 0 -> 3489 bytes .../app/img/favicon/android-icon-72x72.png | Bin 0 -> 5250 bytes .../app/img/favicon/android-icon-96x96.png | Bin 0 -> 7086 bytes .../app/img/favicon/apple-icon-114x114.png | Bin 0 -> 8487 bytes .../app/img/favicon/apple-icon-120x120.png | Bin 0 -> 9134 bytes .../app/img/favicon/apple-icon-144x144.png | Bin 0 -> 12179 bytes .../app/img/favicon/apple-icon-152x152.png | Bin 0 -> 13278 bytes .../app/img/favicon/apple-icon-180x180.png | Bin 0 -> 17376 bytes .../app/img/favicon/apple-icon-57x57.png | Bin 0 -> 4122 bytes .../app/img/favicon/apple-icon-60x60.png | Bin 0 -> 4312 bytes .../app/img/favicon/apple-icon-72x72.png | Bin 0 -> 5250 bytes .../app/img/favicon/apple-icon-76x76.png | Bin 0 -> 5550 bytes .../img/favicon/apple-icon-precomposed.png | Bin 0 -> 17158 bytes .../resources/app/img/favicon/apple-icon.png | Bin 0 -> 17158 bytes .../app/img/favicon/browserconfig.xml | 2 + .../app/img/favicon/favicon-16x16.png | Bin 0 -> 1251 bytes .../app/img/favicon/favicon-32x32.png | Bin 0 -> 2246 bytes .../app/img/favicon/favicon-96x96.png | Bin 0 -> 7086 bytes .../resources/app/img/favicon/favicon.ico | Bin 0 -> 1150 bytes .../resources/app/img/favicon/manifest.json | 41 + .../app/img/favicon/ms-icon-144x144.png | Bin 0 -> 12179 bytes .../app/img/favicon/ms-icon-150x150.png | Bin 0 -> 12985 bytes .../app/img/favicon/ms-icon-310x310.png | Bin 0 -> 40744 bytes .../app/img/favicon/ms-icon-70x70.png | Bin 0 -> 5051 bytes .../resources/app/img/fingerprint/finger1.svg | 80 + .../resources/app/img/fingerprint/finger2.svg | 82 + .../resources/app/img/fingerprint/finger3.svg | 80 + .../resources/app/img/fingerprint/finger4.svg | 78 + .../resources/app/img/fingerprint/finger5.svg | 79 + .../app/img/fingerprint/fingerprint-check.svg | 86 + .../img/fingerprint/fingerprint-crosshair.svg | 91 + .../img/fingerprint/fingerprint-remove.svg | 86 + .../fingerprint/fingerprint-remove_white.svg | 86 + .../fingerprint-scanning-index.svg | 109 + .../img/fingerprint/fingerprint-scanning.svg | 90 + .../img/fingerprint/fingerprint-search.svg | 203 + .../img/fingerprint/fingerprint-simple.svg | 87 + .../resources/app/img/hourtrax copy.svg | 90 + .../electron/resources/app/img/hourtrax.png | Bin 0 -> 23443 bytes .../electron/resources/app/img/hourtrax.svg | 90 + .../electron/resources/app/img/logo_512.png | Bin 0 -> 31456 bytes .../bin/electron/resources/app/img/pot.svg | 260 + .../electron/resources/app/img/poticon512.png | Bin 0 -> 31211 bytes .../resources/app/img/potlogowhite.svg | 133 + .../bin/electron/resources/app/img/pottop.png | Bin 0 -> 2689 bytes .../electron/resources/app/img/toplogo.png | Bin 0 -> 31456 bytes .../resources/app/index.fingerprint.html | 126 + .../bin/electron/resources/app/js/admin.js | 66 + install/bin/electron/resources/app/js/app.js | 39 + .../electron/resources/app/js/fingerprint.js | 133 + .../electron/resources/app/js/moduleglobal.js | 24 + .../bin/electron/resources/app/js/renderer.js | 83 + .../bin/electron/resources/app/js/request.js | 125 + .../bin/electron/resources/app/js/shell.js | 46 + .../bin/electron/resources/app/js/sqlite.js | 76 + .../bin/electron/resources/app/js/timecalc.js | 129 + .../electron/resources/app/js/timeclock.js | 247 + install/bin/electron/resources/app/main.js | 93 + .../electron/resources/app/package-lock.json | 938 + .../bin/electron/resources/app/package.json | 10 + .../resources/app/vendor/moment/locales.js | 12105 ++++++++ .../app/vendor/moment/locales.min.js | 2 + .../app/vendor/moment/locales.min.js.map | 1 + .../app/vendor/moment/moment-with-locales.js | 17757 +++++++++++ .../vendor/moment/moment-with-locales.min.js | 2 + .../moment/moment-with-locales.min.js.map | 1 + .../resources/app/vendor/moment/moment.js | 5668 ++++ .../resources/app/vendor/moment/moment.min.js | 2 + .../app/vendor/moment/moment.min.js.map | 1 + .../app/vendor/tabulator/css/tabulator.css | 995 + .../vendor/tabulator/css/tabulator.min.css | 3 + .../tabulator/css/tabulator.min.css.map | 1 + .../vendor/tabulator/css/tabulator_site.css | 993 + .../tabulator/css/tabulator_site.min.css | 1 + .../tabulator/css/tabulator_site.min.css.map | 1 + .../tabulator/css/tabulator_site.min.orig.css | 3 + .../vendor/tabulator/js/modules/accessor.js | 93 + .../tabulator/js/modules/accessor.min.js | 2 + .../app/vendor/tabulator/js/modules/ajax.js | 465 + .../vendor/tabulator/js/modules/ajax.min.js | 2 + .../js/modules/calculation_colums.js | 495 + .../js/modules/calculation_colums.min.js | 2 + .../vendor/tabulator/js/modules/clipboard.js | 346 + .../tabulator/js/modules/clipboard.min.js | 2 + .../vendor/tabulator/js/modules/data_tree.js | 492 + .../tabulator/js/modules/data_tree.min.js | 2 + .../vendor/tabulator/js/modules/download.js | 433 + .../tabulator/js/modules/download.min.js | 2 + .../app/vendor/tabulator/js/modules/edit.js | 2109 ++ .../vendor/tabulator/js/modules/edit.min.js | 2 + .../app/vendor/tabulator/js/modules/export.js | 616 + .../vendor/tabulator/js/modules/export.min.js | 2 + .../app/vendor/tabulator/js/modules/filter.js | 807 + .../vendor/tabulator/js/modules/filter.min.js | 2 + .../app/vendor/tabulator/js/modules/format.js | 725 + .../vendor/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 + .../vendor/tabulator/js/modules/group_rows.js | 1087 + .../tabulator/js/modules/group_rows.min.js | 2 + .../vendor/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 + .../app/vendor/tabulator/js/modules/menu.js | 200 + .../vendor/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 + .../vendor/tabulator/js/modules/mutator.js | 116 + .../tabulator/js/modules/mutator.min.js | 2 + .../app/vendor/tabulator/js/modules/page.js | 730 + .../vendor/tabulator/js/modules/page.min.js | 2 + .../tabulator/js/modules/persistence.js | 411 + .../tabulator/js/modules/persistence.min.js | 2 + .../app/vendor/tabulator/js/modules/print.js | 96 + .../vendor/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 + .../vendor/tabulator/js/modules/select_row.js | 417 + .../tabulator/js/modules/select_row.min.js | 2 + .../app/vendor/tabulator/js/modules/sort.js | 571 + .../vendor/tabulator/js/modules/sort.min.js | 2 + .../vendor/tabulator/js/modules/validate.js | 286 + .../tabulator/js/modules/validate.min.js | 2 + .../app/vendor/tabulator/js/tabulator.js | 24907 ++++++++++++++++ .../app/vendor/tabulator/js/tabulator.min.js | 1 + .../vendor/tabulator/js/tabulator.min.orig.js | 12 + .../app/vendor/tabulator/js/tabulator_core.js | 8906 ++++++ .../vendor/tabulator/js/tabulator_core.min.js | 6 + {tools => install/bin}/fp.py | 2 +- {tools => install/bin}/fpunload.sh | 0 install/bin/savewlan.sh | 33 + install/bin/scanwlan.sh | 30 + install/{install.sh => install01.sh} | 103 +- install/install02.sh | 0 install/install03.sh | 0 server/bin/htx_syncdown.pl | 115 - server/bin/htx_syncup.pl | 126 - server/bin/set_crontab.sh | 7 - server/bin/syncpot.sh | 4 - server/conf/elch.conf | 17 - server/conf/pot.conf | 13 - server/lib/ConfigFile.pm | 57 - server/lib/DB/PgSQL.pm | 349 - server/lib/DB/SQLite.pm | 349 - server/lib/SSH.pm | 61 - server/log/2020-10-27.log | 250 - vpn/DKS-VPN-dbs-hourtrax.ovpn | 153 + vpn/DKS-VPN-dhart-hourtrax01.ovpn | 153 + vpn/DKS-VPN-dhart-hourtrax02.ovpn | 153 + vpn/DKS-VPN-dhart-hourtrax03.ovpn | 153 + vpn/DKS-VPN-dks-hourtrax.ovpn | 153 + vpn/DKS-VPN-dks-hourtraxtest.ovpn | 153 + vpn/DKS-VPN-elch-hourtrax.ovpn | 153 + .../vpn => vpn}/DKS-VPN-elch-pothourtrax.ovpn | 0 194 files changed, 92705 insertions(+), 1493 deletions(-) create mode 100644 install/.hourtrax/hourtrax.json create mode 100644 install/.hourtrax/hourtrax.sqlite create mode 100644 install/.hourtrax/ht.sql delete mode 100644 install/.profile create mode 100644 install/bin/electron/resources/app/admin.html create mode 100644 install/bin/electron/resources/app/css/clock.css create mode 100644 install/bin/electron/resources/app/css/clock2.css create mode 100644 install/bin/electron/resources/app/css/fonts/pot.svg create mode 100644 install/bin/electron/resources/app/css/fonts/pot.ttf create mode 100644 install/bin/electron/resources/app/css/fonts/pot.woff create mode 100644 install/bin/electron/resources/app/css/icons.css create mode 100644 install/bin/electron/resources/app/css/theme.css create mode 100644 install/bin/electron/resources/app/css/w3pro.css create mode 100644 install/bin/electron/resources/app/img/POT-logo.png create mode 100644 install/bin/electron/resources/app/img/dks_1000.png create mode 100644 install/bin/electron/resources/app/img/favicon/android-icon-144x144.png create mode 100644 install/bin/electron/resources/app/img/favicon/android-icon-192x192.png create mode 100644 install/bin/electron/resources/app/img/favicon/android-icon-36x36.png create mode 100644 install/bin/electron/resources/app/img/favicon/android-icon-48x48.png create mode 100644 install/bin/electron/resources/app/img/favicon/android-icon-72x72.png create mode 100644 install/bin/electron/resources/app/img/favicon/android-icon-96x96.png create mode 100644 install/bin/electron/resources/app/img/favicon/apple-icon-114x114.png create mode 100644 install/bin/electron/resources/app/img/favicon/apple-icon-120x120.png create mode 100644 install/bin/electron/resources/app/img/favicon/apple-icon-144x144.png create mode 100644 install/bin/electron/resources/app/img/favicon/apple-icon-152x152.png create mode 100644 install/bin/electron/resources/app/img/favicon/apple-icon-180x180.png create mode 100644 install/bin/electron/resources/app/img/favicon/apple-icon-57x57.png create mode 100644 install/bin/electron/resources/app/img/favicon/apple-icon-60x60.png create mode 100644 install/bin/electron/resources/app/img/favicon/apple-icon-72x72.png create mode 100644 install/bin/electron/resources/app/img/favicon/apple-icon-76x76.png create mode 100644 install/bin/electron/resources/app/img/favicon/apple-icon-precomposed.png create mode 100644 install/bin/electron/resources/app/img/favicon/apple-icon.png create mode 100644 install/bin/electron/resources/app/img/favicon/browserconfig.xml create mode 100644 install/bin/electron/resources/app/img/favicon/favicon-16x16.png create mode 100644 install/bin/electron/resources/app/img/favicon/favicon-32x32.png create mode 100644 install/bin/electron/resources/app/img/favicon/favicon-96x96.png create mode 100644 install/bin/electron/resources/app/img/favicon/favicon.ico create mode 100644 install/bin/electron/resources/app/img/favicon/manifest.json create mode 100644 install/bin/electron/resources/app/img/favicon/ms-icon-144x144.png create mode 100644 install/bin/electron/resources/app/img/favicon/ms-icon-150x150.png create mode 100644 install/bin/electron/resources/app/img/favicon/ms-icon-310x310.png create mode 100644 install/bin/electron/resources/app/img/favicon/ms-icon-70x70.png create mode 100644 install/bin/electron/resources/app/img/fingerprint/finger1.svg create mode 100644 install/bin/electron/resources/app/img/fingerprint/finger2.svg create mode 100644 install/bin/electron/resources/app/img/fingerprint/finger3.svg create mode 100644 install/bin/electron/resources/app/img/fingerprint/finger4.svg create mode 100644 install/bin/electron/resources/app/img/fingerprint/finger5.svg create mode 100644 install/bin/electron/resources/app/img/fingerprint/fingerprint-check.svg create mode 100644 install/bin/electron/resources/app/img/fingerprint/fingerprint-crosshair.svg create mode 100644 install/bin/electron/resources/app/img/fingerprint/fingerprint-remove.svg create mode 100644 install/bin/electron/resources/app/img/fingerprint/fingerprint-remove_white.svg create mode 100644 install/bin/electron/resources/app/img/fingerprint/fingerprint-scanning-index.svg create mode 100644 install/bin/electron/resources/app/img/fingerprint/fingerprint-scanning.svg create mode 100644 install/bin/electron/resources/app/img/fingerprint/fingerprint-search.svg create mode 100644 install/bin/electron/resources/app/img/fingerprint/fingerprint-simple.svg create mode 100644 install/bin/electron/resources/app/img/hourtrax copy.svg create mode 100644 install/bin/electron/resources/app/img/hourtrax.png create mode 100644 install/bin/electron/resources/app/img/hourtrax.svg create mode 100644 install/bin/electron/resources/app/img/logo_512.png create mode 100644 install/bin/electron/resources/app/img/pot.svg create mode 100644 install/bin/electron/resources/app/img/poticon512.png create mode 100644 install/bin/electron/resources/app/img/potlogowhite.svg create mode 100644 install/bin/electron/resources/app/img/pottop.png create mode 100644 install/bin/electron/resources/app/img/toplogo.png create mode 100644 install/bin/electron/resources/app/index.fingerprint.html create mode 100644 install/bin/electron/resources/app/js/admin.js create mode 100644 install/bin/electron/resources/app/js/app.js create mode 100644 install/bin/electron/resources/app/js/fingerprint.js create mode 100644 install/bin/electron/resources/app/js/moduleglobal.js create mode 100644 install/bin/electron/resources/app/js/renderer.js create mode 100644 install/bin/electron/resources/app/js/request.js create mode 100644 install/bin/electron/resources/app/js/shell.js create mode 100644 install/bin/electron/resources/app/js/sqlite.js create mode 100644 install/bin/electron/resources/app/js/timecalc.js create mode 100644 install/bin/electron/resources/app/js/timeclock.js create mode 100644 install/bin/electron/resources/app/main.js create mode 100644 install/bin/electron/resources/app/package-lock.json create mode 100644 install/bin/electron/resources/app/package.json create mode 100644 install/bin/electron/resources/app/vendor/moment/locales.js create mode 100644 install/bin/electron/resources/app/vendor/moment/locales.min.js create mode 100644 install/bin/electron/resources/app/vendor/moment/locales.min.js.map create mode 100644 install/bin/electron/resources/app/vendor/moment/moment-with-locales.js create mode 100644 install/bin/electron/resources/app/vendor/moment/moment-with-locales.min.js create mode 100644 install/bin/electron/resources/app/vendor/moment/moment-with-locales.min.js.map create mode 100644 install/bin/electron/resources/app/vendor/moment/moment.js create mode 100644 install/bin/electron/resources/app/vendor/moment/moment.min.js create mode 100644 install/bin/electron/resources/app/vendor/moment/moment.min.js.map create mode 100644 install/bin/electron/resources/app/vendor/tabulator/css/tabulator.css create mode 100644 install/bin/electron/resources/app/vendor/tabulator/css/tabulator.min.css create mode 100644 install/bin/electron/resources/app/vendor/tabulator/css/tabulator.min.css.map create mode 100644 install/bin/electron/resources/app/vendor/tabulator/css/tabulator_site.css create mode 100644 install/bin/electron/resources/app/vendor/tabulator/css/tabulator_site.min.css create mode 100644 install/bin/electron/resources/app/vendor/tabulator/css/tabulator_site.min.css.map create mode 100644 install/bin/electron/resources/app/vendor/tabulator/css/tabulator_site.min.orig.css create mode 100644 install/bin/electron/resources/app/vendor/tabulator/js/modules/accessor.js create mode 100644 install/bin/electron/resources/app/vendor/tabulator/js/modules/accessor.min.js create mode 100644 install/bin/electron/resources/app/vendor/tabulator/js/modules/ajax.js create mode 100644 install/bin/electron/resources/app/vendor/tabulator/js/modules/ajax.min.js create mode 100644 install/bin/electron/resources/app/vendor/tabulator/js/modules/calculation_colums.js create mode 100644 install/bin/electron/resources/app/vendor/tabulator/js/modules/calculation_colums.min.js create mode 100644 install/bin/electron/resources/app/vendor/tabulator/js/modules/clipboard.js create mode 100644 install/bin/electron/resources/app/vendor/tabulator/js/modules/clipboard.min.js create mode 100644 install/bin/electron/resources/app/vendor/tabulator/js/modules/data_tree.js create mode 100644 install/bin/electron/resources/app/vendor/tabulator/js/modules/data_tree.min.js create mode 100644 install/bin/electron/resources/app/vendor/tabulator/js/modules/download.js create mode 100644 install/bin/electron/resources/app/vendor/tabulator/js/modules/download.min.js create mode 100644 install/bin/electron/resources/app/vendor/tabulator/js/modules/edit.js create mode 100644 install/bin/electron/resources/app/vendor/tabulator/js/modules/edit.min.js create mode 100644 install/bin/electron/resources/app/vendor/tabulator/js/modules/export.js create mode 100644 install/bin/electron/resources/app/vendor/tabulator/js/modules/export.min.js create mode 100644 install/bin/electron/resources/app/vendor/tabulator/js/modules/filter.js create mode 100644 install/bin/electron/resources/app/vendor/tabulator/js/modules/filter.min.js create mode 100644 install/bin/electron/resources/app/vendor/tabulator/js/modules/format.js create mode 100644 install/bin/electron/resources/app/vendor/tabulator/js/modules/format.min.js create mode 100644 install/bin/electron/resources/app/vendor/tabulator/js/modules/frozen_columns.js create mode 100644 install/bin/electron/resources/app/vendor/tabulator/js/modules/frozen_columns.min.js create mode 100644 install/bin/electron/resources/app/vendor/tabulator/js/modules/frozen_rows.js create mode 100644 install/bin/electron/resources/app/vendor/tabulator/js/modules/frozen_rows.min.js create mode 100644 install/bin/electron/resources/app/vendor/tabulator/js/modules/group_rows.js create mode 100644 install/bin/electron/resources/app/vendor/tabulator/js/modules/group_rows.min.js create mode 100644 install/bin/electron/resources/app/vendor/tabulator/js/modules/history.js create mode 100644 install/bin/electron/resources/app/vendor/tabulator/js/modules/history.min.js create mode 100644 install/bin/electron/resources/app/vendor/tabulator/js/modules/html_table_import.js create mode 100644 install/bin/electron/resources/app/vendor/tabulator/js/modules/html_table_import.min.js create mode 100644 install/bin/electron/resources/app/vendor/tabulator/js/modules/keybindings.js create mode 100644 install/bin/electron/resources/app/vendor/tabulator/js/modules/keybindings.min.js create mode 100644 install/bin/electron/resources/app/vendor/tabulator/js/modules/menu.js create mode 100644 install/bin/electron/resources/app/vendor/tabulator/js/modules/menu.min.js create mode 100644 install/bin/electron/resources/app/vendor/tabulator/js/modules/moveable_columns.js create mode 100644 install/bin/electron/resources/app/vendor/tabulator/js/modules/moveable_columns.min.js create mode 100644 install/bin/electron/resources/app/vendor/tabulator/js/modules/moveable_rows.js create mode 100644 install/bin/electron/resources/app/vendor/tabulator/js/modules/moveable_rows.min.js create mode 100644 install/bin/electron/resources/app/vendor/tabulator/js/modules/mutator.js create mode 100644 install/bin/electron/resources/app/vendor/tabulator/js/modules/mutator.min.js create mode 100644 install/bin/electron/resources/app/vendor/tabulator/js/modules/page.js create mode 100644 install/bin/electron/resources/app/vendor/tabulator/js/modules/page.min.js create mode 100644 install/bin/electron/resources/app/vendor/tabulator/js/modules/persistence.js create mode 100644 install/bin/electron/resources/app/vendor/tabulator/js/modules/persistence.min.js create mode 100644 install/bin/electron/resources/app/vendor/tabulator/js/modules/print.js create mode 100644 install/bin/electron/resources/app/vendor/tabulator/js/modules/print.min.js create mode 100644 install/bin/electron/resources/app/vendor/tabulator/js/modules/reactive_data.js create mode 100644 install/bin/electron/resources/app/vendor/tabulator/js/modules/reactive_data.min.js create mode 100644 install/bin/electron/resources/app/vendor/tabulator/js/modules/resize_columns.js create mode 100644 install/bin/electron/resources/app/vendor/tabulator/js/modules/resize_columns.min.js create mode 100644 install/bin/electron/resources/app/vendor/tabulator/js/modules/resize_rows.js create mode 100644 install/bin/electron/resources/app/vendor/tabulator/js/modules/resize_rows.min.js create mode 100644 install/bin/electron/resources/app/vendor/tabulator/js/modules/resize_table.js create mode 100644 install/bin/electron/resources/app/vendor/tabulator/js/modules/resize_table.min.js create mode 100644 install/bin/electron/resources/app/vendor/tabulator/js/modules/responsive_layout.js create mode 100644 install/bin/electron/resources/app/vendor/tabulator/js/modules/responsive_layout.min.js create mode 100644 install/bin/electron/resources/app/vendor/tabulator/js/modules/select_row.js create mode 100644 install/bin/electron/resources/app/vendor/tabulator/js/modules/select_row.min.js create mode 100644 install/bin/electron/resources/app/vendor/tabulator/js/modules/sort.js create mode 100644 install/bin/electron/resources/app/vendor/tabulator/js/modules/sort.min.js create mode 100644 install/bin/electron/resources/app/vendor/tabulator/js/modules/validate.js create mode 100644 install/bin/electron/resources/app/vendor/tabulator/js/modules/validate.min.js create mode 100644 install/bin/electron/resources/app/vendor/tabulator/js/tabulator.js create mode 100644 install/bin/electron/resources/app/vendor/tabulator/js/tabulator.min.js create mode 100644 install/bin/electron/resources/app/vendor/tabulator/js/tabulator.min.orig.js create mode 100644 install/bin/electron/resources/app/vendor/tabulator/js/tabulator_core.js create mode 100644 install/bin/electron/resources/app/vendor/tabulator/js/tabulator_core.min.js rename {tools => install/bin}/fp.py (99%) rename {tools => install/bin}/fpunload.sh (100%) create mode 100644 install/bin/savewlan.sh create mode 100644 install/bin/scanwlan.sh rename install/{install.sh => install01.sh} (55%) create mode 100644 install/install02.sh create mode 100644 install/install03.sh delete mode 100644 server/bin/htx_syncdown.pl delete mode 100644 server/bin/htx_syncup.pl delete mode 100644 server/bin/set_crontab.sh delete mode 100644 server/bin/syncpot.sh delete mode 100644 server/conf/elch.conf delete mode 100644 server/conf/pot.conf delete mode 100644 server/lib/ConfigFile.pm delete mode 100644 server/lib/DB/PgSQL.pm delete mode 100644 server/lib/DB/SQLite.pm delete mode 100644 server/lib/SSH.pm delete mode 100644 server/log/2020-10-27.log create mode 100644 vpn/DKS-VPN-dbs-hourtrax.ovpn create mode 100644 vpn/DKS-VPN-dhart-hourtrax01.ovpn create mode 100644 vpn/DKS-VPN-dhart-hourtrax02.ovpn create mode 100644 vpn/DKS-VPN-dhart-hourtrax03.ovpn create mode 100644 vpn/DKS-VPN-dks-hourtrax.ovpn create mode 100644 vpn/DKS-VPN-dks-hourtraxtest.ovpn create mode 100644 vpn/DKS-VPN-elch-hourtrax.ovpn rename {install/vpn => vpn}/DKS-VPN-elch-pothourtrax.ovpn (100%) diff --git a/.hourtrax/hourtrax.sqlite b/.hourtrax/hourtrax.sqlite index 2543329f732e68c734206d523eeb92d0fe971015..55566143b09ec9c3c6d010fbd89689c66bbc2ba1 100644 GIT binary patch delta 282 zcmZo@U~Xt&o**r_j)8%J2Z&)nZlaE{@Hz%PjVxZa*9^Rj)eL+dJewG+Hx_X+ay4hN zvWtt0GqxLU=HqT>j8;g?tSHIMO;yOuD>2bg$VtpgR|s*92+>ghiIx;4CTFJ>6+?xJ zQj1H9GLuU(^Yb7gyj%)U5D?_)>lhTN;O!czppluP$;+j=Ih|RCjftCOb1P>(BMWah z z$k-S}PTsg*Q{2$V*u==d$WYh7NY~Iz!O+0U)X>V%a`J@zBAdT$Tg$-$R2VyX`Tj@% Dx&=s| delta 131 zcmZo@U~Xt&o**r_l7WGN2Z&)nYNC#@@Ja?fjVxZa*9^SO=?r`xJe#;#HWqO*ZdOou z!?-z}S%!^?H+*v|XFVfJvo
+
-

Tappez sur l'écran pour commencer

+

Tappez sur l'écran pour commencer
Tippen Sie auf den Bildschirm, um zu starten

+
+
+ + + + + + + + + + + + + \ No newline at end of file diff --git a/install/bin/electron/resources/app/css/clock.css b/install/bin/electron/resources/app/css/clock.css new file mode 100644 index 0000000..86cd02a --- /dev/null +++ b/install/bin/electron/resources/app/css/clock.css @@ -0,0 +1,236 @@ + + body,html { + overflow: hidden; + margin: 0px; + + } + div { + margin: auto; + } + header { + height: 60px; + padding-left: 5px; + background: linear-gradient(to right, purple, gray); + } + h1 { + padding-top: 5px; + margin-top: 0px; + color: yellow; + } + button { + display: inline-block; + text-decoration: none; + color: #fff; + font-weight: bold; + background-color: #538fbe; + /* padding: 20px 70px; + font-size: 24px; */ + border: 1px solid #2d6898; + background-image: linear-gradient(bottom, rgb(73,132,180) 0%, rgb(97,155,203) 100%); + background-image: -o-linear-gradient(bottom, rgb(73,132,180) 0%, rgb(97,155,203) 100%); + background-image: -moz-linear-gradient(bottom, rgb(73,132,180) 0%, rgb(97,155,203) 100%); + background-image: -webkit-linear-gradient(bottom, rgb(73,132,180) 0%, rgb(97,155,203) 100%); + background-image: -ms-linear-gradient(bottom, rgb(73,132,180) 0%, rgb(97,155,203) 100%); + + background-image: -webkit-gradient( + linear, + left bottom, + left top, + color-stop(0, rgb(73,132,180)), + color-stop(1, rgb(97,155,203)) + ); + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; + text-shadow: 0px -1px 0px rgba(0,0,0,.5); + -webkit-box-shadow: 0px 6px 0px #2b638f, 0px 3px 15px rgba(0,0,0,.4), inset 0px 1px 0px rgba(255,255,255,.3), inset 0px 0px 3px rgba(255,255,255,.5); + -moz-box-shadow: 0px 6px 0px #2b638f, 0px 3px 15px rgba(0,0,0,.4), inset 0px 1px 0px rgba(255,255,255,.3), inset 0px 0px 3px rgba(255,255,255,.5); + box-shadow: 0px 6px 0px #2b638f, 0px 3px 15px rgba(0,0,0,.4), inset 0px 1px 0px rgba(255,255,255,.3), inset 0px 0px 3px rgba(255,255,255,.5); + -webkit-transition: all .1s ease-in-out; + -moz-transition: all .2s ease-in-out; + transition: all .2s ease-in-out; + -webkit-transform: rotateX(20deg); +} + +button:hover { + background-image: linear-gradient(bottom, rgb(79,142,191) 0%, rgb(102,166,214) 100%); + background-image: -o-linear-gradient(bottom, rgb(79,142,191) 0%, rgb(102,166,214) 100%); + background-image: -moz-linear-gradient(bottom, rgb(79,142,191) 0%, rgb(102,166,214) 100%); + background-image: -webkit-linear-gradient(bottom, rgb(79,142,191) 0%, rgb(102,166,214) 100%); + background-image: -ms-linear-gradient(bottom, rgb(79,142,191) 0%, rgb(102,166,214) 100%); + + /* background-image: -webkit-gradient( + linear, + left bottom, + left top, + color-stop(0, rgb(79,142,191)), + color-stop(1, rgb(102,166,214)) + ); */ +} + +button:active { +-webkit-box-shadow: 0px 2px 0px #2b638f, 0px 1px 6px rgba(0,0,0,.4), inset 0px 1px 0px rgba(255,255,255,.3), inset 0px 0px 3px rgba(255,255,255,.5); +-moz-box-shadow: 0px 2px 0px #2b638f, 0px 1px 6px rgba(0,0,0,.4), inset 0px 1px 0px rgba(255,255,255,.3), inset 0px 0px 3px rgba(255,255,255,.5); +box-shadow: 0px 2px 0px #2b638f, 0px 1px 6px rgba(0,0,0,.4), inset 0px 1px 0px rgba(255,255,255,.3), inset 0px 0px 3px rgba(255,255,255,.5); + background-image: linear-gradient(bottom, rgb(88,154,204) 0%, rgb(90,150,199) 100%); + background-image: -o-linear-gradient(bottom, rgb(88,154,204) 0%, rgb(90,150,199) 100%); + background-image: -moz-linear-gradient(bottom, rgb(88,154,204) 0%, rgb(90,150,199) 100%); + background-image: -webkit-linear-gradient(bottom, rgb(88,154,204) 0%, rgb(90,150,199) 100%); + background-image: -ms-linear-gradient(bottom, rgb(88,154,204) 0%, rgb(90,150,199) 100%); + + background-image: -webkit-gradient( + linear, + left bottom, + left top, + color-stop(0, rgb(88,154,204)), + color-stop(1, rgb(90,150,199)) + ); + -webkit-transform: translate(0, 4px) rotateX(20deg); + -moz-transform: translate(0, 4px); + transform: translate(0, 4px); +} + +button:disabled { + background-image: none; + background-color: #f4f4f4; + color: #000; + font-weight: bold; + box-shadow: none; + -webkit-transform: none; +} + /* button { + background-color: lightgrey; + border: 1px solid silver; + outline: none; + } */ + button.user { + height: 90px; + width: 90px; + margin: 10px; + white-space: nowrap; + overflow: hidden; + } + button.btnkeypad { + height: 70px; + width: 70px; + margin: 5px; + font-weight: bold; + font-size: 20px; + white-space: nowrap; + overflow: hidden; + } + button.btntrack { + background-color: + height: 150px; + width: 150px; + margin: 15px; + font-weight: bold; + font-size: 30px; + white-space: nowrap; + overflow: hidden; + } + #scrloader { + display: none; + margin: auto; + border: 1px solid silver; + max-width: 800px; + width: 800px; + height: 430px; + max-height: 430px; + overflow: hidden; + } + #scruserlist { + display: none; + border: 1px solid silver; + max-width: 800px; + width: 800px; + height: 430px; + max-height: 430px; + overflow: hidden; + } + #scruserpin { + display: none; + margin: auto; + border: 1px solid silver; + max-width: 800px; + width: 800px; + height: 430px; + max-height: 430px; + overflow: hidden; + } + #scrnewuserpin { + display: none; + margin: auto; + border: 1px solid silver; + max-width: 800px; + width: 800px; + height: 430px; + max-height: 430px; + overflow: hidden; + } + #scrtimetracker{ + display: none; + margin: auto; + border: 1px solid silver; + max-width: 800px; + width: 800px; + height: 430px; + max-height: 430px; + overflow: hidden; + } + #scrstatus{ + display: none; + margin: auto; + border: 1px solid silver; + max-width: 800px; + width: 800px; + height: 430px; + max-height: 430px; + overflow: hidden; + } + #keypad { + border: 1px solid silver; + width: 270px; + margin: auto; + } + #timetracker{ + border: 1px solid silver; + width: 400px; + margin: auto; + margin-top: 20px; + text-align: center; + } + div.pincode { + text-align: center; + } + #pincode,#newpincode1,#newpincode2 { + min-height: 30px; + border: 1px solid silver; + width: 270px; + margin: auto; + text-align: center; + font-weight: bold; + font-size: 10px; + } + #newpincode1,#newpincode2{ + width: 135px; + } + .usergreeting { + text-align: center; + } + #pinmessage, #pinmessage2 { + height: 30px; + display: block; + color: red; + font-weight: bold; + text-align: center; + } + #lasttrackin,#lasttrackout { + font-size: 12px; + color: #000; + font-weight: bold; + } + + +/* screenheight: 480;*/ +/* screenwidth: 80px;*/ \ No newline at end of file diff --git a/install/bin/electron/resources/app/css/clock2.css b/install/bin/electron/resources/app/css/clock2.css new file mode 100644 index 0000000..9886d0c --- /dev/null +++ b/install/bin/electron/resources/app/css/clock2.css @@ -0,0 +1,5 @@ +.btnkeypad { + height: 75px; + font-weight: bold; + font-size: 30px; +} \ No newline at end of file diff --git a/install/bin/electron/resources/app/css/fonts/pot.svg b/install/bin/electron/resources/app/css/fonts/pot.svg new file mode 100644 index 0000000..50fc98e --- /dev/null +++ b/install/bin/electron/resources/app/css/fonts/pot.svg @@ -0,0 +1,133 @@ + + + +Generated by IcoMoon + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/install/bin/electron/resources/app/css/fonts/pot.ttf b/install/bin/electron/resources/app/css/fonts/pot.ttf new file mode 100644 index 0000000000000000000000000000000000000000..6540b7d17e0fe813f0d8802de80bcac03b3f2764 GIT binary patch literal 36644 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 GKmP|D$)-U7 literal 0 HcmV?d00001 diff --git a/install/bin/electron/resources/app/css/icons.css b/install/bin/electron/resources/app/css/icons.css new file mode 100644 index 0000000..31ff8ba --- /dev/null +++ b/install/bin/electron/resources/app/css/icons.css @@ -0,0 +1,464 @@ +@font-face { + font-family: 'pot'; + src: + url('fonts/pot.ttf?mtlchg') format('truetype'), + url('fonts/pot.woff?mtlchg') format('woff'), + url('fonts/pot.svg?mtlchg#pot') format('svg'); + font-weight: normal; + font-style: normal; + font-display: block; +} + +[class^="icon-"], [class*=" icon-"] { + /* use !important to prevent issues with browser extensions that change fonts */ + font-family: 'pot' !important; + speak: never; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + + /* Better Font Rendering =========== */ + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.icon-entry:before { + content: "\e97a"; +} +.icon-settings:before { + content: "\e974"; +} +.icon-dataset:before { + content: "\e930"; +} +.icon-check:before { + content: "\e931"; +} +.icon-pause:before { + content: "\e900"; +} +.icon-duplicate:before { + content: "\e949"; +} +.icon-finger1:before { + content: "\e955"; +} +.icon-finger2:before { + content: "\e956"; +} +.icon-finger3:before { + content: "\e957"; +} +.icon-finger4:before { + content: "\e958"; +} +.icon-finger5:before { + content: "\e959"; +} +.icon-fingerprint-check:before { + content: "\e95a"; +} +.icon-fingerprint-crosshair:before { + content: "\e95b"; +} +.icon-fingerprint-remove:before { + content: "\e95c"; +} +.icon-fingerprint-scanning:before { + content: "\e95e"; +} +.icon-fingerprint-scanning-index .path1:before { + content: "\e95f"; + color: rgb(0, 0, 0); +} +.icon-fingerprint-scanning-index .path2:before { + content: "\e960"; + margin-left: -1em; + color: rgb(0, 0, 0); +} +.icon-fingerprint-scanning-index .path3:before { + content: "\e961"; + margin-left: -1em; + color: rgb(0, 0, 0); +} +.icon-fingerprint-scanning-index .path4:before { + content: "\e962"; + margin-left: -1em; + color: rgb(0, 0, 0); +} +.icon-fingerprint-scanning-index .path5:before { + content: "\e963"; + margin-left: -1em; + color: rgb(0, 0, 0); +} +.icon-fingerprint-scanning-index .path6:before { + content: "\e964"; + margin-left: -1em; + color: rgb(0, 0, 0); +} +.icon-fingerprint-scanning-index .path7:before { + content: "\e965"; + margin-left: -1em; + color: rgb(0, 0, 0); +} +.icon-fingerprint-scanning-index .path8:before { + content: "\e966"; + margin-left: -1em; + color: rgb(0, 0, 0); +} +.icon-fingerprint-scanning-index .path9:before { + content: "\e967"; + margin-left: -1em; + color: rgb(0, 0, 0); +} +.icon-fingerprint-scanning-index .path10:before { + content: "\e968"; + margin-left: -1em; + color: rgb(0, 0, 0); + opacity: 0.4; +} +.icon-fingerprint-scanning-index .path11:before { + content: "\e969"; + margin-left: -1em; + color: rgb(0, 0, 0); + opacity: 0.4; +} +.icon-fingerprint-scanning-index .path12:before { + content: "\e96a"; + margin-left: -1em; + color: rgb(0, 0, 0); + opacity: 0.4; +} +.icon-fingerprint-scanning-index .path13:before { + content: "\e96b"; + margin-left: -1em; + color: rgb(0, 0, 0); + opacity: 0.4; +} +.icon-fingerprint-scanning-index .path14:before { + content: "\e96c"; + margin-left: -1em; + color: rgb(0, 0, 0); + opacity: 0.4; +} +.icon-fingerprint-scanning-index .path15:before { + content: "\e96d"; + margin-left: -1em; + color: rgb(0, 0, 0); +} +.icon-fingerprint-scanning-index .path16:before { + content: "\e96e"; + margin-left: -1em; + color: rgb(0, 0, 0); +} +.icon-fingerprint-scanning-index .path17:before { + content: "\e96f"; + margin-left: -1em; + color: rgb(0, 0, 0); +} +.icon-fingerprint-scanning-index .path18:before { + content: "\e970"; + margin-left: -1em; + color: rgb(0, 0, 0); +} +.icon-fingerprint-scanning-index .path19:before { + content: "\e971"; + margin-left: -1em; + color: rgb(0, 0, 0); +} +.icon-fingerprint-search:before { + content: "\e972"; +} +.icon-fingerprint-simple:before { + content: "\e973"; +} +.icon-calendar:before { + content: "\e901"; +} +.icon-clocktime:before { + content: "\e902"; +} +.icon-cube:before { + content: "\e903"; +} +.icon-cubelight:before { + content: "\e904"; +} +.icon-dashboard:before { + content: "\e905"; +} +.icon-history:before { + content: "\e906"; +} +.icon-usertime:before { + content: "\e954"; +} +.icon-replace:before { + content: "\e94c"; +} +.icon-week:before { + content: "\e94d"; +} +.icon-baggage:before { + content: "\e94e"; +} +.icon-trash:before { + content: "\e94f"; +} +.icon-erase:before { + content: "\e950"; +} +.icon-paste:before { + content: "\e94a"; +} +.icon-copy:before { + content: "\e94b"; +} +.icon-sendemail:before { + content: "\e946"; +} +.icon-exit:before { + content: "\e947"; +} +.icon-key:before { + content: "\e948"; +} +.icon-back:before { + content: "\e944"; +} +.icon-next:before { + content: "\e945"; +} +.icon-staff:before { + content: "\e943"; +} +.icon-shop:before { + content: "\e907"; +} +.icon-template:before { + content: "\e908"; +} +.icon-remove:before { + content: "\e909"; +} +.icon-access:before { + content: "\e90a"; +} +.icon-address:before { + content: "\e90b"; +} +.icon-apps:before { + content: "\e90c"; +} +.icon-archive:before { + content: "\e90d"; +} +.icon-calendar1:before { + content: "\e90e"; +} +.icon-code:before { + content: "\e90f"; +} +.icon-coin:before { + content: "\e910"; +} +.icon-company:before { + content: "\e911"; +} +.icon-cube1:before { + content: "\e912"; +} +.icon-cubelight1:before { + content: "\e913"; +} +.icon-dashboard1:before { + content: "\e914"; +} +.icon-datarefresh:before { + content: "\e915"; +} +.icon-documentsave:before { + content: "\e916"; +} +.icon-documents:before { + content: "\e917"; +} +.icon-download:before { + content: "\e918"; +} +.icon-duplicate1:before { + content: "\e919"; +} +.icon-edit:before { + content: "\e91a"; +} +.icon-excel:before { + content: "\e91b"; +} +.icon-expand:before { + content: "\e91c"; +} +.icon-file:before { + content: "\e91d"; +} +.icon-Floppy:before { + content: "\e91e"; +} +.icon-folder:before { + content: "\e91f"; +} +.icon-folder_add:before { + content: "\e920"; +} +.icon-folder_delete:before { + content: "\e921"; +} +.icon-folder_find:before { + content: "\e922"; +} +.icon-globe:before { + content: "\e923"; +} +.icon-group:before { + content: "\e924"; +} +.icon-home:before { + content: "\e925"; +} +.icon-inbox:before { + content: "\e926"; +} +.icon-library:before { + content: "\e927"; +} +.icon-license:before { + content: "\e928"; +} +.icon-list:before { + content: "\e929"; +} +.icon-log:before { + content: "\e92a"; +} +.icon-logout:before { + content: "\e92b"; +} +.icon-menu:before { + content: "\e92c"; +} +.icon-newspaper:before { + content: "\e92d"; +} +.icon-numberlist:before { + content: "\e92e"; +} +.icon-package:before { + content: "\e92f"; +} +.icon-pay:before { + content: "\e932"; +} +.icon-pdf:before { + content: "\e933"; +} +.icon-pdfexport:before { + content: "\e934"; +} +.icon-pictures:before { + content: "\e935"; +} +.icon-plus:before { + content: "\e936"; +} +.icon-poticon .path1:before { + content: "\e937"; + color: rgb(0, 50, 104); +} +.icon-poticon .path2:before { + content: "\e938"; + margin-left: -1em; + color: rgb(0, 50, 104); +} +.icon-poticon .path3:before { + content: "\e939"; + margin-left: -1em; + color: rgb(0, 50, 104); +} +.icon-poticon .path4:before { + content: "\e93a"; + margin-left: -1em; + color: rgb(0, 50, 104); +} +.icon-poticon .path5:before { + content: "\e93b"; + margin-left: -1em; + color: rgb(0, 50, 104); +} +.icon-poticon .path6:before { + content: "\e93c"; + margin-left: -1em; + color: rgb(255, 255, 255); +} +.icon-poticon .path7:before { + content: "\e93d"; + margin-left: -1em; + color: rgb(255, 255, 255); +} +.icon-poticon .path8:before { + content: "\e93e"; + margin-left: -1em; + color: rgb(255, 255, 255); +} +.icon-poticon .path9:before { + content: "\e93f"; + margin-left: -1em; + color: rgb(255, 255, 255); +} +.icon-poticon .path10:before { + content: "\e940"; + margin-left: -1em; + color: rgb(255, 255, 255); +} +.icon-poticon .path11:before { + content: "\e941"; + margin-left: -1em; + color: rgb(255, 255, 255); +} +.icon-poticon .path12:before { + content: "\e942"; + margin-left: -1em; + color: rgb(255, 255, 255); +} +.icon-poticon .path13:before { + content: "\e951"; + margin-left: -1em; + color: rgb(0, 91, 206); +} +.icon-poticon .path14:before { + content: "\e952"; + margin-left: -1em; + color: rgb(0, 50, 104); +} +.icon-projects:before { + content: "\e953"; +} +.icon-rename:before { + content: "\e95d"; +} +.icon-Save:before { + content: "\e975"; +} +.icon-squares:before { + content: "\e976"; +} +.icon-table:before { + content: "\e977"; +} +.icon-upload:before { + content: "\e978"; +} +.icon-user:before { + content: "\e979"; +} diff --git a/install/bin/electron/resources/app/css/theme.css b/install/bin/electron/resources/app/css/theme.css new file mode 100644 index 0000000..411bb54 --- /dev/null +++ b/install/bin/electron/resources/app/css/theme.css @@ -0,0 +1,1066 @@ +/* W3PRO.CSS 4.13 June 2019 by Jan Egil and Borge Refsnes */ +html{box-sizing:border-box}*,*:before,*:after{box-sizing:inherit} +/* Extract from normalize.css by Nicolas Gallagher and Jonathan Neal git.io/normalize */ +html{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0} +html,body {-webkit-user-select: none;-ms-user-select: none;user-select: none;-moz-user-select:none;} +article,aside,details,figcaption,figure,footer,header,main,menu,nav,section{display:block}summary{display:list-item} +audio,canvas,progress,video{display:inline-block}progress{vertical-align:baseline} +audio:not([controls]){display:none;height:0}[hidden],template{display:none} +a{background-color:transparent}a:active,a:hover{outline-width:0} +abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted} +b,strong{font-weight:bolder}dfn{font-style:italic}mark{background:#ff0;color:#000} +small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline} +sub{bottom:-0.25em}sup{top:-0.5em}figure{margin:1em 40px}img{border-style:none} +code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}hr{box-sizing:content-box;height:0;overflow:visible} +button,input,select,textarea,optgroup{font:inherit;margin:0}optgroup{font-weight:bold} +button,input{overflow:visible}button,select{text-transform:none} +button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button} +button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{border-style:none;padding:0} +button:-moz-focusring,[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring{outline:1px dotted ButtonText} +fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:.35em .625em .75em} +legend{color:inherit;display:table;max-width:100%;padding:0;white-space:normal}textarea{overflow:auto} +[type=checkbox],[type=radio]{padding:0} +[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto} +[type=search]{-webkit-appearance:textfield;outline-offset:-2px} +[type=search]::-webkit-search-decoration{-webkit-appearance:none} +::-webkit-file-upload-button{-webkit-appearance:button;font:inherit} +/* End extract */ +/* html,body { + background-color: #52638e; +} */ +html,body{font-family:Verdana,sans-serif;font-size:10pt;line-height:1.5}html{overflow-x:hidden} +h1{font-size:36px}h2{font-size:30px}h3{font-size:24px}h4{font-size:20px}h5{font-size:18px}h6{font-size:16px}.serif{font-family:serif} +h1,h2,h3,h4,h5,h6{font-family:"Segoe UI",Arial,sans-serif;font-weight:400;margin: 0}.wide{letter-spacing:4px} +hr{border:0;border-top:1px solid #eee;margin:20px 0} +.img{max-width:100%;height:auto; vertical-align:middle}a{color:inherit} +.table,.table-all{border-collapse:collapse;border-spacing:0;width:100%;display:table}.table-all{border:1px solid #ccc} +.bordered tr,.table-all tr{border-bottom:1px solid #ddd}.striped tbody tr:nth-child(even){background-color:#f1f1f1} +.table-all tr:nth-child(odd){background-color:#fff}.table-all tr:nth-child(even){background-color:#f1f1f1} +.hoverable tbody tr:hover,.ul.hoverable li:hover{background-color:#ccc}.centered tr th,.centered tr td{text-align:center} +.table td,.table th,.table-all td,.table-all th{padding:8px 8px;display:table-cell;text-align:left;vertical-align:top} +.table th:first-child,.table td:first-child,.table-all th:first-child,.table-all td:first-child{padding-left:16px} +.btn,.button{border:none;display:inline-block;padding:8px 16px;vertical-align:middle;overflow:hidden;text-decoration:none;color:inherit;background-color:inherit;text-align:center;cursor:pointer;white-space:nowrap} +.btn:hover{box-shadow:0 8px 16px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19)} +.btn,.button{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none} +.disabled,.btn:disabled,.button:disabled{cursor:not-allowed;background-color: #e6e6e6}.disabled *,:disabled *{pointer-events:none} +.btn.disabled:hover,.btn:disabled:hover{box-shadow:none} +.badge,.tag{background-color:#000;color:#fff;display:inline-block;padding-left:8px;padding-right:8px;text-align:center}.badge{border-radius:50%} +.ul{list-style-type:none;padding:0;margin:0}.ul li{padding:8px 16px;border-bottom:1px solid #ddd}.ul li:last-child{border-bottom:none} +.tooltip,.display-container{position:relative}.tooltip .text{display:none}.tooltip:hover .text{display:inline-block} +.ripple:active{opacity:0.5}.ripple{transition:opacity 0s} +.input{padding:6px;display:block;border: 1px solid #ccc;width:100%;background-color: #fff; }/*#e8f0fe*/ +.select{padding:2px 0; display:block;width:100%;border:1px solid #ccc;background-color: #fff;} +.dropdown-click,.dropdown-hover{position:relative;display:inline-block;cursor:pointer} +.dropdown-hover:hover .dropdown-content{display:block; } +.dropdown-hover:first-child,.dropdown-click:hover{background-color:#ccc;color:#000} +.dropdown-hover:hover > .button:first-child,.dropdown-click:hover > .button:first-child{background-color:#ccc;color:#000} +.dropdown-content{cursor:auto;color:#000;background-color:#fff;display:none;position:absolute;min-width:160px;margin:0;padding:0;z-index:1} +.check,.radio{width:24px;height:24px;position:relative;top:6px} +.sidebar{height:100%;width:160px;background-color:#fff;position:fixed!important;z-index:1;overflow:auto} +.bar-block .dropdown-hover,.bar-block .dropdown-click{width:100%} +.bar-block .dropdown-hover .dropdown-content,.bar-block .dropdown-click .dropdown-content{min-width:100%} +.bar-block .dropdown-hover .button,.bar-block .dropdown-click .button{width:100%;text-align:left;padding:8px 16px} +.main,#main{transition:margin-left .4s} +.modal{z-index:3;display:none;padding-top:100px;position:fixed;left:0;top:0;width:100%;height:100%;overflow:auto;background-color:rgb(0,0,0);background-color:rgba(0,0,0,0.4)} +.modal-content{margin:auto;background-color:#fff;position:relative;padding:0;outline:0;width:600px} +.bar{width:100%}.center .bar{display:inline-block;width:auto} +.bar .bar-item{padding:8px 16px;float:left;width:auto;border:none;display:block;outline:0} +.bar .dropdown-hover,.bar .dropdown-click{position:static;float:left} +.bar .button{white-space:normal} +.bar-block .bar-item{width:100%;display:block;padding:8px 16px;text-align:left;border:none;white-space:normal;float:none;outline:0} +.bar-block.center .bar-item{text-align:center}.block{display:block;width:100%} +.responsive{display:block;overflow-x:auto} +.container:after,.container:before,.datapanel:after,.datapanel:before,.row:after,.row:before,.row-padding:after,.row-padding:before, +.cell-row:before,.cell-row:after,.clear:after,.clear:before,.bar:before,.bar:after{content:"";display:table;clear:both} +.col,.half,.third,.twothird,.threequarter,.quarter,.fifth,.twofifth,.threefifth,.fourfifth{float:left;width:100%} +.col.s1{width:8.33333%}.col.s2{width:16.66666%}.col.s3{width:24.99999%}.col.s4{width:33.33333%} +.col.s5{width:41.66666%}.col.s6{width:49.99999%}.col.s7{width:58.33333%}.col.s8{width:66.66666%} +.col.s9{width:74.99999%}.col.s10{width:83.33333%}.col.s11{width:91.66666%}.col.s12{width:99.99999%} +@media (min-width:601px){.col.m1{width:8.33333%}.col.m2{width:16.66666%}.col.m3,.quarter{width:24.99999%}.col.m4,.third{width:33.33333%}.fifth{width:20%;min-width:100px} +.col.m5{width:41.66666%}.col.m6,.half{width:49.99999%}.col.m7{width:58.33333%}.col.m8,.twothird{width:66.66666%} +.col.m9,.threequarter{width:74.99999%}.col.m10{width:83.33333%}.col.m11{width:91.66666%}.col.m12{width:99.99999%}.twofifth{width:40%}.threefifth{width:60%}.fourfifth{width:80%}} +@media (min-width:993px){.col.l1{width:8.33333%}.col.l2{width:16.66666%}.col.l3{width:24.99999%}.col.l4{width:33.33333%} +.col.l5{width:41.66666%}.col.l6{width:49.99999%}.col.l7{width:58.33333%}.col.l8{width:66.66666%} +.col.l9{width:74.99999%}.col.l10{width:83.33333%}.col.l11{width:91.66666%}.col.l12{width:99.99999%}} +.rest{overflow:hidden}.stretch{margin-left:-16px;margin-right:-16px} +.content,.auto{margin-left:auto;margin-right:auto}.content{max-width:980px}.auto{max-width:1140px} +.cell-row{display:table;width:100%}.cell{display:table-cell;vertical-align: top;} +.cell-top{vertical-align:top}.cell-middle{vertical-align:middle}.cell-bottom{vertical-align:bottom} +.hide{display:none!important}.show-block,.show{display:block!important}.show-inline-block{display:inline-block!important} +@media (max-width:1205px){.auto{max-width:95%}} +@media (max-width:600px){.modal-content{margin:0 10px;width:auto!important}.modal{padding-top:30px} +.dropdown-hover.mobile .dropdown-content,.dropdown-click.mobile .dropdown-content{position:relative} +.hide-small{display:none!important}.mobile{display:block;width:100%!important}.bar-item.mobile,.dropdown-hover.mobile,.dropdown-click.mobile{text-align:center} +.dropdown-hover.mobile,.dropdown-hover.mobile .btn,.dropdown-hover.mobile .button,.dropdown-click.mobile,.dropdown-click.mobile .btn,.dropdown-click.mobile .button{width:100%}} +@media (max-width:768px){.modal-content{width:500px}.modal{padding-top:50px}} +@media (min-width:993px){.modal-content{width:900px}.hide-large{display:none!important}.sidebar.collapse{display:block!important}} +@media (max-width:992px) and (min-width:601px){.hide-medium{display:none!important}} +@media (max-width:992px){.sidebar.collapse{display:none}.main{margin-left:0!important;margin-right:0!important}.auto{max-width:100%}} +.top,.bottom{position:fixed;width:100%;z-index:1}.top{top:0}.bottom{bottom:0} +.overlay{position:fixed;display:none;width:100%;height:100%;top:0;left:0;right:0;bottom:0;background-color:rgba(0,0,0,0.5);z-index:2} +.display-topleft{position:absolute;left:0;top:0}.display-topright{position:absolute;right:0;top:0} +.display-bottomleft{position:absolute;left:0;bottom:0}.display-bottomright{position:absolute;right:0;bottom:0} +.display-middle{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%)} +.display-left{position:absolute;top:50%;left:0%;transform:translate(0%,-50%);-ms-transform:translate(-0%,-50%)} +.display-right{position:absolute;top:50%;right:0%;transform:translate(0%,-50%);-ms-transform:translate(0%,-50%)} +.display-topmiddle{position:absolute;left:50%;top:0;transform:translate(-50%,0%);-ms-transform:translate(-50%,0%)} +.display-bottommiddle{position:absolute;left:50%;bottom:0;transform:translate(-50%,0%);-ms-transform:translate(-50%,0%)} +.display-container:hover .display-hover{display:block}.display-container:hover span.display-hover{display:inline-block}.display-hover{display:none} +.display-position{position:absolute} +.circle{border-radius:50%} +.round-small{border-radius:2px}.round,.round-medium{border-radius:4px}.round-large{border-radius:8px}.round-xlarge{border-radius:16px}.round-xxlarge{border-radius:32px} +.row-padding,.row-padding>.half,.row-padding>.third,.row-padding>.twothird,.row-padding>.threequarter,.row-padding>.quarter,.row-padding>.col{padding:0 8px} +.container,.datapanel{padding:0.01em 8px}.datapanel{margin-top:8px;margin-bottom:8px} +.code,.codespan{font-family:Consolas,"courier new";font-size:16px} +.code{width:auto;background-color:#fff;padding:8px 12px;border-left:4px solid #4CAF50;word-wrap:break-word} +.codespan{color:crimson;background-color:#f1f1f1;padding-left:4px;padding-right:4px;font-size:110%} +.card,.card-2{box-shadow:0 2px 5px 0 rgba(0,0,0,0.16)} +.card-4,.hover-shadow:hover{box-shadow:0 4px 10px 0 rgba(0,0,0,0.2),0 4px 20px 0 rgba(0,0,0,0.19)} +.spin{animation:spin 2s infinite linear}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(359deg)}} +.animate-fading{animation:fading 2s infinite}@keyframes fading{0%{opacity:0}50%{opacity:1}100%{opacity:0}} +.animate-opacity{animation:opac 0.8s}@keyframes opac{from{opacity:0} to{opacity:1}} +.animate-top{position:relative;animation:animatetop 1s}@keyframes animatetop{from{top:-300px;opacity:0} to{top:0;opacity:1}} +.animate-left{position:relative;animation:animateleft 0.4s}@keyframes animateleft{from{left:-300px;opacity:0} to{left:0;opacity:1}} +.animate-right{position:relative;animation:animateright 0.4s}@keyframes animateright{from{right:-300px;opacity:0} to{right:0;opacity:1}} +.animate-bottom{position:relative;animation:animatebottom 1s}@keyframes animatebottom{from{bottom:-300px;opacity:0} to{bottom:0;opacity:1}} +.animate-zoom {animation:animatezoom 0.6s}@keyframes animatezoom{from{transform:scale(0)} to{transform:scale(1)}} +.animate-input{transition:width 0.4s ease-in-out}.animate-input:focus{width:100%!important} +.opacity,.hover-opacity:hover{opacity:0.60}.opacity-off,.hover-opacity-off:hover{opacity:1} +.opacity-max{opacity:0.25}.opacity-min{opacity:0.75} +.greyscale-max,.grayscale-max,.hover-greyscale:hover,.hover-grayscale:hover{filter:grayscale(100%)} +.greyscale,.grayscale{filter:grayscale(75%)}.greyscale-min,.grayscale-min{filter:grayscale(50%)} +.sepia{filter:sepia(75%)}.sepia-max,.hover-sepia:hover{filter:sepia(100%)}.sepia-min{filter:sepia(50%)} +.tiny{font-size:10px!important}.small{font-size:12px!important}.medium{font-size:15px!important}.large{font-size:18px!important} +.xlarge{font-size:24px!important}.xxlarge{font-size:36px!important}.xxxlarge{font-size:48px!important}.jumbo{font-size:64px!important} +.left-align{text-align:left!important}.right-align{text-align:right!important}.justify{text-align:justify!important}.center{text-align:center!important} +.border-0{border:0!important}.border{border:1px solid #ccc!important} +.border-top{border-top:1px solid #ccc!important}.border-bottom{border-bottom:1px solid #ccc!important} +.border-left{border-left:1px solid #ccc!important}.border-right{border-right:1px solid #ccc!important} +.topbar{border-top:6px solid #ccc!important}.bottombar{border-bottom:6px solid #ccc!important} +.leftbar{border-left:6px solid #ccc!important}.rightbar{border-right:6px solid #ccc!important} +.section,.code{margin-top:16px!important;margin-bottom:16px!important} +.margin{margin:16px!important}.margin-top{margin-top:16px!important}.margin-bottom{margin-bottom:16px!important} +.margin-left{margin-left:16px!important}.margin-right{margin-right:16px!important} +.padding-small{padding:4px 8px!important}.padding{padding:8px 16px!important}.padding-large{padding:12px 24px!important} +.padding-16{padding-top:16px!important;padding-bottom:16px!important}.padding-24{padding-top:24px!important;padding-bottom:24px!important} +.padding-32{padding-top:32px!important;padding-bottom:32px!important}.padding-48{padding-top:48px!important;padding-bottom:48px!important} +.padding-64{padding-top:64px!important;padding-bottom:64px!important} +.left{float:left!important}.right{float:right!important} +.button:hover{color:#fff!important;background-color:#343434!important} +.transparent,.hover-none:hover{background-color:transparent!important} +.hover-none:hover{box-shadow:none!important} +/* DEFAULT COLORS */ +.amber,.hover-amber:hover{color:#000!important;background-color:#ffc107!important} +.aqua,.hover-aqua:hover{color:#000!important;background-color:#00ffff!important} +.blue,.hover-blue:hover{color:#fff!important;background-color:#2196F3!important} +.light-blue,.hover-light-blue:hover{color:#000!important;background-color:#87CEEB!important} +.brown,.hover-brown:hover{color:#fff!important;background-color:#795548!important} +.cyan,.hover-cyan:hover{color:#000!important;background-color:#00bcd4!important} +.blue-grey,.hover-blue-grey:hover{color:#fff!important;background-color:#607d8b!important} +.green,.hover-green:hover{color:#fff!important;background-color:#4CAF50!important} +.light-green,.hover-light-green:hover{color:#000!important;background-color:#8bc34a!important} +.indigo,.hover-indigo:hover{color:#fff!important;background-color:#3f51b5!important} +.khaki,.hover-khaki:hover{color:#000!important;background-color:#f0e68c!important} +.lime,.hover-lime:hover{color:#000!important;background-color:#cddc39!important} +.orange,.hover-orange:hover{color:#000!important;background-color:#ff9800!important} +.deep-orange,.hover-deep-orange:hover{color:#fff!important;background-color:#ff5722!important} +.pink,.hover-pink:hover{color:#fff!important;background-color:#e91e63!important} +.purple,.hover-purple:hover{color:#fff!important;background-color:#9c27b0!important} +.deep-purple,.hover-deep-purple:hover{color:#fff!important;background-color:#673ab7!important} +.red,.hover-red:hover{color:#fff!important;background-color:#f44336!important} +.sand,.hover-sand:hover{color:#000!important;background-color:#fdf5e6!important} +.teal,.hover-teal:hover{color:#fff!important;background-color:#009688!important} +.yellow,.hover-yellow:hover{color:#000!important;background-color:#ffeb3b!important} +.white,.hover-white:hover{color:#000!important;background-color:#fff!important} +.black,.hover-black:hover{color:#fff!important;background-color:#000!important} +.grey,.hover-grey:hover{color:#000!important;background-color:#9e9e9e!important} +.light-grey,.hover-light-grey:hover{color:#000!important;background-color:#f1f1f1!important} +.dark-grey,.hover-dark-grey:hover{color:#fff!important;background-color:#616161!important} +.pale-red,.hover-pale-red:hover{color:#000!important;background-color:#ffe7e7!important}.pale-green,.hover-pale-green:hover{color:#000!important;background-color:#e7ffe7!important} +.pale-yellow,.hover-pale-yellow:hover{color:#000!important;background-color:#ffffd7!important}.pale-blue,.hover-pale-blue:hover{color:#000!important;background-color:#e7ffff!important} +.text-align-right { text-align: right;} +.text-amber,.hover-text-amber:hover{color:#ffc107!important} +.text-aqua,.hover-text-aqua:hover{color:#00ffff!important} +.text-blue,.hover-text-blue:hover{color:#2196F3!important} +.text-light-blue,.hover-text-light-blue:hover{color:#87CEEB!important} +.text-brown,.hover-text-brown:hover{color:#795548!important} +.text-cyan,.hover-text-cyan:hover{color:#00bcd4!important} +.text-blue-grey,.hover-text-blue-grey:hover{color:#607d8b!important} +.text-green,.hover-text-green:hover{color:#4CAF50!important} +.text-light-green,.hover-text-light-green:hover{color:#8bc34a!important} +.text-indigo,.hover-text-indigo:hover{color:#3f51b5!important} +.text-khaki,.hover-text-khaki:hover{color:#b4aa50!important} +.text-lime,.hover-text-lime:hover{color:#cddc39!important} +.text-orange,.hover-text-orange:hover{color:#ff9800!important} +.text-deep-orange,.hover-text-deep-orange:hover{color:#ff5722!important} +.text-pink,.hover-text-pink:hover{color:#e91e63!important} +.text-purple,.hover-text-purple:hover{color:#9c27b0!important} +.text-deep-purple,.hover-text-deep-purple:hover{color:#673ab7!important} +.text-red,.hover-text-red:hover{color:#f44336!important} +.text-sand,.hover-text-sand:hover{color:#fdf5e6!important} +.text-teal,.hover-text-teal:hover{color:#009688!important} +.text-yellow,.hover-text-yellow:hover{color:#d2be0e!important} +.text-white,.hover-text-white:hover{color:#fff!important} +.text-black,.hover-text-black:hover{color:#000!important} +.text-grey,.hover-text-grey:hover{color:#757575!important} +.text-light-grey,.hover-text-light-grey:hover{color:#f1f1f1!important} +.text-dark-grey,.hover-text-dark-grey:hover{color:#3a3a3a!important} +.border-amber,.hover-border-amber:hover{border-color:#ffc107!important} +.border-aqua,.hover-border-aqua:hover{border-color:#00ffff!important} +.border-blue,.hover-border-blue:hover{border-color:#2196F3!important} +.border-light-blue,.hover-border-light-blue:hover{border-color:#87CEEB!important} +.border-brown,.hover-border-brown:hover{border-color:#795548!important} +.border-cyan,.hover-border-cyan:hover{border-color:#00bcd4!important} +.border-blue-grey,.hover-blue-grey:hover{border-color:#607d8b!important} +.border-green,.hover-border-green:hover{border-color:#4CAF50!important} +.border-light-green,.hover-border-light-green:hover{border-color:#8bc34a!important} +.border-indigo,.hover-border-indigo:hover{border-color:#3f51b5!important} +.border-khaki,.hover-border-khaki:hover{border-color:#f0e68c!important} +.border-lime,.hover-border-lime:hover{border-color:#cddc39!important} +.border-orange,.hover-border-orange:hover{border-color:#ff9800!important} +.border-deep-orange,.hover-border-deep-orange:hover{border-color:#ff5722!important} +.border-pink,.hover-border-pink:hover{border-color:#e91e63!important} +.border-purple,.hover-border-purple:hover{border-color:#9c27b0!important} +.border-deep-purple,.hover-border-deep-purple:hover{border-color:#673ab7!important} +.border-red,.hover-border-red:hover{border-color:#f44336!important} +.border-sand,.hover-border-sand:hover{border-color:#fdf5e6!important} +.border-teal,.hover-border-teal:hover{border-color:#009688!important} +.border-yellow,.hover-border-yellow:hover{border-color:#ffeb3b!important} +.border-white,.hover-border-white:hover{border-color:#fff!important} +.border-black,.hover-border-black:hover{border-color:#000!important} +.border-grey,.hover-border-grey:hover{border-color:#9e9e9e!important} +.border-light-grey,.hover-border-light-grey:hover{border-color:#f1f1f1!important} +.border-dark-grey,.hover-border-dark-grey:hover{border-color:#616161!important} +.border-pale-red,.hover-border-pale-red:hover{border-color:#ffe7e7!important}.border-pale-green,.hover-border-pale-green:hover{border-color:#e7ffe7!important} +.border-pale-yellow,.hover-border-pale-yellow:hover{border-color:#ffffd7!important}.border-pale-blue,.hover-border-pale-blue:hover{border-color:#e7ffff!important} +/* DEFAULT THEME */ +.theme-l5 {color:#000 !important; background-color:#f6f8fc !important} +.theme-l4 {color:#000 !important; background-color:#e1e9f6 !important} +.theme-l3 {color:#000 !important; background-color:#c3d3ed !important} +.theme-l2 {color:#000 !important; background-color:#a5bee4 !important} +.theme-l1 {color:#fff !important; background-color:#88a8db !important} +.theme-d1 {color:#fff !important; background-color:#5180cb !important} +.theme-d2 {color:#fff !important; background-color:#3a6fc3 !important} +.theme-d3 {color:#fff !important; background-color:#3361aa !important} +.theme-d4 {color:#fff !important; background-color:#2c5392 !important} +.theme-d5 {color:#fff !important; background-color:#24457a !important} + +.theme-light {color:#000 !important; background-color:#f6f8fc !important} +.theme-dark {color:#fff !important; background-color:#24457a !important} +.theme-action {color:#fff !important; background-color:#24457a !important} + +.theme {color:#fff !important; background-color:#6a92d3 !important} +.text-theme {color:#6a92d3 !important} +.border-theme {border-color:#6a92d3 !important} + +.hover-theme:hover {color:#fff !important; background-color:#6a92d3 !important} +.hover-text-theme:hover {color:#6a92d3 !important} +.hover-border-theme:hover {border-color:#6a92d3 !important} + +/* .label { color: #000; font-size: 8pt;} */ +/* #main {margin-left: 210px;} */ +/* @media (max-width:768px){ + #sidebar { display: none;} + #main { margin-left: 0px;} +} */ + +.info-panel { + padding: 3px; + color: #ff4500; + border: 1px solid #ff4500; + background-color: #f89774; +} + +.error-panel { + padding: 3px; + color: #ff0000; + border: 1px solid #ff0000; + background-color: #fcb2b2; +} + +.table { + table-layout: fixed; +} + +.text-line-through { text-decoration: line-through; } + +#snackbar { + visibility: hidden; + min-width: 250px; + margin-left: -125px; + background-color: #333; + color: #fff; + text-align: center; + + padding: 16px; + position: fixed; + z-index: 1; + left: 50%; + bottom: 30px; + font-size: 17px; +} + +#snackbar.show { + visibility: visible; + -webkit-animation: fadein 0.5s, fadeout 0.5s 2.5s; + animation: fadein 0.5s, fadeout 0.5s 2.5s; +} + +#timer { + /* border: 1px solid red; */ + display: block; + position: absolute; + width: 60px; + height: 60px; + top: 0px; + left: calc(50vw - 30px); + z-index: 50; + display: none; +} + +@-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: 12pt; + color: #fff; +} + +div.SubHeadTitle +{ + font-size: 13pt; + color: #fff; +} + +div.SectionHeader +{ + + background-color: rgba(22.3529%,26.6667%,38.4314%,1); + +} + +button.toolbarbtn +{ + border: 0.5px solid #c6c6c6; + background-color: rgba(0%,0%,0%,0); + color: #fff; +} +button.toolbarbtn:hover +{ + + background-color: #343434; + color: #fff; +} +button.toolbarbtn:pressed +{ + + background-color: rgba(20.3922%,20.3922%,20.3922%,1); + color: #fff; +} +button.toolbarbtn:focus +{ + border-top-color: rgba(80%,80%,80%,1); + border-right-color: rgba(80%,80%,80%,1); + border-bottom-color: rgba(80%,80%,80%,1); + border-left-color: rgba(80%,80%,80%,1); +} + + +a.toolbarbtn +{ + border: 0.5px solid #c6c6c6; + background-color: rgba(0%,0%,0%,0); + color: #fff; + text-align: center; + text-decoration: unset; +} +a.toolbarbtn:hover +{ + + background-color: rgba(20.3922%,20.3922%,20.3922%,1); + color: #fff; +} +a.toolbarbtn:pressed +{ + background-color: rgba(20.3922%,20.3922%,20.3922%,1); + color: #fff; +} +a.toolbarbtn:focus +{ + border-top-color: rgba(80%,80%,80%,1); + border-right-color: rgba(80%,80%,80%,1); + border-bottom-color: rgba(80%,80%,80%,1); + border-left-color: rgba(80%,80%,80%,1); +} + +button.bodybtn +{ + border: 0.5px solid #c6c6c6; + + background-color: rgba(0%,0%,0%,0); + + color: #000; +} +button.bodybtn:hover +{ + + background-color: rgba(20.3922%,20.3922%,20.3922%,1); + color: #fff; +} +button.bodybtn:pressed +{ + + background-color: rgba(20.3922%,20.3922%,20.3922%,1); + color: #fff; +} +button.bodybtn:focus +{ + border-top-color: rgba(80%,80%,80%,1); + border-right-color: rgba(80%,80%,80%,1); + border-bottom-color: rgba(80%,80%,80%,1); + border-left-color: rgba(80%,80%,80%,1); +} + + +a.bodybtn +{ + border: 0.5px solid #c6c6c6; + + background-color: rgba(0%,0%,0%,0); + + color: #000; + text-align: center; + text-decoration: unset; +} +a.bodybtn:hover +{ + + background-color: rgba(20.3922%,20.3922%,20.3922%,1); + color: #fff; +} +a.bodybtn:pressed +{ + background-color: rgba(20.3922%,20.3922%,20.3922%,1); + color: #fff; +} +a.bodybtn:focus +{ + border-top-color: rgba(80%,80%,80%,1); + border-right-color: rgba(80%,80%,80%,1); + border-bottom-color: rgba(80%,80%,80%,1); + border-left-color: rgba(80%,80%,80%,1); +} + + +div.ListView_Header +{ + border-top-color: rgba(80%,80%,80%,1); + border-right-color: rgba(80%,80%,80%,1); + border-bottom-color: rgba(80%,80%,80%,1); + border-left-color: rgba(80%,80%,80%,1); + border-top-style: solid; + border-right-style: solid; + border-bottom-style: solid; + border-left-style: solid; + border-top-width: 1pt; + border-right-width: 1pt; + border-bottom-width: 1pt; + border-left-width: 1pt; + font-weight: normal; + color: #fff; + -fm-text-vertical-align: center; +} +div.ListView_Header .inner_border +{ + padding-top: 2pt; + padding-right: 2pt; + padding-bottom: 2pt; + padding-left: 2pt; +} + +div.toolbar +{ + + background-color: rgba(32.1569%,38.8235%,55.6863%,1); + +} + +div.sectiontoolbar +{ + margin-top: 8px; + margin-bottom: 8px; + background-color: rgb(97, 98, 100); + +} + +div.FooterLabel +{ + color: #fff; +} + +button.Buttom_BodyNav:hover +{ + + background-color: rgb(141, 141, 141); + + /* color: #fff; */ +} + + +::-webkit-scrollbar { +-webkit-appearance: none; +width: 10px; +} + +::-webkit-scrollbar-track { + background-color: rgba(80%, 80%, 80%, .5); +} + +::-webkit-scrollbar-thumb { +border-radius: 0px; +background-color: rgba(0, 0, 0, .5); +-webkit-box-shadow: 0 0 1px rgba(255, 255, 255, .5); +} + +div.portaltextheader { + padding: 2px; + border: 1px solid white; +} + + + + + +select { + /* -webkit-appearance: none; */ + display: block; + color: #000; + line-height: 1line; + text-align: left; + padding: 3.5px; + width: 100%; + max-width: 100%; + box-sizing: border-box; + margin: 0; + border: 1px solid #cccccc; + /* box-shadow: 0 1px 0 1px rgba(0,0,0,.04); */ + border-radius: 0px; + font-weight: normal; + font-size: 11pt; + background-color: #fff; + /* background-image: url('data:image/svg+xml;charset=US-ASCII,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22292.4%22%20height%3D%22292.4%22%3E%3Cpath%20fill%3D%22%23000%22%20d%3D%22M287%2069.4a17.6%2017.6%200%200%200-13-5.4H18.4c-5%200-9.3%201.8-12.9%205.4A17.6%2017.6%200%200%200%200%2082.2c0%205%201.8%209.3%205.4%2012.9l128%20127.9c3.6%203.6%207.8%205.4%2012.8%205.4s9.2-1.8%2012.8-5.4L287%2095c3.5-3.5%205.4-7.8%205.4-12.8%200-5-1.9-9.2-5.5-12.8z%22%2F%3E%3C%2Fsvg%3E'), + linear-gradient(to bottom, #fff 0%,#fff 100%); + background-repeat: no-repeat, repeat; + background-position: right .7em top 50%, 0 0; + background-size: .65em auto, 100%; */ +} + + +/* option { + appearance: none; + border: 1px solid 0070cf; + padding: 2px; +} */ +select:focus +{ + border: 1px solid #3a6fc3; + border-radius: unset; +} + + +::-webkit-select-placeholder +{ + color: #9a9a9a; +} + +div.DataFooter{ + background: #384462; +} +.input-sum{padding:2px;display:block;border: 1px solid #ccc;width:100%;background-color: #4D4D4D; } + + +.currency-sum {padding:2px;display:block;border: 1px solid #ccc;width:100%;background-color: #4D4D4D;} + +.currency-sum,.currency-sum:read-only { + display: block; + color: #fff; + padding: 2px; + padding-right: 12px; + width: 100%; + max-width: 100%; + box-sizing: border-box; + margin: 0; + border: 1px solid #ccc; + border-radius: unset; + -moz-appearance: none; + -webkit-appearance: none; + appearance: none; + background-color: #4D4D4D; + background-image: url('data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22225%22%20height=%22300%22%3E%3Cpath%20fill=%22white%22%20stroke=%22none%22%20d=%22m%20224.99996,16.22698%20-8.11342,36.41161%20q%20-24.14255,-19.78892%20-54.61741,-19.78892%20-41.3588,0%20-65.00658,23.74671%20-23.647774,23.7467%20-28.397115,53.23215%20l%20134.960355,0%20-5.14505,26.71508%20-132.981532,0%20-0.395848,7.71771%200.395848,18.20566%20127.242642,0%20-5.14505,26.71508%20-117.941954,0%20q%207.519719,40.17154%2032.552754,59.06997%2025.03303,18.89844%2056.49745,18.89844%2037.20302,0%2057.98149,-19.59107%20l%200,40.9631%20Q%20192.34828,300%20162.26913,300%2053.034301,300%2030.474864,189.18206%20l%20-30.474864,0%205.738751,-26.71508%2020.580475,0%20q%20-0.395708,-4.74934%20-0.395708,-17.80995%20l%200,-8.11342%20-25.923518,0%205.738751,-26.71508%2023.152999,0%20Q%2039.181988,55.21112%2076.583149,27.60556%20113.98417,0%20163.06069,0%20199.868,0%20224.99996,16.22698%20z%22%20/%3E%3C/svg%3E'); + background-repeat: no-repeat, repeat; + background-position: right 2px top 50%, 0 0; + background-size: 9px auto, 100%; +} + + + + +/* input[type=date]::-webkit-inner-spin-button, +input[type=date]::-webkit-outer-spin-button { + display: none; +} */ + +:focus { + outline: unset; +} + +input +{ + background-color: #ffffff; + border: 1px solid #cccccc; + font-weight: normal; + font-size: 11pt; + color: #000000; + line-height: 1line; + text-align: left; + width:100%; + padding:2px; + display:block; + border-radius: unset; +} +/* input:focus +{ + border: #0070cf; +} */ + +input:focus { + border: 1px solid #3a6fc3; + border-radius: unset; +} + +input[readonly=true]{ + color: #000!important; + background-color: #d3d3d3!important; +} + +input[type=number]::-webkit-inner-spin-button, +input[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} +/* input[type=checkbox]{ + appearance: none; + display:inline-block; + font-size: 24px!important; + border: 1px solid green; +} */ + +input[class=currency] { + padding: 2px; + padding-right: 12px; + text-align: right; + background-image: url('data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22225%22%20height=%22300%22%3E%3Cpath%20stroke=%22none%22%20d=%22m%20224.99996,16.22698%20-8.11342,36.41161%20q%20-24.14255,-19.78892%20-54.61741,-19.78892%20-41.3588,0%20-65.00658,23.74671%20-23.647774,23.7467%20-28.397115,53.23215%20l%20134.960355,0%20-5.14505,26.71508%20-132.981532,0%20-0.395848,7.71771%200.395848,18.20566%20127.242642,0%20-5.14505,26.71508%20-117.941954,0%20q%207.519719,40.17154%2032.552754,59.06997%2025.03303,18.89844%2056.49745,18.89844%2037.20302,0%2057.98149,-19.59107%20l%200,40.9631%20Q%20192.34828,300%20162.26913,300%2053.034301,300%2030.474864,189.18206%20l%20-30.474864,0%205.738751,-26.71508%2020.580475,0%20q%20-0.395708,-4.74934%20-0.395708,-17.80995%20l%200,-8.11342%20-25.923518,0%205.738751,-26.71508%2023.152999,0%20Q%2039.181988,55.21112%2076.583149,27.60556%20113.98417,0%20163.06069,0%20199.868,0%20224.99996,16.22698%20z%22%20/%3E%0A%3C/svg%3E'), + linear-gradient(to bottom, #fff 0%,#fff 100%); + background-repeat: no-repeat, repeat; + background-position: right 2px top 50%, 0 0; + background-size: 9px auto, 100%; +} + +input[class=currency]:read-only { + background-image: url('data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22225%22%20height=%22300%22%3E%3Cpath%20stroke=%22none%22%20d=%22m%20224.99996,16.22698%20-8.11342,36.41161%20q%20-24.14255,-19.78892%20-54.61741,-19.78892%20-41.3588,0%20-65.00658,23.74671%20-23.647774,23.7467%20-28.397115,53.23215%20l%20134.960355,0%20-5.14505,26.71508%20-132.981532,0%20-0.395848,7.71771%200.395848,18.20566%20127.242642,0%20-5.14505,26.71508%20-117.941954,0%20q%207.519719,40.17154%2032.552754,59.06997%2025.03303,18.89844%2056.49745,18.89844%2037.20302,0%2057.98149,-19.59107%20l%200,40.9631%20Q%20192.34828,300%20162.26913,300%2053.034301,300%2030.474864,189.18206%20l%20-30.474864,0%205.738751,-26.71508%2020.580475,0%20q%20-0.395708,-4.74934%20-0.395708,-17.80995%20l%200,-8.11342%20-25.923518,0%205.738751,-26.71508%2023.152999,0%20Q%2039.181988,55.21112%2076.583149,27.60556%20113.98417,0%20163.06069,0%20199.868,0%20224.99996,16.22698%20z%22%20/%3E%0A%3C/svg%3E'), + linear-gradient(to bottom, #d3d3d3 0%,#d3d3d3 100%); +} + +input[class=percent] { + padding: 2px; + padding-right: 12px; + text-align: right; + background-image: url('data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22256%22%20height=%22232%22%20version=%221.0%22%3E%3Cg%20transform=%22translate(-112.3674,-128.3649)%22%3E%3Cpath%20style=%22fill:black;fill-opacity:1;stroke:none%22%20d=%22M%20317.1674,257.53698%20C%20308.53463,257.53708%20301.73774,261.20839%20296.77671,268.55094%20C%20291.91449,275.89365%20289.48349,286.1138%20289.48368,299.2114%20C%20289.48349,312.11067%20291.91449,322.2812%20296.77671,329.72303%20C%20301.73774,337.06568%20308.53463,340.737%20317.1674,340.73698%20C%20325.60128,340.737%20332.24934,337.06568%20337.11159,329.72303%20C%20342.07258,322.2812%20344.5532,312.11067%20344.55345,299.2114%20C%20344.5532,286.21302%20342.07258,276.04249%20337.11159,268.69977%20C%20332.24934,261.25801%20325.60128,257.53708%20317.1674,257.53698%20M%20317.1674,238.63466%20C%20332.84469,238.63477%20345.29739,244.09213%20354.52554,255.00675%20C%20363.75318,265.92157%20368.36713,280.65644%20368.3674,299.2114%20C%20368.36713,317.76648%20363.70357,332.50135%20354.37671,343.41605%20C%20345.14855,354.23156%20332.74546,359.6393%20317.1674,359.63931%20C%20301.29123,359.6393%20288.7393,354.23156%20279.51159,343.41605%20C%20270.28351,332.50135%20265.66956,317.76648%20265.66973,299.2114%20C%20265.66956,280.55721%20270.28351,265.82234%20279.51159,255.00675%20C%20288.83853,244.09213%20301.39045,238.63477%20317.1674,238.63466%20M%20163.5674,147.9928%20C%20155.03401,147.993%20148.28673,151.71393%20143.32554,159.15559%20C%20138.46349,166.49841%20136.03248,176.61933%20136.03252,189.51838%20C%20136.03248,202.61621%20138.46349,212.83635%20143.32554,220.17884%20C%20148.18751,227.52161%20154.93479,231.19292%20163.5674,231.1928%20C%20172.19989,231.19292%20178.94717,227.52161%20183.80926,220.17884%20C%20188.77041,212.83635%20191.25103,202.61621%20191.25113,189.51838%20C%20191.25103,176.71856%20188.77041,166.59764%20183.80926,159.15559%20C%20178.84794,151.71393%20172.10066,147.993%20163.5674,147.9928%20M%20297.9674,129.09047%20L%20321.78136,129.09047%20L%20182.7674,359.63931%20L%20158.95345,359.63931%20L%20297.9674,129.09047%20M%20163.5674,129.09047%20C%20179.24484,129.0907%20191.74715,134.54806%20201.07438,145.46256%20C%20210.4014,156.27827%20215.06496,170.96352%20215.06508,189.51838%20C%20215.06496,208.27201%20210.4014,223.05649%20201.07438,233.87187%20C%20191.84638,244.68748%20179.34406,250.09523%20163.5674,250.09512%20C%20147.79061,250.09523%20135.28829,244.68748%20126.06043,233.87187%20C%20116.93172,222.95727%20112.36739,208.17279%20112.3674,189.51838%20C%20112.36739,171.06275%20116.98134,156.37749%20126.20926,145.46256%20C%20135.43713,134.54806%20147.88983,129.0907%20163.5674,129.09047%22%20/%3E%3C/g%3E%3C/svg%3E'), + linear-gradient(to bottom, #fff 0%,#fff 100%); + background-repeat: no-repeat, repeat; + background-position: right 2px top 50%, 0 0; + background-size: 9px auto, 100%; +} + + +label { + height: 12.8px!important; + color: #000; + font-size: 8pt; +} + + + +input[type="checkbox"] { + display: block; + -webkit-appearance:none;/* Hides the default checkbox style */ + height:29.66px; + width:29.66px; + cursor:pointer; + position:relative; + -webkit-transition: .15s; + border-radius: unset; + border: 1px solid #cccccc; + background-color:#fff; + } + + input[type="checkbox"]:checked { + background-color:#9ABCEA; + } + + input[type="checkbox"]:before, input[type="checkbox"]:checked:before { + position:absolute; + top:0; + left:0; + width:100%; + height:100%; + line-height:2em; + text-align:center; + color:#000; + content: ''; + } + + input[type="checkbox"]:checked:before { + font-size: 11pt; + content: '✔'; + } + + input[type="checkbox"]:hover:before { + background:rgba(255,255,255,0.3); + } + + + body.mceContentBody { + background:#e8f0fe; + color:#000; +} + +/* .mceContentBody { + background: #e8f0fe; + color:#000; +} */ + +/* .tabulator-row-even { + background-color: #757575; +} */ + +:focus { + outline: 1px solid #607d8b; +} + +.modal-content > header { + background-color: #293146; + color: #fff; + padding:8px!important; + margin-bottom: 10px; +} + +.modal-content > header > h2 { + font-size: 13pt; +} + +.modal-content > footer { + + /* padding:0.01em 8px; */ + text-align:right!important; + color:#000!important; + background-color:#c6c6c6!important; + margin-top: 6px; + padding-top:8px!important; + padding-bottom:8px!important; +} + +.modal-content > header:after,.modal-content > header:before,.modal-content > footer:after,.modal-content > footer:before { + content:"";display:table;clear:both +} + +span[class^="icon"]::after { + content: "\A"; + white-space: pre; +} + +.inlinebtn { + position: relative; + height: 28px; + margin-top: -28px; + margin-left: -20px; + padding: 4px 8px; + border: 0!important; + float: right; +} + +#loader { + position: absolute; + left: 50%; + top: 50%; + z-index: 1; + width: 150px; + height: 150px; + margin: -75px 0 0 -75px; + border: 16px solid #f3f3f3; + border-radius: 50%; + border-top: 16px solid #3498db; + width: 120px; + height: 120px; + -webkit-animation: spin 2s linear infinite; + animation: spin 2s linear infinite; +} + +@-webkit-keyframes spin { + 0% { -webkit-transform: rotate(0deg); } + 100% { -webkit-transform: rotate(360deg); } +} + +@keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } +} + diff --git a/install/bin/electron/resources/app/css/w3pro.css b/install/bin/electron/resources/app/css/w3pro.css new file mode 100644 index 0000000..3013489 --- /dev/null +++ b/install/bin/electron/resources/app/css/w3pro.css @@ -0,0 +1,378 @@ +/* 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}.w3-serif{font-family:serif} +h1,h2,h3,h4,h5,h6{font-family:"Segoe UI",Arial,sans-serif;font-weight:400;margin: 0}.w3-wide{letter-spacing:4px} +hr{border:0;border-top:1px solid #eee;margin:20px 0} +.w3-image{max-width:100%;height:auto}img{vertical-align:middle}a{color:inherit} +.w3-table,.w3-table-all{border-collapse:collapse;border-spacing:0;width:100%;display:table}.w3-table-all{border:1px solid #ccc} +.w3-bordered tr,.w3-table-all tr{border-bottom:1px solid #ddd}.w3-striped tbody tr:nth-child(even){background-color:#f1f1f1} +.w3-table-all tr:nth-child(odd){background-color:#fff}.w3-table-all tr:nth-child(even){background-color:#f1f1f1} +.w3-hoverable tbody tr:hover,.w3-ul.w3-hoverable li:hover{background-color:#ccc}.w3-centered tr th,.w3-centered tr td{text-align:center} +.w3-table td,.w3-table th,.w3-table-all td,.w3-table-all th{padding:8px 8px;display:table-cell;text-align:left;vertical-align:top} +.w3-table th:first-child,.w3-table td:first-child,.w3-table-all th:first-child,.w3-table-all td:first-child{padding-left:16px} +.w3-btn,.w3-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} +.w3-btn:hover{box-shadow:0 8px 16px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19)} +.w3-btn,.w3-button{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none} +.w3-disabled,.w3-btn:disabled,.w3-button:disabled{cursor:not-allowed;opacity:0.3}.w3-disabled *,:disabled *{pointer-events:none} +.w3-btn.w3-disabled:hover,.w3-btn:disabled:hover{box-shadow:none} +.w3-badge,.w3-tag{background-color:#000;color:#fff;display:inline-block;padding-left:8px;padding-right:8px;text-align:center}.w3-badge{border-radius:50%} +.w3-ul{list-style-type:none;padding:0;margin:0}.w3-ul li{padding:8px 16px;border-bottom:1px solid #ddd}.w3-ul li:last-child{border-bottom:none} +.w3-tooltip,.w3-display-container{position:relative}.w3-tooltip .w3-text{display:none}.w3-tooltip:hover .w3-text{display:inline-block} +.w3-ripple:active{opacity:0.5}.w3-ripple{transition:opacity 0s} +.w3-input{padding:8px;display:block;border:1px solid #ccc;width:100%;background-color: #e8f0fe; } +.w3-select{padding:9px 0; display:block;width:100%;border:1px solid #ccc;background-color: #e8f0fe;} +.w3-dropdown-click,.w3-dropdown-hover{position:relative;display:inline-block;cursor:pointer} +.w3-dropdown-hover:hover .w3-dropdown-content{display:block; } +.w3-dropdown-hover:first-child,.w3-dropdown-click:hover{background-color:#ccc;color:#000} +.w3-dropdown-hover:hover > .w3-button:first-child,.w3-dropdown-click:hover > .w3-button:first-child{background-color:#ccc;color:#000} +.w3-dropdown-content{cursor:auto;color:#000;background-color:#fff;display:none;position:absolute;min-width:160px;margin:0;padding:0;z-index:1} +.w3-check,.w3-radio{width:24px;height:24px;position:relative;top:6px} +.w3-sidebar{height:100%;width:200px;background-color:#fff;position:fixed!important;z-index:1;overflow:auto} +.w3-bar-block .w3-dropdown-hover,.w3-bar-block .w3-dropdown-click{width:100%} +.w3-bar-block .w3-dropdown-hover .w3-dropdown-content,.w3-bar-block .w3-dropdown-click .w3-dropdown-content{min-width:100%} +.w3-bar-block .w3-dropdown-hover .w3-button,.w3-bar-block .w3-dropdown-click .w3-button{width:100%;text-align:left;padding:8px 16px} +.w3-main,#main{transition:margin-left .4s} +.w3-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)} +.w3-modal-content{margin:auto;background-color:#fff;position:relative;padding:0;outline:0;width:600px} +.w3-bar{width:100%;overflow:hidden}.w3-center .w3-bar{display:inline-block;width:auto} +.w3-bar .w3-bar-item{padding:8px 16px;float:left;width:auto;border:none;display:block;outline:0} +.w3-bar .w3-dropdown-hover,.w3-bar .w3-dropdown-click{position:static;float:left} +.w3-bar .w3-button{white-space:normal} +.w3-bar-block .w3-bar-item{width:100%;display:block;padding:8px 16px;text-align:left;border:none;white-space:normal;float:none;outline:0} +.w3-bar-block.w3-center .w3-bar-item{text-align:center}.w3-block{display:block;width:100%} +.w3-responsive{display:block;overflow-x:auto} +.w3-container:after,.w3-container:before,.w3-panel:after,.w3-panel:before,.w3-row:after,.w3-row:before,.w3-row-padding:after,.w3-row-padding:before, +.w3-cell-row:before,.w3-cell-row:after,.w3-clear:after,.w3-clear:before,.w3-bar:before,.w3-bar:after{content:"";display:table;clear:both} +.w3-col,.w3-half,.w3-third,.w3-twothird,.w3-threequarter,.w3-quarter{float:left;width:100%} +.w3-col.s1{width:8.33333%}.w3-col.s2{width:16.66666%}.w3-col.s3{width:24.99999%}.w3-col.s4{width:33.33333%} +.w3-col.s5{width:41.66666%}.w3-col.s6{width:49.99999%}.w3-col.s7{width:58.33333%}.w3-col.s8{width:66.66666%} +.w3-col.s9{width:74.99999%}.w3-col.s10{width:83.33333%}.w3-col.s11{width:91.66666%}.w3-col.s12{width:99.99999%} +@media (min-width:601px){.w3-col.m1{width:8.33333%}.w3-col.m2{width:16.66666%}.w3-col.m3,.w3-quarter{width:24.99999%}.w3-col.m4,.w3-third{width:33.33333%} +.w3-col.m5{width:41.66666%}.w3-col.m6,.w3-half{width:49.99999%}.w3-col.m7{width:58.33333%}.w3-col.m8,.w3-twothird{width:66.66666%} +.w3-col.m9,.w3-threequarter{width:74.99999%}.w3-col.m10{width:83.33333%}.w3-col.m11{width:91.66666%}.w3-col.m12{width:99.99999%}} +@media (min-width:993px){.w3-col.l1{width:8.33333%}.w3-col.l2{width:16.66666%}.w3-col.l3{width:24.99999%}.w3-col.l4{width:33.33333%} +.w3-col.l5{width:41.66666%}.w3-col.l6{width:49.99999%}.w3-col.l7{width:58.33333%}.w3-col.l8{width:66.66666%} +.w3-col.l9{width:74.99999%}.w3-col.l10{width:83.33333%}.w3-col.l11{width:91.66666%}.w3-col.l12{width:99.99999%}} +.w3-rest{overflow:hidden}.w3-stretch{margin-left:-16px;margin-right:-16px} +.w3-content,.w3-auto{margin-left:auto;margin-right:auto}.w3-content{max-width:980px}.w3-auto{max-width:1140px} +.w3-cell-row{display:table;width:100%}.w3-cell{display:table-cell} +.w3-cell-top{vertical-align:top}.w3-cell-middle{vertical-align:middle}.w3-cell-bottom{vertical-align:bottom} +.w3-hide{display:none!important}.w3-show-block,.w3-show{display:block!important}.w3-show-inline-block{display:inline-block!important} +@media (max-width:1205px){.w3-auto{max-width:95%}} +@media (max-width:600px){.w3-modal-content{margin:0 10px;width:auto!important}.w3-modal{padding-top:30px} +.w3-dropdown-hover.w3-mobile .w3-dropdown-content,.w3-dropdown-click.w3-mobile .w3-dropdown-content{position:relative} +.w3-hide-small{display:none!important}.w3-mobile{display:block;width:100%!important}.w3-bar-item.w3-mobile,.w3-dropdown-hover.w3-mobile,.w3-dropdown-click.w3-mobile{text-align:center} +.w3-dropdown-hover.w3-mobile,.w3-dropdown-hover.w3-mobile .w3-btn,.w3-dropdown-hover.w3-mobile .w3-button,.w3-dropdown-click.w3-mobile,.w3-dropdown-click.w3-mobile .w3-btn,.w3-dropdown-click.w3-mobile .w3-button{width:100%}} +@media (max-width:768px){.w3-modal-content{width:500px}.w3-modal{padding-top:50px}} +@media (min-width:993px){.w3-modal-content{width:900px}.w3-hide-large{display:none!important}.w3-sidebar.w3-collapse{display:block!important}} +@media (max-width:992px) and (min-width:601px){.w3-hide-medium{display:none!important}} +@media (max-width:992px){.w3-sidebar.w3-collapse{display:none}.w3-main{margin-left:0!important;margin-right:0!important}.w3-auto{max-width:100%}} +.w3-top,.w3-bottom{position:fixed;width:100%;z-index:1}.w3-top{top:0}.w3-bottom{bottom:0} +.w3-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} +.w3-display-topleft{position:absolute;left:0;top:0}.w3-display-topright{position:absolute;right:0;top:0} +.w3-display-bottomleft{position:absolute;left:0;bottom:0}.w3-display-bottomright{position:absolute;right:0;bottom:0} +.w3-display-middle{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%)} +.w3-display-left{position:absolute;top:50%;left:0%;transform:translate(0%,-50%);-ms-transform:translate(-0%,-50%)} +.w3-display-right{position:absolute;top:50%;right:0%;transform:translate(0%,-50%);-ms-transform:translate(0%,-50%)} +.w3-display-topmiddle{position:absolute;left:50%;top:0;transform:translate(-50%,0%);-ms-transform:translate(-50%,0%)} +.w3-display-bottommiddle{position:absolute;left:50%;bottom:0;transform:translate(-50%,0%);-ms-transform:translate(-50%,0%)} +.w3-display-container:hover .w3-display-hover{display:block}.w3-display-container:hover span.w3-display-hover{display:inline-block}.w3-display-hover{display:none} +.w3-display-position{position:absolute} +.w3-circle{border-radius:50%} +.w3-round-small{border-radius:2px}.w3-round,.w3-round-medium{border-radius:4px}.w3-round-large{border-radius:8px}.w3-round-xlarge{border-radius:16px}.w3-round-xxlarge{border-radius:32px} +.w3-row-padding,.w3-row-padding>.w3-half,.w3-row-padding>.w3-third,.w3-row-padding>.w3-twothird,.w3-row-padding>.w3-threequarter,.w3-row-padding>.w3-quarter,.w3-row-padding>.w3-col{padding:0 8px} +.w3-container,.w3-panel{padding:0.01em 16px}.w3-panel{margin-top:16px;margin-bottom:16px} +.w3-code,.w3-codespan{font-family:Consolas,"courier new";font-size:16px} +.w3-code{width:auto;background-color:#fff;padding:8px 12px;border-left:4px solid #4CAF50;word-wrap:break-word} +.w3-codespan{color:crimson;background-color:#f1f1f1;padding-left:4px;padding-right:4px;font-size:110%} +.w3-card,.w3-card-2{box-shadow:0 2px 5px 0 rgba(0,0,0,0.16)} +.w3-card-4,.w3-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)} +.w3-spin{animation:w3-spin 2s infinite linear}@keyframes w3-spin{0%{transform:rotate(0deg)}100%{transform:rotate(359deg)}} +.w3-animate-fading{animation:fading 10s infinite}@keyframes fading{0%{opacity:0}50%{opacity:1}100%{opacity:0}} +.w3-animate-opacity{animation:opac 0.8s}@keyframes opac{from{opacity:0} to{opacity:1}} +.w3-animate-top{position:relative;animation:animatetop 0.4s}@keyframes animatetop{from{top:-300px;opacity:0} to{top:0;opacity:1}} +.w3-animate-left{position:relative;animation:animateleft 0.4s}@keyframes animateleft{from{left:-300px;opacity:0} to{left:0;opacity:1}} +.w3-animate-right{position:relative;animation:animateright 0.4s}@keyframes animateright{from{right:-300px;opacity:0} to{right:0;opacity:1}} +.w3-animate-bottom{position:relative;animation:animatebottom 0.4s}@keyframes animatebottom{from{bottom:-300px;opacity:0} to{bottom:0;opacity:1}} +.w3-animate-zoom {animation:animatezoom 0.6s}@keyframes animatezoom{from{transform:scale(0)} to{transform:scale(1)}} +.w3-animate-input{transition:width 0.4s ease-in-out}.w3-animate-input:focus{width:100%!important} +.w3-opacity,.w3-hover-opacity:hover{opacity:0.60}.w3-opacity-off,.w3-hover-opacity-off:hover{opacity:1} +.w3-opacity-max{opacity:0.25}.w3-opacity-min{opacity:0.75} +.w3-greyscale-max,.w3-grayscale-max,.w3-hover-greyscale:hover,.w3-hover-grayscale:hover{filter:grayscale(100%)} +.w3-greyscale,.w3-grayscale{filter:grayscale(75%)}.w3-greyscale-min,.w3-grayscale-min{filter:grayscale(50%)} +.w3-sepia{filter:sepia(75%)}.w3-sepia-max,.w3-hover-sepia:hover{filter:sepia(100%)}.w3-sepia-min{filter:sepia(50%)} +.w3-tiny{font-size:10px!important}.w3-small{font-size:12px!important}.w3-medium{font-size:15px!important}.w3-large{font-size:18px!important} +.w3-xlarge{font-size:24px!important}.w3-xxlarge{font-size:36px!important}.w3-xxxlarge{font-size:48px!important}.w3-jumbo{font-size:64px!important} +.w3-left-align{text-align:left!important}.w3-right-align{text-align:right!important}.w3-justify{text-align:justify!important}.w3-center{text-align:center!important} +.w3-border-0{border:0!important}.w3-border{border:1px solid #ccc!important} +.w3-border-top{border-top:1px solid #ccc!important}.w3-border-bottom{border-bottom:1px solid #ccc!important} +.w3-border-left{border-left:1px solid #ccc!important}.w3-border-right{border-right:1px solid #ccc!important} +.w3-topbar{border-top:6px solid #ccc!important}.w3-bottombar{border-bottom:6px solid #ccc!important} +.w3-leftbar{border-left:6px solid #ccc!important}.w3-rightbar{border-right:6px solid #ccc!important} +.w3-section,.w3-code{margin-top:16px!important;margin-bottom:16px!important} +.w3-margin{margin:16px!important}.w3-margin-top{margin-top:16px!important}.w3-margin-bottom{margin-bottom:16px!important} +.w3-margin-left{margin-left:16px!important}.w3-margin-right{margin-right:16px!important} +.w3-padding-small{padding:4px 8px!important}.w3-padding{padding:8px 16px!important}.w3-padding-large{padding:12px 24px!important} +.w3-padding-16{padding-top:16px!important;padding-bottom:16px!important}.w3-padding-24{padding-top:24px!important;padding-bottom:24px!important} +.w3-padding-32{padding-top:32px!important;padding-bottom:32px!important}.w3-padding-48{padding-top:48px!important;padding-bottom:48px!important} +.w3-padding-64{padding-top:64px!important;padding-bottom:64px!important} +.w3-left{float:left!important}.w3-right{float:right!important} +.w3-button:hover{color:#000!important;background-color:#ccc!important} +.w3-transparent,.w3-hover-none:hover{background-color:transparent!important} +.w3-hover-none:hover{box-shadow:none!important} +/* DEFAULT COLORS */ +.w3-amber,.w3-hover-amber:hover{color:#000!important;background-color:#ffc107!important} +.w3-aqua,.w3-hover-aqua:hover{color:#000!important;background-color:#00ffff!important} +.w3-blue,.w3-hover-blue:hover{color:#fff!important;background-color:#2196F3!important} +.w3-light-blue,.w3-hover-light-blue:hover{color:#000!important;background-color:#87CEEB!important} +.w3-brown,.w3-hover-brown:hover{color:#fff!important;background-color:#795548!important} +.w3-cyan,.w3-hover-cyan:hover{color:#000!important;background-color:#00bcd4!important} +.w3-blue-grey,.w3-hover-blue-grey:hover{color:#fff!important;background-color:#607d8b!important} +.w3-green,.w3-hover-green:hover{color:#fff!important;background-color:#4CAF50!important} +.w3-light-green,.w3-hover-light-green:hover{color:#000!important;background-color:#8bc34a!important} +.w3-indigo,.w3-hover-indigo:hover{color:#fff!important;background-color:#3f51b5!important} +.w3-khaki,.w3-hover-khaki:hover{color:#000!important;background-color:#f0e68c!important} +.w3-lime,.w3-hover-lime:hover{color:#000!important;background-color:#cddc39!important} +.w3-orange,.w3-hover-orange:hover{color:#000!important;background-color:#ff9800!important} +.w3-deep-orange,.w3-hover-deep-orange:hover{color:#fff!important;background-color:#ff5722!important} +.w3-pink,.w3-hover-pink:hover{color:#fff!important;background-color:#e91e63!important} +.w3-purple,.w3-hover-purple:hover{color:#fff!important;background-color:#9c27b0!important} +.w3-deep-purple,.w3-hover-deep-purple:hover{color:#fff!important;background-color:#673ab7!important} +.w3-red,.w3-hover-red:hover{color:#fff!important;background-color:#f44336!important} +.w3-sand,.w3-hover-sand:hover{color:#000!important;background-color:#fdf5e6!important} +.w3-teal,.w3-hover-teal:hover{color:#fff!important;background-color:#009688!important} +.w3-yellow,.w3-hover-yellow:hover{color:#000!important;background-color:#ffeb3b!important} +.w3-white,.w3-hover-white:hover{color:#000!important;background-color:#fff!important} +.w3-black,.w3-hover-black:hover{color:#fff!important;background-color:#000!important} +.w3-grey,.w3-hover-grey:hover{color:#000!important;background-color:#9e9e9e!important} +.w3-light-grey,.w3-hover-light-grey:hover{color:#000!important;background-color:#f1f1f1!important} +.w3-dark-grey,.w3-hover-dark-grey:hover{color:#fff!important;background-color:#616161!important} +.w3-pale-red,.w3-hover-pale-red:hover{color:#000!important;background-color:#ffe7e7!important}.w3-pale-green,.w3-hover-pale-green:hover{color:#000!important;background-color:#e7ffe7!important} +.w3-pale-yellow,.w3-hover-pale-yellow:hover{color:#000!important;background-color:#ffffd7!important}.w3-pale-blue,.w3-hover-pale-blue:hover{color:#000!important;background-color:#e7ffff!important} +.w3-text-amber,.w3-hover-text-amber:hover{color:#ffc107!important} +.w3-text-aqua,.w3-hover-text-aqua:hover{color:#00ffff!important} +.w3-text-blue,.w3-hover-text-blue:hover{color:#2196F3!important} +.w3-text-light-blue,.w3-hover-text-light-blue:hover{color:#87CEEB!important} +.w3-text-brown,.w3-hover-text-brown:hover{color:#795548!important} +.w3-text-cyan,.w3-hover-text-cyan:hover{color:#00bcd4!important} +.w3-text-blue-grey,.w3-hover-text-blue-grey:hover{color:#607d8b!important} +.w3-text-green,.w3-hover-text-green:hover{color:#4CAF50!important} +.w3-text-light-green,.w3-hover-text-light-green:hover{color:#8bc34a!important} +.w3-text-indigo,.w3-hover-text-indigo:hover{color:#3f51b5!important} +.w3-text-khaki,.w3-hover-text-khaki:hover{color:#b4aa50!important} +.w3-text-lime,.w3-hover-text-lime:hover{color:#cddc39!important} +.w3-text-orange,.w3-hover-text-orange:hover{color:#ff9800!important} +.w3-text-deep-orange,.w3-hover-text-deep-orange:hover{color:#ff5722!important} +.w3-text-pink,.w3-hover-text-pink:hover{color:#e91e63!important} +.w3-text-purple,.w3-hover-text-purple:hover{color:#9c27b0!important} +.w3-text-deep-purple,.w3-hover-text-deep-purple:hover{color:#673ab7!important} +.w3-text-red,.w3-hover-text-red:hover{color:#f44336!important} +.w3-text-sand,.w3-hover-text-sand:hover{color:#fdf5e6!important} +.w3-text-teal,.w3-hover-text-teal:hover{color:#009688!important} +.w3-text-yellow,.w3-hover-text-yellow:hover{color:#d2be0e!important} +.w3-text-white,.w3-hover-text-white:hover{color:#fff!important} +.w3-text-black,.w3-hover-text-black:hover{color:#000!important} +.w3-text-grey,.w3-hover-text-grey:hover{color:#757575!important} +.w3-text-light-grey,.w3-hover-text-light-grey:hover{color:#f1f1f1!important} +.w3-text-dark-grey,.w3-hover-text-dark-grey:hover{color:#3a3a3a!important} +.w3-border-amber,.w3-hover-border-amber:hover{border-color:#ffc107!important} +.w3-border-aqua,.w3-hover-border-aqua:hover{border-color:#00ffff!important} +.w3-border-blue,.w3-hover-border-blue:hover{border-color:#2196F3!important} +.w3-border-light-blue,.w3-hover-border-light-blue:hover{border-color:#87CEEB!important} +.w3-border-brown,.w3-hover-border-brown:hover{border-color:#795548!important} +.w3-border-cyan,.w3-hover-border-cyan:hover{border-color:#00bcd4!important} +.w3-border-blue-grey,.w3-hover-blue-grey:hover{border-color:#607d8b!important} +.w3-border-green,.w3-hover-border-green:hover{border-color:#4CAF50!important} +.w3-border-light-green,.w3-hover-border-light-green:hover{border-color:#8bc34a!important} +.w3-border-indigo,.w3-hover-border-indigo:hover{border-color:#3f51b5!important} +.w3-border-khaki,.w3-hover-border-khaki:hover{border-color:#f0e68c!important} +.w3-border-lime,.w3-hover-border-lime:hover{border-color:#cddc39!important} +.w3-border-orange,.w3-hover-border-orange:hover{border-color:#ff9800!important} +.w3-border-deep-orange,.w3-hover-border-deep-orange:hover{border-color:#ff5722!important} +.w3-border-pink,.w3-hover-border-pink:hover{border-color:#e91e63!important} +.w3-border-purple,.w3-hover-border-purple:hover{border-color:#9c27b0!important} +.w3-border-deep-purple,.w3-hover-border-deep-purple:hover{border-color:#673ab7!important} +.w3-border-red,.w3-hover-border-red:hover{border-color:#f44336!important} +.w3-border-sand,.w3-hover-border-sand:hover{border-color:#fdf5e6!important} +.w3-border-teal,.w3-hover-border-teal:hover{border-color:#009688!important} +.w3-border-yellow,.w3-hover-border-yellow:hover{border-color:#ffeb3b!important} +.w3-border-white,.w3-hover-border-white:hover{border-color:#fff!important} +.w3-border-black,.w3-hover-border-black:hover{border-color:#000!important} +.w3-border-grey,.w3-hover-border-grey:hover{border-color:#9e9e9e!important} +.w3-border-light-grey,.w3-hover-border-light-grey:hover{border-color:#f1f1f1!important} +.w3-border-dark-grey,.w3-hover-border-dark-grey:hover{border-color:#616161!important} +.w3-border-pale-red,.w3-hover-border-pale-red:hover{border-color:#ffe7e7!important}.w3-border-pale-green,.w3-hover-border-pale-green:hover{border-color:#e7ffe7!important} +.w3-border-pale-yellow,.w3-hover-border-pale-yellow:hover{border-color:#ffffd7!important}.w3-border-pale-blue,.w3-hover-border-pale-blue:hover{border-color:#e7ffff!important} +/* DEFAULT THEME */ +.w3-theme-l5 {color:#000 !important; background-color:#f6f8fc !important} +.w3-theme-l4 {color:#000 !important; background-color:#e1e9f6 !important} +.w3-theme-l3 {color:#000 !important; background-color:#c3d3ed !important} +.w3-theme-l2 {color:#000 !important; background-color:#a5bee4 !important} +.w3-theme-l1 {color:#fff !important; background-color:#88a8db !important} +.w3-theme-d1 {color:#fff !important; background-color:#5180cb !important} +.w3-theme-d2 {color:#fff !important; background-color:#3a6fc3 !important} +.w3-theme-d3 {color:#fff !important; background-color:#3361aa !important} +.w3-theme-d4 {color:#fff !important; background-color:#2c5392 !important} +.w3-theme-d5 {color:#fff !important; background-color:#24457a !important} + +.w3-theme-light {color:#000 !important; background-color:#f6f8fc !important} +.w3-theme-dark {color:#fff !important; background-color:#24457a !important} +.w3-theme-action {color:#fff !important; background-color:#24457a !important} + +.w3-theme {color:#fff !important; background-color:#6a92d3 !important} +.w3-text-theme {color:#6a92d3 !important} +.w3-border-theme {border-color:#6a92d3 !important} + +.w3-hover-theme:hover {color:#fff !important; background-color:#6a92d3 !important} +.w3-hover-text-theme:hover {color:#6a92d3 !important} +.w3-hover-border-theme:hover {border-color:#6a92d3 !important} + +.w3-label { color: rgb(153, 150, 150);} +#main {margin-left: 210px;} +@media (max-width:768px){ + #sidebar { display: none;} + #main { margin-left: 0px;} +} + +.w3-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%; +} +.w3-select::-ms-expand { + display: none; +} +.w3-select:hover { + border-color: #888; +} +.w3-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; +} + + +.w3-select option { + font-weight:normal; +} + +.w3-table { + table-layout: fixed; +} + +.w3-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; +} + +.w3-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; +} + +/* .mceContentBody { + background: #e8f0fe; + color:#000; +} */ + +/* .tabulator-row-even { + background-color: #757575; +} */ \ No newline at end of file diff --git a/install/bin/electron/resources/app/img/POT-logo.png b/install/bin/electron/resources/app/img/POT-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..e2c802852b309809a3be2a7b0203a916d8f50b8b GIT binary patch literal 20930 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 literal 0 HcmV?d00001 diff --git a/install/bin/electron/resources/app/img/dks_1000.png b/install/bin/electron/resources/app/img/dks_1000.png new file mode 100644 index 0000000000000000000000000000000000000000..87b44eb9a1899d458cb0acb063fc98541ee8ea14 GIT binary patch literal 68554 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�r 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 literal 0 HcmV?d00001 diff --git a/install/bin/electron/resources/app/img/favicon/android-icon-48x48.png b/install/bin/electron/resources/app/img/favicon/android-icon-48x48.png new file mode 100644 index 0000000000000000000000000000000000000000..d5beba1902ea70b981c1c28ee32798c8005b2f89 GIT binary patch literal 3489 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 XiuC>_GTDXb6#%%wP5p8`htPikadT_3 literal 0 HcmV?d00001 diff --git a/install/bin/electron/resources/app/img/favicon/android-icon-72x72.png b/install/bin/electron/resources/app/img/favicon/android-icon-72x72.png new file mode 100644 index 0000000000000000000000000000000000000000..7c7f324a28c3cc93777e767320e582fd5c45ac72 GIT binary patch literal 5250 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 UE14J+Fb@D(NkxfDF~flW0poslUH||9 literal 0 HcmV?d00001 diff --git a/install/bin/electron/resources/app/img/favicon/apple-icon-114x114.png b/install/bin/electron/resources/app/img/favicon/apple-icon-114x114.png new file mode 100644 index 0000000000000000000000000000000000000000..3d448dda3db640d4cc0e3f9c3866714601f07e67 GIT binary patch literal 8487 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 literal 0 HcmV?d00001 diff --git a/install/bin/electron/resources/app/img/favicon/apple-icon-144x144.png b/install/bin/electron/resources/app/img/favicon/apple-icon-144x144.png new file mode 100644 index 0000000000000000000000000000000000000000..6aa79d8f6bec08a6381a56a5ec969b936f722ef9 GIT binary patch literal 12179 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 Msj92;LCGrQKY(HNUH||9 literal 0 HcmV?d00001 diff --git a/install/bin/electron/resources/app/img/favicon/apple-icon-72x72.png b/install/bin/electron/resources/app/img/favicon/apple-icon-72x72.png new file mode 100644 index 0000000000000000000000000000000000000000..7c7f324a28c3cc93777e767320e582fd5c45ac72 GIT binary patch literal 5250 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 literal 0 HcmV?d00001 diff --git a/install/bin/electron/resources/app/img/favicon/apple-icon-precomposed.png b/install/bin/electron/resources/app/img/favicon/apple-icon-precomposed.png new file mode 100644 index 0000000000000000000000000000000000000000..cd3635a6dc2af2ecc364a99768424b12fd7e69da GIT binary patch literal 17158 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 E022prDF6Tf literal 0 HcmV?d00001 diff --git a/install/bin/electron/resources/app/img/favicon/apple-icon.png b/install/bin/electron/resources/app/img/favicon/apple-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..cd3635a6dc2af2ecc364a99768424b12fd7e69da GIT binary patch literal 17158 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 E022prDF6Tf literal 0 HcmV?d00001 diff --git a/install/bin/electron/resources/app/img/favicon/browserconfig.xml b/install/bin/electron/resources/app/img/favicon/browserconfig.xml new file mode 100644 index 0000000..c554148 --- /dev/null +++ b/install/bin/electron/resources/app/img/favicon/browserconfig.xml @@ -0,0 +1,2 @@ + +#ffffff \ No newline at end of file diff --git a/install/bin/electron/resources/app/img/favicon/favicon-16x16.png b/install/bin/electron/resources/app/img/favicon/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..09adf921a0468a44a6b36a4ecf986dc550b74afd GIT binary patch literal 1251 zcmZ{hc~F~07{(W&S_%x}9|fK21V=kmCnqF?v<89!f&%3#_9h2kj-fy%d=z1na98==8E>ePoG@ojWtD++0*^pDR};Wy-4N9`>bTaoU}~=2a&% zr?1s5Xf_OU3ib5d(z;f6tD@ypT!CysrPJ?-OJ(T|ifzNrALH_lfhmJw=Xzv6>Uvj7?sxE0%Dk>l%r0&A4$rprj*m{y zGX)vU)CrmL#k_K5cxwJ;`J?pG=8C4@e{Afkdf1~>YnIfSDY^1fL56F}_}r3KwYok# zzg%>$J+Hd8rEBC-=g64Lax2Rg1TU5J+rJu=~uI^M$&Aa+Q8nyRB4d*48&t3!Au!rHd-foJt>EE7GqKFKg&L_f^rwn|Bqt&ZtYqu zB^Y0j`?(hre6#Oe7HrJLtW(jj8rLk~*%eNQive#YBiL?`$A(`Rm(M|X^D}ZTFpYfg z{9$^63B#Ua6F>;{Ih&ls2)vfWIPDp7BZ+aI5n%36Q}fyf!Ow=sc1{iTj71b>lo$PC zl2T%0>Yms-dbxGTvWL_Jf^tGEhbfJ2sf8^mWtnwp)%izLuHLrwe>~AK((meqCv+Ct zQ_X59PL@6ouQ)Q9BurAJ@bwBib2HZv$_)mcZg2D3@z4Ccxoj44@HmgndSg8MR$jK% zTm4_@mG*p$jFd~Ibq~U-xE=nT!Gj$mn z0z0E)urMZqOQSKPcrg)3BubfX;f?FYbwoU|k1HR}20UCNsLR$ z!6~_u5ISU{D9I%bmAfWGa@iQ{PwT98I(x0NzV*D%`rhaF{QvL!e(POdq65K7W{=7q z003lctZ`0YR^JIJ2sj3Yg)MK?VTu#S;K9cL6|&m0j;>3>F|>wpKV`d*`|LtSB9vk!D%D27=l8 zM_6|Fnt~MC24_w@-&&IqZbw{G;G3;>?}jKJR^644IwW`7ohnCiZ9@+GjHH#+1aoUf z`r9I_+wu4=e|$Zo*T2`QvLR7GyTo|co`rubAXjB6JDejawJGgONOaO-|RvsB}i#ViO1CwWb^tk#eyZ)Gk&rUYbwKaFuWm@ zwkkIE8%?q3#P|2Nn2xnm(u&>o7A}8xxbH|ictC28w~G7G5|#Y?o-^~Cjx^pfMcXPZ zPwoYeH~lFX{YRJNCDt4b`FLcr&MKmyNV~j=B{$scY#kun#lavV#GVM(LNkI=F*o^o6`b6){*6f zK6A?z^S!DOVxL=X7VDp$7ZxIMKyTuRvH6Friz}i9`a{N(wV9Wpsv(yoP`xu#YA#qmH#vT? z?zkG}m;0B#Z+lKp9qd=oA1mWG<=0k_?M^$$?~gI|hNCN-Nxm zKHzIqaruKq)~PVG+i*%)O)HjNl1rT}w91Rju95hFQ;{*O9yMpot)^!leV&bKjaIO8 z{8uyMrk?c+%!w<>GK^xzGt((8 zW%(4fy;oym@>^`*lu{TZqpcqGX!M1S{FFoe`fq5#e*0E7T4&4`Qg7(w@F@3DT(Lsy z@#;P+<>d)#5sX_KCl=2my^+$gryMkyRMpUlDmjot&|o^MRE>AZf7B|zk38(Mo+D-% zYjNSMF{@e7B{$4WY_Do%O&clR`=#@|S^4FFeZyzR&`yF+o|B(6ZG>tvi_^_H zh3)jv)Yk#32ED@yUZS|)THDo?Kj7#b7k)&|8t?JGH5>Di(6OZ ze^!@ScU<6|x^vxH`>+~3r+8l+23D_Nq=kiKd`aJ<`S#P+qKtwo|Lrz{Y5#foMW~OF0pPQdz zel@eKd7K&^eB#RKw3Mfb5!^^sx3k|}YeTkDoEKB#n;*8MXZ9TWErG`WBHoR7T0FnV z{?>1R6s|8wh{wOe_RcjFXz?pTBURC}Iwc;tXJ|vMsngq#{6&RbioZA0~>Y$~eo&f@MRd<9Lsrzs^EDRLN<#P4u zJ2V&|tG{R5%@{V-4x3XUSt5b%>^1Ofp^qR3Pf`Xt&5j_@Lrjl57)eXv6xT;E9c RzN4T6U~`6mE4A>v`X}I`=GFiJ literal 0 HcmV?d00001 diff --git a/install/bin/electron/resources/app/img/favicon/favicon-96x96.png b/install/bin/electron/resources/app/img/favicon/favicon-96x96.png new file mode 100644 index 0000000000000000000000000000000000000000..38484ee8da626ee794ebb2e15086d3cdcf756f14 GIT binary patch literal 7086 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 UE14J+Fb@D(NkxfDF~flW0poslUH||9 literal 0 HcmV?d00001 diff --git a/install/bin/electron/resources/app/img/favicon/favicon.ico b/install/bin/electron/resources/app/img/favicon/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..bbf93a15721c50068df90e9538c6847d1fff4d17 GIT binary patch literal 1150 zcmbVMT}V_x6uv=ky+{v1LD6GxVMJjNl6mT zd!_uXlC(pTqNfPaC-=+@!O%s?U5=ba3BaK8vZZCLW_uY=UyQX}zb-u&X8>cZ@u%EPAS>MJod^a77psjf_Xwu%r6A^0xi{{wX*B!IjEVk_ zo6Z&Y|MT09^6W#f>CZzRHu4yupQx?v#{eeH-Fz=bJ;Q6L>DSj%huVS*VD+2Rol^7p z9_wXQ1KXIH^8evyeW1PXQC>Rr^JkuCugZd}saQKB3PtOadCM@YBRw1ZqJNCl#V{1+ zaGXu7_os@I;cP16nBey=Ex^4nvkCi9cOT_B$%ur592c4?YXLZ_GN~7jK^|#?5?Vo+ z>Kc?i2&^n)q^ki>^3#bo3u{52dZy@A=CybEzIVb_nSt?}dk`FYkDgWoicaoE&7E_w PXj(FzMIFTd!2kNcGpUjh literal 0 HcmV?d00001 diff --git a/install/bin/electron/resources/app/img/favicon/manifest.json b/install/bin/electron/resources/app/img/favicon/manifest.json new file mode 100644 index 0000000..013d4a6 --- /dev/null +++ b/install/bin/electron/resources/app/img/favicon/manifest.json @@ -0,0 +1,41 @@ +{ + "name": "App", + "icons": [ + { + "src": "\/android-icon-36x36.png", + "sizes": "36x36", + "type": "image\/png", + "density": "0.75" + }, + { + "src": "\/android-icon-48x48.png", + "sizes": "48x48", + "type": "image\/png", + "density": "1.0" + }, + { + "src": "\/android-icon-72x72.png", + "sizes": "72x72", + "type": "image\/png", + "density": "1.5" + }, + { + "src": "\/android-icon-96x96.png", + "sizes": "96x96", + "type": "image\/png", + "density": "2.0" + }, + { + "src": "\/android-icon-144x144.png", + "sizes": "144x144", + "type": "image\/png", + "density": "3.0" + }, + { + "src": "\/android-icon-192x192.png", + "sizes": "192x192", + "type": "image\/png", + "density": "4.0" + } + ] +} \ No newline at end of file diff --git a/install/bin/electron/resources/app/img/favicon/ms-icon-144x144.png b/install/bin/electron/resources/app/img/favicon/ms-icon-144x144.png new file mode 100644 index 0000000000000000000000000000000000000000..6aa79d8f6bec08a6381a56a5ec969b936f722ef9 GIT binary patch literal 12179 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 literal 0 HcmV?d00001 diff --git a/install/bin/electron/resources/app/img/favicon/ms-icon-310x310.png b/install/bin/electron/resources/app/img/favicon/ms-icon-310x310.png new file mode 100644 index 0000000000000000000000000000000000000000..12046d8226215dd6366efef3ad25f62253736e99 GIT binary patch literal 40744 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%0AEqn2kF3l^WN68uoPy=|T%nZtdCn+HDa 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 XARymT7AYgZ0Z(07`&lK_>dk)vWynfh literal 0 HcmV?d00001 diff --git a/install/bin/electron/resources/app/img/favicon/ms-icon-70x70.png b/install/bin/electron/resources/app/img/favicon/ms-icon-70x70.png new file mode 100644 index 0000000000000000000000000000000000000000..5135560d8b047318544e68a5c3242ef7107f3c32 GIT binary patch literal 5051 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 WaO1-kk~8BX0ALyh>h-D)G5-ZLkvOsd literal 0 HcmV?d00001 diff --git a/install/bin/electron/resources/app/img/fingerprint/finger1.svg b/install/bin/electron/resources/app/img/fingerprint/finger1.svg new file mode 100644 index 0000000..a787ffa --- /dev/null +++ b/install/bin/electron/resources/app/img/fingerprint/finger1.svg @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/install/bin/electron/resources/app/img/fingerprint/finger2.svg b/install/bin/electron/resources/app/img/fingerprint/finger2.svg new file mode 100644 index 0000000..6453559 --- /dev/null +++ b/install/bin/electron/resources/app/img/fingerprint/finger2.svg @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/install/bin/electron/resources/app/img/fingerprint/finger3.svg b/install/bin/electron/resources/app/img/fingerprint/finger3.svg new file mode 100644 index 0000000..71aa557 --- /dev/null +++ b/install/bin/electron/resources/app/img/fingerprint/finger3.svg @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/install/bin/electron/resources/app/img/fingerprint/finger4.svg b/install/bin/electron/resources/app/img/fingerprint/finger4.svg new file mode 100644 index 0000000..2ebb62e --- /dev/null +++ b/install/bin/electron/resources/app/img/fingerprint/finger4.svg @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/install/bin/electron/resources/app/img/fingerprint/finger5.svg b/install/bin/electron/resources/app/img/fingerprint/finger5.svg new file mode 100644 index 0000000..5aa5729 --- /dev/null +++ b/install/bin/electron/resources/app/img/fingerprint/finger5.svg @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/install/bin/electron/resources/app/img/fingerprint/fingerprint-check.svg b/install/bin/electron/resources/app/img/fingerprint/fingerprint-check.svg new file mode 100644 index 0000000..3634d28 --- /dev/null +++ b/install/bin/electron/resources/app/img/fingerprint/fingerprint-check.svg @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/install/bin/electron/resources/app/img/fingerprint/fingerprint-crosshair.svg b/install/bin/electron/resources/app/img/fingerprint/fingerprint-crosshair.svg new file mode 100644 index 0000000..ea82751 --- /dev/null +++ b/install/bin/electron/resources/app/img/fingerprint/fingerprint-crosshair.svg @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/install/bin/electron/resources/app/img/fingerprint/fingerprint-remove.svg b/install/bin/electron/resources/app/img/fingerprint/fingerprint-remove.svg new file mode 100644 index 0000000..a28f7fd --- /dev/null +++ b/install/bin/electron/resources/app/img/fingerprint/fingerprint-remove.svg @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/install/bin/electron/resources/app/img/fingerprint/fingerprint-remove_white.svg b/install/bin/electron/resources/app/img/fingerprint/fingerprint-remove_white.svg new file mode 100644 index 0000000..6b7bcf1 --- /dev/null +++ b/install/bin/electron/resources/app/img/fingerprint/fingerprint-remove_white.svg @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/install/bin/electron/resources/app/img/fingerprint/fingerprint-scanning-index.svg b/install/bin/electron/resources/app/img/fingerprint/fingerprint-scanning-index.svg new file mode 100644 index 0000000..2137569 --- /dev/null +++ b/install/bin/electron/resources/app/img/fingerprint/fingerprint-scanning-index.svg @@ -0,0 +1,109 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/install/bin/electron/resources/app/img/fingerprint/fingerprint-scanning.svg b/install/bin/electron/resources/app/img/fingerprint/fingerprint-scanning.svg new file mode 100644 index 0000000..db82b5e --- /dev/null +++ b/install/bin/electron/resources/app/img/fingerprint/fingerprint-scanning.svg @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/install/bin/electron/resources/app/img/fingerprint/fingerprint-search.svg b/install/bin/electron/resources/app/img/fingerprint/fingerprint-search.svg new file mode 100644 index 0000000..77b2cb6 --- /dev/null +++ b/install/bin/electron/resources/app/img/fingerprint/fingerprint-search.svg @@ -0,0 +1,203 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/install/bin/electron/resources/app/img/fingerprint/fingerprint-simple.svg b/install/bin/electron/resources/app/img/fingerprint/fingerprint-simple.svg new file mode 100644 index 0000000..174630b --- /dev/null +++ b/install/bin/electron/resources/app/img/fingerprint/fingerprint-simple.svg @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/install/bin/electron/resources/app/img/hourtrax copy.svg b/install/bin/electron/resources/app/img/hourtrax copy.svg new file mode 100644 index 0000000..05f00e2 --- /dev/null +++ b/install/bin/electron/resources/app/img/hourtrax copy.svg @@ -0,0 +1,90 @@ + + + + + + + image/svg+xml + + + + + + + Hourtrax + + + + + + + + + + + + + + + diff --git a/install/bin/electron/resources/app/img/hourtrax.png b/install/bin/electron/resources/app/img/hourtrax.png new file mode 100644 index 0000000000000000000000000000000000000000..13998623150cd1b5c69775c66eed8a8577181c0c GIT binary patch literal 23443 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⪚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 AX8-^I literal 0 HcmV?d00001 diff --git a/install/bin/electron/resources/app/img/hourtrax.svg b/install/bin/electron/resources/app/img/hourtrax.svg new file mode 100644 index 0000000..05f00e2 --- /dev/null +++ b/install/bin/electron/resources/app/img/hourtrax.svg @@ -0,0 +1,90 @@ + + + + + + + image/svg+xml + + + + + + + Hourtrax + + + + + + + + + + + + + + + diff --git a/install/bin/electron/resources/app/img/logo_512.png b/install/bin/electron/resources/app/img/logo_512.png new file mode 100644 index 0000000000000000000000000000000000000000..37e2068779f8f5eaf709c348ebfb46fbe6d6a2d6 GIT binary patch literal 31456 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 Sp|^nNkBXv(LbaTE@c#jenT=Th literal 0 HcmV?d00001 diff --git a/install/bin/electron/resources/app/img/pot.svg b/install/bin/electron/resources/app/img/pot.svg new file mode 100644 index 0000000..931803d --- /dev/null +++ b/install/bin/electron/resources/app/img/pot.svg @@ -0,0 +1,260 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/install/bin/electron/resources/app/img/poticon512.png b/install/bin/electron/resources/app/img/poticon512.png new file mode 100644 index 0000000000000000000000000000000000000000..bce391c2a46bdbb14fc0c441dd4eb7bc91533f06 GIT binary patch literal 31211 zcmeFYRd5|W&^CCEnVFelJ25jeJ25jeJ7#8PcFfFt z?u?|-Xr_8p-BNe!X-&AitOOz)9vlDwK$MacRRjRQzN%mV7^ttyo!k5i06@^|p{(wt zXy8g>=U{7UVQoU<5Yg7bzPF;&NUe{{|!$NhbHbv1nF`m=LyF3+jz>9EjEm+yw_ zwR2umj-EsL{%~H5S*A-DQiq89`~6fr-U18E$J*PIIIXC~HyezO&0a{)&&ny7zT4(o zj@xSZv|VfSHzE0jML#t95ki$9w3Uz{}Uu_p9&8&vaJLr^wnb z+)o?>0wB(g*pbh-UX6=46YlEn!wQc{AJZix%KT>)h2|L0nh9rI&9I%^*c-+Nr4Pen z$+gn&=EOe?Jm*_xZ3ny>Tti~b+OEUruiWd#VKcURZudSfcAMpSPX|;Q4trt5u3n@@ zG|CBV@9d;kO}@mD?T^17edbgyItW5Nh6f2s-p*s6OOSmJhcj6)$;?hYD{xZObXX8f zWIr7+VBL#^_zrxY+-)^qMGV1le{qZ_!MgBd|BTw>x1<5_LdX2<;HTUBrBMx!LUxgb z69sSFV~U+HHi>l^={QiEkUKfz9p)1UOi56ye8M@xQu4ZQ<2b}{jlKV8R^8l7i57oU zA#8K>Jpt1w-$%M)US5uL@Qb#+J%c`Qq zRZH70NJhp+kaT%v<3{H(sMN7?@;b{kgxFvpUYy8eenvd!&r}r41n*cy{Y2Lr9DJ&} zdy)N}#6;-C&?7xyskJaN#4NsGM27&H)w#U)*?zCC^eLkxW zD{1%kAoNU%{ivwtqY*a+C~EWS%#{& z-J=;&_j>yipFbSM|GqLXn@O(g-9CsdCcD{eMDgjArmhM;66(bU=wt~WJP_G4i3s$f z;1yZYHqLbSyK|Peu&rhLx2J5Iag!H<@~LP(=F=za`DEKoZ+0e{kn@lhvZV15gJ%~^ zeri^F=t=cmwArqsRzwka?!=g-7(XD*w4DpV@u(f=5y*lY)dP8^C@2-r8=Gbx9xeu47=WVCv zw-v`C*@7lq^d)?jM!*icU;sNE_!~O^MclBSi@; zoof+DqAx8#e$T|k(X8wVvwo3IvJX*QZDN?jnZ7{j_bq6>n6F;#7)o9gJjeM@*B!q4 z^4Q8kQ70BS(iG_yY*V#nuk;q5rwBN%#8w`={5rCaB+I>5ZsrTppBZhr0S zMThy|qKi-q3)O>Di_hQ2A1;0e_$;sc!5{XD0#kUV9)yNI5fiWTpTB1X9BjH$?qbz$ zI}3gHKySLU3Yc@rNw;`2`Q}^8iG4UO8D~}@d}hN&4QGi?N-IQDnf>Q?q|Dwnm`nNl zQ@={Vsaua+;(wN0!9BD+X41rN4Qo1*VCJ*hXSBaE4dFre&zSx5aixXlv*O4)8|w}E zBSwW^hdMf;#6`cGZ<$_#?H@hm31C~RR$L;N3O|{v9 ))#D9wtCg_u=n)ErtWJBx9~$Z9Ei!au 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 +image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/install/bin/electron/resources/app/img/pottop.png b/install/bin/electron/resources/app/img/pottop.png new file mode 100644 index 0000000000000000000000000000000000000000..5f159c55911a6ef0261a3d5374c4f7e9bd9e7d11 GIT binary patch literal 2689 zcmV-{3V!v8P)EX>4Tx04R}tkv&MmKpe$iQ$>-gh#gcMGE}D)L`58>ibb$c+6t{Ym|Xe=O&XFE z7e~Rh;NZt%)xpJCR|i)?5c~jfadlF3krMxx6k5c1aNLh~_a1le0HI!Hs@X9CsG4OY zV^J}aT@|}t5x@ZYFpRLoOg)}jOv7`0-NVP%y9m$nKKJM7RdOZ+d?N82(+!JwgLr1s z(mC%F2U$^4h|h_`23?T&k?XR{Z=4Gb3p_Juq?7Z+L1MAc#&R38qM;H`6NeO4qkJLb zvch?bvs$jQ<~{if137Ia#dVsah+zqFBp^aY6(y8mAwsK0iisrcM?L%_jz2*znOr3> zax9<%6_Voz|AXJ%n)#_oHz^PWI$v!2V+`op1sXNm{yw(t#tGnm2ClT0zfuQgKS{5( zw9paIzYSbmw={VVxZDATo^;8O9LY~p$mfCgGy0}1Fn9~}thv24_i_3Fq^Yar8{ps& z7%x!vy2rb_+k5->OtZfqpNVq0#GeVc00006VoOIv0RI600RN!9r;`8x010qNS#tmY zE+YT{E+YYWr9XB6000McNliru;|viF92xo3#^3+|2!2UKK~#9!?VEjY6y+VqKYO_V z29Q>1)G?%>Ob5dhxhE7tixvyhP@on?orX;j8D2Ih9j8<5lp>>6P%5J$g>0}YC0S@4 z+WJDtFbYL0TA=rwRvMv}!GKVQmw>z&2+3{#*ynOf$mQ;mOLiIj&FtLm?(??K_xZg) zkA^Pq0qy~^NR6VvDWD$M4Mfm*hbj@Jvq_g%0Aqk#fZ@PEU;~yYBQz%mE&3VoF|Y@C z3#dk#`%`ZJJ_!v}0wsV(*U~BAp&;-)aAk*@vN?_}D}kr5#HSe@W@sK1lne*%2kruL zT9j~4TyH?As{{aH>;zr{Dv{>tHv4MeW}p;rs1NX@hAx|cK!zHv2NuxO_%weQo(Yb) z8CVL8bv^wQcoX;sPy>8|B@Q6UG_VCw01N?cRa_LK6TlK+8Pcpz(BDuXf_D_nG$1j0 z3C*5CRbl(YSZSmiw*3h33pKVzU=6Se*p4MqYeyK@C{8H@zM-D(17;)5H(CKC1V|47 zY3M9K0DjByy>r=kce-4W2mHykx?ckx#1i}3nD}wPF{HV()%S(d!0w>~i-COg^l_T( zhxwqw)pw)^*b!imM}RDI19A-53e>3;*$6bb3XcU2D`j~#PzZb{Ne8!MiPzHrV}Ke% zKJW!#U{lFjk&F`-1GPxAB1yTPz;A##>d6{3rV}>f-&rby*bD{i6i0mv@JxbtYk=h` zwsi*V-5R<)1MG@_+-t zBrG9Q6it1BdZc+KY1zWLV4t53m_RnL8npY6P>dy(w+Tkv znu%L9?>z>V_z)NkY)(+;CTJX!!UyF58xaoPzUHbK56TnbD%1zkz z%u9env^mPrnhs0_9#B?F7^p^naS= zk0}wiBRIry%(VA>0Z4dNZ1Dh$@=}LvMVBM#k)Nz=^db(?i0%JDD^SwN=DyLq0A@1347`bnn#-XhNDz zKrCd_4`F~beQ0H+Pk#e+Eb+e!o>mQu0!tY2_!0(=Hniaga6Q5plXN0NvjEn+ ze4nqWSlHGS#@8Ds3kltOT?uSax?>@M#-l{llti;U=a5XW`%?t8)l`NOm)gDn29A$8 zabI=$0#j4&DN+H#7y#q~1AxD%H$^H8q9w2(qc|HNVtt+jhQ;3o0xpieqyRaBliRKV zJ^d_}<-P($Vu_ud*zbSUZ!Wf$n*nRy%bw%ANwtI z(zyauiyp!b90aZhz74$6!C2Ix42>)nmG;b8^+r-w4TE^vcf2ozl_<+`ne=a7UVu2X zUj5#IE`#19VwWg?<{;6)-!Df%s+D8dm)N#XuP9We0Y6uF6}-Qa%MTDsG!oCX%%@a( zHx|vFfwMX86tKd}wGr@GPOMZG)*x)|_eOUZxxka^ZZXoVyL$N8HnnM68fxqI!rCvjqy}P8>uMC1O0*?X{fO9|z(meYmAkI$qdvPMI z1;9p?f$UtmVe~9up}L!kG$TG(oW9@?u*5N-7$-0|3MXlnmxdk~iZJ@8RJLd)2xB%7 z+nBwSvvtqo6AJicAXs9z0_7-91U8H=Cpf3plG2Y!wq+HdaCUbZvXhJ>AH+BT{}F#!7F9FHi%IZQO%B?TIlsCpP_p2&3EC6j<0 z!r4OUrh`5KW*bxFx6t^35;es*Ig2Uk0^6PsJb^H-!wH+Ww9t;?oMd_qX?E7m`fb3Z z7SA?OHN9Pc6yt=QV@D05z&hV>i<1ni#@X0?Elza!Hk=&#VB*K_vef^*IQf&nc6 literal 0 HcmV?d00001 diff --git a/install/bin/electron/resources/app/img/toplogo.png b/install/bin/electron/resources/app/img/toplogo.png new file mode 100644 index 0000000000000000000000000000000000000000..37e2068779f8f5eaf709c348ebfb46fbe6d6a2d6 GIT binary patch literal 31456 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 Sp|^nNkBXv(LbaTE@c#jenT=Th literal 0 HcmV?d00001 diff --git a/install/bin/electron/resources/app/index.fingerprint.html b/install/bin/electron/resources/app/index.fingerprint.html new file mode 100644 index 0000000..3162782 --- /dev/null +++ b/install/bin/electron/resources/app/index.fingerprint.html @@ -0,0 +1,126 @@ + + + + + + + + + +Time Clock + + +
+
+ +

Tappez sur l'écran pour commencer
Tippen Sie auf den Bildschirm, um zu starten

+
+ + + + + + +
+
+
+
+ + + + + + + + + + + + + \ No newline at end of file diff --git a/install/bin/electron/resources/app/js/admin.js b/install/bin/electron/resources/app/js/admin.js new file mode 100644 index 0000000..ff835d2 --- /dev/null +++ b/install/bin/electron/resources/app/js/admin.js @@ -0,0 +1,66 @@ +// let choice = {"current_schemata":null}; + +let app = { + currentview: null, + viewpanel: function(pnlname){ + let panels = document.getElementsByClassName("panel"); + //let toolbars = document.getElementsByClassName("paneltoolbar"); + console.log("change panel to " + pnlname); + app.currentview = pnlname; + for (let p=0;pZugriff gewährt!", +"-1":"Erreur/Fehler! Veuillez essayer de placer le centre de l'empreinte digitale à plat sur le capteur, ou cette empreinte existe déjà!
Versuchen Sie bitte, die Mitte des Fingerabdrucks flach auf den Sensor zu legen, sonst ist der Fingerabdruck bereits vorhanden.", +"2":"l'empreinte digitale a été sauvegardée!
Der Fingerabdruck wurde gespeichert!", + + "-4": "Erreur/Fehler! La bibliothèque d'empreintes digitales est pleine! Prière de contacter le Support!
Die Fingerabdruck-Bibliothek ist voll! Bitte kontaktieren Sie den Support!", +"-5":"Erreur/Fehler! Utilisateur non verifé! Veuillez essayer de placer le centre de l'empreinte digitale à plat sur le capteur!
Nicht verifizierter Benutzer! Bitte versuchen Sie, die Mitte des Fingerabdrucks flach auf den Sensor zu legen!", +"-8":"Timed Out!" + +} + +let fingerprint ={ + unload: function(){ + const fpunload = spawn('bash', ['/home/pot/bin/fpunload.sh','']); + fpunload.stdout.on('data', (data) => { + console.log(`fpread stdout: ${data}`); + }); + + fpunload.stderr.on('data', (data) => { + console.error(`fpread stderr: ${data}`); + }); + + fpunload.on('close', (code) => { + console.log(`fpread: child process exited with code ${code}`); + }); + }, + read: function(){ + console.log("Read Start",moment(new Date()).format('hh:mm:ss')); + timeclock.startCheckIdle(); + const fpread = spawn('python', ['/home/pot/bin/fp.py', 'read',preferences.timeout]); + fpread.stdout.on('data', (data) => { + console.log(`fpread stdout: ${data}`); + console.log("Read OUT End",moment(new Date()).format('hh:mm:ss')); + + if (data.toString().startsWith("u")){ + //var user=data.toString(); + var user = data.toString().replace(/^u/,''); + console.log("fp user",user); + console.log("sql","select id_staff,fingerhash,fingertype from fingerprints where fingerhash='"+user+"' and id_staff='"+timeclock.currentuser.id+"';"); + db.query("select id_staff,fingerhash,fingertype from fingerprints where fingerhash='"+user+"' and id_staff='"+timeclock.currentuser.id+"';").then(fpdata => { + console.log("fpdata",fpdata); + if (fpdata){ + console.log("data compared",fpdata) + timeclock.loadtimetrack(); + app.snackbar(fpmsg["0"],'green'); + } else { + fingerprint.read(); + app.snackbar(fpmsg["-5"],'red'); + } + }).catch(e => { + console.log("db error",e); + fingerprint.read(); + app.snackbar(fpmsg["-5"],'red'); + }) + } else { + app.snackbar(fpmsg["-5"],'red'); + fingerprint.read(); + } + + + }); + + fpread.stderr.on('data', (data) => { + console.log("Read ERR end",moment(new Date()).format('hh:mm:ss')); + console.error(`fpread stderr: ${data}`); + if (data == "8"){ + timeclock.loadusers(); + } else { + + } + }); + + fpread.on('close', (code) => { + console.log(`Read CLOSE ${code} end`,moment(new Date()).format('hh:mm:ss')); + //console.log(`fpread: child process exited with code ${code}`); + if (`${code}` != "0" ){ + timeclock.loadusers(); + } + }); + }, + write: function(){ + console.log("Write Start",moment(new Date()).format('hh:mm:ss')); + const fpwrite = spawn('python', ['/home/pot/bin/fp.py', 'write',preferences.timeout]); + timeclock.startCheckIdle(); + fpwrite.stdout.on('data', (data) => { + console.log("Write OUT End",moment(new Date()).format('hh:mm:ss')); + console.log("Write result",`${data}`); + console.log(data.toString()); + if (data.toString().startsWith("au")){ + var newuser = data.toString().replace(/^au/,''); + console.log("write FP to User:",timeclock.currentuser,timeclock.writefinger,newuser); + db.exec("REPLACE INTO fingerprints (id_staff,fingerhash,fingertype) VALUES ('"+ timeclock.currentuser.id +"','"+ newuser +"','"+ timeclock.writefinger +"');").then(dbdata => { + console.log("newfinger db sql",dbdata); + document.getElementById("regfinger"+ timeclock.writefinger).classList.add("orange"); + app.snackbar(fpmsg["2"],'green'); + document.getElementById("btnwritefinger").classList.remove("green"); + //fingerprint.write(); + } + ).catch(e =>{ + console.log("errordb",e); + app.snackbar(fpmsg["-1"],'red'); + document.getElementById("btnwritefinger").classList.remove("green"); + //fingerprint.write(); + }); + } else { + app.snackbar(fpmsg["-1"],'red'); + document.getElementById("btnwritefinger").classList.remove("green"); + //fingerprint.write(); + } + + }); + + fpwrite.stderr.on('data', (data) => { + console.log("Write ERR end",moment(new Date()).format('hh:mm:ss')); + console.error(`fpwrite: ${data}`); + if (data == "8"){ + timeclock.loadusers(); + } else { + + } + + }); + + fpwrite.on('close', (code) => { + console.log(`Write CLOSE ${code} end`,moment(new Date()).format('hh:mm:ss')); + if (`${code}` != "0" ){ + timeclock.loadusers(); + } + //console.log(`fpwrite: child process exited with code ${code}`); + }); + } +} \ No newline at end of file diff --git a/install/bin/electron/resources/app/js/moduleglobal.js b/install/bin/electron/resources/app/js/moduleglobal.js new file mode 100644 index 0000000..4b0991c --- /dev/null +++ b/install/bin/electron/resources/app/js/moduleglobal.js @@ -0,0 +1,24 @@ +// document.addEventListener("DOMContentLoaded", function() { +// //console.log( "Iframe "+ location.pathname.substring(location.pathname.lastIndexOf("/")) +" ready!" ); +// mpref.loadconfig(); +// initpage(); +// }); + +// var mpref ={ +// cfg: null, +// getSearchParams: function (k){ +// //alert(location.href); +// var p={}; +// //console.log("params =>" + location.search); +// location.search.replace(/[?&]+([^=&]+)=([^&]*)/gi,function(s,k,v){p[k]=v}); +// return k?p[k]:p; +// }, +// loadconfig: function(){ +// this.cfg = this.getSearchParams(); +// //var page = location.pathname.substring(location.pathname.lastIndexOf("/")); +// //page = page.replace(/\.html/,''); +// //apppref.getpreference(page); +// //appdb.dbfile = this.cfg.dbfile; +// //appdb.url = decodeURIComponent(this.cfg.serviceurl) + 'sqlite/' + decodeURIComponent(this.cfg.dbfile); +// } +// } diff --git a/install/bin/electron/resources/app/js/renderer.js b/install/bin/electron/resources/app/js/renderer.js new file mode 100644 index 0000000..f33e58e --- /dev/null +++ b/install/bin/electron/resources/app/js/renderer.js @@ -0,0 +1,83 @@ +const { dialog } = require('electron'); +const fs = require('fs'); +const os = require('os'); +const path = require('path'); +let debug = 0; +let usersystem = { + profilepath: function(){ + cfgpath = os.homedir() + '/.hourtrax/'; + if (debug == 1){ + cfgpath = path.dirname(__dirname)+ '/.hourtrax/'; + } + return cfgpath; + }, + setPreference: function(key,data){ + console.log("set preference to: " + this.profilepath() + key + ".json"); + console.log(data); + if ((typeof data == 'object') || (typeof data == 'array')){ + data = JSON.stringify(data); + } + let result = fs.writeFileSync(this.profilepath() + key + ".json", data); + return result; + }, + getPreference: function(key){ + console.log("getPreference:" + this.profilepath() + key + ".json"); + let data = null; + if (fs.existsSync(this.profilepath() + key + ".json")){ + console.log("Read Key:" + key); + let data = fs.readFileSync(this.profilepath() + key + ".json", 'utf-8'); + if (data.startsWith("{") || data.startsWith("[")){ + data = JSON.parse(data); + } + return data; + } + return data; + }, + // selectfile: function(dlgtitle,lastpath,filefilters=null,multiselect=false){ + // let props = ['openFile']; + // if (multiselect == true){ + // props.push('multiSelections'); + // } + // return dialog.showOpenDialog({title: dlgtitle,defaultPath: lastpath, filters: filefilters, properties: props }); + // }, + // selectdir: function(dlgtitle,lastpath){ + // return dialog.showOpenDialog({title: dlgtitle,defaultPath: lastpath, filters: filefilters, properties: ['openDirectory'] }); + // }, + // showMessage: function(msgTitle,msg,msgdetail,msgtype,msgButtons=["OK"],defautlbtnid=0,cancelbtnid){ + // return dialog.showMessageBox({type: msgtype, // + // title: msgTitle, + // buttons:msgButtons, + // message: msg, + // detail: msgdetail, + // defaultId: defautlbtnid, + // cancelId: cancelbtnid}); + // }, + // showError: function(errtitle,errmsg){ + // dialog.showErrorBox(errtitle, errmsg); + // }, + + // getDataSets: function(){ + // let datasets =[]; + // //console.log(os.platform()); + // //console.log("ProfilePath:" + this.profilepath()); + // let files = fs.readdirSync(this.profilepath()); + // files.forEach(function(file) { + // if (file.match('.*\.json')){ + // if (file != 'invoicejournal.json'){ + // datasets.push({"label":file.replace('.json',''),"value":file}); + // } + + // } + // }); + // //console.log(datasets); + // return datasets; + // }, + // getsysinfo: function(){ + // return { + // "hostname": os.hostname(), + // "userdir": os.homedir(), + // "platform": os.platform(), + // "userinfo":os.userInfo() + // } + // } +} \ No newline at end of file diff --git a/install/bin/electron/resources/app/js/request.js b/install/bin/electron/resources/app/js/request.js new file mode 100644 index 0000000..e06f663 --- /dev/null +++ b/install/bin/electron/resources/app/js/request.js @@ -0,0 +1,125 @@ +var api = 'http://localhost:8080/'; +// if (location.pathname.indexOf('module') > 0){ +// api = location.origin + location.pathname.substring(0, location.pathname.indexOf('module')) + '/'; +// } + +async function postData(url = '', data = {}) { + const response = await fetch(api + url, { + method: 'POST', + //mode: 'same-origin', + cache: 'no-cache', + //credentials: 'same-origin', + headers: { + 'Content-Type': 'application/json' + + }, + redirect: 'follow', + //referrerPolicy: 'strict-origin', + body: JSON.stringify(data) + }); + + return response.json(); +} + + + +// var req = { +// multipartform: function(url,frmdata,callback){ +// var ret = null; +// // var rdata = null; +// if (!callback) { +// callback = req.asyncNoEvent; +// } +// var request = new XMLHttpRequest(); +// var sendurl = api + url; +// request.open("POST", sendurl, true); +// request.onload = function(){ +// if (request.status >= 200 && request.status <= 400){ +// if (request.getResponseHeader("Content-Type").indexOf('application/json') == 0){ +// var xparse = JSON.parse(request.responseText); +// ret = xparse.result; +// } +// else { +// ret = request.responseText; +// } +// callback(ret); +// } else { +// alert("Server ERROR:" + request.status + "\n" + request.responseText); +// } +// }; +// request.onerror = function(){ +// alert("Connection ERROR!\n" + url); +// }; + +// request.setRequestHeader('Content-Type','multipart/form-data; charset=UTF-8'); +// request.send(frmdata); +// return ret; +// }, +// reqdata: function(url,data,callback){ +// var ret = null; +// var rdata = null; +// if (!callback) { callback = req.asyncNoEvent; } +// var request = new XMLHttpRequest(); +// if (typeof data == 'object'){ +// var xdata = []; +// for (var i in data){ +// var value = ''; +// if (typeof(data[i]) == 'object'){ +// value = encodeURIComponent(JSON.stringify(data[i])); +// } else { +// value = encodeURIComponent(data[i]); +// } +// xdata.push(i + "=" + value); +// } +// rdata = xdata.join("&"); +// }else { +// rdata = data; +// } +// //console.log("Data Request for " + url); +// //console.log(rdata); +// var sendurl = api + url; +// console.log(sendurl + '?' + rdata); +// request.open("POST", sendurl, true); +// request.onload = function(){ +// if (request.status >= 200 && request.status <= 400){ +// if (request.getResponseHeader("Content-Type").indexOf('application/json') == 0){ +// if (request.responseText){ +// var xparse = JSON.parse(request.responseText); +// ret = xparse.result; +// } else { +// ret = null; +// } +// }else { +// ret = request.responseText; +// } +// callback(ret); +// } else { +// console.log("Server ERROR: " + request.status + "\n" + request.responseText); +// } +// }; +// request.onerror = function(){ +// console.log("ERROR: connection ERROR\n" + url); +// }; +// request.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=UTF-8'); +// request.send(rdata); +// return ret; +// }, +// asyncNoEvent: function(data){ +// console.log("NoEvent Called!"); +// console.log(data); +// } + +// } + +// var report ={ +// generate: function(repname,filename,data){ +// showdataloaddlg("Création PDF encours","Attendez s.v.p."); +// postData("report.cgi",{"generate":repname,"file": filename + ".pdf","data":data}).then (data => {closedataloaddlg();report.openreport(data);}); +// return false; +// }, +// openreport(data){ +// if (data && data.file){ +// window.open(api + "report.cgi?open=" + encodeURIComponent(data.file)); +// } +// } +// } \ No newline at end of file diff --git a/install/bin/electron/resources/app/js/shell.js b/install/bin/electron/resources/app/js/shell.js new file mode 100644 index 0000000..130fea5 --- /dev/null +++ b/install/bin/electron/resources/app/js/shell.js @@ -0,0 +1,46 @@ +const { spawn } = require('child_process'); + +let shell = { + scanwlans: function(){ + const scanwlan = spawn('bash', ['/home/pot/bin/scanwlan.sh','get']); + scanwlan.stdout.on('data', (data) => { + console.log(`scanwlan stdout: ${data}`); + }); + + scanwlan.stderr.on('data', (data) => { + console.error(`scanwlan stderr: ${data}`); + }); + + scanwlan.on('close', (code) => { + console.log(`scanwlan exit code ${code}`); + }); + }, + netstatus: function(){ + const netstatus = spawn('bash', ['ip --json addr show']); + netstatus.stdout.on('data', (data) => { + console.log(`netstatus stout: ${data}`); + }); + + netstatus.stderr.on('data', (data) => { + console.error(`netstatus stderr: ${data}`); + }); + + netstatus.on('close', (code) => { + console.log(`netstatus: exit code ${code}`); + }); + }, + savewlan: function(ssid,psk){ + const netstatus = spawn('bash', ['/home/pot/bin/savewlan.sh','"'+ ssid+'"',psk]); + netstatus.stdout.on('data', (data) => { + console.log(`netstatus stout: ${data}`); + }); + + netstatus.stderr.on('data', (data) => { + console.error(`netstatus stderr: ${data}`); + }); + + netstatus.on('close', (code) => { + console.log(`netstatus: exit code ${code}`); + }); + } +} \ No newline at end of file diff --git a/install/bin/electron/resources/app/js/sqlite.js b/install/bin/electron/resources/app/js/sqlite.js new file mode 100644 index 0000000..c39df24 --- /dev/null +++ b/install/bin/electron/resources/app/js/sqlite.js @@ -0,0 +1,76 @@ +const sqlite3 = require('sqlite3').verbose(); + +let db = { + dbh: null, + connect: function(dbfile){ + console.log("connect to" + dbfile); + if (db.dbh != null){ + db.disconnect(); + } + db.dbh = new sqlite3.Database(dbfile); + }, + query: function(sql){ + return new Promise((resolve, reject) => { + db.dbh.get(`${sql}`, (err, row) => { + if (err) { + reject(err); // optional: you might choose to swallow errors. + } else { + resolve(row); // accumulate the data + } + }); + }); + }, + queryarray: function(sql){ + return new Promise((resolve, reject) => { + let queries = []; + db.dbh.each(`${sql}`, (err, row) => { + if (err) { + reject(err); // optional: you might choose to swallow errors. + } else { + queries.push(row); // accumulate the data + } + }, (err, n) => { + if (err) { + reject(err); // optional: again, you might choose to swallow this error. + } else { + resolve(queries); // resolve the promise + } + }); + }); + }, + querybykey: function(key,sql){ + return new Promise((resolve, reject) => { + let ret = {} + db.dbh.each(`${sql}`, (err, row) => { + if (err) { + reject(err); // optional: you might choose to swallow errors. + } else { + ret[row[key]] = row; + } + }, (err, n) => { + if (err) { + reject(err); // optional: again, you might choose to swallow this error. + } else { + resolve(ret); // resolve the promise + } + }); + }); + }, + exec: function(sql,callback){ + return new Promise((resolve, reject) => { + db.dbh.exec(sql, (err,n) => { + if (err) { + reject(err); // optional: you might choose to swallow errors. + } else { + resolve(n); // accumulate the data + } + }); + }); + }, + newuuid: function(){ + return db.query("SELECT lower(hex( randomblob(4)) || '-' || hex( randomblob(2)) || '-' || hex( randomblob(2)) || '-' || hex( randomblob(2)) || '-' || hex(randomblob(6))) as id;"); + }, + disconnect: function(){ + db.dbh = null; + } +} \ No newline at end of file diff --git a/install/bin/electron/resources/app/js/timecalc.js b/install/bin/electron/resources/app/js/timecalc.js new file mode 100644 index 0000000..489f487 --- /dev/null +++ b/install/bin/electron/resources/app/js/timecalc.js @@ -0,0 +1,129 @@ +let timecalc = { + MinutesToTime:function (minutes) { + //console.log("MtoT: " + minutes); + if ((minutes == null) || (minutes == "")){ return "00:00";}; + let hours = parseInt(minutes/60); + let restminutes = minutes-(hours*60); + //console.log("H:" + hours + " M:" +restminutes); + //console.log("H:" + timecalc.lpad(hours,2,'0') + " M:" +timecalc.lpad(restminutes,2,'0')); + return timecalc.lpad(hours,2,'0') + ":"+ timecalc.lpad(restminutes,2,'0'); + }, + TimeToMinutes:function (strtime){ + let hours = parseInt(strtime.substring(0,2)) * 60; + let minutes = parseInt(strtime.substring(3,5)); + //console.log(hours +"+" + minutes); + return hours+minutes; + }, + lpad: function(str, length,padString) { + let xstr = str.toString(); + //console.log("xstr" + xstr); + while (xstr.length < length){xstr = padString + xstr}; + return xstr; + }, + mondayBefore: function(sdate){ + if (sdate == null){ + sdate=new Date(); + } + let day = sdate.getDay(); + let prevMonday = new Date(); + if(sdate.getDay() == 0){ + prevMonday = new Date().setDate(sdate.getDate() - 0); + } + else{ + prevMonday = new Date().setDate(sdate.getDate() - day); + } + return new Date(prevMonday); + }, + sundayAfter: function(sdate){ + let nextSunday = new Date(); + }, + StringToTime: function(strin){ + strin = strin.substring(0,5); + strin = strin.replace(/\D/g,''); + if (strin.length == 0){ return "";} + if (strin.length <= 2){ + if (strin > "23") {return ""} else { + return timecalc.lpad(strin,2,'0')+":00"; + } + } else if (strin.length == 3){ + let hours = strin.substring(0,1); + let minutes = strin.substring(1,3); + if (minutes > "59"){ return "";} + return timecalc.lpad(hours,2,'0')+ ":"+ timecalc.lpad(minutes,2,'0'); + } else if (strin.length == 4){ + let hours = strin.substring(0,2); + let minutes = strin.substring(2,4); + if ((hours > "23") || (minutes > "59")){return "";} + return timecalc.lpad(hours,2,'0')+ ":"+ timecalc.lpad(minutes,2,'0'); + } + return ""; + }, + StringToInterval: function(strin){ + + if (strin.indexOf(":") > 0){ + let spl = strin.split(":"); + hours = spl[0].replace(/\D/g,''); + if (hours == ""){ + hours = "0"; + } + minutes = spl[1].replace(/\D/g,''); + if (minutes > "59"){ + minutes = "0"; + } + return hours + ":" + timecalc.lpad(minutes,2,'0'); + } + if (strin == ""){ return "";} + strin = strin.replace(/\D/g,''); + return strin + ":00"; + + }, + MinutesToInterval: function(minutes){ + if ((minutes == null) || (minutes == "")){ return "0:00";} + let prep =""; + if (minutes < 0){ + prep = "-"; + minutes = minutes * -1; + } + let hours = parseInt(minutes/60); + let restminutes = minutes-(hours*60); + return prep+hours+ ":"+ timecalc.lpad(restminutes,2,'0'); + }, + IntervalToMinutes: function(strin){ + if (strin == "" || strin == null){ + return 0; + } + let mult = 1; + if (strin.startsWith("-")){ + mult = -1; + strin = strin.replace(/-/g,''); + } + let spl = strin.split(":"); + let hours = parseInt(spl[0]) * 60; + let minutes = parseInt(spl[1]); + return (hours+minutes) * mult; + }, + validateTime(obj){ + obj.value = timecalc.StringToTime(obj.value); + return false; + }, + validateInterval(obj){ + obj.value = timecalc.StringToInterval(obj.value); + return false; + }, + // multiplyInterval(obj,factor){ + // let mval = timecalc.IntervalToMinutes(obj.value) * factor; + // obj.value = timecalc.MinutesToInterval(mval); + // return false; + // }, + copyInterval(obj,idobjout,factor){ + if (factor){ + let mval = timecalc.IntervalToMinutes(obj.value) * factor; + document.getElementById(idobjout).value = timecalc.MinutesToInterval(mval); + }else { + document.getElementById(idobjout).value=obj.value; + } + if (document.getElementById(idobjout).value == '0:00'){ + document.getElementById(idobjout).value = ''; + } + } +} diff --git a/install/bin/electron/resources/app/js/timeclock.js b/install/bin/electron/resources/app/js/timeclock.js new file mode 100644 index 0000000..aa2e501 --- /dev/null +++ b/install/bin/electron/resources/app/js/timeclock.js @@ -0,0 +1,247 @@ + +let timeclock = { + currentuser: null, + currentpanel: null, + tbl: null, + lasttrack: null, + interval: null, + intervaltime: preferences.timeout, + writefinger: null, + loadscreensaver: function(){ + console.log("Load screensaver"); + timeclock.currentpanel = 'screensaver'; + timeclock.currentuser= null; + fingerprint.unload(); + timeclock.stopCheckIdle(); + app.viewpanel('screensaver'); + + }, + loadstatus: function(msg){ + //document.getElementById("statusmsg").innerHTML=msg; + console.log("Load status"); + //timeclock.currentpanel = 'status'; + //timeclock.currentuser= null; + fingerprint.unload(); + //timeclock.tbl.clearData(); + app.viewpanel('status'); + setTimeout('timeclock.loadusers()',4000); + }, + loadusers: function(){ + console.log("Load users"); + timeclock.currentpanel = 'users'; + timeclock.currentuser= null; + fingerprint.unload(); + timeclock.tbl.clearData(); + db.queryarray("select st.id,st.prename,st.surname, count(fp.fingerhash) as fingercount from staff st left join fingerprints fp on (st.id=fp.id_staff) where st.isdisabled is null and st.isblocked is null and st.isdeleted is null group by st.id order by prename,surname;").then(data => { + let ulist = ""; + for (let i in data){ + ulist += ''; + } + document.getElementById('userlist').innerHTML=ulist; + }); + app.viewpanel('users'); + timeclock.startCheckIdle(); + }, + loadfingerwriter: function(){ + + for (var d=1;d<=5;d++){ + console.log("clean finger " + d); + document.getElementById("regfinger"+ d).classList.remove("orange"); + document.getElementById("regfinger"+ d).classList.remove("green"); + } + db.queryarray("select fingertype from fingerprints WHERE id_staff='"+ timeclock.currentuser.id +"';").then( fng => { + for (var d in fng){ + document.getElementById("regfinger"+ fng[d].fingertype).classList.add("orange"); + } + app.viewpanel('writefinger'); + timeclock.startCheckIdle(); + }).catch(e => { console.log(e);}); + + }, + loadfingerprint: function (iduser,fpnum,staffname){ + timeclock.stopCheckIdle(); + timeclock.currentuser= {"id":iduser,"name":staffname}; + var allgr = document.getElementsByClassName("username"); + for (var i in allgr){ + allgr[i].innerHTML = timeclock.currentuser.name; + } + console.log("Fingers:" + fpnum); + if (fpnum == 0){ + for (var d=1;d<=5;d++){ + console.log("clean finger " + d); + document.getElementById("regfinger"+ d).classList.remove("orange"); + document.getElementById("regfinger"+ d).classList.remove("green"); + } + app.viewpanel('writefinger'); + timeclock.startCheckIdle(); + } else { + + // if (preferences.flextime >= 0){ + // db.query("select count(*) as allowed from staffworktimes where datetime('now','localtime') between datetime(starttime1,'-"+preferences.flextime+" minutes') and datetime(endtime1,'+"+preferences.flextime+" minutes') or datetime('now','localtime') between datetime(starttime2,'-"+preferences.flextime+" minutes') and datetime(endtime2,'+"+preferences.flextime+" minutes') and id_staff='"+ timeclock.currentuser.id +"';").then(hasdata => { + // if (hasdata.allowed > 0){ + // for (var d=1;d<=5;d++){ + // document.getElementById("finger"+ d).style.display = 'none'; + // } + // db.queryarray("select fingertype from fingerprints where id_staff='"+ timeclock.currentuser.id +"';").then(data => { + // for (var d in data){ + // document.getElementById("finger"+ data[d].fingertype).style.display = 'block'; + // } + // fingerprint.read(); + // app.viewpanel('readfinger'); + // timeclock.startCheckIdle(); + // }).catch(e => {}); + // } else { + // console.log("Load notallowed"); + // //timeclock.currentpanel = 'status'; + // //timeclock.currentuser= null; + // document.getElementById("flextime").innerHTML=preferences.flextime; + // fingerprint.unload(); + // //timeclock.tbl.clearData(); + // app.viewpanel('returnmsg'); + // setTimeout('timeclock.loadusers()',4000); + // } + + // }).catch(e => {}); + // } else { + for (var d=1;d<=5;d++){ + document.getElementById("finger"+ d).style.display = 'none'; + } + db.queryarray("select fingertype from fingerprints where id_staff='"+ timeclock.currentuser.id +"';").then(data => { + for (var d in data){ + document.getElementById("finger"+ data[d].fingertype).style.display = 'block'; + } + fingerprint.read(); + app.viewpanel('readfinger'); + timeclock.startCheckIdle(); + }).catch(e => {}); + // } + + + + } + }, + registerfinger: function(obj,finger){ + timeclock.writefinger = finger; + var allfingers = document.getElementsByClassName("wfreg"); + for(var i=0;i { + timeclock.gettabledata(); + if (trdata){ + timeclock.lasttrack = trdata; + } + document.getElementById("lasttrack").innerHTML = "Dernier Pointage / Letzter Vorgang" + ((trdata.dspdaydate)?trdata.dspdaydate:"") + " "+ ((trdata.dspstamp_in)?" Entrée / Ein:" + trdata.dspstamp_in:"N/A") + " Sortie / Aus: " +((trdata.dspstamp_out)?trdata.dspstamp_out:"N/A") + ""; + let today = moment().format("YYYY-MM-DD"); + let yesterday = moment().add(-1, 'days').format("YYYY-MM-DD"); + let hournow = moment().format("HH:mm"); + console.log("today:" + today + " => now: " + hournow); + if ((trdata == null) || (trdata.stamp_in != null && trdata.stamp_out != null)){ + document.getElementById("btntrackin").disabled = false; + //document.getElementById("btntrackout").disabled = false; + } else if (trdata.stamp_in != null && trdata.stamp_out == null){ + if (((trdata.daydate == yesterday) && (hournow < "06:00")) || (trdata.daydate == today)){ + document.getElementById("btntrackout").disabled = false; + } else { + document.getElementById("btntrackin").disabled = false; + } + } + app.viewpanel('timetrack'); + timeclock.startCheckIdle(); + }).catch(e => { + console.log("SQL error: " + e); + document.getElementById("btntrackin").disabled = false; + //document.getElementById("btntrackout").disabled = false; + app.viewpanel('timetrack'); + timeclock.startCheckIdle(); + }); + + }, + setTrack:function (direction){ + let sql = ""; + db.newuuid().then(newid => { + if (direction == 'in'){ + sql = "INSERT INTO timetracks (id,id_staff,daydate, stamp_in) VALUES ('"+ newid.id+"','"+timeclock.currentuser.id+"',date('now','localtime'),datetime('now','localtime'));"; + } else if (direction == 'out'){ + sql = "UPDATE timetracks SET stamp_out=datetime('now','localtime') where id_staff='"+ timeclock.currentuser.id+"' and id='"+timeclock.lasttrack.id+"';"; + } + console.log("SET TrackSQL",sql); + db.exec(sql).then(data => { + //app.snackbar('le pointage a été enregistré!','green'); + + timeclock.loadstatus(''); + //timeclock.loadusers(); + }).catch(e => { + app.snackbar('erreur d\'enregistrement du pointage!
Fehler beim Speichern!','red'); + }); + + }).catch(e => { + app.snackbar('erreur d\'enregistrement du pointage!
Fehler beim Speichern!','red'); + }); + + + +}, + checkIdle: function (){ + //console.log("check idle"); + if (timeclock.intervaltime <= 0){ + //console.log("change view"); + timeclock.loadscreensaver(); + //req.reqdata("POST","fingerunload.cgi",{"fn":"unload"},noaction); + } else { + document.getElementById("timer").innerHTML = timeclock.intervaltime; + timeclock.intervaltime = timeclock.intervaltime - 1; + + //console.log(intervaltime); + } +}, +startCheckIdle: function (){ + window.clearInterval(timeclock.interval); + timeclock.intervaltime = preferences.timeout; + document.getElementById("timer").style.display = 'block'; + + timeclock.interval = window.setInterval("timeclock.checkIdle()",1000); + +}, +stopCheckIdle: function (){ + document.getElementById("timer").style.display = 'none'; + window.clearInterval(timeclock.interval); +}, +inittable: function (){ + timeclock.tbl = new Tabulator("#tbl_weektracks", { + headerSort:false, + height: "370px", + layout:"fitColumns", + locale:"fr", + columns: [ + {title:"Date", field:"dspdaydate",align: "center"}, + {title:"Entrée",align: "right",field:"dspstamp_in"}, + {title:"Sortie",align: "right",field:"dspstamp_out"} +] +}); +}, +gettabledata: function(){ + db.queryarray("select id,id_staff,strftime('%d/%m/%Y',daydate) as dspdaydate,strftime('%H:%M',stamp_in) as dspstamp_in,strftime('%H:%M',stamp_out) as dspstamp_out from timetracks where strftime('%W',daydate) = strftime('%W',date('now','localtime')) and id_staff='" + timeclock.currentuser.id +"' order by daydate,stamp_in,stamp_out;").then(tbldata => { + timeclock.tbl.setData(tbldata); + }); +} + +} diff --git a/install/bin/electron/resources/app/main.js b/install/bin/electron/resources/app/main.js new file mode 100644 index 0000000..442846e --- /dev/null +++ b/install/bin/electron/resources/app/main.js @@ -0,0 +1,93 @@ +const {app, BrowserWindow, globalShortcut} = require('electron') +const path = require('path') +const url = require('url') +const os = require('os') +const fs = require('fs') +//const http = require('http') +//const dialog = require('electron').dialog +const {ipcMain} = require('electron') +//var child = require('child_process').execFile; + +app.disableHardwareAcceleration() +let debug = 0 +// Keep a global reference of the window object, if you don't, the window will +// be closed automatically when the JavaScript object is garbage collected. +let ua = app.getName() + '/' + app.getVersion() + '-' + os.type() + '/' + os.release() + '/' + os.arch +let mainWindow +console.log("Start App") +console.log(os.homedir()); +function createWindow () { + let appcfg = localcfg(); + if (appcfg == null){ + console.log("No Config found!") + app.quit() + } + // var executablePath = ""; + // var parameters = []; + let ua = app.getName() + '/' + app.getVersion() + '-' + os.type() + '/' + os.release() + '/' + os.arch + + mainWindow = new BrowserWindow({ + show: true, + width: 800, + height: ((debug == 1)?510:470) , + frame: ((debug == 1)?true:false), + webPreferences: { + nodeIntegration: true, + worldSafeExecuteJavaScript: true, + defaultEncoding: 'UTF-8', + enableRemoteModule: true, + } + }) + + // if (debug == 1){ + + // } + // if (os.platform() == "win32"){ + const glshort = globalShortcut.register('CommandOrControl+Shift+I', () => { + mainWindow.webContents.openDevTools({detached: true}); + }) + // } + mainWindow.setMenu(null) + mainWindow.setBackgroundColor('#000'); + if (os.platform() != "win32"){ + mainWindow.maximize() + mainWindow.setFullScreen(true) + } + + console.log("Path:" + __dirname); + mainWindow.loadFile("index."+ appcfg.type +".html") + mainWindow.show() + mainWindow.on('closed', () => { + mainWindow = null + }) +} + +function localcfg(){ + var data = null; + cfgfile = os.homedir() + '/.hourtrax/hourtrax.json'; + if (debug == 1){ + cfgfile = path.dirname(__dirname)+ '/.hourtrax/hourtrax.json'; + } + if (fs.existsSync(cfgfile)){ + var data = fs.readFileSync(cfgfile, 'utf-8'); + if (data.startsWith("{") || data.startsWith("[")){ + data = JSON.parse(data); + } + return data; + } + return data; +} + +app.on('ready', createWindow) +app.on('window-all-closed', () => { + globalShortcut.unregisterAll() + // if (process.platform !== 'darwin') { + app.quit() + // } +}) + +app.on('activate', () => { + if (mainWindow === null) { + createWindow() + } +}) diff --git a/install/bin/electron/resources/app/package-lock.json b/install/bin/electron/resources/app/package-lock.json new file mode 100644 index 0000000..d24e53f --- /dev/null +++ b/install/bin/electron/resources/app/package-lock.json @@ -0,0 +1,938 @@ +{ + "name": "Hourtrax", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "optional": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + }, + "are-we-there-yet": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "optional": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "optional": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "optional": true + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "optional": true + }, + "aws4": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.1.tgz", + "integrity": "sha512-zg7Hz2k5lI8kb7U32998pRRFin7zJlkfezGJjUc2heaD4Pw2wObakCDVzkKztTm/Ln7eiVvYsjqak0Ed4LkMDA==", + "optional": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "optional": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "block-stream": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", + "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", + "optional": true, + "requires": { + "inherits": "~2.0.0" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "optional": true + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "optional": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "optional": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "^2.1.1" + } + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "optional": true + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" + }, + "detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "optional": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "optional": true + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "optional": true + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "optional": true + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "optional": true + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "optional": true + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "optional": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "fs-minipass": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", + "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", + "requires": { + "minipass": "^2.6.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "fstream": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", + "optional": true, + "requires": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + } + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "optional": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "optional": true + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "optional": true + }, + "har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "optional": true, + "requires": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + } + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "optional": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-walk": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz", + "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==", + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "optional": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "optional": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "optional": true + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "optional": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "optional": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "optional": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "optional": true + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "optional": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "mime-db": { + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", + "optional": true + }, + "mime-types": { + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "optional": true, + "requires": { + "mime-db": "1.44.0" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "minipass": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", + "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", + "requires": { + "minipass": "^2.9.0" + } + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "requires": { + "minimist": "^1.2.5" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "needle": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.5.2.tgz", + "integrity": "sha512-LbRIwS9BfkPvNwNHlsA41Q29kL2L/6VaOJ0qisM5lLWsTV3nP15abO5ITL6L81zqFhzjRKDAYjpcBcwM0AVvLQ==", + "requires": { + "debug": "^3.2.6", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-addon-api": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.0.tgz", + "integrity": "sha512-ASCL5U13as7HhOExbT6OlWJJUV/lLzL2voOSP1UVehpRD8FbSrSDjfScK/KwAvVTI5AS6r4VwbOMlIqtvRidnA==" + }, + "node-gyp": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz", + "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==", + "optional": true, + "requires": { + "fstream": "^1.0.0", + "glob": "^7.0.3", + "graceful-fs": "^4.1.2", + "mkdirp": "^0.5.0", + "nopt": "2 || 3", + "npmlog": "0 || 1 || 2 || 3 || 4", + "osenv": "0", + "request": "^2.87.0", + "rimraf": "2", + "semver": "~5.3.0", + "tar": "^2.0.0", + "which": "1" + } + }, + "node-pre-gyp": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz", + "integrity": "sha512-TwWAOZb0j7e9eGaf9esRx3ZcLaE5tQ2lvYy1pb5IAaG1a2e2Kv5Lms1Y4hpj+ciXJRofIxxlt5haeQ/2ANeE0Q==", + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" + }, + "dependencies": { + "nopt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", + "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "tar": { + "version": "4.4.13", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz", + "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==", + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.8.6", + "minizlib": "^1.2.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.3" + } + } + } + }, + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "optional": true, + "requires": { + "abbrev": "1" + } + }, + "npm-bundled": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.1.tgz", + "integrity": "sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==", + "requires": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-normalize-package-bin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==" + }, + "npm-packlist": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.8.tgz", + "integrity": "sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==", + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "optional": true + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", + "optional": true + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "optional": true + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "optional": true + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "optional": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "semver": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=" + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" + }, + "sqlite3": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-5.0.0.tgz", + "integrity": "sha512-rjvqHFUaSGnzxDy2AHCwhHy6Zp6MNJzCPGYju4kD8yi6bze4d1/zMTg6C7JI49b7/EM7jKMTvyfN/4ylBKdwfw==", + "requires": { + "node-addon-api": "2.0.0", + "node-gyp": "3.x", + "node-pre-gyp": "^0.11.0" + } + }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "optional": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + }, + "tar": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz", + "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==", + "optional": true, + "requires": { + "block-stream": "*", + "fstream": "^1.0.12", + "inherits": "2" + } + }, + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "optional": true, + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "optional": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "optional": true + }, + "uri-js": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", + "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", + "optional": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "optional": true + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "optional": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "optional": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + } + } +} diff --git a/install/bin/electron/resources/app/package.json b/install/bin/electron/resources/app/package.json new file mode 100644 index 0000000..3d27b5f --- /dev/null +++ b/install/bin/electron/resources/app/package.json @@ -0,0 +1,10 @@ +{ + "name": "Hourtrax", + "version": "1.0.0", + "main": "main.js", + "author": "POT s.à r.l.", + "license": "UNLICENSED", + "dependencies": { + "sqlite3": "^5.0.0" + } +} diff --git a/install/bin/electron/resources/app/vendor/moment/locales.js b/install/bin/electron/resources/app/vendor/moment/locales.js new file mode 100644 index 0000000..caabe6a --- /dev/null +++ b/install/bin/electron/resources/app/vendor/moment/locales.js @@ -0,0 +1,12105 @@ +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + //! moment.js locale configuration + + moment.defineLocale('af', { + months: 'Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember'.split( + '_' + ), + monthsShort: 'Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des'.split('_'), + weekdays: 'Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag'.split( + '_' + ), + weekdaysShort: 'Son_Maa_Din_Woe_Don_Vry_Sat'.split('_'), + weekdaysMin: 'So_Ma_Di_Wo_Do_Vr_Sa'.split('_'), + meridiemParse: /vm|nm/i, + isPM: function (input) { + return /^nm$/i.test(input); + }, + meridiem: function (hours, minutes, isLower) { + if (hours < 12) { + return isLower ? 'vm' : 'VM'; + } else { + return isLower ? 'nm' : 'NM'; + } + }, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Vandag om] LT', + nextDay: '[Môre om] LT', + nextWeek: 'dddd [om] LT', + lastDay: '[Gister om] LT', + lastWeek: '[Laas] dddd [om] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'oor %s', + past: '%s gelede', + s: "'n paar sekondes", + ss: '%d sekondes', + m: "'n minuut", + mm: '%d minute', + h: "'n uur", + hh: '%d ure', + d: "'n dag", + dd: '%d dae', + M: "'n maand", + MM: '%d maande', + y: "'n jaar", + yy: '%d jaar', + }, + dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/, + ordinal: function (number) { + return ( + number + + (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de') + ); // Thanks to Joris Röling : https://github.com/jjupiter + }, + week: { + dow: 1, // Maandag is die eerste dag van die week. + doy: 4, // Die week wat die 4de Januarie bevat is die eerste week van die jaar. + }, + }); + + //! moment.js locale configuration + + var pluralForm = function (n) { + return n === 0 + ? 0 + : n === 1 + ? 1 + : n === 2 + ? 2 + : n % 100 >= 3 && n % 100 <= 10 + ? 3 + : n % 100 >= 11 + ? 4 + : 5; + }, + plurals = { + s: [ + 'أقل من ثانية', + 'ثانية واحدة', + ['ثانيتان', 'ثانيتين'], + '%d ثوان', + '%d ثانية', + '%d ثانية', + ], + m: [ + 'أقل من دقيقة', + 'دقيقة واحدة', + ['دقيقتان', 'دقيقتين'], + '%d دقائق', + '%d دقيقة', + '%d دقيقة', + ], + h: [ + 'أقل من ساعة', + 'ساعة واحدة', + ['ساعتان', 'ساعتين'], + '%d ساعات', + '%d ساعة', + '%d ساعة', + ], + d: [ + 'أقل من يوم', + 'يوم واحد', + ['يومان', 'يومين'], + '%d أيام', + '%d يومًا', + '%d يوم', + ], + M: [ + 'أقل من شهر', + 'شهر واحد', + ['شهران', 'شهرين'], + '%d أشهر', + '%d شهرا', + '%d شهر', + ], + y: [ + 'أقل من عام', + 'عام واحد', + ['عامان', 'عامين'], + '%d أعوام', + '%d عامًا', + '%d عام', + ], + }, + pluralize = function (u) { + return function (number, withoutSuffix, string, isFuture) { + var f = pluralForm(number), + str = plurals[u][pluralForm(number)]; + if (f === 2) { + str = str[withoutSuffix ? 0 : 1]; + } + return str.replace(/%d/i, number); + }; + }, + months = [ + 'جانفي', + 'فيفري', + 'مارس', + 'أفريل', + 'ماي', + 'جوان', + 'جويلية', + 'أوت', + 'سبتمبر', + 'أكتوبر', + 'نوفمبر', + 'ديسمبر', + ]; + + moment.defineLocale('ar-dz', { + months: months, + monthsShort: months, + weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), + weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'), + weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'D/\u200FM/\u200FYYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + meridiemParse: /ص|م/, + isPM: function (input) { + return 'م' === input; + }, + meridiem: function (hour, minute, isLower) { + if (hour < 12) { + return 'ص'; + } else { + return 'م'; + } + }, + calendar: { + sameDay: '[اليوم عند الساعة] LT', + nextDay: '[غدًا عند الساعة] LT', + nextWeek: 'dddd [عند الساعة] LT', + lastDay: '[أمس عند الساعة] LT', + lastWeek: 'dddd [عند الساعة] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'بعد %s', + past: 'منذ %s', + s: pluralize('s'), + ss: pluralize('s'), + m: pluralize('m'), + mm: pluralize('m'), + h: pluralize('h'), + hh: pluralize('h'), + d: pluralize('d'), + dd: pluralize('d'), + M: pluralize('M'), + MM: pluralize('M'), + y: pluralize('y'), + yy: pluralize('y'), + }, + postformat: function (string) { + return string.replace(/,/g, '،'); + }, + week: { + dow: 0, // Sunday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('ar-kw', { + months: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split( + '_' + ), + monthsShort: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split( + '_' + ), + weekdays: 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), + weekdaysShort: 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'), + weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[اليوم على الساعة] LT', + nextDay: '[غدا على الساعة] LT', + nextWeek: 'dddd [على الساعة] LT', + lastDay: '[أمس على الساعة] LT', + lastWeek: 'dddd [على الساعة] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'في %s', + past: 'منذ %s', + s: 'ثوان', + ss: '%d ثانية', + m: 'دقيقة', + mm: '%d دقائق', + h: 'ساعة', + hh: '%d ساعات', + d: 'يوم', + dd: '%d أيام', + M: 'شهر', + MM: '%d أشهر', + y: 'سنة', + yy: '%d سنوات', + }, + week: { + dow: 0, // Sunday is the first day of the week. + doy: 12, // The week that contains Jan 12th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var symbolMap = { + '1': '1', + '2': '2', + '3': '3', + '4': '4', + '5': '5', + '6': '6', + '7': '7', + '8': '8', + '9': '9', + '0': '0', + }, + pluralForm$1 = function (n) { + return n === 0 + ? 0 + : n === 1 + ? 1 + : n === 2 + ? 2 + : n % 100 >= 3 && n % 100 <= 10 + ? 3 + : n % 100 >= 11 + ? 4 + : 5; + }, + plurals$1 = { + s: [ + 'أقل من ثانية', + 'ثانية واحدة', + ['ثانيتان', 'ثانيتين'], + '%d ثوان', + '%d ثانية', + '%d ثانية', + ], + m: [ + 'أقل من دقيقة', + 'دقيقة واحدة', + ['دقيقتان', 'دقيقتين'], + '%d دقائق', + '%d دقيقة', + '%d دقيقة', + ], + h: [ + 'أقل من ساعة', + 'ساعة واحدة', + ['ساعتان', 'ساعتين'], + '%d ساعات', + '%d ساعة', + '%d ساعة', + ], + d: [ + 'أقل من يوم', + 'يوم واحد', + ['يومان', 'يومين'], + '%d أيام', + '%d يومًا', + '%d يوم', + ], + M: [ + 'أقل من شهر', + 'شهر واحد', + ['شهران', 'شهرين'], + '%d أشهر', + '%d شهرا', + '%d شهر', + ], + y: [ + 'أقل من عام', + 'عام واحد', + ['عامان', 'عامين'], + '%d أعوام', + '%d عامًا', + '%d عام', + ], + }, + pluralize$1 = function (u) { + return function (number, withoutSuffix, string, isFuture) { + var f = pluralForm$1(number), + str = plurals$1[u][pluralForm$1(number)]; + if (f === 2) { + str = str[withoutSuffix ? 0 : 1]; + } + return str.replace(/%d/i, number); + }; + }, + months$1 = [ + 'يناير', + 'فبراير', + 'مارس', + 'أبريل', + 'مايو', + 'يونيو', + 'يوليو', + 'أغسطس', + 'سبتمبر', + 'أكتوبر', + 'نوفمبر', + 'ديسمبر', + ]; + + moment.defineLocale('ar-ly', { + months: months$1, + monthsShort: months$1, + weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), + weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'), + weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'D/\u200FM/\u200FYYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + meridiemParse: /ص|م/, + isPM: function (input) { + return 'م' === input; + }, + meridiem: function (hour, minute, isLower) { + if (hour < 12) { + return 'ص'; + } else { + return 'م'; + } + }, + calendar: { + sameDay: '[اليوم عند الساعة] LT', + nextDay: '[غدًا عند الساعة] LT', + nextWeek: 'dddd [عند الساعة] LT', + lastDay: '[أمس عند الساعة] LT', + lastWeek: 'dddd [عند الساعة] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'بعد %s', + past: 'منذ %s', + s: pluralize$1('s'), + ss: pluralize$1('s'), + m: pluralize$1('m'), + mm: pluralize$1('m'), + h: pluralize$1('h'), + hh: pluralize$1('h'), + d: pluralize$1('d'), + dd: pluralize$1('d'), + M: pluralize$1('M'), + MM: pluralize$1('M'), + y: pluralize$1('y'), + yy: pluralize$1('y'), + }, + preparse: function (string) { + return string.replace(/،/g, ','); + }, + postformat: function (string) { + return string + .replace(/\d/g, function (match) { + return symbolMap[match]; + }) + .replace(/,/g, '،'); + }, + week: { + dow: 6, // Saturday is the first day of the week. + doy: 12, // The week that contains Jan 12th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('ar-ma', { + months: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split( + '_' + ), + monthsShort: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split( + '_' + ), + weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), + weekdaysShort: 'احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'), + weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[اليوم على الساعة] LT', + nextDay: '[غدا على الساعة] LT', + nextWeek: 'dddd [على الساعة] LT', + lastDay: '[أمس على الساعة] LT', + lastWeek: 'dddd [على الساعة] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'في %s', + past: 'منذ %s', + s: 'ثوان', + ss: '%d ثانية', + m: 'دقيقة', + mm: '%d دقائق', + h: 'ساعة', + hh: '%d ساعات', + d: 'يوم', + dd: '%d أيام', + M: 'شهر', + MM: '%d أشهر', + y: 'سنة', + yy: '%d سنوات', + }, + week: { + dow: 6, // Saturday is the first day of the week. + doy: 12, // The week that contains Jan 12th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var symbolMap$1 = { + '1': '١', + '2': '٢', + '3': '٣', + '4': '٤', + '5': '٥', + '6': '٦', + '7': '٧', + '8': '٨', + '9': '٩', + '0': '٠', + }, + numberMap = { + '١': '1', + '٢': '2', + '٣': '3', + '٤': '4', + '٥': '5', + '٦': '6', + '٧': '7', + '٨': '8', + '٩': '9', + '٠': '0', + }; + + moment.defineLocale('ar-sa', { + months: 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split( + '_' + ), + monthsShort: 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split( + '_' + ), + weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), + weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'), + weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + meridiemParse: /ص|م/, + isPM: function (input) { + return 'م' === input; + }, + meridiem: function (hour, minute, isLower) { + if (hour < 12) { + return 'ص'; + } else { + return 'م'; + } + }, + calendar: { + sameDay: '[اليوم على الساعة] LT', + nextDay: '[غدا على الساعة] LT', + nextWeek: 'dddd [على الساعة] LT', + lastDay: '[أمس على الساعة] LT', + lastWeek: 'dddd [على الساعة] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'في %s', + past: 'منذ %s', + s: 'ثوان', + ss: '%d ثانية', + m: 'دقيقة', + mm: '%d دقائق', + h: 'ساعة', + hh: '%d ساعات', + d: 'يوم', + dd: '%d أيام', + M: 'شهر', + MM: '%d أشهر', + y: 'سنة', + yy: '%d سنوات', + }, + preparse: function (string) { + return string + .replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) { + return numberMap[match]; + }) + .replace(/،/g, ','); + }, + postformat: function (string) { + return string + .replace(/\d/g, function (match) { + return symbolMap$1[match]; + }) + .replace(/,/g, '،'); + }, + week: { + dow: 0, // Sunday is the first day of the week. + doy: 6, // The week that contains Jan 6th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('ar-tn', { + months: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split( + '_' + ), + monthsShort: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split( + '_' + ), + weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), + weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'), + weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[اليوم على الساعة] LT', + nextDay: '[غدا على الساعة] LT', + nextWeek: 'dddd [على الساعة] LT', + lastDay: '[أمس على الساعة] LT', + lastWeek: 'dddd [على الساعة] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'في %s', + past: 'منذ %s', + s: 'ثوان', + ss: '%d ثانية', + m: 'دقيقة', + mm: '%d دقائق', + h: 'ساعة', + hh: '%d ساعات', + d: 'يوم', + dd: '%d أيام', + M: 'شهر', + MM: '%d أشهر', + y: 'سنة', + yy: '%d سنوات', + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var symbolMap$2 = { + '1': '١', + '2': '٢', + '3': '٣', + '4': '٤', + '5': '٥', + '6': '٦', + '7': '٧', + '8': '٨', + '9': '٩', + '0': '٠', + }, + numberMap$1 = { + '١': '1', + '٢': '2', + '٣': '3', + '٤': '4', + '٥': '5', + '٦': '6', + '٧': '7', + '٨': '8', + '٩': '9', + '٠': '0', + }, + pluralForm$2 = function (n) { + return n === 0 + ? 0 + : n === 1 + ? 1 + : n === 2 + ? 2 + : n % 100 >= 3 && n % 100 <= 10 + ? 3 + : n % 100 >= 11 + ? 4 + : 5; + }, + plurals$2 = { + s: [ + 'أقل من ثانية', + 'ثانية واحدة', + ['ثانيتان', 'ثانيتين'], + '%d ثوان', + '%d ثانية', + '%d ثانية', + ], + m: [ + 'أقل من دقيقة', + 'دقيقة واحدة', + ['دقيقتان', 'دقيقتين'], + '%d دقائق', + '%d دقيقة', + '%d دقيقة', + ], + h: [ + 'أقل من ساعة', + 'ساعة واحدة', + ['ساعتان', 'ساعتين'], + '%d ساعات', + '%d ساعة', + '%d ساعة', + ], + d: [ + 'أقل من يوم', + 'يوم واحد', + ['يومان', 'يومين'], + '%d أيام', + '%d يومًا', + '%d يوم', + ], + M: [ + 'أقل من شهر', + 'شهر واحد', + ['شهران', 'شهرين'], + '%d أشهر', + '%d شهرا', + '%d شهر', + ], + y: [ + 'أقل من عام', + 'عام واحد', + ['عامان', 'عامين'], + '%d أعوام', + '%d عامًا', + '%d عام', + ], + }, + pluralize$2 = function (u) { + return function (number, withoutSuffix, string, isFuture) { + var f = pluralForm$2(number), + str = plurals$2[u][pluralForm$2(number)]; + if (f === 2) { + str = str[withoutSuffix ? 0 : 1]; + } + return str.replace(/%d/i, number); + }; + }, + months$2 = [ + 'يناير', + 'فبراير', + 'مارس', + 'أبريل', + 'مايو', + 'يونيو', + 'يوليو', + 'أغسطس', + 'سبتمبر', + 'أكتوبر', + 'نوفمبر', + 'ديسمبر', + ]; + + moment.defineLocale('ar', { + months: months$2, + monthsShort: months$2, + weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), + weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'), + weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'D/\u200FM/\u200FYYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + meridiemParse: /ص|م/, + isPM: function (input) { + return 'م' === input; + }, + meridiem: function (hour, minute, isLower) { + if (hour < 12) { + return 'ص'; + } else { + return 'م'; + } + }, + calendar: { + sameDay: '[اليوم عند الساعة] LT', + nextDay: '[غدًا عند الساعة] LT', + nextWeek: 'dddd [عند الساعة] LT', + lastDay: '[أمس عند الساعة] LT', + lastWeek: 'dddd [عند الساعة] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'بعد %s', + past: 'منذ %s', + s: pluralize$2('s'), + ss: pluralize$2('s'), + m: pluralize$2('m'), + mm: pluralize$2('m'), + h: pluralize$2('h'), + hh: pluralize$2('h'), + d: pluralize$2('d'), + dd: pluralize$2('d'), + M: pluralize$2('M'), + MM: pluralize$2('M'), + y: pluralize$2('y'), + yy: pluralize$2('y'), + }, + preparse: function (string) { + return string + .replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) { + return numberMap$1[match]; + }) + .replace(/،/g, ','); + }, + postformat: function (string) { + return string + .replace(/\d/g, function (match) { + return symbolMap$2[match]; + }) + .replace(/,/g, '،'); + }, + week: { + dow: 6, // Saturday is the first day of the week. + doy: 12, // The week that contains Jan 12th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var suffixes = { + 1: '-inci', + 5: '-inci', + 8: '-inci', + 70: '-inci', + 80: '-inci', + 2: '-nci', + 7: '-nci', + 20: '-nci', + 50: '-nci', + 3: '-üncü', + 4: '-üncü', + 100: '-üncü', + 6: '-ncı', + 9: '-uncu', + 10: '-uncu', + 30: '-uncu', + 60: '-ıncı', + 90: '-ıncı', + }; + + moment.defineLocale('az', { + months: 'yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr'.split( + '_' + ), + monthsShort: 'yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek'.split('_'), + weekdays: 'Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə'.split( + '_' + ), + weekdaysShort: 'Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən'.split('_'), + weekdaysMin: 'Bz_BE_ÇA_Çə_CA_Cü_Şə'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[bugün saat] LT', + nextDay: '[sabah saat] LT', + nextWeek: '[gələn həftə] dddd [saat] LT', + lastDay: '[dünən] LT', + lastWeek: '[keçən həftə] dddd [saat] LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s sonra', + past: '%s əvvəl', + s: 'bir neçə saniyə', + ss: '%d saniyə', + m: 'bir dəqiqə', + mm: '%d dəqiqə', + h: 'bir saat', + hh: '%d saat', + d: 'bir gün', + dd: '%d gün', + M: 'bir ay', + MM: '%d ay', + y: 'bir il', + yy: '%d il', + }, + meridiemParse: /gecə|səhər|gündüz|axşam/, + isPM: function (input) { + return /^(gündüz|axşam)$/.test(input); + }, + meridiem: function (hour, minute, isLower) { + if (hour < 4) { + return 'gecə'; + } else if (hour < 12) { + return 'səhər'; + } else if (hour < 17) { + return 'gündüz'; + } else { + return 'axşam'; + } + }, + dayOfMonthOrdinalParse: /\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/, + ordinal: function (number) { + if (number === 0) { + // special case for zero + return number + '-ıncı'; + } + var a = number % 10, + b = (number % 100) - a, + c = number >= 100 ? 100 : null; + return number + (suffixes[a] || suffixes[b] || suffixes[c]); + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + function plural(word, num) { + var forms = word.split('_'); + return num % 10 === 1 && num % 100 !== 11 + ? forms[0] + : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) + ? forms[1] + : forms[2]; + } + function relativeTimeWithPlural(number, withoutSuffix, key) { + var format = { + ss: withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд', + mm: withoutSuffix ? 'хвіліна_хвіліны_хвілін' : 'хвіліну_хвіліны_хвілін', + hh: withoutSuffix ? 'гадзіна_гадзіны_гадзін' : 'гадзіну_гадзіны_гадзін', + dd: 'дзень_дні_дзён', + MM: 'месяц_месяцы_месяцаў', + yy: 'год_гады_гадоў', + }; + if (key === 'm') { + return withoutSuffix ? 'хвіліна' : 'хвіліну'; + } else if (key === 'h') { + return withoutSuffix ? 'гадзіна' : 'гадзіну'; + } else { + return number + ' ' + plural(format[key], +number); + } + } + + moment.defineLocale('be', { + months: { + format: 'студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня'.split( + '_' + ), + standalone: 'студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань'.split( + '_' + ), + }, + monthsShort: 'студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж'.split( + '_' + ), + weekdays: { + format: 'нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу'.split( + '_' + ), + standalone: 'нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота'.split( + '_' + ), + isFormat: /\[ ?[Ууў] ?(?:мінулую|наступную)? ?\] ?dddd/, + }, + weekdaysShort: 'нд_пн_ат_ср_чц_пт_сб'.split('_'), + weekdaysMin: 'нд_пн_ат_ср_чц_пт_сб'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D MMMM YYYY г.', + LLL: 'D MMMM YYYY г., HH:mm', + LLLL: 'dddd, D MMMM YYYY г., HH:mm', + }, + calendar: { + sameDay: '[Сёння ў] LT', + nextDay: '[Заўтра ў] LT', + lastDay: '[Учора ў] LT', + nextWeek: function () { + return '[У] dddd [ў] LT'; + }, + lastWeek: function () { + switch (this.day()) { + case 0: + case 3: + case 5: + case 6: + return '[У мінулую] dddd [ў] LT'; + case 1: + case 2: + case 4: + return '[У мінулы] dddd [ў] LT'; + } + }, + sameElse: 'L', + }, + relativeTime: { + future: 'праз %s', + past: '%s таму', + s: 'некалькі секунд', + m: relativeTimeWithPlural, + mm: relativeTimeWithPlural, + h: relativeTimeWithPlural, + hh: relativeTimeWithPlural, + d: 'дзень', + dd: relativeTimeWithPlural, + M: 'месяц', + MM: relativeTimeWithPlural, + y: 'год', + yy: relativeTimeWithPlural, + }, + meridiemParse: /ночы|раніцы|дня|вечара/, + isPM: function (input) { + return /^(дня|вечара)$/.test(input); + }, + meridiem: function (hour, minute, isLower) { + if (hour < 4) { + return 'ночы'; + } else if (hour < 12) { + return 'раніцы'; + } else if (hour < 17) { + return 'дня'; + } else { + return 'вечара'; + } + }, + dayOfMonthOrdinalParse: /\d{1,2}-(і|ы|га)/, + ordinal: function (number, period) { + switch (period) { + case 'M': + case 'd': + case 'DDD': + case 'w': + case 'W': + return (number % 10 === 2 || number % 10 === 3) && + number % 100 !== 12 && + number % 100 !== 13 + ? number + '-і' + : number + '-ы'; + case 'D': + return number + '-га'; + default: + return number; + } + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('bg', { + months: 'януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември'.split( + '_' + ), + monthsShort: 'яну_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек'.split('_'), + weekdays: 'неделя_понеделник_вторник_сряда_четвъртък_петък_събота'.split( + '_' + ), + weekdaysShort: 'нед_пон_вто_сря_чет_пет_съб'.split('_'), + weekdaysMin: 'нд_пн_вт_ср_чт_пт_сб'.split('_'), + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'D.MM.YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY H:mm', + LLLL: 'dddd, D MMMM YYYY H:mm', + }, + calendar: { + sameDay: '[Днес в] LT', + nextDay: '[Утре в] LT', + nextWeek: 'dddd [в] LT', + lastDay: '[Вчера в] LT', + lastWeek: function () { + switch (this.day()) { + case 0: + case 3: + case 6: + return '[Миналата] dddd [в] LT'; + case 1: + case 2: + case 4: + case 5: + return '[Миналия] dddd [в] LT'; + } + }, + sameElse: 'L', + }, + relativeTime: { + future: 'след %s', + past: 'преди %s', + s: 'няколко секунди', + ss: '%d секунди', + m: 'минута', + mm: '%d минути', + h: 'час', + hh: '%d часа', + d: 'ден', + dd: '%d дена', + M: 'месец', + MM: '%d месеца', + y: 'година', + yy: '%d години', + }, + dayOfMonthOrdinalParse: /\d{1,2}-(ев|ен|ти|ви|ри|ми)/, + ordinal: function (number) { + var lastDigit = number % 10, + last2Digits = number % 100; + if (number === 0) { + return number + '-ев'; + } else if (last2Digits === 0) { + return number + '-ен'; + } else if (last2Digits > 10 && last2Digits < 20) { + return number + '-ти'; + } else if (lastDigit === 1) { + return number + '-ви'; + } else if (lastDigit === 2) { + return number + '-ри'; + } else if (lastDigit === 7 || lastDigit === 8) { + return number + '-ми'; + } else { + return number + '-ти'; + } + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('bm', { + months: 'Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_Mɛkalo_Zuwɛnkalo_Zuluyekalo_Utikalo_Sɛtanburukalo_ɔkutɔburukalo_Nowanburukalo_Desanburukalo'.split( + '_' + ), + monthsShort: 'Zan_Few_Mar_Awi_Mɛ_Zuw_Zul_Uti_Sɛt_ɔku_Now_Des'.split('_'), + weekdays: 'Kari_Ntɛnɛn_Tarata_Araba_Alamisa_Juma_Sibiri'.split('_'), + weekdaysShort: 'Kar_Ntɛ_Tar_Ara_Ala_Jum_Sib'.split('_'), + weekdaysMin: 'Ka_Nt_Ta_Ar_Al_Ju_Si'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'MMMM [tile] D [san] YYYY', + LLL: 'MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm', + LLLL: 'dddd MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm', + }, + calendar: { + sameDay: '[Bi lɛrɛ] LT', + nextDay: '[Sini lɛrɛ] LT', + nextWeek: 'dddd [don lɛrɛ] LT', + lastDay: '[Kunu lɛrɛ] LT', + lastWeek: 'dddd [tɛmɛnen lɛrɛ] LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s kɔnɔ', + past: 'a bɛ %s bɔ', + s: 'sanga dama dama', + ss: 'sekondi %d', + m: 'miniti kelen', + mm: 'miniti %d', + h: 'lɛrɛ kelen', + hh: 'lɛrɛ %d', + d: 'tile kelen', + dd: 'tile %d', + M: 'kalo kelen', + MM: 'kalo %d', + y: 'san kelen', + yy: 'san %d', + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var symbolMap$3 = { + '1': '১', + '2': '২', + '3': '৩', + '4': '৪', + '5': '৫', + '6': '৬', + '7': '৭', + '8': '৮', + '9': '৯', + '0': '০', + }, + numberMap$2 = { + '১': '1', + '২': '2', + '৩': '3', + '৪': '4', + '৫': '5', + '৬': '6', + '৭': '7', + '৮': '8', + '৯': '9', + '০': '0', + }; + + moment.defineLocale('bn', { + months: 'জানুয়ারি_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split( + '_' + ), + monthsShort: 'জানু_ফেব্রু_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্ট_অক্টো_নভে_ডিসে'.split( + '_' + ), + weekdays: 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split( + '_' + ), + weekdaysShort: 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি'.split('_'), + weekdaysMin: 'রবি_সোম_মঙ্গল_বুধ_বৃহ_শুক্র_শনি'.split('_'), + longDateFormat: { + LT: 'A h:mm সময়', + LTS: 'A h:mm:ss সময়', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY, A h:mm সময়', + LLLL: 'dddd, D MMMM YYYY, A h:mm সময়', + }, + calendar: { + sameDay: '[আজ] LT', + nextDay: '[আগামীকাল] LT', + nextWeek: 'dddd, LT', + lastDay: '[গতকাল] LT', + lastWeek: '[গত] dddd, LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s পরে', + past: '%s আগে', + s: 'কয়েক সেকেন্ড', + ss: '%d সেকেন্ড', + m: 'এক মিনিট', + mm: '%d মিনিট', + h: 'এক ঘন্টা', + hh: '%d ঘন্টা', + d: 'এক দিন', + dd: '%d দিন', + M: 'এক মাস', + MM: '%d মাস', + y: 'এক বছর', + yy: '%d বছর', + }, + preparse: function (string) { + return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) { + return numberMap$2[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$3[match]; + }); + }, + meridiemParse: /রাত|সকাল|দুপুর|বিকাল|রাত/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if ( + (meridiem === 'রাত' && hour >= 4) || + (meridiem === 'দুপুর' && hour < 5) || + meridiem === 'বিকাল' + ) { + return hour + 12; + } else { + return hour; + } + }, + meridiem: function (hour, minute, isLower) { + if (hour < 4) { + return 'রাত'; + } else if (hour < 10) { + return 'সকাল'; + } else if (hour < 17) { + return 'দুপুর'; + } else if (hour < 20) { + return 'বিকাল'; + } else { + return 'রাত'; + } + }, + week: { + dow: 0, // Sunday is the first day of the week. + doy: 6, // The week that contains Jan 6th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var symbolMap$4 = { + '1': '༡', + '2': '༢', + '3': '༣', + '4': '༤', + '5': '༥', + '6': '༦', + '7': '༧', + '8': '༨', + '9': '༩', + '0': '༠', + }, + numberMap$3 = { + '༡': '1', + '༢': '2', + '༣': '3', + '༤': '4', + '༥': '5', + '༦': '6', + '༧': '7', + '༨': '8', + '༩': '9', + '༠': '0', + }; + + moment.defineLocale('bo', { + months: 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split( + '_' + ), + monthsShort: 'ཟླ་1_ཟླ་2_ཟླ་3_ཟླ་4_ཟླ་5_ཟླ་6_ཟླ་7_ཟླ་8_ཟླ་9_ཟླ་10_ཟླ་11_ཟླ་12'.split( + '_' + ), + monthsShortRegex: /^(ཟླ་\d{1,2})/, + monthsParseExact: true, + weekdays: 'གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་'.split( + '_' + ), + weekdaysShort: 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split( + '_' + ), + weekdaysMin: 'ཉི_ཟླ_མིག_ལྷག_ཕུར_སངས_སྤེན'.split('_'), + longDateFormat: { + LT: 'A h:mm', + LTS: 'A h:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY, A h:mm', + LLLL: 'dddd, D MMMM YYYY, A h:mm', + }, + calendar: { + sameDay: '[དི་རིང] LT', + nextDay: '[སང་ཉིན] LT', + nextWeek: '[བདུན་ཕྲག་རྗེས་མ], LT', + lastDay: '[ཁ་སང] LT', + lastWeek: '[བདུན་ཕྲག་མཐའ་མ] dddd, LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s ལ་', + past: '%s སྔན་ལ', + s: 'ལམ་སང', + ss: '%d སྐར་ཆ།', + m: 'སྐར་མ་གཅིག', + mm: '%d སྐར་མ', + h: 'ཆུ་ཚོད་གཅིག', + hh: '%d ཆུ་ཚོད', + d: 'ཉིན་གཅིག', + dd: '%d ཉིན་', + M: 'ཟླ་བ་གཅིག', + MM: '%d ཟླ་བ', + y: 'ལོ་གཅིག', + yy: '%d ལོ', + }, + preparse: function (string) { + return string.replace(/[༡༢༣༤༥༦༧༨༩༠]/g, function (match) { + return numberMap$3[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$4[match]; + }); + }, + meridiemParse: /མཚན་མོ|ཞོགས་ཀས|ཉིན་གུང|དགོང་དག|མཚན་མོ/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if ( + (meridiem === 'མཚན་མོ' && hour >= 4) || + (meridiem === 'ཉིན་གུང' && hour < 5) || + meridiem === 'དགོང་དག' + ) { + return hour + 12; + } else { + return hour; + } + }, + meridiem: function (hour, minute, isLower) { + if (hour < 4) { + return 'མཚན་མོ'; + } else if (hour < 10) { + return 'ཞོགས་ཀས'; + } else if (hour < 17) { + return 'ཉིན་གུང'; + } else if (hour < 20) { + return 'དགོང་དག'; + } else { + return 'མཚན་མོ'; + } + }, + week: { + dow: 0, // Sunday is the first day of the week. + doy: 6, // The week that contains Jan 6th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + function relativeTimeWithMutation(number, withoutSuffix, key) { + var format = { + mm: 'munutenn', + MM: 'miz', + dd: 'devezh', + }; + return number + ' ' + mutation(format[key], number); + } + function specialMutationForYears(number) { + switch (lastNumber(number)) { + case 1: + case 3: + case 4: + case 5: + case 9: + return number + ' bloaz'; + default: + return number + ' vloaz'; + } + } + function lastNumber(number) { + if (number > 9) { + return lastNumber(number % 10); + } + return number; + } + function mutation(text, number) { + if (number === 2) { + return softMutation(text); + } + return text; + } + function softMutation(text) { + var mutationTable = { + m: 'v', + b: 'v', + d: 'z', + }; + if (mutationTable[text.charAt(0)] === undefined) { + return text; + } + return mutationTable[text.charAt(0)] + text.substring(1); + } + + var monthsParse = [ + /^gen/i, + /^c[ʼ\']hwe/i, + /^meu/i, + /^ebr/i, + /^mae/i, + /^(mez|eve)/i, + /^gou/i, + /^eos/i, + /^gwe/i, + /^her/i, + /^du/i, + /^ker/i, + ], + monthsRegex = /^(genver|c[ʼ\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu|gen|c[ʼ\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i, + monthsStrictRegex = /^(genver|c[ʼ\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu)/i, + monthsShortStrictRegex = /^(gen|c[ʼ\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i, + fullWeekdaysParse = [ + /^sul/i, + /^lun/i, + /^meurzh/i, + /^merc[ʼ\']her/i, + /^yaou/i, + /^gwener/i, + /^sadorn/i, + ], + shortWeekdaysParse = [ + /^Sul/i, + /^Lun/i, + /^Meu/i, + /^Mer/i, + /^Yao/i, + /^Gwe/i, + /^Sad/i, + ], + minWeekdaysParse = [ + /^Su/i, + /^Lu/i, + /^Me([^r]|$)/i, + /^Mer/i, + /^Ya/i, + /^Gw/i, + /^Sa/i, + ]; + + moment.defineLocale('br', { + months: 'Genver_Cʼhwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu'.split( + '_' + ), + monthsShort: 'Gen_Cʼhwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker'.split('_'), + weekdays: 'Sul_Lun_Meurzh_Mercʼher_Yaou_Gwener_Sadorn'.split('_'), + weekdaysShort: 'Sul_Lun_Meu_Mer_Yao_Gwe_Sad'.split('_'), + weekdaysMin: 'Su_Lu_Me_Mer_Ya_Gw_Sa'.split('_'), + weekdaysParse: minWeekdaysParse, + fullWeekdaysParse: fullWeekdaysParse, + shortWeekdaysParse: shortWeekdaysParse, + minWeekdaysParse: minWeekdaysParse, + + monthsRegex: monthsRegex, + monthsShortRegex: monthsRegex, + monthsStrictRegex: monthsStrictRegex, + monthsShortStrictRegex: monthsShortStrictRegex, + monthsParse: monthsParse, + longMonthsParse: monthsParse, + shortMonthsParse: monthsParse, + + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D [a viz] MMMM YYYY', + LLL: 'D [a viz] MMMM YYYY HH:mm', + LLLL: 'dddd, D [a viz] MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Hiziv da] LT', + nextDay: '[Warcʼhoazh da] LT', + nextWeek: 'dddd [da] LT', + lastDay: '[Decʼh da] LT', + lastWeek: 'dddd [paset da] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'a-benn %s', + past: '%s ʼzo', + s: 'un nebeud segondennoù', + ss: '%d eilenn', + m: 'ur vunutenn', + mm: relativeTimeWithMutation, + h: 'un eur', + hh: '%d eur', + d: 'un devezh', + dd: relativeTimeWithMutation, + M: 'ur miz', + MM: relativeTimeWithMutation, + y: 'ur bloaz', + yy: specialMutationForYears, + }, + dayOfMonthOrdinalParse: /\d{1,2}(añ|vet)/, + ordinal: function (number) { + var output = number === 1 ? 'añ' : 'vet'; + return number + output; + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + meridiemParse: /a.m.|g.m./, // goude merenn | a-raok merenn + isPM: function (token) { + return token === 'g.m.'; + }, + meridiem: function (hour, minute, isLower) { + return hour < 12 ? 'a.m.' : 'g.m.'; + }, + }); + + //! moment.js locale configuration + + function translate(number, withoutSuffix, key) { + var result = number + ' '; + switch (key) { + case 'ss': + if (number === 1) { + result += 'sekunda'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'sekunde'; + } else { + result += 'sekundi'; + } + return result; + case 'm': + return withoutSuffix ? 'jedna minuta' : 'jedne minute'; + case 'mm': + if (number === 1) { + result += 'minuta'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'minute'; + } else { + result += 'minuta'; + } + return result; + case 'h': + return withoutSuffix ? 'jedan sat' : 'jednog sata'; + case 'hh': + if (number === 1) { + result += 'sat'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'sata'; + } else { + result += 'sati'; + } + return result; + case 'dd': + if (number === 1) { + result += 'dan'; + } else { + result += 'dana'; + } + return result; + case 'MM': + if (number === 1) { + result += 'mjesec'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'mjeseca'; + } else { + result += 'mjeseci'; + } + return result; + case 'yy': + if (number === 1) { + result += 'godina'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'godine'; + } else { + result += 'godina'; + } + return result; + } + } + + moment.defineLocale('bs', { + months: 'januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar'.split( + '_' + ), + monthsShort: 'jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split( + '_' + ), + weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'), + weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY H:mm', + LLLL: 'dddd, D. MMMM YYYY H:mm', + }, + calendar: { + sameDay: '[danas u] LT', + nextDay: '[sutra u] LT', + nextWeek: function () { + switch (this.day()) { + case 0: + return '[u] [nedjelju] [u] LT'; + case 3: + return '[u] [srijedu] [u] LT'; + case 6: + return '[u] [subotu] [u] LT'; + case 1: + case 2: + case 4: + case 5: + return '[u] dddd [u] LT'; + } + }, + lastDay: '[jučer u] LT', + lastWeek: function () { + switch (this.day()) { + case 0: + case 3: + return '[prošlu] dddd [u] LT'; + case 6: + return '[prošle] [subote] [u] LT'; + case 1: + case 2: + case 4: + case 5: + return '[prošli] dddd [u] LT'; + } + }, + sameElse: 'L', + }, + relativeTime: { + future: 'za %s', + past: 'prije %s', + s: 'par sekundi', + ss: translate, + m: translate, + mm: translate, + h: translate, + hh: translate, + d: 'dan', + dd: translate, + M: 'mjesec', + MM: translate, + y: 'godinu', + yy: translate, + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('ca', { + months: { + standalone: 'gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre'.split( + '_' + ), + format: "de gener_de febrer_de març_d'abril_de maig_de juny_de juliol_d'agost_de setembre_d'octubre_de novembre_de desembre".split( + '_' + ), + isFormat: /D[oD]?(\s)+MMMM/, + }, + monthsShort: 'gen._febr._març_abr._maig_juny_jul._ag._set._oct._nov._des.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte'.split( + '_' + ), + weekdaysShort: 'dg._dl._dt._dc._dj._dv._ds.'.split('_'), + weekdaysMin: 'dg_dl_dt_dc_dj_dv_ds'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM [de] YYYY', + ll: 'D MMM YYYY', + LLL: 'D MMMM [de] YYYY [a les] H:mm', + lll: 'D MMM YYYY, H:mm', + LLLL: 'dddd D MMMM [de] YYYY [a les] H:mm', + llll: 'ddd D MMM YYYY, H:mm', + }, + calendar: { + sameDay: function () { + return '[avui a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT'; + }, + nextDay: function () { + return '[demà a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT'; + }, + nextWeek: function () { + return 'dddd [a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT'; + }, + lastDay: function () { + return '[ahir a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT'; + }, + lastWeek: function () { + return ( + '[el] dddd [passat a ' + + (this.hours() !== 1 ? 'les' : 'la') + + '] LT' + ); + }, + sameElse: 'L', + }, + relativeTime: { + future: "d'aquí %s", + past: 'fa %s', + s: 'uns segons', + ss: '%d segons', + m: 'un minut', + mm: '%d minuts', + h: 'una hora', + hh: '%d hores', + d: 'un dia', + dd: '%d dies', + M: 'un mes', + MM: '%d mesos', + y: 'un any', + yy: '%d anys', + }, + dayOfMonthOrdinalParse: /\d{1,2}(r|n|t|è|a)/, + ordinal: function (number, period) { + var output = + number === 1 + ? 'r' + : number === 2 + ? 'n' + : number === 3 + ? 'r' + : number === 4 + ? 't' + : 'è'; + if (period === 'w' || period === 'W') { + output = 'a'; + } + return number + output; + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var months$3 = 'leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec'.split( + '_' + ), + monthsShort = 'led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro'.split('_'), + monthsParse$1 = [ + /^led/i, + /^úno/i, + /^bře/i, + /^dub/i, + /^kvě/i, + /^(čvn|červen$|června)/i, + /^(čvc|červenec|července)/i, + /^srp/i, + /^zář/i, + /^říj/i, + /^lis/i, + /^pro/i, + ], + // NOTE: 'červen' is substring of 'červenec'; therefore 'červenec' must precede 'červen' in the regex to be fully matched. + // Otherwise parser matches '1. červenec' as '1. červen' + 'ec'. + monthsRegex$1 = /^(leden|únor|březen|duben|květen|červenec|července|červen|června|srpen|září|říjen|listopad|prosinec|led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i; + + function plural$1(n) { + return n > 1 && n < 5 && ~~(n / 10) !== 1; + } + function translate$1(number, withoutSuffix, key, isFuture) { + var result = number + ' '; + switch (key) { + case 's': // a few seconds / in a few seconds / a few seconds ago + return withoutSuffix || isFuture ? 'pár sekund' : 'pár sekundami'; + case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago + if (withoutSuffix || isFuture) { + return result + (plural$1(number) ? 'sekundy' : 'sekund'); + } else { + return result + 'sekundami'; + } + case 'm': // a minute / in a minute / a minute ago + return withoutSuffix ? 'minuta' : isFuture ? 'minutu' : 'minutou'; + case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago + if (withoutSuffix || isFuture) { + return result + (plural$1(number) ? 'minuty' : 'minut'); + } else { + return result + 'minutami'; + } + case 'h': // an hour / in an hour / an hour ago + return withoutSuffix ? 'hodina' : isFuture ? 'hodinu' : 'hodinou'; + case 'hh': // 9 hours / in 9 hours / 9 hours ago + if (withoutSuffix || isFuture) { + return result + (plural$1(number) ? 'hodiny' : 'hodin'); + } else { + return result + 'hodinami'; + } + case 'd': // a day / in a day / a day ago + return withoutSuffix || isFuture ? 'den' : 'dnem'; + case 'dd': // 9 days / in 9 days / 9 days ago + if (withoutSuffix || isFuture) { + return result + (plural$1(number) ? 'dny' : 'dní'); + } else { + return result + 'dny'; + } + case 'M': // a month / in a month / a month ago + return withoutSuffix || isFuture ? 'měsíc' : 'měsícem'; + case 'MM': // 9 months / in 9 months / 9 months ago + if (withoutSuffix || isFuture) { + return result + (plural$1(number) ? 'měsíce' : 'měsíců'); + } else { + return result + 'měsíci'; + } + case 'y': // a year / in a year / a year ago + return withoutSuffix || isFuture ? 'rok' : 'rokem'; + case 'yy': // 9 years / in 9 years / 9 years ago + if (withoutSuffix || isFuture) { + return result + (plural$1(number) ? 'roky' : 'let'); + } else { + return result + 'lety'; + } + } + } + + moment.defineLocale('cs', { + months: months$3, + monthsShort: monthsShort, + monthsRegex: monthsRegex$1, + monthsShortRegex: monthsRegex$1, + // NOTE: 'červen' is substring of 'červenec'; therefore 'červenec' must precede 'červen' in the regex to be fully matched. + // Otherwise parser matches '1. červenec' as '1. červen' + 'ec'. + monthsStrictRegex: /^(leden|ledna|února|únor|březen|března|duben|dubna|květen|května|červenec|července|červen|června|srpen|srpna|září|říjen|října|listopadu|listopad|prosinec|prosince)/i, + monthsShortStrictRegex: /^(led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i, + monthsParse: monthsParse$1, + longMonthsParse: monthsParse$1, + shortMonthsParse: monthsParse$1, + weekdays: 'neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota'.split('_'), + weekdaysShort: 'ne_po_út_st_čt_pá_so'.split('_'), + weekdaysMin: 'ne_po_út_st_čt_pá_so'.split('_'), + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY H:mm', + LLLL: 'dddd D. MMMM YYYY H:mm', + l: 'D. M. YYYY', + }, + calendar: { + sameDay: '[dnes v] LT', + nextDay: '[zítra v] LT', + nextWeek: function () { + switch (this.day()) { + case 0: + return '[v neděli v] LT'; + case 1: + case 2: + return '[v] dddd [v] LT'; + case 3: + return '[ve středu v] LT'; + case 4: + return '[ve čtvrtek v] LT'; + case 5: + return '[v pátek v] LT'; + case 6: + return '[v sobotu v] LT'; + } + }, + lastDay: '[včera v] LT', + lastWeek: function () { + switch (this.day()) { + case 0: + return '[minulou neděli v] LT'; + case 1: + case 2: + return '[minulé] dddd [v] LT'; + case 3: + return '[minulou středu v] LT'; + case 4: + case 5: + return '[minulý] dddd [v] LT'; + case 6: + return '[minulou sobotu v] LT'; + } + }, + sameElse: 'L', + }, + relativeTime: { + future: 'za %s', + past: 'před %s', + s: translate$1, + ss: translate$1, + m: translate$1, + mm: translate$1, + h: translate$1, + hh: translate$1, + d: translate$1, + dd: translate$1, + M: translate$1, + MM: translate$1, + y: translate$1, + yy: translate$1, + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('cv', { + months: 'кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав'.split( + '_' + ), + monthsShort: 'кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш'.split('_'), + weekdays: 'вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун'.split( + '_' + ), + weekdaysShort: 'выр_тун_ытл_юн_кӗҫ_эрн_шӑм'.split('_'), + weekdaysMin: 'вр_тн_ыт_юн_кҫ_эр_шм'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD-MM-YYYY', + LL: 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]', + LLL: 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm', + LLLL: 'dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm', + }, + calendar: { + sameDay: '[Паян] LT [сехетре]', + nextDay: '[Ыран] LT [сехетре]', + lastDay: '[Ӗнер] LT [сехетре]', + nextWeek: '[Ҫитес] dddd LT [сехетре]', + lastWeek: '[Иртнӗ] dddd LT [сехетре]', + sameElse: 'L', + }, + relativeTime: { + future: function (output) { + var affix = /сехет$/i.exec(output) + ? 'рен' + : /ҫул$/i.exec(output) + ? 'тан' + : 'ран'; + return output + affix; + }, + past: '%s каялла', + s: 'пӗр-ик ҫеккунт', + ss: '%d ҫеккунт', + m: 'пӗр минут', + mm: '%d минут', + h: 'пӗр сехет', + hh: '%d сехет', + d: 'пӗр кун', + dd: '%d кун', + M: 'пӗр уйӑх', + MM: '%d уйӑх', + y: 'пӗр ҫул', + yy: '%d ҫул', + }, + dayOfMonthOrdinalParse: /\d{1,2}-мӗш/, + ordinal: '%d-мӗш', + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('cy', { + months: 'Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr'.split( + '_' + ), + monthsShort: 'Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag'.split( + '_' + ), + weekdays: 'Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn'.split( + '_' + ), + weekdaysShort: 'Sul_Llun_Maw_Mer_Iau_Gwe_Sad'.split('_'), + weekdaysMin: 'Su_Ll_Ma_Me_Ia_Gw_Sa'.split('_'), + weekdaysParseExact: true, + // time formats are the same as en-gb + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Heddiw am] LT', + nextDay: '[Yfory am] LT', + nextWeek: 'dddd [am] LT', + lastDay: '[Ddoe am] LT', + lastWeek: 'dddd [diwethaf am] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'mewn %s', + past: '%s yn ôl', + s: 'ychydig eiliadau', + ss: '%d eiliad', + m: 'munud', + mm: '%d munud', + h: 'awr', + hh: '%d awr', + d: 'diwrnod', + dd: '%d diwrnod', + M: 'mis', + MM: '%d mis', + y: 'blwyddyn', + yy: '%d flynedd', + }, + dayOfMonthOrdinalParse: /\d{1,2}(fed|ain|af|il|ydd|ed|eg)/, + // traditional ordinal numbers above 31 are not commonly used in colloquial Welsh + ordinal: function (number) { + var b = number, + output = '', + lookup = [ + '', + 'af', + 'il', + 'ydd', + 'ydd', + 'ed', + 'ed', + 'ed', + 'fed', + 'fed', + 'fed', // 1af to 10fed + 'eg', + 'fed', + 'eg', + 'eg', + 'fed', + 'eg', + 'eg', + 'fed', + 'eg', + 'fed', // 11eg to 20fed + ]; + if (b > 20) { + if (b === 40 || b === 50 || b === 60 || b === 80 || b === 100) { + output = 'fed'; // not 30ain, 70ain or 90ain + } else { + output = 'ain'; + } + } else if (b > 0) { + output = lookup[b]; + } + return number + output; + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('da', { + months: 'januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december'.split( + '_' + ), + monthsShort: 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'), + weekdays: 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'), + weekdaysShort: 'søn_man_tir_ons_tor_fre_lør'.split('_'), + weekdaysMin: 'sø_ma_ti_on_to_fr_lø'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY HH:mm', + LLLL: 'dddd [d.] D. MMMM YYYY [kl.] HH:mm', + }, + calendar: { + sameDay: '[i dag kl.] LT', + nextDay: '[i morgen kl.] LT', + nextWeek: 'på dddd [kl.] LT', + lastDay: '[i går kl.] LT', + lastWeek: '[i] dddd[s kl.] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'om %s', + past: '%s siden', + s: 'få sekunder', + ss: '%d sekunder', + m: 'et minut', + mm: '%d minutter', + h: 'en time', + hh: '%d timer', + d: 'en dag', + dd: '%d dage', + M: 'en måned', + MM: '%d måneder', + y: 'et år', + yy: '%d år', + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + function processRelativeTime(number, withoutSuffix, key, isFuture) { + var format = { + m: ['eine Minute', 'einer Minute'], + h: ['eine Stunde', 'einer Stunde'], + d: ['ein Tag', 'einem Tag'], + dd: [number + ' Tage', number + ' Tagen'], + w: ['eine Woche', 'einer Woche'], + M: ['ein Monat', 'einem Monat'], + MM: [number + ' Monate', number + ' Monaten'], + y: ['ein Jahr', 'einem Jahr'], + yy: [number + ' Jahre', number + ' Jahren'], + }; + return withoutSuffix ? format[key][0] : format[key][1]; + } + + moment.defineLocale('de-at', { + months: 'Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split( + '_' + ), + monthsShort: 'Jän._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split( + '_' + ), + weekdaysShort: 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'), + weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY HH:mm', + LLLL: 'dddd, D. MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[heute um] LT [Uhr]', + sameElse: 'L', + nextDay: '[morgen um] LT [Uhr]', + nextWeek: 'dddd [um] LT [Uhr]', + lastDay: '[gestern um] LT [Uhr]', + lastWeek: '[letzten] dddd [um] LT [Uhr]', + }, + relativeTime: { + future: 'in %s', + past: 'vor %s', + s: 'ein paar Sekunden', + ss: '%d Sekunden', + m: processRelativeTime, + mm: '%d Minuten', + h: processRelativeTime, + hh: '%d Stunden', + d: processRelativeTime, + dd: processRelativeTime, + w: processRelativeTime, + ww: '%d Wochen', + M: processRelativeTime, + MM: processRelativeTime, + y: processRelativeTime, + yy: processRelativeTime, + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + function processRelativeTime$1(number, withoutSuffix, key, isFuture) { + var format = { + m: ['eine Minute', 'einer Minute'], + h: ['eine Stunde', 'einer Stunde'], + d: ['ein Tag', 'einem Tag'], + dd: [number + ' Tage', number + ' Tagen'], + w: ['eine Woche', 'einer Woche'], + M: ['ein Monat', 'einem Monat'], + MM: [number + ' Monate', number + ' Monaten'], + y: ['ein Jahr', 'einem Jahr'], + yy: [number + ' Jahre', number + ' Jahren'], + }; + return withoutSuffix ? format[key][0] : format[key][1]; + } + + moment.defineLocale('de-ch', { + months: 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split( + '_' + ), + monthsShort: 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split( + '_' + ), + weekdaysShort: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'), + weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY HH:mm', + LLLL: 'dddd, D. MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[heute um] LT [Uhr]', + sameElse: 'L', + nextDay: '[morgen um] LT [Uhr]', + nextWeek: 'dddd [um] LT [Uhr]', + lastDay: '[gestern um] LT [Uhr]', + lastWeek: '[letzten] dddd [um] LT [Uhr]', + }, + relativeTime: { + future: 'in %s', + past: 'vor %s', + s: 'ein paar Sekunden', + ss: '%d Sekunden', + m: processRelativeTime$1, + mm: '%d Minuten', + h: processRelativeTime$1, + hh: '%d Stunden', + d: processRelativeTime$1, + dd: processRelativeTime$1, + w: processRelativeTime$1, + ww: '%d Wochen', + M: processRelativeTime$1, + MM: processRelativeTime$1, + y: processRelativeTime$1, + yy: processRelativeTime$1, + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + function processRelativeTime$2(number, withoutSuffix, key, isFuture) { + var format = { + m: ['eine Minute', 'einer Minute'], + h: ['eine Stunde', 'einer Stunde'], + d: ['ein Tag', 'einem Tag'], + dd: [number + ' Tage', number + ' Tagen'], + w: ['eine Woche', 'einer Woche'], + M: ['ein Monat', 'einem Monat'], + MM: [number + ' Monate', number + ' Monaten'], + y: ['ein Jahr', 'einem Jahr'], + yy: [number + ' Jahre', number + ' Jahren'], + }; + return withoutSuffix ? format[key][0] : format[key][1]; + } + + moment.defineLocale('de', { + months: 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split( + '_' + ), + monthsShort: 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split( + '_' + ), + weekdaysShort: 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'), + weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY HH:mm', + LLLL: 'dddd, D. MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[heute um] LT [Uhr]', + sameElse: 'L', + nextDay: '[morgen um] LT [Uhr]', + nextWeek: 'dddd [um] LT [Uhr]', + lastDay: '[gestern um] LT [Uhr]', + lastWeek: '[letzten] dddd [um] LT [Uhr]', + }, + relativeTime: { + future: 'in %s', + past: 'vor %s', + s: 'ein paar Sekunden', + ss: '%d Sekunden', + m: processRelativeTime$2, + mm: '%d Minuten', + h: processRelativeTime$2, + hh: '%d Stunden', + d: processRelativeTime$2, + dd: processRelativeTime$2, + w: processRelativeTime$2, + ww: '%d Wochen', + M: processRelativeTime$2, + MM: processRelativeTime$2, + y: processRelativeTime$2, + yy: processRelativeTime$2, + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var months$4 = [ + 'ޖެނުއަރީ', + 'ފެބްރުއަރީ', + 'މާރިޗު', + 'އޭޕްރީލު', + 'މޭ', + 'ޖޫން', + 'ޖުލައި', + 'އޯގަސްޓު', + 'ސެޕްޓެމްބަރު', + 'އޮކްޓޯބަރު', + 'ނޮވެމްބަރު', + 'ޑިސެމްބަރު', + ], + weekdays = [ + 'އާދިއްތަ', + 'ހޯމަ', + 'އަންގާރަ', + 'ބުދަ', + 'ބުރާސްފަތި', + 'ހުކުރު', + 'ހޮނިހިރު', + ]; + + moment.defineLocale('dv', { + months: months$4, + monthsShort: months$4, + weekdays: weekdays, + weekdaysShort: weekdays, + weekdaysMin: 'އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'D/M/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + meridiemParse: /މކ|މފ/, + isPM: function (input) { + return 'މފ' === input; + }, + meridiem: function (hour, minute, isLower) { + if (hour < 12) { + return 'މކ'; + } else { + return 'މފ'; + } + }, + calendar: { + sameDay: '[މިއަދު] LT', + nextDay: '[މާދަމާ] LT', + nextWeek: 'dddd LT', + lastDay: '[އިއްޔެ] LT', + lastWeek: '[ފާއިތުވި] dddd LT', + sameElse: 'L', + }, + relativeTime: { + future: 'ތެރޭގައި %s', + past: 'ކުރިން %s', + s: 'ސިކުންތުކޮޅެއް', + ss: 'd% ސިކުންތު', + m: 'މިނިޓެއް', + mm: 'މިނިޓު %d', + h: 'ގަޑިއިރެއް', + hh: 'ގަޑިއިރު %d', + d: 'ދުވަހެއް', + dd: 'ދުވަސް %d', + M: 'މަހެއް', + MM: 'މަސް %d', + y: 'އަހަރެއް', + yy: 'އަހަރު %d', + }, + preparse: function (string) { + return string.replace(/،/g, ','); + }, + postformat: function (string) { + return string.replace(/,/g, '،'); + }, + week: { + dow: 7, // Sunday is the first day of the week. + doy: 12, // The week that contains Jan 12th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + function isFunction(input) { + return ( + (typeof Function !== 'undefined' && input instanceof Function) || + Object.prototype.toString.call(input) === '[object Function]' + ); + } + + moment.defineLocale('el', { + monthsNominativeEl: 'Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος'.split( + '_' + ), + monthsGenitiveEl: 'Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου'.split( + '_' + ), + months: function (momentToFormat, format) { + if (!momentToFormat) { + return this._monthsNominativeEl; + } else if ( + typeof format === 'string' && + /D/.test(format.substring(0, format.indexOf('MMMM'))) + ) { + // if there is a day number before 'MMMM' + return this._monthsGenitiveEl[momentToFormat.month()]; + } else { + return this._monthsNominativeEl[momentToFormat.month()]; + } + }, + monthsShort: 'Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ'.split('_'), + weekdays: 'Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο'.split( + '_' + ), + weekdaysShort: 'Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ'.split('_'), + weekdaysMin: 'Κυ_Δε_Τρ_Τε_Πε_Πα_Σα'.split('_'), + meridiem: function (hours, minutes, isLower) { + if (hours > 11) { + return isLower ? 'μμ' : 'ΜΜ'; + } else { + return isLower ? 'πμ' : 'ΠΜ'; + } + }, + isPM: function (input) { + return (input + '').toLowerCase()[0] === 'μ'; + }, + meridiemParse: /[ΠΜ]\.?Μ?\.?/i, + longDateFormat: { + LT: 'h:mm A', + LTS: 'h:mm:ss A', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY h:mm A', + LLLL: 'dddd, D MMMM YYYY h:mm A', + }, + calendarEl: { + sameDay: '[Σήμερα {}] LT', + nextDay: '[Αύριο {}] LT', + nextWeek: 'dddd [{}] LT', + lastDay: '[Χθες {}] LT', + lastWeek: function () { + switch (this.day()) { + case 6: + return '[το προηγούμενο] dddd [{}] LT'; + default: + return '[την προηγούμενη] dddd [{}] LT'; + } + }, + sameElse: 'L', + }, + calendar: function (key, mom) { + var output = this._calendarEl[key], + hours = mom && mom.hours(); + if (isFunction(output)) { + output = output.apply(mom); + } + return output.replace('{}', hours % 12 === 1 ? 'στη' : 'στις'); + }, + relativeTime: { + future: 'σε %s', + past: '%s πριν', + s: 'λίγα δευτερόλεπτα', + ss: '%d δευτερόλεπτα', + m: 'ένα λεπτό', + mm: '%d λεπτά', + h: 'μία ώρα', + hh: '%d ώρες', + d: 'μία μέρα', + dd: '%d μέρες', + M: 'ένας μήνας', + MM: '%d μήνες', + y: 'ένας χρόνος', + yy: '%d χρόνια', + }, + dayOfMonthOrdinalParse: /\d{1,2}η/, + ordinal: '%dη', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4st is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('en-au', { + months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split( + '_' + ), + monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split( + '_' + ), + weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + longDateFormat: { + LT: 'h:mm A', + LTS: 'h:mm:ss A', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY h:mm A', + LLLL: 'dddd, D MMMM YYYY h:mm A', + }, + calendar: { + sameDay: '[Today at] LT', + nextDay: '[Tomorrow at] LT', + nextWeek: 'dddd [at] LT', + lastDay: '[Yesterday at] LT', + lastWeek: '[Last] dddd [at] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'in %s', + past: '%s ago', + s: 'a few seconds', + ss: '%d seconds', + m: 'a minute', + mm: '%d minutes', + h: 'an hour', + hh: '%d hours', + d: 'a day', + dd: '%d days', + M: 'a month', + MM: '%d months', + y: 'a year', + yy: '%d years', + }, + dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, + ordinal: function (number) { + var b = number % 10, + output = + ~~((number % 100) / 10) === 1 + ? 'th' + : b === 1 + ? 'st' + : b === 2 + ? 'nd' + : b === 3 + ? 'rd' + : 'th'; + return number + output; + }, + week: { + dow: 0, // Sunday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('en-ca', { + months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split( + '_' + ), + monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split( + '_' + ), + weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + longDateFormat: { + LT: 'h:mm A', + LTS: 'h:mm:ss A', + L: 'YYYY-MM-DD', + LL: 'MMMM D, YYYY', + LLL: 'MMMM D, YYYY h:mm A', + LLLL: 'dddd, MMMM D, YYYY h:mm A', + }, + calendar: { + sameDay: '[Today at] LT', + nextDay: '[Tomorrow at] LT', + nextWeek: 'dddd [at] LT', + lastDay: '[Yesterday at] LT', + lastWeek: '[Last] dddd [at] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'in %s', + past: '%s ago', + s: 'a few seconds', + ss: '%d seconds', + m: 'a minute', + mm: '%d minutes', + h: 'an hour', + hh: '%d hours', + d: 'a day', + dd: '%d days', + M: 'a month', + MM: '%d months', + y: 'a year', + yy: '%d years', + }, + dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, + ordinal: function (number) { + var b = number % 10, + output = + ~~((number % 100) / 10) === 1 + ? 'th' + : b === 1 + ? 'st' + : b === 2 + ? 'nd' + : b === 3 + ? 'rd' + : 'th'; + return number + output; + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('en-gb', { + months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split( + '_' + ), + monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split( + '_' + ), + weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Today at] LT', + nextDay: '[Tomorrow at] LT', + nextWeek: 'dddd [at] LT', + lastDay: '[Yesterday at] LT', + lastWeek: '[Last] dddd [at] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'in %s', + past: '%s ago', + s: 'a few seconds', + ss: '%d seconds', + m: 'a minute', + mm: '%d minutes', + h: 'an hour', + hh: '%d hours', + d: 'a day', + dd: '%d days', + M: 'a month', + MM: '%d months', + y: 'a year', + yy: '%d years', + }, + dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, + ordinal: function (number) { + var b = number % 10, + output = + ~~((number % 100) / 10) === 1 + ? 'th' + : b === 1 + ? 'st' + : b === 2 + ? 'nd' + : b === 3 + ? 'rd' + : 'th'; + return number + output; + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('en-ie', { + months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split( + '_' + ), + monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split( + '_' + ), + weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Today at] LT', + nextDay: '[Tomorrow at] LT', + nextWeek: 'dddd [at] LT', + lastDay: '[Yesterday at] LT', + lastWeek: '[Last] dddd [at] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'in %s', + past: '%s ago', + s: 'a few seconds', + ss: '%d seconds', + m: 'a minute', + mm: '%d minutes', + h: 'an hour', + hh: '%d hours', + d: 'a day', + dd: '%d days', + M: 'a month', + MM: '%d months', + y: 'a year', + yy: '%d years', + }, + dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, + ordinal: function (number) { + var b = number % 10, + output = + ~~((number % 100) / 10) === 1 + ? 'th' + : b === 1 + ? 'st' + : b === 2 + ? 'nd' + : b === 3 + ? 'rd' + : 'th'; + return number + output; + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('en-il', { + months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split( + '_' + ), + monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split( + '_' + ), + weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Today at] LT', + nextDay: '[Tomorrow at] LT', + nextWeek: 'dddd [at] LT', + lastDay: '[Yesterday at] LT', + lastWeek: '[Last] dddd [at] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'in %s', + past: '%s ago', + s: 'a few seconds', + ss: '%d seconds', + m: 'a minute', + mm: '%d minutes', + h: 'an hour', + hh: '%d hours', + d: 'a day', + dd: '%d days', + M: 'a month', + MM: '%d months', + y: 'a year', + yy: '%d years', + }, + dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, + ordinal: function (number) { + var b = number % 10, + output = + ~~((number % 100) / 10) === 1 + ? 'th' + : b === 1 + ? 'st' + : b === 2 + ? 'nd' + : b === 3 + ? 'rd' + : 'th'; + return number + output; + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('en-in', { + months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split( + '_' + ), + monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split( + '_' + ), + weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + longDateFormat: { + LT: 'h:mm A', + LTS: 'h:mm:ss A', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY h:mm A', + LLLL: 'dddd, D MMMM YYYY h:mm A', + }, + calendar: { + sameDay: '[Today at] LT', + nextDay: '[Tomorrow at] LT', + nextWeek: 'dddd [at] LT', + lastDay: '[Yesterday at] LT', + lastWeek: '[Last] dddd [at] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'in %s', + past: '%s ago', + s: 'a few seconds', + ss: '%d seconds', + m: 'a minute', + mm: '%d minutes', + h: 'an hour', + hh: '%d hours', + d: 'a day', + dd: '%d days', + M: 'a month', + MM: '%d months', + y: 'a year', + yy: '%d years', + }, + dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, + ordinal: function (number) { + var b = number % 10, + output = + ~~((number % 100) / 10) === 1 + ? 'th' + : b === 1 + ? 'st' + : b === 2 + ? 'nd' + : b === 3 + ? 'rd' + : 'th'; + return number + output; + }, + week: { + dow: 0, // Sunday is the first day of the week. + doy: 6, // The week that contains Jan 1st is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('en-nz', { + months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split( + '_' + ), + monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split( + '_' + ), + weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + longDateFormat: { + LT: 'h:mm A', + LTS: 'h:mm:ss A', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY h:mm A', + LLLL: 'dddd, D MMMM YYYY h:mm A', + }, + calendar: { + sameDay: '[Today at] LT', + nextDay: '[Tomorrow at] LT', + nextWeek: 'dddd [at] LT', + lastDay: '[Yesterday at] LT', + lastWeek: '[Last] dddd [at] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'in %s', + past: '%s ago', + s: 'a few seconds', + ss: '%d seconds', + m: 'a minute', + mm: '%d minutes', + h: 'an hour', + hh: '%d hours', + d: 'a day', + dd: '%d days', + M: 'a month', + MM: '%d months', + y: 'a year', + yy: '%d years', + }, + dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, + ordinal: function (number) { + var b = number % 10, + output = + ~~((number % 100) / 10) === 1 + ? 'th' + : b === 1 + ? 'st' + : b === 2 + ? 'nd' + : b === 3 + ? 'rd' + : 'th'; + return number + output; + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('en-sg', { + months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split( + '_' + ), + monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split( + '_' + ), + weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Today at] LT', + nextDay: '[Tomorrow at] LT', + nextWeek: 'dddd [at] LT', + lastDay: '[Yesterday at] LT', + lastWeek: '[Last] dddd [at] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'in %s', + past: '%s ago', + s: 'a few seconds', + ss: '%d seconds', + m: 'a minute', + mm: '%d minutes', + h: 'an hour', + hh: '%d hours', + d: 'a day', + dd: '%d days', + M: 'a month', + MM: '%d months', + y: 'a year', + yy: '%d years', + }, + dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, + ordinal: function (number) { + var b = number % 10, + output = + ~~((number % 100) / 10) === 1 + ? 'th' + : b === 1 + ? 'st' + : b === 2 + ? 'nd' + : b === 3 + ? 'rd' + : 'th'; + return number + output; + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('eo', { + months: 'januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro'.split( + '_' + ), + monthsShort: 'jan_feb_mart_apr_maj_jun_jul_aŭg_sept_okt_nov_dec'.split('_'), + weekdays: 'dimanĉo_lundo_mardo_merkredo_ĵaŭdo_vendredo_sabato'.split('_'), + weekdaysShort: 'dim_lun_mard_merk_ĵaŭ_ven_sab'.split('_'), + weekdaysMin: 'di_lu_ma_me_ĵa_ve_sa'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'YYYY-MM-DD', + LL: '[la] D[-an de] MMMM, YYYY', + LLL: '[la] D[-an de] MMMM, YYYY HH:mm', + LLLL: 'dddd[n], [la] D[-an de] MMMM, YYYY HH:mm', + llll: 'ddd, [la] D[-an de] MMM, YYYY HH:mm', + }, + meridiemParse: /[ap]\.t\.m/i, + isPM: function (input) { + return input.charAt(0).toLowerCase() === 'p'; + }, + meridiem: function (hours, minutes, isLower) { + if (hours > 11) { + return isLower ? 'p.t.m.' : 'P.T.M.'; + } else { + return isLower ? 'a.t.m.' : 'A.T.M.'; + } + }, + calendar: { + sameDay: '[Hodiaŭ je] LT', + nextDay: '[Morgaŭ je] LT', + nextWeek: 'dddd[n je] LT', + lastDay: '[Hieraŭ je] LT', + lastWeek: '[pasintan] dddd[n je] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'post %s', + past: 'antaŭ %s', + s: 'kelkaj sekundoj', + ss: '%d sekundoj', + m: 'unu minuto', + mm: '%d minutoj', + h: 'unu horo', + hh: '%d horoj', + d: 'unu tago', //ne 'diurno', ĉar estas uzita por proksimumo + dd: '%d tagoj', + M: 'unu monato', + MM: '%d monatoj', + y: 'unu jaro', + yy: '%d jaroj', + }, + dayOfMonthOrdinalParse: /\d{1,2}a/, + ordinal: '%da', + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split( + '_' + ), + monthsShort$1 = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'), + monthsParse$2 = [ + /^ene/i, + /^feb/i, + /^mar/i, + /^abr/i, + /^may/i, + /^jun/i, + /^jul/i, + /^ago/i, + /^sep/i, + /^oct/i, + /^nov/i, + /^dic/i, + ], + monthsRegex$2 = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i; + + moment.defineLocale('es-do', { + months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split( + '_' + ), + monthsShort: function (m, format) { + if (!m) { + return monthsShortDot; + } else if (/-MMM-/.test(format)) { + return monthsShort$1[m.month()]; + } else { + return monthsShortDot[m.month()]; + } + }, + monthsRegex: monthsRegex$2, + monthsShortRegex: monthsRegex$2, + monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i, + monthsShortStrictRegex: /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i, + monthsParse: monthsParse$2, + longMonthsParse: monthsParse$2, + shortMonthsParse: monthsParse$2, + weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'), + weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'), + weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'h:mm A', + LTS: 'h:mm:ss A', + L: 'DD/MM/YYYY', + LL: 'D [de] MMMM [de] YYYY', + LLL: 'D [de] MMMM [de] YYYY h:mm A', + LLLL: 'dddd, D [de] MMMM [de] YYYY h:mm A', + }, + calendar: { + sameDay: function () { + return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; + }, + nextDay: function () { + return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; + }, + nextWeek: function () { + return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; + }, + lastDay: function () { + return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; + }, + lastWeek: function () { + return ( + '[el] dddd [pasado a la' + + (this.hours() !== 1 ? 's' : '') + + '] LT' + ); + }, + sameElse: 'L', + }, + relativeTime: { + future: 'en %s', + past: 'hace %s', + s: 'unos segundos', + ss: '%d segundos', + m: 'un minuto', + mm: '%d minutos', + h: 'una hora', + hh: '%d horas', + d: 'un día', + dd: '%d días', + M: 'un mes', + MM: '%d meses', + y: 'un año', + yy: '%d años', + }, + dayOfMonthOrdinalParse: /\d{1,2}º/, + ordinal: '%dº', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var monthsShortDot$1 = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split( + '_' + ), + monthsShort$2 = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'), + monthsParse$3 = [ + /^ene/i, + /^feb/i, + /^mar/i, + /^abr/i, + /^may/i, + /^jun/i, + /^jul/i, + /^ago/i, + /^sep/i, + /^oct/i, + /^nov/i, + /^dic/i, + ], + monthsRegex$3 = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i; + + moment.defineLocale('es-us', { + months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split( + '_' + ), + monthsShort: function (m, format) { + if (!m) { + return monthsShortDot$1; + } else if (/-MMM-/.test(format)) { + return monthsShort$2[m.month()]; + } else { + return monthsShortDot$1[m.month()]; + } + }, + monthsRegex: monthsRegex$3, + monthsShortRegex: monthsRegex$3, + monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i, + monthsShortStrictRegex: /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i, + monthsParse: monthsParse$3, + longMonthsParse: monthsParse$3, + shortMonthsParse: monthsParse$3, + weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'), + weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'), + weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'h:mm A', + LTS: 'h:mm:ss A', + L: 'MM/DD/YYYY', + LL: 'D [de] MMMM [de] YYYY', + LLL: 'D [de] MMMM [de] YYYY h:mm A', + LLLL: 'dddd, D [de] MMMM [de] YYYY h:mm A', + }, + calendar: { + sameDay: function () { + return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; + }, + nextDay: function () { + return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; + }, + nextWeek: function () { + return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; + }, + lastDay: function () { + return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; + }, + lastWeek: function () { + return ( + '[el] dddd [pasado a la' + + (this.hours() !== 1 ? 's' : '') + + '] LT' + ); + }, + sameElse: 'L', + }, + relativeTime: { + future: 'en %s', + past: 'hace %s', + s: 'unos segundos', + ss: '%d segundos', + m: 'un minuto', + mm: '%d minutos', + h: 'una hora', + hh: '%d horas', + d: 'un día', + dd: '%d días', + M: 'un mes', + MM: '%d meses', + y: 'un año', + yy: '%d años', + }, + dayOfMonthOrdinalParse: /\d{1,2}º/, + ordinal: '%dº', + week: { + dow: 0, // Sunday is the first day of the week. + doy: 6, // The week that contains Jan 6th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var monthsShortDot$2 = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split( + '_' + ), + monthsShort$3 = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'), + monthsParse$4 = [ + /^ene/i, + /^feb/i, + /^mar/i, + /^abr/i, + /^may/i, + /^jun/i, + /^jul/i, + /^ago/i, + /^sep/i, + /^oct/i, + /^nov/i, + /^dic/i, + ], + monthsRegex$4 = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i; + + moment.defineLocale('es', { + months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split( + '_' + ), + monthsShort: function (m, format) { + if (!m) { + return monthsShortDot$2; + } else if (/-MMM-/.test(format)) { + return monthsShort$3[m.month()]; + } else { + return monthsShortDot$2[m.month()]; + } + }, + monthsRegex: monthsRegex$4, + monthsShortRegex: monthsRegex$4, + monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i, + monthsShortStrictRegex: /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i, + monthsParse: monthsParse$4, + longMonthsParse: monthsParse$4, + shortMonthsParse: monthsParse$4, + weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'), + weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'), + weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D [de] MMMM [de] YYYY', + LLL: 'D [de] MMMM [de] YYYY H:mm', + LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm', + }, + calendar: { + sameDay: function () { + return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; + }, + nextDay: function () { + return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; + }, + nextWeek: function () { + return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; + }, + lastDay: function () { + return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; + }, + lastWeek: function () { + return ( + '[el] dddd [pasado a la' + + (this.hours() !== 1 ? 's' : '') + + '] LT' + ); + }, + sameElse: 'L', + }, + relativeTime: { + future: 'en %s', + past: 'hace %s', + s: 'unos segundos', + ss: '%d segundos', + m: 'un minuto', + mm: '%d minutos', + h: 'una hora', + hh: '%d horas', + d: 'un día', + dd: '%d días', + M: 'un mes', + MM: '%d meses', + y: 'un año', + yy: '%d años', + }, + dayOfMonthOrdinalParse: /\d{1,2}º/, + ordinal: '%dº', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + invalidDate: 'Fecha inválida', + }); + + //! moment.js locale configuration + + function processRelativeTime$3(number, withoutSuffix, key, isFuture) { + var format = { + s: ['mõne sekundi', 'mõni sekund', 'paar sekundit'], + ss: [number + 'sekundi', number + 'sekundit'], + m: ['ühe minuti', 'üks minut'], + mm: [number + ' minuti', number + ' minutit'], + h: ['ühe tunni', 'tund aega', 'üks tund'], + hh: [number + ' tunni', number + ' tundi'], + d: ['ühe päeva', 'üks päev'], + M: ['kuu aja', 'kuu aega', 'üks kuu'], + MM: [number + ' kuu', number + ' kuud'], + y: ['ühe aasta', 'aasta', 'üks aasta'], + yy: [number + ' aasta', number + ' aastat'], + }; + if (withoutSuffix) { + return format[key][2] ? format[key][2] : format[key][1]; + } + return isFuture ? format[key][0] : format[key][1]; + } + + moment.defineLocale('et', { + months: 'jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember'.split( + '_' + ), + monthsShort: 'jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets'.split( + '_' + ), + weekdays: 'pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev'.split( + '_' + ), + weekdaysShort: 'P_E_T_K_N_R_L'.split('_'), + weekdaysMin: 'P_E_T_K_N_R_L'.split('_'), + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY H:mm', + LLLL: 'dddd, D. MMMM YYYY H:mm', + }, + calendar: { + sameDay: '[Täna,] LT', + nextDay: '[Homme,] LT', + nextWeek: '[Järgmine] dddd LT', + lastDay: '[Eile,] LT', + lastWeek: '[Eelmine] dddd LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s pärast', + past: '%s tagasi', + s: processRelativeTime$3, + ss: processRelativeTime$3, + m: processRelativeTime$3, + mm: processRelativeTime$3, + h: processRelativeTime$3, + hh: processRelativeTime$3, + d: processRelativeTime$3, + dd: '%d päeva', + M: processRelativeTime$3, + MM: processRelativeTime$3, + y: processRelativeTime$3, + yy: processRelativeTime$3, + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('eu', { + months: 'urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua'.split( + '_' + ), + monthsShort: 'urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata'.split( + '_' + ), + weekdaysShort: 'ig._al._ar._az._og._ol._lr.'.split('_'), + weekdaysMin: 'ig_al_ar_az_og_ol_lr'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'YYYY-MM-DD', + LL: 'YYYY[ko] MMMM[ren] D[a]', + LLL: 'YYYY[ko] MMMM[ren] D[a] HH:mm', + LLLL: 'dddd, YYYY[ko] MMMM[ren] D[a] HH:mm', + l: 'YYYY-M-D', + ll: 'YYYY[ko] MMM D[a]', + lll: 'YYYY[ko] MMM D[a] HH:mm', + llll: 'ddd, YYYY[ko] MMM D[a] HH:mm', + }, + calendar: { + sameDay: '[gaur] LT[etan]', + nextDay: '[bihar] LT[etan]', + nextWeek: 'dddd LT[etan]', + lastDay: '[atzo] LT[etan]', + lastWeek: '[aurreko] dddd LT[etan]', + sameElse: 'L', + }, + relativeTime: { + future: '%s barru', + past: 'duela %s', + s: 'segundo batzuk', + ss: '%d segundo', + m: 'minutu bat', + mm: '%d minutu', + h: 'ordu bat', + hh: '%d ordu', + d: 'egun bat', + dd: '%d egun', + M: 'hilabete bat', + MM: '%d hilabete', + y: 'urte bat', + yy: '%d urte', + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var symbolMap$5 = { + '1': '۱', + '2': '۲', + '3': '۳', + '4': '۴', + '5': '۵', + '6': '۶', + '7': '۷', + '8': '۸', + '9': '۹', + '0': '۰', + }, + numberMap$4 = { + '۱': '1', + '۲': '2', + '۳': '3', + '۴': '4', + '۵': '5', + '۶': '6', + '۷': '7', + '۸': '8', + '۹': '9', + '۰': '0', + }; + + moment.defineLocale('fa', { + months: 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split( + '_' + ), + monthsShort: 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split( + '_' + ), + weekdays: 'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split( + '_' + ), + weekdaysShort: 'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split( + '_' + ), + weekdaysMin: 'ی_د_س_چ_پ_ج_ش'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + meridiemParse: /قبل از ظهر|بعد از ظهر/, + isPM: function (input) { + return /بعد از ظهر/.test(input); + }, + meridiem: function (hour, minute, isLower) { + if (hour < 12) { + return 'قبل از ظهر'; + } else { + return 'بعد از ظهر'; + } + }, + calendar: { + sameDay: '[امروز ساعت] LT', + nextDay: '[فردا ساعت] LT', + nextWeek: 'dddd [ساعت] LT', + lastDay: '[دیروز ساعت] LT', + lastWeek: 'dddd [پیش] [ساعت] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'در %s', + past: '%s پیش', + s: 'چند ثانیه', + ss: '%d ثانیه', + m: 'یک دقیقه', + mm: '%d دقیقه', + h: 'یک ساعت', + hh: '%d ساعت', + d: 'یک روز', + dd: '%d روز', + M: 'یک ماه', + MM: '%d ماه', + y: 'یک سال', + yy: '%d سال', + }, + preparse: function (string) { + return string + .replace(/[۰-۹]/g, function (match) { + return numberMap$4[match]; + }) + .replace(/،/g, ','); + }, + postformat: function (string) { + return string + .replace(/\d/g, function (match) { + return symbolMap$5[match]; + }) + .replace(/,/g, '،'); + }, + dayOfMonthOrdinalParse: /\d{1,2}م/, + ordinal: '%dم', + week: { + dow: 6, // Saturday is the first day of the week. + doy: 12, // The week that contains Jan 12th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var numbersPast = 'nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän'.split( + ' ' + ), + numbersFuture = [ + 'nolla', + 'yhden', + 'kahden', + 'kolmen', + 'neljän', + 'viiden', + 'kuuden', + numbersPast[7], + numbersPast[8], + numbersPast[9], + ]; + function translate$2(number, withoutSuffix, key, isFuture) { + var result = ''; + switch (key) { + case 's': + return isFuture ? 'muutaman sekunnin' : 'muutama sekunti'; + case 'ss': + result = isFuture ? 'sekunnin' : 'sekuntia'; + break; + case 'm': + return isFuture ? 'minuutin' : 'minuutti'; + case 'mm': + result = isFuture ? 'minuutin' : 'minuuttia'; + break; + case 'h': + return isFuture ? 'tunnin' : 'tunti'; + case 'hh': + result = isFuture ? 'tunnin' : 'tuntia'; + break; + case 'd': + return isFuture ? 'päivän' : 'päivä'; + case 'dd': + result = isFuture ? 'päivän' : 'päivää'; + break; + case 'M': + return isFuture ? 'kuukauden' : 'kuukausi'; + case 'MM': + result = isFuture ? 'kuukauden' : 'kuukautta'; + break; + case 'y': + return isFuture ? 'vuoden' : 'vuosi'; + case 'yy': + result = isFuture ? 'vuoden' : 'vuotta'; + break; + } + result = verbalNumber(number, isFuture) + ' ' + result; + return result; + } + function verbalNumber(number, isFuture) { + return number < 10 + ? isFuture + ? numbersFuture[number] + : numbersPast[number] + : number; + } + + moment.defineLocale('fi', { + months: 'tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu'.split( + '_' + ), + monthsShort: 'tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu'.split( + '_' + ), + weekdays: 'sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai'.split( + '_' + ), + weekdaysShort: 'su_ma_ti_ke_to_pe_la'.split('_'), + weekdaysMin: 'su_ma_ti_ke_to_pe_la'.split('_'), + longDateFormat: { + LT: 'HH.mm', + LTS: 'HH.mm.ss', + L: 'DD.MM.YYYY', + LL: 'Do MMMM[ta] YYYY', + LLL: 'Do MMMM[ta] YYYY, [klo] HH.mm', + LLLL: 'dddd, Do MMMM[ta] YYYY, [klo] HH.mm', + l: 'D.M.YYYY', + ll: 'Do MMM YYYY', + lll: 'Do MMM YYYY, [klo] HH.mm', + llll: 'ddd, Do MMM YYYY, [klo] HH.mm', + }, + calendar: { + sameDay: '[tänään] [klo] LT', + nextDay: '[huomenna] [klo] LT', + nextWeek: 'dddd [klo] LT', + lastDay: '[eilen] [klo] LT', + lastWeek: '[viime] dddd[na] [klo] LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s päästä', + past: '%s sitten', + s: translate$2, + ss: translate$2, + m: translate$2, + mm: translate$2, + h: translate$2, + hh: translate$2, + d: translate$2, + dd: translate$2, + M: translate$2, + MM: translate$2, + y: translate$2, + yy: translate$2, + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('fil', { + months: 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split( + '_' + ), + monthsShort: 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'), + weekdays: 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split( + '_' + ), + weekdaysShort: 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'), + weekdaysMin: 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'MM/D/YYYY', + LL: 'MMMM D, YYYY', + LLL: 'MMMM D, YYYY HH:mm', + LLLL: 'dddd, MMMM DD, YYYY HH:mm', + }, + calendar: { + sameDay: 'LT [ngayong araw]', + nextDay: '[Bukas ng] LT', + nextWeek: 'LT [sa susunod na] dddd', + lastDay: 'LT [kahapon]', + lastWeek: 'LT [noong nakaraang] dddd', + sameElse: 'L', + }, + relativeTime: { + future: 'sa loob ng %s', + past: '%s ang nakalipas', + s: 'ilang segundo', + ss: '%d segundo', + m: 'isang minuto', + mm: '%d minuto', + h: 'isang oras', + hh: '%d oras', + d: 'isang araw', + dd: '%d araw', + M: 'isang buwan', + MM: '%d buwan', + y: 'isang taon', + yy: '%d taon', + }, + dayOfMonthOrdinalParse: /\d{1,2}/, + ordinal: function (number) { + return number; + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('fo', { + months: 'januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember'.split( + '_' + ), + monthsShort: 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'), + weekdays: 'sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur'.split( + '_' + ), + weekdaysShort: 'sun_mán_týs_mik_hós_frí_ley'.split('_'), + weekdaysMin: 'su_má_tý_mi_hó_fr_le'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D. MMMM, YYYY HH:mm', + }, + calendar: { + sameDay: '[Í dag kl.] LT', + nextDay: '[Í morgin kl.] LT', + nextWeek: 'dddd [kl.] LT', + lastDay: '[Í gjár kl.] LT', + lastWeek: '[síðstu] dddd [kl] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'um %s', + past: '%s síðani', + s: 'fá sekund', + ss: '%d sekundir', + m: 'ein minuttur', + mm: '%d minuttir', + h: 'ein tími', + hh: '%d tímar', + d: 'ein dagur', + dd: '%d dagar', + M: 'ein mánaður', + MM: '%d mánaðir', + y: 'eitt ár', + yy: '%d ár', + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('fr-ca', { + months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split( + '_' + ), + monthsShort: 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'), + weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'), + weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'YYYY-MM-DD', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Aujourd’hui à] LT', + nextDay: '[Demain à] LT', + nextWeek: 'dddd [à] LT', + lastDay: '[Hier à] LT', + lastWeek: 'dddd [dernier à] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'dans %s', + past: 'il y a %s', + s: 'quelques secondes', + ss: '%d secondes', + m: 'une minute', + mm: '%d minutes', + h: 'une heure', + hh: '%d heures', + d: 'un jour', + dd: '%d jours', + M: 'un mois', + MM: '%d mois', + y: 'un an', + yy: '%d ans', + }, + dayOfMonthOrdinalParse: /\d{1,2}(er|e)/, + ordinal: function (number, period) { + switch (period) { + // Words with masculine grammatical gender: mois, trimestre, jour + default: + case 'M': + case 'Q': + case 'D': + case 'DDD': + case 'd': + return number + (number === 1 ? 'er' : 'e'); + + // Words with feminine grammatical gender: semaine + case 'w': + case 'W': + return number + (number === 1 ? 're' : 'e'); + } + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('fr-ch', { + months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split( + '_' + ), + monthsShort: 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'), + weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'), + weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Aujourd’hui à] LT', + nextDay: '[Demain à] LT', + nextWeek: 'dddd [à] LT', + lastDay: '[Hier à] LT', + lastWeek: 'dddd [dernier à] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'dans %s', + past: 'il y a %s', + s: 'quelques secondes', + ss: '%d secondes', + m: 'une minute', + mm: '%d minutes', + h: 'une heure', + hh: '%d heures', + d: 'un jour', + dd: '%d jours', + M: 'un mois', + MM: '%d mois', + y: 'un an', + yy: '%d ans', + }, + dayOfMonthOrdinalParse: /\d{1,2}(er|e)/, + ordinal: function (number, period) { + switch (period) { + // Words with masculine grammatical gender: mois, trimestre, jour + default: + case 'M': + case 'Q': + case 'D': + case 'DDD': + case 'd': + return number + (number === 1 ? 'er' : 'e'); + + // Words with feminine grammatical gender: semaine + case 'w': + case 'W': + return number + (number === 1 ? 're' : 'e'); + } + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var monthsStrictRegex$1 = /^(janvier|février|mars|avril|mai|juin|juillet|août|septembre|octobre|novembre|décembre)/i, + monthsShortStrictRegex$1 = /(janv\.?|févr\.?|mars|avr\.?|mai|juin|juil\.?|août|sept\.?|oct\.?|nov\.?|déc\.?)/i, + monthsRegex$5 = /(janv\.?|févr\.?|mars|avr\.?|mai|juin|juil\.?|août|sept\.?|oct\.?|nov\.?|déc\.?|janvier|février|mars|avril|mai|juin|juillet|août|septembre|octobre|novembre|décembre)/i, + monthsParse$5 = [ + /^janv/i, + /^févr/i, + /^mars/i, + /^avr/i, + /^mai/i, + /^juin/i, + /^juil/i, + /^août/i, + /^sept/i, + /^oct/i, + /^nov/i, + /^déc/i, + ]; + + moment.defineLocale('fr', { + months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split( + '_' + ), + monthsShort: 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split( + '_' + ), + monthsRegex: monthsRegex$5, + monthsShortRegex: monthsRegex$5, + monthsStrictRegex: monthsStrictRegex$1, + monthsShortStrictRegex: monthsShortStrictRegex$1, + monthsParse: monthsParse$5, + longMonthsParse: monthsParse$5, + shortMonthsParse: monthsParse$5, + weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'), + weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'), + weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Aujourd’hui à] LT', + nextDay: '[Demain à] LT', + nextWeek: 'dddd [à] LT', + lastDay: '[Hier à] LT', + lastWeek: 'dddd [dernier à] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'dans %s', + past: 'il y a %s', + s: 'quelques secondes', + ss: '%d secondes', + m: 'une minute', + mm: '%d minutes', + h: 'une heure', + hh: '%d heures', + d: 'un jour', + dd: '%d jours', + M: 'un mois', + MM: '%d mois', + y: 'un an', + yy: '%d ans', + }, + dayOfMonthOrdinalParse: /\d{1,2}(er|)/, + ordinal: function (number, period) { + switch (period) { + // TODO: Return 'e' when day of month > 1. Move this case inside + // block for masculine words below. + // See https://github.com/moment/moment/issues/3375 + case 'D': + return number + (number === 1 ? 'er' : ''); + + // Words with masculine grammatical gender: mois, trimestre, jour + default: + case 'M': + case 'Q': + case 'DDD': + case 'd': + return number + (number === 1 ? 'er' : 'e'); + + // Words with feminine grammatical gender: semaine + case 'w': + case 'W': + return number + (number === 1 ? 're' : 'e'); + } + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var monthsShortWithDots = 'jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.'.split( + '_' + ), + monthsShortWithoutDots = 'jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des'.split( + '_' + ); + + moment.defineLocale('fy', { + months: 'jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber'.split( + '_' + ), + monthsShort: function (m, format) { + if (!m) { + return monthsShortWithDots; + } else if (/-MMM-/.test(format)) { + return monthsShortWithoutDots[m.month()]; + } else { + return monthsShortWithDots[m.month()]; + } + }, + monthsParseExact: true, + weekdays: 'snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon'.split( + '_' + ), + weekdaysShort: 'si._mo._ti._wo._to._fr._so.'.split('_'), + weekdaysMin: 'Si_Mo_Ti_Wo_To_Fr_So'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD-MM-YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[hjoed om] LT', + nextDay: '[moarn om] LT', + nextWeek: 'dddd [om] LT', + lastDay: '[juster om] LT', + lastWeek: '[ôfrûne] dddd [om] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'oer %s', + past: '%s lyn', + s: 'in pear sekonden', + ss: '%d sekonden', + m: 'ien minút', + mm: '%d minuten', + h: 'ien oere', + hh: '%d oeren', + d: 'ien dei', + dd: '%d dagen', + M: 'ien moanne', + MM: '%d moannen', + y: 'ien jier', + yy: '%d jierren', + }, + dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/, + ordinal: function (number) { + return ( + number + + (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de') + ); + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var months$5 = [ + 'Eanáir', + 'Feabhra', + 'Márta', + 'Aibreán', + 'Bealtaine', + 'Meitheamh', + 'Iúil', + 'Lúnasa', + 'Meán Fómhair', + 'Deireadh Fómhair', + 'Samhain', + 'Nollaig', + ], + monthsShort$4 = [ + 'Ean', + 'Feabh', + 'Márt', + 'Aib', + 'Beal', + 'Meith', + 'Iúil', + 'Lún', + 'M.F.', + 'D.F.', + 'Samh', + 'Noll', + ], + weekdays$1 = [ + 'Dé Domhnaigh', + 'Dé Luain', + 'Dé Máirt', + 'Dé Céadaoin', + 'Déardaoin', + 'Dé hAoine', + 'Dé Sathairn', + ], + weekdaysShort = ['Domh', 'Luan', 'Máirt', 'Céad', 'Déar', 'Aoine', 'Sath'], + weekdaysMin = ['Do', 'Lu', 'Má', 'Cé', 'Dé', 'A', 'Sa']; + + moment.defineLocale('ga', { + months: months$5, + monthsShort: monthsShort$4, + monthsParseExact: true, + weekdays: weekdays$1, + weekdaysShort: weekdaysShort, + weekdaysMin: weekdaysMin, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Inniu ag] LT', + nextDay: '[Amárach ag] LT', + nextWeek: 'dddd [ag] LT', + lastDay: '[Inné ag] LT', + lastWeek: 'dddd [seo caite] [ag] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'i %s', + past: '%s ó shin', + s: 'cúpla soicind', + ss: '%d soicind', + m: 'nóiméad', + mm: '%d nóiméad', + h: 'uair an chloig', + hh: '%d uair an chloig', + d: 'lá', + dd: '%d lá', + M: 'mí', + MM: '%d míonna', + y: 'bliain', + yy: '%d bliain', + }, + dayOfMonthOrdinalParse: /\d{1,2}(d|na|mh)/, + ordinal: function (number) { + var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh'; + return number + output; + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var months$6 = [ + 'Am Faoilleach', + 'An Gearran', + 'Am Màrt', + 'An Giblean', + 'An Cèitean', + 'An t-Ògmhios', + 'An t-Iuchar', + 'An Lùnastal', + 'An t-Sultain', + 'An Dàmhair', + 'An t-Samhain', + 'An Dùbhlachd', + ], + monthsShort$5 = [ + 'Faoi', + 'Gear', + 'Màrt', + 'Gibl', + 'Cèit', + 'Ògmh', + 'Iuch', + 'Lùn', + 'Sult', + 'Dàmh', + 'Samh', + 'Dùbh', + ], + weekdays$2 = [ + 'Didòmhnaich', + 'Diluain', + 'Dimàirt', + 'Diciadain', + 'Diardaoin', + 'Dihaoine', + 'Disathairne', + ], + weekdaysShort$1 = ['Did', 'Dil', 'Dim', 'Dic', 'Dia', 'Dih', 'Dis'], + weekdaysMin$1 = ['Dò', 'Lu', 'Mà', 'Ci', 'Ar', 'Ha', 'Sa']; + + moment.defineLocale('gd', { + months: months$6, + monthsShort: monthsShort$5, + monthsParseExact: true, + weekdays: weekdays$2, + weekdaysShort: weekdaysShort$1, + weekdaysMin: weekdaysMin$1, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[An-diugh aig] LT', + nextDay: '[A-màireach aig] LT', + nextWeek: 'dddd [aig] LT', + lastDay: '[An-dè aig] LT', + lastWeek: 'dddd [seo chaidh] [aig] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'ann an %s', + past: 'bho chionn %s', + s: 'beagan diogan', + ss: '%d diogan', + m: 'mionaid', + mm: '%d mionaidean', + h: 'uair', + hh: '%d uairean', + d: 'latha', + dd: '%d latha', + M: 'mìos', + MM: '%d mìosan', + y: 'bliadhna', + yy: '%d bliadhna', + }, + dayOfMonthOrdinalParse: /\d{1,2}(d|na|mh)/, + ordinal: function (number) { + var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh'; + return number + output; + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('gl', { + months: 'xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro'.split( + '_' + ), + monthsShort: 'xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'domingo_luns_martes_mércores_xoves_venres_sábado'.split('_'), + weekdaysShort: 'dom._lun._mar._mér._xov._ven._sáb.'.split('_'), + weekdaysMin: 'do_lu_ma_mé_xo_ve_sá'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D [de] MMMM [de] YYYY', + LLL: 'D [de] MMMM [de] YYYY H:mm', + LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm', + }, + calendar: { + sameDay: function () { + return '[hoxe ' + (this.hours() !== 1 ? 'ás' : 'á') + '] LT'; + }, + nextDay: function () { + return '[mañá ' + (this.hours() !== 1 ? 'ás' : 'á') + '] LT'; + }, + nextWeek: function () { + return 'dddd [' + (this.hours() !== 1 ? 'ás' : 'a') + '] LT'; + }, + lastDay: function () { + return '[onte ' + (this.hours() !== 1 ? 'á' : 'a') + '] LT'; + }, + lastWeek: function () { + return ( + '[o] dddd [pasado ' + (this.hours() !== 1 ? 'ás' : 'a') + '] LT' + ); + }, + sameElse: 'L', + }, + relativeTime: { + future: function (str) { + if (str.indexOf('un') === 0) { + return 'n' + str; + } + return 'en ' + str; + }, + past: 'hai %s', + s: 'uns segundos', + ss: '%d segundos', + m: 'un minuto', + mm: '%d minutos', + h: 'unha hora', + hh: '%d horas', + d: 'un día', + dd: '%d días', + M: 'un mes', + MM: '%d meses', + y: 'un ano', + yy: '%d anos', + }, + dayOfMonthOrdinalParse: /\d{1,2}º/, + ordinal: '%dº', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + function processRelativeTime$4(number, withoutSuffix, key, isFuture) { + var format = { + s: ['थोडया सॅकंडांनी', 'थोडे सॅकंड'], + ss: [number + ' सॅकंडांनी', number + ' सॅकंड'], + m: ['एका मिणटान', 'एक मिनूट'], + mm: [number + ' मिणटांनी', number + ' मिणटां'], + h: ['एका वरान', 'एक वर'], + hh: [number + ' वरांनी', number + ' वरां'], + d: ['एका दिसान', 'एक दीस'], + dd: [number + ' दिसांनी', number + ' दीस'], + M: ['एका म्हयन्यान', 'एक म्हयनो'], + MM: [number + ' म्हयन्यानी', number + ' म्हयने'], + y: ['एका वर्सान', 'एक वर्स'], + yy: [number + ' वर्सांनी', number + ' वर्सां'], + }; + return isFuture ? format[key][0] : format[key][1]; + } + + moment.defineLocale('gom-deva', { + months: { + standalone: 'जानेवारी_फेब्रुवारी_मार्च_एप्रील_मे_जून_जुलय_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split( + '_' + ), + format: 'जानेवारीच्या_फेब्रुवारीच्या_मार्चाच्या_एप्रीलाच्या_मेयाच्या_जूनाच्या_जुलयाच्या_ऑगस्टाच्या_सप्टेंबराच्या_ऑक्टोबराच्या_नोव्हेंबराच्या_डिसेंबराच्या'.split( + '_' + ), + isFormat: /MMMM(\s)+D[oD]?/, + }, + monthsShort: 'जाने._फेब्रु._मार्च_एप्री._मे_जून_जुल._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'आयतार_सोमार_मंगळार_बुधवार_बिरेस्तार_सुक्रार_शेनवार'.split('_'), + weekdaysShort: 'आयत._सोम._मंगळ._बुध._ब्रेस्त._सुक्र._शेन.'.split('_'), + weekdaysMin: 'आ_सो_मं_बु_ब्रे_सु_शे'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'A h:mm [वाजतां]', + LTS: 'A h:mm:ss [वाजतां]', + L: 'DD-MM-YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY A h:mm [वाजतां]', + LLLL: 'dddd, MMMM Do, YYYY, A h:mm [वाजतां]', + llll: 'ddd, D MMM YYYY, A h:mm [वाजतां]', + }, + calendar: { + sameDay: '[आयज] LT', + nextDay: '[फाल्यां] LT', + nextWeek: '[फुडलो] dddd[,] LT', + lastDay: '[काल] LT', + lastWeek: '[फाटलो] dddd[,] LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s', + past: '%s आदीं', + s: processRelativeTime$4, + ss: processRelativeTime$4, + m: processRelativeTime$4, + mm: processRelativeTime$4, + h: processRelativeTime$4, + hh: processRelativeTime$4, + d: processRelativeTime$4, + dd: processRelativeTime$4, + M: processRelativeTime$4, + MM: processRelativeTime$4, + y: processRelativeTime$4, + yy: processRelativeTime$4, + }, + dayOfMonthOrdinalParse: /\d{1,2}(वेर)/, + ordinal: function (number, period) { + switch (period) { + // the ordinal 'वेर' only applies to day of the month + case 'D': + return number + 'वेर'; + default: + case 'M': + case 'Q': + case 'DDD': + case 'd': + case 'w': + case 'W': + return number; + } + }, + week: { + dow: 0, // Sunday is the first day of the week + doy: 3, // The week that contains Jan 4th is the first week of the year (7 + 0 - 4) + }, + meridiemParse: /राती|सकाळीं|दनपारां|सांजे/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'राती') { + return hour < 4 ? hour : hour + 12; + } else if (meridiem === 'सकाळीं') { + return hour; + } else if (meridiem === 'दनपारां') { + return hour > 12 ? hour : hour + 12; + } else if (meridiem === 'सांजे') { + return hour + 12; + } + }, + meridiem: function (hour, minute, isLower) { + if (hour < 4) { + return 'राती'; + } else if (hour < 12) { + return 'सकाळीं'; + } else if (hour < 16) { + return 'दनपारां'; + } else if (hour < 20) { + return 'सांजे'; + } else { + return 'राती'; + } + }, + }); + + //! moment.js locale configuration + + function processRelativeTime$5(number, withoutSuffix, key, isFuture) { + var format = { + s: ['thoddea sekondamni', 'thodde sekond'], + ss: [number + ' sekondamni', number + ' sekond'], + m: ['eka mintan', 'ek minut'], + mm: [number + ' mintamni', number + ' mintam'], + h: ['eka voran', 'ek vor'], + hh: [number + ' voramni', number + ' voram'], + d: ['eka disan', 'ek dis'], + dd: [number + ' disamni', number + ' dis'], + M: ['eka mhoinean', 'ek mhoino'], + MM: [number + ' mhoineamni', number + ' mhoine'], + y: ['eka vorsan', 'ek voros'], + yy: [number + ' vorsamni', number + ' vorsam'], + }; + return isFuture ? format[key][0] : format[key][1]; + } + + moment.defineLocale('gom-latn', { + months: { + standalone: 'Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr'.split( + '_' + ), + format: 'Janerachea_Febrerachea_Marsachea_Abrilachea_Maiachea_Junachea_Julaiachea_Agostachea_Setembrachea_Otubrachea_Novembrachea_Dezembrachea'.split( + '_' + ), + isFormat: /MMMM(\s)+D[oD]?/, + }, + monthsShort: 'Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.'.split( + '_' + ), + monthsParseExact: true, + weekdays: "Aitar_Somar_Mongllar_Budhvar_Birestar_Sukrar_Son'var".split('_'), + weekdaysShort: 'Ait._Som._Mon._Bud._Bre._Suk._Son.'.split('_'), + weekdaysMin: 'Ai_Sm_Mo_Bu_Br_Su_Sn'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'A h:mm [vazta]', + LTS: 'A h:mm:ss [vazta]', + L: 'DD-MM-YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY A h:mm [vazta]', + LLLL: 'dddd, MMMM Do, YYYY, A h:mm [vazta]', + llll: 'ddd, D MMM YYYY, A h:mm [vazta]', + }, + calendar: { + sameDay: '[Aiz] LT', + nextDay: '[Faleam] LT', + nextWeek: '[Fuddlo] dddd[,] LT', + lastDay: '[Kal] LT', + lastWeek: '[Fattlo] dddd[,] LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s', + past: '%s adim', + s: processRelativeTime$5, + ss: processRelativeTime$5, + m: processRelativeTime$5, + mm: processRelativeTime$5, + h: processRelativeTime$5, + hh: processRelativeTime$5, + d: processRelativeTime$5, + dd: processRelativeTime$5, + M: processRelativeTime$5, + MM: processRelativeTime$5, + y: processRelativeTime$5, + yy: processRelativeTime$5, + }, + dayOfMonthOrdinalParse: /\d{1,2}(er)/, + ordinal: function (number, period) { + switch (period) { + // the ordinal 'er' only applies to day of the month + case 'D': + return number + 'er'; + default: + case 'M': + case 'Q': + case 'DDD': + case 'd': + case 'w': + case 'W': + return number; + } + }, + week: { + dow: 0, // Sunday is the first day of the week + doy: 3, // The week that contains Jan 4th is the first week of the year (7 + 0 - 4) + }, + meridiemParse: /rati|sokallim|donparam|sanje/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'rati') { + return hour < 4 ? hour : hour + 12; + } else if (meridiem === 'sokallim') { + return hour; + } else if (meridiem === 'donparam') { + return hour > 12 ? hour : hour + 12; + } else if (meridiem === 'sanje') { + return hour + 12; + } + }, + meridiem: function (hour, minute, isLower) { + if (hour < 4) { + return 'rati'; + } else if (hour < 12) { + return 'sokallim'; + } else if (hour < 16) { + return 'donparam'; + } else if (hour < 20) { + return 'sanje'; + } else { + return 'rati'; + } + }, + }); + + //! moment.js locale configuration + + var symbolMap$6 = { + '1': '૧', + '2': '૨', + '3': '૩', + '4': '૪', + '5': '૫', + '6': '૬', + '7': '૭', + '8': '૮', + '9': '૯', + '0': '૦', + }, + numberMap$5 = { + '૧': '1', + '૨': '2', + '૩': '3', + '૪': '4', + '૫': '5', + '૬': '6', + '૭': '7', + '૮': '8', + '૯': '9', + '૦': '0', + }; + + moment.defineLocale('gu', { + months: 'જાન્યુઆરી_ફેબ્રુઆરી_માર્ચ_એપ્રિલ_મે_જૂન_જુલાઈ_ઑગસ્ટ_સપ્ટેમ્બર_ઑક્ટ્બર_નવેમ્બર_ડિસેમ્બર'.split( + '_' + ), + monthsShort: 'જાન્યુ._ફેબ્રુ._માર્ચ_એપ્રિ._મે_જૂન_જુલા._ઑગ._સપ્ટે._ઑક્ટ્._નવે._ડિસે.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'રવિવાર_સોમવાર_મંગળવાર_બુધ્વાર_ગુરુવાર_શુક્રવાર_શનિવાર'.split( + '_' + ), + weekdaysShort: 'રવિ_સોમ_મંગળ_બુધ્_ગુરુ_શુક્ર_શનિ'.split('_'), + weekdaysMin: 'ર_સો_મં_બુ_ગુ_શુ_શ'.split('_'), + longDateFormat: { + LT: 'A h:mm વાગ્યે', + LTS: 'A h:mm:ss વાગ્યે', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY, A h:mm વાગ્યે', + LLLL: 'dddd, D MMMM YYYY, A h:mm વાગ્યે', + }, + calendar: { + sameDay: '[આજ] LT', + nextDay: '[કાલે] LT', + nextWeek: 'dddd, LT', + lastDay: '[ગઇકાલે] LT', + lastWeek: '[પાછલા] dddd, LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s મા', + past: '%s પહેલા', + s: 'અમુક પળો', + ss: '%d સેકંડ', + m: 'એક મિનિટ', + mm: '%d મિનિટ', + h: 'એક કલાક', + hh: '%d કલાક', + d: 'એક દિવસ', + dd: '%d દિવસ', + M: 'એક મહિનો', + MM: '%d મહિનો', + y: 'એક વર્ષ', + yy: '%d વર્ષ', + }, + preparse: function (string) { + return string.replace(/[૧૨૩૪૫૬૭૮૯૦]/g, function (match) { + return numberMap$5[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$6[match]; + }); + }, + // Gujarati notation for meridiems are quite fuzzy in practice. While there exists + // a rigid notion of a 'Pahar' it is not used as rigidly in modern Gujarati. + meridiemParse: /રાત|બપોર|સવાર|સાંજ/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'રાત') { + return hour < 4 ? hour : hour + 12; + } else if (meridiem === 'સવાર') { + return hour; + } else if (meridiem === 'બપોર') { + return hour >= 10 ? hour : hour + 12; + } else if (meridiem === 'સાંજ') { + return hour + 12; + } + }, + meridiem: function (hour, minute, isLower) { + if (hour < 4) { + return 'રાત'; + } else if (hour < 10) { + return 'સવાર'; + } else if (hour < 17) { + return 'બપોર'; + } else if (hour < 20) { + return 'સાંજ'; + } else { + return 'રાત'; + } + }, + week: { + dow: 0, // Sunday is the first day of the week. + doy: 6, // The week that contains Jan 6th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('he', { + months: 'ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר'.split( + '_' + ), + monthsShort: 'ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳'.split( + '_' + ), + weekdays: 'ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת'.split('_'), + weekdaysShort: 'א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳'.split('_'), + weekdaysMin: 'א_ב_ג_ד_ה_ו_ש'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D [ב]MMMM YYYY', + LLL: 'D [ב]MMMM YYYY HH:mm', + LLLL: 'dddd, D [ב]MMMM YYYY HH:mm', + l: 'D/M/YYYY', + ll: 'D MMM YYYY', + lll: 'D MMM YYYY HH:mm', + llll: 'ddd, D MMM YYYY HH:mm', + }, + calendar: { + sameDay: '[היום ב־]LT', + nextDay: '[מחר ב־]LT', + nextWeek: 'dddd [בשעה] LT', + lastDay: '[אתמול ב־]LT', + lastWeek: '[ביום] dddd [האחרון בשעה] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'בעוד %s', + past: 'לפני %s', + s: 'מספר שניות', + ss: '%d שניות', + m: 'דקה', + mm: '%d דקות', + h: 'שעה', + hh: function (number) { + if (number === 2) { + return 'שעתיים'; + } + return number + ' שעות'; + }, + d: 'יום', + dd: function (number) { + if (number === 2) { + return 'יומיים'; + } + return number + ' ימים'; + }, + M: 'חודש', + MM: function (number) { + if (number === 2) { + return 'חודשיים'; + } + return number + ' חודשים'; + }, + y: 'שנה', + yy: function (number) { + if (number === 2) { + return 'שנתיים'; + } else if (number % 10 === 0 && number !== 10) { + return number + ' שנה'; + } + return number + ' שנים'; + }, + }, + meridiemParse: /אחה"צ|לפנה"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i, + isPM: function (input) { + return /^(אחה"צ|אחרי הצהריים|בערב)$/.test(input); + }, + meridiem: function (hour, minute, isLower) { + if (hour < 5) { + return 'לפנות בוקר'; + } else if (hour < 10) { + return 'בבוקר'; + } else if (hour < 12) { + return isLower ? 'לפנה"צ' : 'לפני הצהריים'; + } else if (hour < 18) { + return isLower ? 'אחה"צ' : 'אחרי הצהריים'; + } else { + return 'בערב'; + } + }, + }); + + //! moment.js locale configuration + + var symbolMap$7 = { + '1': '१', + '2': '२', + '3': '३', + '4': '४', + '5': '५', + '6': '६', + '7': '७', + '8': '८', + '9': '९', + '0': '०', + }, + numberMap$6 = { + '१': '1', + '२': '2', + '३': '3', + '४': '4', + '५': '5', + '६': '6', + '७': '7', + '८': '8', + '९': '9', + '०': '0', + }; + + moment.defineLocale('hi', { + months: 'जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर'.split( + '_' + ), + monthsShort: 'जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'), + weekdaysShort: 'रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि'.split('_'), + weekdaysMin: 'र_सो_मं_बु_गु_शु_श'.split('_'), + longDateFormat: { + LT: 'A h:mm बजे', + LTS: 'A h:mm:ss बजे', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY, A h:mm बजे', + LLLL: 'dddd, D MMMM YYYY, A h:mm बजे', + }, + calendar: { + sameDay: '[आज] LT', + nextDay: '[कल] LT', + nextWeek: 'dddd, LT', + lastDay: '[कल] LT', + lastWeek: '[पिछले] dddd, LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s में', + past: '%s पहले', + s: 'कुछ ही क्षण', + ss: '%d सेकंड', + m: 'एक मिनट', + mm: '%d मिनट', + h: 'एक घंटा', + hh: '%d घंटे', + d: 'एक दिन', + dd: '%d दिन', + M: 'एक महीने', + MM: '%d महीने', + y: 'एक वर्ष', + yy: '%d वर्ष', + }, + preparse: function (string) { + return string.replace(/[१२३४५६७८९०]/g, function (match) { + return numberMap$6[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$7[match]; + }); + }, + // Hindi notation for meridiems are quite fuzzy in practice. While there exists + // a rigid notion of a 'Pahar' it is not used as rigidly in modern Hindi. + meridiemParse: /रात|सुबह|दोपहर|शाम/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'रात') { + return hour < 4 ? hour : hour + 12; + } else if (meridiem === 'सुबह') { + return hour; + } else if (meridiem === 'दोपहर') { + return hour >= 10 ? hour : hour + 12; + } else if (meridiem === 'शाम') { + return hour + 12; + } + }, + meridiem: function (hour, minute, isLower) { + if (hour < 4) { + return 'रात'; + } else if (hour < 10) { + return 'सुबह'; + } else if (hour < 17) { + return 'दोपहर'; + } else if (hour < 20) { + return 'शाम'; + } else { + return 'रात'; + } + }, + week: { + dow: 0, // Sunday is the first day of the week. + doy: 6, // The week that contains Jan 6th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + function translate$3(number, withoutSuffix, key) { + var result = number + ' '; + switch (key) { + case 'ss': + if (number === 1) { + result += 'sekunda'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'sekunde'; + } else { + result += 'sekundi'; + } + return result; + case 'm': + return withoutSuffix ? 'jedna minuta' : 'jedne minute'; + case 'mm': + if (number === 1) { + result += 'minuta'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'minute'; + } else { + result += 'minuta'; + } + return result; + case 'h': + return withoutSuffix ? 'jedan sat' : 'jednog sata'; + case 'hh': + if (number === 1) { + result += 'sat'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'sata'; + } else { + result += 'sati'; + } + return result; + case 'dd': + if (number === 1) { + result += 'dan'; + } else { + result += 'dana'; + } + return result; + case 'MM': + if (number === 1) { + result += 'mjesec'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'mjeseca'; + } else { + result += 'mjeseci'; + } + return result; + case 'yy': + if (number === 1) { + result += 'godina'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'godine'; + } else { + result += 'godina'; + } + return result; + } + } + + moment.defineLocale('hr', { + months: { + format: 'siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca'.split( + '_' + ), + standalone: 'siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac'.split( + '_' + ), + }, + monthsShort: 'sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split( + '_' + ), + weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'), + weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD.MM.YYYY', + LL: 'Do MMMM YYYY', + LLL: 'Do MMMM YYYY H:mm', + LLLL: 'dddd, Do MMMM YYYY H:mm', + }, + calendar: { + sameDay: '[danas u] LT', + nextDay: '[sutra u] LT', + nextWeek: function () { + switch (this.day()) { + case 0: + return '[u] [nedjelju] [u] LT'; + case 3: + return '[u] [srijedu] [u] LT'; + case 6: + return '[u] [subotu] [u] LT'; + case 1: + case 2: + case 4: + case 5: + return '[u] dddd [u] LT'; + } + }, + lastDay: '[jučer u] LT', + lastWeek: function () { + switch (this.day()) { + case 0: + return '[prošlu] [nedjelju] [u] LT'; + case 3: + return '[prošlu] [srijedu] [u] LT'; + case 6: + return '[prošle] [subote] [u] LT'; + case 1: + case 2: + case 4: + case 5: + return '[prošli] dddd [u] LT'; + } + }, + sameElse: 'L', + }, + relativeTime: { + future: 'za %s', + past: 'prije %s', + s: 'par sekundi', + ss: translate$3, + m: translate$3, + mm: translate$3, + h: translate$3, + hh: translate$3, + d: 'dan', + dd: translate$3, + M: 'mjesec', + MM: translate$3, + y: 'godinu', + yy: translate$3, + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var weekEndings = 'vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton'.split( + ' ' + ); + function translate$4(number, withoutSuffix, key, isFuture) { + var num = number; + switch (key) { + case 's': + return isFuture || withoutSuffix + ? 'néhány másodperc' + : 'néhány másodperce'; + case 'ss': + return num + (isFuture || withoutSuffix) + ? ' másodperc' + : ' másodperce'; + case 'm': + return 'egy' + (isFuture || withoutSuffix ? ' perc' : ' perce'); + case 'mm': + return num + (isFuture || withoutSuffix ? ' perc' : ' perce'); + case 'h': + return 'egy' + (isFuture || withoutSuffix ? ' óra' : ' órája'); + case 'hh': + return num + (isFuture || withoutSuffix ? ' óra' : ' órája'); + case 'd': + return 'egy' + (isFuture || withoutSuffix ? ' nap' : ' napja'); + case 'dd': + return num + (isFuture || withoutSuffix ? ' nap' : ' napja'); + case 'M': + return 'egy' + (isFuture || withoutSuffix ? ' hónap' : ' hónapja'); + case 'MM': + return num + (isFuture || withoutSuffix ? ' hónap' : ' hónapja'); + case 'y': + return 'egy' + (isFuture || withoutSuffix ? ' év' : ' éve'); + case 'yy': + return num + (isFuture || withoutSuffix ? ' év' : ' éve'); + } + return ''; + } + function week(isFuture) { + return ( + (isFuture ? '' : '[múlt] ') + + '[' + + weekEndings[this.day()] + + '] LT[-kor]' + ); + } + + moment.defineLocale('hu', { + months: 'január_február_március_április_május_június_július_augusztus_szeptember_október_november_december'.split( + '_' + ), + monthsShort: 'jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec'.split( + '_' + ), + weekdays: 'vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat'.split('_'), + weekdaysShort: 'vas_hét_kedd_sze_csüt_pén_szo'.split('_'), + weekdaysMin: 'v_h_k_sze_cs_p_szo'.split('_'), + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'YYYY.MM.DD.', + LL: 'YYYY. MMMM D.', + LLL: 'YYYY. MMMM D. H:mm', + LLLL: 'YYYY. MMMM D., dddd H:mm', + }, + meridiemParse: /de|du/i, + isPM: function (input) { + return input.charAt(1).toLowerCase() === 'u'; + }, + meridiem: function (hours, minutes, isLower) { + if (hours < 12) { + return isLower === true ? 'de' : 'DE'; + } else { + return isLower === true ? 'du' : 'DU'; + } + }, + calendar: { + sameDay: '[ma] LT[-kor]', + nextDay: '[holnap] LT[-kor]', + nextWeek: function () { + return week.call(this, true); + }, + lastDay: '[tegnap] LT[-kor]', + lastWeek: function () { + return week.call(this, false); + }, + sameElse: 'L', + }, + relativeTime: { + future: '%s múlva', + past: '%s', + s: translate$4, + ss: translate$4, + m: translate$4, + mm: translate$4, + h: translate$4, + hh: translate$4, + d: translate$4, + dd: translate$4, + M: translate$4, + MM: translate$4, + y: translate$4, + yy: translate$4, + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('hy-am', { + months: { + format: 'հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի'.split( + '_' + ), + standalone: 'հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր'.split( + '_' + ), + }, + monthsShort: 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_'), + weekdays: 'կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ'.split( + '_' + ), + weekdaysShort: 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'), + weekdaysMin: 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D MMMM YYYY թ.', + LLL: 'D MMMM YYYY թ., HH:mm', + LLLL: 'dddd, D MMMM YYYY թ., HH:mm', + }, + calendar: { + sameDay: '[այսօր] LT', + nextDay: '[վաղը] LT', + lastDay: '[երեկ] LT', + nextWeek: function () { + return 'dddd [օրը ժամը] LT'; + }, + lastWeek: function () { + return '[անցած] dddd [օրը ժամը] LT'; + }, + sameElse: 'L', + }, + relativeTime: { + future: '%s հետո', + past: '%s առաջ', + s: 'մի քանի վայրկյան', + ss: '%d վայրկյան', + m: 'րոպե', + mm: '%d րոպե', + h: 'ժամ', + hh: '%d ժամ', + d: 'օր', + dd: '%d օր', + M: 'ամիս', + MM: '%d ամիս', + y: 'տարի', + yy: '%d տարի', + }, + meridiemParse: /գիշերվա|առավոտվա|ցերեկվա|երեկոյան/, + isPM: function (input) { + return /^(ցերեկվա|երեկոյան)$/.test(input); + }, + meridiem: function (hour) { + if (hour < 4) { + return 'գիշերվա'; + } else if (hour < 12) { + return 'առավոտվա'; + } else if (hour < 17) { + return 'ցերեկվա'; + } else { + return 'երեկոյան'; + } + }, + dayOfMonthOrdinalParse: /\d{1,2}|\d{1,2}-(ին|րդ)/, + ordinal: function (number, period) { + switch (period) { + case 'DDD': + case 'w': + case 'W': + case 'DDDo': + if (number === 1) { + return number + '-ին'; + } + return number + '-րդ'; + default: + return number; + } + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('id', { + months: 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember'.split( + '_' + ), + monthsShort: 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des'.split('_'), + weekdays: 'Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu'.split('_'), + weekdaysShort: 'Min_Sen_Sel_Rab_Kam_Jum_Sab'.split('_'), + weekdaysMin: 'Mg_Sn_Sl_Rb_Km_Jm_Sb'.split('_'), + longDateFormat: { + LT: 'HH.mm', + LTS: 'HH.mm.ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY [pukul] HH.mm', + LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm', + }, + meridiemParse: /pagi|siang|sore|malam/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'pagi') { + return hour; + } else if (meridiem === 'siang') { + return hour >= 11 ? hour : hour + 12; + } else if (meridiem === 'sore' || meridiem === 'malam') { + return hour + 12; + } + }, + meridiem: function (hours, minutes, isLower) { + if (hours < 11) { + return 'pagi'; + } else if (hours < 15) { + return 'siang'; + } else if (hours < 19) { + return 'sore'; + } else { + return 'malam'; + } + }, + calendar: { + sameDay: '[Hari ini pukul] LT', + nextDay: '[Besok pukul] LT', + nextWeek: 'dddd [pukul] LT', + lastDay: '[Kemarin pukul] LT', + lastWeek: 'dddd [lalu pukul] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'dalam %s', + past: '%s yang lalu', + s: 'beberapa detik', + ss: '%d detik', + m: 'semenit', + mm: '%d menit', + h: 'sejam', + hh: '%d jam', + d: 'sehari', + dd: '%d hari', + M: 'sebulan', + MM: '%d bulan', + y: 'setahun', + yy: '%d tahun', + }, + week: { + dow: 0, // Sunday is the first day of the week. + doy: 6, // The week that contains Jan 6th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + function plural$2(n) { + if (n % 100 === 11) { + return true; + } else if (n % 10 === 1) { + return false; + } + return true; + } + function translate$5(number, withoutSuffix, key, isFuture) { + var result = number + ' '; + switch (key) { + case 's': + return withoutSuffix || isFuture + ? 'nokkrar sekúndur' + : 'nokkrum sekúndum'; + case 'ss': + if (plural$2(number)) { + return ( + result + + (withoutSuffix || isFuture ? 'sekúndur' : 'sekúndum') + ); + } + return result + 'sekúnda'; + case 'm': + return withoutSuffix ? 'mínúta' : 'mínútu'; + case 'mm': + if (plural$2(number)) { + return ( + result + (withoutSuffix || isFuture ? 'mínútur' : 'mínútum') + ); + } else if (withoutSuffix) { + return result + 'mínúta'; + } + return result + 'mínútu'; + case 'hh': + if (plural$2(number)) { + return ( + result + + (withoutSuffix || isFuture + ? 'klukkustundir' + : 'klukkustundum') + ); + } + return result + 'klukkustund'; + case 'd': + if (withoutSuffix) { + return 'dagur'; + } + return isFuture ? 'dag' : 'degi'; + case 'dd': + if (plural$2(number)) { + if (withoutSuffix) { + return result + 'dagar'; + } + return result + (isFuture ? 'daga' : 'dögum'); + } else if (withoutSuffix) { + return result + 'dagur'; + } + return result + (isFuture ? 'dag' : 'degi'); + case 'M': + if (withoutSuffix) { + return 'mánuður'; + } + return isFuture ? 'mánuð' : 'mánuði'; + case 'MM': + if (plural$2(number)) { + if (withoutSuffix) { + return result + 'mánuðir'; + } + return result + (isFuture ? 'mánuði' : 'mánuðum'); + } else if (withoutSuffix) { + return result + 'mánuður'; + } + return result + (isFuture ? 'mánuð' : 'mánuði'); + case 'y': + return withoutSuffix || isFuture ? 'ár' : 'ári'; + case 'yy': + if (plural$2(number)) { + return result + (withoutSuffix || isFuture ? 'ár' : 'árum'); + } + return result + (withoutSuffix || isFuture ? 'ár' : 'ári'); + } + } + + moment.defineLocale('is', { + months: 'janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember'.split( + '_' + ), + monthsShort: 'jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des'.split('_'), + weekdays: 'sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur'.split( + '_' + ), + weekdaysShort: 'sun_mán_þri_mið_fim_fös_lau'.split('_'), + weekdaysMin: 'Su_Má_Þr_Mi_Fi_Fö_La'.split('_'), + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY [kl.] H:mm', + LLLL: 'dddd, D. MMMM YYYY [kl.] H:mm', + }, + calendar: { + sameDay: '[í dag kl.] LT', + nextDay: '[á morgun kl.] LT', + nextWeek: 'dddd [kl.] LT', + lastDay: '[í gær kl.] LT', + lastWeek: '[síðasta] dddd [kl.] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'eftir %s', + past: 'fyrir %s síðan', + s: translate$5, + ss: translate$5, + m: translate$5, + mm: translate$5, + h: 'klukkustund', + hh: translate$5, + d: translate$5, + dd: translate$5, + M: translate$5, + MM: translate$5, + y: translate$5, + yy: translate$5, + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('it-ch', { + months: 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split( + '_' + ), + monthsShort: 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'), + weekdays: 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split( + '_' + ), + weekdaysShort: 'dom_lun_mar_mer_gio_ven_sab'.split('_'), + weekdaysMin: 'do_lu_ma_me_gi_ve_sa'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Oggi alle] LT', + nextDay: '[Domani alle] LT', + nextWeek: 'dddd [alle] LT', + lastDay: '[Ieri alle] LT', + lastWeek: function () { + switch (this.day()) { + case 0: + return '[la scorsa] dddd [alle] LT'; + default: + return '[lo scorso] dddd [alle] LT'; + } + }, + sameElse: 'L', + }, + relativeTime: { + future: function (s) { + return (/^[0-9].+$/.test(s) ? 'tra' : 'in') + ' ' + s; + }, + past: '%s fa', + s: 'alcuni secondi', + ss: '%d secondi', + m: 'un minuto', + mm: '%d minuti', + h: "un'ora", + hh: '%d ore', + d: 'un giorno', + dd: '%d giorni', + M: 'un mese', + MM: '%d mesi', + y: 'un anno', + yy: '%d anni', + }, + dayOfMonthOrdinalParse: /\d{1,2}º/, + ordinal: '%dº', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('it', { + months: 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split( + '_' + ), + monthsShort: 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'), + weekdays: 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split( + '_' + ), + weekdaysShort: 'dom_lun_mar_mer_gio_ven_sab'.split('_'), + weekdaysMin: 'do_lu_ma_me_gi_ve_sa'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: function () { + return ( + '[Oggi a' + + (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : "ll'") + + ']LT' + ); + }, + nextDay: function () { + return ( + '[Domani a' + + (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : "ll'") + + ']LT' + ); + }, + nextWeek: function () { + return ( + 'dddd [a' + + (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : "ll'") + + ']LT' + ); + }, + lastDay: function () { + return ( + '[Ieri a' + + (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : "ll'") + + ']LT' + ); + }, + lastWeek: function () { + switch (this.day()) { + case 0: + return ( + '[La scorsa] dddd [a' + + (this.hours() > 1 + ? 'lle ' + : this.hours() === 0 + ? ' ' + : "ll'") + + ']LT' + ); + default: + return ( + '[Lo scorso] dddd [a' + + (this.hours() > 1 + ? 'lle ' + : this.hours() === 0 + ? ' ' + : "ll'") + + ']LT' + ); + } + }, + sameElse: 'L', + }, + relativeTime: { + future: 'tra %s', + past: '%s fa', + s: 'alcuni secondi', + ss: '%d secondi', + m: 'un minuto', + mm: '%d minuti', + h: "un'ora", + hh: '%d ore', + d: 'un giorno', + dd: '%d giorni', + M: 'un mese', + MM: '%d mesi', + y: 'un anno', + yy: '%d anni', + }, + dayOfMonthOrdinalParse: /\d{1,2}º/, + ordinal: '%dº', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('ja', { + eras: [ + { + since: '2019-05-01', + offset: 1, + name: '令和', + narrow: '㋿', + abbr: 'R', + }, + { + since: '1989-01-08', + until: '2019-04-30', + offset: 1, + name: '平成', + narrow: '㍻', + abbr: 'H', + }, + { + since: '1926-12-25', + until: '1989-01-07', + offset: 1, + name: '昭和', + narrow: '㍼', + abbr: 'S', + }, + { + since: '1912-07-30', + until: '1926-12-24', + offset: 1, + name: '大正', + narrow: '㍽', + abbr: 'T', + }, + { + since: '1873-01-01', + until: '1912-07-29', + offset: 6, + name: '明治', + narrow: '㍾', + abbr: 'M', + }, + { + since: '0001-01-01', + until: '1873-12-31', + offset: 1, + name: '西暦', + narrow: 'AD', + abbr: 'AD', + }, + { + since: '0000-12-31', + until: -Infinity, + offset: 1, + name: '紀元前', + narrow: 'BC', + abbr: 'BC', + }, + ], + eraYearOrdinalRegex: /(元|\d+)年/, + eraYearOrdinalParse: function (input, match) { + return match[1] === '元' ? 1 : parseInt(match[1] || input, 10); + }, + months: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'), + monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split( + '_' + ), + weekdays: '日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日'.split('_'), + weekdaysShort: '日_月_火_水_木_金_土'.split('_'), + weekdaysMin: '日_月_火_水_木_金_土'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'YYYY/MM/DD', + LL: 'YYYY年M月D日', + LLL: 'YYYY年M月D日 HH:mm', + LLLL: 'YYYY年M月D日 dddd HH:mm', + l: 'YYYY/MM/DD', + ll: 'YYYY年M月D日', + lll: 'YYYY年M月D日 HH:mm', + llll: 'YYYY年M月D日(ddd) HH:mm', + }, + meridiemParse: /午前|午後/i, + isPM: function (input) { + return input === '午後'; + }, + meridiem: function (hour, minute, isLower) { + if (hour < 12) { + return '午前'; + } else { + return '午後'; + } + }, + calendar: { + sameDay: '[今日] LT', + nextDay: '[明日] LT', + nextWeek: function (now) { + if (now.week() !== this.week()) { + return '[来週]dddd LT'; + } else { + return 'dddd LT'; + } + }, + lastDay: '[昨日] LT', + lastWeek: function (now) { + if (this.week() !== now.week()) { + return '[先週]dddd LT'; + } else { + return 'dddd LT'; + } + }, + sameElse: 'L', + }, + dayOfMonthOrdinalParse: /\d{1,2}日/, + ordinal: function (number, period) { + switch (period) { + case 'y': + return number === 1 ? '元年' : number + '年'; + case 'd': + case 'D': + case 'DDD': + return number + '日'; + default: + return number; + } + }, + relativeTime: { + future: '%s後', + past: '%s前', + s: '数秒', + ss: '%d秒', + m: '1分', + mm: '%d分', + h: '1時間', + hh: '%d時間', + d: '1日', + dd: '%d日', + M: '1ヶ月', + MM: '%dヶ月', + y: '1年', + yy: '%d年', + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('jv', { + months: 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember'.split( + '_' + ), + monthsShort: 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des'.split('_'), + weekdays: 'Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu'.split('_'), + weekdaysShort: 'Min_Sen_Sel_Reb_Kem_Jem_Sep'.split('_'), + weekdaysMin: 'Mg_Sn_Sl_Rb_Km_Jm_Sp'.split('_'), + longDateFormat: { + LT: 'HH.mm', + LTS: 'HH.mm.ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY [pukul] HH.mm', + LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm', + }, + meridiemParse: /enjing|siyang|sonten|ndalu/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'enjing') { + return hour; + } else if (meridiem === 'siyang') { + return hour >= 11 ? hour : hour + 12; + } else if (meridiem === 'sonten' || meridiem === 'ndalu') { + return hour + 12; + } + }, + meridiem: function (hours, minutes, isLower) { + if (hours < 11) { + return 'enjing'; + } else if (hours < 15) { + return 'siyang'; + } else if (hours < 19) { + return 'sonten'; + } else { + return 'ndalu'; + } + }, + calendar: { + sameDay: '[Dinten puniko pukul] LT', + nextDay: '[Mbenjang pukul] LT', + nextWeek: 'dddd [pukul] LT', + lastDay: '[Kala wingi pukul] LT', + lastWeek: 'dddd [kepengker pukul] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'wonten ing %s', + past: '%s ingkang kepengker', + s: 'sawetawis detik', + ss: '%d detik', + m: 'setunggal menit', + mm: '%d menit', + h: 'setunggal jam', + hh: '%d jam', + d: 'sedinten', + dd: '%d dinten', + M: 'sewulan', + MM: '%d wulan', + y: 'setaun', + yy: '%d taun', + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('ka', { + months: 'იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი'.split( + '_' + ), + monthsShort: 'იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ'.split('_'), + weekdays: { + standalone: 'კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი'.split( + '_' + ), + format: 'კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს'.split( + '_' + ), + isFormat: /(წინა|შემდეგ)/, + }, + weekdaysShort: 'კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ'.split('_'), + weekdaysMin: 'კვ_ორ_სა_ოთ_ხუ_პა_შა'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[დღეს] LT[-ზე]', + nextDay: '[ხვალ] LT[-ზე]', + lastDay: '[გუშინ] LT[-ზე]', + nextWeek: '[შემდეგ] dddd LT[-ზე]', + lastWeek: '[წინა] dddd LT-ზე', + sameElse: 'L', + }, + relativeTime: { + future: function (s) { + return s.replace(/(წამ|წუთ|საათ|წელ|დღ|თვ)(ი|ე)/, function ( + $0, + $1, + $2 + ) { + return $2 === 'ი' ? $1 + 'ში' : $1 + $2 + 'ში'; + }); + }, + past: function (s) { + if (/(წამი|წუთი|საათი|დღე|თვე)/.test(s)) { + return s.replace(/(ი|ე)$/, 'ის წინ'); + } + if (/წელი/.test(s)) { + return s.replace(/წელი$/, 'წლის წინ'); + } + return s; + }, + s: 'რამდენიმე წამი', + ss: '%d წამი', + m: 'წუთი', + mm: '%d წუთი', + h: 'საათი', + hh: '%d საათი', + d: 'დღე', + dd: '%d დღე', + M: 'თვე', + MM: '%d თვე', + y: 'წელი', + yy: '%d წელი', + }, + dayOfMonthOrdinalParse: /0|1-ლი|მე-\d{1,2}|\d{1,2}-ე/, + ordinal: function (number) { + if (number === 0) { + return number; + } + if (number === 1) { + return number + '-ლი'; + } + if ( + number < 20 || + (number <= 100 && number % 20 === 0) || + number % 100 === 0 + ) { + return 'მე-' + number; + } + return number + '-ე'; + }, + week: { + dow: 1, + doy: 7, + }, + }); + + //! moment.js locale configuration + + var suffixes$1 = { + 0: '-ші', + 1: '-ші', + 2: '-ші', + 3: '-ші', + 4: '-ші', + 5: '-ші', + 6: '-шы', + 7: '-ші', + 8: '-ші', + 9: '-шы', + 10: '-шы', + 20: '-шы', + 30: '-шы', + 40: '-шы', + 50: '-ші', + 60: '-шы', + 70: '-ші', + 80: '-ші', + 90: '-шы', + 100: '-ші', + }; + + moment.defineLocale('kk', { + months: 'қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан'.split( + '_' + ), + monthsShort: 'қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел'.split('_'), + weekdays: 'жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі'.split( + '_' + ), + weekdaysShort: 'жек_дүй_сей_сәр_бей_жұм_сен'.split('_'), + weekdaysMin: 'жк_дй_сй_ср_бй_жм_сн'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Бүгін сағат] LT', + nextDay: '[Ертең сағат] LT', + nextWeek: 'dddd [сағат] LT', + lastDay: '[Кеше сағат] LT', + lastWeek: '[Өткен аптаның] dddd [сағат] LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s ішінде', + past: '%s бұрын', + s: 'бірнеше секунд', + ss: '%d секунд', + m: 'бір минут', + mm: '%d минут', + h: 'бір сағат', + hh: '%d сағат', + d: 'бір күн', + dd: '%d күн', + M: 'бір ай', + MM: '%d ай', + y: 'бір жыл', + yy: '%d жыл', + }, + dayOfMonthOrdinalParse: /\d{1,2}-(ші|шы)/, + ordinal: function (number) { + var a = number % 10, + b = number >= 100 ? 100 : null; + return number + (suffixes$1[number] || suffixes$1[a] || suffixes$1[b]); + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var symbolMap$8 = { + '1': '១', + '2': '២', + '3': '៣', + '4': '៤', + '5': '៥', + '6': '៦', + '7': '៧', + '8': '៨', + '9': '៩', + '0': '០', + }, + numberMap$7 = { + '១': '1', + '២': '2', + '៣': '3', + '៤': '4', + '៥': '5', + '៦': '6', + '៧': '7', + '៨': '8', + '៩': '9', + '០': '0', + }; + + moment.defineLocale('km', { + months: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split( + '_' + ), + monthsShort: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split( + '_' + ), + weekdays: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'), + weekdaysShort: 'អា_ច_អ_ព_ព្រ_សុ_ស'.split('_'), + weekdaysMin: 'អា_ច_អ_ព_ព្រ_សុ_ស'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + meridiemParse: /ព្រឹក|ល្ងាច/, + isPM: function (input) { + return input === 'ល្ងាច'; + }, + meridiem: function (hour, minute, isLower) { + if (hour < 12) { + return 'ព្រឹក'; + } else { + return 'ល្ងាច'; + } + }, + calendar: { + sameDay: '[ថ្ងៃនេះ ម៉ោង] LT', + nextDay: '[ស្អែក ម៉ោង] LT', + nextWeek: 'dddd [ម៉ោង] LT', + lastDay: '[ម្សិលមិញ ម៉ោង] LT', + lastWeek: 'dddd [សប្តាហ៍មុន] [ម៉ោង] LT', + sameElse: 'L', + }, + relativeTime: { + future: '%sទៀត', + past: '%sមុន', + s: 'ប៉ុន្មានវិនាទី', + ss: '%d វិនាទី', + m: 'មួយនាទី', + mm: '%d នាទី', + h: 'មួយម៉ោង', + hh: '%d ម៉ោង', + d: 'មួយថ្ងៃ', + dd: '%d ថ្ងៃ', + M: 'មួយខែ', + MM: '%d ខែ', + y: 'មួយឆ្នាំ', + yy: '%d ឆ្នាំ', + }, + dayOfMonthOrdinalParse: /ទី\d{1,2}/, + ordinal: 'ទី%d', + preparse: function (string) { + return string.replace(/[១២៣៤៥៦៧៨៩០]/g, function (match) { + return numberMap$7[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$8[match]; + }); + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var symbolMap$9 = { + '1': '೧', + '2': '೨', + '3': '೩', + '4': '೪', + '5': '೫', + '6': '೬', + '7': '೭', + '8': '೮', + '9': '೯', + '0': '೦', + }, + numberMap$8 = { + '೧': '1', + '೨': '2', + '೩': '3', + '೪': '4', + '೫': '5', + '೬': '6', + '೭': '7', + '೮': '8', + '೯': '9', + '೦': '0', + }; + + moment.defineLocale('kn', { + months: 'ಜನವರಿ_ಫೆಬ್ರವರಿ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬರ್_ಅಕ್ಟೋಬರ್_ನವೆಂಬರ್_ಡಿಸೆಂಬರ್'.split( + '_' + ), + monthsShort: 'ಜನ_ಫೆಬ್ರ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂ_ಅಕ್ಟೋ_ನವೆಂ_ಡಿಸೆಂ'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'ಭಾನುವಾರ_ಸೋಮವಾರ_ಮಂಗಳವಾರ_ಬುಧವಾರ_ಗುರುವಾರ_ಶುಕ್ರವಾರ_ಶನಿವಾರ'.split( + '_' + ), + weekdaysShort: 'ಭಾನು_ಸೋಮ_ಮಂಗಳ_ಬುಧ_ಗುರು_ಶುಕ್ರ_ಶನಿ'.split('_'), + weekdaysMin: 'ಭಾ_ಸೋ_ಮಂ_ಬು_ಗು_ಶು_ಶ'.split('_'), + longDateFormat: { + LT: 'A h:mm', + LTS: 'A h:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY, A h:mm', + LLLL: 'dddd, D MMMM YYYY, A h:mm', + }, + calendar: { + sameDay: '[ಇಂದು] LT', + nextDay: '[ನಾಳೆ] LT', + nextWeek: 'dddd, LT', + lastDay: '[ನಿನ್ನೆ] LT', + lastWeek: '[ಕೊನೆಯ] dddd, LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s ನಂತರ', + past: '%s ಹಿಂದೆ', + s: 'ಕೆಲವು ಕ್ಷಣಗಳು', + ss: '%d ಸೆಕೆಂಡುಗಳು', + m: 'ಒಂದು ನಿಮಿಷ', + mm: '%d ನಿಮಿಷ', + h: 'ಒಂದು ಗಂಟೆ', + hh: '%d ಗಂಟೆ', + d: 'ಒಂದು ದಿನ', + dd: '%d ದಿನ', + M: 'ಒಂದು ತಿಂಗಳು', + MM: '%d ತಿಂಗಳು', + y: 'ಒಂದು ವರ್ಷ', + yy: '%d ವರ್ಷ', + }, + preparse: function (string) { + return string.replace(/[೧೨೩೪೫೬೭೮೯೦]/g, function (match) { + return numberMap$8[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$9[match]; + }); + }, + meridiemParse: /ರಾತ್ರಿ|ಬೆಳಿಗ್ಗೆ|ಮಧ್ಯಾಹ್ನ|ಸಂಜೆ/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'ರಾತ್ರಿ') { + return hour < 4 ? hour : hour + 12; + } else if (meridiem === 'ಬೆಳಿಗ್ಗೆ') { + return hour; + } else if (meridiem === 'ಮಧ್ಯಾಹ್ನ') { + return hour >= 10 ? hour : hour + 12; + } else if (meridiem === 'ಸಂಜೆ') { + return hour + 12; + } + }, + meridiem: function (hour, minute, isLower) { + if (hour < 4) { + return 'ರಾತ್ರಿ'; + } else if (hour < 10) { + return 'ಬೆಳಿಗ್ಗೆ'; + } else if (hour < 17) { + return 'ಮಧ್ಯಾಹ್ನ'; + } else if (hour < 20) { + return 'ಸಂಜೆ'; + } else { + return 'ರಾತ್ರಿ'; + } + }, + dayOfMonthOrdinalParse: /\d{1,2}(ನೇ)/, + ordinal: function (number) { + return number + 'ನೇ'; + }, + week: { + dow: 0, // Sunday is the first day of the week. + doy: 6, // The week that contains Jan 6th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('ko', { + months: '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'), + monthsShort: '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split( + '_' + ), + weekdays: '일요일_월요일_화요일_수요일_목요일_금요일_토요일'.split('_'), + weekdaysShort: '일_월_화_수_목_금_토'.split('_'), + weekdaysMin: '일_월_화_수_목_금_토'.split('_'), + longDateFormat: { + LT: 'A h:mm', + LTS: 'A h:mm:ss', + L: 'YYYY.MM.DD.', + LL: 'YYYY년 MMMM D일', + LLL: 'YYYY년 MMMM D일 A h:mm', + LLLL: 'YYYY년 MMMM D일 dddd A h:mm', + l: 'YYYY.MM.DD.', + ll: 'YYYY년 MMMM D일', + lll: 'YYYY년 MMMM D일 A h:mm', + llll: 'YYYY년 MMMM D일 dddd A h:mm', + }, + calendar: { + sameDay: '오늘 LT', + nextDay: '내일 LT', + nextWeek: 'dddd LT', + lastDay: '어제 LT', + lastWeek: '지난주 dddd LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s 후', + past: '%s 전', + s: '몇 초', + ss: '%d초', + m: '1분', + mm: '%d분', + h: '한 시간', + hh: '%d시간', + d: '하루', + dd: '%d일', + M: '한 달', + MM: '%d달', + y: '일 년', + yy: '%d년', + }, + dayOfMonthOrdinalParse: /\d{1,2}(일|월|주)/, + ordinal: function (number, period) { + switch (period) { + case 'd': + case 'D': + case 'DDD': + return number + '일'; + case 'M': + return number + '월'; + case 'w': + case 'W': + return number + '주'; + default: + return number; + } + }, + meridiemParse: /오전|오후/, + isPM: function (token) { + return token === '오후'; + }, + meridiem: function (hour, minute, isUpper) { + return hour < 12 ? '오전' : '오후'; + }, + }); + + //! moment.js locale configuration + + var symbolMap$a = { + '1': '١', + '2': '٢', + '3': '٣', + '4': '٤', + '5': '٥', + '6': '٦', + '7': '٧', + '8': '٨', + '9': '٩', + '0': '٠', + }, + numberMap$9 = { + '١': '1', + '٢': '2', + '٣': '3', + '٤': '4', + '٥': '5', + '٦': '6', + '٧': '7', + '٨': '8', + '٩': '9', + '٠': '0', + }, + months$7 = [ + 'کانونی دووەم', + 'شوبات', + 'ئازار', + 'نیسان', + 'ئایار', + 'حوزەیران', + 'تەمموز', + 'ئاب', + 'ئەیلوول', + 'تشرینی یەكەم', + 'تشرینی دووەم', + 'كانونی یەکەم', + ]; + + moment.defineLocale('ku', { + months: months$7, + monthsShort: months$7, + weekdays: 'یه‌كشه‌ممه‌_دووشه‌ممه‌_سێشه‌ممه‌_چوارشه‌ممه‌_پێنجشه‌ممه‌_هه‌ینی_شه‌ممه‌'.split( + '_' + ), + weekdaysShort: 'یه‌كشه‌م_دووشه‌م_سێشه‌م_چوارشه‌م_پێنجشه‌م_هه‌ینی_شه‌ممه‌'.split( + '_' + ), + weekdaysMin: 'ی_د_س_چ_پ_ه_ش'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + meridiemParse: /ئێواره‌|به‌یانی/, + isPM: function (input) { + return /ئێواره‌/.test(input); + }, + meridiem: function (hour, minute, isLower) { + if (hour < 12) { + return 'به‌یانی'; + } else { + return 'ئێواره‌'; + } + }, + calendar: { + sameDay: '[ئه‌مرۆ كاتژمێر] LT', + nextDay: '[به‌یانی كاتژمێر] LT', + nextWeek: 'dddd [كاتژمێر] LT', + lastDay: '[دوێنێ كاتژمێر] LT', + lastWeek: 'dddd [كاتژمێر] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'له‌ %s', + past: '%s', + s: 'چه‌ند چركه‌یه‌ك', + ss: 'چركه‌ %d', + m: 'یه‌ك خوله‌ك', + mm: '%d خوله‌ك', + h: 'یه‌ك كاتژمێر', + hh: '%d كاتژمێر', + d: 'یه‌ك ڕۆژ', + dd: '%d ڕۆژ', + M: 'یه‌ك مانگ', + MM: '%d مانگ', + y: 'یه‌ك ساڵ', + yy: '%d ساڵ', + }, + preparse: function (string) { + return string + .replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) { + return numberMap$9[match]; + }) + .replace(/،/g, ','); + }, + postformat: function (string) { + return string + .replace(/\d/g, function (match) { + return symbolMap$a[match]; + }) + .replace(/,/g, '،'); + }, + week: { + dow: 6, // Saturday is the first day of the week. + doy: 12, // The week that contains Jan 12th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var suffixes$2 = { + 0: '-чү', + 1: '-чи', + 2: '-чи', + 3: '-чү', + 4: '-чү', + 5: '-чи', + 6: '-чы', + 7: '-чи', + 8: '-чи', + 9: '-чу', + 10: '-чу', + 20: '-чы', + 30: '-чу', + 40: '-чы', + 50: '-чү', + 60: '-чы', + 70: '-чи', + 80: '-чи', + 90: '-чу', + 100: '-чү', + }; + + moment.defineLocale('ky', { + months: 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split( + '_' + ), + monthsShort: 'янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек'.split( + '_' + ), + weekdays: 'Жекшемби_Дүйшөмбү_Шейшемби_Шаршемби_Бейшемби_Жума_Ишемби'.split( + '_' + ), + weekdaysShort: 'Жек_Дүй_Шей_Шар_Бей_Жум_Ише'.split('_'), + weekdaysMin: 'Жк_Дй_Шй_Шр_Бй_Жм_Иш'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Бүгүн саат] LT', + nextDay: '[Эртең саат] LT', + nextWeek: 'dddd [саат] LT', + lastDay: '[Кечээ саат] LT', + lastWeek: '[Өткөн аптанын] dddd [күнү] [саат] LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s ичинде', + past: '%s мурун', + s: 'бирнече секунд', + ss: '%d секунд', + m: 'бир мүнөт', + mm: '%d мүнөт', + h: 'бир саат', + hh: '%d саат', + d: 'бир күн', + dd: '%d күн', + M: 'бир ай', + MM: '%d ай', + y: 'бир жыл', + yy: '%d жыл', + }, + dayOfMonthOrdinalParse: /\d{1,2}-(чи|чы|чү|чу)/, + ordinal: function (number) { + var a = number % 10, + b = number >= 100 ? 100 : null; + return number + (suffixes$2[number] || suffixes$2[a] || suffixes$2[b]); + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + function processRelativeTime$6(number, withoutSuffix, key, isFuture) { + var format = { + m: ['eng Minutt', 'enger Minutt'], + h: ['eng Stonn', 'enger Stonn'], + d: ['een Dag', 'engem Dag'], + M: ['ee Mount', 'engem Mount'], + y: ['ee Joer', 'engem Joer'], + }; + return withoutSuffix ? format[key][0] : format[key][1]; + } + function processFutureTime(string) { + var number = string.substr(0, string.indexOf(' ')); + if (eifelerRegelAppliesToNumber(number)) { + return 'a ' + string; + } + return 'an ' + string; + } + function processPastTime(string) { + var number = string.substr(0, string.indexOf(' ')); + if (eifelerRegelAppliesToNumber(number)) { + return 'viru ' + string; + } + return 'virun ' + string; + } + /** + * Returns true if the word before the given number loses the '-n' ending. + * e.g. 'an 10 Deeg' but 'a 5 Deeg' + * + * @param number {integer} + * @returns {boolean} + */ + function eifelerRegelAppliesToNumber(number) { + number = parseInt(number, 10); + if (isNaN(number)) { + return false; + } + if (number < 0) { + // Negative Number --> always true + return true; + } else if (number < 10) { + // Only 1 digit + if (4 <= number && number <= 7) { + return true; + } + return false; + } else if (number < 100) { + // 2 digits + var lastDigit = number % 10, + firstDigit = number / 10; + if (lastDigit === 0) { + return eifelerRegelAppliesToNumber(firstDigit); + } + return eifelerRegelAppliesToNumber(lastDigit); + } else if (number < 10000) { + // 3 or 4 digits --> recursively check first digit + while (number >= 10) { + number = number / 10; + } + return eifelerRegelAppliesToNumber(number); + } else { + // Anything larger than 4 digits: recursively check first n-3 digits + number = number / 1000; + return eifelerRegelAppliesToNumber(number); + } + } + + moment.defineLocale('lb', { + months: 'Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember'.split( + '_' + ), + monthsShort: 'Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg'.split( + '_' + ), + weekdaysShort: 'So._Mé._Dë._Më._Do._Fr._Sa.'.split('_'), + weekdaysMin: 'So_Mé_Dë_Më_Do_Fr_Sa'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'H:mm [Auer]', + LTS: 'H:mm:ss [Auer]', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY H:mm [Auer]', + LLLL: 'dddd, D. MMMM YYYY H:mm [Auer]', + }, + calendar: { + sameDay: '[Haut um] LT', + sameElse: 'L', + nextDay: '[Muer um] LT', + nextWeek: 'dddd [um] LT', + lastDay: '[Gëschter um] LT', + lastWeek: function () { + // Different date string for 'Dënschdeg' (Tuesday) and 'Donneschdeg' (Thursday) due to phonological rule + switch (this.day()) { + case 2: + case 4: + return '[Leschten] dddd [um] LT'; + default: + return '[Leschte] dddd [um] LT'; + } + }, + }, + relativeTime: { + future: processFutureTime, + past: processPastTime, + s: 'e puer Sekonnen', + ss: '%d Sekonnen', + m: processRelativeTime$6, + mm: '%d Minutten', + h: processRelativeTime$6, + hh: '%d Stonnen', + d: processRelativeTime$6, + dd: '%d Deeg', + M: processRelativeTime$6, + MM: '%d Méint', + y: processRelativeTime$6, + yy: '%d Joer', + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('lo', { + months: 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split( + '_' + ), + monthsShort: 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split( + '_' + ), + weekdays: 'ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'), + weekdaysShort: 'ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'), + weekdaysMin: 'ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'ວັນdddd D MMMM YYYY HH:mm', + }, + meridiemParse: /ຕອນເຊົ້າ|ຕອນແລງ/, + isPM: function (input) { + return input === 'ຕອນແລງ'; + }, + meridiem: function (hour, minute, isLower) { + if (hour < 12) { + return 'ຕອນເຊົ້າ'; + } else { + return 'ຕອນແລງ'; + } + }, + calendar: { + sameDay: '[ມື້ນີ້ເວລາ] LT', + nextDay: '[ມື້ອື່ນເວລາ] LT', + nextWeek: '[ວັນ]dddd[ໜ້າເວລາ] LT', + lastDay: '[ມື້ວານນີ້ເວລາ] LT', + lastWeek: '[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'ອີກ %s', + past: '%sຜ່ານມາ', + s: 'ບໍ່ເທົ່າໃດວິນາທີ', + ss: '%d ວິນາທີ', + m: '1 ນາທີ', + mm: '%d ນາທີ', + h: '1 ຊົ່ວໂມງ', + hh: '%d ຊົ່ວໂມງ', + d: '1 ມື້', + dd: '%d ມື້', + M: '1 ເດືອນ', + MM: '%d ເດືອນ', + y: '1 ປີ', + yy: '%d ປີ', + }, + dayOfMonthOrdinalParse: /(ທີ່)\d{1,2}/, + ordinal: function (number) { + return 'ທີ່' + number; + }, + }); + + //! moment.js locale configuration + + var units = { + ss: 'sekundė_sekundžių_sekundes', + m: 'minutė_minutės_minutę', + mm: 'minutės_minučių_minutes', + h: 'valanda_valandos_valandą', + hh: 'valandos_valandų_valandas', + d: 'diena_dienos_dieną', + dd: 'dienos_dienų_dienas', + M: 'mėnuo_mėnesio_mėnesį', + MM: 'mėnesiai_mėnesių_mėnesius', + y: 'metai_metų_metus', + yy: 'metai_metų_metus', + }; + function translateSeconds(number, withoutSuffix, key, isFuture) { + if (withoutSuffix) { + return 'kelios sekundės'; + } else { + return isFuture ? 'kelių sekundžių' : 'kelias sekundes'; + } + } + function translateSingular(number, withoutSuffix, key, isFuture) { + return withoutSuffix + ? forms(key)[0] + : isFuture + ? forms(key)[1] + : forms(key)[2]; + } + function special(number) { + return number % 10 === 0 || (number > 10 && number < 20); + } + function forms(key) { + return units[key].split('_'); + } + function translate$6(number, withoutSuffix, key, isFuture) { + var result = number + ' '; + if (number === 1) { + return ( + result + translateSingular(number, withoutSuffix, key[0], isFuture) + ); + } else if (withoutSuffix) { + return result + (special(number) ? forms(key)[1] : forms(key)[0]); + } else { + if (isFuture) { + return result + forms(key)[1]; + } else { + return result + (special(number) ? forms(key)[1] : forms(key)[2]); + } + } + } + moment.defineLocale('lt', { + months: { + format: 'sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio'.split( + '_' + ), + standalone: 'sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis'.split( + '_' + ), + isFormat: /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?|MMMM?(\[[^\[\]]*\]|\s)+D[oD]?/, + }, + monthsShort: 'sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd'.split('_'), + weekdays: { + format: 'sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį'.split( + '_' + ), + standalone: 'sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis'.split( + '_' + ), + isFormat: /dddd HH:mm/, + }, + weekdaysShort: 'Sek_Pir_Ant_Tre_Ket_Pen_Šeš'.split('_'), + weekdaysMin: 'S_P_A_T_K_Pn_Š'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'YYYY-MM-DD', + LL: 'YYYY [m.] MMMM D [d.]', + LLL: 'YYYY [m.] MMMM D [d.], HH:mm [val.]', + LLLL: 'YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]', + l: 'YYYY-MM-DD', + ll: 'YYYY [m.] MMMM D [d.]', + lll: 'YYYY [m.] MMMM D [d.], HH:mm [val.]', + llll: 'YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]', + }, + calendar: { + sameDay: '[Šiandien] LT', + nextDay: '[Rytoj] LT', + nextWeek: 'dddd LT', + lastDay: '[Vakar] LT', + lastWeek: '[Praėjusį] dddd LT', + sameElse: 'L', + }, + relativeTime: { + future: 'po %s', + past: 'prieš %s', + s: translateSeconds, + ss: translate$6, + m: translateSingular, + mm: translate$6, + h: translateSingular, + hh: translate$6, + d: translateSingular, + dd: translate$6, + M: translateSingular, + MM: translate$6, + y: translateSingular, + yy: translate$6, + }, + dayOfMonthOrdinalParse: /\d{1,2}-oji/, + ordinal: function (number) { + return number + '-oji'; + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var units$1 = { + ss: 'sekundes_sekundēm_sekunde_sekundes'.split('_'), + m: 'minūtes_minūtēm_minūte_minūtes'.split('_'), + mm: 'minūtes_minūtēm_minūte_minūtes'.split('_'), + h: 'stundas_stundām_stunda_stundas'.split('_'), + hh: 'stundas_stundām_stunda_stundas'.split('_'), + d: 'dienas_dienām_diena_dienas'.split('_'), + dd: 'dienas_dienām_diena_dienas'.split('_'), + M: 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'), + MM: 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'), + y: 'gada_gadiem_gads_gadi'.split('_'), + yy: 'gada_gadiem_gads_gadi'.split('_'), + }; + /** + * @param withoutSuffix boolean true = a length of time; false = before/after a period of time. + */ + function format(forms, number, withoutSuffix) { + if (withoutSuffix) { + // E.g. "21 minūte", "3 minūtes". + return number % 10 === 1 && number % 100 !== 11 ? forms[2] : forms[3]; + } else { + // E.g. "21 minūtes" as in "pēc 21 minūtes". + // E.g. "3 minūtēm" as in "pēc 3 minūtēm". + return number % 10 === 1 && number % 100 !== 11 ? forms[0] : forms[1]; + } + } + function relativeTimeWithPlural$1(number, withoutSuffix, key) { + return number + ' ' + format(units$1[key], number, withoutSuffix); + } + function relativeTimeWithSingular(number, withoutSuffix, key) { + return format(units$1[key], number, withoutSuffix); + } + function relativeSeconds(number, withoutSuffix) { + return withoutSuffix ? 'dažas sekundes' : 'dažām sekundēm'; + } + + moment.defineLocale('lv', { + months: 'janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris'.split( + '_' + ), + monthsShort: 'jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec'.split('_'), + weekdays: 'svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena'.split( + '_' + ), + weekdaysShort: 'Sv_P_O_T_C_Pk_S'.split('_'), + weekdaysMin: 'Sv_P_O_T_C_Pk_S'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY.', + LL: 'YYYY. [gada] D. MMMM', + LLL: 'YYYY. [gada] D. MMMM, HH:mm', + LLLL: 'YYYY. [gada] D. MMMM, dddd, HH:mm', + }, + calendar: { + sameDay: '[Šodien pulksten] LT', + nextDay: '[Rīt pulksten] LT', + nextWeek: 'dddd [pulksten] LT', + lastDay: '[Vakar pulksten] LT', + lastWeek: '[Pagājušā] dddd [pulksten] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'pēc %s', + past: 'pirms %s', + s: relativeSeconds, + ss: relativeTimeWithPlural$1, + m: relativeTimeWithSingular, + mm: relativeTimeWithPlural$1, + h: relativeTimeWithSingular, + hh: relativeTimeWithPlural$1, + d: relativeTimeWithSingular, + dd: relativeTimeWithPlural$1, + M: relativeTimeWithSingular, + MM: relativeTimeWithPlural$1, + y: relativeTimeWithSingular, + yy: relativeTimeWithPlural$1, + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var translator = { + words: { + //Different grammatical cases + ss: ['sekund', 'sekunda', 'sekundi'], + m: ['jedan minut', 'jednog minuta'], + mm: ['minut', 'minuta', 'minuta'], + h: ['jedan sat', 'jednog sata'], + hh: ['sat', 'sata', 'sati'], + dd: ['dan', 'dana', 'dana'], + MM: ['mjesec', 'mjeseca', 'mjeseci'], + yy: ['godina', 'godine', 'godina'], + }, + correctGrammaticalCase: function (number, wordKey) { + return number === 1 + ? wordKey[0] + : number >= 2 && number <= 4 + ? wordKey[1] + : wordKey[2]; + }, + translate: function (number, withoutSuffix, key) { + var wordKey = translator.words[key]; + if (key.length === 1) { + return withoutSuffix ? wordKey[0] : wordKey[1]; + } else { + return ( + number + + ' ' + + translator.correctGrammaticalCase(number, wordKey) + ); + } + }, + }; + + moment.defineLocale('me', { + months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split( + '_' + ), + monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split( + '_' + ), + weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'), + weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY H:mm', + LLLL: 'dddd, D. MMMM YYYY H:mm', + }, + calendar: { + sameDay: '[danas u] LT', + nextDay: '[sjutra u] LT', + + nextWeek: function () { + switch (this.day()) { + case 0: + return '[u] [nedjelju] [u] LT'; + case 3: + return '[u] [srijedu] [u] LT'; + case 6: + return '[u] [subotu] [u] LT'; + case 1: + case 2: + case 4: + case 5: + return '[u] dddd [u] LT'; + } + }, + lastDay: '[juče u] LT', + lastWeek: function () { + var lastWeekDays = [ + '[prošle] [nedjelje] [u] LT', + '[prošlog] [ponedjeljka] [u] LT', + '[prošlog] [utorka] [u] LT', + '[prošle] [srijede] [u] LT', + '[prošlog] [četvrtka] [u] LT', + '[prošlog] [petka] [u] LT', + '[prošle] [subote] [u] LT', + ]; + return lastWeekDays[this.day()]; + }, + sameElse: 'L', + }, + relativeTime: { + future: 'za %s', + past: 'prije %s', + s: 'nekoliko sekundi', + ss: translator.translate, + m: translator.translate, + mm: translator.translate, + h: translator.translate, + hh: translator.translate, + d: 'dan', + dd: translator.translate, + M: 'mjesec', + MM: translator.translate, + y: 'godinu', + yy: translator.translate, + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('mi', { + months: 'Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea'.split( + '_' + ), + monthsShort: 'Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki'.split( + '_' + ), + monthsRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i, + monthsStrictRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i, + monthsShortRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i, + monthsShortStrictRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,2}/i, + weekdays: 'Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei'.split('_'), + weekdaysShort: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'), + weekdaysMin: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY [i] HH:mm', + LLLL: 'dddd, D MMMM YYYY [i] HH:mm', + }, + calendar: { + sameDay: '[i teie mahana, i] LT', + nextDay: '[apopo i] LT', + nextWeek: 'dddd [i] LT', + lastDay: '[inanahi i] LT', + lastWeek: 'dddd [whakamutunga i] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'i roto i %s', + past: '%s i mua', + s: 'te hēkona ruarua', + ss: '%d hēkona', + m: 'he meneti', + mm: '%d meneti', + h: 'te haora', + hh: '%d haora', + d: 'he ra', + dd: '%d ra', + M: 'he marama', + MM: '%d marama', + y: 'he tau', + yy: '%d tau', + }, + dayOfMonthOrdinalParse: /\d{1,2}º/, + ordinal: '%dº', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('mk', { + months: 'јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември'.split( + '_' + ), + monthsShort: 'јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек'.split('_'), + weekdays: 'недела_понеделник_вторник_среда_четврток_петок_сабота'.split( + '_' + ), + weekdaysShort: 'нед_пон_вто_сре_чет_пет_саб'.split('_'), + weekdaysMin: 'нe_пo_вт_ср_че_пе_сa'.split('_'), + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'D.MM.YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY H:mm', + LLLL: 'dddd, D MMMM YYYY H:mm', + }, + calendar: { + sameDay: '[Денес во] LT', + nextDay: '[Утре во] LT', + nextWeek: '[Во] dddd [во] LT', + lastDay: '[Вчера во] LT', + lastWeek: function () { + switch (this.day()) { + case 0: + case 3: + case 6: + return '[Изминатата] dddd [во] LT'; + case 1: + case 2: + case 4: + case 5: + return '[Изминатиот] dddd [во] LT'; + } + }, + sameElse: 'L', + }, + relativeTime: { + future: 'за %s', + past: 'пред %s', + s: 'неколку секунди', + ss: '%d секунди', + m: 'една минута', + mm: '%d минути', + h: 'еден час', + hh: '%d часа', + d: 'еден ден', + dd: '%d дена', + M: 'еден месец', + MM: '%d месеци', + y: 'една година', + yy: '%d години', + }, + dayOfMonthOrdinalParse: /\d{1,2}-(ев|ен|ти|ви|ри|ми)/, + ordinal: function (number) { + var lastDigit = number % 10, + last2Digits = number % 100; + if (number === 0) { + return number + '-ев'; + } else if (last2Digits === 0) { + return number + '-ен'; + } else if (last2Digits > 10 && last2Digits < 20) { + return number + '-ти'; + } else if (lastDigit === 1) { + return number + '-ви'; + } else if (lastDigit === 2) { + return number + '-ри'; + } else if (lastDigit === 7 || lastDigit === 8) { + return number + '-ми'; + } else { + return number + '-ти'; + } + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('ml', { + months: 'ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ'.split( + '_' + ), + monthsShort: 'ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച'.split( + '_' + ), + weekdaysShort: 'ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി'.split('_'), + weekdaysMin: 'ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ'.split('_'), + longDateFormat: { + LT: 'A h:mm -നു', + LTS: 'A h:mm:ss -നു', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY, A h:mm -നു', + LLLL: 'dddd, D MMMM YYYY, A h:mm -നു', + }, + calendar: { + sameDay: '[ഇന്ന്] LT', + nextDay: '[നാളെ] LT', + nextWeek: 'dddd, LT', + lastDay: '[ഇന്നലെ] LT', + lastWeek: '[കഴിഞ്ഞ] dddd, LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s കഴിഞ്ഞ്', + past: '%s മുൻപ്', + s: 'അൽപ നിമിഷങ്ങൾ', + ss: '%d സെക്കൻഡ്', + m: 'ഒരു മിനിറ്റ്', + mm: '%d മിനിറ്റ്', + h: 'ഒരു മണിക്കൂർ', + hh: '%d മണിക്കൂർ', + d: 'ഒരു ദിവസം', + dd: '%d ദിവസം', + M: 'ഒരു മാസം', + MM: '%d മാസം', + y: 'ഒരു വർഷം', + yy: '%d വർഷം', + }, + meridiemParse: /രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if ( + (meridiem === 'രാത്രി' && hour >= 4) || + meridiem === 'ഉച്ച കഴിഞ്ഞ്' || + meridiem === 'വൈകുന്നേരം' + ) { + return hour + 12; + } else { + return hour; + } + }, + meridiem: function (hour, minute, isLower) { + if (hour < 4) { + return 'രാത്രി'; + } else if (hour < 12) { + return 'രാവിലെ'; + } else if (hour < 17) { + return 'ഉച്ച കഴിഞ്ഞ്'; + } else if (hour < 20) { + return 'വൈകുന്നേരം'; + } else { + return 'രാത്രി'; + } + }, + }); + + //! moment.js locale configuration + + function translate$7(number, withoutSuffix, key, isFuture) { + switch (key) { + case 's': + return withoutSuffix ? 'хэдхэн секунд' : 'хэдхэн секундын'; + case 'ss': + return number + (withoutSuffix ? ' секунд' : ' секундын'); + case 'm': + case 'mm': + return number + (withoutSuffix ? ' минут' : ' минутын'); + case 'h': + case 'hh': + return number + (withoutSuffix ? ' цаг' : ' цагийн'); + case 'd': + case 'dd': + return number + (withoutSuffix ? ' өдөр' : ' өдрийн'); + case 'M': + case 'MM': + return number + (withoutSuffix ? ' сар' : ' сарын'); + case 'y': + case 'yy': + return number + (withoutSuffix ? ' жил' : ' жилийн'); + default: + return number; + } + } + + moment.defineLocale('mn', { + months: 'Нэгдүгээр сар_Хоёрдугаар сар_Гуравдугаар сар_Дөрөвдүгээр сар_Тавдугаар сар_Зургадугаар сар_Долдугаар сар_Наймдугаар сар_Есдүгээр сар_Аравдугаар сар_Арван нэгдүгээр сар_Арван хоёрдугаар сар'.split( + '_' + ), + monthsShort: '1 сар_2 сар_3 сар_4 сар_5 сар_6 сар_7 сар_8 сар_9 сар_10 сар_11 сар_12 сар'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'Ням_Даваа_Мягмар_Лхагва_Пүрэв_Баасан_Бямба'.split('_'), + weekdaysShort: 'Ням_Дав_Мяг_Лха_Пүр_Баа_Бям'.split('_'), + weekdaysMin: 'Ня_Да_Мя_Лх_Пү_Ба_Бя'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'YYYY-MM-DD', + LL: 'YYYY оны MMMMын D', + LLL: 'YYYY оны MMMMын D HH:mm', + LLLL: 'dddd, YYYY оны MMMMын D HH:mm', + }, + meridiemParse: /ҮӨ|ҮХ/i, + isPM: function (input) { + return input === 'ҮХ'; + }, + meridiem: function (hour, minute, isLower) { + if (hour < 12) { + return 'ҮӨ'; + } else { + return 'ҮХ'; + } + }, + calendar: { + sameDay: '[Өнөөдөр] LT', + nextDay: '[Маргааш] LT', + nextWeek: '[Ирэх] dddd LT', + lastDay: '[Өчигдөр] LT', + lastWeek: '[Өнгөрсөн] dddd LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s дараа', + past: '%s өмнө', + s: translate$7, + ss: translate$7, + m: translate$7, + mm: translate$7, + h: translate$7, + hh: translate$7, + d: translate$7, + dd: translate$7, + M: translate$7, + MM: translate$7, + y: translate$7, + yy: translate$7, + }, + dayOfMonthOrdinalParse: /\d{1,2} өдөр/, + ordinal: function (number, period) { + switch (period) { + case 'd': + case 'D': + case 'DDD': + return number + ' өдөр'; + default: + return number; + } + }, + }); + + //! moment.js locale configuration + + var symbolMap$b = { + '1': '१', + '2': '२', + '3': '३', + '4': '४', + '5': '५', + '6': '६', + '7': '७', + '8': '८', + '9': '९', + '0': '०', + }, + numberMap$a = { + '१': '1', + '२': '2', + '३': '3', + '४': '4', + '५': '5', + '६': '6', + '७': '7', + '८': '8', + '९': '9', + '०': '0', + }; + + function relativeTimeMr(number, withoutSuffix, string, isFuture) { + var output = ''; + if (withoutSuffix) { + switch (string) { + case 's': + output = 'काही सेकंद'; + break; + case 'ss': + output = '%d सेकंद'; + break; + case 'm': + output = 'एक मिनिट'; + break; + case 'mm': + output = '%d मिनिटे'; + break; + case 'h': + output = 'एक तास'; + break; + case 'hh': + output = '%d तास'; + break; + case 'd': + output = 'एक दिवस'; + break; + case 'dd': + output = '%d दिवस'; + break; + case 'M': + output = 'एक महिना'; + break; + case 'MM': + output = '%d महिने'; + break; + case 'y': + output = 'एक वर्ष'; + break; + case 'yy': + output = '%d वर्षे'; + break; + } + } else { + switch (string) { + case 's': + output = 'काही सेकंदां'; + break; + case 'ss': + output = '%d सेकंदां'; + break; + case 'm': + output = 'एका मिनिटा'; + break; + case 'mm': + output = '%d मिनिटां'; + break; + case 'h': + output = 'एका तासा'; + break; + case 'hh': + output = '%d तासां'; + break; + case 'd': + output = 'एका दिवसा'; + break; + case 'dd': + output = '%d दिवसां'; + break; + case 'M': + output = 'एका महिन्या'; + break; + case 'MM': + output = '%d महिन्यां'; + break; + case 'y': + output = 'एका वर्षा'; + break; + case 'yy': + output = '%d वर्षां'; + break; + } + } + return output.replace(/%d/i, number); + } + + moment.defineLocale('mr', { + months: 'जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split( + '_' + ), + monthsShort: 'जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'), + weekdaysShort: 'रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि'.split('_'), + weekdaysMin: 'र_सो_मं_बु_गु_शु_श'.split('_'), + longDateFormat: { + LT: 'A h:mm वाजता', + LTS: 'A h:mm:ss वाजता', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY, A h:mm वाजता', + LLLL: 'dddd, D MMMM YYYY, A h:mm वाजता', + }, + calendar: { + sameDay: '[आज] LT', + nextDay: '[उद्या] LT', + nextWeek: 'dddd, LT', + lastDay: '[काल] LT', + lastWeek: '[मागील] dddd, LT', + sameElse: 'L', + }, + relativeTime: { + future: '%sमध्ये', + past: '%sपूर्वी', + s: relativeTimeMr, + ss: relativeTimeMr, + m: relativeTimeMr, + mm: relativeTimeMr, + h: relativeTimeMr, + hh: relativeTimeMr, + d: relativeTimeMr, + dd: relativeTimeMr, + M: relativeTimeMr, + MM: relativeTimeMr, + y: relativeTimeMr, + yy: relativeTimeMr, + }, + preparse: function (string) { + return string.replace(/[१२३४५६७८९०]/g, function (match) { + return numberMap$a[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$b[match]; + }); + }, + meridiemParse: /पहाटे|सकाळी|दुपारी|सायंकाळी|रात्री/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'पहाटे' || meridiem === 'सकाळी') { + return hour; + } else if ( + meridiem === 'दुपारी' || + meridiem === 'सायंकाळी' || + meridiem === 'रात्री' + ) { + return hour >= 12 ? hour : hour + 12; + } + }, + meridiem: function (hour, minute, isLower) { + if (hour >= 0 && hour < 6) { + return 'पहाटे'; + } else if (hour < 12) { + return 'सकाळी'; + } else if (hour < 17) { + return 'दुपारी'; + } else if (hour < 20) { + return 'सायंकाळी'; + } else { + return 'रात्री'; + } + }, + week: { + dow: 0, // Sunday is the first day of the week. + doy: 6, // The week that contains Jan 6th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('ms-my', { + months: 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split( + '_' + ), + monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'), + weekdays: 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'), + weekdaysShort: 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'), + weekdaysMin: 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'), + longDateFormat: { + LT: 'HH.mm', + LTS: 'HH.mm.ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY [pukul] HH.mm', + LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm', + }, + meridiemParse: /pagi|tengahari|petang|malam/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'pagi') { + return hour; + } else if (meridiem === 'tengahari') { + return hour >= 11 ? hour : hour + 12; + } else if (meridiem === 'petang' || meridiem === 'malam') { + return hour + 12; + } + }, + meridiem: function (hours, minutes, isLower) { + if (hours < 11) { + return 'pagi'; + } else if (hours < 15) { + return 'tengahari'; + } else if (hours < 19) { + return 'petang'; + } else { + return 'malam'; + } + }, + calendar: { + sameDay: '[Hari ini pukul] LT', + nextDay: '[Esok pukul] LT', + nextWeek: 'dddd [pukul] LT', + lastDay: '[Kelmarin pukul] LT', + lastWeek: 'dddd [lepas pukul] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'dalam %s', + past: '%s yang lepas', + s: 'beberapa saat', + ss: '%d saat', + m: 'seminit', + mm: '%d minit', + h: 'sejam', + hh: '%d jam', + d: 'sehari', + dd: '%d hari', + M: 'sebulan', + MM: '%d bulan', + y: 'setahun', + yy: '%d tahun', + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('ms', { + months: 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split( + '_' + ), + monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'), + weekdays: 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'), + weekdaysShort: 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'), + weekdaysMin: 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'), + longDateFormat: { + LT: 'HH.mm', + LTS: 'HH.mm.ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY [pukul] HH.mm', + LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm', + }, + meridiemParse: /pagi|tengahari|petang|malam/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'pagi') { + return hour; + } else if (meridiem === 'tengahari') { + return hour >= 11 ? hour : hour + 12; + } else if (meridiem === 'petang' || meridiem === 'malam') { + return hour + 12; + } + }, + meridiem: function (hours, minutes, isLower) { + if (hours < 11) { + return 'pagi'; + } else if (hours < 15) { + return 'tengahari'; + } else if (hours < 19) { + return 'petang'; + } else { + return 'malam'; + } + }, + calendar: { + sameDay: '[Hari ini pukul] LT', + nextDay: '[Esok pukul] LT', + nextWeek: 'dddd [pukul] LT', + lastDay: '[Kelmarin pukul] LT', + lastWeek: 'dddd [lepas pukul] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'dalam %s', + past: '%s yang lepas', + s: 'beberapa saat', + ss: '%d saat', + m: 'seminit', + mm: '%d minit', + h: 'sejam', + hh: '%d jam', + d: 'sehari', + dd: '%d hari', + M: 'sebulan', + MM: '%d bulan', + y: 'setahun', + yy: '%d tahun', + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('mt', { + months: 'Jannar_Frar_Marzu_April_Mejju_Ġunju_Lulju_Awwissu_Settembru_Ottubru_Novembru_Diċembru'.split( + '_' + ), + monthsShort: 'Jan_Fra_Mar_Apr_Mej_Ġun_Lul_Aww_Set_Ott_Nov_Diċ'.split('_'), + weekdays: 'Il-Ħadd_It-Tnejn_It-Tlieta_L-Erbgħa_Il-Ħamis_Il-Ġimgħa_Is-Sibt'.split( + '_' + ), + weekdaysShort: 'Ħad_Tne_Tli_Erb_Ħam_Ġim_Sib'.split('_'), + weekdaysMin: 'Ħa_Tn_Tl_Er_Ħa_Ġi_Si'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Illum fil-]LT', + nextDay: '[Għada fil-]LT', + nextWeek: 'dddd [fil-]LT', + lastDay: '[Il-bieraħ fil-]LT', + lastWeek: 'dddd [li għadda] [fil-]LT', + sameElse: 'L', + }, + relativeTime: { + future: 'f’ %s', + past: '%s ilu', + s: 'ftit sekondi', + ss: '%d sekondi', + m: 'minuta', + mm: '%d minuti', + h: 'siegħa', + hh: '%d siegħat', + d: 'ġurnata', + dd: '%d ġranet', + M: 'xahar', + MM: '%d xhur', + y: 'sena', + yy: '%d sni', + }, + dayOfMonthOrdinalParse: /\d{1,2}º/, + ordinal: '%dº', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var symbolMap$c = { + '1': '၁', + '2': '၂', + '3': '၃', + '4': '၄', + '5': '၅', + '6': '၆', + '7': '၇', + '8': '၈', + '9': '၉', + '0': '၀', + }, + numberMap$b = { + '၁': '1', + '၂': '2', + '၃': '3', + '၄': '4', + '၅': '5', + '၆': '6', + '၇': '7', + '၈': '8', + '၉': '9', + '၀': '0', + }; + + moment.defineLocale('my', { + months: 'ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ'.split( + '_' + ), + monthsShort: 'ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ'.split('_'), + weekdays: 'တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ'.split( + '_' + ), + weekdaysShort: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'), + weekdaysMin: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'), + + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[ယနေ.] LT [မှာ]', + nextDay: '[မနက်ဖြန်] LT [မှာ]', + nextWeek: 'dddd LT [မှာ]', + lastDay: '[မနေ.က] LT [မှာ]', + lastWeek: '[ပြီးခဲ့သော] dddd LT [မှာ]', + sameElse: 'L', + }, + relativeTime: { + future: 'လာမည့် %s မှာ', + past: 'လွန်ခဲ့သော %s က', + s: 'စက္ကန်.အနည်းငယ်', + ss: '%d စက္ကန့်', + m: 'တစ်မိနစ်', + mm: '%d မိနစ်', + h: 'တစ်နာရီ', + hh: '%d နာရီ', + d: 'တစ်ရက်', + dd: '%d ရက်', + M: 'တစ်လ', + MM: '%d လ', + y: 'တစ်နှစ်', + yy: '%d နှစ်', + }, + preparse: function (string) { + return string.replace(/[၁၂၃၄၅၆၇၈၉၀]/g, function (match) { + return numberMap$b[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$c[match]; + }); + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('nb', { + months: 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split( + '_' + ), + monthsShort: 'jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'), + weekdaysShort: 'sø._ma._ti._on._to._fr._lø.'.split('_'), + weekdaysMin: 'sø_ma_ti_on_to_fr_lø'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY [kl.] HH:mm', + LLLL: 'dddd D. MMMM YYYY [kl.] HH:mm', + }, + calendar: { + sameDay: '[i dag kl.] LT', + nextDay: '[i morgen kl.] LT', + nextWeek: 'dddd [kl.] LT', + lastDay: '[i går kl.] LT', + lastWeek: '[forrige] dddd [kl.] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'om %s', + past: '%s siden', + s: 'noen sekunder', + ss: '%d sekunder', + m: 'ett minutt', + mm: '%d minutter', + h: 'en time', + hh: '%d timer', + d: 'en dag', + dd: '%d dager', + M: 'en måned', + MM: '%d måneder', + y: 'ett år', + yy: '%d år', + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var symbolMap$d = { + '1': '१', + '2': '२', + '3': '३', + '4': '४', + '5': '५', + '6': '६', + '7': '७', + '8': '८', + '9': '९', + '0': '०', + }, + numberMap$c = { + '१': '1', + '२': '2', + '३': '3', + '४': '4', + '५': '5', + '६': '6', + '७': '7', + '८': '8', + '९': '9', + '०': '0', + }; + + moment.defineLocale('ne', { + months: 'जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर'.split( + '_' + ), + monthsShort: 'जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार'.split( + '_' + ), + weekdaysShort: 'आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.'.split('_'), + weekdaysMin: 'आ._सो._मं._बु._बि._शु._श.'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'Aको h:mm बजे', + LTS: 'Aको h:mm:ss बजे', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY, Aको h:mm बजे', + LLLL: 'dddd, D MMMM YYYY, Aको h:mm बजे', + }, + preparse: function (string) { + return string.replace(/[१२३४५६७८९०]/g, function (match) { + return numberMap$c[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$d[match]; + }); + }, + meridiemParse: /राति|बिहान|दिउँसो|साँझ/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'राति') { + return hour < 4 ? hour : hour + 12; + } else if (meridiem === 'बिहान') { + return hour; + } else if (meridiem === 'दिउँसो') { + return hour >= 10 ? hour : hour + 12; + } else if (meridiem === 'साँझ') { + return hour + 12; + } + }, + meridiem: function (hour, minute, isLower) { + if (hour < 3) { + return 'राति'; + } else if (hour < 12) { + return 'बिहान'; + } else if (hour < 16) { + return 'दिउँसो'; + } else if (hour < 20) { + return 'साँझ'; + } else { + return 'राति'; + } + }, + calendar: { + sameDay: '[आज] LT', + nextDay: '[भोलि] LT', + nextWeek: '[आउँदो] dddd[,] LT', + lastDay: '[हिजो] LT', + lastWeek: '[गएको] dddd[,] LT', + sameElse: 'L', + }, + relativeTime: { + future: '%sमा', + past: '%s अगाडि', + s: 'केही क्षण', + ss: '%d सेकेण्ड', + m: 'एक मिनेट', + mm: '%d मिनेट', + h: 'एक घण्टा', + hh: '%d घण्टा', + d: 'एक दिन', + dd: '%d दिन', + M: 'एक महिना', + MM: '%d महिना', + y: 'एक बर्ष', + yy: '%d बर्ष', + }, + week: { + dow: 0, // Sunday is the first day of the week. + doy: 6, // The week that contains Jan 6th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var monthsShortWithDots$1 = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split( + '_' + ), + monthsShortWithoutDots$1 = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split( + '_' + ), + monthsParse$6 = [ + /^jan/i, + /^feb/i, + /^maart|mrt.?$/i, + /^apr/i, + /^mei$/i, + /^jun[i.]?$/i, + /^jul[i.]?$/i, + /^aug/i, + /^sep/i, + /^okt/i, + /^nov/i, + /^dec/i, + ], + monthsRegex$6 = /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i; + + moment.defineLocale('nl-be', { + months: 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split( + '_' + ), + monthsShort: function (m, format) { + if (!m) { + return monthsShortWithDots$1; + } else if (/-MMM-/.test(format)) { + return monthsShortWithoutDots$1[m.month()]; + } else { + return monthsShortWithDots$1[m.month()]; + } + }, + + monthsRegex: monthsRegex$6, + monthsShortRegex: monthsRegex$6, + monthsStrictRegex: /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i, + monthsShortStrictRegex: /^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i, + + monthsParse: monthsParse$6, + longMonthsParse: monthsParse$6, + shortMonthsParse: monthsParse$6, + + weekdays: 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split( + '_' + ), + weekdaysShort: 'zo._ma._di._wo._do._vr._za.'.split('_'), + weekdaysMin: 'zo_ma_di_wo_do_vr_za'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[vandaag om] LT', + nextDay: '[morgen om] LT', + nextWeek: 'dddd [om] LT', + lastDay: '[gisteren om] LT', + lastWeek: '[afgelopen] dddd [om] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'over %s', + past: '%s geleden', + s: 'een paar seconden', + ss: '%d seconden', + m: 'één minuut', + mm: '%d minuten', + h: 'één uur', + hh: '%d uur', + d: 'één dag', + dd: '%d dagen', + M: 'één maand', + MM: '%d maanden', + y: 'één jaar', + yy: '%d jaar', + }, + dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/, + ordinal: function (number) { + return ( + number + + (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de') + ); + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var monthsShortWithDots$2 = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split( + '_' + ), + monthsShortWithoutDots$2 = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split( + '_' + ), + monthsParse$7 = [ + /^jan/i, + /^feb/i, + /^maart|mrt.?$/i, + /^apr/i, + /^mei$/i, + /^jun[i.]?$/i, + /^jul[i.]?$/i, + /^aug/i, + /^sep/i, + /^okt/i, + /^nov/i, + /^dec/i, + ], + monthsRegex$7 = /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i; + + moment.defineLocale('nl', { + months: 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split( + '_' + ), + monthsShort: function (m, format) { + if (!m) { + return monthsShortWithDots$2; + } else if (/-MMM-/.test(format)) { + return monthsShortWithoutDots$2[m.month()]; + } else { + return monthsShortWithDots$2[m.month()]; + } + }, + + monthsRegex: monthsRegex$7, + monthsShortRegex: monthsRegex$7, + monthsStrictRegex: /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i, + monthsShortStrictRegex: /^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i, + + monthsParse: monthsParse$7, + longMonthsParse: monthsParse$7, + shortMonthsParse: monthsParse$7, + + weekdays: 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split( + '_' + ), + weekdaysShort: 'zo._ma._di._wo._do._vr._za.'.split('_'), + weekdaysMin: 'zo_ma_di_wo_do_vr_za'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD-MM-YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[vandaag om] LT', + nextDay: '[morgen om] LT', + nextWeek: 'dddd [om] LT', + lastDay: '[gisteren om] LT', + lastWeek: '[afgelopen] dddd [om] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'over %s', + past: '%s geleden', + s: 'een paar seconden', + ss: '%d seconden', + m: 'één minuut', + mm: '%d minuten', + h: 'één uur', + hh: '%d uur', + d: 'één dag', + dd: '%d dagen', + M: 'één maand', + MM: '%d maanden', + y: 'één jaar', + yy: '%d jaar', + }, + dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/, + ordinal: function (number) { + return ( + number + + (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de') + ); + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('nn', { + months: 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split( + '_' + ), + monthsShort: 'jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag'.split('_'), + weekdaysShort: 'su._må._ty._on._to._fr._lau.'.split('_'), + weekdaysMin: 'su_må_ty_on_to_fr_la'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY [kl.] H:mm', + LLLL: 'dddd D. MMMM YYYY [kl.] HH:mm', + }, + calendar: { + sameDay: '[I dag klokka] LT', + nextDay: '[I morgon klokka] LT', + nextWeek: 'dddd [klokka] LT', + lastDay: '[I går klokka] LT', + lastWeek: '[Føregåande] dddd [klokka] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'om %s', + past: '%s sidan', + s: 'nokre sekund', + ss: '%d sekund', + m: 'eit minutt', + mm: '%d minutt', + h: 'ein time', + hh: '%d timar', + d: 'ein dag', + dd: '%d dagar', + M: 'ein månad', + MM: '%d månader', + y: 'eit år', + yy: '%d år', + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('oc-lnc', { + months: { + standalone: 'genièr_febrièr_març_abril_mai_junh_julhet_agost_setembre_octòbre_novembre_decembre'.split( + '_' + ), + format: "de genièr_de febrièr_de març_d'abril_de mai_de junh_de julhet_d'agost_de setembre_d'octòbre_de novembre_de decembre".split( + '_' + ), + isFormat: /D[oD]?(\s)+MMMM/, + }, + monthsShort: 'gen._febr._març_abr._mai_junh_julh._ago._set._oct._nov._dec.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'dimenge_diluns_dimars_dimècres_dijòus_divendres_dissabte'.split( + '_' + ), + weekdaysShort: 'dg._dl._dm._dc._dj._dv._ds.'.split('_'), + weekdaysMin: 'dg_dl_dm_dc_dj_dv_ds'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM [de] YYYY', + ll: 'D MMM YYYY', + LLL: 'D MMMM [de] YYYY [a] H:mm', + lll: 'D MMM YYYY, H:mm', + LLLL: 'dddd D MMMM [de] YYYY [a] H:mm', + llll: 'ddd D MMM YYYY, H:mm', + }, + calendar: { + sameDay: '[uèi a] LT', + nextDay: '[deman a] LT', + nextWeek: 'dddd [a] LT', + lastDay: '[ièr a] LT', + lastWeek: 'dddd [passat a] LT', + sameElse: 'L', + }, + relativeTime: { + future: "d'aquí %s", + past: 'fa %s', + s: 'unas segondas', + ss: '%d segondas', + m: 'una minuta', + mm: '%d minutas', + h: 'una ora', + hh: '%d oras', + d: 'un jorn', + dd: '%d jorns', + M: 'un mes', + MM: '%d meses', + y: 'un an', + yy: '%d ans', + }, + dayOfMonthOrdinalParse: /\d{1,2}(r|n|t|è|a)/, + ordinal: function (number, period) { + var output = + number === 1 + ? 'r' + : number === 2 + ? 'n' + : number === 3 + ? 'r' + : number === 4 + ? 't' + : 'è'; + if (period === 'w' || period === 'W') { + output = 'a'; + } + return number + output; + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, + }, + }); + + //! moment.js locale configuration + + var symbolMap$e = { + '1': '੧', + '2': '੨', + '3': '੩', + '4': '੪', + '5': '੫', + '6': '੬', + '7': '੭', + '8': '੮', + '9': '੯', + '0': '੦', + }, + numberMap$d = { + '੧': '1', + '੨': '2', + '੩': '3', + '੪': '4', + '੫': '5', + '੬': '6', + '੭': '7', + '੮': '8', + '੯': '9', + '੦': '0', + }; + + moment.defineLocale('pa-in', { + // There are months name as per Nanakshahi Calendar but they are not used as rigidly in modern Punjabi. + months: 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split( + '_' + ), + monthsShort: 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split( + '_' + ), + weekdays: 'ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ'.split( + '_' + ), + weekdaysShort: 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'), + weekdaysMin: 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'), + longDateFormat: { + LT: 'A h:mm ਵਜੇ', + LTS: 'A h:mm:ss ਵਜੇ', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY, A h:mm ਵਜੇ', + LLLL: 'dddd, D MMMM YYYY, A h:mm ਵਜੇ', + }, + calendar: { + sameDay: '[ਅਜ] LT', + nextDay: '[ਕਲ] LT', + nextWeek: '[ਅਗਲਾ] dddd, LT', + lastDay: '[ਕਲ] LT', + lastWeek: '[ਪਿਛਲੇ] dddd, LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s ਵਿੱਚ', + past: '%s ਪਿਛਲੇ', + s: 'ਕੁਝ ਸਕਿੰਟ', + ss: '%d ਸਕਿੰਟ', + m: 'ਇਕ ਮਿੰਟ', + mm: '%d ਮਿੰਟ', + h: 'ਇੱਕ ਘੰਟਾ', + hh: '%d ਘੰਟੇ', + d: 'ਇੱਕ ਦਿਨ', + dd: '%d ਦਿਨ', + M: 'ਇੱਕ ਮਹੀਨਾ', + MM: '%d ਮਹੀਨੇ', + y: 'ਇੱਕ ਸਾਲ', + yy: '%d ਸਾਲ', + }, + preparse: function (string) { + return string.replace(/[੧੨੩੪੫੬੭੮੯੦]/g, function (match) { + return numberMap$d[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$e[match]; + }); + }, + // Punjabi notation for meridiems are quite fuzzy in practice. While there exists + // a rigid notion of a 'Pahar' it is not used as rigidly in modern Punjabi. + meridiemParse: /ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'ਰਾਤ') { + return hour < 4 ? hour : hour + 12; + } else if (meridiem === 'ਸਵੇਰ') { + return hour; + } else if (meridiem === 'ਦੁਪਹਿਰ') { + return hour >= 10 ? hour : hour + 12; + } else if (meridiem === 'ਸ਼ਾਮ') { + return hour + 12; + } + }, + meridiem: function (hour, minute, isLower) { + if (hour < 4) { + return 'ਰਾਤ'; + } else if (hour < 10) { + return 'ਸਵੇਰ'; + } else if (hour < 17) { + return 'ਦੁਪਹਿਰ'; + } else if (hour < 20) { + return 'ਸ਼ਾਮ'; + } else { + return 'ਰਾਤ'; + } + }, + week: { + dow: 0, // Sunday is the first day of the week. + doy: 6, // The week that contains Jan 6th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var monthsNominative = 'styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień'.split( + '_' + ), + monthsSubjective = 'stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia'.split( + '_' + ); + function plural$3(n) { + return n % 10 < 5 && n % 10 > 1 && ~~(n / 10) % 10 !== 1; + } + function translate$8(number, withoutSuffix, key) { + var result = number + ' '; + switch (key) { + case 'ss': + return result + (plural$3(number) ? 'sekundy' : 'sekund'); + case 'm': + return withoutSuffix ? 'minuta' : 'minutę'; + case 'mm': + return result + (plural$3(number) ? 'minuty' : 'minut'); + case 'h': + return withoutSuffix ? 'godzina' : 'godzinę'; + case 'hh': + return result + (plural$3(number) ? 'godziny' : 'godzin'); + case 'MM': + return result + (plural$3(number) ? 'miesiące' : 'miesięcy'); + case 'yy': + return result + (plural$3(number) ? 'lata' : 'lat'); + } + } + + moment.defineLocale('pl', { + months: function (momentToFormat, format) { + if (!momentToFormat) { + return monthsNominative; + } else if (format === '') { + // Hack: if format empty we know this is used to generate + // RegExp by moment. Give then back both valid forms of months + // in RegExp ready format. + return ( + '(' + + monthsSubjective[momentToFormat.month()] + + '|' + + monthsNominative[momentToFormat.month()] + + ')' + ); + } else if (/D MMMM/.test(format)) { + return monthsSubjective[momentToFormat.month()]; + } else { + return monthsNominative[momentToFormat.month()]; + } + }, + monthsShort: 'sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru'.split('_'), + weekdays: 'niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota'.split( + '_' + ), + weekdaysShort: 'ndz_pon_wt_śr_czw_pt_sob'.split('_'), + weekdaysMin: 'Nd_Pn_Wt_Śr_Cz_Pt_So'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Dziś o] LT', + nextDay: '[Jutro o] LT', + nextWeek: function () { + switch (this.day()) { + case 0: + return '[W niedzielę o] LT'; + + case 2: + return '[We wtorek o] LT'; + + case 3: + return '[W środę o] LT'; + + case 6: + return '[W sobotę o] LT'; + + default: + return '[W] dddd [o] LT'; + } + }, + lastDay: '[Wczoraj o] LT', + lastWeek: function () { + switch (this.day()) { + case 0: + return '[W zeszłą niedzielę o] LT'; + case 3: + return '[W zeszłą środę o] LT'; + case 6: + return '[W zeszłą sobotę o] LT'; + default: + return '[W zeszły] dddd [o] LT'; + } + }, + sameElse: 'L', + }, + relativeTime: { + future: 'za %s', + past: '%s temu', + s: 'kilka sekund', + ss: translate$8, + m: translate$8, + mm: translate$8, + h: translate$8, + hh: translate$8, + d: '1 dzień', + dd: '%d dni', + M: 'miesiąc', + MM: translate$8, + y: 'rok', + yy: translate$8, + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('pt-br', { + months: 'janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split( + '_' + ), + monthsShort: 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'), + weekdays: 'domingo_segunda-feira_terça-feira_quarta-feira_quinta-feira_sexta-feira_sábado'.split( + '_' + ), + weekdaysShort: 'dom_seg_ter_qua_qui_sex_sáb'.split('_'), + weekdaysMin: 'do_2ª_3ª_4ª_5ª_6ª_sá'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D [de] MMMM [de] YYYY', + LLL: 'D [de] MMMM [de] YYYY [às] HH:mm', + LLLL: 'dddd, D [de] MMMM [de] YYYY [às] HH:mm', + }, + calendar: { + sameDay: '[Hoje às] LT', + nextDay: '[Amanhã às] LT', + nextWeek: 'dddd [às] LT', + lastDay: '[Ontem às] LT', + lastWeek: function () { + return this.day() === 0 || this.day() === 6 + ? '[Último] dddd [às] LT' // Saturday + Sunday + : '[Última] dddd [às] LT'; // Monday - Friday + }, + sameElse: 'L', + }, + relativeTime: { + future: 'em %s', + past: 'há %s', + s: 'poucos segundos', + ss: '%d segundos', + m: 'um minuto', + mm: '%d minutos', + h: 'uma hora', + hh: '%d horas', + d: 'um dia', + dd: '%d dias', + M: 'um mês', + MM: '%d meses', + y: 'um ano', + yy: '%d anos', + }, + dayOfMonthOrdinalParse: /\d{1,2}º/, + ordinal: '%dº', + }); + + //! moment.js locale configuration + + moment.defineLocale('pt', { + months: 'janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split( + '_' + ), + monthsShort: 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'), + weekdays: 'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split( + '_' + ), + weekdaysShort: 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'), + weekdaysMin: 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D [de] MMMM [de] YYYY', + LLL: 'D [de] MMMM [de] YYYY HH:mm', + LLLL: 'dddd, D [de] MMMM [de] YYYY HH:mm', + }, + calendar: { + sameDay: '[Hoje às] LT', + nextDay: '[Amanhã às] LT', + nextWeek: 'dddd [às] LT', + lastDay: '[Ontem às] LT', + lastWeek: function () { + return this.day() === 0 || this.day() === 6 + ? '[Último] dddd [às] LT' // Saturday + Sunday + : '[Última] dddd [às] LT'; // Monday - Friday + }, + sameElse: 'L', + }, + relativeTime: { + future: 'em %s', + past: 'há %s', + s: 'segundos', + ss: '%d segundos', + m: 'um minuto', + mm: '%d minutos', + h: 'uma hora', + hh: '%d horas', + d: 'um dia', + dd: '%d dias', + M: 'um mês', + MM: '%d meses', + y: 'um ano', + yy: '%d anos', + }, + dayOfMonthOrdinalParse: /\d{1,2}º/, + ordinal: '%dº', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + function relativeTimeWithPlural$2(number, withoutSuffix, key) { + var format = { + ss: 'secunde', + mm: 'minute', + hh: 'ore', + dd: 'zile', + MM: 'luni', + yy: 'ani', + }, + separator = ' '; + if (number % 100 >= 20 || (number >= 100 && number % 100 === 0)) { + separator = ' de '; + } + return number + separator + format[key]; + } + + moment.defineLocale('ro', { + months: 'ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie'.split( + '_' + ), + monthsShort: 'ian._feb._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'duminică_luni_marți_miercuri_joi_vineri_sâmbătă'.split('_'), + weekdaysShort: 'Dum_Lun_Mar_Mie_Joi_Vin_Sâm'.split('_'), + weekdaysMin: 'Du_Lu_Ma_Mi_Jo_Vi_Sâ'.split('_'), + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY H:mm', + LLLL: 'dddd, D MMMM YYYY H:mm', + }, + calendar: { + sameDay: '[azi la] LT', + nextDay: '[mâine la] LT', + nextWeek: 'dddd [la] LT', + lastDay: '[ieri la] LT', + lastWeek: '[fosta] dddd [la] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'peste %s', + past: '%s în urmă', + s: 'câteva secunde', + ss: relativeTimeWithPlural$2, + m: 'un minut', + mm: relativeTimeWithPlural$2, + h: 'o oră', + hh: relativeTimeWithPlural$2, + d: 'o zi', + dd: relativeTimeWithPlural$2, + M: 'o lună', + MM: relativeTimeWithPlural$2, + y: 'un an', + yy: relativeTimeWithPlural$2, + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + function plural$4(word, num) { + var forms = word.split('_'); + return num % 10 === 1 && num % 100 !== 11 + ? forms[0] + : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) + ? forms[1] + : forms[2]; + } + function relativeTimeWithPlural$3(number, withoutSuffix, key) { + var format = { + ss: withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд', + mm: withoutSuffix ? 'минута_минуты_минут' : 'минуту_минуты_минут', + hh: 'час_часа_часов', + dd: 'день_дня_дней', + MM: 'месяц_месяца_месяцев', + yy: 'год_года_лет', + }; + if (key === 'm') { + return withoutSuffix ? 'минута' : 'минуту'; + } else { + return number + ' ' + plural$4(format[key], +number); + } + } + var monthsParse$8 = [ + /^янв/i, + /^фев/i, + /^мар/i, + /^апр/i, + /^ма[йя]/i, + /^июн/i, + /^июл/i, + /^авг/i, + /^сен/i, + /^окт/i, + /^ноя/i, + /^дек/i, + ]; + + // http://new.gramota.ru/spravka/rules/139-prop : § 103 + // Сокращения месяцев: http://new.gramota.ru/spravka/buro/search-answer?s=242637 + // CLDR data: http://www.unicode.org/cldr/charts/28/summary/ru.html#1753 + moment.defineLocale('ru', { + months: { + format: 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split( + '_' + ), + standalone: 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split( + '_' + ), + }, + monthsShort: { + // по CLDR именно "июл." и "июн.", но какой смысл менять букву на точку? + format: 'янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.'.split( + '_' + ), + standalone: 'янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.'.split( + '_' + ), + }, + weekdays: { + standalone: 'воскресенье_понедельник_вторник_среда_четверг_пятница_суббота'.split( + '_' + ), + format: 'воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу'.split( + '_' + ), + isFormat: /\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?] ?dddd/, + }, + weekdaysShort: 'вс_пн_вт_ср_чт_пт_сб'.split('_'), + weekdaysMin: 'вс_пн_вт_ср_чт_пт_сб'.split('_'), + monthsParse: monthsParse$8, + longMonthsParse: monthsParse$8, + shortMonthsParse: monthsParse$8, + + // полные названия с падежами, по три буквы, для некоторых, по 4 буквы, сокращения с точкой и без точки + monthsRegex: /^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i, + + // копия предыдущего + monthsShortRegex: /^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i, + + // полные названия с падежами + monthsStrictRegex: /^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i, + + // Выражение, которое соответствует только сокращённым формам + monthsShortStrictRegex: /^(янв\.|февр?\.|мар[т.]|апр\.|ма[яй]|июн[ья.]|июл[ья.]|авг\.|сент?\.|окт\.|нояб?\.|дек\.)/i, + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D MMMM YYYY г.', + LLL: 'D MMMM YYYY г., H:mm', + LLLL: 'dddd, D MMMM YYYY г., H:mm', + }, + calendar: { + sameDay: '[Сегодня, в] LT', + nextDay: '[Завтра, в] LT', + lastDay: '[Вчера, в] LT', + nextWeek: function (now) { + if (now.week() !== this.week()) { + switch (this.day()) { + case 0: + return '[В следующее] dddd, [в] LT'; + case 1: + case 2: + case 4: + return '[В следующий] dddd, [в] LT'; + case 3: + case 5: + case 6: + return '[В следующую] dddd, [в] LT'; + } + } else { + if (this.day() === 2) { + return '[Во] dddd, [в] LT'; + } else { + return '[В] dddd, [в] LT'; + } + } + }, + lastWeek: function (now) { + if (now.week() !== this.week()) { + switch (this.day()) { + case 0: + return '[В прошлое] dddd, [в] LT'; + case 1: + case 2: + case 4: + return '[В прошлый] dddd, [в] LT'; + case 3: + case 5: + case 6: + return '[В прошлую] dddd, [в] LT'; + } + } else { + if (this.day() === 2) { + return '[Во] dddd, [в] LT'; + } else { + return '[В] dddd, [в] LT'; + } + } + }, + sameElse: 'L', + }, + relativeTime: { + future: 'через %s', + past: '%s назад', + s: 'несколько секунд', + ss: relativeTimeWithPlural$3, + m: relativeTimeWithPlural$3, + mm: relativeTimeWithPlural$3, + h: 'час', + hh: relativeTimeWithPlural$3, + d: 'день', + dd: relativeTimeWithPlural$3, + M: 'месяц', + MM: relativeTimeWithPlural$3, + y: 'год', + yy: relativeTimeWithPlural$3, + }, + meridiemParse: /ночи|утра|дня|вечера/i, + isPM: function (input) { + return /^(дня|вечера)$/.test(input); + }, + meridiem: function (hour, minute, isLower) { + if (hour < 4) { + return 'ночи'; + } else if (hour < 12) { + return 'утра'; + } else if (hour < 17) { + return 'дня'; + } else { + return 'вечера'; + } + }, + dayOfMonthOrdinalParse: /\d{1,2}-(й|го|я)/, + ordinal: function (number, period) { + switch (period) { + case 'M': + case 'd': + case 'DDD': + return number + '-й'; + case 'D': + return number + '-го'; + case 'w': + case 'W': + return number + '-я'; + default: + return number; + } + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var months$8 = [ + 'جنوري', + 'فيبروري', + 'مارچ', + 'اپريل', + 'مئي', + 'جون', + 'جولاءِ', + 'آگسٽ', + 'سيپٽمبر', + 'آڪٽوبر', + 'نومبر', + 'ڊسمبر', + ], + days = ['آچر', 'سومر', 'اڱارو', 'اربع', 'خميس', 'جمع', 'ڇنڇر']; + + moment.defineLocale('sd', { + months: months$8, + monthsShort: months$8, + weekdays: days, + weekdaysShort: days, + weekdaysMin: days, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd، D MMMM YYYY HH:mm', + }, + meridiemParse: /صبح|شام/, + isPM: function (input) { + return 'شام' === input; + }, + meridiem: function (hour, minute, isLower) { + if (hour < 12) { + return 'صبح'; + } + return 'شام'; + }, + calendar: { + sameDay: '[اڄ] LT', + nextDay: '[سڀاڻي] LT', + nextWeek: 'dddd [اڳين هفتي تي] LT', + lastDay: '[ڪالهه] LT', + lastWeek: '[گزريل هفتي] dddd [تي] LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s پوء', + past: '%s اڳ', + s: 'چند سيڪنڊ', + ss: '%d سيڪنڊ', + m: 'هڪ منٽ', + mm: '%d منٽ', + h: 'هڪ ڪلاڪ', + hh: '%d ڪلاڪ', + d: 'هڪ ڏينهن', + dd: '%d ڏينهن', + M: 'هڪ مهينو', + MM: '%d مهينا', + y: 'هڪ سال', + yy: '%d سال', + }, + preparse: function (string) { + return string.replace(/،/g, ','); + }, + postformat: function (string) { + return string.replace(/,/g, '،'); + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('se', { + months: 'ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu'.split( + '_' + ), + monthsShort: 'ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov'.split( + '_' + ), + weekdays: 'sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat'.split( + '_' + ), + weekdaysShort: 'sotn_vuos_maŋ_gask_duor_bear_láv'.split('_'), + weekdaysMin: 's_v_m_g_d_b_L'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'MMMM D. [b.] YYYY', + LLL: 'MMMM D. [b.] YYYY [ti.] HH:mm', + LLLL: 'dddd, MMMM D. [b.] YYYY [ti.] HH:mm', + }, + calendar: { + sameDay: '[otne ti] LT', + nextDay: '[ihttin ti] LT', + nextWeek: 'dddd [ti] LT', + lastDay: '[ikte ti] LT', + lastWeek: '[ovddit] dddd [ti] LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s geažes', + past: 'maŋit %s', + s: 'moadde sekunddat', + ss: '%d sekunddat', + m: 'okta minuhta', + mm: '%d minuhtat', + h: 'okta diimmu', + hh: '%d diimmut', + d: 'okta beaivi', + dd: '%d beaivvit', + M: 'okta mánnu', + MM: '%d mánut', + y: 'okta jahki', + yy: '%d jagit', + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + /*jshint -W100*/ + moment.defineLocale('si', { + months: 'ජනවාරි_පෙබරවාරි_මාර්තු_අප්‍රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්'.split( + '_' + ), + monthsShort: 'ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ'.split( + '_' + ), + weekdays: 'ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා'.split( + '_' + ), + weekdaysShort: 'ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන'.split('_'), + weekdaysMin: 'ඉ_ස_අ_බ_බ්‍ර_සි_සෙ'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'a h:mm', + LTS: 'a h:mm:ss', + L: 'YYYY/MM/DD', + LL: 'YYYY MMMM D', + LLL: 'YYYY MMMM D, a h:mm', + LLLL: 'YYYY MMMM D [වැනි] dddd, a h:mm:ss', + }, + calendar: { + sameDay: '[අද] LT[ට]', + nextDay: '[හෙට] LT[ට]', + nextWeek: 'dddd LT[ට]', + lastDay: '[ඊයේ] LT[ට]', + lastWeek: '[පසුගිය] dddd LT[ට]', + sameElse: 'L', + }, + relativeTime: { + future: '%sකින්', + past: '%sකට පෙර', + s: 'තත්පර කිහිපය', + ss: 'තත්පර %d', + m: 'මිනිත්තුව', + mm: 'මිනිත්තු %d', + h: 'පැය', + hh: 'පැය %d', + d: 'දිනය', + dd: 'දින %d', + M: 'මාසය', + MM: 'මාස %d', + y: 'වසර', + yy: 'වසර %d', + }, + dayOfMonthOrdinalParse: /\d{1,2} වැනි/, + ordinal: function (number) { + return number + ' වැනි'; + }, + meridiemParse: /පෙර වරු|පස් වරු|පෙ.ව|ප.ව./, + isPM: function (input) { + return input === 'ප.ව.' || input === 'පස් වරු'; + }, + meridiem: function (hours, minutes, isLower) { + if (hours > 11) { + return isLower ? 'ප.ව.' : 'පස් වරු'; + } else { + return isLower ? 'පෙ.ව.' : 'පෙර වරු'; + } + }, + }); + + //! moment.js locale configuration + + var months$9 = 'január_február_marec_apríl_máj_jún_júl_august_september_október_november_december'.split( + '_' + ), + monthsShort$6 = 'jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec'.split('_'); + function plural$5(n) { + return n > 1 && n < 5; + } + function translate$9(number, withoutSuffix, key, isFuture) { + var result = number + ' '; + switch (key) { + case 's': // a few seconds / in a few seconds / a few seconds ago + return withoutSuffix || isFuture ? 'pár sekúnd' : 'pár sekundami'; + case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago + if (withoutSuffix || isFuture) { + return result + (plural$5(number) ? 'sekundy' : 'sekúnd'); + } else { + return result + 'sekundami'; + } + case 'm': // a minute / in a minute / a minute ago + return withoutSuffix ? 'minúta' : isFuture ? 'minútu' : 'minútou'; + case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago + if (withoutSuffix || isFuture) { + return result + (plural$5(number) ? 'minúty' : 'minút'); + } else { + return result + 'minútami'; + } + case 'h': // an hour / in an hour / an hour ago + return withoutSuffix ? 'hodina' : isFuture ? 'hodinu' : 'hodinou'; + case 'hh': // 9 hours / in 9 hours / 9 hours ago + if (withoutSuffix || isFuture) { + return result + (plural$5(number) ? 'hodiny' : 'hodín'); + } else { + return result + 'hodinami'; + } + case 'd': // a day / in a day / a day ago + return withoutSuffix || isFuture ? 'deň' : 'dňom'; + case 'dd': // 9 days / in 9 days / 9 days ago + if (withoutSuffix || isFuture) { + return result + (plural$5(number) ? 'dni' : 'dní'); + } else { + return result + 'dňami'; + } + case 'M': // a month / in a month / a month ago + return withoutSuffix || isFuture ? 'mesiac' : 'mesiacom'; + case 'MM': // 9 months / in 9 months / 9 months ago + if (withoutSuffix || isFuture) { + return result + (plural$5(number) ? 'mesiace' : 'mesiacov'); + } else { + return result + 'mesiacmi'; + } + case 'y': // a year / in a year / a year ago + return withoutSuffix || isFuture ? 'rok' : 'rokom'; + case 'yy': // 9 years / in 9 years / 9 years ago + if (withoutSuffix || isFuture) { + return result + (plural$5(number) ? 'roky' : 'rokov'); + } else { + return result + 'rokmi'; + } + } + } + + moment.defineLocale('sk', { + months: months$9, + monthsShort: monthsShort$6, + weekdays: 'nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota'.split('_'), + weekdaysShort: 'ne_po_ut_st_št_pi_so'.split('_'), + weekdaysMin: 'ne_po_ut_st_št_pi_so'.split('_'), + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY H:mm', + LLLL: 'dddd D. MMMM YYYY H:mm', + }, + calendar: { + sameDay: '[dnes o] LT', + nextDay: '[zajtra o] LT', + nextWeek: function () { + switch (this.day()) { + case 0: + return '[v nedeľu o] LT'; + case 1: + case 2: + return '[v] dddd [o] LT'; + case 3: + return '[v stredu o] LT'; + case 4: + return '[vo štvrtok o] LT'; + case 5: + return '[v piatok o] LT'; + case 6: + return '[v sobotu o] LT'; + } + }, + lastDay: '[včera o] LT', + lastWeek: function () { + switch (this.day()) { + case 0: + return '[minulú nedeľu o] LT'; + case 1: + case 2: + return '[minulý] dddd [o] LT'; + case 3: + return '[minulú stredu o] LT'; + case 4: + case 5: + return '[minulý] dddd [o] LT'; + case 6: + return '[minulú sobotu o] LT'; + } + }, + sameElse: 'L', + }, + relativeTime: { + future: 'za %s', + past: 'pred %s', + s: translate$9, + ss: translate$9, + m: translate$9, + mm: translate$9, + h: translate$9, + hh: translate$9, + d: translate$9, + dd: translate$9, + M: translate$9, + MM: translate$9, + y: translate$9, + yy: translate$9, + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + function processRelativeTime$7(number, withoutSuffix, key, isFuture) { + var result = number + ' '; + switch (key) { + case 's': + return withoutSuffix || isFuture + ? 'nekaj sekund' + : 'nekaj sekundami'; + case 'ss': + if (number === 1) { + result += withoutSuffix ? 'sekundo' : 'sekundi'; + } else if (number === 2) { + result += withoutSuffix || isFuture ? 'sekundi' : 'sekundah'; + } else if (number < 5) { + result += withoutSuffix || isFuture ? 'sekunde' : 'sekundah'; + } else { + result += 'sekund'; + } + return result; + case 'm': + return withoutSuffix ? 'ena minuta' : 'eno minuto'; + case 'mm': + if (number === 1) { + result += withoutSuffix ? 'minuta' : 'minuto'; + } else if (number === 2) { + result += withoutSuffix || isFuture ? 'minuti' : 'minutama'; + } else if (number < 5) { + result += withoutSuffix || isFuture ? 'minute' : 'minutami'; + } else { + result += withoutSuffix || isFuture ? 'minut' : 'minutami'; + } + return result; + case 'h': + return withoutSuffix ? 'ena ura' : 'eno uro'; + case 'hh': + if (number === 1) { + result += withoutSuffix ? 'ura' : 'uro'; + } else if (number === 2) { + result += withoutSuffix || isFuture ? 'uri' : 'urama'; + } else if (number < 5) { + result += withoutSuffix || isFuture ? 'ure' : 'urami'; + } else { + result += withoutSuffix || isFuture ? 'ur' : 'urami'; + } + return result; + case 'd': + return withoutSuffix || isFuture ? 'en dan' : 'enim dnem'; + case 'dd': + if (number === 1) { + result += withoutSuffix || isFuture ? 'dan' : 'dnem'; + } else if (number === 2) { + result += withoutSuffix || isFuture ? 'dni' : 'dnevoma'; + } else { + result += withoutSuffix || isFuture ? 'dni' : 'dnevi'; + } + return result; + case 'M': + return withoutSuffix || isFuture ? 'en mesec' : 'enim mesecem'; + case 'MM': + if (number === 1) { + result += withoutSuffix || isFuture ? 'mesec' : 'mesecem'; + } else if (number === 2) { + result += withoutSuffix || isFuture ? 'meseca' : 'mesecema'; + } else if (number < 5) { + result += withoutSuffix || isFuture ? 'mesece' : 'meseci'; + } else { + result += withoutSuffix || isFuture ? 'mesecev' : 'meseci'; + } + return result; + case 'y': + return withoutSuffix || isFuture ? 'eno leto' : 'enim letom'; + case 'yy': + if (number === 1) { + result += withoutSuffix || isFuture ? 'leto' : 'letom'; + } else if (number === 2) { + result += withoutSuffix || isFuture ? 'leti' : 'letoma'; + } else if (number < 5) { + result += withoutSuffix || isFuture ? 'leta' : 'leti'; + } else { + result += withoutSuffix || isFuture ? 'let' : 'leti'; + } + return result; + } + } + + moment.defineLocale('sl', { + months: 'januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december'.split( + '_' + ), + monthsShort: 'jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota'.split('_'), + weekdaysShort: 'ned._pon._tor._sre._čet._pet._sob.'.split('_'), + weekdaysMin: 'ne_po_to_sr_če_pe_so'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD. MM. YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY H:mm', + LLLL: 'dddd, D. MMMM YYYY H:mm', + }, + calendar: { + sameDay: '[danes ob] LT', + nextDay: '[jutri ob] LT', + + nextWeek: function () { + switch (this.day()) { + case 0: + return '[v] [nedeljo] [ob] LT'; + case 3: + return '[v] [sredo] [ob] LT'; + case 6: + return '[v] [soboto] [ob] LT'; + case 1: + case 2: + case 4: + case 5: + return '[v] dddd [ob] LT'; + } + }, + lastDay: '[včeraj ob] LT', + lastWeek: function () { + switch (this.day()) { + case 0: + return '[prejšnjo] [nedeljo] [ob] LT'; + case 3: + return '[prejšnjo] [sredo] [ob] LT'; + case 6: + return '[prejšnjo] [soboto] [ob] LT'; + case 1: + case 2: + case 4: + case 5: + return '[prejšnji] dddd [ob] LT'; + } + }, + sameElse: 'L', + }, + relativeTime: { + future: 'čez %s', + past: 'pred %s', + s: processRelativeTime$7, + ss: processRelativeTime$7, + m: processRelativeTime$7, + mm: processRelativeTime$7, + h: processRelativeTime$7, + hh: processRelativeTime$7, + d: processRelativeTime$7, + dd: processRelativeTime$7, + M: processRelativeTime$7, + MM: processRelativeTime$7, + y: processRelativeTime$7, + yy: processRelativeTime$7, + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('sq', { + months: 'Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor'.split( + '_' + ), + monthsShort: 'Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj'.split('_'), + weekdays: 'E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë'.split( + '_' + ), + weekdaysShort: 'Die_Hën_Mar_Mër_Enj_Pre_Sht'.split('_'), + weekdaysMin: 'D_H_Ma_Më_E_P_Sh'.split('_'), + weekdaysParseExact: true, + meridiemParse: /PD|MD/, + isPM: function (input) { + return input.charAt(0) === 'M'; + }, + meridiem: function (hours, minutes, isLower) { + return hours < 12 ? 'PD' : 'MD'; + }, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Sot në] LT', + nextDay: '[Nesër në] LT', + nextWeek: 'dddd [në] LT', + lastDay: '[Dje në] LT', + lastWeek: 'dddd [e kaluar në] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'në %s', + past: '%s më parë', + s: 'disa sekonda', + ss: '%d sekonda', + m: 'një minutë', + mm: '%d minuta', + h: 'një orë', + hh: '%d orë', + d: 'një ditë', + dd: '%d ditë', + M: 'një muaj', + MM: '%d muaj', + y: 'një vit', + yy: '%d vite', + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var translator$1 = { + words: { + //Different grammatical cases + ss: ['секунда', 'секунде', 'секунди'], + m: ['један минут', 'једне минуте'], + mm: ['минут', 'минуте', 'минута'], + h: ['један сат', 'једног сата'], + hh: ['сат', 'сата', 'сати'], + dd: ['дан', 'дана', 'дана'], + MM: ['месец', 'месеца', 'месеци'], + yy: ['година', 'године', 'година'], + }, + correctGrammaticalCase: function (number, wordKey) { + return number === 1 + ? wordKey[0] + : number >= 2 && number <= 4 + ? wordKey[1] + : wordKey[2]; + }, + translate: function (number, withoutSuffix, key) { + var wordKey = translator$1.words[key]; + if (key.length === 1) { + return withoutSuffix ? wordKey[0] : wordKey[1]; + } else { + return ( + number + + ' ' + + translator$1.correctGrammaticalCase(number, wordKey) + ); + } + }, + }; + + moment.defineLocale('sr-cyrl', { + months: 'јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар'.split( + '_' + ), + monthsShort: 'јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'недеља_понедељак_уторак_среда_четвртак_петак_субота'.split('_'), + weekdaysShort: 'нед._пон._уто._сре._чет._пет._суб.'.split('_'), + weekdaysMin: 'не_по_ут_ср_че_пе_су'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY H:mm', + LLLL: 'dddd, D. MMMM YYYY H:mm', + }, + calendar: { + sameDay: '[данас у] LT', + nextDay: '[сутра у] LT', + nextWeek: function () { + switch (this.day()) { + case 0: + return '[у] [недељу] [у] LT'; + case 3: + return '[у] [среду] [у] LT'; + case 6: + return '[у] [суботу] [у] LT'; + case 1: + case 2: + case 4: + case 5: + return '[у] dddd [у] LT'; + } + }, + lastDay: '[јуче у] LT', + lastWeek: function () { + var lastWeekDays = [ + '[прошле] [недеље] [у] LT', + '[прошлог] [понедељка] [у] LT', + '[прошлог] [уторка] [у] LT', + '[прошле] [среде] [у] LT', + '[прошлог] [четвртка] [у] LT', + '[прошлог] [петка] [у] LT', + '[прошле] [суботе] [у] LT', + ]; + return lastWeekDays[this.day()]; + }, + sameElse: 'L', + }, + relativeTime: { + future: 'за %s', + past: 'пре %s', + s: 'неколико секунди', + ss: translator$1.translate, + m: translator$1.translate, + mm: translator$1.translate, + h: translator$1.translate, + hh: translator$1.translate, + d: 'дан', + dd: translator$1.translate, + M: 'месец', + MM: translator$1.translate, + y: 'годину', + yy: translator$1.translate, + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var translator$2 = { + words: { + //Different grammatical cases + ss: ['sekunda', 'sekunde', 'sekundi'], + m: ['jedan minut', 'jedne minute'], + mm: ['minut', 'minute', 'minuta'], + h: ['jedan sat', 'jednog sata'], + hh: ['sat', 'sata', 'sati'], + dd: ['dan', 'dana', 'dana'], + MM: ['mesec', 'meseca', 'meseci'], + yy: ['godina', 'godine', 'godina'], + }, + correctGrammaticalCase: function (number, wordKey) { + return number === 1 + ? wordKey[0] + : number >= 2 && number <= 4 + ? wordKey[1] + : wordKey[2]; + }, + translate: function (number, withoutSuffix, key) { + var wordKey = translator$2.words[key]; + if (key.length === 1) { + return withoutSuffix ? wordKey[0] : wordKey[1]; + } else { + return ( + number + + ' ' + + translator$2.correctGrammaticalCase(number, wordKey) + ); + } + }, + }; + + moment.defineLocale('sr', { + months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split( + '_' + ), + monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota'.split( + '_' + ), + weekdaysShort: 'ned._pon._uto._sre._čet._pet._sub.'.split('_'), + weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY H:mm', + LLLL: 'dddd, D. MMMM YYYY H:mm', + }, + calendar: { + sameDay: '[danas u] LT', + nextDay: '[sutra u] LT', + nextWeek: function () { + switch (this.day()) { + case 0: + return '[u] [nedelju] [u] LT'; + case 3: + return '[u] [sredu] [u] LT'; + case 6: + return '[u] [subotu] [u] LT'; + case 1: + case 2: + case 4: + case 5: + return '[u] dddd [u] LT'; + } + }, + lastDay: '[juče u] LT', + lastWeek: function () { + var lastWeekDays = [ + '[prošle] [nedelje] [u] LT', + '[prošlog] [ponedeljka] [u] LT', + '[prošlog] [utorka] [u] LT', + '[prošle] [srede] [u] LT', + '[prošlog] [četvrtka] [u] LT', + '[prošlog] [petka] [u] LT', + '[prošle] [subote] [u] LT', + ]; + return lastWeekDays[this.day()]; + }, + sameElse: 'L', + }, + relativeTime: { + future: 'za %s', + past: 'pre %s', + s: 'nekoliko sekundi', + ss: translator$2.translate, + m: translator$2.translate, + mm: translator$2.translate, + h: translator$2.translate, + hh: translator$2.translate, + d: 'dan', + dd: translator$2.translate, + M: 'mesec', + MM: translator$2.translate, + y: 'godinu', + yy: translator$2.translate, + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('ss', { + months: "Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni".split( + '_' + ), + monthsShort: 'Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo'.split('_'), + weekdays: 'Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo'.split( + '_' + ), + weekdaysShort: 'Lis_Umb_Lsb_Les_Lsi_Lsh_Umg'.split('_'), + weekdaysMin: 'Li_Us_Lb_Lt_Ls_Lh_Ug'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'h:mm A', + LTS: 'h:mm:ss A', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY h:mm A', + LLLL: 'dddd, D MMMM YYYY h:mm A', + }, + calendar: { + sameDay: '[Namuhla nga] LT', + nextDay: '[Kusasa nga] LT', + nextWeek: 'dddd [nga] LT', + lastDay: '[Itolo nga] LT', + lastWeek: 'dddd [leliphelile] [nga] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'nga %s', + past: 'wenteka nga %s', + s: 'emizuzwana lomcane', + ss: '%d mzuzwana', + m: 'umzuzu', + mm: '%d emizuzu', + h: 'lihora', + hh: '%d emahora', + d: 'lilanga', + dd: '%d emalanga', + M: 'inyanga', + MM: '%d tinyanga', + y: 'umnyaka', + yy: '%d iminyaka', + }, + meridiemParse: /ekuseni|emini|entsambama|ebusuku/, + meridiem: function (hours, minutes, isLower) { + if (hours < 11) { + return 'ekuseni'; + } else if (hours < 15) { + return 'emini'; + } else if (hours < 19) { + return 'entsambama'; + } else { + return 'ebusuku'; + } + }, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'ekuseni') { + return hour; + } else if (meridiem === 'emini') { + return hour >= 11 ? hour : hour + 12; + } else if (meridiem === 'entsambama' || meridiem === 'ebusuku') { + if (hour === 0) { + return 0; + } + return hour + 12; + } + }, + dayOfMonthOrdinalParse: /\d{1,2}/, + ordinal: '%d', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('sv', { + months: 'januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december'.split( + '_' + ), + monthsShort: 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'), + weekdays: 'söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag'.split('_'), + weekdaysShort: 'sön_mån_tis_ons_tor_fre_lör'.split('_'), + weekdaysMin: 'sö_må_ti_on_to_fr_lö'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'YYYY-MM-DD', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY [kl.] HH:mm', + LLLL: 'dddd D MMMM YYYY [kl.] HH:mm', + lll: 'D MMM YYYY HH:mm', + llll: 'ddd D MMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Idag] LT', + nextDay: '[Imorgon] LT', + lastDay: '[Igår] LT', + nextWeek: '[På] dddd LT', + lastWeek: '[I] dddd[s] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'om %s', + past: 'för %s sedan', + s: 'några sekunder', + ss: '%d sekunder', + m: 'en minut', + mm: '%d minuter', + h: 'en timme', + hh: '%d timmar', + d: 'en dag', + dd: '%d dagar', + M: 'en månad', + MM: '%d månader', + y: 'ett år', + yy: '%d år', + }, + dayOfMonthOrdinalParse: /\d{1,2}(\:e|\:a)/, + ordinal: function (number) { + var b = number % 10, + output = + ~~((number % 100) / 10) === 1 + ? ':e' + : b === 1 + ? ':a' + : b === 2 + ? ':a' + : b === 3 + ? ':e' + : ':e'; + return number + output; + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('sw', { + months: 'Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba'.split( + '_' + ), + monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des'.split('_'), + weekdays: 'Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi'.split( + '_' + ), + weekdaysShort: 'Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos'.split('_'), + weekdaysMin: 'J2_J3_J4_J5_Al_Ij_J1'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'hh:mm A', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[leo saa] LT', + nextDay: '[kesho saa] LT', + nextWeek: '[wiki ijayo] dddd [saat] LT', + lastDay: '[jana] LT', + lastWeek: '[wiki iliyopita] dddd [saat] LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s baadaye', + past: 'tokea %s', + s: 'hivi punde', + ss: 'sekunde %d', + m: 'dakika moja', + mm: 'dakika %d', + h: 'saa limoja', + hh: 'masaa %d', + d: 'siku moja', + dd: 'siku %d', + M: 'mwezi mmoja', + MM: 'miezi %d', + y: 'mwaka mmoja', + yy: 'miaka %d', + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var symbolMap$f = { + '1': '௧', + '2': '௨', + '3': '௩', + '4': '௪', + '5': '௫', + '6': '௬', + '7': '௭', + '8': '௮', + '9': '௯', + '0': '௦', + }, + numberMap$e = { + '௧': '1', + '௨': '2', + '௩': '3', + '௪': '4', + '௫': '5', + '௬': '6', + '௭': '7', + '௮': '8', + '௯': '9', + '௦': '0', + }; + + moment.defineLocale('ta', { + months: 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split( + '_' + ), + monthsShort: 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split( + '_' + ), + weekdays: 'ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை'.split( + '_' + ), + weekdaysShort: 'ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி'.split( + '_' + ), + weekdaysMin: 'ஞா_தி_செ_பு_வி_வெ_ச'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY, HH:mm', + LLLL: 'dddd, D MMMM YYYY, HH:mm', + }, + calendar: { + sameDay: '[இன்று] LT', + nextDay: '[நாளை] LT', + nextWeek: 'dddd, LT', + lastDay: '[நேற்று] LT', + lastWeek: '[கடந்த வாரம்] dddd, LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s இல்', + past: '%s முன்', + s: 'ஒரு சில விநாடிகள்', + ss: '%d விநாடிகள்', + m: 'ஒரு நிமிடம்', + mm: '%d நிமிடங்கள்', + h: 'ஒரு மணி நேரம்', + hh: '%d மணி நேரம்', + d: 'ஒரு நாள்', + dd: '%d நாட்கள்', + M: 'ஒரு மாதம்', + MM: '%d மாதங்கள்', + y: 'ஒரு வருடம்', + yy: '%d ஆண்டுகள்', + }, + dayOfMonthOrdinalParse: /\d{1,2}வது/, + ordinal: function (number) { + return number + 'வது'; + }, + preparse: function (string) { + return string.replace(/[௧௨௩௪௫௬௭௮௯௦]/g, function (match) { + return numberMap$e[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$f[match]; + }); + }, + // refer http://ta.wikipedia.org/s/1er1 + meridiemParse: /யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/, + meridiem: function (hour, minute, isLower) { + if (hour < 2) { + return ' யாமம்'; + } else if (hour < 6) { + return ' வைகறை'; // வைகறை + } else if (hour < 10) { + return ' காலை'; // காலை + } else if (hour < 14) { + return ' நண்பகல்'; // நண்பகல் + } else if (hour < 18) { + return ' எற்பாடு'; // எற்பாடு + } else if (hour < 22) { + return ' மாலை'; // மாலை + } else { + return ' யாமம்'; + } + }, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'யாமம்') { + return hour < 2 ? hour : hour + 12; + } else if (meridiem === 'வைகறை' || meridiem === 'காலை') { + return hour; + } else if (meridiem === 'நண்பகல்') { + return hour >= 10 ? hour : hour + 12; + } else { + return hour + 12; + } + }, + week: { + dow: 0, // Sunday is the first day of the week. + doy: 6, // The week that contains Jan 6th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('te', { + months: 'జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జులై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్'.split( + '_' + ), + monthsShort: 'జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జులై_ఆగ._సెప్._అక్టో._నవ._డిసె.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం'.split( + '_' + ), + weekdaysShort: 'ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని'.split('_'), + weekdaysMin: 'ఆ_సో_మం_బు_గు_శు_శ'.split('_'), + longDateFormat: { + LT: 'A h:mm', + LTS: 'A h:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY, A h:mm', + LLLL: 'dddd, D MMMM YYYY, A h:mm', + }, + calendar: { + sameDay: '[నేడు] LT', + nextDay: '[రేపు] LT', + nextWeek: 'dddd, LT', + lastDay: '[నిన్న] LT', + lastWeek: '[గత] dddd, LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s లో', + past: '%s క్రితం', + s: 'కొన్ని క్షణాలు', + ss: '%d సెకన్లు', + m: 'ఒక నిమిషం', + mm: '%d నిమిషాలు', + h: 'ఒక గంట', + hh: '%d గంటలు', + d: 'ఒక రోజు', + dd: '%d రోజులు', + M: 'ఒక నెల', + MM: '%d నెలలు', + y: 'ఒక సంవత్సరం', + yy: '%d సంవత్సరాలు', + }, + dayOfMonthOrdinalParse: /\d{1,2}వ/, + ordinal: '%dవ', + meridiemParse: /రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'రాత్రి') { + return hour < 4 ? hour : hour + 12; + } else if (meridiem === 'ఉదయం') { + return hour; + } else if (meridiem === 'మధ్యాహ్నం') { + return hour >= 10 ? hour : hour + 12; + } else if (meridiem === 'సాయంత్రం') { + return hour + 12; + } + }, + meridiem: function (hour, minute, isLower) { + if (hour < 4) { + return 'రాత్రి'; + } else if (hour < 10) { + return 'ఉదయం'; + } else if (hour < 17) { + return 'మధ్యాహ్నం'; + } else if (hour < 20) { + return 'సాయంత్రం'; + } else { + return 'రాత్రి'; + } + }, + week: { + dow: 0, // Sunday is the first day of the week. + doy: 6, // The week that contains Jan 6th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('tet', { + months: 'Janeiru_Fevereiru_Marsu_Abril_Maiu_Juñu_Jullu_Agustu_Setembru_Outubru_Novembru_Dezembru'.split( + '_' + ), + monthsShort: 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'), + weekdays: 'Domingu_Segunda_Tersa_Kuarta_Kinta_Sesta_Sabadu'.split('_'), + weekdaysShort: 'Dom_Seg_Ters_Kua_Kint_Sest_Sab'.split('_'), + weekdaysMin: 'Do_Seg_Te_Ku_Ki_Ses_Sa'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Ohin iha] LT', + nextDay: '[Aban iha] LT', + nextWeek: 'dddd [iha] LT', + lastDay: '[Horiseik iha] LT', + lastWeek: 'dddd [semana kotuk] [iha] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'iha %s', + past: '%s liuba', + s: 'segundu balun', + ss: 'segundu %d', + m: 'minutu ida', + mm: 'minutu %d', + h: 'oras ida', + hh: 'oras %d', + d: 'loron ida', + dd: 'loron %d', + M: 'fulan ida', + MM: 'fulan %d', + y: 'tinan ida', + yy: 'tinan %d', + }, + dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, + ordinal: function (number) { + var b = number % 10, + output = + ~~((number % 100) / 10) === 1 + ? 'th' + : b === 1 + ? 'st' + : b === 2 + ? 'nd' + : b === 3 + ? 'rd' + : 'th'; + return number + output; + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var suffixes$3 = { + 0: '-ум', + 1: '-ум', + 2: '-юм', + 3: '-юм', + 4: '-ум', + 5: '-ум', + 6: '-ум', + 7: '-ум', + 8: '-ум', + 9: '-ум', + 10: '-ум', + 12: '-ум', + 13: '-ум', + 20: '-ум', + 30: '-юм', + 40: '-ум', + 50: '-ум', + 60: '-ум', + 70: '-ум', + 80: '-ум', + 90: '-ум', + 100: '-ум', + }; + + moment.defineLocale('tg', { + months: 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split( + '_' + ), + monthsShort: 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'), + weekdays: 'якшанбе_душанбе_сешанбе_чоршанбе_панҷшанбе_ҷумъа_шанбе'.split( + '_' + ), + weekdaysShort: 'яшб_дшб_сшб_чшб_пшб_ҷум_шнб'.split('_'), + weekdaysMin: 'яш_дш_сш_чш_пш_ҷм_шб'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Имрӯз соати] LT', + nextDay: '[Пагоҳ соати] LT', + lastDay: '[Дирӯз соати] LT', + nextWeek: 'dddd[и] [ҳафтаи оянда соати] LT', + lastWeek: 'dddd[и] [ҳафтаи гузашта соати] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'баъди %s', + past: '%s пеш', + s: 'якчанд сония', + m: 'як дақиқа', + mm: '%d дақиқа', + h: 'як соат', + hh: '%d соат', + d: 'як рӯз', + dd: '%d рӯз', + M: 'як моҳ', + MM: '%d моҳ', + y: 'як сол', + yy: '%d сол', + }, + meridiemParse: /шаб|субҳ|рӯз|бегоҳ/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'шаб') { + return hour < 4 ? hour : hour + 12; + } else if (meridiem === 'субҳ') { + return hour; + } else if (meridiem === 'рӯз') { + return hour >= 11 ? hour : hour + 12; + } else if (meridiem === 'бегоҳ') { + return hour + 12; + } + }, + meridiem: function (hour, minute, isLower) { + if (hour < 4) { + return 'шаб'; + } else if (hour < 11) { + return 'субҳ'; + } else if (hour < 16) { + return 'рӯз'; + } else if (hour < 19) { + return 'бегоҳ'; + } else { + return 'шаб'; + } + }, + dayOfMonthOrdinalParse: /\d{1,2}-(ум|юм)/, + ordinal: function (number) { + var a = number % 10, + b = number >= 100 ? 100 : null; + return number + (suffixes$3[number] || suffixes$3[a] || suffixes$3[b]); + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 1th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('th', { + months: 'มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม'.split( + '_' + ), + monthsShort: 'ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์'.split('_'), + weekdaysShort: 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์'.split('_'), // yes, three characters difference + weekdaysMin: 'อา._จ._อ._พ._พฤ._ศ._ส.'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY เวลา H:mm', + LLLL: 'วันddddที่ D MMMM YYYY เวลา H:mm', + }, + meridiemParse: /ก่อนเที่ยง|หลังเที่ยง/, + isPM: function (input) { + return input === 'หลังเที่ยง'; + }, + meridiem: function (hour, minute, isLower) { + if (hour < 12) { + return 'ก่อนเที่ยง'; + } else { + return 'หลังเที่ยง'; + } + }, + calendar: { + sameDay: '[วันนี้ เวลา] LT', + nextDay: '[พรุ่งนี้ เวลา] LT', + nextWeek: 'dddd[หน้า เวลา] LT', + lastDay: '[เมื่อวานนี้ เวลา] LT', + lastWeek: '[วัน]dddd[ที่แล้ว เวลา] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'อีก %s', + past: '%sที่แล้ว', + s: 'ไม่กี่วินาที', + ss: '%d วินาที', + m: '1 นาที', + mm: '%d นาที', + h: '1 ชั่วโมง', + hh: '%d ชั่วโมง', + d: '1 วัน', + dd: '%d วัน', + M: '1 เดือน', + MM: '%d เดือน', + y: '1 ปี', + yy: '%d ปี', + }, + }); + + //! moment.js locale configuration + + var suffixes$4 = { + 1: "'inji", + 5: "'inji", + 8: "'inji", + 70: "'inji", + 80: "'inji", + 2: "'nji", + 7: "'nji", + 20: "'nji", + 50: "'nji", + 3: "'ünji", + 4: "'ünji", + 100: "'ünji", + 6: "'njy", + 9: "'unjy", + 10: "'unjy", + 30: "'unjy", + 60: "'ynjy", + 90: "'ynjy", + }; + + moment.defineLocale('tk', { + months: 'Ýanwar_Fewral_Mart_Aprel_Maý_Iýun_Iýul_Awgust_Sentýabr_Oktýabr_Noýabr_Dekabr'.split( + '_' + ), + monthsShort: 'Ýan_Few_Mar_Apr_Maý_Iýn_Iýl_Awg_Sen_Okt_Noý_Dek'.split('_'), + weekdays: 'Ýekşenbe_Duşenbe_Sişenbe_Çarşenbe_Penşenbe_Anna_Şenbe'.split( + '_' + ), + weekdaysShort: 'Ýek_Duş_Siş_Çar_Pen_Ann_Şen'.split('_'), + weekdaysMin: 'Ýk_Dş_Sş_Çr_Pn_An_Şn'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[bugün sagat] LT', + nextDay: '[ertir sagat] LT', + nextWeek: '[indiki] dddd [sagat] LT', + lastDay: '[düýn] LT', + lastWeek: '[geçen] dddd [sagat] LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s soň', + past: '%s öň', + s: 'birnäçe sekunt', + m: 'bir minut', + mm: '%d minut', + h: 'bir sagat', + hh: '%d sagat', + d: 'bir gün', + dd: '%d gün', + M: 'bir aý', + MM: '%d aý', + y: 'bir ýyl', + yy: '%d ýyl', + }, + ordinal: function (number, period) { + switch (period) { + case 'd': + case 'D': + case 'Do': + case 'DD': + return number; + default: + if (number === 0) { + // special case for zero + return number + "'unjy"; + } + var a = number % 10, + b = (number % 100) - a, + c = number >= 100 ? 100 : null; + return number + (suffixes$4[a] || suffixes$4[b] || suffixes$4[c]); + } + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('tl-ph', { + months: 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split( + '_' + ), + monthsShort: 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'), + weekdays: 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split( + '_' + ), + weekdaysShort: 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'), + weekdaysMin: 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'MM/D/YYYY', + LL: 'MMMM D, YYYY', + LLL: 'MMMM D, YYYY HH:mm', + LLLL: 'dddd, MMMM DD, YYYY HH:mm', + }, + calendar: { + sameDay: 'LT [ngayong araw]', + nextDay: '[Bukas ng] LT', + nextWeek: 'LT [sa susunod na] dddd', + lastDay: 'LT [kahapon]', + lastWeek: 'LT [noong nakaraang] dddd', + sameElse: 'L', + }, + relativeTime: { + future: 'sa loob ng %s', + past: '%s ang nakalipas', + s: 'ilang segundo', + ss: '%d segundo', + m: 'isang minuto', + mm: '%d minuto', + h: 'isang oras', + hh: '%d oras', + d: 'isang araw', + dd: '%d araw', + M: 'isang buwan', + MM: '%d buwan', + y: 'isang taon', + yy: '%d taon', + }, + dayOfMonthOrdinalParse: /\d{1,2}/, + ordinal: function (number) { + return number; + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var numbersNouns = 'pagh_wa’_cha’_wej_loS_vagh_jav_Soch_chorgh_Hut'.split('_'); + + function translateFuture(output) { + var time = output; + time = + output.indexOf('jaj') !== -1 + ? time.slice(0, -3) + 'leS' + : output.indexOf('jar') !== -1 + ? time.slice(0, -3) + 'waQ' + : output.indexOf('DIS') !== -1 + ? time.slice(0, -3) + 'nem' + : time + ' pIq'; + return time; + } + + function translatePast(output) { + var time = output; + time = + output.indexOf('jaj') !== -1 + ? time.slice(0, -3) + 'Hu’' + : output.indexOf('jar') !== -1 + ? time.slice(0, -3) + 'wen' + : output.indexOf('DIS') !== -1 + ? time.slice(0, -3) + 'ben' + : time + ' ret'; + return time; + } + + function translate$a(number, withoutSuffix, string, isFuture) { + var numberNoun = numberAsNoun(number); + switch (string) { + case 'ss': + return numberNoun + ' lup'; + case 'mm': + return numberNoun + ' tup'; + case 'hh': + return numberNoun + ' rep'; + case 'dd': + return numberNoun + ' jaj'; + case 'MM': + return numberNoun + ' jar'; + case 'yy': + return numberNoun + ' DIS'; + } + } + + function numberAsNoun(number) { + var hundred = Math.floor((number % 1000) / 100), + ten = Math.floor((number % 100) / 10), + one = number % 10, + word = ''; + if (hundred > 0) { + word += numbersNouns[hundred] + 'vatlh'; + } + if (ten > 0) { + word += (word !== '' ? ' ' : '') + numbersNouns[ten] + 'maH'; + } + if (one > 0) { + word += (word !== '' ? ' ' : '') + numbersNouns[one]; + } + return word === '' ? 'pagh' : word; + } + + moment.defineLocale('tlh', { + months: 'tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’'.split( + '_' + ), + monthsShort: 'jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split( + '_' + ), + weekdaysShort: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split( + '_' + ), + weekdaysMin: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split( + '_' + ), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[DaHjaj] LT', + nextDay: '[wa’leS] LT', + nextWeek: 'LLL', + lastDay: '[wa’Hu’] LT', + lastWeek: 'LLL', + sameElse: 'L', + }, + relativeTime: { + future: translateFuture, + past: translatePast, + s: 'puS lup', + ss: translate$a, + m: 'wa’ tup', + mm: translate$a, + h: 'wa’ rep', + hh: translate$a, + d: 'wa’ jaj', + dd: translate$a, + M: 'wa’ jar', + MM: translate$a, + y: 'wa’ DIS', + yy: translate$a, + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var suffixes$5 = { + 1: "'inci", + 5: "'inci", + 8: "'inci", + 70: "'inci", + 80: "'inci", + 2: "'nci", + 7: "'nci", + 20: "'nci", + 50: "'nci", + 3: "'üncü", + 4: "'üncü", + 100: "'üncü", + 6: "'ncı", + 9: "'uncu", + 10: "'uncu", + 30: "'uncu", + 60: "'ıncı", + 90: "'ıncı", + }; + + moment.defineLocale('tr', { + months: 'Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık'.split( + '_' + ), + monthsShort: 'Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara'.split('_'), + weekdays: 'Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi'.split( + '_' + ), + weekdaysShort: 'Paz_Pts_Sal_Çar_Per_Cum_Cts'.split('_'), + weekdaysMin: 'Pz_Pt_Sa_Ça_Pe_Cu_Ct'.split('_'), + meridiem: function (hours, minutes, isLower) { + if (hours < 12) { + return isLower ? 'öö' : 'ÖÖ'; + } else { + return isLower ? 'ös' : 'ÖS'; + } + }, + meridiemParse: /öö|ÖÖ|ös|ÖS/, + isPM: function (input) { + return input === 'ös' || input === 'ÖS'; + }, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[bugün saat] LT', + nextDay: '[yarın saat] LT', + nextWeek: '[gelecek] dddd [saat] LT', + lastDay: '[dün] LT', + lastWeek: '[geçen] dddd [saat] LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s sonra', + past: '%s önce', + s: 'birkaç saniye', + ss: '%d saniye', + m: 'bir dakika', + mm: '%d dakika', + h: 'bir saat', + hh: '%d saat', + d: 'bir gün', + dd: '%d gün', + M: 'bir ay', + MM: '%d ay', + y: 'bir yıl', + yy: '%d yıl', + }, + ordinal: function (number, period) { + switch (period) { + case 'd': + case 'D': + case 'Do': + case 'DD': + return number; + default: + if (number === 0) { + // special case for zero + return number + "'ıncı"; + } + var a = number % 10, + b = (number % 100) - a, + c = number >= 100 ? 100 : null; + return number + (suffixes$5[a] || suffixes$5[b] || suffixes$5[c]); + } + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + // After the year there should be a slash and the amount of years since December 26, 1979 in Roman numerals. + // This is currently too difficult (maybe even impossible) to add. + moment.defineLocale('tzl', { + months: 'Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar'.split( + '_' + ), + monthsShort: 'Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec'.split('_'), + weekdays: 'Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi'.split('_'), + weekdaysShort: 'Súl_Lún_Mai_Már_Xhú_Vié_Sát'.split('_'), + weekdaysMin: 'Sú_Lú_Ma_Má_Xh_Vi_Sá'.split('_'), + longDateFormat: { + LT: 'HH.mm', + LTS: 'HH.mm.ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM [dallas] YYYY', + LLL: 'D. MMMM [dallas] YYYY HH.mm', + LLLL: 'dddd, [li] D. MMMM [dallas] YYYY HH.mm', + }, + meridiemParse: /d\'o|d\'a/i, + isPM: function (input) { + return "d'o" === input.toLowerCase(); + }, + meridiem: function (hours, minutes, isLower) { + if (hours > 11) { + return isLower ? "d'o" : "D'O"; + } else { + return isLower ? "d'a" : "D'A"; + } + }, + calendar: { + sameDay: '[oxhi à] LT', + nextDay: '[demà à] LT', + nextWeek: 'dddd [à] LT', + lastDay: '[ieiri à] LT', + lastWeek: '[sür el] dddd [lasteu à] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'osprei %s', + past: 'ja%s', + s: processRelativeTime$8, + ss: processRelativeTime$8, + m: processRelativeTime$8, + mm: processRelativeTime$8, + h: processRelativeTime$8, + hh: processRelativeTime$8, + d: processRelativeTime$8, + dd: processRelativeTime$8, + M: processRelativeTime$8, + MM: processRelativeTime$8, + y: processRelativeTime$8, + yy: processRelativeTime$8, + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + function processRelativeTime$8(number, withoutSuffix, key, isFuture) { + var format = { + s: ['viensas secunds', "'iensas secunds"], + ss: [number + ' secunds', '' + number + ' secunds'], + m: ["'n míut", "'iens míut"], + mm: [number + ' míuts', '' + number + ' míuts'], + h: ["'n þora", "'iensa þora"], + hh: [number + ' þoras', '' + number + ' þoras'], + d: ["'n ziua", "'iensa ziua"], + dd: [number + ' ziuas', '' + number + ' ziuas'], + M: ["'n mes", "'iens mes"], + MM: [number + ' mesen', '' + number + ' mesen'], + y: ["'n ar", "'iens ar"], + yy: [number + ' ars', '' + number + ' ars'], + }; + return isFuture + ? format[key][0] + : withoutSuffix + ? format[key][0] + : format[key][1]; + } + + //! moment.js locale configuration + + moment.defineLocale('tzm-latn', { + months: 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split( + '_' + ), + monthsShort: 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split( + '_' + ), + weekdays: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'), + weekdaysShort: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'), + weekdaysMin: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[asdkh g] LT', + nextDay: '[aska g] LT', + nextWeek: 'dddd [g] LT', + lastDay: '[assant g] LT', + lastWeek: 'dddd [g] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'dadkh s yan %s', + past: 'yan %s', + s: 'imik', + ss: '%d imik', + m: 'minuḍ', + mm: '%d minuḍ', + h: 'saɛa', + hh: '%d tassaɛin', + d: 'ass', + dd: '%d ossan', + M: 'ayowr', + MM: '%d iyyirn', + y: 'asgas', + yy: '%d isgasn', + }, + week: { + dow: 6, // Saturday is the first day of the week. + doy: 12, // The week that contains Jan 12th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('tzm', { + months: 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split( + '_' + ), + monthsShort: 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split( + '_' + ), + weekdays: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'), + weekdaysShort: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'), + weekdaysMin: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[ⴰⵙⴷⵅ ⴴ] LT', + nextDay: '[ⴰⵙⴽⴰ ⴴ] LT', + nextWeek: 'dddd [ⴴ] LT', + lastDay: '[ⴰⵚⴰⵏⵜ ⴴ] LT', + lastWeek: 'dddd [ⴴ] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s', + past: 'ⵢⴰⵏ %s', + s: 'ⵉⵎⵉⴽ', + ss: '%d ⵉⵎⵉⴽ', + m: 'ⵎⵉⵏⵓⴺ', + mm: '%d ⵎⵉⵏⵓⴺ', + h: 'ⵙⴰⵄⴰ', + hh: '%d ⵜⴰⵙⵙⴰⵄⵉⵏ', + d: 'ⴰⵙⵙ', + dd: '%d oⵙⵙⴰⵏ', + M: 'ⴰⵢoⵓⵔ', + MM: '%d ⵉⵢⵢⵉⵔⵏ', + y: 'ⴰⵙⴳⴰⵙ', + yy: '%d ⵉⵙⴳⴰⵙⵏ', + }, + week: { + dow: 6, // Saturday is the first day of the week. + doy: 12, // The week that contains Jan 12th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('ug-cn', { + months: 'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split( + '_' + ), + monthsShort: 'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split( + '_' + ), + weekdays: 'يەكشەنبە_دۈشەنبە_سەيشەنبە_چارشەنبە_پەيشەنبە_جۈمە_شەنبە'.split( + '_' + ), + weekdaysShort: 'يە_دۈ_سە_چا_پە_جۈ_شە'.split('_'), + weekdaysMin: 'يە_دۈ_سە_چا_پە_جۈ_شە'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'YYYY-MM-DD', + LL: 'YYYY-يىلىM-ئاينىڭD-كۈنى', + LLL: 'YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm', + LLLL: 'dddd، YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm', + }, + meridiemParse: /يېرىم كېچە|سەھەر|چۈشتىن بۇرۇن|چۈش|چۈشتىن كېيىن|كەچ/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if ( + meridiem === 'يېرىم كېچە' || + meridiem === 'سەھەر' || + meridiem === 'چۈشتىن بۇرۇن' + ) { + return hour; + } else if (meridiem === 'چۈشتىن كېيىن' || meridiem === 'كەچ') { + return hour + 12; + } else { + return hour >= 11 ? hour : hour + 12; + } + }, + meridiem: function (hour, minute, isLower) { + var hm = hour * 100 + minute; + if (hm < 600) { + return 'يېرىم كېچە'; + } else if (hm < 900) { + return 'سەھەر'; + } else if (hm < 1130) { + return 'چۈشتىن بۇرۇن'; + } else if (hm < 1230) { + return 'چۈش'; + } else if (hm < 1800) { + return 'چۈشتىن كېيىن'; + } else { + return 'كەچ'; + } + }, + calendar: { + sameDay: '[بۈگۈن سائەت] LT', + nextDay: '[ئەتە سائەت] LT', + nextWeek: '[كېلەركى] dddd [سائەت] LT', + lastDay: '[تۆنۈگۈن] LT', + lastWeek: '[ئالدىنقى] dddd [سائەت] LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s كېيىن', + past: '%s بۇرۇن', + s: 'نەچچە سېكونت', + ss: '%d سېكونت', + m: 'بىر مىنۇت', + mm: '%d مىنۇت', + h: 'بىر سائەت', + hh: '%d سائەت', + d: 'بىر كۈن', + dd: '%d كۈن', + M: 'بىر ئاي', + MM: '%d ئاي', + y: 'بىر يىل', + yy: '%d يىل', + }, + + dayOfMonthOrdinalParse: /\d{1,2}(-كۈنى|-ئاي|-ھەپتە)/, + ordinal: function (number, period) { + switch (period) { + case 'd': + case 'D': + case 'DDD': + return number + '-كۈنى'; + case 'w': + case 'W': + return number + '-ھەپتە'; + default: + return number; + } + }, + preparse: function (string) { + return string.replace(/،/g, ','); + }, + postformat: function (string) { + return string.replace(/,/g, '،'); + }, + week: { + // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效 + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 1st is the first week of the year. + }, + }); + + //! moment.js locale configuration + + function plural$6(word, num) { + var forms = word.split('_'); + return num % 10 === 1 && num % 100 !== 11 + ? forms[0] + : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) + ? forms[1] + : forms[2]; + } + function relativeTimeWithPlural$4(number, withoutSuffix, key) { + var format = { + ss: withoutSuffix ? 'секунда_секунди_секунд' : 'секунду_секунди_секунд', + mm: withoutSuffix ? 'хвилина_хвилини_хвилин' : 'хвилину_хвилини_хвилин', + hh: withoutSuffix ? 'година_години_годин' : 'годину_години_годин', + dd: 'день_дні_днів', + MM: 'місяць_місяці_місяців', + yy: 'рік_роки_років', + }; + if (key === 'm') { + return withoutSuffix ? 'хвилина' : 'хвилину'; + } else if (key === 'h') { + return withoutSuffix ? 'година' : 'годину'; + } else { + return number + ' ' + plural$6(format[key], +number); + } + } + function weekdaysCaseReplace(m, format) { + var weekdays = { + nominative: 'неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота'.split( + '_' + ), + accusative: 'неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу'.split( + '_' + ), + genitive: 'неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи'.split( + '_' + ), + }, + nounCase; + + if (m === true) { + return weekdays['nominative'] + .slice(1, 7) + .concat(weekdays['nominative'].slice(0, 1)); + } + if (!m) { + return weekdays['nominative']; + } + + nounCase = /(\[[ВвУу]\]) ?dddd/.test(format) + ? 'accusative' + : /\[?(?:минулої|наступної)? ?\] ?dddd/.test(format) + ? 'genitive' + : 'nominative'; + return weekdays[nounCase][m.day()]; + } + function processHoursFunction(str) { + return function () { + return str + 'о' + (this.hours() === 11 ? 'б' : '') + '] LT'; + }; + } + + moment.defineLocale('uk', { + months: { + format: 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split( + '_' + ), + standalone: 'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split( + '_' + ), + }, + monthsShort: 'січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд'.split( + '_' + ), + weekdays: weekdaysCaseReplace, + weekdaysShort: 'нд_пн_вт_ср_чт_пт_сб'.split('_'), + weekdaysMin: 'нд_пн_вт_ср_чт_пт_сб'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D MMMM YYYY р.', + LLL: 'D MMMM YYYY р., HH:mm', + LLLL: 'dddd, D MMMM YYYY р., HH:mm', + }, + calendar: { + sameDay: processHoursFunction('[Сьогодні '), + nextDay: processHoursFunction('[Завтра '), + lastDay: processHoursFunction('[Вчора '), + nextWeek: processHoursFunction('[У] dddd ['), + lastWeek: function () { + switch (this.day()) { + case 0: + case 3: + case 5: + case 6: + return processHoursFunction('[Минулої] dddd [').call(this); + case 1: + case 2: + case 4: + return processHoursFunction('[Минулого] dddd [').call(this); + } + }, + sameElse: 'L', + }, + relativeTime: { + future: 'за %s', + past: '%s тому', + s: 'декілька секунд', + ss: relativeTimeWithPlural$4, + m: relativeTimeWithPlural$4, + mm: relativeTimeWithPlural$4, + h: 'годину', + hh: relativeTimeWithPlural$4, + d: 'день', + dd: relativeTimeWithPlural$4, + M: 'місяць', + MM: relativeTimeWithPlural$4, + y: 'рік', + yy: relativeTimeWithPlural$4, + }, + // M. E.: those two are virtually unused but a user might want to implement them for his/her website for some reason + meridiemParse: /ночі|ранку|дня|вечора/, + isPM: function (input) { + return /^(дня|вечора)$/.test(input); + }, + meridiem: function (hour, minute, isLower) { + if (hour < 4) { + return 'ночі'; + } else if (hour < 12) { + return 'ранку'; + } else if (hour < 17) { + return 'дня'; + } else { + return 'вечора'; + } + }, + dayOfMonthOrdinalParse: /\d{1,2}-(й|го)/, + ordinal: function (number, period) { + switch (period) { + case 'M': + case 'd': + case 'DDD': + case 'w': + case 'W': + return number + '-й'; + case 'D': + return number + '-го'; + default: + return number; + } + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var months$a = [ + 'جنوری', + 'فروری', + 'مارچ', + 'اپریل', + 'مئی', + 'جون', + 'جولائی', + 'اگست', + 'ستمبر', + 'اکتوبر', + 'نومبر', + 'دسمبر', + ], + days$1 = ['اتوار', 'پیر', 'منگل', 'بدھ', 'جمعرات', 'جمعہ', 'ہفتہ']; + + moment.defineLocale('ur', { + months: months$a, + monthsShort: months$a, + weekdays: days$1, + weekdaysShort: days$1, + weekdaysMin: days$1, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd، D MMMM YYYY HH:mm', + }, + meridiemParse: /صبح|شام/, + isPM: function (input) { + return 'شام' === input; + }, + meridiem: function (hour, minute, isLower) { + if (hour < 12) { + return 'صبح'; + } + return 'شام'; + }, + calendar: { + sameDay: '[آج بوقت] LT', + nextDay: '[کل بوقت] LT', + nextWeek: 'dddd [بوقت] LT', + lastDay: '[گذشتہ روز بوقت] LT', + lastWeek: '[گذشتہ] dddd [بوقت] LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s بعد', + past: '%s قبل', + s: 'چند سیکنڈ', + ss: '%d سیکنڈ', + m: 'ایک منٹ', + mm: '%d منٹ', + h: 'ایک گھنٹہ', + hh: '%d گھنٹے', + d: 'ایک دن', + dd: '%d دن', + M: 'ایک ماہ', + MM: '%d ماہ', + y: 'ایک سال', + yy: '%d سال', + }, + preparse: function (string) { + return string.replace(/،/g, ','); + }, + postformat: function (string) { + return string.replace(/,/g, '،'); + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('uz-latn', { + months: 'Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr'.split( + '_' + ), + monthsShort: 'Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek'.split('_'), + weekdays: 'Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba'.split( + '_' + ), + weekdaysShort: 'Yak_Dush_Sesh_Chor_Pay_Jum_Shan'.split('_'), + weekdaysMin: 'Ya_Du_Se_Cho_Pa_Ju_Sha'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'D MMMM YYYY, dddd HH:mm', + }, + calendar: { + sameDay: '[Bugun soat] LT [da]', + nextDay: '[Ertaga] LT [da]', + nextWeek: 'dddd [kuni soat] LT [da]', + lastDay: '[Kecha soat] LT [da]', + lastWeek: "[O'tgan] dddd [kuni soat] LT [da]", + sameElse: 'L', + }, + relativeTime: { + future: 'Yaqin %s ichida', + past: 'Bir necha %s oldin', + s: 'soniya', + ss: '%d soniya', + m: 'bir daqiqa', + mm: '%d daqiqa', + h: 'bir soat', + hh: '%d soat', + d: 'bir kun', + dd: '%d kun', + M: 'bir oy', + MM: '%d oy', + y: 'bir yil', + yy: '%d yil', + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('uz', { + months: 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split( + '_' + ), + monthsShort: 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'), + weekdays: 'Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба'.split('_'), + weekdaysShort: 'Якш_Душ_Сеш_Чор_Пай_Жум_Шан'.split('_'), + weekdaysMin: 'Як_Ду_Се_Чо_Па_Жу_Ша'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'D MMMM YYYY, dddd HH:mm', + }, + calendar: { + sameDay: '[Бугун соат] LT [да]', + nextDay: '[Эртага] LT [да]', + nextWeek: 'dddd [куни соат] LT [да]', + lastDay: '[Кеча соат] LT [да]', + lastWeek: '[Утган] dddd [куни соат] LT [да]', + sameElse: 'L', + }, + relativeTime: { + future: 'Якин %s ичида', + past: 'Бир неча %s олдин', + s: 'фурсат', + ss: '%d фурсат', + m: 'бир дакика', + mm: '%d дакика', + h: 'бир соат', + hh: '%d соат', + d: 'бир кун', + dd: '%d кун', + M: 'бир ой', + MM: '%d ой', + y: 'бир йил', + yy: '%d йил', + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('vi', { + months: 'tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12'.split( + '_' + ), + monthsShort: 'Thg 01_Thg 02_Thg 03_Thg 04_Thg 05_Thg 06_Thg 07_Thg 08_Thg 09_Thg 10_Thg 11_Thg 12'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy'.split( + '_' + ), + weekdaysShort: 'CN_T2_T3_T4_T5_T6_T7'.split('_'), + weekdaysMin: 'CN_T2_T3_T4_T5_T6_T7'.split('_'), + weekdaysParseExact: true, + meridiemParse: /sa|ch/i, + isPM: function (input) { + return /^ch$/i.test(input); + }, + meridiem: function (hours, minutes, isLower) { + if (hours < 12) { + return isLower ? 'sa' : 'SA'; + } else { + return isLower ? 'ch' : 'CH'; + } + }, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM [năm] YYYY', + LLL: 'D MMMM [năm] YYYY HH:mm', + LLLL: 'dddd, D MMMM [năm] YYYY HH:mm', + l: 'DD/M/YYYY', + ll: 'D MMM YYYY', + lll: 'D MMM YYYY HH:mm', + llll: 'ddd, D MMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Hôm nay lúc] LT', + nextDay: '[Ngày mai lúc] LT', + nextWeek: 'dddd [tuần tới lúc] LT', + lastDay: '[Hôm qua lúc] LT', + lastWeek: 'dddd [tuần trước lúc] LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s tới', + past: '%s trước', + s: 'vài giây', + ss: '%d giây', + m: 'một phút', + mm: '%d phút', + h: 'một giờ', + hh: '%d giờ', + d: 'một ngày', + dd: '%d ngày', + M: 'một tháng', + MM: '%d tháng', + y: 'một năm', + yy: '%d năm', + }, + dayOfMonthOrdinalParse: /\d{1,2}/, + ordinal: function (number) { + return number; + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('x-pseudo', { + months: 'J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér'.split( + '_' + ), + monthsShort: 'J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý'.split( + '_' + ), + weekdaysShort: 'S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát'.split('_'), + weekdaysMin: 'S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[T~ódá~ý át] LT', + nextDay: '[T~ómó~rró~w át] LT', + nextWeek: 'dddd [át] LT', + lastDay: '[Ý~ést~érdá~ý át] LT', + lastWeek: '[L~ást] dddd [át] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'í~ñ %s', + past: '%s á~gó', + s: 'á ~féw ~sécó~ñds', + ss: '%d s~écóñ~ds', + m: 'á ~míñ~úté', + mm: '%d m~íñú~tés', + h: 'á~ñ hó~úr', + hh: '%d h~óúrs', + d: 'á ~dáý', + dd: '%d d~áýs', + M: 'á ~móñ~th', + MM: '%d m~óñt~hs', + y: 'á ~ýéár', + yy: '%d ý~éárs', + }, + dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/, + ordinal: function (number) { + var b = number % 10, + output = + ~~((number % 100) / 10) === 1 + ? 'th' + : b === 1 + ? 'st' + : b === 2 + ? 'nd' + : b === 3 + ? 'rd' + : 'th'; + return number + output; + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('yo', { + months: 'Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀'.split( + '_' + ), + monthsShort: 'Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀'.split('_'), + weekdays: 'Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta'.split('_'), + weekdaysShort: 'Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá'.split('_'), + weekdaysMin: 'Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb'.split('_'), + longDateFormat: { + LT: 'h:mm A', + LTS: 'h:mm:ss A', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY h:mm A', + LLLL: 'dddd, D MMMM YYYY h:mm A', + }, + calendar: { + sameDay: '[Ònì ni] LT', + nextDay: '[Ọ̀la ni] LT', + nextWeek: "dddd [Ọsẹ̀ tón'bọ] [ni] LT", + lastDay: '[Àna ni] LT', + lastWeek: 'dddd [Ọsẹ̀ tólọ́] [ni] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'ní %s', + past: '%s kọjá', + s: 'ìsẹjú aayá die', + ss: 'aayá %d', + m: 'ìsẹjú kan', + mm: 'ìsẹjú %d', + h: 'wákati kan', + hh: 'wákati %d', + d: 'ọjọ́ kan', + dd: 'ọjọ́ %d', + M: 'osù kan', + MM: 'osù %d', + y: 'ọdún kan', + yy: 'ọdún %d', + }, + dayOfMonthOrdinalParse: /ọjọ́\s\d{1,2}/, + ordinal: 'ọjọ́ %d', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('zh-cn', { + months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split( + '_' + ), + monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split( + '_' + ), + weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'), + weekdaysShort: '周日_周一_周二_周三_周四_周五_周六'.split('_'), + weekdaysMin: '日_一_二_三_四_五_六'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'YYYY/MM/DD', + LL: 'YYYY年M月D日', + LLL: 'YYYY年M月D日Ah点mm分', + LLLL: 'YYYY年M月D日ddddAh点mm分', + l: 'YYYY/M/D', + ll: 'YYYY年M月D日', + lll: 'YYYY年M月D日 HH:mm', + llll: 'YYYY年M月D日dddd HH:mm', + }, + meridiemParse: /凌晨|早上|上午|中午|下午|晚上/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') { + return hour; + } else if (meridiem === '下午' || meridiem === '晚上') { + return hour + 12; + } else { + // '中午' + return hour >= 11 ? hour : hour + 12; + } + }, + meridiem: function (hour, minute, isLower) { + var hm = hour * 100 + minute; + if (hm < 600) { + return '凌晨'; + } else if (hm < 900) { + return '早上'; + } else if (hm < 1130) { + return '上午'; + } else if (hm < 1230) { + return '中午'; + } else if (hm < 1800) { + return '下午'; + } else { + return '晚上'; + } + }, + calendar: { + sameDay: '[今天]LT', + nextDay: '[明天]LT', + nextWeek: function (now) { + if (now.week() !== this.week()) { + return '[下]dddLT'; + } else { + return '[本]dddLT'; + } + }, + lastDay: '[昨天]LT', + lastWeek: function (now) { + if (this.week() !== now.week()) { + return '[上]dddLT'; + } else { + return '[本]dddLT'; + } + }, + sameElse: 'L', + }, + dayOfMonthOrdinalParse: /\d{1,2}(日|月|周)/, + ordinal: function (number, period) { + switch (period) { + case 'd': + case 'D': + case 'DDD': + return number + '日'; + case 'M': + return number + '月'; + case 'w': + case 'W': + return number + '周'; + default: + return number; + } + }, + relativeTime: { + future: '%s后', + past: '%s前', + s: '几秒', + ss: '%d 秒', + m: '1 分钟', + mm: '%d 分钟', + h: '1 小时', + hh: '%d 小时', + d: '1 天', + dd: '%d 天', + M: '1 个月', + MM: '%d 个月', + y: '1 年', + yy: '%d 年', + }, + week: { + // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效 + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('zh-hk', { + months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split( + '_' + ), + monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split( + '_' + ), + weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'), + weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'), + weekdaysMin: '日_一_二_三_四_五_六'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'YYYY/MM/DD', + LL: 'YYYY年M月D日', + LLL: 'YYYY年M月D日 HH:mm', + LLLL: 'YYYY年M月D日dddd HH:mm', + l: 'YYYY/M/D', + ll: 'YYYY年M月D日', + lll: 'YYYY年M月D日 HH:mm', + llll: 'YYYY年M月D日dddd HH:mm', + }, + meridiemParse: /凌晨|早上|上午|中午|下午|晚上/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') { + return hour; + } else if (meridiem === '中午') { + return hour >= 11 ? hour : hour + 12; + } else if (meridiem === '下午' || meridiem === '晚上') { + return hour + 12; + } + }, + meridiem: function (hour, minute, isLower) { + var hm = hour * 100 + minute; + if (hm < 600) { + return '凌晨'; + } else if (hm < 900) { + return '早上'; + } else if (hm < 1200) { + return '上午'; + } else if (hm === 1200) { + return '中午'; + } else if (hm < 1800) { + return '下午'; + } else { + return '晚上'; + } + }, + calendar: { + sameDay: '[今天]LT', + nextDay: '[明天]LT', + nextWeek: '[下]ddddLT', + lastDay: '[昨天]LT', + lastWeek: '[上]ddddLT', + sameElse: 'L', + }, + dayOfMonthOrdinalParse: /\d{1,2}(日|月|週)/, + ordinal: function (number, period) { + switch (period) { + case 'd': + case 'D': + case 'DDD': + return number + '日'; + case 'M': + return number + '月'; + case 'w': + case 'W': + return number + '週'; + default: + return number; + } + }, + relativeTime: { + future: '%s後', + past: '%s前', + s: '幾秒', + ss: '%d 秒', + m: '1 分鐘', + mm: '%d 分鐘', + h: '1 小時', + hh: '%d 小時', + d: '1 天', + dd: '%d 天', + M: '1 個月', + MM: '%d 個月', + y: '1 年', + yy: '%d 年', + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('zh-mo', { + months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split( + '_' + ), + monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split( + '_' + ), + weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'), + weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'), + weekdaysMin: '日_一_二_三_四_五_六'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'YYYY年M月D日', + LLL: 'YYYY年M月D日 HH:mm', + LLLL: 'YYYY年M月D日dddd HH:mm', + l: 'D/M/YYYY', + ll: 'YYYY年M月D日', + lll: 'YYYY年M月D日 HH:mm', + llll: 'YYYY年M月D日dddd HH:mm', + }, + meridiemParse: /凌晨|早上|上午|中午|下午|晚上/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') { + return hour; + } else if (meridiem === '中午') { + return hour >= 11 ? hour : hour + 12; + } else if (meridiem === '下午' || meridiem === '晚上') { + return hour + 12; + } + }, + meridiem: function (hour, minute, isLower) { + var hm = hour * 100 + minute; + if (hm < 600) { + return '凌晨'; + } else if (hm < 900) { + return '早上'; + } else if (hm < 1130) { + return '上午'; + } else if (hm < 1230) { + return '中午'; + } else if (hm < 1800) { + return '下午'; + } else { + return '晚上'; + } + }, + calendar: { + sameDay: '[今天] LT', + nextDay: '[明天] LT', + nextWeek: '[下]dddd LT', + lastDay: '[昨天] LT', + lastWeek: '[上]dddd LT', + sameElse: 'L', + }, + dayOfMonthOrdinalParse: /\d{1,2}(日|月|週)/, + ordinal: function (number, period) { + switch (period) { + case 'd': + case 'D': + case 'DDD': + return number + '日'; + case 'M': + return number + '月'; + case 'w': + case 'W': + return number + '週'; + default: + return number; + } + }, + relativeTime: { + future: '%s內', + past: '%s前', + s: '幾秒', + ss: '%d 秒', + m: '1 分鐘', + mm: '%d 分鐘', + h: '1 小時', + hh: '%d 小時', + d: '1 天', + dd: '%d 天', + M: '1 個月', + MM: '%d 個月', + y: '1 年', + yy: '%d 年', + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('zh-tw', { + months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split( + '_' + ), + monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split( + '_' + ), + weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'), + weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'), + weekdaysMin: '日_一_二_三_四_五_六'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'YYYY/MM/DD', + LL: 'YYYY年M月D日', + LLL: 'YYYY年M月D日 HH:mm', + LLLL: 'YYYY年M月D日dddd HH:mm', + l: 'YYYY/M/D', + ll: 'YYYY年M月D日', + lll: 'YYYY年M月D日 HH:mm', + llll: 'YYYY年M月D日dddd HH:mm', + }, + meridiemParse: /凌晨|早上|上午|中午|下午|晚上/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') { + return hour; + } else if (meridiem === '中午') { + return hour >= 11 ? hour : hour + 12; + } else if (meridiem === '下午' || meridiem === '晚上') { + return hour + 12; + } + }, + meridiem: function (hour, minute, isLower) { + var hm = hour * 100 + minute; + if (hm < 600) { + return '凌晨'; + } else if (hm < 900) { + return '早上'; + } else if (hm < 1130) { + return '上午'; + } else if (hm < 1230) { + return '中午'; + } else if (hm < 1800) { + return '下午'; + } else { + return '晚上'; + } + }, + calendar: { + sameDay: '[今天] LT', + nextDay: '[明天] LT', + nextWeek: '[下]dddd LT', + lastDay: '[昨天] LT', + lastWeek: '[上]dddd LT', + sameElse: 'L', + }, + dayOfMonthOrdinalParse: /\d{1,2}(日|月|週)/, + ordinal: function (number, period) { + switch (period) { + case 'd': + case 'D': + case 'DDD': + return number + '日'; + case 'M': + return number + '月'; + case 'w': + case 'W': + return number + '週'; + default: + return number; + } + }, + relativeTime: { + future: '%s後', + past: '%s前', + s: '幾秒', + ss: '%d 秒', + m: '1 分鐘', + mm: '%d 分鐘', + h: '1 小時', + hh: '%d 小時', + d: '1 天', + dd: '%d 天', + M: '1 個月', + MM: '%d 個月', + y: '1 年', + yy: '%d 年', + }, + }); + + moment.locale('en'); + + return moment; + +}))); diff --git a/install/bin/electron/resources/app/vendor/moment/locales.min.js b/install/bin/electron/resources/app/vendor/moment/locales.min.js new file mode 100644 index 0000000..56da071 --- /dev/null +++ b/install/bin/electron/resources/app/vendor/moment/locales.min.js @@ -0,0 +1,2 @@ +!function(e,a){"object"==typeof exports&&"undefined"!=typeof module&&"function"==typeof require?a(require("../moment")):"function"==typeof define&&define.amd?define(["../moment"],a):a(e.moment)}(this,function(e){"use strict";e.defineLocale("af",{months:"Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des".split("_"),weekdays:"Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag".split("_"),weekdaysShort:"Son_Maa_Din_Woe_Don_Vry_Sat".split("_"),weekdaysMin:"So_Ma_Di_Wo_Do_Vr_Sa".split("_"),meridiemParse:/vm|nm/i,isPM:function(e){return/^nm$/i.test(e)},meridiem:function(e,a,_){return e<12?_?"vm":"VM":_?"nm":"NM"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Vandag om] LT",nextDay:"[M\xf4re om] LT",nextWeek:"dddd [om] LT",lastDay:"[Gister om] LT",lastWeek:"[Laas] dddd [om] LT",sameElse:"L"},relativeTime:{future:"oor %s",past:"%s gelede",s:"'n paar sekondes",ss:"%d sekondes",m:"'n minuut",mm:"%d minute",h:"'n uur",hh:"%d ure",d:"'n dag",dd:"%d dae",M:"'n maand",MM:"%d maande",y:"'n jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||20<=e?"ste":"de")},week:{dow:1,doy:4}});function r(e){return 0===e?0:1===e?1:2===e?2:3<=e%100&&e%100<=10?3:11<=e%100?4:5}function a(n){return function(e,a,_,s){var d=r(e),t=i[n][r(e)];return 2===d&&(t=t[a?0:1]),t.replace(/%d/i,e)}}var i={s:["\u0623\u0642\u0644 \u0645\u0646 \u062b\u0627\u0646\u064a\u0629","\u062b\u0627\u0646\u064a\u0629 \u0648\u0627\u062d\u062f\u0629",["\u062b\u0627\u0646\u064a\u062a\u0627\u0646","\u062b\u0627\u0646\u064a\u062a\u064a\u0646"],"%d \u062b\u0648\u0627\u0646","%d \u062b\u0627\u0646\u064a\u0629","%d \u062b\u0627\u0646\u064a\u0629"],m:["\u0623\u0642\u0644 \u0645\u0646 \u062f\u0642\u064a\u0642\u0629","\u062f\u0642\u064a\u0642\u0629 \u0648\u0627\u062d\u062f\u0629",["\u062f\u0642\u064a\u0642\u062a\u0627\u0646","\u062f\u0642\u064a\u0642\u062a\u064a\u0646"],"%d \u062f\u0642\u0627\u0626\u0642","%d \u062f\u0642\u064a\u0642\u0629","%d \u062f\u0642\u064a\u0642\u0629"],h:["\u0623\u0642\u0644 \u0645\u0646 \u0633\u0627\u0639\u0629","\u0633\u0627\u0639\u0629 \u0648\u0627\u062d\u062f\u0629",["\u0633\u0627\u0639\u062a\u0627\u0646","\u0633\u0627\u0639\u062a\u064a\u0646"],"%d \u0633\u0627\u0639\u0627\u062a","%d \u0633\u0627\u0639\u0629","%d \u0633\u0627\u0639\u0629"],d:["\u0623\u0642\u0644 \u0645\u0646 \u064a\u0648\u0645","\u064a\u0648\u0645 \u0648\u0627\u062d\u062f",["\u064a\u0648\u0645\u0627\u0646","\u064a\u0648\u0645\u064a\u0646"],"%d \u0623\u064a\u0627\u0645","%d \u064a\u0648\u0645\u064b\u0627","%d \u064a\u0648\u0645"],M:["\u0623\u0642\u0644 \u0645\u0646 \u0634\u0647\u0631","\u0634\u0647\u0631 \u0648\u0627\u062d\u062f",["\u0634\u0647\u0631\u0627\u0646","\u0634\u0647\u0631\u064a\u0646"],"%d \u0623\u0634\u0647\u0631","%d \u0634\u0647\u0631\u0627","%d \u0634\u0647\u0631"],y:["\u0623\u0642\u0644 \u0645\u0646 \u0639\u0627\u0645","\u0639\u0627\u0645 \u0648\u0627\u062d\u062f",["\u0639\u0627\u0645\u0627\u0646","\u0639\u0627\u0645\u064a\u0646"],"%d \u0623\u0639\u0648\u0627\u0645","%d \u0639\u0627\u0645\u064b\u0627","%d \u0639\u0627\u0645"]},_=["\u062c\u0627\u0646\u0641\u064a","\u0641\u064a\u0641\u0631\u064a","\u0645\u0627\u0631\u0633","\u0623\u0641\u0631\u064a\u0644","\u0645\u0627\u064a","\u062c\u0648\u0627\u0646","\u062c\u0648\u064a\u0644\u064a\u0629","\u0623\u0648\u062a","\u0633\u0628\u062a\u0645\u0628\u0631","\u0623\u0643\u062a\u0648\u0628\u0631","\u0646\u0648\u0641\u0645\u0628\u0631","\u062f\u064a\u0633\u0645\u0628\u0631"];e.defineLocale("ar-dz",{months:_,monthsShort:_,weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062b\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0623\u062d\u062f_\u0625\u062b\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0623\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/\u200fM/\u200fYYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/\u0635|\u0645/,isPM:function(e){return"\u0645"===e},meridiem:function(e,a,_){return e<12?"\u0635":"\u0645"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u064b\u0627 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0628\u0639\u062f %s",past:"\u0645\u0646\u0630 %s",s:a("s"),ss:a("s"),m:a("m"),mm:a("m"),h:a("h"),hh:a("h"),d:a("d"),dd:a("d"),M:a("M"),MM:a("M"),y:a("y"),yy:a("y")},postformat:function(e){return e.replace(/,/g,"\u060c")},week:{dow:0,doy:4}}),e.defineLocale("ar-kw",{months:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648\u0632_\u063a\u0634\u062a_\u0634\u062a\u0646\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0646\u0628\u0631_\u062f\u062c\u0646\u0628\u0631".split("_"),monthsShort:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648\u0632_\u063a\u0634\u062a_\u0634\u062a\u0646\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0646\u0628\u0631_\u062f\u062c\u0646\u0628\u0631".split("_"),weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062a\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0627\u062d\u062f_\u0627\u062a\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u0627 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0641\u064a %s",past:"\u0645\u0646\u0630 %s",s:"\u062b\u0648\u0627\u0646",ss:"%d \u062b\u0627\u0646\u064a\u0629",m:"\u062f\u0642\u064a\u0642\u0629",mm:"%d \u062f\u0642\u0627\u0626\u0642",h:"\u0633\u0627\u0639\u0629",hh:"%d \u0633\u0627\u0639\u0627\u062a",d:"\u064a\u0648\u0645",dd:"%d \u0623\u064a\u0627\u0645",M:"\u0634\u0647\u0631",MM:"%d \u0623\u0634\u0647\u0631",y:"\u0633\u0646\u0629",yy:"%d \u0633\u0646\u0648\u0627\u062a"},week:{dow:0,doy:12}});function m(e){return 0===e?0:1===e?1:2===e?2:3<=e%100&&e%100<=10?3:11<=e%100?4:5}function s(n){return function(e,a,_,s){var d=m(e),t=o[n][m(e)];return 2===d&&(t=t[a?0:1]),t.replace(/%d/i,e)}}var d={1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9",0:"0"},o={s:["\u0623\u0642\u0644 \u0645\u0646 \u062b\u0627\u0646\u064a\u0629","\u062b\u0627\u0646\u064a\u0629 \u0648\u0627\u062d\u062f\u0629",["\u062b\u0627\u0646\u064a\u062a\u0627\u0646","\u062b\u0627\u0646\u064a\u062a\u064a\u0646"],"%d \u062b\u0648\u0627\u0646","%d \u062b\u0627\u0646\u064a\u0629","%d \u062b\u0627\u0646\u064a\u0629"],m:["\u0623\u0642\u0644 \u0645\u0646 \u062f\u0642\u064a\u0642\u0629","\u062f\u0642\u064a\u0642\u0629 \u0648\u0627\u062d\u062f\u0629",["\u062f\u0642\u064a\u0642\u062a\u0627\u0646","\u062f\u0642\u064a\u0642\u062a\u064a\u0646"],"%d \u062f\u0642\u0627\u0626\u0642","%d \u062f\u0642\u064a\u0642\u0629","%d \u062f\u0642\u064a\u0642\u0629"],h:["\u0623\u0642\u0644 \u0645\u0646 \u0633\u0627\u0639\u0629","\u0633\u0627\u0639\u0629 \u0648\u0627\u062d\u062f\u0629",["\u0633\u0627\u0639\u062a\u0627\u0646","\u0633\u0627\u0639\u062a\u064a\u0646"],"%d \u0633\u0627\u0639\u0627\u062a","%d \u0633\u0627\u0639\u0629","%d \u0633\u0627\u0639\u0629"],d:["\u0623\u0642\u0644 \u0645\u0646 \u064a\u0648\u0645","\u064a\u0648\u0645 \u0648\u0627\u062d\u062f",["\u064a\u0648\u0645\u0627\u0646","\u064a\u0648\u0645\u064a\u0646"],"%d \u0623\u064a\u0627\u0645","%d \u064a\u0648\u0645\u064b\u0627","%d \u064a\u0648\u0645"],M:["\u0623\u0642\u0644 \u0645\u0646 \u0634\u0647\u0631","\u0634\u0647\u0631 \u0648\u0627\u062d\u062f",["\u0634\u0647\u0631\u0627\u0646","\u0634\u0647\u0631\u064a\u0646"],"%d \u0623\u0634\u0647\u0631","%d \u0634\u0647\u0631\u0627","%d \u0634\u0647\u0631"],y:["\u0623\u0642\u0644 \u0645\u0646 \u0639\u0627\u0645","\u0639\u0627\u0645 \u0648\u0627\u062d\u062f",["\u0639\u0627\u0645\u0627\u0646","\u0639\u0627\u0645\u064a\u0646"],"%d \u0623\u0639\u0648\u0627\u0645","%d \u0639\u0627\u0645\u064b\u0627","%d \u0639\u0627\u0645"]},t=["\u064a\u0646\u0627\u064a\u0631","\u0641\u0628\u0631\u0627\u064a\u0631","\u0645\u0627\u0631\u0633","\u0623\u0628\u0631\u064a\u0644","\u0645\u0627\u064a\u0648","\u064a\u0648\u0646\u064a\u0648","\u064a\u0648\u0644\u064a\u0648","\u0623\u063a\u0633\u0637\u0633","\u0633\u0628\u062a\u0645\u0628\u0631","\u0623\u0643\u062a\u0648\u0628\u0631","\u0646\u0648\u0641\u0645\u0628\u0631","\u062f\u064a\u0633\u0645\u0628\u0631"];e.defineLocale("ar-ly",{months:t,monthsShort:t,weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062b\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0623\u062d\u062f_\u0625\u062b\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0623\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/\u200fM/\u200fYYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/\u0635|\u0645/,isPM:function(e){return"\u0645"===e},meridiem:function(e,a,_){return e<12?"\u0635":"\u0645"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u064b\u0627 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0628\u0639\u062f %s",past:"\u0645\u0646\u0630 %s",s:s("s"),ss:s("s"),m:s("m"),mm:s("m"),h:s("h"),hh:s("h"),d:s("d"),dd:s("d"),M:s("M"),MM:s("M"),y:s("y"),yy:s("y")},preparse:function(e){return e.replace(/\u060c/g,",")},postformat:function(e){return e.replace(/\d/g,function(e){return d[e]}).replace(/,/g,"\u060c")},week:{dow:6,doy:12}}),e.defineLocale("ar-ma",{months:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648\u0632_\u063a\u0634\u062a_\u0634\u062a\u0646\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0646\u0628\u0631_\u062f\u062c\u0646\u0628\u0631".split("_"),monthsShort:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648\u0632_\u063a\u0634\u062a_\u0634\u062a\u0646\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0646\u0628\u0631_\u062f\u062c\u0646\u0628\u0631".split("_"),weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062b\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0627\u062d\u062f_\u0627\u062b\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u0627 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0641\u064a %s",past:"\u0645\u0646\u0630 %s",s:"\u062b\u0648\u0627\u0646",ss:"%d \u062b\u0627\u0646\u064a\u0629",m:"\u062f\u0642\u064a\u0642\u0629",mm:"%d \u062f\u0642\u0627\u0626\u0642",h:"\u0633\u0627\u0639\u0629",hh:"%d \u0633\u0627\u0639\u0627\u062a",d:"\u064a\u0648\u0645",dd:"%d \u0623\u064a\u0627\u0645",M:"\u0634\u0647\u0631",MM:"%d \u0623\u0634\u0647\u0631",y:"\u0633\u0646\u0629",yy:"%d \u0633\u0646\u0648\u0627\u062a"},week:{dow:6,doy:12}});var n={1:"\u0661",2:"\u0662",3:"\u0663",4:"\u0664",5:"\u0665",6:"\u0666",7:"\u0667",8:"\u0668",9:"\u0669",0:"\u0660"},u={"\u0661":"1","\u0662":"2","\u0663":"3","\u0664":"4","\u0665":"5","\u0666":"6","\u0667":"7","\u0668":"8","\u0669":"9","\u0660":"0"};e.defineLocale("ar-sa",{months:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a\u0648_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648_\u0623\u063a\u0633\u0637\u0633_\u0633\u0628\u062a\u0645\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0641\u0645\u0628\u0631_\u062f\u064a\u0633\u0645\u0628\u0631".split("_"),monthsShort:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a\u0648_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648_\u0623\u063a\u0633\u0637\u0633_\u0633\u0628\u062a\u0645\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0641\u0645\u0628\u0631_\u062f\u064a\u0633\u0645\u0628\u0631".split("_"),weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062b\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0623\u062d\u062f_\u0625\u062b\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0623\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/\u0635|\u0645/,isPM:function(e){return"\u0645"===e},meridiem:function(e,a,_){return e<12?"\u0635":"\u0645"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u0627 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0641\u064a %s",past:"\u0645\u0646\u0630 %s",s:"\u062b\u0648\u0627\u0646",ss:"%d \u062b\u0627\u0646\u064a\u0629",m:"\u062f\u0642\u064a\u0642\u0629",mm:"%d \u062f\u0642\u0627\u0626\u0642",h:"\u0633\u0627\u0639\u0629",hh:"%d \u0633\u0627\u0639\u0627\u062a",d:"\u064a\u0648\u0645",dd:"%d \u0623\u064a\u0627\u0645",M:"\u0634\u0647\u0631",MM:"%d \u0623\u0634\u0647\u0631",y:"\u0633\u0646\u0629",yy:"%d \u0633\u0646\u0648\u0627\u062a"},preparse:function(e){return e.replace(/[\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\u0660]/g,function(e){return u[e]}).replace(/\u060c/g,",")},postformat:function(e){return e.replace(/\d/g,function(e){return n[e]}).replace(/,/g,"\u060c")},week:{dow:0,doy:6}}),e.defineLocale("ar-tn",{months:"\u062c\u0627\u0646\u0641\u064a_\u0641\u064a\u0641\u0631\u064a_\u0645\u0627\u0631\u0633_\u0623\u0641\u0631\u064a\u0644_\u0645\u0627\u064a_\u062c\u0648\u0627\u0646_\u062c\u0648\u064a\u0644\u064a\u0629_\u0623\u0648\u062a_\u0633\u0628\u062a\u0645\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0641\u0645\u0628\u0631_\u062f\u064a\u0633\u0645\u0628\u0631".split("_"),monthsShort:"\u062c\u0627\u0646\u0641\u064a_\u0641\u064a\u0641\u0631\u064a_\u0645\u0627\u0631\u0633_\u0623\u0641\u0631\u064a\u0644_\u0645\u0627\u064a_\u062c\u0648\u0627\u0646_\u062c\u0648\u064a\u0644\u064a\u0629_\u0623\u0648\u062a_\u0633\u0628\u062a\u0645\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0641\u0645\u0628\u0631_\u062f\u064a\u0633\u0645\u0628\u0631".split("_"),weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062b\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0623\u062d\u062f_\u0625\u062b\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0623\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u0627 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0641\u064a %s",past:"\u0645\u0646\u0630 %s",s:"\u062b\u0648\u0627\u0646",ss:"%d \u062b\u0627\u0646\u064a\u0629",m:"\u062f\u0642\u064a\u0642\u0629",mm:"%d \u062f\u0642\u0627\u0626\u0642",h:"\u0633\u0627\u0639\u0629",hh:"%d \u0633\u0627\u0639\u0627\u062a",d:"\u064a\u0648\u0645",dd:"%d \u0623\u064a\u0627\u0645",M:"\u0634\u0647\u0631",MM:"%d \u0623\u0634\u0647\u0631",y:"\u0633\u0646\u0629",yy:"%d \u0633\u0646\u0648\u0627\u062a"},week:{dow:1,doy:4}});function l(e){return 0===e?0:1===e?1:2===e?2:3<=e%100&&e%100<=10?3:11<=e%100?4:5}function M(n){return function(e,a,_,s){var d=l(e),t=h[n][l(e)];return 2===d&&(t=t[a?0:1]),t.replace(/%d/i,e)}}var L={1:"\u0661",2:"\u0662",3:"\u0663",4:"\u0664",5:"\u0665",6:"\u0666",7:"\u0667",8:"\u0668",9:"\u0669",0:"\u0660"},Y={"\u0661":"1","\u0662":"2","\u0663":"3","\u0664":"4","\u0665":"5","\u0666":"6","\u0667":"7","\u0668":"8","\u0669":"9","\u0660":"0"},h={s:["\u0623\u0642\u0644 \u0645\u0646 \u062b\u0627\u0646\u064a\u0629","\u062b\u0627\u0646\u064a\u0629 \u0648\u0627\u062d\u062f\u0629",["\u062b\u0627\u0646\u064a\u062a\u0627\u0646","\u062b\u0627\u0646\u064a\u062a\u064a\u0646"],"%d \u062b\u0648\u0627\u0646","%d \u062b\u0627\u0646\u064a\u0629","%d \u062b\u0627\u0646\u064a\u0629"],m:["\u0623\u0642\u0644 \u0645\u0646 \u062f\u0642\u064a\u0642\u0629","\u062f\u0642\u064a\u0642\u0629 \u0648\u0627\u062d\u062f\u0629",["\u062f\u0642\u064a\u0642\u062a\u0627\u0646","\u062f\u0642\u064a\u0642\u062a\u064a\u0646"],"%d \u062f\u0642\u0627\u0626\u0642","%d \u062f\u0642\u064a\u0642\u0629","%d \u062f\u0642\u064a\u0642\u0629"],h:["\u0623\u0642\u0644 \u0645\u0646 \u0633\u0627\u0639\u0629","\u0633\u0627\u0639\u0629 \u0648\u0627\u062d\u062f\u0629",["\u0633\u0627\u0639\u062a\u0627\u0646","\u0633\u0627\u0639\u062a\u064a\u0646"],"%d \u0633\u0627\u0639\u0627\u062a","%d \u0633\u0627\u0639\u0629","%d \u0633\u0627\u0639\u0629"],d:["\u0623\u0642\u0644 \u0645\u0646 \u064a\u0648\u0645","\u064a\u0648\u0645 \u0648\u0627\u062d\u062f",["\u064a\u0648\u0645\u0627\u0646","\u064a\u0648\u0645\u064a\u0646"],"%d \u0623\u064a\u0627\u0645","%d \u064a\u0648\u0645\u064b\u0627","%d \u064a\u0648\u0645"],M:["\u0623\u0642\u0644 \u0645\u0646 \u0634\u0647\u0631","\u0634\u0647\u0631 \u0648\u0627\u062d\u062f",["\u0634\u0647\u0631\u0627\u0646","\u0634\u0647\u0631\u064a\u0646"],"%d \u0623\u0634\u0647\u0631","%d \u0634\u0647\u0631\u0627","%d \u0634\u0647\u0631"],y:["\u0623\u0642\u0644 \u0645\u0646 \u0639\u0627\u0645","\u0639\u0627\u0645 \u0648\u0627\u062d\u062f",["\u0639\u0627\u0645\u0627\u0646","\u0639\u0627\u0645\u064a\u0646"],"%d \u0623\u0639\u0648\u0627\u0645","%d \u0639\u0627\u0645\u064b\u0627","%d \u0639\u0627\u0645"]},y=["\u064a\u0646\u0627\u064a\u0631","\u0641\u0628\u0631\u0627\u064a\u0631","\u0645\u0627\u0631\u0633","\u0623\u0628\u0631\u064a\u0644","\u0645\u0627\u064a\u0648","\u064a\u0648\u0646\u064a\u0648","\u064a\u0648\u0644\u064a\u0648","\u0623\u063a\u0633\u0637\u0633","\u0633\u0628\u062a\u0645\u0628\u0631","\u0623\u0643\u062a\u0648\u0628\u0631","\u0646\u0648\u0641\u0645\u0628\u0631","\u062f\u064a\u0633\u0645\u0628\u0631"];e.defineLocale("ar",{months:y,monthsShort:y,weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062b\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0623\u062d\u062f_\u0625\u062b\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0623\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/\u200fM/\u200fYYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/\u0635|\u0645/,isPM:function(e){return"\u0645"===e},meridiem:function(e,a,_){return e<12?"\u0635":"\u0645"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u064b\u0627 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0628\u0639\u062f %s",past:"\u0645\u0646\u0630 %s",s:M("s"),ss:M("s"),m:M("m"),mm:M("m"),h:M("h"),hh:M("h"),d:M("d"),dd:M("d"),M:M("M"),MM:M("M"),y:M("y"),yy:M("y")},preparse:function(e){return e.replace(/[\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\u0660]/g,function(e){return Y[e]}).replace(/\u060c/g,",")},postformat:function(e){return e.replace(/\d/g,function(e){return L[e]}).replace(/,/g,"\u060c")},week:{dow:6,doy:12}});var c={1:"-inci",5:"-inci",8:"-inci",70:"-inci",80:"-inci",2:"-nci",7:"-nci",20:"-nci",50:"-nci",3:"-\xfcnc\xfc",4:"-\xfcnc\xfc",100:"-\xfcnc\xfc",6:"-nc\u0131",9:"-uncu",10:"-uncu",30:"-uncu",60:"-\u0131nc\u0131",90:"-\u0131nc\u0131"};function k(e,a,_){var s,d;return"m"===_?a?"\u0445\u0432\u0456\u043b\u0456\u043d\u0430":"\u0445\u0432\u0456\u043b\u0456\u043d\u0443":"h"===_?a?"\u0433\u0430\u0434\u0437\u0456\u043d\u0430":"\u0433\u0430\u0434\u0437\u0456\u043d\u0443":e+" "+(s=+e,d={ss:a?"\u0441\u0435\u043a\u0443\u043d\u0434\u0430_\u0441\u0435\u043a\u0443\u043d\u0434\u044b_\u0441\u0435\u043a\u0443\u043d\u0434":"\u0441\u0435\u043a\u0443\u043d\u0434\u0443_\u0441\u0435\u043a\u0443\u043d\u0434\u044b_\u0441\u0435\u043a\u0443\u043d\u0434",mm:a?"\u0445\u0432\u0456\u043b\u0456\u043d\u0430_\u0445\u0432\u0456\u043b\u0456\u043d\u044b_\u0445\u0432\u0456\u043b\u0456\u043d":"\u0445\u0432\u0456\u043b\u0456\u043d\u0443_\u0445\u0432\u0456\u043b\u0456\u043d\u044b_\u0445\u0432\u0456\u043b\u0456\u043d",hh:a?"\u0433\u0430\u0434\u0437\u0456\u043d\u0430_\u0433\u0430\u0434\u0437\u0456\u043d\u044b_\u0433\u0430\u0434\u0437\u0456\u043d":"\u0433\u0430\u0434\u0437\u0456\u043d\u0443_\u0433\u0430\u0434\u0437\u0456\u043d\u044b_\u0433\u0430\u0434\u0437\u0456\u043d",dd:"\u0434\u0437\u0435\u043d\u044c_\u0434\u043d\u0456_\u0434\u0437\u0451\u043d",MM:"\u043c\u0435\u0441\u044f\u0446_\u043c\u0435\u0441\u044f\u0446\u044b_\u043c\u0435\u0441\u044f\u0446\u0430\u045e",yy:"\u0433\u043e\u0434_\u0433\u0430\u0434\u044b_\u0433\u0430\u0434\u043e\u045e"}[_].split("_"),s%10==1&&s%100!=11?d[0]:2<=s%10&&s%10<=4&&(s%100<10||20<=s%100)?d[1]:d[2])}e.defineLocale("az",{months:"yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr".split("_"),monthsShort:"yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek".split("_"),weekdays:"Bazar_Bazar ert\u0259si_\xc7\u0259r\u015f\u0259nb\u0259 ax\u015fam\u0131_\xc7\u0259r\u015f\u0259nb\u0259_C\xfcm\u0259 ax\u015fam\u0131_C\xfcm\u0259_\u015e\u0259nb\u0259".split("_"),weekdaysShort:"Baz_BzE_\xc7Ax_\xc7\u0259r_CAx_C\xfcm_\u015e\u0259n".split("_"),weekdaysMin:"Bz_BE_\xc7A_\xc7\u0259_CA_C\xfc_\u015e\u0259".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bug\xfcn saat] LT",nextDay:"[sabah saat] LT",nextWeek:"[g\u0259l\u0259n h\u0259ft\u0259] dddd [saat] LT",lastDay:"[d\xfcn\u0259n] LT",lastWeek:"[ke\xe7\u0259n h\u0259ft\u0259] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s \u0259vv\u0259l",s:"bir ne\xe7\u0259 saniy\u0259",ss:"%d saniy\u0259",m:"bir d\u0259qiq\u0259",mm:"%d d\u0259qiq\u0259",h:"bir saat",hh:"%d saat",d:"bir g\xfcn",dd:"%d g\xfcn",M:"bir ay",MM:"%d ay",y:"bir il",yy:"%d il"},meridiemParse:/gec\u0259|s\u0259h\u0259r|g\xfcnd\xfcz|ax\u015fam/,isPM:function(e){return/^(g\xfcnd\xfcz|ax\u015fam)$/.test(e)},meridiem:function(e,a,_){return e<4?"gec\u0259":e<12?"s\u0259h\u0259r":e<17?"g\xfcnd\xfcz":"ax\u015fam"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0131nc\u0131|inci|nci|\xfcnc\xfc|nc\u0131|uncu)/,ordinal:function(e){if(0===e)return e+"-\u0131nc\u0131";var a=e%10;return e+(c[a]||c[e%100-a]||c[100<=e?100:null])},week:{dow:1,doy:7}}),e.defineLocale("be",{months:{format:"\u0441\u0442\u0443\u0434\u0437\u0435\u043d\u044f_\u043b\u044e\u0442\u0430\u0433\u0430_\u0441\u0430\u043a\u0430\u0432\u0456\u043a\u0430_\u043a\u0440\u0430\u0441\u0430\u0432\u0456\u043a\u0430_\u0442\u0440\u0430\u045e\u043d\u044f_\u0447\u044d\u0440\u0432\u0435\u043d\u044f_\u043b\u0456\u043f\u0435\u043d\u044f_\u0436\u043d\u0456\u045e\u043d\u044f_\u0432\u0435\u0440\u0430\u0441\u043d\u044f_\u043a\u0430\u0441\u0442\u0440\u044b\u0447\u043d\u0456\u043a\u0430_\u043b\u0456\u0441\u0442\u0430\u043f\u0430\u0434\u0430_\u0441\u043d\u0435\u0436\u043d\u044f".split("_"),standalone:"\u0441\u0442\u0443\u0434\u0437\u0435\u043d\u044c_\u043b\u044e\u0442\u044b_\u0441\u0430\u043a\u0430\u0432\u0456\u043a_\u043a\u0440\u0430\u0441\u0430\u0432\u0456\u043a_\u0442\u0440\u0430\u0432\u0435\u043d\u044c_\u0447\u044d\u0440\u0432\u0435\u043d\u044c_\u043b\u0456\u043f\u0435\u043d\u044c_\u0436\u043d\u0456\u0432\u0435\u043d\u044c_\u0432\u0435\u0440\u0430\u0441\u0435\u043d\u044c_\u043a\u0430\u0441\u0442\u0440\u044b\u0447\u043d\u0456\u043a_\u043b\u0456\u0441\u0442\u0430\u043f\u0430\u0434_\u0441\u043d\u0435\u0436\u0430\u043d\u044c".split("_")},monthsShort:"\u0441\u0442\u0443\u0434_\u043b\u044e\u0442_\u0441\u0430\u043a_\u043a\u0440\u0430\u0441_\u0442\u0440\u0430\u0432_\u0447\u044d\u0440\u0432_\u043b\u0456\u043f_\u0436\u043d\u0456\u0432_\u0432\u0435\u0440_\u043a\u0430\u0441\u0442_\u043b\u0456\u0441\u0442_\u0441\u043d\u0435\u0436".split("_"),weekdays:{format:"\u043d\u044f\u0434\u0437\u0435\u043b\u044e_\u043f\u0430\u043d\u044f\u0434\u0437\u0435\u043b\u0430\u043a_\u0430\u045e\u0442\u043e\u0440\u0430\u043a_\u0441\u0435\u0440\u0430\u0434\u0443_\u0447\u0430\u0446\u0432\u0435\u0440_\u043f\u044f\u0442\u043d\u0456\u0446\u0443_\u0441\u0443\u0431\u043e\u0442\u0443".split("_"),standalone:"\u043d\u044f\u0434\u0437\u0435\u043b\u044f_\u043f\u0430\u043d\u044f\u0434\u0437\u0435\u043b\u0430\u043a_\u0430\u045e\u0442\u043e\u0440\u0430\u043a_\u0441\u0435\u0440\u0430\u0434\u0430_\u0447\u0430\u0446\u0432\u0435\u0440_\u043f\u044f\u0442\u043d\u0456\u0446\u0430_\u0441\u0443\u0431\u043e\u0442\u0430".split("_"),isFormat:/\[ ?[\u0423\u0443\u045e] ?(?:\u043c\u0456\u043d\u0443\u043b\u0443\u044e|\u043d\u0430\u0441\u0442\u0443\u043f\u043d\u0443\u044e)? ?\] ?dddd/},weekdaysShort:"\u043d\u0434_\u043f\u043d_\u0430\u0442_\u0441\u0440_\u0447\u0446_\u043f\u0442_\u0441\u0431".split("_"),weekdaysMin:"\u043d\u0434_\u043f\u043d_\u0430\u0442_\u0441\u0440_\u0447\u0446_\u043f\u0442_\u0441\u0431".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY \u0433.",LLL:"D MMMM YYYY \u0433., HH:mm",LLLL:"dddd, D MMMM YYYY \u0433., HH:mm"},calendar:{sameDay:"[\u0421\u0451\u043d\u043d\u044f \u045e] LT",nextDay:"[\u0417\u0430\u045e\u0442\u0440\u0430 \u045e] LT",lastDay:"[\u0423\u0447\u043e\u0440\u0430 \u045e] LT",nextWeek:function(){return"[\u0423] dddd [\u045e] LT"},lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return"[\u0423 \u043c\u0456\u043d\u0443\u043b\u0443\u044e] dddd [\u045e] LT";case 1:case 2:case 4:return"[\u0423 \u043c\u0456\u043d\u0443\u043b\u044b] dddd [\u045e] LT"}},sameElse:"L"},relativeTime:{future:"\u043f\u0440\u0430\u0437 %s",past:"%s \u0442\u0430\u043c\u0443",s:"\u043d\u0435\u043a\u0430\u043b\u044c\u043a\u0456 \u0441\u0435\u043a\u0443\u043d\u0434",m:k,mm:k,h:k,hh:k,d:"\u0434\u0437\u0435\u043d\u044c",dd:k,M:"\u043c\u0435\u0441\u044f\u0446",MM:k,y:"\u0433\u043e\u0434",yy:k},meridiemParse:/\u043d\u043e\u0447\u044b|\u0440\u0430\u043d\u0456\u0446\u044b|\u0434\u043d\u044f|\u0432\u0435\u0447\u0430\u0440\u0430/,isPM:function(e){return/^(\u0434\u043d\u044f|\u0432\u0435\u0447\u0430\u0440\u0430)$/.test(e)},meridiem:function(e,a,_){return e<4?"\u043d\u043e\u0447\u044b":e<12?"\u0440\u0430\u043d\u0456\u0446\u044b":e<17?"\u0434\u043d\u044f":"\u0432\u0435\u0447\u0430\u0440\u0430"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0456|\u044b|\u0433\u0430)/,ordinal:function(e,a){switch(a){case"M":case"d":case"DDD":case"w":case"W":return e%10!=2&&e%10!=3||e%100==12||e%100==13?e+"-\u044b":e+"-\u0456";case"D":return e+"-\u0433\u0430";default:return e}},week:{dow:1,doy:7}}),e.defineLocale("bg",{months:"\u044f\u043d\u0443\u0430\u0440\u0438_\u0444\u0435\u0432\u0440\u0443\u0430\u0440\u0438_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0438\u043b_\u043c\u0430\u0439_\u044e\u043d\u0438_\u044e\u043b\u0438_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043f\u0442\u0435\u043c\u0432\u0440\u0438_\u043e\u043a\u0442\u043e\u043c\u0432\u0440\u0438_\u043d\u043e\u0435\u043c\u0432\u0440\u0438_\u0434\u0435\u043a\u0435\u043c\u0432\u0440\u0438".split("_"),monthsShort:"\u044f\u043d\u0443_\u0444\u0435\u0432_\u043c\u0430\u0440_\u0430\u043f\u0440_\u043c\u0430\u0439_\u044e\u043d\u0438_\u044e\u043b\u0438_\u0430\u0432\u0433_\u0441\u0435\u043f_\u043e\u043a\u0442_\u043d\u043e\u0435_\u0434\u0435\u043a".split("_"),weekdays:"\u043d\u0435\u0434\u0435\u043b\u044f_\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u043d\u0438\u043a_\u0432\u0442\u043e\u0440\u043d\u0438\u043a_\u0441\u0440\u044f\u0434\u0430_\u0447\u0435\u0442\u0432\u044a\u0440\u0442\u044a\u043a_\u043f\u0435\u0442\u044a\u043a_\u0441\u044a\u0431\u043e\u0442\u0430".split("_"),weekdaysShort:"\u043d\u0435\u0434_\u043f\u043e\u043d_\u0432\u0442\u043e_\u0441\u0440\u044f_\u0447\u0435\u0442_\u043f\u0435\u0442_\u0441\u044a\u0431".split("_"),weekdaysMin:"\u043d\u0434_\u043f\u043d_\u0432\u0442_\u0441\u0440_\u0447\u0442_\u043f\u0442_\u0441\u0431".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[\u0414\u043d\u0435\u0441 \u0432] LT",nextDay:"[\u0423\u0442\u0440\u0435 \u0432] LT",nextWeek:"dddd [\u0432] LT",lastDay:"[\u0412\u0447\u0435\u0440\u0430 \u0432] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[\u041c\u0438\u043d\u0430\u043b\u0430\u0442\u0430] dddd [\u0432] LT";case 1:case 2:case 4:case 5:return"[\u041c\u0438\u043d\u0430\u043b\u0438\u044f] dddd [\u0432] LT"}},sameElse:"L"},relativeTime:{future:"\u0441\u043b\u0435\u0434 %s",past:"\u043f\u0440\u0435\u0434\u0438 %s",s:"\u043d\u044f\u043a\u043e\u043b\u043a\u043e \u0441\u0435\u043a\u0443\u043d\u0434\u0438",ss:"%d \u0441\u0435\u043a\u0443\u043d\u0434\u0438",m:"\u043c\u0438\u043d\u0443\u0442\u0430",mm:"%d \u043c\u0438\u043d\u0443\u0442\u0438",h:"\u0447\u0430\u0441",hh:"%d \u0447\u0430\u0441\u0430",d:"\u0434\u0435\u043d",dd:"%d \u0434\u0435\u043d\u0430",M:"\u043c\u0435\u0441\u0435\u0446",MM:"%d \u043c\u0435\u0441\u0435\u0446\u0430",y:"\u0433\u043e\u0434\u0438\u043d\u0430",yy:"%d \u0433\u043e\u0434\u0438\u043d\u0438"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0435\u0432|\u0435\u043d|\u0442\u0438|\u0432\u0438|\u0440\u0438|\u043c\u0438)/,ordinal:function(e){var a=e%10,_=e%100;return 0===e?e+"-\u0435\u0432":0==_?e+"-\u0435\u043d":10<_&&_<20?e+"-\u0442\u0438":1==a?e+"-\u0432\u0438":2==a?e+"-\u0440\u0438":7==a||8==a?e+"-\u043c\u0438":e+"-\u0442\u0438"},week:{dow:1,doy:7}}),e.defineLocale("bm",{months:"Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_M\u025bkalo_Zuw\u025bnkalo_Zuluyekalo_Utikalo_S\u025btanburukalo_\u0254kut\u0254burukalo_Nowanburukalo_Desanburukalo".split("_"),monthsShort:"Zan_Few_Mar_Awi_M\u025b_Zuw_Zul_Uti_S\u025bt_\u0254ku_Now_Des".split("_"),weekdays:"Kari_Nt\u025bn\u025bn_Tarata_Araba_Alamisa_Juma_Sibiri".split("_"),weekdaysShort:"Kar_Nt\u025b_Tar_Ara_Ala_Jum_Sib".split("_"),weekdaysMin:"Ka_Nt_Ta_Ar_Al_Ju_Si".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"MMMM [tile] D [san] YYYY",LLL:"MMMM [tile] D [san] YYYY [l\u025br\u025b] HH:mm",LLLL:"dddd MMMM [tile] D [san] YYYY [l\u025br\u025b] HH:mm"},calendar:{sameDay:"[Bi l\u025br\u025b] LT",nextDay:"[Sini l\u025br\u025b] LT",nextWeek:"dddd [don l\u025br\u025b] LT",lastDay:"[Kunu l\u025br\u025b] LT",lastWeek:"dddd [t\u025bm\u025bnen l\u025br\u025b] LT",sameElse:"L"},relativeTime:{future:"%s k\u0254n\u0254",past:"a b\u025b %s b\u0254",s:"sanga dama dama",ss:"sekondi %d",m:"miniti kelen",mm:"miniti %d",h:"l\u025br\u025b kelen",hh:"l\u025br\u025b %d",d:"tile kelen",dd:"tile %d",M:"kalo kelen",MM:"kalo %d",y:"san kelen",yy:"san %d"},week:{dow:1,doy:4}});var D={1:"\u09e7",2:"\u09e8",3:"\u09e9",4:"\u09ea",5:"\u09eb",6:"\u09ec",7:"\u09ed",8:"\u09ee",9:"\u09ef",0:"\u09e6"},p={"\u09e7":"1","\u09e8":"2","\u09e9":"3","\u09ea":"4","\u09eb":"5","\u09ec":"6","\u09ed":"7","\u09ee":"8","\u09ef":"9","\u09e6":"0"};e.defineLocale("bn",{months:"\u099c\u09be\u09a8\u09c1\u09df\u09be\u09b0\u09bf_\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1\u09df\u09be\u09b0\u09bf_\u09ae\u09be\u09b0\u09cd\u099a_\u098f\u09aa\u09cd\u09b0\u09bf\u09b2_\u09ae\u09c7_\u099c\u09c1\u09a8_\u099c\u09c1\u09b2\u09be\u0987_\u0986\u0997\u09b8\u09cd\u099f_\u09b8\u09c7\u09aa\u09cd\u099f\u09c7\u09ae\u09cd\u09ac\u09b0_\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09b0_\u09a8\u09ad\u09c7\u09ae\u09cd\u09ac\u09b0_\u09a1\u09bf\u09b8\u09c7\u09ae\u09cd\u09ac\u09b0".split("_"),monthsShort:"\u099c\u09be\u09a8\u09c1_\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1_\u09ae\u09be\u09b0\u09cd\u099a_\u098f\u09aa\u09cd\u09b0\u09bf\u09b2_\u09ae\u09c7_\u099c\u09c1\u09a8_\u099c\u09c1\u09b2\u09be\u0987_\u0986\u0997\u09b8\u09cd\u099f_\u09b8\u09c7\u09aa\u09cd\u099f_\u0985\u0995\u09cd\u099f\u09cb_\u09a8\u09ad\u09c7_\u09a1\u09bf\u09b8\u09c7".split("_"),weekdays:"\u09b0\u09ac\u09bf\u09ac\u09be\u09b0_\u09b8\u09cb\u09ae\u09ac\u09be\u09b0_\u09ae\u0999\u09cd\u0997\u09b2\u09ac\u09be\u09b0_\u09ac\u09c1\u09a7\u09ac\u09be\u09b0_\u09ac\u09c3\u09b9\u09b8\u09cd\u09aa\u09a4\u09bf\u09ac\u09be\u09b0_\u09b6\u09c1\u0995\u09cd\u09b0\u09ac\u09be\u09b0_\u09b6\u09a8\u09bf\u09ac\u09be\u09b0".split("_"),weekdaysShort:"\u09b0\u09ac\u09bf_\u09b8\u09cb\u09ae_\u09ae\u0999\u09cd\u0997\u09b2_\u09ac\u09c1\u09a7_\u09ac\u09c3\u09b9\u09b8\u09cd\u09aa\u09a4\u09bf_\u09b6\u09c1\u0995\u09cd\u09b0_\u09b6\u09a8\u09bf".split("_"),weekdaysMin:"\u09b0\u09ac\u09bf_\u09b8\u09cb\u09ae_\u09ae\u0999\u09cd\u0997\u09b2_\u09ac\u09c1\u09a7_\u09ac\u09c3\u09b9_\u09b6\u09c1\u0995\u09cd\u09b0_\u09b6\u09a8\u09bf".split("_"),longDateFormat:{LT:"A h:mm \u09b8\u09ae\u09df",LTS:"A h:mm:ss \u09b8\u09ae\u09df",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm \u09b8\u09ae\u09df",LLLL:"dddd, D MMMM YYYY, A h:mm \u09b8\u09ae\u09df"},calendar:{sameDay:"[\u0986\u099c] LT",nextDay:"[\u0986\u0997\u09be\u09ae\u09c0\u0995\u09be\u09b2] LT",nextWeek:"dddd, LT",lastDay:"[\u0997\u09a4\u0995\u09be\u09b2] LT",lastWeek:"[\u0997\u09a4] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u09aa\u09b0\u09c7",past:"%s \u0986\u0997\u09c7",s:"\u0995\u09df\u09c7\u0995 \u09b8\u09c7\u0995\u09c7\u09a8\u09cd\u09a1",ss:"%d \u09b8\u09c7\u0995\u09c7\u09a8\u09cd\u09a1",m:"\u098f\u0995 \u09ae\u09bf\u09a8\u09bf\u099f",mm:"%d \u09ae\u09bf\u09a8\u09bf\u099f",h:"\u098f\u0995 \u0998\u09a8\u09cd\u099f\u09be",hh:"%d \u0998\u09a8\u09cd\u099f\u09be",d:"\u098f\u0995 \u09a6\u09bf\u09a8",dd:"%d \u09a6\u09bf\u09a8",M:"\u098f\u0995 \u09ae\u09be\u09b8",MM:"%d \u09ae\u09be\u09b8",y:"\u098f\u0995 \u09ac\u099b\u09b0",yy:"%d \u09ac\u099b\u09b0"},preparse:function(e){return e.replace(/[\u09e7\u09e8\u09e9\u09ea\u09eb\u09ec\u09ed\u09ee\u09ef\u09e6]/g,function(e){return p[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return D[e]})},meridiemParse:/\u09b0\u09be\u09a4|\u09b8\u0995\u09be\u09b2|\u09a6\u09c1\u09aa\u09c1\u09b0|\u09ac\u09bf\u0995\u09be\u09b2|\u09b0\u09be\u09a4/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u09b0\u09be\u09a4"===a&&4<=e||"\u09a6\u09c1\u09aa\u09c1\u09b0"===a&&e<5||"\u09ac\u09bf\u0995\u09be\u09b2"===a?e+12:e},meridiem:function(e,a,_){return e<4?"\u09b0\u09be\u09a4":e<10?"\u09b8\u0995\u09be\u09b2":e<17?"\u09a6\u09c1\u09aa\u09c1\u09b0":e<20?"\u09ac\u09bf\u0995\u09be\u09b2":"\u09b0\u09be\u09a4"},week:{dow:0,doy:6}});var T={1:"\u0f21",2:"\u0f22",3:"\u0f23",4:"\u0f24",5:"\u0f25",6:"\u0f26",7:"\u0f27",8:"\u0f28",9:"\u0f29",0:"\u0f20"},f={"\u0f21":"1","\u0f22":"2","\u0f23":"3","\u0f24":"4","\u0f25":"5","\u0f26":"6","\u0f27":"7","\u0f28":"8","\u0f29":"9","\u0f20":"0"};function g(e,a,_){var s;return e+" "+(s={mm:"munutenn",MM:"miz",dd:"devezh"}[_],2!==e?s:function(e){var a={m:"v",b:"v",d:"z"};return void 0!==a[e.charAt(0)]?a[e.charAt(0)]+e.substring(1):e}(s))}e.defineLocale("bo",{months:"\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f51\u0f44\u0f0b\u0f54\u0f7c_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f42\u0f49\u0f72\u0f66\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f42\u0f66\u0f74\u0f58\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f5e\u0f72\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f63\u0f94\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f51\u0fb2\u0f74\u0f42\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f51\u0f74\u0f53\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f62\u0f92\u0fb1\u0f51\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f51\u0f42\u0f74\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f42\u0f45\u0f72\u0f42\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f42\u0f49\u0f72\u0f66\u0f0b\u0f54".split("_"),monthsShort:"\u0f5f\u0fb3\u0f0b1_\u0f5f\u0fb3\u0f0b2_\u0f5f\u0fb3\u0f0b3_\u0f5f\u0fb3\u0f0b4_\u0f5f\u0fb3\u0f0b5_\u0f5f\u0fb3\u0f0b6_\u0f5f\u0fb3\u0f0b7_\u0f5f\u0fb3\u0f0b8_\u0f5f\u0fb3\u0f0b9_\u0f5f\u0fb3\u0f0b10_\u0f5f\u0fb3\u0f0b11_\u0f5f\u0fb3\u0f0b12".split("_"),monthsShortRegex:/^(\u0f5f\u0fb3\u0f0b\d{1,2})/,monthsParseExact:!0,weekdays:"\u0f42\u0f5f\u0f60\u0f0b\u0f49\u0f72\u0f0b\u0f58\u0f0b_\u0f42\u0f5f\u0f60\u0f0b\u0f5f\u0fb3\u0f0b\u0f56\u0f0b_\u0f42\u0f5f\u0f60\u0f0b\u0f58\u0f72\u0f42\u0f0b\u0f51\u0f58\u0f62\u0f0b_\u0f42\u0f5f\u0f60\u0f0b\u0f63\u0fb7\u0f42\u0f0b\u0f54\u0f0b_\u0f42\u0f5f\u0f60\u0f0b\u0f55\u0f74\u0f62\u0f0b\u0f56\u0f74_\u0f42\u0f5f\u0f60\u0f0b\u0f54\u0f0b\u0f66\u0f44\u0f66\u0f0b_\u0f42\u0f5f\u0f60\u0f0b\u0f66\u0fa4\u0f7a\u0f53\u0f0b\u0f54\u0f0b".split("_"),weekdaysShort:"\u0f49\u0f72\u0f0b\u0f58\u0f0b_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b_\u0f58\u0f72\u0f42\u0f0b\u0f51\u0f58\u0f62\u0f0b_\u0f63\u0fb7\u0f42\u0f0b\u0f54\u0f0b_\u0f55\u0f74\u0f62\u0f0b\u0f56\u0f74_\u0f54\u0f0b\u0f66\u0f44\u0f66\u0f0b_\u0f66\u0fa4\u0f7a\u0f53\u0f0b\u0f54\u0f0b".split("_"),weekdaysMin:"\u0f49\u0f72_\u0f5f\u0fb3_\u0f58\u0f72\u0f42_\u0f63\u0fb7\u0f42_\u0f55\u0f74\u0f62_\u0f66\u0f44\u0f66_\u0f66\u0fa4\u0f7a\u0f53".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[\u0f51\u0f72\u0f0b\u0f62\u0f72\u0f44] LT",nextDay:"[\u0f66\u0f44\u0f0b\u0f49\u0f72\u0f53] LT",nextWeek:"[\u0f56\u0f51\u0f74\u0f53\u0f0b\u0f55\u0fb2\u0f42\u0f0b\u0f62\u0f97\u0f7a\u0f66\u0f0b\u0f58], LT",lastDay:"[\u0f41\u0f0b\u0f66\u0f44] LT",lastWeek:"[\u0f56\u0f51\u0f74\u0f53\u0f0b\u0f55\u0fb2\u0f42\u0f0b\u0f58\u0f50\u0f60\u0f0b\u0f58] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0f63\u0f0b",past:"%s \u0f66\u0f94\u0f53\u0f0b\u0f63",s:"\u0f63\u0f58\u0f0b\u0f66\u0f44",ss:"%d \u0f66\u0f90\u0f62\u0f0b\u0f46\u0f0d",m:"\u0f66\u0f90\u0f62\u0f0b\u0f58\u0f0b\u0f42\u0f45\u0f72\u0f42",mm:"%d \u0f66\u0f90\u0f62\u0f0b\u0f58",h:"\u0f46\u0f74\u0f0b\u0f5a\u0f7c\u0f51\u0f0b\u0f42\u0f45\u0f72\u0f42",hh:"%d \u0f46\u0f74\u0f0b\u0f5a\u0f7c\u0f51",d:"\u0f49\u0f72\u0f53\u0f0b\u0f42\u0f45\u0f72\u0f42",dd:"%d \u0f49\u0f72\u0f53\u0f0b",M:"\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f42\u0f45\u0f72\u0f42",MM:"%d \u0f5f\u0fb3\u0f0b\u0f56",y:"\u0f63\u0f7c\u0f0b\u0f42\u0f45\u0f72\u0f42",yy:"%d \u0f63\u0f7c"},preparse:function(e){return e.replace(/[\u0f21\u0f22\u0f23\u0f24\u0f25\u0f26\u0f27\u0f28\u0f29\u0f20]/g,function(e){return f[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return T[e]})},meridiemParse:/\u0f58\u0f5a\u0f53\u0f0b\u0f58\u0f7c|\u0f5e\u0f7c\u0f42\u0f66\u0f0b\u0f40\u0f66|\u0f49\u0f72\u0f53\u0f0b\u0f42\u0f74\u0f44|\u0f51\u0f42\u0f7c\u0f44\u0f0b\u0f51\u0f42|\u0f58\u0f5a\u0f53\u0f0b\u0f58\u0f7c/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u0f58\u0f5a\u0f53\u0f0b\u0f58\u0f7c"===a&&4<=e||"\u0f49\u0f72\u0f53\u0f0b\u0f42\u0f74\u0f44"===a&&e<5||"\u0f51\u0f42\u0f7c\u0f44\u0f0b\u0f51\u0f42"===a?e+12:e},meridiem:function(e,a,_){return e<4?"\u0f58\u0f5a\u0f53\u0f0b\u0f58\u0f7c":e<10?"\u0f5e\u0f7c\u0f42\u0f66\u0f0b\u0f40\u0f66":e<17?"\u0f49\u0f72\u0f53\u0f0b\u0f42\u0f74\u0f44":e<20?"\u0f51\u0f42\u0f7c\u0f44\u0f0b\u0f51\u0f42":"\u0f58\u0f5a\u0f53\u0f0b\u0f58\u0f7c"},week:{dow:0,doy:6}});var w=[/^gen/i,/^c[\u02bc\']hwe/i,/^meu/i,/^ebr/i,/^mae/i,/^(mez|eve)/i,/^gou/i,/^eos/i,/^gwe/i,/^her/i,/^du/i,/^ker/i],H=/^(genver|c[\u02bc\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu|gen|c[\u02bc\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,b=[/^Su/i,/^Lu/i,/^Me([^r]|$)/i,/^Mer/i,/^Ya/i,/^Gw/i,/^Sa/i];function v(e,a,_){var s=e+" ";switch(_){case"ss":return s+=1===e?"sekunda":2===e||3===e||4===e?"sekunde":"sekundi";case"m":return a?"jedna minuta":"jedne minute";case"mm":return s+=1!==e&&(2===e||3===e||4===e)?"minute":"minuta";case"h":return a?"jedan sat":"jednog sata";case"hh":return s+=1===e?"sat":2===e||3===e||4===e?"sata":"sati";case"dd":return s+=1===e?"dan":"dana";case"MM":return s+=1===e?"mjesec":2===e||3===e||4===e?"mjeseca":"mjeseci";case"yy":return s+=1!==e&&(2===e||3===e||4===e)?"godine":"godina"}}e.defineLocale("br",{months:"Genver_C\u02bchwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu".split("_"),monthsShort:"Gen_C\u02bchwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker".split("_"),weekdays:"Sul_Lun_Meurzh_Merc\u02bcher_Yaou_Gwener_Sadorn".split("_"),weekdaysShort:"Sul_Lun_Meu_Mer_Yao_Gwe_Sad".split("_"),weekdaysMin:"Su_Lu_Me_Mer_Ya_Gw_Sa".split("_"),weekdaysParse:b,fullWeekdaysParse:[/^sul/i,/^lun/i,/^meurzh/i,/^merc[\u02bc\']her/i,/^yaou/i,/^gwener/i,/^sadorn/i],shortWeekdaysParse:[/^Sul/i,/^Lun/i,/^Meu/i,/^Mer/i,/^Yao/i,/^Gwe/i,/^Sad/i],minWeekdaysParse:b,monthsRegex:H,monthsShortRegex:H,monthsStrictRegex:/^(genver|c[\u02bc\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu)/i,monthsShortStrictRegex:/^(gen|c[\u02bc\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,monthsParse:w,longMonthsParse:w,shortMonthsParse:w,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [a viz] MMMM YYYY",LLL:"D [a viz] MMMM YYYY HH:mm",LLLL:"dddd, D [a viz] MMMM YYYY HH:mm"},calendar:{sameDay:"[Hiziv da] LT",nextDay:"[Warc\u02bchoazh da] LT",nextWeek:"dddd [da] LT",lastDay:"[Dec\u02bch da] LT",lastWeek:"dddd [paset da] LT",sameElse:"L"},relativeTime:{future:"a-benn %s",past:"%s \u02bczo",s:"un nebeud segondenno\xf9",ss:"%d eilenn",m:"ur vunutenn",mm:g,h:"un eur",hh:"%d eur",d:"un devezh",dd:g,M:"ur miz",MM:g,y:"ur bloaz",yy:function(e){switch(function e(a){if(9>> 0, + i; + + for (i = 0; i < len; i++) { + if (i in t && fun.call(this, t[i], i, t)) { + return true; + } + } + + return false; + }; + } + + function isValid(m) { + if (m._isValid == null) { + var flags = getParsingFlags(m), + parsedParts = some.call(flags.parsedDateParts, function (i) { + return i != null; + }), + isNowValid = + !isNaN(m._d.getTime()) && + flags.overflow < 0 && + !flags.empty && + !flags.invalidEra && + !flags.invalidMonth && + !flags.invalidWeekday && + !flags.weekdayMismatch && + !flags.nullInput && + !flags.invalidFormat && + !flags.userInvalidated && + (!flags.meridiem || (flags.meridiem && parsedParts)); + + if (m._strict) { + isNowValid = + isNowValid && + flags.charsLeftOver === 0 && + flags.unusedTokens.length === 0 && + flags.bigHour === undefined; + } + + if (Object.isFrozen == null || !Object.isFrozen(m)) { + m._isValid = isNowValid; + } else { + return isNowValid; + } + } + return m._isValid; + } + + function createInvalid(flags) { + var m = createUTC(NaN); + if (flags != null) { + extend(getParsingFlags(m), flags); + } else { + getParsingFlags(m).userInvalidated = true; + } + + return m; + } + + // Plugins that add properties should also add the key here (null value), + // so we can properly clone ourselves. + var momentProperties = (hooks.momentProperties = []), + updateInProgress = false; + + function copyConfig(to, from) { + var i, prop, val; + + if (!isUndefined(from._isAMomentObject)) { + to._isAMomentObject = from._isAMomentObject; + } + if (!isUndefined(from._i)) { + to._i = from._i; + } + if (!isUndefined(from._f)) { + to._f = from._f; + } + if (!isUndefined(from._l)) { + to._l = from._l; + } + if (!isUndefined(from._strict)) { + to._strict = from._strict; + } + if (!isUndefined(from._tzm)) { + to._tzm = from._tzm; + } + if (!isUndefined(from._isUTC)) { + to._isUTC = from._isUTC; + } + if (!isUndefined(from._offset)) { + to._offset = from._offset; + } + if (!isUndefined(from._pf)) { + to._pf = getParsingFlags(from); + } + if (!isUndefined(from._locale)) { + to._locale = from._locale; + } + + if (momentProperties.length > 0) { + for (i = 0; i < momentProperties.length; i++) { + prop = momentProperties[i]; + val = from[prop]; + if (!isUndefined(val)) { + to[prop] = val; + } + } + } + + return to; + } + + // Moment prototype object + function Moment(config) { + copyConfig(this, config); + this._d = new Date(config._d != null ? config._d.getTime() : NaN); + if (!this.isValid()) { + this._d = new Date(NaN); + } + // Prevent infinite loop in case updateOffset creates new moment + // objects. + if (updateInProgress === false) { + updateInProgress = true; + hooks.updateOffset(this); + updateInProgress = false; + } + } + + function isMoment(obj) { + return ( + obj instanceof Moment || (obj != null && obj._isAMomentObject != null) + ); + } + + function warn(msg) { + if ( + hooks.suppressDeprecationWarnings === false && + typeof console !== 'undefined' && + console.warn + ) { + console.warn('Deprecation warning: ' + msg); + } + } + + function deprecate(msg, fn) { + var firstTime = true; + + return extend(function () { + if (hooks.deprecationHandler != null) { + hooks.deprecationHandler(null, msg); + } + if (firstTime) { + var args = [], + arg, + i, + key; + for (i = 0; i < arguments.length; i++) { + arg = ''; + if (typeof arguments[i] === 'object') { + arg += '\n[' + i + '] '; + for (key in arguments[0]) { + if (hasOwnProp(arguments[0], key)) { + arg += key + ': ' + arguments[0][key] + ', '; + } + } + arg = arg.slice(0, -2); // Remove trailing comma and space + } else { + arg = arguments[i]; + } + args.push(arg); + } + warn( + msg + + '\nArguments: ' + + Array.prototype.slice.call(args).join('') + + '\n' + + new Error().stack + ); + firstTime = false; + } + return fn.apply(this, arguments); + }, fn); + } + + var deprecations = {}; + + function deprecateSimple(name, msg) { + if (hooks.deprecationHandler != null) { + hooks.deprecationHandler(name, msg); + } + if (!deprecations[name]) { + warn(msg); + deprecations[name] = true; + } + } + + hooks.suppressDeprecationWarnings = false; + hooks.deprecationHandler = null; + + function isFunction(input) { + return ( + (typeof Function !== 'undefined' && input instanceof Function) || + Object.prototype.toString.call(input) === '[object Function]' + ); + } + + function set(config) { + var prop, i; + for (i in config) { + if (hasOwnProp(config, i)) { + prop = config[i]; + if (isFunction(prop)) { + this[i] = prop; + } else { + this['_' + i] = prop; + } + } + } + this._config = config; + // Lenient ordinal parsing accepts just a number in addition to + // number + (possibly) stuff coming from _dayOfMonthOrdinalParse. + // TODO: Remove "ordinalParse" fallback in next major release. + this._dayOfMonthOrdinalParseLenient = new RegExp( + (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) + + '|' + + /\d{1,2}/.source + ); + } + + function mergeConfigs(parentConfig, childConfig) { + var res = extend({}, parentConfig), + prop; + for (prop in childConfig) { + if (hasOwnProp(childConfig, prop)) { + if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) { + res[prop] = {}; + extend(res[prop], parentConfig[prop]); + extend(res[prop], childConfig[prop]); + } else if (childConfig[prop] != null) { + res[prop] = childConfig[prop]; + } else { + delete res[prop]; + } + } + } + for (prop in parentConfig) { + if ( + hasOwnProp(parentConfig, prop) && + !hasOwnProp(childConfig, prop) && + isObject(parentConfig[prop]) + ) { + // make sure changes to properties don't modify parent config + res[prop] = extend({}, res[prop]); + } + } + return res; + } + + function Locale(config) { + if (config != null) { + this.set(config); + } + } + + var keys; + + if (Object.keys) { + keys = Object.keys; + } else { + keys = function (obj) { + var i, + res = []; + for (i in obj) { + if (hasOwnProp(obj, i)) { + res.push(i); + } + } + return res; + }; + } + + var defaultCalendar = { + sameDay: '[Today at] LT', + nextDay: '[Tomorrow at] LT', + nextWeek: 'dddd [at] LT', + lastDay: '[Yesterday at] LT', + lastWeek: '[Last] dddd [at] LT', + sameElse: 'L', + }; + + function calendar(key, mom, now) { + var output = this._calendar[key] || this._calendar['sameElse']; + return isFunction(output) ? output.call(mom, now) : output; + } + + function zeroFill(number, targetLength, forceSign) { + var absNumber = '' + Math.abs(number), + zerosToFill = targetLength - absNumber.length, + sign = number >= 0; + return ( + (sign ? (forceSign ? '+' : '') : '-') + + Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + + absNumber + ); + } + + var formattingTokens = /(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g, + localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g, + formatFunctions = {}, + formatTokenFunctions = {}; + + // token: 'M' + // padded: ['MM', 2] + // ordinal: 'Mo' + // callback: function () { this.month() + 1 } + function addFormatToken(token, padded, ordinal, callback) { + var func = callback; + if (typeof callback === 'string') { + func = function () { + return this[callback](); + }; + } + if (token) { + formatTokenFunctions[token] = func; + } + if (padded) { + formatTokenFunctions[padded[0]] = function () { + return zeroFill(func.apply(this, arguments), padded[1], padded[2]); + }; + } + if (ordinal) { + formatTokenFunctions[ordinal] = function () { + return this.localeData().ordinal( + func.apply(this, arguments), + token + ); + }; + } + } + + function removeFormattingTokens(input) { + if (input.match(/\[[\s\S]/)) { + return input.replace(/^\[|\]$/g, ''); + } + return input.replace(/\\/g, ''); + } + + function makeFormatFunction(format) { + var array = format.match(formattingTokens), + i, + length; + + for (i = 0, length = array.length; i < length; i++) { + if (formatTokenFunctions[array[i]]) { + array[i] = formatTokenFunctions[array[i]]; + } else { + array[i] = removeFormattingTokens(array[i]); + } + } + + return function (mom) { + var output = '', + i; + for (i = 0; i < length; i++) { + output += isFunction(array[i]) + ? array[i].call(mom, format) + : array[i]; + } + return output; + }; + } + + // format date using native date object + function formatMoment(m, format) { + if (!m.isValid()) { + return m.localeData().invalidDate(); + } + + format = expandFormat(format, m.localeData()); + formatFunctions[format] = + formatFunctions[format] || makeFormatFunction(format); + + return formatFunctions[format](m); + } + + function expandFormat(format, locale) { + var i = 5; + + function replaceLongDateFormatTokens(input) { + return locale.longDateFormat(input) || input; + } + + localFormattingTokens.lastIndex = 0; + while (i >= 0 && localFormattingTokens.test(format)) { + format = format.replace( + localFormattingTokens, + replaceLongDateFormatTokens + ); + localFormattingTokens.lastIndex = 0; + i -= 1; + } + + return format; + } + + var defaultLongDateFormat = { + LTS: 'h:mm:ss A', + LT: 'h:mm A', + L: 'MM/DD/YYYY', + LL: 'MMMM D, YYYY', + LLL: 'MMMM D, YYYY h:mm A', + LLLL: 'dddd, MMMM D, YYYY h:mm A', + }; + + function longDateFormat(key) { + var format = this._longDateFormat[key], + formatUpper = this._longDateFormat[key.toUpperCase()]; + + if (format || !formatUpper) { + return format; + } + + this._longDateFormat[key] = formatUpper + .match(formattingTokens) + .map(function (tok) { + if ( + tok === 'MMMM' || + tok === 'MM' || + tok === 'DD' || + tok === 'dddd' + ) { + return tok.slice(1); + } + return tok; + }) + .join(''); + + return this._longDateFormat[key]; + } + + var defaultInvalidDate = 'Invalid date'; + + function invalidDate() { + return this._invalidDate; + } + + var defaultOrdinal = '%d', + defaultDayOfMonthOrdinalParse = /\d{1,2}/; + + function ordinal(number) { + return this._ordinal.replace('%d', number); + } + + var defaultRelativeTime = { + future: 'in %s', + past: '%s ago', + s: 'a few seconds', + ss: '%d seconds', + m: 'a minute', + mm: '%d minutes', + h: 'an hour', + hh: '%d hours', + d: 'a day', + dd: '%d days', + w: 'a week', + ww: '%d weeks', + M: 'a month', + MM: '%d months', + y: 'a year', + yy: '%d years', + }; + + function relativeTime(number, withoutSuffix, string, isFuture) { + var output = this._relativeTime[string]; + return isFunction(output) + ? output(number, withoutSuffix, string, isFuture) + : output.replace(/%d/i, number); + } + + function pastFuture(diff, output) { + var format = this._relativeTime[diff > 0 ? 'future' : 'past']; + return isFunction(format) ? format(output) : format.replace(/%s/i, output); + } + + var aliases = {}; + + function addUnitAlias(unit, shorthand) { + var lowerCase = unit.toLowerCase(); + aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit; + } + + function normalizeUnits(units) { + return typeof units === 'string' + ? aliases[units] || aliases[units.toLowerCase()] + : undefined; + } + + function normalizeObjectUnits(inputObject) { + var normalizedInput = {}, + normalizedProp, + prop; + + for (prop in inputObject) { + if (hasOwnProp(inputObject, prop)) { + normalizedProp = normalizeUnits(prop); + if (normalizedProp) { + normalizedInput[normalizedProp] = inputObject[prop]; + } + } + } + + return normalizedInput; + } + + var priorities = {}; + + function addUnitPriority(unit, priority) { + priorities[unit] = priority; + } + + function getPrioritizedUnits(unitsObj) { + var units = [], + u; + for (u in unitsObj) { + if (hasOwnProp(unitsObj, u)) { + units.push({ unit: u, priority: priorities[u] }); + } + } + units.sort(function (a, b) { + return a.priority - b.priority; + }); + return units; + } + + function isLeapYear(year) { + return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0; + } + + function absFloor(number) { + if (number < 0) { + // -0 -> 0 + return Math.ceil(number) || 0; + } else { + return Math.floor(number); + } + } + + function toInt(argumentForCoercion) { + var coercedNumber = +argumentForCoercion, + value = 0; + + if (coercedNumber !== 0 && isFinite(coercedNumber)) { + value = absFloor(coercedNumber); + } + + return value; + } + + function makeGetSet(unit, keepTime) { + return function (value) { + if (value != null) { + set$1(this, unit, value); + hooks.updateOffset(this, keepTime); + return this; + } else { + return get(this, unit); + } + }; + } + + function get(mom, unit) { + return mom.isValid() + ? mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() + : NaN; + } + + function set$1(mom, unit, value) { + if (mom.isValid() && !isNaN(value)) { + if ( + unit === 'FullYear' && + isLeapYear(mom.year()) && + mom.month() === 1 && + mom.date() === 29 + ) { + value = toInt(value); + mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit]( + value, + mom.month(), + daysInMonth(value, mom.month()) + ); + } else { + mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value); + } + } + } + + // MOMENTS + + function stringGet(units) { + units = normalizeUnits(units); + if (isFunction(this[units])) { + return this[units](); + } + return this; + } + + function stringSet(units, value) { + if (typeof units === 'object') { + units = normalizeObjectUnits(units); + var prioritized = getPrioritizedUnits(units), + i; + for (i = 0; i < prioritized.length; i++) { + this[prioritized[i].unit](units[prioritized[i].unit]); + } + } else { + units = normalizeUnits(units); + if (isFunction(this[units])) { + return this[units](value); + } + } + return this; + } + + var match1 = /\d/, // 0 - 9 + match2 = /\d\d/, // 00 - 99 + match3 = /\d{3}/, // 000 - 999 + match4 = /\d{4}/, // 0000 - 9999 + match6 = /[+-]?\d{6}/, // -999999 - 999999 + match1to2 = /\d\d?/, // 0 - 99 + match3to4 = /\d\d\d\d?/, // 999 - 9999 + match5to6 = /\d\d\d\d\d\d?/, // 99999 - 999999 + match1to3 = /\d{1,3}/, // 0 - 999 + match1to4 = /\d{1,4}/, // 0 - 9999 + match1to6 = /[+-]?\d{1,6}/, // -999999 - 999999 + matchUnsigned = /\d+/, // 0 - inf + matchSigned = /[+-]?\d+/, // -inf - inf + matchOffset = /Z|[+-]\d\d:?\d\d/gi, // +00:00 -00:00 +0000 -0000 or Z + matchShortOffset = /Z|[+-]\d\d(?::?\d\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z + matchTimestamp = /[+-]?\d+(\.\d{1,3})?/, // 123456789 123456789.123 + // any word (or two) characters or numbers including two/three word month in arabic. + // includes scottish gaelic two word and hyphenated months + matchWord = /[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i, + regexes; + + regexes = {}; + + function addRegexToken(token, regex, strictRegex) { + regexes[token] = isFunction(regex) + ? regex + : function (isStrict, localeData) { + return isStrict && strictRegex ? strictRegex : regex; + }; + } + + function getParseRegexForToken(token, config) { + if (!hasOwnProp(regexes, token)) { + return new RegExp(unescapeFormat(token)); + } + + return regexes[token](config._strict, config._locale); + } + + // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript + function unescapeFormat(s) { + return regexEscape( + s + .replace('\\', '') + .replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function ( + matched, + p1, + p2, + p3, + p4 + ) { + return p1 || p2 || p3 || p4; + }) + ); + } + + function regexEscape(s) { + return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); + } + + var tokens = {}; + + function addParseToken(token, callback) { + var i, + func = callback; + if (typeof token === 'string') { + token = [token]; + } + if (isNumber(callback)) { + func = function (input, array) { + array[callback] = toInt(input); + }; + } + for (i = 0; i < token.length; i++) { + tokens[token[i]] = func; + } + } + + function addWeekParseToken(token, callback) { + addParseToken(token, function (input, array, config, token) { + config._w = config._w || {}; + callback(input, config._w, config, token); + }); + } + + function addTimeToArrayFromToken(token, input, config) { + if (input != null && hasOwnProp(tokens, token)) { + tokens[token](input, config._a, config, token); + } + } + + var YEAR = 0, + MONTH = 1, + DATE = 2, + HOUR = 3, + MINUTE = 4, + SECOND = 5, + MILLISECOND = 6, + WEEK = 7, + WEEKDAY = 8; + + function mod(n, x) { + return ((n % x) + x) % x; + } + + var indexOf; + + if (Array.prototype.indexOf) { + indexOf = Array.prototype.indexOf; + } else { + indexOf = function (o) { + // I know + var i; + for (i = 0; i < this.length; ++i) { + if (this[i] === o) { + return i; + } + } + return -1; + }; + } + + function daysInMonth(year, month) { + if (isNaN(year) || isNaN(month)) { + return NaN; + } + var modMonth = mod(month, 12); + year += (month - modMonth) / 12; + return modMonth === 1 + ? isLeapYear(year) + ? 29 + : 28 + : 31 - ((modMonth % 7) % 2); + } + + // FORMATTING + + addFormatToken('M', ['MM', 2], 'Mo', function () { + return this.month() + 1; + }); + + addFormatToken('MMM', 0, 0, function (format) { + return this.localeData().monthsShort(this, format); + }); + + addFormatToken('MMMM', 0, 0, function (format) { + return this.localeData().months(this, format); + }); + + // ALIASES + + addUnitAlias('month', 'M'); + + // PRIORITY + + addUnitPriority('month', 8); + + // PARSING + + addRegexToken('M', match1to2); + addRegexToken('MM', match1to2, match2); + addRegexToken('MMM', function (isStrict, locale) { + return locale.monthsShortRegex(isStrict); + }); + addRegexToken('MMMM', function (isStrict, locale) { + return locale.monthsRegex(isStrict); + }); + + addParseToken(['M', 'MM'], function (input, array) { + array[MONTH] = toInt(input) - 1; + }); + + addParseToken(['MMM', 'MMMM'], function (input, array, config, token) { + var month = config._locale.monthsParse(input, token, config._strict); + // if we didn't find a month name, mark the date as invalid. + if (month != null) { + array[MONTH] = month; + } else { + getParsingFlags(config).invalidMonth = input; + } + }); + + // LOCALES + + var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split( + '_' + ), + defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split( + '_' + ), + MONTHS_IN_FORMAT = /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/, + defaultMonthsShortRegex = matchWord, + defaultMonthsRegex = matchWord; + + function localeMonths(m, format) { + if (!m) { + return isArray(this._months) + ? this._months + : this._months['standalone']; + } + return isArray(this._months) + ? this._months[m.month()] + : this._months[ + (this._months.isFormat || MONTHS_IN_FORMAT).test(format) + ? 'format' + : 'standalone' + ][m.month()]; + } + + function localeMonthsShort(m, format) { + if (!m) { + return isArray(this._monthsShort) + ? this._monthsShort + : this._monthsShort['standalone']; + } + return isArray(this._monthsShort) + ? this._monthsShort[m.month()] + : this._monthsShort[ + MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone' + ][m.month()]; + } + + function handleStrictParse(monthName, format, strict) { + var i, + ii, + mom, + llc = monthName.toLocaleLowerCase(); + if (!this._monthsParse) { + // this is not used + this._monthsParse = []; + this._longMonthsParse = []; + this._shortMonthsParse = []; + for (i = 0; i < 12; ++i) { + mom = createUTC([2000, i]); + this._shortMonthsParse[i] = this.monthsShort( + mom, + '' + ).toLocaleLowerCase(); + this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase(); + } + } + + if (strict) { + if (format === 'MMM') { + ii = indexOf.call(this._shortMonthsParse, llc); + return ii !== -1 ? ii : null; + } else { + ii = indexOf.call(this._longMonthsParse, llc); + return ii !== -1 ? ii : null; + } + } else { + if (format === 'MMM') { + ii = indexOf.call(this._shortMonthsParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf.call(this._longMonthsParse, llc); + return ii !== -1 ? ii : null; + } else { + ii = indexOf.call(this._longMonthsParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf.call(this._shortMonthsParse, llc); + return ii !== -1 ? ii : null; + } + } + } + + function localeMonthsParse(monthName, format, strict) { + var i, mom, regex; + + if (this._monthsParseExact) { + return handleStrictParse.call(this, monthName, format, strict); + } + + if (!this._monthsParse) { + this._monthsParse = []; + this._longMonthsParse = []; + this._shortMonthsParse = []; + } + + // TODO: add sorting + // Sorting makes sure if one month (or abbr) is a prefix of another + // see sorting in computeMonthsParse + for (i = 0; i < 12; i++) { + // make the regex if we don't have it already + mom = createUTC([2000, i]); + if (strict && !this._longMonthsParse[i]) { + this._longMonthsParse[i] = new RegExp( + '^' + this.months(mom, '').replace('.', '') + '$', + 'i' + ); + this._shortMonthsParse[i] = new RegExp( + '^' + this.monthsShort(mom, '').replace('.', '') + '$', + 'i' + ); + } + if (!strict && !this._monthsParse[i]) { + regex = + '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, ''); + this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i'); + } + // test the regex + if ( + strict && + format === 'MMMM' && + this._longMonthsParse[i].test(monthName) + ) { + return i; + } else if ( + strict && + format === 'MMM' && + this._shortMonthsParse[i].test(monthName) + ) { + return i; + } else if (!strict && this._monthsParse[i].test(monthName)) { + return i; + } + } + } + + // MOMENTS + + function setMonth(mom, value) { + var dayOfMonth; + + if (!mom.isValid()) { + // No op + return mom; + } + + if (typeof value === 'string') { + if (/^\d+$/.test(value)) { + value = toInt(value); + } else { + value = mom.localeData().monthsParse(value); + // TODO: Another silent failure? + if (!isNumber(value)) { + return mom; + } + } + } + + dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value)); + mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth); + return mom; + } + + function getSetMonth(value) { + if (value != null) { + setMonth(this, value); + hooks.updateOffset(this, true); + return this; + } else { + return get(this, 'Month'); + } + } + + function getDaysInMonth() { + return daysInMonth(this.year(), this.month()); + } + + function monthsShortRegex(isStrict) { + if (this._monthsParseExact) { + if (!hasOwnProp(this, '_monthsRegex')) { + computeMonthsParse.call(this); + } + if (isStrict) { + return this._monthsShortStrictRegex; + } else { + return this._monthsShortRegex; + } + } else { + if (!hasOwnProp(this, '_monthsShortRegex')) { + this._monthsShortRegex = defaultMonthsShortRegex; + } + return this._monthsShortStrictRegex && isStrict + ? this._monthsShortStrictRegex + : this._monthsShortRegex; + } + } + + function monthsRegex(isStrict) { + if (this._monthsParseExact) { + if (!hasOwnProp(this, '_monthsRegex')) { + computeMonthsParse.call(this); + } + if (isStrict) { + return this._monthsStrictRegex; + } else { + return this._monthsRegex; + } + } else { + if (!hasOwnProp(this, '_monthsRegex')) { + this._monthsRegex = defaultMonthsRegex; + } + return this._monthsStrictRegex && isStrict + ? this._monthsStrictRegex + : this._monthsRegex; + } + } + + function computeMonthsParse() { + function cmpLenRev(a, b) { + return b.length - a.length; + } + + var shortPieces = [], + longPieces = [], + mixedPieces = [], + i, + mom; + for (i = 0; i < 12; i++) { + // make the regex if we don't have it already + mom = createUTC([2000, i]); + shortPieces.push(this.monthsShort(mom, '')); + longPieces.push(this.months(mom, '')); + mixedPieces.push(this.months(mom, '')); + mixedPieces.push(this.monthsShort(mom, '')); + } + // Sorting makes sure if one month (or abbr) is a prefix of another it + // will match the longer piece. + shortPieces.sort(cmpLenRev); + longPieces.sort(cmpLenRev); + mixedPieces.sort(cmpLenRev); + for (i = 0; i < 12; i++) { + shortPieces[i] = regexEscape(shortPieces[i]); + longPieces[i] = regexEscape(longPieces[i]); + } + for (i = 0; i < 24; i++) { + mixedPieces[i] = regexEscape(mixedPieces[i]); + } + + this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i'); + this._monthsShortRegex = this._monthsRegex; + this._monthsStrictRegex = new RegExp( + '^(' + longPieces.join('|') + ')', + 'i' + ); + this._monthsShortStrictRegex = new RegExp( + '^(' + shortPieces.join('|') + ')', + 'i' + ); + } + + // FORMATTING + + addFormatToken('Y', 0, 0, function () { + var y = this.year(); + return y <= 9999 ? zeroFill(y, 4) : '+' + y; + }); + + addFormatToken(0, ['YY', 2], 0, function () { + return this.year() % 100; + }); + + addFormatToken(0, ['YYYY', 4], 0, 'year'); + addFormatToken(0, ['YYYYY', 5], 0, 'year'); + addFormatToken(0, ['YYYYYY', 6, true], 0, 'year'); + + // ALIASES + + addUnitAlias('year', 'y'); + + // PRIORITIES + + addUnitPriority('year', 1); + + // PARSING + + addRegexToken('Y', matchSigned); + addRegexToken('YY', match1to2, match2); + addRegexToken('YYYY', match1to4, match4); + addRegexToken('YYYYY', match1to6, match6); + addRegexToken('YYYYYY', match1to6, match6); + + addParseToken(['YYYYY', 'YYYYYY'], YEAR); + addParseToken('YYYY', function (input, array) { + array[YEAR] = + input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input); + }); + addParseToken('YY', function (input, array) { + array[YEAR] = hooks.parseTwoDigitYear(input); + }); + addParseToken('Y', function (input, array) { + array[YEAR] = parseInt(input, 10); + }); + + // HELPERS + + function daysInYear(year) { + return isLeapYear(year) ? 366 : 365; + } + + // HOOKS + + hooks.parseTwoDigitYear = function (input) { + return toInt(input) + (toInt(input) > 68 ? 1900 : 2000); + }; + + // MOMENTS + + var getSetYear = makeGetSet('FullYear', true); + + function getIsLeapYear() { + return isLeapYear(this.year()); + } + + function createDate(y, m, d, h, M, s, ms) { + // can't just apply() to create a date: + // https://stackoverflow.com/q/181348 + var date; + // the date constructor remaps years 0-99 to 1900-1999 + if (y < 100 && y >= 0) { + // preserve leap years using a full 400 year cycle, then reset + date = new Date(y + 400, m, d, h, M, s, ms); + if (isFinite(date.getFullYear())) { + date.setFullYear(y); + } + } else { + date = new Date(y, m, d, h, M, s, ms); + } + + return date; + } + + function createUTCDate(y) { + var date, args; + // the Date.UTC function remaps years 0-99 to 1900-1999 + if (y < 100 && y >= 0) { + args = Array.prototype.slice.call(arguments); + // preserve leap years using a full 400 year cycle, then reset + args[0] = y + 400; + date = new Date(Date.UTC.apply(null, args)); + if (isFinite(date.getUTCFullYear())) { + date.setUTCFullYear(y); + } + } else { + date = new Date(Date.UTC.apply(null, arguments)); + } + + return date; + } + + // start-of-first-week - start-of-year + function firstWeekOffset(year, dow, doy) { + var // first-week day -- which january is always in the first week (4 for iso, 1 for other) + fwd = 7 + dow - doy, + // first-week day local weekday -- which local weekday is fwd + fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7; + + return -fwdlw + fwd - 1; + } + + // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday + function dayOfYearFromWeeks(year, week, weekday, dow, doy) { + var localWeekday = (7 + weekday - dow) % 7, + weekOffset = firstWeekOffset(year, dow, doy), + dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset, + resYear, + resDayOfYear; + + if (dayOfYear <= 0) { + resYear = year - 1; + resDayOfYear = daysInYear(resYear) + dayOfYear; + } else if (dayOfYear > daysInYear(year)) { + resYear = year + 1; + resDayOfYear = dayOfYear - daysInYear(year); + } else { + resYear = year; + resDayOfYear = dayOfYear; + } + + return { + year: resYear, + dayOfYear: resDayOfYear, + }; + } + + function weekOfYear(mom, dow, doy) { + var weekOffset = firstWeekOffset(mom.year(), dow, doy), + week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1, + resWeek, + resYear; + + if (week < 1) { + resYear = mom.year() - 1; + resWeek = week + weeksInYear(resYear, dow, doy); + } else if (week > weeksInYear(mom.year(), dow, doy)) { + resWeek = week - weeksInYear(mom.year(), dow, doy); + resYear = mom.year() + 1; + } else { + resYear = mom.year(); + resWeek = week; + } + + return { + week: resWeek, + year: resYear, + }; + } + + function weeksInYear(year, dow, doy) { + var weekOffset = firstWeekOffset(year, dow, doy), + weekOffsetNext = firstWeekOffset(year + 1, dow, doy); + return (daysInYear(year) - weekOffset + weekOffsetNext) / 7; + } + + // FORMATTING + + addFormatToken('w', ['ww', 2], 'wo', 'week'); + addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek'); + + // ALIASES + + addUnitAlias('week', 'w'); + addUnitAlias('isoWeek', 'W'); + + // PRIORITIES + + addUnitPriority('week', 5); + addUnitPriority('isoWeek', 5); + + // PARSING + + addRegexToken('w', match1to2); + addRegexToken('ww', match1to2, match2); + addRegexToken('W', match1to2); + addRegexToken('WW', match1to2, match2); + + addWeekParseToken(['w', 'ww', 'W', 'WW'], function ( + input, + week, + config, + token + ) { + week[token.substr(0, 1)] = toInt(input); + }); + + // HELPERS + + // LOCALES + + function localeWeek(mom) { + return weekOfYear(mom, this._week.dow, this._week.doy).week; + } + + var defaultLocaleWeek = { + dow: 0, // Sunday is the first day of the week. + doy: 6, // The week that contains Jan 6th is the first week of the year. + }; + + function localeFirstDayOfWeek() { + return this._week.dow; + } + + function localeFirstDayOfYear() { + return this._week.doy; + } + + // MOMENTS + + function getSetWeek(input) { + var week = this.localeData().week(this); + return input == null ? week : this.add((input - week) * 7, 'd'); + } + + function getSetISOWeek(input) { + var week = weekOfYear(this, 1, 4).week; + return input == null ? week : this.add((input - week) * 7, 'd'); + } + + // FORMATTING + + addFormatToken('d', 0, 'do', 'day'); + + addFormatToken('dd', 0, 0, function (format) { + return this.localeData().weekdaysMin(this, format); + }); + + addFormatToken('ddd', 0, 0, function (format) { + return this.localeData().weekdaysShort(this, format); + }); + + addFormatToken('dddd', 0, 0, function (format) { + return this.localeData().weekdays(this, format); + }); + + addFormatToken('e', 0, 0, 'weekday'); + addFormatToken('E', 0, 0, 'isoWeekday'); + + // ALIASES + + addUnitAlias('day', 'd'); + addUnitAlias('weekday', 'e'); + addUnitAlias('isoWeekday', 'E'); + + // PRIORITY + addUnitPriority('day', 11); + addUnitPriority('weekday', 11); + addUnitPriority('isoWeekday', 11); + + // PARSING + + addRegexToken('d', match1to2); + addRegexToken('e', match1to2); + addRegexToken('E', match1to2); + addRegexToken('dd', function (isStrict, locale) { + return locale.weekdaysMinRegex(isStrict); + }); + addRegexToken('ddd', function (isStrict, locale) { + return locale.weekdaysShortRegex(isStrict); + }); + addRegexToken('dddd', function (isStrict, locale) { + return locale.weekdaysRegex(isStrict); + }); + + addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) { + var weekday = config._locale.weekdaysParse(input, token, config._strict); + // if we didn't get a weekday name, mark the date as invalid + if (weekday != null) { + week.d = weekday; + } else { + getParsingFlags(config).invalidWeekday = input; + } + }); + + addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) { + week[token] = toInt(input); + }); + + // HELPERS + + function parseWeekday(input, locale) { + if (typeof input !== 'string') { + return input; + } + + if (!isNaN(input)) { + return parseInt(input, 10); + } + + input = locale.weekdaysParse(input); + if (typeof input === 'number') { + return input; + } + + return null; + } + + function parseIsoWeekday(input, locale) { + if (typeof input === 'string') { + return locale.weekdaysParse(input) % 7 || 7; + } + return isNaN(input) ? null : input; + } + + // LOCALES + function shiftWeekdays(ws, n) { + return ws.slice(n, 7).concat(ws.slice(0, n)); + } + + var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split( + '_' + ), + defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + defaultWeekdaysRegex = matchWord, + defaultWeekdaysShortRegex = matchWord, + defaultWeekdaysMinRegex = matchWord; + + function localeWeekdays(m, format) { + var weekdays = isArray(this._weekdays) + ? this._weekdays + : this._weekdays[ + m && m !== true && this._weekdays.isFormat.test(format) + ? 'format' + : 'standalone' + ]; + return m === true + ? shiftWeekdays(weekdays, this._week.dow) + : m + ? weekdays[m.day()] + : weekdays; + } + + function localeWeekdaysShort(m) { + return m === true + ? shiftWeekdays(this._weekdaysShort, this._week.dow) + : m + ? this._weekdaysShort[m.day()] + : this._weekdaysShort; + } + + function localeWeekdaysMin(m) { + return m === true + ? shiftWeekdays(this._weekdaysMin, this._week.dow) + : m + ? this._weekdaysMin[m.day()] + : this._weekdaysMin; + } + + function handleStrictParse$1(weekdayName, format, strict) { + var i, + ii, + mom, + llc = weekdayName.toLocaleLowerCase(); + if (!this._weekdaysParse) { + this._weekdaysParse = []; + this._shortWeekdaysParse = []; + this._minWeekdaysParse = []; + + for (i = 0; i < 7; ++i) { + mom = createUTC([2000, 1]).day(i); + this._minWeekdaysParse[i] = this.weekdaysMin( + mom, + '' + ).toLocaleLowerCase(); + this._shortWeekdaysParse[i] = this.weekdaysShort( + mom, + '' + ).toLocaleLowerCase(); + this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase(); + } + } + + if (strict) { + if (format === 'dddd') { + ii = indexOf.call(this._weekdaysParse, llc); + return ii !== -1 ? ii : null; + } else if (format === 'ddd') { + ii = indexOf.call(this._shortWeekdaysParse, llc); + return ii !== -1 ? ii : null; + } else { + ii = indexOf.call(this._minWeekdaysParse, llc); + return ii !== -1 ? ii : null; + } + } else { + if (format === 'dddd') { + ii = indexOf.call(this._weekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf.call(this._shortWeekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf.call(this._minWeekdaysParse, llc); + return ii !== -1 ? ii : null; + } else if (format === 'ddd') { + ii = indexOf.call(this._shortWeekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf.call(this._weekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf.call(this._minWeekdaysParse, llc); + return ii !== -1 ? ii : null; + } else { + ii = indexOf.call(this._minWeekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf.call(this._weekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf.call(this._shortWeekdaysParse, llc); + return ii !== -1 ? ii : null; + } + } + } + + function localeWeekdaysParse(weekdayName, format, strict) { + var i, mom, regex; + + if (this._weekdaysParseExact) { + return handleStrictParse$1.call(this, weekdayName, format, strict); + } + + if (!this._weekdaysParse) { + this._weekdaysParse = []; + this._minWeekdaysParse = []; + this._shortWeekdaysParse = []; + this._fullWeekdaysParse = []; + } + + for (i = 0; i < 7; i++) { + // make the regex if we don't have it already + + mom = createUTC([2000, 1]).day(i); + if (strict && !this._fullWeekdaysParse[i]) { + this._fullWeekdaysParse[i] = new RegExp( + '^' + this.weekdays(mom, '').replace('.', '\\.?') + '$', + 'i' + ); + this._shortWeekdaysParse[i] = new RegExp( + '^' + this.weekdaysShort(mom, '').replace('.', '\\.?') + '$', + 'i' + ); + this._minWeekdaysParse[i] = new RegExp( + '^' + this.weekdaysMin(mom, '').replace('.', '\\.?') + '$', + 'i' + ); + } + if (!this._weekdaysParse[i]) { + regex = + '^' + + this.weekdays(mom, '') + + '|^' + + this.weekdaysShort(mom, '') + + '|^' + + this.weekdaysMin(mom, ''); + this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i'); + } + // test the regex + if ( + strict && + format === 'dddd' && + this._fullWeekdaysParse[i].test(weekdayName) + ) { + return i; + } else if ( + strict && + format === 'ddd' && + this._shortWeekdaysParse[i].test(weekdayName) + ) { + return i; + } else if ( + strict && + format === 'dd' && + this._minWeekdaysParse[i].test(weekdayName) + ) { + return i; + } else if (!strict && this._weekdaysParse[i].test(weekdayName)) { + return i; + } + } + } + + // MOMENTS + + function getSetDayOfWeek(input) { + if (!this.isValid()) { + return input != null ? this : NaN; + } + var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay(); + if (input != null) { + input = parseWeekday(input, this.localeData()); + return this.add(input - day, 'd'); + } else { + return day; + } + } + + function getSetLocaleDayOfWeek(input) { + if (!this.isValid()) { + return input != null ? this : NaN; + } + var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7; + return input == null ? weekday : this.add(input - weekday, 'd'); + } + + function getSetISODayOfWeek(input) { + if (!this.isValid()) { + return input != null ? this : NaN; + } + + // behaves the same as moment#day except + // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6) + // as a setter, sunday should belong to the previous week. + + if (input != null) { + var weekday = parseIsoWeekday(input, this.localeData()); + return this.day(this.day() % 7 ? weekday : weekday - 7); + } else { + return this.day() || 7; + } + } + + function weekdaysRegex(isStrict) { + if (this._weekdaysParseExact) { + if (!hasOwnProp(this, '_weekdaysRegex')) { + computeWeekdaysParse.call(this); + } + if (isStrict) { + return this._weekdaysStrictRegex; + } else { + return this._weekdaysRegex; + } + } else { + if (!hasOwnProp(this, '_weekdaysRegex')) { + this._weekdaysRegex = defaultWeekdaysRegex; + } + return this._weekdaysStrictRegex && isStrict + ? this._weekdaysStrictRegex + : this._weekdaysRegex; + } + } + + function weekdaysShortRegex(isStrict) { + if (this._weekdaysParseExact) { + if (!hasOwnProp(this, '_weekdaysRegex')) { + computeWeekdaysParse.call(this); + } + if (isStrict) { + return this._weekdaysShortStrictRegex; + } else { + return this._weekdaysShortRegex; + } + } else { + if (!hasOwnProp(this, '_weekdaysShortRegex')) { + this._weekdaysShortRegex = defaultWeekdaysShortRegex; + } + return this._weekdaysShortStrictRegex && isStrict + ? this._weekdaysShortStrictRegex + : this._weekdaysShortRegex; + } + } + + function weekdaysMinRegex(isStrict) { + if (this._weekdaysParseExact) { + if (!hasOwnProp(this, '_weekdaysRegex')) { + computeWeekdaysParse.call(this); + } + if (isStrict) { + return this._weekdaysMinStrictRegex; + } else { + return this._weekdaysMinRegex; + } + } else { + if (!hasOwnProp(this, '_weekdaysMinRegex')) { + this._weekdaysMinRegex = defaultWeekdaysMinRegex; + } + return this._weekdaysMinStrictRegex && isStrict + ? this._weekdaysMinStrictRegex + : this._weekdaysMinRegex; + } + } + + function computeWeekdaysParse() { + function cmpLenRev(a, b) { + return b.length - a.length; + } + + var minPieces = [], + shortPieces = [], + longPieces = [], + mixedPieces = [], + i, + mom, + minp, + shortp, + longp; + for (i = 0; i < 7; i++) { + // make the regex if we don't have it already + mom = createUTC([2000, 1]).day(i); + minp = regexEscape(this.weekdaysMin(mom, '')); + shortp = regexEscape(this.weekdaysShort(mom, '')); + longp = regexEscape(this.weekdays(mom, '')); + minPieces.push(minp); + shortPieces.push(shortp); + longPieces.push(longp); + mixedPieces.push(minp); + mixedPieces.push(shortp); + mixedPieces.push(longp); + } + // Sorting makes sure if one weekday (or abbr) is a prefix of another it + // will match the longer piece. + minPieces.sort(cmpLenRev); + shortPieces.sort(cmpLenRev); + longPieces.sort(cmpLenRev); + mixedPieces.sort(cmpLenRev); + + this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i'); + this._weekdaysShortRegex = this._weekdaysRegex; + this._weekdaysMinRegex = this._weekdaysRegex; + + this._weekdaysStrictRegex = new RegExp( + '^(' + longPieces.join('|') + ')', + 'i' + ); + this._weekdaysShortStrictRegex = new RegExp( + '^(' + shortPieces.join('|') + ')', + 'i' + ); + this._weekdaysMinStrictRegex = new RegExp( + '^(' + minPieces.join('|') + ')', + 'i' + ); + } + + // FORMATTING + + function hFormat() { + return this.hours() % 12 || 12; + } + + function kFormat() { + return this.hours() || 24; + } + + addFormatToken('H', ['HH', 2], 0, 'hour'); + addFormatToken('h', ['hh', 2], 0, hFormat); + addFormatToken('k', ['kk', 2], 0, kFormat); + + addFormatToken('hmm', 0, 0, function () { + return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2); + }); + + addFormatToken('hmmss', 0, 0, function () { + return ( + '' + + hFormat.apply(this) + + zeroFill(this.minutes(), 2) + + zeroFill(this.seconds(), 2) + ); + }); + + addFormatToken('Hmm', 0, 0, function () { + return '' + this.hours() + zeroFill(this.minutes(), 2); + }); + + addFormatToken('Hmmss', 0, 0, function () { + return ( + '' + + this.hours() + + zeroFill(this.minutes(), 2) + + zeroFill(this.seconds(), 2) + ); + }); + + function meridiem(token, lowercase) { + addFormatToken(token, 0, 0, function () { + return this.localeData().meridiem( + this.hours(), + this.minutes(), + lowercase + ); + }); + } + + meridiem('a', true); + meridiem('A', false); + + // ALIASES + + addUnitAlias('hour', 'h'); + + // PRIORITY + addUnitPriority('hour', 13); + + // PARSING + + function matchMeridiem(isStrict, locale) { + return locale._meridiemParse; + } + + addRegexToken('a', matchMeridiem); + addRegexToken('A', matchMeridiem); + addRegexToken('H', match1to2); + addRegexToken('h', match1to2); + addRegexToken('k', match1to2); + addRegexToken('HH', match1to2, match2); + addRegexToken('hh', match1to2, match2); + addRegexToken('kk', match1to2, match2); + + addRegexToken('hmm', match3to4); + addRegexToken('hmmss', match5to6); + addRegexToken('Hmm', match3to4); + addRegexToken('Hmmss', match5to6); + + addParseToken(['H', 'HH'], HOUR); + addParseToken(['k', 'kk'], function (input, array, config) { + var kInput = toInt(input); + array[HOUR] = kInput === 24 ? 0 : kInput; + }); + addParseToken(['a', 'A'], function (input, array, config) { + config._isPm = config._locale.isPM(input); + config._meridiem = input; + }); + addParseToken(['h', 'hh'], function (input, array, config) { + array[HOUR] = toInt(input); + getParsingFlags(config).bigHour = true; + }); + addParseToken('hmm', function (input, array, config) { + var pos = input.length - 2; + array[HOUR] = toInt(input.substr(0, pos)); + array[MINUTE] = toInt(input.substr(pos)); + getParsingFlags(config).bigHour = true; + }); + addParseToken('hmmss', function (input, array, config) { + var pos1 = input.length - 4, + pos2 = input.length - 2; + array[HOUR] = toInt(input.substr(0, pos1)); + array[MINUTE] = toInt(input.substr(pos1, 2)); + array[SECOND] = toInt(input.substr(pos2)); + getParsingFlags(config).bigHour = true; + }); + addParseToken('Hmm', function (input, array, config) { + var pos = input.length - 2; + array[HOUR] = toInt(input.substr(0, pos)); + array[MINUTE] = toInt(input.substr(pos)); + }); + addParseToken('Hmmss', function (input, array, config) { + var pos1 = input.length - 4, + pos2 = input.length - 2; + array[HOUR] = toInt(input.substr(0, pos1)); + array[MINUTE] = toInt(input.substr(pos1, 2)); + array[SECOND] = toInt(input.substr(pos2)); + }); + + // LOCALES + + function localeIsPM(input) { + // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays + // Using charAt should be more compatible. + return (input + '').toLowerCase().charAt(0) === 'p'; + } + + var defaultLocaleMeridiemParse = /[ap]\.?m?\.?/i, + // Setting the hour should keep the time, because the user explicitly + // specified which hour they want. So trying to maintain the same hour (in + // a new timezone) makes sense. Adding/subtracting hours does not follow + // this rule. + getSetHour = makeGetSet('Hours', true); + + function localeMeridiem(hours, minutes, isLower) { + if (hours > 11) { + return isLower ? 'pm' : 'PM'; + } else { + return isLower ? 'am' : 'AM'; + } + } + + var baseConfig = { + calendar: defaultCalendar, + longDateFormat: defaultLongDateFormat, + invalidDate: defaultInvalidDate, + ordinal: defaultOrdinal, + dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse, + relativeTime: defaultRelativeTime, + + months: defaultLocaleMonths, + monthsShort: defaultLocaleMonthsShort, + + week: defaultLocaleWeek, + + weekdays: defaultLocaleWeekdays, + weekdaysMin: defaultLocaleWeekdaysMin, + weekdaysShort: defaultLocaleWeekdaysShort, + + meridiemParse: defaultLocaleMeridiemParse, + }; + + // internal storage for locale config files + var locales = {}, + localeFamilies = {}, + globalLocale; + + function commonPrefix(arr1, arr2) { + var i, + minl = Math.min(arr1.length, arr2.length); + for (i = 0; i < minl; i += 1) { + if (arr1[i] !== arr2[i]) { + return i; + } + } + return minl; + } + + function normalizeLocale(key) { + return key ? key.toLowerCase().replace('_', '-') : key; + } + + // pick the locale from the array + // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each + // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root + function chooseLocale(names) { + var i = 0, + j, + next, + locale, + split; + + while (i < names.length) { + split = normalizeLocale(names[i]).split('-'); + j = split.length; + next = normalizeLocale(names[i + 1]); + next = next ? next.split('-') : null; + while (j > 0) { + locale = loadLocale(split.slice(0, j).join('-')); + if (locale) { + return locale; + } + if ( + next && + next.length >= j && + commonPrefix(split, next) >= j - 1 + ) { + //the next array item is better than a shallower substring of this one + break; + } + j--; + } + i++; + } + return globalLocale; + } + + function loadLocale(name) { + var oldLocale = null, + aliasedRequire; + // TODO: Find a better way to register and load all the locales in Node + if ( + locales[name] === undefined && + typeof module !== 'undefined' && + module && + module.exports + ) { + try { + oldLocale = globalLocale._abbr; + aliasedRequire = require; + aliasedRequire('./locale/' + name); + getSetGlobalLocale(oldLocale); + } catch (e) { + // mark as not found to avoid repeating expensive file require call causing high CPU + // when trying to find en-US, en_US, en-us for every format call + locales[name] = null; // null means not found + } + } + return locales[name]; + } + + // This function will load locale and then set the global locale. If + // no arguments are passed in, it will simply return the current global + // locale key. + function getSetGlobalLocale(key, values) { + var data; + if (key) { + if (isUndefined(values)) { + data = getLocale(key); + } else { + data = defineLocale(key, values); + } + + if (data) { + // moment.duration._locale = moment._locale = data; + globalLocale = data; + } else { + if (typeof console !== 'undefined' && console.warn) { + //warn user if arguments are passed but the locale could not be set + console.warn( + 'Locale ' + key + ' not found. Did you forget to load it?' + ); + } + } + } + + return globalLocale._abbr; + } + + function defineLocale(name, config) { + if (config !== null) { + var locale, + parentConfig = baseConfig; + config.abbr = name; + if (locales[name] != null) { + deprecateSimple( + 'defineLocaleOverride', + 'use moment.updateLocale(localeName, config) to change ' + + 'an existing locale. moment.defineLocale(localeName, ' + + 'config) should only be used for creating a new locale ' + + 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.' + ); + parentConfig = locales[name]._config; + } else if (config.parentLocale != null) { + if (locales[config.parentLocale] != null) { + parentConfig = locales[config.parentLocale]._config; + } else { + locale = loadLocale(config.parentLocale); + if (locale != null) { + parentConfig = locale._config; + } else { + if (!localeFamilies[config.parentLocale]) { + localeFamilies[config.parentLocale] = []; + } + localeFamilies[config.parentLocale].push({ + name: name, + config: config, + }); + return null; + } + } + } + locales[name] = new Locale(mergeConfigs(parentConfig, config)); + + if (localeFamilies[name]) { + localeFamilies[name].forEach(function (x) { + defineLocale(x.name, x.config); + }); + } + + // backwards compat for now: also set the locale + // make sure we set the locale AFTER all child locales have been + // created, so we won't end up with the child locale set. + getSetGlobalLocale(name); + + return locales[name]; + } else { + // useful for testing + delete locales[name]; + return null; + } + } + + function updateLocale(name, config) { + if (config != null) { + var locale, + tmpLocale, + parentConfig = baseConfig; + + if (locales[name] != null && locales[name].parentLocale != null) { + // Update existing child locale in-place to avoid memory-leaks + locales[name].set(mergeConfigs(locales[name]._config, config)); + } else { + // MERGE + tmpLocale = loadLocale(name); + if (tmpLocale != null) { + parentConfig = tmpLocale._config; + } + config = mergeConfigs(parentConfig, config); + if (tmpLocale == null) { + // updateLocale is called for creating a new locale + // Set abbr so it will have a name (getters return + // undefined otherwise). + config.abbr = name; + } + locale = new Locale(config); + locale.parentLocale = locales[name]; + locales[name] = locale; + } + + // backwards compat for now: also set the locale + getSetGlobalLocale(name); + } else { + // pass null for config to unupdate, useful for tests + if (locales[name] != null) { + if (locales[name].parentLocale != null) { + locales[name] = locales[name].parentLocale; + if (name === getSetGlobalLocale()) { + getSetGlobalLocale(name); + } + } else if (locales[name] != null) { + delete locales[name]; + } + } + } + return locales[name]; + } + + // returns locale data + function getLocale(key) { + var locale; + + if (key && key._locale && key._locale._abbr) { + key = key._locale._abbr; + } + + if (!key) { + return globalLocale; + } + + if (!isArray(key)) { + //short-circuit everything else + locale = loadLocale(key); + if (locale) { + return locale; + } + key = [key]; + } + + return chooseLocale(key); + } + + function listLocales() { + return keys(locales); + } + + function checkOverflow(m) { + var overflow, + a = m._a; + + if (a && getParsingFlags(m).overflow === -2) { + overflow = + a[MONTH] < 0 || a[MONTH] > 11 + ? MONTH + : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH]) + ? DATE + : a[HOUR] < 0 || + a[HOUR] > 24 || + (a[HOUR] === 24 && + (a[MINUTE] !== 0 || + a[SECOND] !== 0 || + a[MILLISECOND] !== 0)) + ? HOUR + : a[MINUTE] < 0 || a[MINUTE] > 59 + ? MINUTE + : a[SECOND] < 0 || a[SECOND] > 59 + ? SECOND + : a[MILLISECOND] < 0 || a[MILLISECOND] > 999 + ? MILLISECOND + : -1; + + if ( + getParsingFlags(m)._overflowDayOfYear && + (overflow < YEAR || overflow > DATE) + ) { + overflow = DATE; + } + if (getParsingFlags(m)._overflowWeeks && overflow === -1) { + overflow = WEEK; + } + if (getParsingFlags(m)._overflowWeekday && overflow === -1) { + overflow = WEEKDAY; + } + + getParsingFlags(m).overflow = overflow; + } + + return m; + } + + // iso 8601 regex + // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00) + var extendedIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/, + basicIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/, + tzRegex = /Z|[+-]\d\d(?::?\d\d)?/, + isoDates = [ + ['YYYYYY-MM-DD', /[+-]\d{6}-\d\d-\d\d/], + ['YYYY-MM-DD', /\d{4}-\d\d-\d\d/], + ['GGGG-[W]WW-E', /\d{4}-W\d\d-\d/], + ['GGGG-[W]WW', /\d{4}-W\d\d/, false], + ['YYYY-DDD', /\d{4}-\d{3}/], + ['YYYY-MM', /\d{4}-\d\d/, false], + ['YYYYYYMMDD', /[+-]\d{10}/], + ['YYYYMMDD', /\d{8}/], + ['GGGG[W]WWE', /\d{4}W\d{3}/], + ['GGGG[W]WW', /\d{4}W\d{2}/, false], + ['YYYYDDD', /\d{7}/], + ['YYYYMM', /\d{6}/, false], + ['YYYY', /\d{4}/, false], + ], + // iso time formats and regexes + isoTimes = [ + ['HH:mm:ss.SSSS', /\d\d:\d\d:\d\d\.\d+/], + ['HH:mm:ss,SSSS', /\d\d:\d\d:\d\d,\d+/], + ['HH:mm:ss', /\d\d:\d\d:\d\d/], + ['HH:mm', /\d\d:\d\d/], + ['HHmmss.SSSS', /\d\d\d\d\d\d\.\d+/], + ['HHmmss,SSSS', /\d\d\d\d\d\d,\d+/], + ['HHmmss', /\d\d\d\d\d\d/], + ['HHmm', /\d\d\d\d/], + ['HH', /\d\d/], + ], + aspNetJsonRegex = /^\/?Date\((-?\d+)/i, + // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3 + rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/, + obsOffsets = { + UT: 0, + GMT: 0, + EDT: -4 * 60, + EST: -5 * 60, + CDT: -5 * 60, + CST: -6 * 60, + MDT: -6 * 60, + MST: -7 * 60, + PDT: -7 * 60, + PST: -8 * 60, + }; + + // date from iso format + function configFromISO(config) { + var i, + l, + string = config._i, + match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string), + allowTime, + dateFormat, + timeFormat, + tzFormat; + + if (match) { + getParsingFlags(config).iso = true; + + for (i = 0, l = isoDates.length; i < l; i++) { + if (isoDates[i][1].exec(match[1])) { + dateFormat = isoDates[i][0]; + allowTime = isoDates[i][2] !== false; + break; + } + } + if (dateFormat == null) { + config._isValid = false; + return; + } + if (match[3]) { + for (i = 0, l = isoTimes.length; i < l; i++) { + if (isoTimes[i][1].exec(match[3])) { + // match[2] should be 'T' or space + timeFormat = (match[2] || ' ') + isoTimes[i][0]; + break; + } + } + if (timeFormat == null) { + config._isValid = false; + return; + } + } + if (!allowTime && timeFormat != null) { + config._isValid = false; + return; + } + if (match[4]) { + if (tzRegex.exec(match[4])) { + tzFormat = 'Z'; + } else { + config._isValid = false; + return; + } + } + config._f = dateFormat + (timeFormat || '') + (tzFormat || ''); + configFromStringAndFormat(config); + } else { + config._isValid = false; + } + } + + function extractFromRFC2822Strings( + yearStr, + monthStr, + dayStr, + hourStr, + minuteStr, + secondStr + ) { + var result = [ + untruncateYear(yearStr), + defaultLocaleMonthsShort.indexOf(monthStr), + parseInt(dayStr, 10), + parseInt(hourStr, 10), + parseInt(minuteStr, 10), + ]; + + if (secondStr) { + result.push(parseInt(secondStr, 10)); + } + + return result; + } + + function untruncateYear(yearStr) { + var year = parseInt(yearStr, 10); + if (year <= 49) { + return 2000 + year; + } else if (year <= 999) { + return 1900 + year; + } + return year; + } + + function preprocessRFC2822(s) { + // Remove comments and folding whitespace and replace multiple-spaces with a single space + return s + .replace(/\([^)]*\)|[\n\t]/g, ' ') + .replace(/(\s\s+)/g, ' ') + .replace(/^\s\s*/, '') + .replace(/\s\s*$/, ''); + } + + function checkWeekday(weekdayStr, parsedInput, config) { + if (weekdayStr) { + // TODO: Replace the vanilla JS Date object with an independent day-of-week check. + var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr), + weekdayActual = new Date( + parsedInput[0], + parsedInput[1], + parsedInput[2] + ).getDay(); + if (weekdayProvided !== weekdayActual) { + getParsingFlags(config).weekdayMismatch = true; + config._isValid = false; + return false; + } + } + return true; + } + + function calculateOffset(obsOffset, militaryOffset, numOffset) { + if (obsOffset) { + return obsOffsets[obsOffset]; + } else if (militaryOffset) { + // the only allowed military tz is Z + return 0; + } else { + var hm = parseInt(numOffset, 10), + m = hm % 100, + h = (hm - m) / 100; + return h * 60 + m; + } + } + + // date and time from ref 2822 format + function configFromRFC2822(config) { + var match = rfc2822.exec(preprocessRFC2822(config._i)), + parsedArray; + if (match) { + parsedArray = extractFromRFC2822Strings( + match[4], + match[3], + match[2], + match[5], + match[6], + match[7] + ); + if (!checkWeekday(match[1], parsedArray, config)) { + return; + } + + config._a = parsedArray; + config._tzm = calculateOffset(match[8], match[9], match[10]); + + config._d = createUTCDate.apply(null, config._a); + config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm); + + getParsingFlags(config).rfc2822 = true; + } else { + config._isValid = false; + } + } + + // date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict + function configFromString(config) { + var matched = aspNetJsonRegex.exec(config._i); + if (matched !== null) { + config._d = new Date(+matched[1]); + return; + } + + configFromISO(config); + if (config._isValid === false) { + delete config._isValid; + } else { + return; + } + + configFromRFC2822(config); + if (config._isValid === false) { + delete config._isValid; + } else { + return; + } + + if (config._strict) { + config._isValid = false; + } else { + // Final attempt, use Input Fallback + hooks.createFromInputFallback(config); + } + } + + hooks.createFromInputFallback = deprecate( + 'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' + + 'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' + + 'discouraged and will be removed in an upcoming major release. Please refer to ' + + 'http://momentjs.com/guides/#/warnings/js-date/ for more info.', + function (config) { + config._d = new Date(config._i + (config._useUTC ? ' UTC' : '')); + } + ); + + // Pick the first defined of two or three arguments. + function defaults(a, b, c) { + if (a != null) { + return a; + } + if (b != null) { + return b; + } + return c; + } + + function currentDateArray(config) { + // hooks is actually the exported moment object + var nowValue = new Date(hooks.now()); + if (config._useUTC) { + return [ + nowValue.getUTCFullYear(), + nowValue.getUTCMonth(), + nowValue.getUTCDate(), + ]; + } + return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()]; + } + + // convert an array to a date. + // the array should mirror the parameters below + // note: all values past the year are optional and will default to the lowest possible value. + // [year, month, day , hour, minute, second, millisecond] + function configFromArray(config) { + var i, + date, + input = [], + currentDate, + expectedWeekday, + yearToUse; + + if (config._d) { + return; + } + + currentDate = currentDateArray(config); + + //compute day of the year from weeks and weekdays + if (config._w && config._a[DATE] == null && config._a[MONTH] == null) { + dayOfYearFromWeekInfo(config); + } + + //if the day of the year is set, figure out what it is + if (config._dayOfYear != null) { + yearToUse = defaults(config._a[YEAR], currentDate[YEAR]); + + if ( + config._dayOfYear > daysInYear(yearToUse) || + config._dayOfYear === 0 + ) { + getParsingFlags(config)._overflowDayOfYear = true; + } + + date = createUTCDate(yearToUse, 0, config._dayOfYear); + config._a[MONTH] = date.getUTCMonth(); + config._a[DATE] = date.getUTCDate(); + } + + // Default to current date. + // * if no year, month, day of month are given, default to today + // * if day of month is given, default month and year + // * if month is given, default only year + // * if year is given, don't default anything + for (i = 0; i < 3 && config._a[i] == null; ++i) { + config._a[i] = input[i] = currentDate[i]; + } + + // Zero out whatever was not defaulted, including time + for (; i < 7; i++) { + config._a[i] = input[i] = + config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i]; + } + + // Check for 24:00:00.000 + if ( + config._a[HOUR] === 24 && + config._a[MINUTE] === 0 && + config._a[SECOND] === 0 && + config._a[MILLISECOND] === 0 + ) { + config._nextDay = true; + config._a[HOUR] = 0; + } + + config._d = (config._useUTC ? createUTCDate : createDate).apply( + null, + input + ); + expectedWeekday = config._useUTC + ? config._d.getUTCDay() + : config._d.getDay(); + + // Apply timezone offset from input. The actual utcOffset can be changed + // with parseZone. + if (config._tzm != null) { + config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm); + } + + if (config._nextDay) { + config._a[HOUR] = 24; + } + + // check for mismatching day of week + if ( + config._w && + typeof config._w.d !== 'undefined' && + config._w.d !== expectedWeekday + ) { + getParsingFlags(config).weekdayMismatch = true; + } + } + + function dayOfYearFromWeekInfo(config) { + var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek; + + w = config._w; + if (w.GG != null || w.W != null || w.E != null) { + dow = 1; + doy = 4; + + // TODO: We need to take the current isoWeekYear, but that depends on + // how we interpret now (local, utc, fixed offset). So create + // a now version of current config (take local/utc/offset flags, and + // create now). + weekYear = defaults( + w.GG, + config._a[YEAR], + weekOfYear(createLocal(), 1, 4).year + ); + week = defaults(w.W, 1); + weekday = defaults(w.E, 1); + if (weekday < 1 || weekday > 7) { + weekdayOverflow = true; + } + } else { + dow = config._locale._week.dow; + doy = config._locale._week.doy; + + curWeek = weekOfYear(createLocal(), dow, doy); + + weekYear = defaults(w.gg, config._a[YEAR], curWeek.year); + + // Default to current week. + week = defaults(w.w, curWeek.week); + + if (w.d != null) { + // weekday -- low day numbers are considered next week + weekday = w.d; + if (weekday < 0 || weekday > 6) { + weekdayOverflow = true; + } + } else if (w.e != null) { + // local weekday -- counting starts from beginning of week + weekday = w.e + dow; + if (w.e < 0 || w.e > 6) { + weekdayOverflow = true; + } + } else { + // default to beginning of week + weekday = dow; + } + } + if (week < 1 || week > weeksInYear(weekYear, dow, doy)) { + getParsingFlags(config)._overflowWeeks = true; + } else if (weekdayOverflow != null) { + getParsingFlags(config)._overflowWeekday = true; + } else { + temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy); + config._a[YEAR] = temp.year; + config._dayOfYear = temp.dayOfYear; + } + } + + // constant that refers to the ISO standard + hooks.ISO_8601 = function () {}; + + // constant that refers to the RFC 2822 form + hooks.RFC_2822 = function () {}; + + // date from string and format string + function configFromStringAndFormat(config) { + // TODO: Move this to another part of the creation flow to prevent circular deps + if (config._f === hooks.ISO_8601) { + configFromISO(config); + return; + } + if (config._f === hooks.RFC_2822) { + configFromRFC2822(config); + return; + } + config._a = []; + getParsingFlags(config).empty = true; + + // This array is used to make a Date, either with `new Date` or `Date.UTC` + var string = '' + config._i, + i, + parsedInput, + tokens, + token, + skipped, + stringLength = string.length, + totalParsedInputLength = 0, + era; + + tokens = + expandFormat(config._f, config._locale).match(formattingTokens) || []; + + for (i = 0; i < tokens.length; i++) { + token = tokens[i]; + parsedInput = (string.match(getParseRegexForToken(token, config)) || + [])[0]; + if (parsedInput) { + skipped = string.substr(0, string.indexOf(parsedInput)); + if (skipped.length > 0) { + getParsingFlags(config).unusedInput.push(skipped); + } + string = string.slice( + string.indexOf(parsedInput) + parsedInput.length + ); + totalParsedInputLength += parsedInput.length; + } + // don't parse if it's not a known token + if (formatTokenFunctions[token]) { + if (parsedInput) { + getParsingFlags(config).empty = false; + } else { + getParsingFlags(config).unusedTokens.push(token); + } + addTimeToArrayFromToken(token, parsedInput, config); + } else if (config._strict && !parsedInput) { + getParsingFlags(config).unusedTokens.push(token); + } + } + + // add remaining unparsed input length to the string + getParsingFlags(config).charsLeftOver = + stringLength - totalParsedInputLength; + if (string.length > 0) { + getParsingFlags(config).unusedInput.push(string); + } + + // clear _12h flag if hour is <= 12 + if ( + config._a[HOUR] <= 12 && + getParsingFlags(config).bigHour === true && + config._a[HOUR] > 0 + ) { + getParsingFlags(config).bigHour = undefined; + } + + getParsingFlags(config).parsedDateParts = config._a.slice(0); + getParsingFlags(config).meridiem = config._meridiem; + // handle meridiem + config._a[HOUR] = meridiemFixWrap( + config._locale, + config._a[HOUR], + config._meridiem + ); + + // handle era + era = getParsingFlags(config).era; + if (era !== null) { + config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]); + } + + configFromArray(config); + checkOverflow(config); + } + + function meridiemFixWrap(locale, hour, meridiem) { + var isPm; + + if (meridiem == null) { + // nothing to do + return hour; + } + if (locale.meridiemHour != null) { + return locale.meridiemHour(hour, meridiem); + } else if (locale.isPM != null) { + // Fallback + isPm = locale.isPM(meridiem); + if (isPm && hour < 12) { + hour += 12; + } + if (!isPm && hour === 12) { + hour = 0; + } + return hour; + } else { + // this is not supposed to happen + return hour; + } + } + + // date from string and array of format strings + function configFromStringAndArray(config) { + var tempConfig, + bestMoment, + scoreToBeat, + i, + currentScore, + validFormatFound, + bestFormatIsValid = false; + + if (config._f.length === 0) { + getParsingFlags(config).invalidFormat = true; + config._d = new Date(NaN); + return; + } + + for (i = 0; i < config._f.length; i++) { + currentScore = 0; + validFormatFound = false; + tempConfig = copyConfig({}, config); + if (config._useUTC != null) { + tempConfig._useUTC = config._useUTC; + } + tempConfig._f = config._f[i]; + configFromStringAndFormat(tempConfig); + + if (isValid(tempConfig)) { + validFormatFound = true; + } + + // if there is any input that was not parsed add a penalty for that format + currentScore += getParsingFlags(tempConfig).charsLeftOver; + + //or tokens + currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10; + + getParsingFlags(tempConfig).score = currentScore; + + if (!bestFormatIsValid) { + if ( + scoreToBeat == null || + currentScore < scoreToBeat || + validFormatFound + ) { + scoreToBeat = currentScore; + bestMoment = tempConfig; + if (validFormatFound) { + bestFormatIsValid = true; + } + } + } else { + if (currentScore < scoreToBeat) { + scoreToBeat = currentScore; + bestMoment = tempConfig; + } + } + } + + extend(config, bestMoment || tempConfig); + } + + function configFromObject(config) { + if (config._d) { + return; + } + + var i = normalizeObjectUnits(config._i), + dayOrDate = i.day === undefined ? i.date : i.day; + config._a = map( + [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond], + function (obj) { + return obj && parseInt(obj, 10); + } + ); + + configFromArray(config); + } + + function createFromConfig(config) { + var res = new Moment(checkOverflow(prepareConfig(config))); + if (res._nextDay) { + // Adding is smart enough around DST + res.add(1, 'd'); + res._nextDay = undefined; + } + + return res; + } + + function prepareConfig(config) { + var input = config._i, + format = config._f; + + config._locale = config._locale || getLocale(config._l); + + if (input === null || (format === undefined && input === '')) { + return createInvalid({ nullInput: true }); + } + + if (typeof input === 'string') { + config._i = input = config._locale.preparse(input); + } + + if (isMoment(input)) { + return new Moment(checkOverflow(input)); + } else if (isDate(input)) { + config._d = input; + } else if (isArray(format)) { + configFromStringAndArray(config); + } else if (format) { + configFromStringAndFormat(config); + } else { + configFromInput(config); + } + + if (!isValid(config)) { + config._d = null; + } + + return config; + } + + function configFromInput(config) { + var input = config._i; + if (isUndefined(input)) { + config._d = new Date(hooks.now()); + } else if (isDate(input)) { + config._d = new Date(input.valueOf()); + } else if (typeof input === 'string') { + configFromString(config); + } else if (isArray(input)) { + config._a = map(input.slice(0), function (obj) { + return parseInt(obj, 10); + }); + configFromArray(config); + } else if (isObject(input)) { + configFromObject(config); + } else if (isNumber(input)) { + // from milliseconds + config._d = new Date(input); + } else { + hooks.createFromInputFallback(config); + } + } + + function createLocalOrUTC(input, format, locale, strict, isUTC) { + var c = {}; + + if (format === true || format === false) { + strict = format; + format = undefined; + } + + if (locale === true || locale === false) { + strict = locale; + locale = undefined; + } + + if ( + (isObject(input) && isObjectEmpty(input)) || + (isArray(input) && input.length === 0) + ) { + input = undefined; + } + // object construction must be done this way. + // https://github.com/moment/moment/issues/1423 + c._isAMomentObject = true; + c._useUTC = c._isUTC = isUTC; + c._l = locale; + c._i = input; + c._f = format; + c._strict = strict; + + return createFromConfig(c); + } + + function createLocal(input, format, locale, strict) { + return createLocalOrUTC(input, format, locale, strict, false); + } + + var prototypeMin = deprecate( + 'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/', + function () { + var other = createLocal.apply(null, arguments); + if (this.isValid() && other.isValid()) { + return other < this ? this : other; + } else { + return createInvalid(); + } + } + ), + prototypeMax = deprecate( + 'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/', + function () { + var other = createLocal.apply(null, arguments); + if (this.isValid() && other.isValid()) { + return other > this ? this : other; + } else { + return createInvalid(); + } + } + ); + + // Pick a moment m from moments so that m[fn](other) is true for all + // other. This relies on the function fn to be transitive. + // + // moments should either be an array of moment objects or an array, whose + // first element is an array of moment objects. + function pickBy(fn, moments) { + var res, i; + if (moments.length === 1 && isArray(moments[0])) { + moments = moments[0]; + } + if (!moments.length) { + return createLocal(); + } + res = moments[0]; + for (i = 1; i < moments.length; ++i) { + if (!moments[i].isValid() || moments[i][fn](res)) { + res = moments[i]; + } + } + return res; + } + + // TODO: Use [].sort instead? + function min() { + var args = [].slice.call(arguments, 0); + + return pickBy('isBefore', args); + } + + function max() { + var args = [].slice.call(arguments, 0); + + return pickBy('isAfter', args); + } + + var now = function () { + return Date.now ? Date.now() : +new Date(); + }; + + var ordering = [ + 'year', + 'quarter', + 'month', + 'week', + 'day', + 'hour', + 'minute', + 'second', + 'millisecond', + ]; + + function isDurationValid(m) { + var key, + unitHasDecimal = false, + i; + for (key in m) { + if ( + hasOwnProp(m, key) && + !( + indexOf.call(ordering, key) !== -1 && + (m[key] == null || !isNaN(m[key])) + ) + ) { + return false; + } + } + + for (i = 0; i < ordering.length; ++i) { + if (m[ordering[i]]) { + if (unitHasDecimal) { + return false; // only allow non-integers for smallest unit + } + if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) { + unitHasDecimal = true; + } + } + } + + return true; + } + + function isValid$1() { + return this._isValid; + } + + function createInvalid$1() { + return createDuration(NaN); + } + + function Duration(duration) { + var normalizedInput = normalizeObjectUnits(duration), + years = normalizedInput.year || 0, + quarters = normalizedInput.quarter || 0, + months = normalizedInput.month || 0, + weeks = normalizedInput.week || normalizedInput.isoWeek || 0, + days = normalizedInput.day || 0, + hours = normalizedInput.hour || 0, + minutes = normalizedInput.minute || 0, + seconds = normalizedInput.second || 0, + milliseconds = normalizedInput.millisecond || 0; + + this._isValid = isDurationValid(normalizedInput); + + // representation for dateAddRemove + this._milliseconds = + +milliseconds + + seconds * 1e3 + // 1000 + minutes * 6e4 + // 1000 * 60 + hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978 + // Because of dateAddRemove treats 24 hours as different from a + // day when working around DST, we need to store them separately + this._days = +days + weeks * 7; + // It is impossible to translate months into days without knowing + // which months you are are talking about, so we have to store + // it separately. + this._months = +months + quarters * 3 + years * 12; + + this._data = {}; + + this._locale = getLocale(); + + this._bubble(); + } + + function isDuration(obj) { + return obj instanceof Duration; + } + + function absRound(number) { + if (number < 0) { + return Math.round(-1 * number) * -1; + } else { + return Math.round(number); + } + } + + // compare two arrays, return the number of differences + function compareArrays(array1, array2, dontConvert) { + var len = Math.min(array1.length, array2.length), + lengthDiff = Math.abs(array1.length - array2.length), + diffs = 0, + i; + for (i = 0; i < len; i++) { + if ( + (dontConvert && array1[i] !== array2[i]) || + (!dontConvert && toInt(array1[i]) !== toInt(array2[i])) + ) { + diffs++; + } + } + return diffs + lengthDiff; + } + + // FORMATTING + + function offset(token, separator) { + addFormatToken(token, 0, 0, function () { + var offset = this.utcOffset(), + sign = '+'; + if (offset < 0) { + offset = -offset; + sign = '-'; + } + return ( + sign + + zeroFill(~~(offset / 60), 2) + + separator + + zeroFill(~~offset % 60, 2) + ); + }); + } + + offset('Z', ':'); + offset('ZZ', ''); + + // PARSING + + addRegexToken('Z', matchShortOffset); + addRegexToken('ZZ', matchShortOffset); + addParseToken(['Z', 'ZZ'], function (input, array, config) { + config._useUTC = true; + config._tzm = offsetFromString(matchShortOffset, input); + }); + + // HELPERS + + // timezone chunker + // '+10:00' > ['10', '00'] + // '-1530' > ['-15', '30'] + var chunkOffset = /([\+\-]|\d\d)/gi; + + function offsetFromString(matcher, string) { + var matches = (string || '').match(matcher), + chunk, + parts, + minutes; + + if (matches === null) { + return null; + } + + chunk = matches[matches.length - 1] || []; + parts = (chunk + '').match(chunkOffset) || ['-', 0, 0]; + minutes = +(parts[1] * 60) + toInt(parts[2]); + + return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes; + } + + // Return a moment from input, that is local/utc/zone equivalent to model. + function cloneWithOffset(input, model) { + var res, diff; + if (model._isUTC) { + res = model.clone(); + diff = + (isMoment(input) || isDate(input) + ? input.valueOf() + : createLocal(input).valueOf()) - res.valueOf(); + // Use low-level api, because this fn is low-level api. + res._d.setTime(res._d.valueOf() + diff); + hooks.updateOffset(res, false); + return res; + } else { + return createLocal(input).local(); + } + } + + function getDateOffset(m) { + // On Firefox.24 Date#getTimezoneOffset returns a floating point. + // https://github.com/moment/moment/pull/1871 + return -Math.round(m._d.getTimezoneOffset()); + } + + // HOOKS + + // This function will be called whenever a moment is mutated. + // It is intended to keep the offset in sync with the timezone. + hooks.updateOffset = function () {}; + + // MOMENTS + + // keepLocalTime = true means only change the timezone, without + // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]--> + // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset + // +0200, so we adjust the time as needed, to be valid. + // + // Keeping the time actually adds/subtracts (one hour) + // from the actual represented time. That is why we call updateOffset + // a second time. In case it wants us to change the offset again + // _changeInProgress == true case, then we have to adjust, because + // there is no such time in the given timezone. + function getSetOffset(input, keepLocalTime, keepMinutes) { + var offset = this._offset || 0, + localAdjust; + if (!this.isValid()) { + return input != null ? this : NaN; + } + if (input != null) { + if (typeof input === 'string') { + input = offsetFromString(matchShortOffset, input); + if (input === null) { + return this; + } + } else if (Math.abs(input) < 16 && !keepMinutes) { + input = input * 60; + } + if (!this._isUTC && keepLocalTime) { + localAdjust = getDateOffset(this); + } + this._offset = input; + this._isUTC = true; + if (localAdjust != null) { + this.add(localAdjust, 'm'); + } + if (offset !== input) { + if (!keepLocalTime || this._changeInProgress) { + addSubtract( + this, + createDuration(input - offset, 'm'), + 1, + false + ); + } else if (!this._changeInProgress) { + this._changeInProgress = true; + hooks.updateOffset(this, true); + this._changeInProgress = null; + } + } + return this; + } else { + return this._isUTC ? offset : getDateOffset(this); + } + } + + function getSetZone(input, keepLocalTime) { + if (input != null) { + if (typeof input !== 'string') { + input = -input; + } + + this.utcOffset(input, keepLocalTime); + + return this; + } else { + return -this.utcOffset(); + } + } + + function setOffsetToUTC(keepLocalTime) { + return this.utcOffset(0, keepLocalTime); + } + + function setOffsetToLocal(keepLocalTime) { + if (this._isUTC) { + this.utcOffset(0, keepLocalTime); + this._isUTC = false; + + if (keepLocalTime) { + this.subtract(getDateOffset(this), 'm'); + } + } + return this; + } + + function setOffsetToParsedOffset() { + if (this._tzm != null) { + this.utcOffset(this._tzm, false, true); + } else if (typeof this._i === 'string') { + var tZone = offsetFromString(matchOffset, this._i); + if (tZone != null) { + this.utcOffset(tZone); + } else { + this.utcOffset(0, true); + } + } + return this; + } + + function hasAlignedHourOffset(input) { + if (!this.isValid()) { + return false; + } + input = input ? createLocal(input).utcOffset() : 0; + + return (this.utcOffset() - input) % 60 === 0; + } + + function isDaylightSavingTime() { + return ( + this.utcOffset() > this.clone().month(0).utcOffset() || + this.utcOffset() > this.clone().month(5).utcOffset() + ); + } + + function isDaylightSavingTimeShifted() { + if (!isUndefined(this._isDSTShifted)) { + return this._isDSTShifted; + } + + var c = {}, + other; + + copyConfig(c, this); + c = prepareConfig(c); + + if (c._a) { + other = c._isUTC ? createUTC(c._a) : createLocal(c._a); + this._isDSTShifted = + this.isValid() && compareArrays(c._a, other.toArray()) > 0; + } else { + this._isDSTShifted = false; + } + + return this._isDSTShifted; + } + + function isLocal() { + return this.isValid() ? !this._isUTC : false; + } + + function isUtcOffset() { + return this.isValid() ? this._isUTC : false; + } + + function isUtc() { + return this.isValid() ? this._isUTC && this._offset === 0 : false; + } + + // ASP.NET json date format regex + var aspNetRegex = /^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/, + // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html + // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere + // and further modified to allow for strings containing both week and day + isoRegex = /^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/; + + function createDuration(input, key) { + var duration = input, + // matching against regexp is expensive, do it on demand + match = null, + sign, + ret, + diffRes; + + if (isDuration(input)) { + duration = { + ms: input._milliseconds, + d: input._days, + M: input._months, + }; + } else if (isNumber(input) || !isNaN(+input)) { + duration = {}; + if (key) { + duration[key] = +input; + } else { + duration.milliseconds = +input; + } + } else if ((match = aspNetRegex.exec(input))) { + sign = match[1] === '-' ? -1 : 1; + duration = { + y: 0, + d: toInt(match[DATE]) * sign, + h: toInt(match[HOUR]) * sign, + m: toInt(match[MINUTE]) * sign, + s: toInt(match[SECOND]) * sign, + ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign, // the millisecond decimal point is included in the match + }; + } else if ((match = isoRegex.exec(input))) { + sign = match[1] === '-' ? -1 : 1; + duration = { + y: parseIso(match[2], sign), + M: parseIso(match[3], sign), + w: parseIso(match[4], sign), + d: parseIso(match[5], sign), + h: parseIso(match[6], sign), + m: parseIso(match[7], sign), + s: parseIso(match[8], sign), + }; + } else if (duration == null) { + // checks for null or undefined + duration = {}; + } else if ( + typeof duration === 'object' && + ('from' in duration || 'to' in duration) + ) { + diffRes = momentsDifference( + createLocal(duration.from), + createLocal(duration.to) + ); + + duration = {}; + duration.ms = diffRes.milliseconds; + duration.M = diffRes.months; + } + + ret = new Duration(duration); + + if (isDuration(input) && hasOwnProp(input, '_locale')) { + ret._locale = input._locale; + } + + if (isDuration(input) && hasOwnProp(input, '_isValid')) { + ret._isValid = input._isValid; + } + + return ret; + } + + createDuration.fn = Duration.prototype; + createDuration.invalid = createInvalid$1; + + function parseIso(inp, sign) { + // We'd normally use ~~inp for this, but unfortunately it also + // converts floats to ints. + // inp may be undefined, so careful calling replace on it. + var res = inp && parseFloat(inp.replace(',', '.')); + // apply sign while we're at it + return (isNaN(res) ? 0 : res) * sign; + } + + function positiveMomentsDifference(base, other) { + var res = {}; + + res.months = + other.month() - base.month() + (other.year() - base.year()) * 12; + if (base.clone().add(res.months, 'M').isAfter(other)) { + --res.months; + } + + res.milliseconds = +other - +base.clone().add(res.months, 'M'); + + return res; + } + + function momentsDifference(base, other) { + var res; + if (!(base.isValid() && other.isValid())) { + return { milliseconds: 0, months: 0 }; + } + + other = cloneWithOffset(other, base); + if (base.isBefore(other)) { + res = positiveMomentsDifference(base, other); + } else { + res = positiveMomentsDifference(other, base); + res.milliseconds = -res.milliseconds; + res.months = -res.months; + } + + return res; + } + + // TODO: remove 'name' arg after deprecation is removed + function createAdder(direction, name) { + return function (val, period) { + var dur, tmp; + //invert the arguments, but complain about it + if (period !== null && !isNaN(+period)) { + deprecateSimple( + name, + 'moment().' + + name + + '(period, number) is deprecated. Please use moment().' + + name + + '(number, period). ' + + 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.' + ); + tmp = val; + val = period; + period = tmp; + } + + dur = createDuration(val, period); + addSubtract(this, dur, direction); + return this; + }; + } + + function addSubtract(mom, duration, isAdding, updateOffset) { + var milliseconds = duration._milliseconds, + days = absRound(duration._days), + months = absRound(duration._months); + + if (!mom.isValid()) { + // No op + return; + } + + updateOffset = updateOffset == null ? true : updateOffset; + + if (months) { + setMonth(mom, get(mom, 'Month') + months * isAdding); + } + if (days) { + set$1(mom, 'Date', get(mom, 'Date') + days * isAdding); + } + if (milliseconds) { + mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding); + } + if (updateOffset) { + hooks.updateOffset(mom, days || months); + } + } + + var add = createAdder(1, 'add'), + subtract = createAdder(-1, 'subtract'); + + function isString(input) { + return typeof input === 'string' || input instanceof String; + } + + // type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined + function isMomentInput(input) { + return ( + isMoment(input) || + isDate(input) || + isString(input) || + isNumber(input) || + isNumberOrStringArray(input) || + isMomentInputObject(input) || + input === null || + input === undefined + ); + } + + function isMomentInputObject(input) { + var objectTest = isObject(input) && !isObjectEmpty(input), + propertyTest = false, + properties = [ + 'years', + 'year', + 'y', + 'months', + 'month', + 'M', + 'days', + 'day', + 'd', + 'dates', + 'date', + 'D', + 'hours', + 'hour', + 'h', + 'minutes', + 'minute', + 'm', + 'seconds', + 'second', + 's', + 'milliseconds', + 'millisecond', + 'ms', + ], + i, + property; + + for (i = 0; i < properties.length; i += 1) { + property = properties[i]; + propertyTest = propertyTest || hasOwnProp(input, property); + } + + return objectTest && propertyTest; + } + + function isNumberOrStringArray(input) { + var arrayTest = isArray(input), + dataTypeTest = false; + if (arrayTest) { + dataTypeTest = + input.filter(function (item) { + return !isNumber(item) && isString(input); + }).length === 0; + } + return arrayTest && dataTypeTest; + } + + function isCalendarSpec(input) { + var objectTest = isObject(input) && !isObjectEmpty(input), + propertyTest = false, + properties = [ + 'sameDay', + 'nextDay', + 'lastDay', + 'nextWeek', + 'lastWeek', + 'sameElse', + ], + i, + property; + + for (i = 0; i < properties.length; i += 1) { + property = properties[i]; + propertyTest = propertyTest || hasOwnProp(input, property); + } + + return objectTest && propertyTest; + } + + function getCalendarFormat(myMoment, now) { + var diff = myMoment.diff(now, 'days', true); + return diff < -6 + ? 'sameElse' + : diff < -1 + ? 'lastWeek' + : diff < 0 + ? 'lastDay' + : diff < 1 + ? 'sameDay' + : diff < 2 + ? 'nextDay' + : diff < 7 + ? 'nextWeek' + : 'sameElse'; + } + + function calendar$1(time, formats) { + // Support for single parameter, formats only overload to the calendar function + if (arguments.length === 1) { + if (isMomentInput(arguments[0])) { + time = arguments[0]; + formats = undefined; + } else if (isCalendarSpec(arguments[0])) { + formats = arguments[0]; + time = undefined; + } + } + // We want to compare the start of today, vs this. + // Getting start-of-today depends on whether we're local/utc/offset or not. + var now = time || createLocal(), + sod = cloneWithOffset(now, this).startOf('day'), + format = hooks.calendarFormat(this, sod) || 'sameElse', + output = + formats && + (isFunction(formats[format]) + ? formats[format].call(this, now) + : formats[format]); + + return this.format( + output || this.localeData().calendar(format, this, createLocal(now)) + ); + } + + function clone() { + return new Moment(this); + } + + function isAfter(input, units) { + var localInput = isMoment(input) ? input : createLocal(input); + if (!(this.isValid() && localInput.isValid())) { + return false; + } + units = normalizeUnits(units) || 'millisecond'; + if (units === 'millisecond') { + return this.valueOf() > localInput.valueOf(); + } else { + return localInput.valueOf() < this.clone().startOf(units).valueOf(); + } + } + + function isBefore(input, units) { + var localInput = isMoment(input) ? input : createLocal(input); + if (!(this.isValid() && localInput.isValid())) { + return false; + } + units = normalizeUnits(units) || 'millisecond'; + if (units === 'millisecond') { + return this.valueOf() < localInput.valueOf(); + } else { + return this.clone().endOf(units).valueOf() < localInput.valueOf(); + } + } + + function isBetween(from, to, units, inclusivity) { + var localFrom = isMoment(from) ? from : createLocal(from), + localTo = isMoment(to) ? to : createLocal(to); + if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) { + return false; + } + inclusivity = inclusivity || '()'; + return ( + (inclusivity[0] === '(' + ? this.isAfter(localFrom, units) + : !this.isBefore(localFrom, units)) && + (inclusivity[1] === ')' + ? this.isBefore(localTo, units) + : !this.isAfter(localTo, units)) + ); + } + + function isSame(input, units) { + var localInput = isMoment(input) ? input : createLocal(input), + inputMs; + if (!(this.isValid() && localInput.isValid())) { + return false; + } + units = normalizeUnits(units) || 'millisecond'; + if (units === 'millisecond') { + return this.valueOf() === localInput.valueOf(); + } else { + inputMs = localInput.valueOf(); + return ( + this.clone().startOf(units).valueOf() <= inputMs && + inputMs <= this.clone().endOf(units).valueOf() + ); + } + } + + function isSameOrAfter(input, units) { + return this.isSame(input, units) || this.isAfter(input, units); + } + + function isSameOrBefore(input, units) { + return this.isSame(input, units) || this.isBefore(input, units); + } + + function diff(input, units, asFloat) { + var that, zoneDelta, output; + + if (!this.isValid()) { + return NaN; + } + + that = cloneWithOffset(input, this); + + if (!that.isValid()) { + return NaN; + } + + zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4; + + units = normalizeUnits(units); + + switch (units) { + case 'year': + output = monthDiff(this, that) / 12; + break; + case 'month': + output = monthDiff(this, that); + break; + case 'quarter': + output = monthDiff(this, that) / 3; + break; + case 'second': + output = (this - that) / 1e3; + break; // 1000 + case 'minute': + output = (this - that) / 6e4; + break; // 1000 * 60 + case 'hour': + output = (this - that) / 36e5; + break; // 1000 * 60 * 60 + case 'day': + output = (this - that - zoneDelta) / 864e5; + break; // 1000 * 60 * 60 * 24, negate dst + case 'week': + output = (this - that - zoneDelta) / 6048e5; + break; // 1000 * 60 * 60 * 24 * 7, negate dst + default: + output = this - that; + } + + return asFloat ? output : absFloor(output); + } + + function monthDiff(a, b) { + if (a.date() < b.date()) { + // end-of-month calculations work correct when the start month has more + // days than the end month. + return -monthDiff(b, a); + } + // difference in months + var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()), + // b is in (anchor - 1 month, anchor + 1 month) + anchor = a.clone().add(wholeMonthDiff, 'months'), + anchor2, + adjust; + + if (b - anchor < 0) { + anchor2 = a.clone().add(wholeMonthDiff - 1, 'months'); + // linear across the month + adjust = (b - anchor) / (anchor - anchor2); + } else { + anchor2 = a.clone().add(wholeMonthDiff + 1, 'months'); + // linear across the month + adjust = (b - anchor) / (anchor2 - anchor); + } + + //check for negative zero, return zero if negative zero + return -(wholeMonthDiff + adjust) || 0; + } + + hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ'; + hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]'; + + function toString() { + return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ'); + } + + function toISOString(keepOffset) { + if (!this.isValid()) { + return null; + } + var utc = keepOffset !== true, + m = utc ? this.clone().utc() : this; + if (m.year() < 0 || m.year() > 9999) { + return formatMoment( + m, + utc + ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]' + : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ' + ); + } + if (isFunction(Date.prototype.toISOString)) { + // native implementation is ~50x faster, use it when we can + if (utc) { + return this.toDate().toISOString(); + } else { + return new Date(this.valueOf() + this.utcOffset() * 60 * 1000) + .toISOString() + .replace('Z', formatMoment(m, 'Z')); + } + } + return formatMoment( + m, + utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ' + ); + } + + /** + * Return a human readable representation of a moment that can + * also be evaluated to get a new moment which is the same + * + * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects + */ + function inspect() { + if (!this.isValid()) { + return 'moment.invalid(/* ' + this._i + ' */)'; + } + var func = 'moment', + zone = '', + prefix, + year, + datetime, + suffix; + if (!this.isLocal()) { + func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone'; + zone = 'Z'; + } + prefix = '[' + func + '("]'; + year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY'; + datetime = '-MM-DD[T]HH:mm:ss.SSS'; + suffix = zone + '[")]'; + + return this.format(prefix + year + datetime + suffix); + } + + function format(inputString) { + if (!inputString) { + inputString = this.isUtc() + ? hooks.defaultFormatUtc + : hooks.defaultFormat; + } + var output = formatMoment(this, inputString); + return this.localeData().postformat(output); + } + + function from(time, withoutSuffix) { + if ( + this.isValid() && + ((isMoment(time) && time.isValid()) || createLocal(time).isValid()) + ) { + return createDuration({ to: this, from: time }) + .locale(this.locale()) + .humanize(!withoutSuffix); + } else { + return this.localeData().invalidDate(); + } + } + + function fromNow(withoutSuffix) { + return this.from(createLocal(), withoutSuffix); + } + + function to(time, withoutSuffix) { + if ( + this.isValid() && + ((isMoment(time) && time.isValid()) || createLocal(time).isValid()) + ) { + return createDuration({ from: this, to: time }) + .locale(this.locale()) + .humanize(!withoutSuffix); + } else { + return this.localeData().invalidDate(); + } + } + + function toNow(withoutSuffix) { + return this.to(createLocal(), withoutSuffix); + } + + // If passed a locale key, it will set the locale for this + // instance. Otherwise, it will return the locale configuration + // variables for this instance. + function locale(key) { + var newLocaleData; + + if (key === undefined) { + return this._locale._abbr; + } else { + newLocaleData = getLocale(key); + if (newLocaleData != null) { + this._locale = newLocaleData; + } + return this; + } + } + + var lang = deprecate( + 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.', + function (key) { + if (key === undefined) { + return this.localeData(); + } else { + return this.locale(key); + } + } + ); + + function localeData() { + return this._locale; + } + + var MS_PER_SECOND = 1000, + MS_PER_MINUTE = 60 * MS_PER_SECOND, + MS_PER_HOUR = 60 * MS_PER_MINUTE, + MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR; + + // actual modulo - handles negative numbers (for dates before 1970): + function mod$1(dividend, divisor) { + return ((dividend % divisor) + divisor) % divisor; + } + + function localStartOfDate(y, m, d) { + // the date constructor remaps years 0-99 to 1900-1999 + if (y < 100 && y >= 0) { + // preserve leap years using a full 400 year cycle, then reset + return new Date(y + 400, m, d) - MS_PER_400_YEARS; + } else { + return new Date(y, m, d).valueOf(); + } + } + + function utcStartOfDate(y, m, d) { + // Date.UTC remaps years 0-99 to 1900-1999 + if (y < 100 && y >= 0) { + // preserve leap years using a full 400 year cycle, then reset + return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS; + } else { + return Date.UTC(y, m, d); + } + } + + function startOf(units) { + var time, startOfDate; + units = normalizeUnits(units); + if (units === undefined || units === 'millisecond' || !this.isValid()) { + return this; + } + + startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate; + + switch (units) { + case 'year': + time = startOfDate(this.year(), 0, 1); + break; + case 'quarter': + time = startOfDate( + this.year(), + this.month() - (this.month() % 3), + 1 + ); + break; + case 'month': + time = startOfDate(this.year(), this.month(), 1); + break; + case 'week': + time = startOfDate( + this.year(), + this.month(), + this.date() - this.weekday() + ); + break; + case 'isoWeek': + time = startOfDate( + this.year(), + this.month(), + this.date() - (this.isoWeekday() - 1) + ); + break; + case 'day': + case 'date': + time = startOfDate(this.year(), this.month(), this.date()); + break; + case 'hour': + time = this._d.valueOf(); + time -= mod$1( + time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE), + MS_PER_HOUR + ); + break; + case 'minute': + time = this._d.valueOf(); + time -= mod$1(time, MS_PER_MINUTE); + break; + case 'second': + time = this._d.valueOf(); + time -= mod$1(time, MS_PER_SECOND); + break; + } + + this._d.setTime(time); + hooks.updateOffset(this, true); + return this; + } + + function endOf(units) { + var time, startOfDate; + units = normalizeUnits(units); + if (units === undefined || units === 'millisecond' || !this.isValid()) { + return this; + } + + startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate; + + switch (units) { + case 'year': + time = startOfDate(this.year() + 1, 0, 1) - 1; + break; + case 'quarter': + time = + startOfDate( + this.year(), + this.month() - (this.month() % 3) + 3, + 1 + ) - 1; + break; + case 'month': + time = startOfDate(this.year(), this.month() + 1, 1) - 1; + break; + case 'week': + time = + startOfDate( + this.year(), + this.month(), + this.date() - this.weekday() + 7 + ) - 1; + break; + case 'isoWeek': + time = + startOfDate( + this.year(), + this.month(), + this.date() - (this.isoWeekday() - 1) + 7 + ) - 1; + break; + case 'day': + case 'date': + time = startOfDate(this.year(), this.month(), this.date() + 1) - 1; + break; + case 'hour': + time = this._d.valueOf(); + time += + MS_PER_HOUR - + mod$1( + time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE), + MS_PER_HOUR + ) - + 1; + break; + case 'minute': + time = this._d.valueOf(); + time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1; + break; + case 'second': + time = this._d.valueOf(); + time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1; + break; + } + + this._d.setTime(time); + hooks.updateOffset(this, true); + return this; + } + + function valueOf() { + return this._d.valueOf() - (this._offset || 0) * 60000; + } + + function unix() { + return Math.floor(this.valueOf() / 1000); + } + + function toDate() { + return new Date(this.valueOf()); + } + + function toArray() { + var m = this; + return [ + m.year(), + m.month(), + m.date(), + m.hour(), + m.minute(), + m.second(), + m.millisecond(), + ]; + } + + function toObject() { + var m = this; + return { + years: m.year(), + months: m.month(), + date: m.date(), + hours: m.hours(), + minutes: m.minutes(), + seconds: m.seconds(), + milliseconds: m.milliseconds(), + }; + } + + function toJSON() { + // new Date(NaN).toJSON() === null + return this.isValid() ? this.toISOString() : null; + } + + function isValid$2() { + return isValid(this); + } + + function parsingFlags() { + return extend({}, getParsingFlags(this)); + } + + function invalidAt() { + return getParsingFlags(this).overflow; + } + + function creationData() { + return { + input: this._i, + format: this._f, + locale: this._locale, + isUTC: this._isUTC, + strict: this._strict, + }; + } + + addFormatToken('N', 0, 0, 'eraAbbr'); + addFormatToken('NN', 0, 0, 'eraAbbr'); + addFormatToken('NNN', 0, 0, 'eraAbbr'); + addFormatToken('NNNN', 0, 0, 'eraName'); + addFormatToken('NNNNN', 0, 0, 'eraNarrow'); + + addFormatToken('y', ['y', 1], 'yo', 'eraYear'); + addFormatToken('y', ['yy', 2], 0, 'eraYear'); + addFormatToken('y', ['yyy', 3], 0, 'eraYear'); + addFormatToken('y', ['yyyy', 4], 0, 'eraYear'); + + addRegexToken('N', matchEraAbbr); + addRegexToken('NN', matchEraAbbr); + addRegexToken('NNN', matchEraAbbr); + addRegexToken('NNNN', matchEraName); + addRegexToken('NNNNN', matchEraNarrow); + + addParseToken(['N', 'NN', 'NNN', 'NNNN', 'NNNNN'], function ( + input, + array, + config, + token + ) { + var era = config._locale.erasParse(input, token, config._strict); + if (era) { + getParsingFlags(config).era = era; + } else { + getParsingFlags(config).invalidEra = input; + } + }); + + addRegexToken('y', matchUnsigned); + addRegexToken('yy', matchUnsigned); + addRegexToken('yyy', matchUnsigned); + addRegexToken('yyyy', matchUnsigned); + addRegexToken('yo', matchEraYearOrdinal); + + addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR); + addParseToken(['yo'], function (input, array, config, token) { + var match; + if (config._locale._eraYearOrdinalRegex) { + match = input.match(config._locale._eraYearOrdinalRegex); + } + + if (config._locale.eraYearOrdinalParse) { + array[YEAR] = config._locale.eraYearOrdinalParse(input, match); + } else { + array[YEAR] = parseInt(input, 10); + } + }); + + function localeEras(m, format) { + var i, + l, + date, + eras = this._eras || getLocale('en')._eras; + for (i = 0, l = eras.length; i < l; ++i) { + switch (typeof eras[i].since) { + case 'string': + // truncate time + date = hooks(eras[i].since).startOf('day'); + eras[i].since = date.valueOf(); + break; + } + + switch (typeof eras[i].until) { + case 'undefined': + eras[i].until = +Infinity; + break; + case 'string': + // truncate time + date = hooks(eras[i].until).startOf('day').valueOf(); + eras[i].until = date.valueOf(); + break; + } + } + return eras; + } + + function localeErasParse(eraName, format, strict) { + var i, + l, + eras = this.eras(), + name, + abbr, + narrow; + eraName = eraName.toUpperCase(); + + for (i = 0, l = eras.length; i < l; ++i) { + name = eras[i].name.toUpperCase(); + abbr = eras[i].abbr.toUpperCase(); + narrow = eras[i].narrow.toUpperCase(); + + if (strict) { + switch (format) { + case 'N': + case 'NN': + case 'NNN': + if (abbr === eraName) { + return eras[i]; + } + break; + + case 'NNNN': + if (name === eraName) { + return eras[i]; + } + break; + + case 'NNNNN': + if (narrow === eraName) { + return eras[i]; + } + break; + } + } else if ([name, abbr, narrow].indexOf(eraName) >= 0) { + return eras[i]; + } + } + } + + function localeErasConvertYear(era, year) { + var dir = era.since <= era.until ? +1 : -1; + if (year === undefined) { + return hooks(era.since).year(); + } else { + return hooks(era.since).year() + (year - era.offset) * dir; + } + } + + function getEraName() { + var i, + l, + val, + eras = this.localeData().eras(); + for (i = 0, l = eras.length; i < l; ++i) { + // truncate time + val = this.clone().startOf('day').valueOf(); + + if (eras[i].since <= val && val <= eras[i].until) { + return eras[i].name; + } + if (eras[i].until <= val && val <= eras[i].since) { + return eras[i].name; + } + } + + return ''; + } + + function getEraNarrow() { + var i, + l, + val, + eras = this.localeData().eras(); + for (i = 0, l = eras.length; i < l; ++i) { + // truncate time + val = this.clone().startOf('day').valueOf(); + + if (eras[i].since <= val && val <= eras[i].until) { + return eras[i].narrow; + } + if (eras[i].until <= val && val <= eras[i].since) { + return eras[i].narrow; + } + } + + return ''; + } + + function getEraAbbr() { + var i, + l, + val, + eras = this.localeData().eras(); + for (i = 0, l = eras.length; i < l; ++i) { + // truncate time + val = this.clone().startOf('day').valueOf(); + + if (eras[i].since <= val && val <= eras[i].until) { + return eras[i].abbr; + } + if (eras[i].until <= val && val <= eras[i].since) { + return eras[i].abbr; + } + } + + return ''; + } + + function getEraYear() { + var i, + l, + dir, + val, + eras = this.localeData().eras(); + for (i = 0, l = eras.length; i < l; ++i) { + dir = eras[i].since <= eras[i].until ? +1 : -1; + + // truncate time + val = this.clone().startOf('day').valueOf(); + + if ( + (eras[i].since <= val && val <= eras[i].until) || + (eras[i].until <= val && val <= eras[i].since) + ) { + return ( + (this.year() - hooks(eras[i].since).year()) * dir + + eras[i].offset + ); + } + } + + return this.year(); + } + + function erasNameRegex(isStrict) { + if (!hasOwnProp(this, '_erasNameRegex')) { + computeErasParse.call(this); + } + return isStrict ? this._erasNameRegex : this._erasRegex; + } + + function erasAbbrRegex(isStrict) { + if (!hasOwnProp(this, '_erasAbbrRegex')) { + computeErasParse.call(this); + } + return isStrict ? this._erasAbbrRegex : this._erasRegex; + } + + function erasNarrowRegex(isStrict) { + if (!hasOwnProp(this, '_erasNarrowRegex')) { + computeErasParse.call(this); + } + return isStrict ? this._erasNarrowRegex : this._erasRegex; + } + + function matchEraAbbr(isStrict, locale) { + return locale.erasAbbrRegex(isStrict); + } + + function matchEraName(isStrict, locale) { + return locale.erasNameRegex(isStrict); + } + + function matchEraNarrow(isStrict, locale) { + return locale.erasNarrowRegex(isStrict); + } + + function matchEraYearOrdinal(isStrict, locale) { + return locale._eraYearOrdinalRegex || matchUnsigned; + } + + function computeErasParse() { + var abbrPieces = [], + namePieces = [], + narrowPieces = [], + mixedPieces = [], + i, + l, + eras = this.eras(); + + for (i = 0, l = eras.length; i < l; ++i) { + namePieces.push(regexEscape(eras[i].name)); + abbrPieces.push(regexEscape(eras[i].abbr)); + narrowPieces.push(regexEscape(eras[i].narrow)); + + mixedPieces.push(regexEscape(eras[i].name)); + mixedPieces.push(regexEscape(eras[i].abbr)); + mixedPieces.push(regexEscape(eras[i].narrow)); + } + + this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i'); + this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i'); + this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i'); + this._erasNarrowRegex = new RegExp( + '^(' + narrowPieces.join('|') + ')', + 'i' + ); + } + + // FORMATTING + + addFormatToken(0, ['gg', 2], 0, function () { + return this.weekYear() % 100; + }); + + addFormatToken(0, ['GG', 2], 0, function () { + return this.isoWeekYear() % 100; + }); + + function addWeekYearFormatToken(token, getter) { + addFormatToken(0, [token, token.length], 0, getter); + } + + addWeekYearFormatToken('gggg', 'weekYear'); + addWeekYearFormatToken('ggggg', 'weekYear'); + addWeekYearFormatToken('GGGG', 'isoWeekYear'); + addWeekYearFormatToken('GGGGG', 'isoWeekYear'); + + // ALIASES + + addUnitAlias('weekYear', 'gg'); + addUnitAlias('isoWeekYear', 'GG'); + + // PRIORITY + + addUnitPriority('weekYear', 1); + addUnitPriority('isoWeekYear', 1); + + // PARSING + + addRegexToken('G', matchSigned); + addRegexToken('g', matchSigned); + addRegexToken('GG', match1to2, match2); + addRegexToken('gg', match1to2, match2); + addRegexToken('GGGG', match1to4, match4); + addRegexToken('gggg', match1to4, match4); + addRegexToken('GGGGG', match1to6, match6); + addRegexToken('ggggg', match1to6, match6); + + addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function ( + input, + week, + config, + token + ) { + week[token.substr(0, 2)] = toInt(input); + }); + + addWeekParseToken(['gg', 'GG'], function (input, week, config, token) { + week[token] = hooks.parseTwoDigitYear(input); + }); + + // MOMENTS + + function getSetWeekYear(input) { + return getSetWeekYearHelper.call( + this, + input, + this.week(), + this.weekday(), + this.localeData()._week.dow, + this.localeData()._week.doy + ); + } + + function getSetISOWeekYear(input) { + return getSetWeekYearHelper.call( + this, + input, + this.isoWeek(), + this.isoWeekday(), + 1, + 4 + ); + } + + function getISOWeeksInYear() { + return weeksInYear(this.year(), 1, 4); + } + + function getISOWeeksInISOWeekYear() { + return weeksInYear(this.isoWeekYear(), 1, 4); + } + + function getWeeksInYear() { + var weekInfo = this.localeData()._week; + return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy); + } + + function getWeeksInWeekYear() { + var weekInfo = this.localeData()._week; + return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy); + } + + function getSetWeekYearHelper(input, week, weekday, dow, doy) { + var weeksTarget; + if (input == null) { + return weekOfYear(this, dow, doy).year; + } else { + weeksTarget = weeksInYear(input, dow, doy); + if (week > weeksTarget) { + week = weeksTarget; + } + return setWeekAll.call(this, input, week, weekday, dow, doy); + } + } + + function setWeekAll(weekYear, week, weekday, dow, doy) { + var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy), + date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear); + + this.year(date.getUTCFullYear()); + this.month(date.getUTCMonth()); + this.date(date.getUTCDate()); + return this; + } + + // FORMATTING + + addFormatToken('Q', 0, 'Qo', 'quarter'); + + // ALIASES + + addUnitAlias('quarter', 'Q'); + + // PRIORITY + + addUnitPriority('quarter', 7); + + // PARSING + + addRegexToken('Q', match1); + addParseToken('Q', function (input, array) { + array[MONTH] = (toInt(input) - 1) * 3; + }); + + // MOMENTS + + function getSetQuarter(input) { + return input == null + ? Math.ceil((this.month() + 1) / 3) + : this.month((input - 1) * 3 + (this.month() % 3)); + } + + // FORMATTING + + addFormatToken('D', ['DD', 2], 'Do', 'date'); + + // ALIASES + + addUnitAlias('date', 'D'); + + // PRIORITY + addUnitPriority('date', 9); + + // PARSING + + addRegexToken('D', match1to2); + addRegexToken('DD', match1to2, match2); + addRegexToken('Do', function (isStrict, locale) { + // TODO: Remove "ordinalParse" fallback in next major release. + return isStrict + ? locale._dayOfMonthOrdinalParse || locale._ordinalParse + : locale._dayOfMonthOrdinalParseLenient; + }); + + addParseToken(['D', 'DD'], DATE); + addParseToken('Do', function (input, array) { + array[DATE] = toInt(input.match(match1to2)[0]); + }); + + // MOMENTS + + var getSetDayOfMonth = makeGetSet('Date', true); + + // FORMATTING + + addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear'); + + // ALIASES + + addUnitAlias('dayOfYear', 'DDD'); + + // PRIORITY + addUnitPriority('dayOfYear', 4); + + // PARSING + + addRegexToken('DDD', match1to3); + addRegexToken('DDDD', match3); + addParseToken(['DDD', 'DDDD'], function (input, array, config) { + config._dayOfYear = toInt(input); + }); + + // HELPERS + + // MOMENTS + + function getSetDayOfYear(input) { + var dayOfYear = + Math.round( + (this.clone().startOf('day') - this.clone().startOf('year')) / 864e5 + ) + 1; + return input == null ? dayOfYear : this.add(input - dayOfYear, 'd'); + } + + // FORMATTING + + addFormatToken('m', ['mm', 2], 0, 'minute'); + + // ALIASES + + addUnitAlias('minute', 'm'); + + // PRIORITY + + addUnitPriority('minute', 14); + + // PARSING + + addRegexToken('m', match1to2); + addRegexToken('mm', match1to2, match2); + addParseToken(['m', 'mm'], MINUTE); + + // MOMENTS + + var getSetMinute = makeGetSet('Minutes', false); + + // FORMATTING + + addFormatToken('s', ['ss', 2], 0, 'second'); + + // ALIASES + + addUnitAlias('second', 's'); + + // PRIORITY + + addUnitPriority('second', 15); + + // PARSING + + addRegexToken('s', match1to2); + addRegexToken('ss', match1to2, match2); + addParseToken(['s', 'ss'], SECOND); + + // MOMENTS + + var getSetSecond = makeGetSet('Seconds', false); + + // FORMATTING + + addFormatToken('S', 0, 0, function () { + return ~~(this.millisecond() / 100); + }); + + addFormatToken(0, ['SS', 2], 0, function () { + return ~~(this.millisecond() / 10); + }); + + addFormatToken(0, ['SSS', 3], 0, 'millisecond'); + addFormatToken(0, ['SSSS', 4], 0, function () { + return this.millisecond() * 10; + }); + addFormatToken(0, ['SSSSS', 5], 0, function () { + return this.millisecond() * 100; + }); + addFormatToken(0, ['SSSSSS', 6], 0, function () { + return this.millisecond() * 1000; + }); + addFormatToken(0, ['SSSSSSS', 7], 0, function () { + return this.millisecond() * 10000; + }); + addFormatToken(0, ['SSSSSSSS', 8], 0, function () { + return this.millisecond() * 100000; + }); + addFormatToken(0, ['SSSSSSSSS', 9], 0, function () { + return this.millisecond() * 1000000; + }); + + // ALIASES + + addUnitAlias('millisecond', 'ms'); + + // PRIORITY + + addUnitPriority('millisecond', 16); + + // PARSING + + addRegexToken('S', match1to3, match1); + addRegexToken('SS', match1to3, match2); + addRegexToken('SSS', match1to3, match3); + + var token, getSetMillisecond; + for (token = 'SSSS'; token.length <= 9; token += 'S') { + addRegexToken(token, matchUnsigned); + } + + function parseMs(input, array) { + array[MILLISECOND] = toInt(('0.' + input) * 1000); + } + + for (token = 'S'; token.length <= 9; token += 'S') { + addParseToken(token, parseMs); + } + + getSetMillisecond = makeGetSet('Milliseconds', false); + + // FORMATTING + + addFormatToken('z', 0, 0, 'zoneAbbr'); + addFormatToken('zz', 0, 0, 'zoneName'); + + // MOMENTS + + function getZoneAbbr() { + return this._isUTC ? 'UTC' : ''; + } + + function getZoneName() { + return this._isUTC ? 'Coordinated Universal Time' : ''; + } + + var proto = Moment.prototype; + + proto.add = add; + proto.calendar = calendar$1; + proto.clone = clone; + proto.diff = diff; + proto.endOf = endOf; + proto.format = format; + proto.from = from; + proto.fromNow = fromNow; + proto.to = to; + proto.toNow = toNow; + proto.get = stringGet; + proto.invalidAt = invalidAt; + proto.isAfter = isAfter; + proto.isBefore = isBefore; + proto.isBetween = isBetween; + proto.isSame = isSame; + proto.isSameOrAfter = isSameOrAfter; + proto.isSameOrBefore = isSameOrBefore; + proto.isValid = isValid$2; + proto.lang = lang; + proto.locale = locale; + proto.localeData = localeData; + proto.max = prototypeMax; + proto.min = prototypeMin; + proto.parsingFlags = parsingFlags; + proto.set = stringSet; + proto.startOf = startOf; + proto.subtract = subtract; + proto.toArray = toArray; + proto.toObject = toObject; + proto.toDate = toDate; + proto.toISOString = toISOString; + proto.inspect = inspect; + if (typeof Symbol !== 'undefined' && Symbol.for != null) { + proto[Symbol.for('nodejs.util.inspect.custom')] = function () { + return 'Moment<' + this.format() + '>'; + }; + } + proto.toJSON = toJSON; + proto.toString = toString; + proto.unix = unix; + proto.valueOf = valueOf; + proto.creationData = creationData; + proto.eraName = getEraName; + proto.eraNarrow = getEraNarrow; + proto.eraAbbr = getEraAbbr; + proto.eraYear = getEraYear; + proto.year = getSetYear; + proto.isLeapYear = getIsLeapYear; + proto.weekYear = getSetWeekYear; + proto.isoWeekYear = getSetISOWeekYear; + proto.quarter = proto.quarters = getSetQuarter; + proto.month = getSetMonth; + proto.daysInMonth = getDaysInMonth; + proto.week = proto.weeks = getSetWeek; + proto.isoWeek = proto.isoWeeks = getSetISOWeek; + proto.weeksInYear = getWeeksInYear; + proto.weeksInWeekYear = getWeeksInWeekYear; + proto.isoWeeksInYear = getISOWeeksInYear; + proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear; + proto.date = getSetDayOfMonth; + proto.day = proto.days = getSetDayOfWeek; + proto.weekday = getSetLocaleDayOfWeek; + proto.isoWeekday = getSetISODayOfWeek; + proto.dayOfYear = getSetDayOfYear; + proto.hour = proto.hours = getSetHour; + proto.minute = proto.minutes = getSetMinute; + proto.second = proto.seconds = getSetSecond; + proto.millisecond = proto.milliseconds = getSetMillisecond; + proto.utcOffset = getSetOffset; + proto.utc = setOffsetToUTC; + proto.local = setOffsetToLocal; + proto.parseZone = setOffsetToParsedOffset; + proto.hasAlignedHourOffset = hasAlignedHourOffset; + proto.isDST = isDaylightSavingTime; + proto.isLocal = isLocal; + proto.isUtcOffset = isUtcOffset; + proto.isUtc = isUtc; + proto.isUTC = isUtc; + proto.zoneAbbr = getZoneAbbr; + proto.zoneName = getZoneName; + proto.dates = deprecate( + 'dates accessor is deprecated. Use date instead.', + getSetDayOfMonth + ); + proto.months = deprecate( + 'months accessor is deprecated. Use month instead', + getSetMonth + ); + proto.years = deprecate( + 'years accessor is deprecated. Use year instead', + getSetYear + ); + proto.zone = deprecate( + 'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/', + getSetZone + ); + proto.isDSTShifted = deprecate( + 'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information', + isDaylightSavingTimeShifted + ); + + function createUnix(input) { + return createLocal(input * 1000); + } + + function createInZone() { + return createLocal.apply(null, arguments).parseZone(); + } + + function preParsePostFormat(string) { + return string; + } + + var proto$1 = Locale.prototype; + + proto$1.calendar = calendar; + proto$1.longDateFormat = longDateFormat; + proto$1.invalidDate = invalidDate; + proto$1.ordinal = ordinal; + proto$1.preparse = preParsePostFormat; + proto$1.postformat = preParsePostFormat; + proto$1.relativeTime = relativeTime; + proto$1.pastFuture = pastFuture; + proto$1.set = set; + proto$1.eras = localeEras; + proto$1.erasParse = localeErasParse; + proto$1.erasConvertYear = localeErasConvertYear; + proto$1.erasAbbrRegex = erasAbbrRegex; + proto$1.erasNameRegex = erasNameRegex; + proto$1.erasNarrowRegex = erasNarrowRegex; + + proto$1.months = localeMonths; + proto$1.monthsShort = localeMonthsShort; + proto$1.monthsParse = localeMonthsParse; + proto$1.monthsRegex = monthsRegex; + proto$1.monthsShortRegex = monthsShortRegex; + proto$1.week = localeWeek; + proto$1.firstDayOfYear = localeFirstDayOfYear; + proto$1.firstDayOfWeek = localeFirstDayOfWeek; + + proto$1.weekdays = localeWeekdays; + proto$1.weekdaysMin = localeWeekdaysMin; + proto$1.weekdaysShort = localeWeekdaysShort; + proto$1.weekdaysParse = localeWeekdaysParse; + + proto$1.weekdaysRegex = weekdaysRegex; + proto$1.weekdaysShortRegex = weekdaysShortRegex; + proto$1.weekdaysMinRegex = weekdaysMinRegex; + + proto$1.isPM = localeIsPM; + proto$1.meridiem = localeMeridiem; + + function get$1(format, index, field, setter) { + var locale = getLocale(), + utc = createUTC().set(setter, index); + return locale[field](utc, format); + } + + function listMonthsImpl(format, index, field) { + if (isNumber(format)) { + index = format; + format = undefined; + } + + format = format || ''; + + if (index != null) { + return get$1(format, index, field, 'month'); + } + + var i, + out = []; + for (i = 0; i < 12; i++) { + out[i] = get$1(format, i, field, 'month'); + } + return out; + } + + // () + // (5) + // (fmt, 5) + // (fmt) + // (true) + // (true, 5) + // (true, fmt, 5) + // (true, fmt) + function listWeekdaysImpl(localeSorted, format, index, field) { + if (typeof localeSorted === 'boolean') { + if (isNumber(format)) { + index = format; + format = undefined; + } + + format = format || ''; + } else { + format = localeSorted; + index = format; + localeSorted = false; + + if (isNumber(format)) { + index = format; + format = undefined; + } + + format = format || ''; + } + + var locale = getLocale(), + shift = localeSorted ? locale._week.dow : 0, + i, + out = []; + + if (index != null) { + return get$1(format, (index + shift) % 7, field, 'day'); + } + + for (i = 0; i < 7; i++) { + out[i] = get$1(format, (i + shift) % 7, field, 'day'); + } + return out; + } + + function listMonths(format, index) { + return listMonthsImpl(format, index, 'months'); + } + + function listMonthsShort(format, index) { + return listMonthsImpl(format, index, 'monthsShort'); + } + + function listWeekdays(localeSorted, format, index) { + return listWeekdaysImpl(localeSorted, format, index, 'weekdays'); + } + + function listWeekdaysShort(localeSorted, format, index) { + return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort'); + } + + function listWeekdaysMin(localeSorted, format, index) { + return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin'); + } + + getSetGlobalLocale('en', { + eras: [ + { + since: '0001-01-01', + until: +Infinity, + offset: 1, + name: 'Anno Domini', + narrow: 'AD', + abbr: 'AD', + }, + { + since: '0000-12-31', + until: -Infinity, + offset: 1, + name: 'Before Christ', + narrow: 'BC', + abbr: 'BC', + }, + ], + dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/, + ordinal: function (number) { + var b = number % 10, + output = + toInt((number % 100) / 10) === 1 + ? 'th' + : b === 1 + ? 'st' + : b === 2 + ? 'nd' + : b === 3 + ? 'rd' + : 'th'; + return number + output; + }, + }); + + // Side effect imports + + hooks.lang = deprecate( + 'moment.lang is deprecated. Use moment.locale instead.', + getSetGlobalLocale + ); + hooks.langData = deprecate( + 'moment.langData is deprecated. Use moment.localeData instead.', + getLocale + ); + + var mathAbs = Math.abs; + + function abs() { + var data = this._data; + + this._milliseconds = mathAbs(this._milliseconds); + this._days = mathAbs(this._days); + this._months = mathAbs(this._months); + + data.milliseconds = mathAbs(data.milliseconds); + data.seconds = mathAbs(data.seconds); + data.minutes = mathAbs(data.minutes); + data.hours = mathAbs(data.hours); + data.months = mathAbs(data.months); + data.years = mathAbs(data.years); + + return this; + } + + function addSubtract$1(duration, input, value, direction) { + var other = createDuration(input, value); + + duration._milliseconds += direction * other._milliseconds; + duration._days += direction * other._days; + duration._months += direction * other._months; + + return duration._bubble(); + } + + // supports only 2.0-style add(1, 's') or add(duration) + function add$1(input, value) { + return addSubtract$1(this, input, value, 1); + } + + // supports only 2.0-style subtract(1, 's') or subtract(duration) + function subtract$1(input, value) { + return addSubtract$1(this, input, value, -1); + } + + function absCeil(number) { + if (number < 0) { + return Math.floor(number); + } else { + return Math.ceil(number); + } + } + + function bubble() { + var milliseconds = this._milliseconds, + days = this._days, + months = this._months, + data = this._data, + seconds, + minutes, + hours, + years, + monthsFromDays; + + // if we have a mix of positive and negative values, bubble down first + // check: https://github.com/moment/moment/issues/2166 + if ( + !( + (milliseconds >= 0 && days >= 0 && months >= 0) || + (milliseconds <= 0 && days <= 0 && months <= 0) + ) + ) { + milliseconds += absCeil(monthsToDays(months) + days) * 864e5; + days = 0; + months = 0; + } + + // The following code bubbles up values, see the tests for + // examples of what that means. + data.milliseconds = milliseconds % 1000; + + seconds = absFloor(milliseconds / 1000); + data.seconds = seconds % 60; + + minutes = absFloor(seconds / 60); + data.minutes = minutes % 60; + + hours = absFloor(minutes / 60); + data.hours = hours % 24; + + days += absFloor(hours / 24); + + // convert days to months + monthsFromDays = absFloor(daysToMonths(days)); + months += monthsFromDays; + days -= absCeil(monthsToDays(monthsFromDays)); + + // 12 months -> 1 year + years = absFloor(months / 12); + months %= 12; + + data.days = days; + data.months = months; + data.years = years; + + return this; + } + + function daysToMonths(days) { + // 400 years have 146097 days (taking into account leap year rules) + // 400 years have 12 months === 4800 + return (days * 4800) / 146097; + } + + function monthsToDays(months) { + // the reverse of daysToMonths + return (months * 146097) / 4800; + } + + function as(units) { + if (!this.isValid()) { + return NaN; + } + var days, + months, + milliseconds = this._milliseconds; + + units = normalizeUnits(units); + + if (units === 'month' || units === 'quarter' || units === 'year') { + days = this._days + milliseconds / 864e5; + months = this._months + daysToMonths(days); + switch (units) { + case 'month': + return months; + case 'quarter': + return months / 3; + case 'year': + return months / 12; + } + } else { + // handle milliseconds separately because of floating point math errors (issue #1867) + days = this._days + Math.round(monthsToDays(this._months)); + switch (units) { + case 'week': + return days / 7 + milliseconds / 6048e5; + case 'day': + return days + milliseconds / 864e5; + case 'hour': + return days * 24 + milliseconds / 36e5; + case 'minute': + return days * 1440 + milliseconds / 6e4; + case 'second': + return days * 86400 + milliseconds / 1000; + // Math.floor prevents floating point math errors here + case 'millisecond': + return Math.floor(days * 864e5) + milliseconds; + default: + throw new Error('Unknown unit ' + units); + } + } + } + + // TODO: Use this.as('ms')? + function valueOf$1() { + if (!this.isValid()) { + return NaN; + } + return ( + this._milliseconds + + this._days * 864e5 + + (this._months % 12) * 2592e6 + + toInt(this._months / 12) * 31536e6 + ); + } + + function makeAs(alias) { + return function () { + return this.as(alias); + }; + } + + var asMilliseconds = makeAs('ms'), + asSeconds = makeAs('s'), + asMinutes = makeAs('m'), + asHours = makeAs('h'), + asDays = makeAs('d'), + asWeeks = makeAs('w'), + asMonths = makeAs('M'), + asQuarters = makeAs('Q'), + asYears = makeAs('y'); + + function clone$1() { + return createDuration(this); + } + + function get$2(units) { + units = normalizeUnits(units); + return this.isValid() ? this[units + 's']() : NaN; + } + + function makeGetter(name) { + return function () { + return this.isValid() ? this._data[name] : NaN; + }; + } + + var milliseconds = makeGetter('milliseconds'), + seconds = makeGetter('seconds'), + minutes = makeGetter('minutes'), + hours = makeGetter('hours'), + days = makeGetter('days'), + months = makeGetter('months'), + years = makeGetter('years'); + + function weeks() { + return absFloor(this.days() / 7); + } + + var round = Math.round, + thresholds = { + ss: 44, // a few seconds to seconds + s: 45, // seconds to minute + m: 45, // minutes to hour + h: 22, // hours to day + d: 26, // days to month/week + w: null, // weeks to month + M: 11, // months to year + }; + + // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize + function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) { + return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture); + } + + function relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) { + var duration = createDuration(posNegDuration).abs(), + seconds = round(duration.as('s')), + minutes = round(duration.as('m')), + hours = round(duration.as('h')), + days = round(duration.as('d')), + months = round(duration.as('M')), + weeks = round(duration.as('w')), + years = round(duration.as('y')), + a = + (seconds <= thresholds.ss && ['s', seconds]) || + (seconds < thresholds.s && ['ss', seconds]) || + (minutes <= 1 && ['m']) || + (minutes < thresholds.m && ['mm', minutes]) || + (hours <= 1 && ['h']) || + (hours < thresholds.h && ['hh', hours]) || + (days <= 1 && ['d']) || + (days < thresholds.d && ['dd', days]); + + if (thresholds.w != null) { + a = + a || + (weeks <= 1 && ['w']) || + (weeks < thresholds.w && ['ww', weeks]); + } + a = a || + (months <= 1 && ['M']) || + (months < thresholds.M && ['MM', months]) || + (years <= 1 && ['y']) || ['yy', years]; + + a[2] = withoutSuffix; + a[3] = +posNegDuration > 0; + a[4] = locale; + return substituteTimeAgo.apply(null, a); + } + + // This function allows you to set the rounding function for relative time strings + function getSetRelativeTimeRounding(roundingFunction) { + if (roundingFunction === undefined) { + return round; + } + if (typeof roundingFunction === 'function') { + round = roundingFunction; + return true; + } + return false; + } + + // This function allows you to set a threshold for relative time strings + function getSetRelativeTimeThreshold(threshold, limit) { + if (thresholds[threshold] === undefined) { + return false; + } + if (limit === undefined) { + return thresholds[threshold]; + } + thresholds[threshold] = limit; + if (threshold === 's') { + thresholds.ss = limit - 1; + } + return true; + } + + function humanize(argWithSuffix, argThresholds) { + if (!this.isValid()) { + return this.localeData().invalidDate(); + } + + var withSuffix = false, + th = thresholds, + locale, + output; + + if (typeof argWithSuffix === 'object') { + argThresholds = argWithSuffix; + argWithSuffix = false; + } + if (typeof argWithSuffix === 'boolean') { + withSuffix = argWithSuffix; + } + if (typeof argThresholds === 'object') { + th = Object.assign({}, thresholds, argThresholds); + if (argThresholds.s != null && argThresholds.ss == null) { + th.ss = argThresholds.s - 1; + } + } + + locale = this.localeData(); + output = relativeTime$1(this, !withSuffix, th, locale); + + if (withSuffix) { + output = locale.pastFuture(+this, output); + } + + return locale.postformat(output); + } + + var abs$1 = Math.abs; + + function sign(x) { + return (x > 0) - (x < 0) || +x; + } + + function toISOString$1() { + // for ISO strings we do not use the normal bubbling rules: + // * milliseconds bubble up until they become hours + // * days do not bubble at all + // * months bubble up until they become years + // This is because there is no context-free conversion between hours and days + // (think of clock changes) + // and also not between days and months (28-31 days per month) + if (!this.isValid()) { + return this.localeData().invalidDate(); + } + + var seconds = abs$1(this._milliseconds) / 1000, + days = abs$1(this._days), + months = abs$1(this._months), + minutes, + hours, + years, + s, + total = this.asSeconds(), + totalSign, + ymSign, + daysSign, + hmsSign; + + if (!total) { + // this is the same as C#'s (Noda) and python (isodate)... + // but not other JS (goog.date) + return 'P0D'; + } + + // 3600 seconds -> 60 minutes -> 1 hour + minutes = absFloor(seconds / 60); + hours = absFloor(minutes / 60); + seconds %= 60; + minutes %= 60; + + // 12 months -> 1 year + years = absFloor(months / 12); + months %= 12; + + // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js + s = seconds ? seconds.toFixed(3).replace(/\.?0+$/, '') : ''; + + totalSign = total < 0 ? '-' : ''; + ymSign = sign(this._months) !== sign(total) ? '-' : ''; + daysSign = sign(this._days) !== sign(total) ? '-' : ''; + hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : ''; + + return ( + totalSign + + 'P' + + (years ? ymSign + years + 'Y' : '') + + (months ? ymSign + months + 'M' : '') + + (days ? daysSign + days + 'D' : '') + + (hours || minutes || seconds ? 'T' : '') + + (hours ? hmsSign + hours + 'H' : '') + + (minutes ? hmsSign + minutes + 'M' : '') + + (seconds ? hmsSign + s + 'S' : '') + ); + } + + var proto$2 = Duration.prototype; + + proto$2.isValid = isValid$1; + proto$2.abs = abs; + proto$2.add = add$1; + proto$2.subtract = subtract$1; + proto$2.as = as; + proto$2.asMilliseconds = asMilliseconds; + proto$2.asSeconds = asSeconds; + proto$2.asMinutes = asMinutes; + proto$2.asHours = asHours; + proto$2.asDays = asDays; + proto$2.asWeeks = asWeeks; + proto$2.asMonths = asMonths; + proto$2.asQuarters = asQuarters; + proto$2.asYears = asYears; + proto$2.valueOf = valueOf$1; + proto$2._bubble = bubble; + proto$2.clone = clone$1; + proto$2.get = get$2; + proto$2.milliseconds = milliseconds; + proto$2.seconds = seconds; + proto$2.minutes = minutes; + proto$2.hours = hours; + proto$2.days = days; + proto$2.weeks = weeks; + proto$2.months = months; + proto$2.years = years; + proto$2.humanize = humanize; + proto$2.toISOString = toISOString$1; + proto$2.toString = toISOString$1; + proto$2.toJSON = toISOString$1; + proto$2.locale = locale; + proto$2.localeData = localeData; + + proto$2.toIsoString = deprecate( + 'toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', + toISOString$1 + ); + proto$2.lang = lang; + + // FORMATTING + + addFormatToken('X', 0, 0, 'unix'); + addFormatToken('x', 0, 0, 'valueOf'); + + // PARSING + + addRegexToken('x', matchSigned); + addRegexToken('X', matchTimestamp); + addParseToken('X', function (input, array, config) { + config._d = new Date(parseFloat(input) * 1000); + }); + addParseToken('x', function (input, array, config) { + config._d = new Date(toInt(input)); + }); + + //! moment.js + + hooks.version = '2.28.0'; + + setHookCallback(createLocal); + + hooks.fn = proto; + hooks.min = min; + hooks.max = max; + hooks.now = now; + hooks.utc = createUTC; + hooks.unix = createUnix; + hooks.months = listMonths; + hooks.isDate = isDate; + hooks.locale = getSetGlobalLocale; + hooks.invalid = createInvalid; + hooks.duration = createDuration; + hooks.isMoment = isMoment; + hooks.weekdays = listWeekdays; + hooks.parseZone = createInZone; + hooks.localeData = getLocale; + hooks.isDuration = isDuration; + hooks.monthsShort = listMonthsShort; + hooks.weekdaysMin = listWeekdaysMin; + hooks.defineLocale = defineLocale; + hooks.updateLocale = updateLocale; + hooks.locales = listLocales; + hooks.weekdaysShort = listWeekdaysShort; + hooks.normalizeUnits = normalizeUnits; + hooks.relativeTimeRounding = getSetRelativeTimeRounding; + hooks.relativeTimeThreshold = getSetRelativeTimeThreshold; + hooks.calendarFormat = getCalendarFormat; + hooks.prototype = proto; + + // currently HTML5 input type only supports 24-hour formats + hooks.HTML5_FMT = { + DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // + DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // + DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // + DATE: 'YYYY-MM-DD', // + TIME: 'HH:mm', // + TIME_SECONDS: 'HH:mm:ss', // + TIME_MS: 'HH:mm:ss.SSS', // + WEEK: 'GGGG-[W]WW', // + MONTH: 'YYYY-MM', // + }; + + //! moment.js locale configuration + + hooks.defineLocale('af', { + months: 'Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember'.split( + '_' + ), + monthsShort: 'Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des'.split('_'), + weekdays: 'Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag'.split( + '_' + ), + weekdaysShort: 'Son_Maa_Din_Woe_Don_Vry_Sat'.split('_'), + weekdaysMin: 'So_Ma_Di_Wo_Do_Vr_Sa'.split('_'), + meridiemParse: /vm|nm/i, + isPM: function (input) { + return /^nm$/i.test(input); + }, + meridiem: function (hours, minutes, isLower) { + if (hours < 12) { + return isLower ? 'vm' : 'VM'; + } else { + return isLower ? 'nm' : 'NM'; + } + }, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Vandag om] LT', + nextDay: '[Môre om] LT', + nextWeek: 'dddd [om] LT', + lastDay: '[Gister om] LT', + lastWeek: '[Laas] dddd [om] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'oor %s', + past: '%s gelede', + s: "'n paar sekondes", + ss: '%d sekondes', + m: "'n minuut", + mm: '%d minute', + h: "'n uur", + hh: '%d ure', + d: "'n dag", + dd: '%d dae', + M: "'n maand", + MM: '%d maande', + y: "'n jaar", + yy: '%d jaar', + }, + dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/, + ordinal: function (number) { + return ( + number + + (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de') + ); // Thanks to Joris Röling : https://github.com/jjupiter + }, + week: { + dow: 1, // Maandag is die eerste dag van die week. + doy: 4, // Die week wat die 4de Januarie bevat is die eerste week van die jaar. + }, + }); + + //! moment.js locale configuration + + var pluralForm = function (n) { + return n === 0 + ? 0 + : n === 1 + ? 1 + : n === 2 + ? 2 + : n % 100 >= 3 && n % 100 <= 10 + ? 3 + : n % 100 >= 11 + ? 4 + : 5; + }, + plurals = { + s: [ + 'أقل من ثانية', + 'ثانية واحدة', + ['ثانيتان', 'ثانيتين'], + '%d ثوان', + '%d ثانية', + '%d ثانية', + ], + m: [ + 'أقل من دقيقة', + 'دقيقة واحدة', + ['دقيقتان', 'دقيقتين'], + '%d دقائق', + '%d دقيقة', + '%d دقيقة', + ], + h: [ + 'أقل من ساعة', + 'ساعة واحدة', + ['ساعتان', 'ساعتين'], + '%d ساعات', + '%d ساعة', + '%d ساعة', + ], + d: [ + 'أقل من يوم', + 'يوم واحد', + ['يومان', 'يومين'], + '%d أيام', + '%d يومًا', + '%d يوم', + ], + M: [ + 'أقل من شهر', + 'شهر واحد', + ['شهران', 'شهرين'], + '%d أشهر', + '%d شهرا', + '%d شهر', + ], + y: [ + 'أقل من عام', + 'عام واحد', + ['عامان', 'عامين'], + '%d أعوام', + '%d عامًا', + '%d عام', + ], + }, + pluralize = function (u) { + return function (number, withoutSuffix, string, isFuture) { + var f = pluralForm(number), + str = plurals[u][pluralForm(number)]; + if (f === 2) { + str = str[withoutSuffix ? 0 : 1]; + } + return str.replace(/%d/i, number); + }; + }, + months$1 = [ + 'جانفي', + 'فيفري', + 'مارس', + 'أفريل', + 'ماي', + 'جوان', + 'جويلية', + 'أوت', + 'سبتمبر', + 'أكتوبر', + 'نوفمبر', + 'ديسمبر', + ]; + + hooks.defineLocale('ar-dz', { + months: months$1, + monthsShort: months$1, + weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), + weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'), + weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'D/\u200FM/\u200FYYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + meridiemParse: /ص|م/, + isPM: function (input) { + return 'م' === input; + }, + meridiem: function (hour, minute, isLower) { + if (hour < 12) { + return 'ص'; + } else { + return 'م'; + } + }, + calendar: { + sameDay: '[اليوم عند الساعة] LT', + nextDay: '[غدًا عند الساعة] LT', + nextWeek: 'dddd [عند الساعة] LT', + lastDay: '[أمس عند الساعة] LT', + lastWeek: 'dddd [عند الساعة] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'بعد %s', + past: 'منذ %s', + s: pluralize('s'), + ss: pluralize('s'), + m: pluralize('m'), + mm: pluralize('m'), + h: pluralize('h'), + hh: pluralize('h'), + d: pluralize('d'), + dd: pluralize('d'), + M: pluralize('M'), + MM: pluralize('M'), + y: pluralize('y'), + yy: pluralize('y'), + }, + postformat: function (string) { + return string.replace(/,/g, '،'); + }, + week: { + dow: 0, // Sunday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('ar-kw', { + months: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split( + '_' + ), + monthsShort: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split( + '_' + ), + weekdays: 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), + weekdaysShort: 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'), + weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[اليوم على الساعة] LT', + nextDay: '[غدا على الساعة] LT', + nextWeek: 'dddd [على الساعة] LT', + lastDay: '[أمس على الساعة] LT', + lastWeek: 'dddd [على الساعة] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'في %s', + past: 'منذ %s', + s: 'ثوان', + ss: '%d ثانية', + m: 'دقيقة', + mm: '%d دقائق', + h: 'ساعة', + hh: '%d ساعات', + d: 'يوم', + dd: '%d أيام', + M: 'شهر', + MM: '%d أشهر', + y: 'سنة', + yy: '%d سنوات', + }, + week: { + dow: 0, // Sunday is the first day of the week. + doy: 12, // The week that contains Jan 12th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var symbolMap = { + '1': '1', + '2': '2', + '3': '3', + '4': '4', + '5': '5', + '6': '6', + '7': '7', + '8': '8', + '9': '9', + '0': '0', + }, + pluralForm$1 = function (n) { + return n === 0 + ? 0 + : n === 1 + ? 1 + : n === 2 + ? 2 + : n % 100 >= 3 && n % 100 <= 10 + ? 3 + : n % 100 >= 11 + ? 4 + : 5; + }, + plurals$1 = { + s: [ + 'أقل من ثانية', + 'ثانية واحدة', + ['ثانيتان', 'ثانيتين'], + '%d ثوان', + '%d ثانية', + '%d ثانية', + ], + m: [ + 'أقل من دقيقة', + 'دقيقة واحدة', + ['دقيقتان', 'دقيقتين'], + '%d دقائق', + '%d دقيقة', + '%d دقيقة', + ], + h: [ + 'أقل من ساعة', + 'ساعة واحدة', + ['ساعتان', 'ساعتين'], + '%d ساعات', + '%d ساعة', + '%d ساعة', + ], + d: [ + 'أقل من يوم', + 'يوم واحد', + ['يومان', 'يومين'], + '%d أيام', + '%d يومًا', + '%d يوم', + ], + M: [ + 'أقل من شهر', + 'شهر واحد', + ['شهران', 'شهرين'], + '%d أشهر', + '%d شهرا', + '%d شهر', + ], + y: [ + 'أقل من عام', + 'عام واحد', + ['عامان', 'عامين'], + '%d أعوام', + '%d عامًا', + '%d عام', + ], + }, + pluralize$1 = function (u) { + return function (number, withoutSuffix, string, isFuture) { + var f = pluralForm$1(number), + str = plurals$1[u][pluralForm$1(number)]; + if (f === 2) { + str = str[withoutSuffix ? 0 : 1]; + } + return str.replace(/%d/i, number); + }; + }, + months$2 = [ + 'يناير', + 'فبراير', + 'مارس', + 'أبريل', + 'مايو', + 'يونيو', + 'يوليو', + 'أغسطس', + 'سبتمبر', + 'أكتوبر', + 'نوفمبر', + 'ديسمبر', + ]; + + hooks.defineLocale('ar-ly', { + months: months$2, + monthsShort: months$2, + weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), + weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'), + weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'D/\u200FM/\u200FYYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + meridiemParse: /ص|م/, + isPM: function (input) { + return 'م' === input; + }, + meridiem: function (hour, minute, isLower) { + if (hour < 12) { + return 'ص'; + } else { + return 'م'; + } + }, + calendar: { + sameDay: '[اليوم عند الساعة] LT', + nextDay: '[غدًا عند الساعة] LT', + nextWeek: 'dddd [عند الساعة] LT', + lastDay: '[أمس عند الساعة] LT', + lastWeek: 'dddd [عند الساعة] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'بعد %s', + past: 'منذ %s', + s: pluralize$1('s'), + ss: pluralize$1('s'), + m: pluralize$1('m'), + mm: pluralize$1('m'), + h: pluralize$1('h'), + hh: pluralize$1('h'), + d: pluralize$1('d'), + dd: pluralize$1('d'), + M: pluralize$1('M'), + MM: pluralize$1('M'), + y: pluralize$1('y'), + yy: pluralize$1('y'), + }, + preparse: function (string) { + return string.replace(/،/g, ','); + }, + postformat: function (string) { + return string + .replace(/\d/g, function (match) { + return symbolMap[match]; + }) + .replace(/,/g, '،'); + }, + week: { + dow: 6, // Saturday is the first day of the week. + doy: 12, // The week that contains Jan 12th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('ar-ma', { + months: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split( + '_' + ), + monthsShort: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split( + '_' + ), + weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), + weekdaysShort: 'احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'), + weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[اليوم على الساعة] LT', + nextDay: '[غدا على الساعة] LT', + nextWeek: 'dddd [على الساعة] LT', + lastDay: '[أمس على الساعة] LT', + lastWeek: 'dddd [على الساعة] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'في %s', + past: 'منذ %s', + s: 'ثوان', + ss: '%d ثانية', + m: 'دقيقة', + mm: '%d دقائق', + h: 'ساعة', + hh: '%d ساعات', + d: 'يوم', + dd: '%d أيام', + M: 'شهر', + MM: '%d أشهر', + y: 'سنة', + yy: '%d سنوات', + }, + week: { + dow: 6, // Saturday is the first day of the week. + doy: 12, // The week that contains Jan 12th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var symbolMap$1 = { + '1': '١', + '2': '٢', + '3': '٣', + '4': '٤', + '5': '٥', + '6': '٦', + '7': '٧', + '8': '٨', + '9': '٩', + '0': '٠', + }, + numberMap = { + '١': '1', + '٢': '2', + '٣': '3', + '٤': '4', + '٥': '5', + '٦': '6', + '٧': '7', + '٨': '8', + '٩': '9', + '٠': '0', + }; + + hooks.defineLocale('ar-sa', { + months: 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split( + '_' + ), + monthsShort: 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split( + '_' + ), + weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), + weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'), + weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + meridiemParse: /ص|م/, + isPM: function (input) { + return 'م' === input; + }, + meridiem: function (hour, minute, isLower) { + if (hour < 12) { + return 'ص'; + } else { + return 'م'; + } + }, + calendar: { + sameDay: '[اليوم على الساعة] LT', + nextDay: '[غدا على الساعة] LT', + nextWeek: 'dddd [على الساعة] LT', + lastDay: '[أمس على الساعة] LT', + lastWeek: 'dddd [على الساعة] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'في %s', + past: 'منذ %s', + s: 'ثوان', + ss: '%d ثانية', + m: 'دقيقة', + mm: '%d دقائق', + h: 'ساعة', + hh: '%d ساعات', + d: 'يوم', + dd: '%d أيام', + M: 'شهر', + MM: '%d أشهر', + y: 'سنة', + yy: '%d سنوات', + }, + preparse: function (string) { + return string + .replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) { + return numberMap[match]; + }) + .replace(/،/g, ','); + }, + postformat: function (string) { + return string + .replace(/\d/g, function (match) { + return symbolMap$1[match]; + }) + .replace(/,/g, '،'); + }, + week: { + dow: 0, // Sunday is the first day of the week. + doy: 6, // The week that contains Jan 6th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('ar-tn', { + months: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split( + '_' + ), + monthsShort: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split( + '_' + ), + weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), + weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'), + weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[اليوم على الساعة] LT', + nextDay: '[غدا على الساعة] LT', + nextWeek: 'dddd [على الساعة] LT', + lastDay: '[أمس على الساعة] LT', + lastWeek: 'dddd [على الساعة] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'في %s', + past: 'منذ %s', + s: 'ثوان', + ss: '%d ثانية', + m: 'دقيقة', + mm: '%d دقائق', + h: 'ساعة', + hh: '%d ساعات', + d: 'يوم', + dd: '%d أيام', + M: 'شهر', + MM: '%d أشهر', + y: 'سنة', + yy: '%d سنوات', + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var symbolMap$2 = { + '1': '١', + '2': '٢', + '3': '٣', + '4': '٤', + '5': '٥', + '6': '٦', + '7': '٧', + '8': '٨', + '9': '٩', + '0': '٠', + }, + numberMap$1 = { + '١': '1', + '٢': '2', + '٣': '3', + '٤': '4', + '٥': '5', + '٦': '6', + '٧': '7', + '٨': '8', + '٩': '9', + '٠': '0', + }, + pluralForm$2 = function (n) { + return n === 0 + ? 0 + : n === 1 + ? 1 + : n === 2 + ? 2 + : n % 100 >= 3 && n % 100 <= 10 + ? 3 + : n % 100 >= 11 + ? 4 + : 5; + }, + plurals$2 = { + s: [ + 'أقل من ثانية', + 'ثانية واحدة', + ['ثانيتان', 'ثانيتين'], + '%d ثوان', + '%d ثانية', + '%d ثانية', + ], + m: [ + 'أقل من دقيقة', + 'دقيقة واحدة', + ['دقيقتان', 'دقيقتين'], + '%d دقائق', + '%d دقيقة', + '%d دقيقة', + ], + h: [ + 'أقل من ساعة', + 'ساعة واحدة', + ['ساعتان', 'ساعتين'], + '%d ساعات', + '%d ساعة', + '%d ساعة', + ], + d: [ + 'أقل من يوم', + 'يوم واحد', + ['يومان', 'يومين'], + '%d أيام', + '%d يومًا', + '%d يوم', + ], + M: [ + 'أقل من شهر', + 'شهر واحد', + ['شهران', 'شهرين'], + '%d أشهر', + '%d شهرا', + '%d شهر', + ], + y: [ + 'أقل من عام', + 'عام واحد', + ['عامان', 'عامين'], + '%d أعوام', + '%d عامًا', + '%d عام', + ], + }, + pluralize$2 = function (u) { + return function (number, withoutSuffix, string, isFuture) { + var f = pluralForm$2(number), + str = plurals$2[u][pluralForm$2(number)]; + if (f === 2) { + str = str[withoutSuffix ? 0 : 1]; + } + return str.replace(/%d/i, number); + }; + }, + months$3 = [ + 'يناير', + 'فبراير', + 'مارس', + 'أبريل', + 'مايو', + 'يونيو', + 'يوليو', + 'أغسطس', + 'سبتمبر', + 'أكتوبر', + 'نوفمبر', + 'ديسمبر', + ]; + + hooks.defineLocale('ar', { + months: months$3, + monthsShort: months$3, + weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), + weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'), + weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'D/\u200FM/\u200FYYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + meridiemParse: /ص|م/, + isPM: function (input) { + return 'م' === input; + }, + meridiem: function (hour, minute, isLower) { + if (hour < 12) { + return 'ص'; + } else { + return 'م'; + } + }, + calendar: { + sameDay: '[اليوم عند الساعة] LT', + nextDay: '[غدًا عند الساعة] LT', + nextWeek: 'dddd [عند الساعة] LT', + lastDay: '[أمس عند الساعة] LT', + lastWeek: 'dddd [عند الساعة] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'بعد %s', + past: 'منذ %s', + s: pluralize$2('s'), + ss: pluralize$2('s'), + m: pluralize$2('m'), + mm: pluralize$2('m'), + h: pluralize$2('h'), + hh: pluralize$2('h'), + d: pluralize$2('d'), + dd: pluralize$2('d'), + M: pluralize$2('M'), + MM: pluralize$2('M'), + y: pluralize$2('y'), + yy: pluralize$2('y'), + }, + preparse: function (string) { + return string + .replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) { + return numberMap$1[match]; + }) + .replace(/،/g, ','); + }, + postformat: function (string) { + return string + .replace(/\d/g, function (match) { + return symbolMap$2[match]; + }) + .replace(/,/g, '،'); + }, + week: { + dow: 6, // Saturday is the first day of the week. + doy: 12, // The week that contains Jan 12th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var suffixes = { + 1: '-inci', + 5: '-inci', + 8: '-inci', + 70: '-inci', + 80: '-inci', + 2: '-nci', + 7: '-nci', + 20: '-nci', + 50: '-nci', + 3: '-üncü', + 4: '-üncü', + 100: '-üncü', + 6: '-ncı', + 9: '-uncu', + 10: '-uncu', + 30: '-uncu', + 60: '-ıncı', + 90: '-ıncı', + }; + + hooks.defineLocale('az', { + months: 'yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr'.split( + '_' + ), + monthsShort: 'yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek'.split('_'), + weekdays: 'Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə'.split( + '_' + ), + weekdaysShort: 'Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən'.split('_'), + weekdaysMin: 'Bz_BE_ÇA_Çə_CA_Cü_Şə'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[bugün saat] LT', + nextDay: '[sabah saat] LT', + nextWeek: '[gələn həftə] dddd [saat] LT', + lastDay: '[dünən] LT', + lastWeek: '[keçən həftə] dddd [saat] LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s sonra', + past: '%s əvvəl', + s: 'bir neçə saniyə', + ss: '%d saniyə', + m: 'bir dəqiqə', + mm: '%d dəqiqə', + h: 'bir saat', + hh: '%d saat', + d: 'bir gün', + dd: '%d gün', + M: 'bir ay', + MM: '%d ay', + y: 'bir il', + yy: '%d il', + }, + meridiemParse: /gecə|səhər|gündüz|axşam/, + isPM: function (input) { + return /^(gündüz|axşam)$/.test(input); + }, + meridiem: function (hour, minute, isLower) { + if (hour < 4) { + return 'gecə'; + } else if (hour < 12) { + return 'səhər'; + } else if (hour < 17) { + return 'gündüz'; + } else { + return 'axşam'; + } + }, + dayOfMonthOrdinalParse: /\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/, + ordinal: function (number) { + if (number === 0) { + // special case for zero + return number + '-ıncı'; + } + var a = number % 10, + b = (number % 100) - a, + c = number >= 100 ? 100 : null; + return number + (suffixes[a] || suffixes[b] || suffixes[c]); + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + function plural(word, num) { + var forms = word.split('_'); + return num % 10 === 1 && num % 100 !== 11 + ? forms[0] + : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) + ? forms[1] + : forms[2]; + } + function relativeTimeWithPlural(number, withoutSuffix, key) { + var format = { + ss: withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд', + mm: withoutSuffix ? 'хвіліна_хвіліны_хвілін' : 'хвіліну_хвіліны_хвілін', + hh: withoutSuffix ? 'гадзіна_гадзіны_гадзін' : 'гадзіну_гадзіны_гадзін', + dd: 'дзень_дні_дзён', + MM: 'месяц_месяцы_месяцаў', + yy: 'год_гады_гадоў', + }; + if (key === 'm') { + return withoutSuffix ? 'хвіліна' : 'хвіліну'; + } else if (key === 'h') { + return withoutSuffix ? 'гадзіна' : 'гадзіну'; + } else { + return number + ' ' + plural(format[key], +number); + } + } + + hooks.defineLocale('be', { + months: { + format: 'студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня'.split( + '_' + ), + standalone: 'студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань'.split( + '_' + ), + }, + monthsShort: 'студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж'.split( + '_' + ), + weekdays: { + format: 'нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу'.split( + '_' + ), + standalone: 'нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота'.split( + '_' + ), + isFormat: /\[ ?[Ууў] ?(?:мінулую|наступную)? ?\] ?dddd/, + }, + weekdaysShort: 'нд_пн_ат_ср_чц_пт_сб'.split('_'), + weekdaysMin: 'нд_пн_ат_ср_чц_пт_сб'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D MMMM YYYY г.', + LLL: 'D MMMM YYYY г., HH:mm', + LLLL: 'dddd, D MMMM YYYY г., HH:mm', + }, + calendar: { + sameDay: '[Сёння ў] LT', + nextDay: '[Заўтра ў] LT', + lastDay: '[Учора ў] LT', + nextWeek: function () { + return '[У] dddd [ў] LT'; + }, + lastWeek: function () { + switch (this.day()) { + case 0: + case 3: + case 5: + case 6: + return '[У мінулую] dddd [ў] LT'; + case 1: + case 2: + case 4: + return '[У мінулы] dddd [ў] LT'; + } + }, + sameElse: 'L', + }, + relativeTime: { + future: 'праз %s', + past: '%s таму', + s: 'некалькі секунд', + m: relativeTimeWithPlural, + mm: relativeTimeWithPlural, + h: relativeTimeWithPlural, + hh: relativeTimeWithPlural, + d: 'дзень', + dd: relativeTimeWithPlural, + M: 'месяц', + MM: relativeTimeWithPlural, + y: 'год', + yy: relativeTimeWithPlural, + }, + meridiemParse: /ночы|раніцы|дня|вечара/, + isPM: function (input) { + return /^(дня|вечара)$/.test(input); + }, + meridiem: function (hour, minute, isLower) { + if (hour < 4) { + return 'ночы'; + } else if (hour < 12) { + return 'раніцы'; + } else if (hour < 17) { + return 'дня'; + } else { + return 'вечара'; + } + }, + dayOfMonthOrdinalParse: /\d{1,2}-(і|ы|га)/, + ordinal: function (number, period) { + switch (period) { + case 'M': + case 'd': + case 'DDD': + case 'w': + case 'W': + return (number % 10 === 2 || number % 10 === 3) && + number % 100 !== 12 && + number % 100 !== 13 + ? number + '-і' + : number + '-ы'; + case 'D': + return number + '-га'; + default: + return number; + } + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('bg', { + months: 'януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември'.split( + '_' + ), + monthsShort: 'яну_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек'.split('_'), + weekdays: 'неделя_понеделник_вторник_сряда_четвъртък_петък_събота'.split( + '_' + ), + weekdaysShort: 'нед_пон_вто_сря_чет_пет_съб'.split('_'), + weekdaysMin: 'нд_пн_вт_ср_чт_пт_сб'.split('_'), + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'D.MM.YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY H:mm', + LLLL: 'dddd, D MMMM YYYY H:mm', + }, + calendar: { + sameDay: '[Днес в] LT', + nextDay: '[Утре в] LT', + nextWeek: 'dddd [в] LT', + lastDay: '[Вчера в] LT', + lastWeek: function () { + switch (this.day()) { + case 0: + case 3: + case 6: + return '[Миналата] dddd [в] LT'; + case 1: + case 2: + case 4: + case 5: + return '[Миналия] dddd [в] LT'; + } + }, + sameElse: 'L', + }, + relativeTime: { + future: 'след %s', + past: 'преди %s', + s: 'няколко секунди', + ss: '%d секунди', + m: 'минута', + mm: '%d минути', + h: 'час', + hh: '%d часа', + d: 'ден', + dd: '%d дена', + M: 'месец', + MM: '%d месеца', + y: 'година', + yy: '%d години', + }, + dayOfMonthOrdinalParse: /\d{1,2}-(ев|ен|ти|ви|ри|ми)/, + ordinal: function (number) { + var lastDigit = number % 10, + last2Digits = number % 100; + if (number === 0) { + return number + '-ев'; + } else if (last2Digits === 0) { + return number + '-ен'; + } else if (last2Digits > 10 && last2Digits < 20) { + return number + '-ти'; + } else if (lastDigit === 1) { + return number + '-ви'; + } else if (lastDigit === 2) { + return number + '-ри'; + } else if (lastDigit === 7 || lastDigit === 8) { + return number + '-ми'; + } else { + return number + '-ти'; + } + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('bm', { + months: 'Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_Mɛkalo_Zuwɛnkalo_Zuluyekalo_Utikalo_Sɛtanburukalo_ɔkutɔburukalo_Nowanburukalo_Desanburukalo'.split( + '_' + ), + monthsShort: 'Zan_Few_Mar_Awi_Mɛ_Zuw_Zul_Uti_Sɛt_ɔku_Now_Des'.split('_'), + weekdays: 'Kari_Ntɛnɛn_Tarata_Araba_Alamisa_Juma_Sibiri'.split('_'), + weekdaysShort: 'Kar_Ntɛ_Tar_Ara_Ala_Jum_Sib'.split('_'), + weekdaysMin: 'Ka_Nt_Ta_Ar_Al_Ju_Si'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'MMMM [tile] D [san] YYYY', + LLL: 'MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm', + LLLL: 'dddd MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm', + }, + calendar: { + sameDay: '[Bi lɛrɛ] LT', + nextDay: '[Sini lɛrɛ] LT', + nextWeek: 'dddd [don lɛrɛ] LT', + lastDay: '[Kunu lɛrɛ] LT', + lastWeek: 'dddd [tɛmɛnen lɛrɛ] LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s kɔnɔ', + past: 'a bɛ %s bɔ', + s: 'sanga dama dama', + ss: 'sekondi %d', + m: 'miniti kelen', + mm: 'miniti %d', + h: 'lɛrɛ kelen', + hh: 'lɛrɛ %d', + d: 'tile kelen', + dd: 'tile %d', + M: 'kalo kelen', + MM: 'kalo %d', + y: 'san kelen', + yy: 'san %d', + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var symbolMap$3 = { + '1': '১', + '2': '২', + '3': '৩', + '4': '৪', + '5': '৫', + '6': '৬', + '7': '৭', + '8': '৮', + '9': '৯', + '0': '০', + }, + numberMap$2 = { + '১': '1', + '২': '2', + '৩': '3', + '৪': '4', + '৫': '5', + '৬': '6', + '৭': '7', + '৮': '8', + '৯': '9', + '০': '0', + }; + + hooks.defineLocale('bn', { + months: 'জানুয়ারি_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split( + '_' + ), + monthsShort: 'জানু_ফেব্রু_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্ট_অক্টো_নভে_ডিসে'.split( + '_' + ), + weekdays: 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split( + '_' + ), + weekdaysShort: 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি'.split('_'), + weekdaysMin: 'রবি_সোম_মঙ্গল_বুধ_বৃহ_শুক্র_শনি'.split('_'), + longDateFormat: { + LT: 'A h:mm সময়', + LTS: 'A h:mm:ss সময়', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY, A h:mm সময়', + LLLL: 'dddd, D MMMM YYYY, A h:mm সময়', + }, + calendar: { + sameDay: '[আজ] LT', + nextDay: '[আগামীকাল] LT', + nextWeek: 'dddd, LT', + lastDay: '[গতকাল] LT', + lastWeek: '[গত] dddd, LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s পরে', + past: '%s আগে', + s: 'কয়েক সেকেন্ড', + ss: '%d সেকেন্ড', + m: 'এক মিনিট', + mm: '%d মিনিট', + h: 'এক ঘন্টা', + hh: '%d ঘন্টা', + d: 'এক দিন', + dd: '%d দিন', + M: 'এক মাস', + MM: '%d মাস', + y: 'এক বছর', + yy: '%d বছর', + }, + preparse: function (string) { + return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) { + return numberMap$2[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$3[match]; + }); + }, + meridiemParse: /রাত|সকাল|দুপুর|বিকাল|রাত/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if ( + (meridiem === 'রাত' && hour >= 4) || + (meridiem === 'দুপুর' && hour < 5) || + meridiem === 'বিকাল' + ) { + return hour + 12; + } else { + return hour; + } + }, + meridiem: function (hour, minute, isLower) { + if (hour < 4) { + return 'রাত'; + } else if (hour < 10) { + return 'সকাল'; + } else if (hour < 17) { + return 'দুপুর'; + } else if (hour < 20) { + return 'বিকাল'; + } else { + return 'রাত'; + } + }, + week: { + dow: 0, // Sunday is the first day of the week. + doy: 6, // The week that contains Jan 6th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var symbolMap$4 = { + '1': '༡', + '2': '༢', + '3': '༣', + '4': '༤', + '5': '༥', + '6': '༦', + '7': '༧', + '8': '༨', + '9': '༩', + '0': '༠', + }, + numberMap$3 = { + '༡': '1', + '༢': '2', + '༣': '3', + '༤': '4', + '༥': '5', + '༦': '6', + '༧': '7', + '༨': '8', + '༩': '9', + '༠': '0', + }; + + hooks.defineLocale('bo', { + months: 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split( + '_' + ), + monthsShort: 'ཟླ་1_ཟླ་2_ཟླ་3_ཟླ་4_ཟླ་5_ཟླ་6_ཟླ་7_ཟླ་8_ཟླ་9_ཟླ་10_ཟླ་11_ཟླ་12'.split( + '_' + ), + monthsShortRegex: /^(ཟླ་\d{1,2})/, + monthsParseExact: true, + weekdays: 'གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་'.split( + '_' + ), + weekdaysShort: 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split( + '_' + ), + weekdaysMin: 'ཉི_ཟླ_མིག_ལྷག_ཕུར_སངས_སྤེན'.split('_'), + longDateFormat: { + LT: 'A h:mm', + LTS: 'A h:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY, A h:mm', + LLLL: 'dddd, D MMMM YYYY, A h:mm', + }, + calendar: { + sameDay: '[དི་རིང] LT', + nextDay: '[སང་ཉིན] LT', + nextWeek: '[བདུན་ཕྲག་རྗེས་མ], LT', + lastDay: '[ཁ་སང] LT', + lastWeek: '[བདུན་ཕྲག་མཐའ་མ] dddd, LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s ལ་', + past: '%s སྔན་ལ', + s: 'ལམ་སང', + ss: '%d སྐར་ཆ།', + m: 'སྐར་མ་གཅིག', + mm: '%d སྐར་མ', + h: 'ཆུ་ཚོད་གཅིག', + hh: '%d ཆུ་ཚོད', + d: 'ཉིན་གཅིག', + dd: '%d ཉིན་', + M: 'ཟླ་བ་གཅིག', + MM: '%d ཟླ་བ', + y: 'ལོ་གཅིག', + yy: '%d ལོ', + }, + preparse: function (string) { + return string.replace(/[༡༢༣༤༥༦༧༨༩༠]/g, function (match) { + return numberMap$3[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$4[match]; + }); + }, + meridiemParse: /མཚན་མོ|ཞོགས་ཀས|ཉིན་གུང|དགོང་དག|མཚན་མོ/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if ( + (meridiem === 'མཚན་མོ' && hour >= 4) || + (meridiem === 'ཉིན་གུང' && hour < 5) || + meridiem === 'དགོང་དག' + ) { + return hour + 12; + } else { + return hour; + } + }, + meridiem: function (hour, minute, isLower) { + if (hour < 4) { + return 'མཚན་མོ'; + } else if (hour < 10) { + return 'ཞོགས་ཀས'; + } else if (hour < 17) { + return 'ཉིན་གུང'; + } else if (hour < 20) { + return 'དགོང་དག'; + } else { + return 'མཚན་མོ'; + } + }, + week: { + dow: 0, // Sunday is the first day of the week. + doy: 6, // The week that contains Jan 6th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + function relativeTimeWithMutation(number, withoutSuffix, key) { + var format = { + mm: 'munutenn', + MM: 'miz', + dd: 'devezh', + }; + return number + ' ' + mutation(format[key], number); + } + function specialMutationForYears(number) { + switch (lastNumber(number)) { + case 1: + case 3: + case 4: + case 5: + case 9: + return number + ' bloaz'; + default: + return number + ' vloaz'; + } + } + function lastNumber(number) { + if (number > 9) { + return lastNumber(number % 10); + } + return number; + } + function mutation(text, number) { + if (number === 2) { + return softMutation(text); + } + return text; + } + function softMutation(text) { + var mutationTable = { + m: 'v', + b: 'v', + d: 'z', + }; + if (mutationTable[text.charAt(0)] === undefined) { + return text; + } + return mutationTable[text.charAt(0)] + text.substring(1); + } + + var monthsParse = [ + /^gen/i, + /^c[ʼ\']hwe/i, + /^meu/i, + /^ebr/i, + /^mae/i, + /^(mez|eve)/i, + /^gou/i, + /^eos/i, + /^gwe/i, + /^her/i, + /^du/i, + /^ker/i, + ], + monthsRegex$1 = /^(genver|c[ʼ\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu|gen|c[ʼ\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i, + monthsStrictRegex = /^(genver|c[ʼ\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu)/i, + monthsShortStrictRegex = /^(gen|c[ʼ\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i, + fullWeekdaysParse = [ + /^sul/i, + /^lun/i, + /^meurzh/i, + /^merc[ʼ\']her/i, + /^yaou/i, + /^gwener/i, + /^sadorn/i, + ], + shortWeekdaysParse = [ + /^Sul/i, + /^Lun/i, + /^Meu/i, + /^Mer/i, + /^Yao/i, + /^Gwe/i, + /^Sad/i, + ], + minWeekdaysParse = [ + /^Su/i, + /^Lu/i, + /^Me([^r]|$)/i, + /^Mer/i, + /^Ya/i, + /^Gw/i, + /^Sa/i, + ]; + + hooks.defineLocale('br', { + months: 'Genver_Cʼhwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu'.split( + '_' + ), + monthsShort: 'Gen_Cʼhwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker'.split('_'), + weekdays: 'Sul_Lun_Meurzh_Mercʼher_Yaou_Gwener_Sadorn'.split('_'), + weekdaysShort: 'Sul_Lun_Meu_Mer_Yao_Gwe_Sad'.split('_'), + weekdaysMin: 'Su_Lu_Me_Mer_Ya_Gw_Sa'.split('_'), + weekdaysParse: minWeekdaysParse, + fullWeekdaysParse: fullWeekdaysParse, + shortWeekdaysParse: shortWeekdaysParse, + minWeekdaysParse: minWeekdaysParse, + + monthsRegex: monthsRegex$1, + monthsShortRegex: monthsRegex$1, + monthsStrictRegex: monthsStrictRegex, + monthsShortStrictRegex: monthsShortStrictRegex, + monthsParse: monthsParse, + longMonthsParse: monthsParse, + shortMonthsParse: monthsParse, + + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D [a viz] MMMM YYYY', + LLL: 'D [a viz] MMMM YYYY HH:mm', + LLLL: 'dddd, D [a viz] MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Hiziv da] LT', + nextDay: '[Warcʼhoazh da] LT', + nextWeek: 'dddd [da] LT', + lastDay: '[Decʼh da] LT', + lastWeek: 'dddd [paset da] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'a-benn %s', + past: '%s ʼzo', + s: 'un nebeud segondennoù', + ss: '%d eilenn', + m: 'ur vunutenn', + mm: relativeTimeWithMutation, + h: 'un eur', + hh: '%d eur', + d: 'un devezh', + dd: relativeTimeWithMutation, + M: 'ur miz', + MM: relativeTimeWithMutation, + y: 'ur bloaz', + yy: specialMutationForYears, + }, + dayOfMonthOrdinalParse: /\d{1,2}(añ|vet)/, + ordinal: function (number) { + var output = number === 1 ? 'añ' : 'vet'; + return number + output; + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + meridiemParse: /a.m.|g.m./, // goude merenn | a-raok merenn + isPM: function (token) { + return token === 'g.m.'; + }, + meridiem: function (hour, minute, isLower) { + return hour < 12 ? 'a.m.' : 'g.m.'; + }, + }); + + //! moment.js locale configuration + + function translate(number, withoutSuffix, key) { + var result = number + ' '; + switch (key) { + case 'ss': + if (number === 1) { + result += 'sekunda'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'sekunde'; + } else { + result += 'sekundi'; + } + return result; + case 'm': + return withoutSuffix ? 'jedna minuta' : 'jedne minute'; + case 'mm': + if (number === 1) { + result += 'minuta'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'minute'; + } else { + result += 'minuta'; + } + return result; + case 'h': + return withoutSuffix ? 'jedan sat' : 'jednog sata'; + case 'hh': + if (number === 1) { + result += 'sat'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'sata'; + } else { + result += 'sati'; + } + return result; + case 'dd': + if (number === 1) { + result += 'dan'; + } else { + result += 'dana'; + } + return result; + case 'MM': + if (number === 1) { + result += 'mjesec'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'mjeseca'; + } else { + result += 'mjeseci'; + } + return result; + case 'yy': + if (number === 1) { + result += 'godina'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'godine'; + } else { + result += 'godina'; + } + return result; + } + } + + hooks.defineLocale('bs', { + months: 'januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar'.split( + '_' + ), + monthsShort: 'jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split( + '_' + ), + weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'), + weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY H:mm', + LLLL: 'dddd, D. MMMM YYYY H:mm', + }, + calendar: { + sameDay: '[danas u] LT', + nextDay: '[sutra u] LT', + nextWeek: function () { + switch (this.day()) { + case 0: + return '[u] [nedjelju] [u] LT'; + case 3: + return '[u] [srijedu] [u] LT'; + case 6: + return '[u] [subotu] [u] LT'; + case 1: + case 2: + case 4: + case 5: + return '[u] dddd [u] LT'; + } + }, + lastDay: '[jučer u] LT', + lastWeek: function () { + switch (this.day()) { + case 0: + case 3: + return '[prošlu] dddd [u] LT'; + case 6: + return '[prošle] [subote] [u] LT'; + case 1: + case 2: + case 4: + case 5: + return '[prošli] dddd [u] LT'; + } + }, + sameElse: 'L', + }, + relativeTime: { + future: 'za %s', + past: 'prije %s', + s: 'par sekundi', + ss: translate, + m: translate, + mm: translate, + h: translate, + hh: translate, + d: 'dan', + dd: translate, + M: 'mjesec', + MM: translate, + y: 'godinu', + yy: translate, + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('ca', { + months: { + standalone: 'gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre'.split( + '_' + ), + format: "de gener_de febrer_de març_d'abril_de maig_de juny_de juliol_d'agost_de setembre_d'octubre_de novembre_de desembre".split( + '_' + ), + isFormat: /D[oD]?(\s)+MMMM/, + }, + monthsShort: 'gen._febr._març_abr._maig_juny_jul._ag._set._oct._nov._des.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte'.split( + '_' + ), + weekdaysShort: 'dg._dl._dt._dc._dj._dv._ds.'.split('_'), + weekdaysMin: 'dg_dl_dt_dc_dj_dv_ds'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM [de] YYYY', + ll: 'D MMM YYYY', + LLL: 'D MMMM [de] YYYY [a les] H:mm', + lll: 'D MMM YYYY, H:mm', + LLLL: 'dddd D MMMM [de] YYYY [a les] H:mm', + llll: 'ddd D MMM YYYY, H:mm', + }, + calendar: { + sameDay: function () { + return '[avui a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT'; + }, + nextDay: function () { + return '[demà a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT'; + }, + nextWeek: function () { + return 'dddd [a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT'; + }, + lastDay: function () { + return '[ahir a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT'; + }, + lastWeek: function () { + return ( + '[el] dddd [passat a ' + + (this.hours() !== 1 ? 'les' : 'la') + + '] LT' + ); + }, + sameElse: 'L', + }, + relativeTime: { + future: "d'aquí %s", + past: 'fa %s', + s: 'uns segons', + ss: '%d segons', + m: 'un minut', + mm: '%d minuts', + h: 'una hora', + hh: '%d hores', + d: 'un dia', + dd: '%d dies', + M: 'un mes', + MM: '%d mesos', + y: 'un any', + yy: '%d anys', + }, + dayOfMonthOrdinalParse: /\d{1,2}(r|n|t|è|a)/, + ordinal: function (number, period) { + var output = + number === 1 + ? 'r' + : number === 2 + ? 'n' + : number === 3 + ? 'r' + : number === 4 + ? 't' + : 'è'; + if (period === 'w' || period === 'W') { + output = 'a'; + } + return number + output; + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var months$4 = 'leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec'.split( + '_' + ), + monthsShort = 'led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro'.split('_'), + monthsParse$1 = [ + /^led/i, + /^úno/i, + /^bře/i, + /^dub/i, + /^kvě/i, + /^(čvn|červen$|června)/i, + /^(čvc|červenec|července)/i, + /^srp/i, + /^zář/i, + /^říj/i, + /^lis/i, + /^pro/i, + ], + // NOTE: 'červen' is substring of 'červenec'; therefore 'červenec' must precede 'červen' in the regex to be fully matched. + // Otherwise parser matches '1. červenec' as '1. červen' + 'ec'. + monthsRegex$2 = /^(leden|únor|březen|duben|květen|červenec|července|červen|června|srpen|září|říjen|listopad|prosinec|led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i; + + function plural$1(n) { + return n > 1 && n < 5 && ~~(n / 10) !== 1; + } + function translate$1(number, withoutSuffix, key, isFuture) { + var result = number + ' '; + switch (key) { + case 's': // a few seconds / in a few seconds / a few seconds ago + return withoutSuffix || isFuture ? 'pár sekund' : 'pár sekundami'; + case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago + if (withoutSuffix || isFuture) { + return result + (plural$1(number) ? 'sekundy' : 'sekund'); + } else { + return result + 'sekundami'; + } + case 'm': // a minute / in a minute / a minute ago + return withoutSuffix ? 'minuta' : isFuture ? 'minutu' : 'minutou'; + case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago + if (withoutSuffix || isFuture) { + return result + (plural$1(number) ? 'minuty' : 'minut'); + } else { + return result + 'minutami'; + } + case 'h': // an hour / in an hour / an hour ago + return withoutSuffix ? 'hodina' : isFuture ? 'hodinu' : 'hodinou'; + case 'hh': // 9 hours / in 9 hours / 9 hours ago + if (withoutSuffix || isFuture) { + return result + (plural$1(number) ? 'hodiny' : 'hodin'); + } else { + return result + 'hodinami'; + } + case 'd': // a day / in a day / a day ago + return withoutSuffix || isFuture ? 'den' : 'dnem'; + case 'dd': // 9 days / in 9 days / 9 days ago + if (withoutSuffix || isFuture) { + return result + (plural$1(number) ? 'dny' : 'dní'); + } else { + return result + 'dny'; + } + case 'M': // a month / in a month / a month ago + return withoutSuffix || isFuture ? 'měsíc' : 'měsícem'; + case 'MM': // 9 months / in 9 months / 9 months ago + if (withoutSuffix || isFuture) { + return result + (plural$1(number) ? 'měsíce' : 'měsíců'); + } else { + return result + 'měsíci'; + } + case 'y': // a year / in a year / a year ago + return withoutSuffix || isFuture ? 'rok' : 'rokem'; + case 'yy': // 9 years / in 9 years / 9 years ago + if (withoutSuffix || isFuture) { + return result + (plural$1(number) ? 'roky' : 'let'); + } else { + return result + 'lety'; + } + } + } + + hooks.defineLocale('cs', { + months: months$4, + monthsShort: monthsShort, + monthsRegex: monthsRegex$2, + monthsShortRegex: monthsRegex$2, + // NOTE: 'červen' is substring of 'červenec'; therefore 'červenec' must precede 'červen' in the regex to be fully matched. + // Otherwise parser matches '1. červenec' as '1. červen' + 'ec'. + monthsStrictRegex: /^(leden|ledna|února|únor|březen|března|duben|dubna|květen|května|červenec|července|červen|června|srpen|srpna|září|říjen|října|listopadu|listopad|prosinec|prosince)/i, + monthsShortStrictRegex: /^(led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i, + monthsParse: monthsParse$1, + longMonthsParse: monthsParse$1, + shortMonthsParse: monthsParse$1, + weekdays: 'neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota'.split('_'), + weekdaysShort: 'ne_po_út_st_čt_pá_so'.split('_'), + weekdaysMin: 'ne_po_út_st_čt_pá_so'.split('_'), + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY H:mm', + LLLL: 'dddd D. MMMM YYYY H:mm', + l: 'D. M. YYYY', + }, + calendar: { + sameDay: '[dnes v] LT', + nextDay: '[zítra v] LT', + nextWeek: function () { + switch (this.day()) { + case 0: + return '[v neděli v] LT'; + case 1: + case 2: + return '[v] dddd [v] LT'; + case 3: + return '[ve středu v] LT'; + case 4: + return '[ve čtvrtek v] LT'; + case 5: + return '[v pátek v] LT'; + case 6: + return '[v sobotu v] LT'; + } + }, + lastDay: '[včera v] LT', + lastWeek: function () { + switch (this.day()) { + case 0: + return '[minulou neděli v] LT'; + case 1: + case 2: + return '[minulé] dddd [v] LT'; + case 3: + return '[minulou středu v] LT'; + case 4: + case 5: + return '[minulý] dddd [v] LT'; + case 6: + return '[minulou sobotu v] LT'; + } + }, + sameElse: 'L', + }, + relativeTime: { + future: 'za %s', + past: 'před %s', + s: translate$1, + ss: translate$1, + m: translate$1, + mm: translate$1, + h: translate$1, + hh: translate$1, + d: translate$1, + dd: translate$1, + M: translate$1, + MM: translate$1, + y: translate$1, + yy: translate$1, + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('cv', { + months: 'кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав'.split( + '_' + ), + monthsShort: 'кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш'.split('_'), + weekdays: 'вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун'.split( + '_' + ), + weekdaysShort: 'выр_тун_ытл_юн_кӗҫ_эрн_шӑм'.split('_'), + weekdaysMin: 'вр_тн_ыт_юн_кҫ_эр_шм'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD-MM-YYYY', + LL: 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]', + LLL: 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm', + LLLL: 'dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm', + }, + calendar: { + sameDay: '[Паян] LT [сехетре]', + nextDay: '[Ыран] LT [сехетре]', + lastDay: '[Ӗнер] LT [сехетре]', + nextWeek: '[Ҫитес] dddd LT [сехетре]', + lastWeek: '[Иртнӗ] dddd LT [сехетре]', + sameElse: 'L', + }, + relativeTime: { + future: function (output) { + var affix = /сехет$/i.exec(output) + ? 'рен' + : /ҫул$/i.exec(output) + ? 'тан' + : 'ран'; + return output + affix; + }, + past: '%s каялла', + s: 'пӗр-ик ҫеккунт', + ss: '%d ҫеккунт', + m: 'пӗр минут', + mm: '%d минут', + h: 'пӗр сехет', + hh: '%d сехет', + d: 'пӗр кун', + dd: '%d кун', + M: 'пӗр уйӑх', + MM: '%d уйӑх', + y: 'пӗр ҫул', + yy: '%d ҫул', + }, + dayOfMonthOrdinalParse: /\d{1,2}-мӗш/, + ordinal: '%d-мӗш', + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('cy', { + months: 'Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr'.split( + '_' + ), + monthsShort: 'Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag'.split( + '_' + ), + weekdays: 'Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn'.split( + '_' + ), + weekdaysShort: 'Sul_Llun_Maw_Mer_Iau_Gwe_Sad'.split('_'), + weekdaysMin: 'Su_Ll_Ma_Me_Ia_Gw_Sa'.split('_'), + weekdaysParseExact: true, + // time formats are the same as en-gb + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Heddiw am] LT', + nextDay: '[Yfory am] LT', + nextWeek: 'dddd [am] LT', + lastDay: '[Ddoe am] LT', + lastWeek: 'dddd [diwethaf am] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'mewn %s', + past: '%s yn ôl', + s: 'ychydig eiliadau', + ss: '%d eiliad', + m: 'munud', + mm: '%d munud', + h: 'awr', + hh: '%d awr', + d: 'diwrnod', + dd: '%d diwrnod', + M: 'mis', + MM: '%d mis', + y: 'blwyddyn', + yy: '%d flynedd', + }, + dayOfMonthOrdinalParse: /\d{1,2}(fed|ain|af|il|ydd|ed|eg)/, + // traditional ordinal numbers above 31 are not commonly used in colloquial Welsh + ordinal: function (number) { + var b = number, + output = '', + lookup = [ + '', + 'af', + 'il', + 'ydd', + 'ydd', + 'ed', + 'ed', + 'ed', + 'fed', + 'fed', + 'fed', // 1af to 10fed + 'eg', + 'fed', + 'eg', + 'eg', + 'fed', + 'eg', + 'eg', + 'fed', + 'eg', + 'fed', // 11eg to 20fed + ]; + if (b > 20) { + if (b === 40 || b === 50 || b === 60 || b === 80 || b === 100) { + output = 'fed'; // not 30ain, 70ain or 90ain + } else { + output = 'ain'; + } + } else if (b > 0) { + output = lookup[b]; + } + return number + output; + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('da', { + months: 'januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december'.split( + '_' + ), + monthsShort: 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'), + weekdays: 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'), + weekdaysShort: 'søn_man_tir_ons_tor_fre_lør'.split('_'), + weekdaysMin: 'sø_ma_ti_on_to_fr_lø'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY HH:mm', + LLLL: 'dddd [d.] D. MMMM YYYY [kl.] HH:mm', + }, + calendar: { + sameDay: '[i dag kl.] LT', + nextDay: '[i morgen kl.] LT', + nextWeek: 'på dddd [kl.] LT', + lastDay: '[i går kl.] LT', + lastWeek: '[i] dddd[s kl.] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'om %s', + past: '%s siden', + s: 'få sekunder', + ss: '%d sekunder', + m: 'et minut', + mm: '%d minutter', + h: 'en time', + hh: '%d timer', + d: 'en dag', + dd: '%d dage', + M: 'en måned', + MM: '%d måneder', + y: 'et år', + yy: '%d år', + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + function processRelativeTime(number, withoutSuffix, key, isFuture) { + var format = { + m: ['eine Minute', 'einer Minute'], + h: ['eine Stunde', 'einer Stunde'], + d: ['ein Tag', 'einem Tag'], + dd: [number + ' Tage', number + ' Tagen'], + w: ['eine Woche', 'einer Woche'], + M: ['ein Monat', 'einem Monat'], + MM: [number + ' Monate', number + ' Monaten'], + y: ['ein Jahr', 'einem Jahr'], + yy: [number + ' Jahre', number + ' Jahren'], + }; + return withoutSuffix ? format[key][0] : format[key][1]; + } + + hooks.defineLocale('de-at', { + months: 'Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split( + '_' + ), + monthsShort: 'Jän._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split( + '_' + ), + weekdaysShort: 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'), + weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY HH:mm', + LLLL: 'dddd, D. MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[heute um] LT [Uhr]', + sameElse: 'L', + nextDay: '[morgen um] LT [Uhr]', + nextWeek: 'dddd [um] LT [Uhr]', + lastDay: '[gestern um] LT [Uhr]', + lastWeek: '[letzten] dddd [um] LT [Uhr]', + }, + relativeTime: { + future: 'in %s', + past: 'vor %s', + s: 'ein paar Sekunden', + ss: '%d Sekunden', + m: processRelativeTime, + mm: '%d Minuten', + h: processRelativeTime, + hh: '%d Stunden', + d: processRelativeTime, + dd: processRelativeTime, + w: processRelativeTime, + ww: '%d Wochen', + M: processRelativeTime, + MM: processRelativeTime, + y: processRelativeTime, + yy: processRelativeTime, + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + function processRelativeTime$1(number, withoutSuffix, key, isFuture) { + var format = { + m: ['eine Minute', 'einer Minute'], + h: ['eine Stunde', 'einer Stunde'], + d: ['ein Tag', 'einem Tag'], + dd: [number + ' Tage', number + ' Tagen'], + w: ['eine Woche', 'einer Woche'], + M: ['ein Monat', 'einem Monat'], + MM: [number + ' Monate', number + ' Monaten'], + y: ['ein Jahr', 'einem Jahr'], + yy: [number + ' Jahre', number + ' Jahren'], + }; + return withoutSuffix ? format[key][0] : format[key][1]; + } + + hooks.defineLocale('de-ch', { + months: 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split( + '_' + ), + monthsShort: 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split( + '_' + ), + weekdaysShort: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'), + weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY HH:mm', + LLLL: 'dddd, D. MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[heute um] LT [Uhr]', + sameElse: 'L', + nextDay: '[morgen um] LT [Uhr]', + nextWeek: 'dddd [um] LT [Uhr]', + lastDay: '[gestern um] LT [Uhr]', + lastWeek: '[letzten] dddd [um] LT [Uhr]', + }, + relativeTime: { + future: 'in %s', + past: 'vor %s', + s: 'ein paar Sekunden', + ss: '%d Sekunden', + m: processRelativeTime$1, + mm: '%d Minuten', + h: processRelativeTime$1, + hh: '%d Stunden', + d: processRelativeTime$1, + dd: processRelativeTime$1, + w: processRelativeTime$1, + ww: '%d Wochen', + M: processRelativeTime$1, + MM: processRelativeTime$1, + y: processRelativeTime$1, + yy: processRelativeTime$1, + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + function processRelativeTime$2(number, withoutSuffix, key, isFuture) { + var format = { + m: ['eine Minute', 'einer Minute'], + h: ['eine Stunde', 'einer Stunde'], + d: ['ein Tag', 'einem Tag'], + dd: [number + ' Tage', number + ' Tagen'], + w: ['eine Woche', 'einer Woche'], + M: ['ein Monat', 'einem Monat'], + MM: [number + ' Monate', number + ' Monaten'], + y: ['ein Jahr', 'einem Jahr'], + yy: [number + ' Jahre', number + ' Jahren'], + }; + return withoutSuffix ? format[key][0] : format[key][1]; + } + + hooks.defineLocale('de', { + months: 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split( + '_' + ), + monthsShort: 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split( + '_' + ), + weekdaysShort: 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'), + weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY HH:mm', + LLLL: 'dddd, D. MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[heute um] LT [Uhr]', + sameElse: 'L', + nextDay: '[morgen um] LT [Uhr]', + nextWeek: 'dddd [um] LT [Uhr]', + lastDay: '[gestern um] LT [Uhr]', + lastWeek: '[letzten] dddd [um] LT [Uhr]', + }, + relativeTime: { + future: 'in %s', + past: 'vor %s', + s: 'ein paar Sekunden', + ss: '%d Sekunden', + m: processRelativeTime$2, + mm: '%d Minuten', + h: processRelativeTime$2, + hh: '%d Stunden', + d: processRelativeTime$2, + dd: processRelativeTime$2, + w: processRelativeTime$2, + ww: '%d Wochen', + M: processRelativeTime$2, + MM: processRelativeTime$2, + y: processRelativeTime$2, + yy: processRelativeTime$2, + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var months$5 = [ + 'ޖެނުއަރީ', + 'ފެބްރުއަރީ', + 'މާރިޗު', + 'އޭޕްރީލު', + 'މޭ', + 'ޖޫން', + 'ޖުލައި', + 'އޯގަސްޓު', + 'ސެޕްޓެމްބަރު', + 'އޮކްޓޯބަރު', + 'ނޮވެމްބަރު', + 'ޑިސެމްބަރު', + ], + weekdays = [ + 'އާދިއްތަ', + 'ހޯމަ', + 'އަންގާރަ', + 'ބުދަ', + 'ބުރާސްފަތި', + 'ހުކުރު', + 'ހޮނިހިރު', + ]; + + hooks.defineLocale('dv', { + months: months$5, + monthsShort: months$5, + weekdays: weekdays, + weekdaysShort: weekdays, + weekdaysMin: 'އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'D/M/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + meridiemParse: /މކ|މފ/, + isPM: function (input) { + return 'މފ' === input; + }, + meridiem: function (hour, minute, isLower) { + if (hour < 12) { + return 'މކ'; + } else { + return 'މފ'; + } + }, + calendar: { + sameDay: '[މިއަދު] LT', + nextDay: '[މާދަމާ] LT', + nextWeek: 'dddd LT', + lastDay: '[އިއްޔެ] LT', + lastWeek: '[ފާއިތުވި] dddd LT', + sameElse: 'L', + }, + relativeTime: { + future: 'ތެރޭގައި %s', + past: 'ކުރިން %s', + s: 'ސިކުންތުކޮޅެއް', + ss: 'd% ސިކުންތު', + m: 'މިނިޓެއް', + mm: 'މިނިޓު %d', + h: 'ގަޑިއިރެއް', + hh: 'ގަޑިއިރު %d', + d: 'ދުވަހެއް', + dd: 'ދުވަސް %d', + M: 'މަހެއް', + MM: 'މަސް %d', + y: 'އަހަރެއް', + yy: 'އަހަރު %d', + }, + preparse: function (string) { + return string.replace(/،/g, ','); + }, + postformat: function (string) { + return string.replace(/,/g, '،'); + }, + week: { + dow: 7, // Sunday is the first day of the week. + doy: 12, // The week that contains Jan 12th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + function isFunction$1(input) { + return ( + (typeof Function !== 'undefined' && input instanceof Function) || + Object.prototype.toString.call(input) === '[object Function]' + ); + } + + hooks.defineLocale('el', { + monthsNominativeEl: 'Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος'.split( + '_' + ), + monthsGenitiveEl: 'Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου'.split( + '_' + ), + months: function (momentToFormat, format) { + if (!momentToFormat) { + return this._monthsNominativeEl; + } else if ( + typeof format === 'string' && + /D/.test(format.substring(0, format.indexOf('MMMM'))) + ) { + // if there is a day number before 'MMMM' + return this._monthsGenitiveEl[momentToFormat.month()]; + } else { + return this._monthsNominativeEl[momentToFormat.month()]; + } + }, + monthsShort: 'Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ'.split('_'), + weekdays: 'Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο'.split( + '_' + ), + weekdaysShort: 'Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ'.split('_'), + weekdaysMin: 'Κυ_Δε_Τρ_Τε_Πε_Πα_Σα'.split('_'), + meridiem: function (hours, minutes, isLower) { + if (hours > 11) { + return isLower ? 'μμ' : 'ΜΜ'; + } else { + return isLower ? 'πμ' : 'ΠΜ'; + } + }, + isPM: function (input) { + return (input + '').toLowerCase()[0] === 'μ'; + }, + meridiemParse: /[ΠΜ]\.?Μ?\.?/i, + longDateFormat: { + LT: 'h:mm A', + LTS: 'h:mm:ss A', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY h:mm A', + LLLL: 'dddd, D MMMM YYYY h:mm A', + }, + calendarEl: { + sameDay: '[Σήμερα {}] LT', + nextDay: '[Αύριο {}] LT', + nextWeek: 'dddd [{}] LT', + lastDay: '[Χθες {}] LT', + lastWeek: function () { + switch (this.day()) { + case 6: + return '[το προηγούμενο] dddd [{}] LT'; + default: + return '[την προηγούμενη] dddd [{}] LT'; + } + }, + sameElse: 'L', + }, + calendar: function (key, mom) { + var output = this._calendarEl[key], + hours = mom && mom.hours(); + if (isFunction$1(output)) { + output = output.apply(mom); + } + return output.replace('{}', hours % 12 === 1 ? 'στη' : 'στις'); + }, + relativeTime: { + future: 'σε %s', + past: '%s πριν', + s: 'λίγα δευτερόλεπτα', + ss: '%d δευτερόλεπτα', + m: 'ένα λεπτό', + mm: '%d λεπτά', + h: 'μία ώρα', + hh: '%d ώρες', + d: 'μία μέρα', + dd: '%d μέρες', + M: 'ένας μήνας', + MM: '%d μήνες', + y: 'ένας χρόνος', + yy: '%d χρόνια', + }, + dayOfMonthOrdinalParse: /\d{1,2}η/, + ordinal: '%dη', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4st is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('en-au', { + months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split( + '_' + ), + monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split( + '_' + ), + weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + longDateFormat: { + LT: 'h:mm A', + LTS: 'h:mm:ss A', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY h:mm A', + LLLL: 'dddd, D MMMM YYYY h:mm A', + }, + calendar: { + sameDay: '[Today at] LT', + nextDay: '[Tomorrow at] LT', + nextWeek: 'dddd [at] LT', + lastDay: '[Yesterday at] LT', + lastWeek: '[Last] dddd [at] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'in %s', + past: '%s ago', + s: 'a few seconds', + ss: '%d seconds', + m: 'a minute', + mm: '%d minutes', + h: 'an hour', + hh: '%d hours', + d: 'a day', + dd: '%d days', + M: 'a month', + MM: '%d months', + y: 'a year', + yy: '%d years', + }, + dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, + ordinal: function (number) { + var b = number % 10, + output = + ~~((number % 100) / 10) === 1 + ? 'th' + : b === 1 + ? 'st' + : b === 2 + ? 'nd' + : b === 3 + ? 'rd' + : 'th'; + return number + output; + }, + week: { + dow: 0, // Sunday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('en-ca', { + months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split( + '_' + ), + monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split( + '_' + ), + weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + longDateFormat: { + LT: 'h:mm A', + LTS: 'h:mm:ss A', + L: 'YYYY-MM-DD', + LL: 'MMMM D, YYYY', + LLL: 'MMMM D, YYYY h:mm A', + LLLL: 'dddd, MMMM D, YYYY h:mm A', + }, + calendar: { + sameDay: '[Today at] LT', + nextDay: '[Tomorrow at] LT', + nextWeek: 'dddd [at] LT', + lastDay: '[Yesterday at] LT', + lastWeek: '[Last] dddd [at] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'in %s', + past: '%s ago', + s: 'a few seconds', + ss: '%d seconds', + m: 'a minute', + mm: '%d minutes', + h: 'an hour', + hh: '%d hours', + d: 'a day', + dd: '%d days', + M: 'a month', + MM: '%d months', + y: 'a year', + yy: '%d years', + }, + dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, + ordinal: function (number) { + var b = number % 10, + output = + ~~((number % 100) / 10) === 1 + ? 'th' + : b === 1 + ? 'st' + : b === 2 + ? 'nd' + : b === 3 + ? 'rd' + : 'th'; + return number + output; + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('en-gb', { + months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split( + '_' + ), + monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split( + '_' + ), + weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Today at] LT', + nextDay: '[Tomorrow at] LT', + nextWeek: 'dddd [at] LT', + lastDay: '[Yesterday at] LT', + lastWeek: '[Last] dddd [at] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'in %s', + past: '%s ago', + s: 'a few seconds', + ss: '%d seconds', + m: 'a minute', + mm: '%d minutes', + h: 'an hour', + hh: '%d hours', + d: 'a day', + dd: '%d days', + M: 'a month', + MM: '%d months', + y: 'a year', + yy: '%d years', + }, + dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, + ordinal: function (number) { + var b = number % 10, + output = + ~~((number % 100) / 10) === 1 + ? 'th' + : b === 1 + ? 'st' + : b === 2 + ? 'nd' + : b === 3 + ? 'rd' + : 'th'; + return number + output; + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('en-ie', { + months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split( + '_' + ), + monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split( + '_' + ), + weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Today at] LT', + nextDay: '[Tomorrow at] LT', + nextWeek: 'dddd [at] LT', + lastDay: '[Yesterday at] LT', + lastWeek: '[Last] dddd [at] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'in %s', + past: '%s ago', + s: 'a few seconds', + ss: '%d seconds', + m: 'a minute', + mm: '%d minutes', + h: 'an hour', + hh: '%d hours', + d: 'a day', + dd: '%d days', + M: 'a month', + MM: '%d months', + y: 'a year', + yy: '%d years', + }, + dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, + ordinal: function (number) { + var b = number % 10, + output = + ~~((number % 100) / 10) === 1 + ? 'th' + : b === 1 + ? 'st' + : b === 2 + ? 'nd' + : b === 3 + ? 'rd' + : 'th'; + return number + output; + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('en-il', { + months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split( + '_' + ), + monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split( + '_' + ), + weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Today at] LT', + nextDay: '[Tomorrow at] LT', + nextWeek: 'dddd [at] LT', + lastDay: '[Yesterday at] LT', + lastWeek: '[Last] dddd [at] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'in %s', + past: '%s ago', + s: 'a few seconds', + ss: '%d seconds', + m: 'a minute', + mm: '%d minutes', + h: 'an hour', + hh: '%d hours', + d: 'a day', + dd: '%d days', + M: 'a month', + MM: '%d months', + y: 'a year', + yy: '%d years', + }, + dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, + ordinal: function (number) { + var b = number % 10, + output = + ~~((number % 100) / 10) === 1 + ? 'th' + : b === 1 + ? 'st' + : b === 2 + ? 'nd' + : b === 3 + ? 'rd' + : 'th'; + return number + output; + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('en-in', { + months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split( + '_' + ), + monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split( + '_' + ), + weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + longDateFormat: { + LT: 'h:mm A', + LTS: 'h:mm:ss A', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY h:mm A', + LLLL: 'dddd, D MMMM YYYY h:mm A', + }, + calendar: { + sameDay: '[Today at] LT', + nextDay: '[Tomorrow at] LT', + nextWeek: 'dddd [at] LT', + lastDay: '[Yesterday at] LT', + lastWeek: '[Last] dddd [at] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'in %s', + past: '%s ago', + s: 'a few seconds', + ss: '%d seconds', + m: 'a minute', + mm: '%d minutes', + h: 'an hour', + hh: '%d hours', + d: 'a day', + dd: '%d days', + M: 'a month', + MM: '%d months', + y: 'a year', + yy: '%d years', + }, + dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, + ordinal: function (number) { + var b = number % 10, + output = + ~~((number % 100) / 10) === 1 + ? 'th' + : b === 1 + ? 'st' + : b === 2 + ? 'nd' + : b === 3 + ? 'rd' + : 'th'; + return number + output; + }, + week: { + dow: 0, // Sunday is the first day of the week. + doy: 6, // The week that contains Jan 1st is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('en-nz', { + months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split( + '_' + ), + monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split( + '_' + ), + weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + longDateFormat: { + LT: 'h:mm A', + LTS: 'h:mm:ss A', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY h:mm A', + LLLL: 'dddd, D MMMM YYYY h:mm A', + }, + calendar: { + sameDay: '[Today at] LT', + nextDay: '[Tomorrow at] LT', + nextWeek: 'dddd [at] LT', + lastDay: '[Yesterday at] LT', + lastWeek: '[Last] dddd [at] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'in %s', + past: '%s ago', + s: 'a few seconds', + ss: '%d seconds', + m: 'a minute', + mm: '%d minutes', + h: 'an hour', + hh: '%d hours', + d: 'a day', + dd: '%d days', + M: 'a month', + MM: '%d months', + y: 'a year', + yy: '%d years', + }, + dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, + ordinal: function (number) { + var b = number % 10, + output = + ~~((number % 100) / 10) === 1 + ? 'th' + : b === 1 + ? 'st' + : b === 2 + ? 'nd' + : b === 3 + ? 'rd' + : 'th'; + return number + output; + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('en-sg', { + months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split( + '_' + ), + monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split( + '_' + ), + weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Today at] LT', + nextDay: '[Tomorrow at] LT', + nextWeek: 'dddd [at] LT', + lastDay: '[Yesterday at] LT', + lastWeek: '[Last] dddd [at] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'in %s', + past: '%s ago', + s: 'a few seconds', + ss: '%d seconds', + m: 'a minute', + mm: '%d minutes', + h: 'an hour', + hh: '%d hours', + d: 'a day', + dd: '%d days', + M: 'a month', + MM: '%d months', + y: 'a year', + yy: '%d years', + }, + dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, + ordinal: function (number) { + var b = number % 10, + output = + ~~((number % 100) / 10) === 1 + ? 'th' + : b === 1 + ? 'st' + : b === 2 + ? 'nd' + : b === 3 + ? 'rd' + : 'th'; + return number + output; + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('eo', { + months: 'januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro'.split( + '_' + ), + monthsShort: 'jan_feb_mart_apr_maj_jun_jul_aŭg_sept_okt_nov_dec'.split('_'), + weekdays: 'dimanĉo_lundo_mardo_merkredo_ĵaŭdo_vendredo_sabato'.split('_'), + weekdaysShort: 'dim_lun_mard_merk_ĵaŭ_ven_sab'.split('_'), + weekdaysMin: 'di_lu_ma_me_ĵa_ve_sa'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'YYYY-MM-DD', + LL: '[la] D[-an de] MMMM, YYYY', + LLL: '[la] D[-an de] MMMM, YYYY HH:mm', + LLLL: 'dddd[n], [la] D[-an de] MMMM, YYYY HH:mm', + llll: 'ddd, [la] D[-an de] MMM, YYYY HH:mm', + }, + meridiemParse: /[ap]\.t\.m/i, + isPM: function (input) { + return input.charAt(0).toLowerCase() === 'p'; + }, + meridiem: function (hours, minutes, isLower) { + if (hours > 11) { + return isLower ? 'p.t.m.' : 'P.T.M.'; + } else { + return isLower ? 'a.t.m.' : 'A.T.M.'; + } + }, + calendar: { + sameDay: '[Hodiaŭ je] LT', + nextDay: '[Morgaŭ je] LT', + nextWeek: 'dddd[n je] LT', + lastDay: '[Hieraŭ je] LT', + lastWeek: '[pasintan] dddd[n je] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'post %s', + past: 'antaŭ %s', + s: 'kelkaj sekundoj', + ss: '%d sekundoj', + m: 'unu minuto', + mm: '%d minutoj', + h: 'unu horo', + hh: '%d horoj', + d: 'unu tago', //ne 'diurno', ĉar estas uzita por proksimumo + dd: '%d tagoj', + M: 'unu monato', + MM: '%d monatoj', + y: 'unu jaro', + yy: '%d jaroj', + }, + dayOfMonthOrdinalParse: /\d{1,2}a/, + ordinal: '%da', + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split( + '_' + ), + monthsShort$1 = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'), + monthsParse$2 = [ + /^ene/i, + /^feb/i, + /^mar/i, + /^abr/i, + /^may/i, + /^jun/i, + /^jul/i, + /^ago/i, + /^sep/i, + /^oct/i, + /^nov/i, + /^dic/i, + ], + monthsRegex$3 = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i; + + hooks.defineLocale('es-do', { + months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split( + '_' + ), + monthsShort: function (m, format) { + if (!m) { + return monthsShortDot; + } else if (/-MMM-/.test(format)) { + return monthsShort$1[m.month()]; + } else { + return monthsShortDot[m.month()]; + } + }, + monthsRegex: monthsRegex$3, + monthsShortRegex: monthsRegex$3, + monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i, + monthsShortStrictRegex: /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i, + monthsParse: monthsParse$2, + longMonthsParse: monthsParse$2, + shortMonthsParse: monthsParse$2, + weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'), + weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'), + weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'h:mm A', + LTS: 'h:mm:ss A', + L: 'DD/MM/YYYY', + LL: 'D [de] MMMM [de] YYYY', + LLL: 'D [de] MMMM [de] YYYY h:mm A', + LLLL: 'dddd, D [de] MMMM [de] YYYY h:mm A', + }, + calendar: { + sameDay: function () { + return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; + }, + nextDay: function () { + return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; + }, + nextWeek: function () { + return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; + }, + lastDay: function () { + return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; + }, + lastWeek: function () { + return ( + '[el] dddd [pasado a la' + + (this.hours() !== 1 ? 's' : '') + + '] LT' + ); + }, + sameElse: 'L', + }, + relativeTime: { + future: 'en %s', + past: 'hace %s', + s: 'unos segundos', + ss: '%d segundos', + m: 'un minuto', + mm: '%d minutos', + h: 'una hora', + hh: '%d horas', + d: 'un día', + dd: '%d días', + M: 'un mes', + MM: '%d meses', + y: 'un año', + yy: '%d años', + }, + dayOfMonthOrdinalParse: /\d{1,2}º/, + ordinal: '%dº', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var monthsShortDot$1 = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split( + '_' + ), + monthsShort$2 = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'), + monthsParse$3 = [ + /^ene/i, + /^feb/i, + /^mar/i, + /^abr/i, + /^may/i, + /^jun/i, + /^jul/i, + /^ago/i, + /^sep/i, + /^oct/i, + /^nov/i, + /^dic/i, + ], + monthsRegex$4 = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i; + + hooks.defineLocale('es-us', { + months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split( + '_' + ), + monthsShort: function (m, format) { + if (!m) { + return monthsShortDot$1; + } else if (/-MMM-/.test(format)) { + return monthsShort$2[m.month()]; + } else { + return monthsShortDot$1[m.month()]; + } + }, + monthsRegex: monthsRegex$4, + monthsShortRegex: monthsRegex$4, + monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i, + monthsShortStrictRegex: /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i, + monthsParse: monthsParse$3, + longMonthsParse: monthsParse$3, + shortMonthsParse: monthsParse$3, + weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'), + weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'), + weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'h:mm A', + LTS: 'h:mm:ss A', + L: 'MM/DD/YYYY', + LL: 'D [de] MMMM [de] YYYY', + LLL: 'D [de] MMMM [de] YYYY h:mm A', + LLLL: 'dddd, D [de] MMMM [de] YYYY h:mm A', + }, + calendar: { + sameDay: function () { + return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; + }, + nextDay: function () { + return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; + }, + nextWeek: function () { + return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; + }, + lastDay: function () { + return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; + }, + lastWeek: function () { + return ( + '[el] dddd [pasado a la' + + (this.hours() !== 1 ? 's' : '') + + '] LT' + ); + }, + sameElse: 'L', + }, + relativeTime: { + future: 'en %s', + past: 'hace %s', + s: 'unos segundos', + ss: '%d segundos', + m: 'un minuto', + mm: '%d minutos', + h: 'una hora', + hh: '%d horas', + d: 'un día', + dd: '%d días', + M: 'un mes', + MM: '%d meses', + y: 'un año', + yy: '%d años', + }, + dayOfMonthOrdinalParse: /\d{1,2}º/, + ordinal: '%dº', + week: { + dow: 0, // Sunday is the first day of the week. + doy: 6, // The week that contains Jan 6th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var monthsShortDot$2 = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split( + '_' + ), + monthsShort$3 = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'), + monthsParse$4 = [ + /^ene/i, + /^feb/i, + /^mar/i, + /^abr/i, + /^may/i, + /^jun/i, + /^jul/i, + /^ago/i, + /^sep/i, + /^oct/i, + /^nov/i, + /^dic/i, + ], + monthsRegex$5 = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i; + + hooks.defineLocale('es', { + months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split( + '_' + ), + monthsShort: function (m, format) { + if (!m) { + return monthsShortDot$2; + } else if (/-MMM-/.test(format)) { + return monthsShort$3[m.month()]; + } else { + return monthsShortDot$2[m.month()]; + } + }, + monthsRegex: monthsRegex$5, + monthsShortRegex: monthsRegex$5, + monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i, + monthsShortStrictRegex: /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i, + monthsParse: monthsParse$4, + longMonthsParse: monthsParse$4, + shortMonthsParse: monthsParse$4, + weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'), + weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'), + weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D [de] MMMM [de] YYYY', + LLL: 'D [de] MMMM [de] YYYY H:mm', + LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm', + }, + calendar: { + sameDay: function () { + return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; + }, + nextDay: function () { + return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; + }, + nextWeek: function () { + return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; + }, + lastDay: function () { + return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; + }, + lastWeek: function () { + return ( + '[el] dddd [pasado a la' + + (this.hours() !== 1 ? 's' : '') + + '] LT' + ); + }, + sameElse: 'L', + }, + relativeTime: { + future: 'en %s', + past: 'hace %s', + s: 'unos segundos', + ss: '%d segundos', + m: 'un minuto', + mm: '%d minutos', + h: 'una hora', + hh: '%d horas', + d: 'un día', + dd: '%d días', + M: 'un mes', + MM: '%d meses', + y: 'un año', + yy: '%d años', + }, + dayOfMonthOrdinalParse: /\d{1,2}º/, + ordinal: '%dº', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + invalidDate: 'Fecha inválida', + }); + + //! moment.js locale configuration + + function processRelativeTime$3(number, withoutSuffix, key, isFuture) { + var format = { + s: ['mõne sekundi', 'mõni sekund', 'paar sekundit'], + ss: [number + 'sekundi', number + 'sekundit'], + m: ['ühe minuti', 'üks minut'], + mm: [number + ' minuti', number + ' minutit'], + h: ['ühe tunni', 'tund aega', 'üks tund'], + hh: [number + ' tunni', number + ' tundi'], + d: ['ühe päeva', 'üks päev'], + M: ['kuu aja', 'kuu aega', 'üks kuu'], + MM: [number + ' kuu', number + ' kuud'], + y: ['ühe aasta', 'aasta', 'üks aasta'], + yy: [number + ' aasta', number + ' aastat'], + }; + if (withoutSuffix) { + return format[key][2] ? format[key][2] : format[key][1]; + } + return isFuture ? format[key][0] : format[key][1]; + } + + hooks.defineLocale('et', { + months: 'jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember'.split( + '_' + ), + monthsShort: 'jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets'.split( + '_' + ), + weekdays: 'pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev'.split( + '_' + ), + weekdaysShort: 'P_E_T_K_N_R_L'.split('_'), + weekdaysMin: 'P_E_T_K_N_R_L'.split('_'), + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY H:mm', + LLLL: 'dddd, D. MMMM YYYY H:mm', + }, + calendar: { + sameDay: '[Täna,] LT', + nextDay: '[Homme,] LT', + nextWeek: '[Järgmine] dddd LT', + lastDay: '[Eile,] LT', + lastWeek: '[Eelmine] dddd LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s pärast', + past: '%s tagasi', + s: processRelativeTime$3, + ss: processRelativeTime$3, + m: processRelativeTime$3, + mm: processRelativeTime$3, + h: processRelativeTime$3, + hh: processRelativeTime$3, + d: processRelativeTime$3, + dd: '%d päeva', + M: processRelativeTime$3, + MM: processRelativeTime$3, + y: processRelativeTime$3, + yy: processRelativeTime$3, + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('eu', { + months: 'urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua'.split( + '_' + ), + monthsShort: 'urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata'.split( + '_' + ), + weekdaysShort: 'ig._al._ar._az._og._ol._lr.'.split('_'), + weekdaysMin: 'ig_al_ar_az_og_ol_lr'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'YYYY-MM-DD', + LL: 'YYYY[ko] MMMM[ren] D[a]', + LLL: 'YYYY[ko] MMMM[ren] D[a] HH:mm', + LLLL: 'dddd, YYYY[ko] MMMM[ren] D[a] HH:mm', + l: 'YYYY-M-D', + ll: 'YYYY[ko] MMM D[a]', + lll: 'YYYY[ko] MMM D[a] HH:mm', + llll: 'ddd, YYYY[ko] MMM D[a] HH:mm', + }, + calendar: { + sameDay: '[gaur] LT[etan]', + nextDay: '[bihar] LT[etan]', + nextWeek: 'dddd LT[etan]', + lastDay: '[atzo] LT[etan]', + lastWeek: '[aurreko] dddd LT[etan]', + sameElse: 'L', + }, + relativeTime: { + future: '%s barru', + past: 'duela %s', + s: 'segundo batzuk', + ss: '%d segundo', + m: 'minutu bat', + mm: '%d minutu', + h: 'ordu bat', + hh: '%d ordu', + d: 'egun bat', + dd: '%d egun', + M: 'hilabete bat', + MM: '%d hilabete', + y: 'urte bat', + yy: '%d urte', + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var symbolMap$5 = { + '1': '۱', + '2': '۲', + '3': '۳', + '4': '۴', + '5': '۵', + '6': '۶', + '7': '۷', + '8': '۸', + '9': '۹', + '0': '۰', + }, + numberMap$4 = { + '۱': '1', + '۲': '2', + '۳': '3', + '۴': '4', + '۵': '5', + '۶': '6', + '۷': '7', + '۸': '8', + '۹': '9', + '۰': '0', + }; + + hooks.defineLocale('fa', { + months: 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split( + '_' + ), + monthsShort: 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split( + '_' + ), + weekdays: 'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split( + '_' + ), + weekdaysShort: 'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split( + '_' + ), + weekdaysMin: 'ی_د_س_چ_پ_ج_ش'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + meridiemParse: /قبل از ظهر|بعد از ظهر/, + isPM: function (input) { + return /بعد از ظهر/.test(input); + }, + meridiem: function (hour, minute, isLower) { + if (hour < 12) { + return 'قبل از ظهر'; + } else { + return 'بعد از ظهر'; + } + }, + calendar: { + sameDay: '[امروز ساعت] LT', + nextDay: '[فردا ساعت] LT', + nextWeek: 'dddd [ساعت] LT', + lastDay: '[دیروز ساعت] LT', + lastWeek: 'dddd [پیش] [ساعت] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'در %s', + past: '%s پیش', + s: 'چند ثانیه', + ss: '%d ثانیه', + m: 'یک دقیقه', + mm: '%d دقیقه', + h: 'یک ساعت', + hh: '%d ساعت', + d: 'یک روز', + dd: '%d روز', + M: 'یک ماه', + MM: '%d ماه', + y: 'یک سال', + yy: '%d سال', + }, + preparse: function (string) { + return string + .replace(/[۰-۹]/g, function (match) { + return numberMap$4[match]; + }) + .replace(/،/g, ','); + }, + postformat: function (string) { + return string + .replace(/\d/g, function (match) { + return symbolMap$5[match]; + }) + .replace(/,/g, '،'); + }, + dayOfMonthOrdinalParse: /\d{1,2}م/, + ordinal: '%dم', + week: { + dow: 6, // Saturday is the first day of the week. + doy: 12, // The week that contains Jan 12th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var numbersPast = 'nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän'.split( + ' ' + ), + numbersFuture = [ + 'nolla', + 'yhden', + 'kahden', + 'kolmen', + 'neljän', + 'viiden', + 'kuuden', + numbersPast[7], + numbersPast[8], + numbersPast[9], + ]; + function translate$2(number, withoutSuffix, key, isFuture) { + var result = ''; + switch (key) { + case 's': + return isFuture ? 'muutaman sekunnin' : 'muutama sekunti'; + case 'ss': + result = isFuture ? 'sekunnin' : 'sekuntia'; + break; + case 'm': + return isFuture ? 'minuutin' : 'minuutti'; + case 'mm': + result = isFuture ? 'minuutin' : 'minuuttia'; + break; + case 'h': + return isFuture ? 'tunnin' : 'tunti'; + case 'hh': + result = isFuture ? 'tunnin' : 'tuntia'; + break; + case 'd': + return isFuture ? 'päivän' : 'päivä'; + case 'dd': + result = isFuture ? 'päivän' : 'päivää'; + break; + case 'M': + return isFuture ? 'kuukauden' : 'kuukausi'; + case 'MM': + result = isFuture ? 'kuukauden' : 'kuukautta'; + break; + case 'y': + return isFuture ? 'vuoden' : 'vuosi'; + case 'yy': + result = isFuture ? 'vuoden' : 'vuotta'; + break; + } + result = verbalNumber(number, isFuture) + ' ' + result; + return result; + } + function verbalNumber(number, isFuture) { + return number < 10 + ? isFuture + ? numbersFuture[number] + : numbersPast[number] + : number; + } + + hooks.defineLocale('fi', { + months: 'tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu'.split( + '_' + ), + monthsShort: 'tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu'.split( + '_' + ), + weekdays: 'sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai'.split( + '_' + ), + weekdaysShort: 'su_ma_ti_ke_to_pe_la'.split('_'), + weekdaysMin: 'su_ma_ti_ke_to_pe_la'.split('_'), + longDateFormat: { + LT: 'HH.mm', + LTS: 'HH.mm.ss', + L: 'DD.MM.YYYY', + LL: 'Do MMMM[ta] YYYY', + LLL: 'Do MMMM[ta] YYYY, [klo] HH.mm', + LLLL: 'dddd, Do MMMM[ta] YYYY, [klo] HH.mm', + l: 'D.M.YYYY', + ll: 'Do MMM YYYY', + lll: 'Do MMM YYYY, [klo] HH.mm', + llll: 'ddd, Do MMM YYYY, [klo] HH.mm', + }, + calendar: { + sameDay: '[tänään] [klo] LT', + nextDay: '[huomenna] [klo] LT', + nextWeek: 'dddd [klo] LT', + lastDay: '[eilen] [klo] LT', + lastWeek: '[viime] dddd[na] [klo] LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s päästä', + past: '%s sitten', + s: translate$2, + ss: translate$2, + m: translate$2, + mm: translate$2, + h: translate$2, + hh: translate$2, + d: translate$2, + dd: translate$2, + M: translate$2, + MM: translate$2, + y: translate$2, + yy: translate$2, + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('fil', { + months: 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split( + '_' + ), + monthsShort: 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'), + weekdays: 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split( + '_' + ), + weekdaysShort: 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'), + weekdaysMin: 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'MM/D/YYYY', + LL: 'MMMM D, YYYY', + LLL: 'MMMM D, YYYY HH:mm', + LLLL: 'dddd, MMMM DD, YYYY HH:mm', + }, + calendar: { + sameDay: 'LT [ngayong araw]', + nextDay: '[Bukas ng] LT', + nextWeek: 'LT [sa susunod na] dddd', + lastDay: 'LT [kahapon]', + lastWeek: 'LT [noong nakaraang] dddd', + sameElse: 'L', + }, + relativeTime: { + future: 'sa loob ng %s', + past: '%s ang nakalipas', + s: 'ilang segundo', + ss: '%d segundo', + m: 'isang minuto', + mm: '%d minuto', + h: 'isang oras', + hh: '%d oras', + d: 'isang araw', + dd: '%d araw', + M: 'isang buwan', + MM: '%d buwan', + y: 'isang taon', + yy: '%d taon', + }, + dayOfMonthOrdinalParse: /\d{1,2}/, + ordinal: function (number) { + return number; + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('fo', { + months: 'januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember'.split( + '_' + ), + monthsShort: 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'), + weekdays: 'sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur'.split( + '_' + ), + weekdaysShort: 'sun_mán_týs_mik_hós_frí_ley'.split('_'), + weekdaysMin: 'su_má_tý_mi_hó_fr_le'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D. MMMM, YYYY HH:mm', + }, + calendar: { + sameDay: '[Í dag kl.] LT', + nextDay: '[Í morgin kl.] LT', + nextWeek: 'dddd [kl.] LT', + lastDay: '[Í gjár kl.] LT', + lastWeek: '[síðstu] dddd [kl] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'um %s', + past: '%s síðani', + s: 'fá sekund', + ss: '%d sekundir', + m: 'ein minuttur', + mm: '%d minuttir', + h: 'ein tími', + hh: '%d tímar', + d: 'ein dagur', + dd: '%d dagar', + M: 'ein mánaður', + MM: '%d mánaðir', + y: 'eitt ár', + yy: '%d ár', + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('fr-ca', { + months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split( + '_' + ), + monthsShort: 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'), + weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'), + weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'YYYY-MM-DD', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Aujourd’hui à] LT', + nextDay: '[Demain à] LT', + nextWeek: 'dddd [à] LT', + lastDay: '[Hier à] LT', + lastWeek: 'dddd [dernier à] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'dans %s', + past: 'il y a %s', + s: 'quelques secondes', + ss: '%d secondes', + m: 'une minute', + mm: '%d minutes', + h: 'une heure', + hh: '%d heures', + d: 'un jour', + dd: '%d jours', + M: 'un mois', + MM: '%d mois', + y: 'un an', + yy: '%d ans', + }, + dayOfMonthOrdinalParse: /\d{1,2}(er|e)/, + ordinal: function (number, period) { + switch (period) { + // Words with masculine grammatical gender: mois, trimestre, jour + default: + case 'M': + case 'Q': + case 'D': + case 'DDD': + case 'd': + return number + (number === 1 ? 'er' : 'e'); + + // Words with feminine grammatical gender: semaine + case 'w': + case 'W': + return number + (number === 1 ? 're' : 'e'); + } + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('fr-ch', { + months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split( + '_' + ), + monthsShort: 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'), + weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'), + weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Aujourd’hui à] LT', + nextDay: '[Demain à] LT', + nextWeek: 'dddd [à] LT', + lastDay: '[Hier à] LT', + lastWeek: 'dddd [dernier à] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'dans %s', + past: 'il y a %s', + s: 'quelques secondes', + ss: '%d secondes', + m: 'une minute', + mm: '%d minutes', + h: 'une heure', + hh: '%d heures', + d: 'un jour', + dd: '%d jours', + M: 'un mois', + MM: '%d mois', + y: 'un an', + yy: '%d ans', + }, + dayOfMonthOrdinalParse: /\d{1,2}(er|e)/, + ordinal: function (number, period) { + switch (period) { + // Words with masculine grammatical gender: mois, trimestre, jour + default: + case 'M': + case 'Q': + case 'D': + case 'DDD': + case 'd': + return number + (number === 1 ? 'er' : 'e'); + + // Words with feminine grammatical gender: semaine + case 'w': + case 'W': + return number + (number === 1 ? 're' : 'e'); + } + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var monthsStrictRegex$1 = /^(janvier|février|mars|avril|mai|juin|juillet|août|septembre|octobre|novembre|décembre)/i, + monthsShortStrictRegex$1 = /(janv\.?|févr\.?|mars|avr\.?|mai|juin|juil\.?|août|sept\.?|oct\.?|nov\.?|déc\.?)/i, + monthsRegex$6 = /(janv\.?|févr\.?|mars|avr\.?|mai|juin|juil\.?|août|sept\.?|oct\.?|nov\.?|déc\.?|janvier|février|mars|avril|mai|juin|juillet|août|septembre|octobre|novembre|décembre)/i, + monthsParse$5 = [ + /^janv/i, + /^févr/i, + /^mars/i, + /^avr/i, + /^mai/i, + /^juin/i, + /^juil/i, + /^août/i, + /^sept/i, + /^oct/i, + /^nov/i, + /^déc/i, + ]; + + hooks.defineLocale('fr', { + months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split( + '_' + ), + monthsShort: 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split( + '_' + ), + monthsRegex: monthsRegex$6, + monthsShortRegex: monthsRegex$6, + monthsStrictRegex: monthsStrictRegex$1, + monthsShortStrictRegex: monthsShortStrictRegex$1, + monthsParse: monthsParse$5, + longMonthsParse: monthsParse$5, + shortMonthsParse: monthsParse$5, + weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'), + weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'), + weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Aujourd’hui à] LT', + nextDay: '[Demain à] LT', + nextWeek: 'dddd [à] LT', + lastDay: '[Hier à] LT', + lastWeek: 'dddd [dernier à] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'dans %s', + past: 'il y a %s', + s: 'quelques secondes', + ss: '%d secondes', + m: 'une minute', + mm: '%d minutes', + h: 'une heure', + hh: '%d heures', + d: 'un jour', + dd: '%d jours', + M: 'un mois', + MM: '%d mois', + y: 'un an', + yy: '%d ans', + }, + dayOfMonthOrdinalParse: /\d{1,2}(er|)/, + ordinal: function (number, period) { + switch (period) { + // TODO: Return 'e' when day of month > 1. Move this case inside + // block for masculine words below. + // See https://github.com/moment/moment/issues/3375 + case 'D': + return number + (number === 1 ? 'er' : ''); + + // Words with masculine grammatical gender: mois, trimestre, jour + default: + case 'M': + case 'Q': + case 'DDD': + case 'd': + return number + (number === 1 ? 'er' : 'e'); + + // Words with feminine grammatical gender: semaine + case 'w': + case 'W': + return number + (number === 1 ? 're' : 'e'); + } + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var monthsShortWithDots = 'jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.'.split( + '_' + ), + monthsShortWithoutDots = 'jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des'.split( + '_' + ); + + hooks.defineLocale('fy', { + months: 'jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber'.split( + '_' + ), + monthsShort: function (m, format) { + if (!m) { + return monthsShortWithDots; + } else if (/-MMM-/.test(format)) { + return monthsShortWithoutDots[m.month()]; + } else { + return monthsShortWithDots[m.month()]; + } + }, + monthsParseExact: true, + weekdays: 'snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon'.split( + '_' + ), + weekdaysShort: 'si._mo._ti._wo._to._fr._so.'.split('_'), + weekdaysMin: 'Si_Mo_Ti_Wo_To_Fr_So'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD-MM-YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[hjoed om] LT', + nextDay: '[moarn om] LT', + nextWeek: 'dddd [om] LT', + lastDay: '[juster om] LT', + lastWeek: '[ôfrûne] dddd [om] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'oer %s', + past: '%s lyn', + s: 'in pear sekonden', + ss: '%d sekonden', + m: 'ien minút', + mm: '%d minuten', + h: 'ien oere', + hh: '%d oeren', + d: 'ien dei', + dd: '%d dagen', + M: 'ien moanne', + MM: '%d moannen', + y: 'ien jier', + yy: '%d jierren', + }, + dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/, + ordinal: function (number) { + return ( + number + + (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de') + ); + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var months$6 = [ + 'Eanáir', + 'Feabhra', + 'Márta', + 'Aibreán', + 'Bealtaine', + 'Meitheamh', + 'Iúil', + 'Lúnasa', + 'Meán Fómhair', + 'Deireadh Fómhair', + 'Samhain', + 'Nollaig', + ], + monthsShort$4 = [ + 'Ean', + 'Feabh', + 'Márt', + 'Aib', + 'Beal', + 'Meith', + 'Iúil', + 'Lún', + 'M.F.', + 'D.F.', + 'Samh', + 'Noll', + ], + weekdays$1 = [ + 'Dé Domhnaigh', + 'Dé Luain', + 'Dé Máirt', + 'Dé Céadaoin', + 'Déardaoin', + 'Dé hAoine', + 'Dé Sathairn', + ], + weekdaysShort = ['Domh', 'Luan', 'Máirt', 'Céad', 'Déar', 'Aoine', 'Sath'], + weekdaysMin = ['Do', 'Lu', 'Má', 'Cé', 'Dé', 'A', 'Sa']; + + hooks.defineLocale('ga', { + months: months$6, + monthsShort: monthsShort$4, + monthsParseExact: true, + weekdays: weekdays$1, + weekdaysShort: weekdaysShort, + weekdaysMin: weekdaysMin, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Inniu ag] LT', + nextDay: '[Amárach ag] LT', + nextWeek: 'dddd [ag] LT', + lastDay: '[Inné ag] LT', + lastWeek: 'dddd [seo caite] [ag] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'i %s', + past: '%s ó shin', + s: 'cúpla soicind', + ss: '%d soicind', + m: 'nóiméad', + mm: '%d nóiméad', + h: 'uair an chloig', + hh: '%d uair an chloig', + d: 'lá', + dd: '%d lá', + M: 'mí', + MM: '%d míonna', + y: 'bliain', + yy: '%d bliain', + }, + dayOfMonthOrdinalParse: /\d{1,2}(d|na|mh)/, + ordinal: function (number) { + var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh'; + return number + output; + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var months$7 = [ + 'Am Faoilleach', + 'An Gearran', + 'Am Màrt', + 'An Giblean', + 'An Cèitean', + 'An t-Ògmhios', + 'An t-Iuchar', + 'An Lùnastal', + 'An t-Sultain', + 'An Dàmhair', + 'An t-Samhain', + 'An Dùbhlachd', + ], + monthsShort$5 = [ + 'Faoi', + 'Gear', + 'Màrt', + 'Gibl', + 'Cèit', + 'Ògmh', + 'Iuch', + 'Lùn', + 'Sult', + 'Dàmh', + 'Samh', + 'Dùbh', + ], + weekdays$2 = [ + 'Didòmhnaich', + 'Diluain', + 'Dimàirt', + 'Diciadain', + 'Diardaoin', + 'Dihaoine', + 'Disathairne', + ], + weekdaysShort$1 = ['Did', 'Dil', 'Dim', 'Dic', 'Dia', 'Dih', 'Dis'], + weekdaysMin$1 = ['Dò', 'Lu', 'Mà', 'Ci', 'Ar', 'Ha', 'Sa']; + + hooks.defineLocale('gd', { + months: months$7, + monthsShort: monthsShort$5, + monthsParseExact: true, + weekdays: weekdays$2, + weekdaysShort: weekdaysShort$1, + weekdaysMin: weekdaysMin$1, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[An-diugh aig] LT', + nextDay: '[A-màireach aig] LT', + nextWeek: 'dddd [aig] LT', + lastDay: '[An-dè aig] LT', + lastWeek: 'dddd [seo chaidh] [aig] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'ann an %s', + past: 'bho chionn %s', + s: 'beagan diogan', + ss: '%d diogan', + m: 'mionaid', + mm: '%d mionaidean', + h: 'uair', + hh: '%d uairean', + d: 'latha', + dd: '%d latha', + M: 'mìos', + MM: '%d mìosan', + y: 'bliadhna', + yy: '%d bliadhna', + }, + dayOfMonthOrdinalParse: /\d{1,2}(d|na|mh)/, + ordinal: function (number) { + var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh'; + return number + output; + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('gl', { + months: 'xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro'.split( + '_' + ), + monthsShort: 'xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'domingo_luns_martes_mércores_xoves_venres_sábado'.split('_'), + weekdaysShort: 'dom._lun._mar._mér._xov._ven._sáb.'.split('_'), + weekdaysMin: 'do_lu_ma_mé_xo_ve_sá'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D [de] MMMM [de] YYYY', + LLL: 'D [de] MMMM [de] YYYY H:mm', + LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm', + }, + calendar: { + sameDay: function () { + return '[hoxe ' + (this.hours() !== 1 ? 'ás' : 'á') + '] LT'; + }, + nextDay: function () { + return '[mañá ' + (this.hours() !== 1 ? 'ás' : 'á') + '] LT'; + }, + nextWeek: function () { + return 'dddd [' + (this.hours() !== 1 ? 'ás' : 'a') + '] LT'; + }, + lastDay: function () { + return '[onte ' + (this.hours() !== 1 ? 'á' : 'a') + '] LT'; + }, + lastWeek: function () { + return ( + '[o] dddd [pasado ' + (this.hours() !== 1 ? 'ás' : 'a') + '] LT' + ); + }, + sameElse: 'L', + }, + relativeTime: { + future: function (str) { + if (str.indexOf('un') === 0) { + return 'n' + str; + } + return 'en ' + str; + }, + past: 'hai %s', + s: 'uns segundos', + ss: '%d segundos', + m: 'un minuto', + mm: '%d minutos', + h: 'unha hora', + hh: '%d horas', + d: 'un día', + dd: '%d días', + M: 'un mes', + MM: '%d meses', + y: 'un ano', + yy: '%d anos', + }, + dayOfMonthOrdinalParse: /\d{1,2}º/, + ordinal: '%dº', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + function processRelativeTime$4(number, withoutSuffix, key, isFuture) { + var format = { + s: ['थोडया सॅकंडांनी', 'थोडे सॅकंड'], + ss: [number + ' सॅकंडांनी', number + ' सॅकंड'], + m: ['एका मिणटान', 'एक मिनूट'], + mm: [number + ' मिणटांनी', number + ' मिणटां'], + h: ['एका वरान', 'एक वर'], + hh: [number + ' वरांनी', number + ' वरां'], + d: ['एका दिसान', 'एक दीस'], + dd: [number + ' दिसांनी', number + ' दीस'], + M: ['एका म्हयन्यान', 'एक म्हयनो'], + MM: [number + ' म्हयन्यानी', number + ' म्हयने'], + y: ['एका वर्सान', 'एक वर्स'], + yy: [number + ' वर्सांनी', number + ' वर्सां'], + }; + return isFuture ? format[key][0] : format[key][1]; + } + + hooks.defineLocale('gom-deva', { + months: { + standalone: 'जानेवारी_फेब्रुवारी_मार्च_एप्रील_मे_जून_जुलय_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split( + '_' + ), + format: 'जानेवारीच्या_फेब्रुवारीच्या_मार्चाच्या_एप्रीलाच्या_मेयाच्या_जूनाच्या_जुलयाच्या_ऑगस्टाच्या_सप्टेंबराच्या_ऑक्टोबराच्या_नोव्हेंबराच्या_डिसेंबराच्या'.split( + '_' + ), + isFormat: /MMMM(\s)+D[oD]?/, + }, + monthsShort: 'जाने._फेब्रु._मार्च_एप्री._मे_जून_जुल._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'आयतार_सोमार_मंगळार_बुधवार_बिरेस्तार_सुक्रार_शेनवार'.split('_'), + weekdaysShort: 'आयत._सोम._मंगळ._बुध._ब्रेस्त._सुक्र._शेन.'.split('_'), + weekdaysMin: 'आ_सो_मं_बु_ब्रे_सु_शे'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'A h:mm [वाजतां]', + LTS: 'A h:mm:ss [वाजतां]', + L: 'DD-MM-YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY A h:mm [वाजतां]', + LLLL: 'dddd, MMMM Do, YYYY, A h:mm [वाजतां]', + llll: 'ddd, D MMM YYYY, A h:mm [वाजतां]', + }, + calendar: { + sameDay: '[आयज] LT', + nextDay: '[फाल्यां] LT', + nextWeek: '[फुडलो] dddd[,] LT', + lastDay: '[काल] LT', + lastWeek: '[फाटलो] dddd[,] LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s', + past: '%s आदीं', + s: processRelativeTime$4, + ss: processRelativeTime$4, + m: processRelativeTime$4, + mm: processRelativeTime$4, + h: processRelativeTime$4, + hh: processRelativeTime$4, + d: processRelativeTime$4, + dd: processRelativeTime$4, + M: processRelativeTime$4, + MM: processRelativeTime$4, + y: processRelativeTime$4, + yy: processRelativeTime$4, + }, + dayOfMonthOrdinalParse: /\d{1,2}(वेर)/, + ordinal: function (number, period) { + switch (period) { + // the ordinal 'वेर' only applies to day of the month + case 'D': + return number + 'वेर'; + default: + case 'M': + case 'Q': + case 'DDD': + case 'd': + case 'w': + case 'W': + return number; + } + }, + week: { + dow: 0, // Sunday is the first day of the week + doy: 3, // The week that contains Jan 4th is the first week of the year (7 + 0 - 4) + }, + meridiemParse: /राती|सकाळीं|दनपारां|सांजे/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'राती') { + return hour < 4 ? hour : hour + 12; + } else if (meridiem === 'सकाळीं') { + return hour; + } else if (meridiem === 'दनपारां') { + return hour > 12 ? hour : hour + 12; + } else if (meridiem === 'सांजे') { + return hour + 12; + } + }, + meridiem: function (hour, minute, isLower) { + if (hour < 4) { + return 'राती'; + } else if (hour < 12) { + return 'सकाळीं'; + } else if (hour < 16) { + return 'दनपारां'; + } else if (hour < 20) { + return 'सांजे'; + } else { + return 'राती'; + } + }, + }); + + //! moment.js locale configuration + + function processRelativeTime$5(number, withoutSuffix, key, isFuture) { + var format = { + s: ['thoddea sekondamni', 'thodde sekond'], + ss: [number + ' sekondamni', number + ' sekond'], + m: ['eka mintan', 'ek minut'], + mm: [number + ' mintamni', number + ' mintam'], + h: ['eka voran', 'ek vor'], + hh: [number + ' voramni', number + ' voram'], + d: ['eka disan', 'ek dis'], + dd: [number + ' disamni', number + ' dis'], + M: ['eka mhoinean', 'ek mhoino'], + MM: [number + ' mhoineamni', number + ' mhoine'], + y: ['eka vorsan', 'ek voros'], + yy: [number + ' vorsamni', number + ' vorsam'], + }; + return isFuture ? format[key][0] : format[key][1]; + } + + hooks.defineLocale('gom-latn', { + months: { + standalone: 'Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr'.split( + '_' + ), + format: 'Janerachea_Febrerachea_Marsachea_Abrilachea_Maiachea_Junachea_Julaiachea_Agostachea_Setembrachea_Otubrachea_Novembrachea_Dezembrachea'.split( + '_' + ), + isFormat: /MMMM(\s)+D[oD]?/, + }, + monthsShort: 'Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.'.split( + '_' + ), + monthsParseExact: true, + weekdays: "Aitar_Somar_Mongllar_Budhvar_Birestar_Sukrar_Son'var".split('_'), + weekdaysShort: 'Ait._Som._Mon._Bud._Bre._Suk._Son.'.split('_'), + weekdaysMin: 'Ai_Sm_Mo_Bu_Br_Su_Sn'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'A h:mm [vazta]', + LTS: 'A h:mm:ss [vazta]', + L: 'DD-MM-YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY A h:mm [vazta]', + LLLL: 'dddd, MMMM Do, YYYY, A h:mm [vazta]', + llll: 'ddd, D MMM YYYY, A h:mm [vazta]', + }, + calendar: { + sameDay: '[Aiz] LT', + nextDay: '[Faleam] LT', + nextWeek: '[Fuddlo] dddd[,] LT', + lastDay: '[Kal] LT', + lastWeek: '[Fattlo] dddd[,] LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s', + past: '%s adim', + s: processRelativeTime$5, + ss: processRelativeTime$5, + m: processRelativeTime$5, + mm: processRelativeTime$5, + h: processRelativeTime$5, + hh: processRelativeTime$5, + d: processRelativeTime$5, + dd: processRelativeTime$5, + M: processRelativeTime$5, + MM: processRelativeTime$5, + y: processRelativeTime$5, + yy: processRelativeTime$5, + }, + dayOfMonthOrdinalParse: /\d{1,2}(er)/, + ordinal: function (number, period) { + switch (period) { + // the ordinal 'er' only applies to day of the month + case 'D': + return number + 'er'; + default: + case 'M': + case 'Q': + case 'DDD': + case 'd': + case 'w': + case 'W': + return number; + } + }, + week: { + dow: 0, // Sunday is the first day of the week + doy: 3, // The week that contains Jan 4th is the first week of the year (7 + 0 - 4) + }, + meridiemParse: /rati|sokallim|donparam|sanje/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'rati') { + return hour < 4 ? hour : hour + 12; + } else if (meridiem === 'sokallim') { + return hour; + } else if (meridiem === 'donparam') { + return hour > 12 ? hour : hour + 12; + } else if (meridiem === 'sanje') { + return hour + 12; + } + }, + meridiem: function (hour, minute, isLower) { + if (hour < 4) { + return 'rati'; + } else if (hour < 12) { + return 'sokallim'; + } else if (hour < 16) { + return 'donparam'; + } else if (hour < 20) { + return 'sanje'; + } else { + return 'rati'; + } + }, + }); + + //! moment.js locale configuration + + var symbolMap$6 = { + '1': '૧', + '2': '૨', + '3': '૩', + '4': '૪', + '5': '૫', + '6': '૬', + '7': '૭', + '8': '૮', + '9': '૯', + '0': '૦', + }, + numberMap$5 = { + '૧': '1', + '૨': '2', + '૩': '3', + '૪': '4', + '૫': '5', + '૬': '6', + '૭': '7', + '૮': '8', + '૯': '9', + '૦': '0', + }; + + hooks.defineLocale('gu', { + months: 'જાન્યુઆરી_ફેબ્રુઆરી_માર્ચ_એપ્રિલ_મે_જૂન_જુલાઈ_ઑગસ્ટ_સપ્ટેમ્બર_ઑક્ટ્બર_નવેમ્બર_ડિસેમ્બર'.split( + '_' + ), + monthsShort: 'જાન્યુ._ફેબ્રુ._માર્ચ_એપ્રિ._મે_જૂન_જુલા._ઑગ._સપ્ટે._ઑક્ટ્._નવે._ડિસે.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'રવિવાર_સોમવાર_મંગળવાર_બુધ્વાર_ગુરુવાર_શુક્રવાર_શનિવાર'.split( + '_' + ), + weekdaysShort: 'રવિ_સોમ_મંગળ_બુધ્_ગુરુ_શુક્ર_શનિ'.split('_'), + weekdaysMin: 'ર_સો_મં_બુ_ગુ_શુ_શ'.split('_'), + longDateFormat: { + LT: 'A h:mm વાગ્યે', + LTS: 'A h:mm:ss વાગ્યે', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY, A h:mm વાગ્યે', + LLLL: 'dddd, D MMMM YYYY, A h:mm વાગ્યે', + }, + calendar: { + sameDay: '[આજ] LT', + nextDay: '[કાલે] LT', + nextWeek: 'dddd, LT', + lastDay: '[ગઇકાલે] LT', + lastWeek: '[પાછલા] dddd, LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s મા', + past: '%s પહેલા', + s: 'અમુક પળો', + ss: '%d સેકંડ', + m: 'એક મિનિટ', + mm: '%d મિનિટ', + h: 'એક કલાક', + hh: '%d કલાક', + d: 'એક દિવસ', + dd: '%d દિવસ', + M: 'એક મહિનો', + MM: '%d મહિનો', + y: 'એક વર્ષ', + yy: '%d વર્ષ', + }, + preparse: function (string) { + return string.replace(/[૧૨૩૪૫૬૭૮૯૦]/g, function (match) { + return numberMap$5[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$6[match]; + }); + }, + // Gujarati notation for meridiems are quite fuzzy in practice. While there exists + // a rigid notion of a 'Pahar' it is not used as rigidly in modern Gujarati. + meridiemParse: /રાત|બપોર|સવાર|સાંજ/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'રાત') { + return hour < 4 ? hour : hour + 12; + } else if (meridiem === 'સવાર') { + return hour; + } else if (meridiem === 'બપોર') { + return hour >= 10 ? hour : hour + 12; + } else if (meridiem === 'સાંજ') { + return hour + 12; + } + }, + meridiem: function (hour, minute, isLower) { + if (hour < 4) { + return 'રાત'; + } else if (hour < 10) { + return 'સવાર'; + } else if (hour < 17) { + return 'બપોર'; + } else if (hour < 20) { + return 'સાંજ'; + } else { + return 'રાત'; + } + }, + week: { + dow: 0, // Sunday is the first day of the week. + doy: 6, // The week that contains Jan 6th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('he', { + months: 'ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר'.split( + '_' + ), + monthsShort: 'ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳'.split( + '_' + ), + weekdays: 'ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת'.split('_'), + weekdaysShort: 'א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳'.split('_'), + weekdaysMin: 'א_ב_ג_ד_ה_ו_ש'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D [ב]MMMM YYYY', + LLL: 'D [ב]MMMM YYYY HH:mm', + LLLL: 'dddd, D [ב]MMMM YYYY HH:mm', + l: 'D/M/YYYY', + ll: 'D MMM YYYY', + lll: 'D MMM YYYY HH:mm', + llll: 'ddd, D MMM YYYY HH:mm', + }, + calendar: { + sameDay: '[היום ב־]LT', + nextDay: '[מחר ב־]LT', + nextWeek: 'dddd [בשעה] LT', + lastDay: '[אתמול ב־]LT', + lastWeek: '[ביום] dddd [האחרון בשעה] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'בעוד %s', + past: 'לפני %s', + s: 'מספר שניות', + ss: '%d שניות', + m: 'דקה', + mm: '%d דקות', + h: 'שעה', + hh: function (number) { + if (number === 2) { + return 'שעתיים'; + } + return number + ' שעות'; + }, + d: 'יום', + dd: function (number) { + if (number === 2) { + return 'יומיים'; + } + return number + ' ימים'; + }, + M: 'חודש', + MM: function (number) { + if (number === 2) { + return 'חודשיים'; + } + return number + ' חודשים'; + }, + y: 'שנה', + yy: function (number) { + if (number === 2) { + return 'שנתיים'; + } else if (number % 10 === 0 && number !== 10) { + return number + ' שנה'; + } + return number + ' שנים'; + }, + }, + meridiemParse: /אחה"צ|לפנה"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i, + isPM: function (input) { + return /^(אחה"צ|אחרי הצהריים|בערב)$/.test(input); + }, + meridiem: function (hour, minute, isLower) { + if (hour < 5) { + return 'לפנות בוקר'; + } else if (hour < 10) { + return 'בבוקר'; + } else if (hour < 12) { + return isLower ? 'לפנה"צ' : 'לפני הצהריים'; + } else if (hour < 18) { + return isLower ? 'אחה"צ' : 'אחרי הצהריים'; + } else { + return 'בערב'; + } + }, + }); + + //! moment.js locale configuration + + var symbolMap$7 = { + '1': '१', + '2': '२', + '3': '३', + '4': '४', + '5': '५', + '6': '६', + '7': '७', + '8': '८', + '9': '९', + '0': '०', + }, + numberMap$6 = { + '१': '1', + '२': '2', + '३': '3', + '४': '4', + '५': '5', + '६': '6', + '७': '7', + '८': '8', + '९': '9', + '०': '0', + }; + + hooks.defineLocale('hi', { + months: 'जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर'.split( + '_' + ), + monthsShort: 'जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'), + weekdaysShort: 'रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि'.split('_'), + weekdaysMin: 'र_सो_मं_बु_गु_शु_श'.split('_'), + longDateFormat: { + LT: 'A h:mm बजे', + LTS: 'A h:mm:ss बजे', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY, A h:mm बजे', + LLLL: 'dddd, D MMMM YYYY, A h:mm बजे', + }, + calendar: { + sameDay: '[आज] LT', + nextDay: '[कल] LT', + nextWeek: 'dddd, LT', + lastDay: '[कल] LT', + lastWeek: '[पिछले] dddd, LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s में', + past: '%s पहले', + s: 'कुछ ही क्षण', + ss: '%d सेकंड', + m: 'एक मिनट', + mm: '%d मिनट', + h: 'एक घंटा', + hh: '%d घंटे', + d: 'एक दिन', + dd: '%d दिन', + M: 'एक महीने', + MM: '%d महीने', + y: 'एक वर्ष', + yy: '%d वर्ष', + }, + preparse: function (string) { + return string.replace(/[१२३४५६७८९०]/g, function (match) { + return numberMap$6[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$7[match]; + }); + }, + // Hindi notation for meridiems are quite fuzzy in practice. While there exists + // a rigid notion of a 'Pahar' it is not used as rigidly in modern Hindi. + meridiemParse: /रात|सुबह|दोपहर|शाम/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'रात') { + return hour < 4 ? hour : hour + 12; + } else if (meridiem === 'सुबह') { + return hour; + } else if (meridiem === 'दोपहर') { + return hour >= 10 ? hour : hour + 12; + } else if (meridiem === 'शाम') { + return hour + 12; + } + }, + meridiem: function (hour, minute, isLower) { + if (hour < 4) { + return 'रात'; + } else if (hour < 10) { + return 'सुबह'; + } else if (hour < 17) { + return 'दोपहर'; + } else if (hour < 20) { + return 'शाम'; + } else { + return 'रात'; + } + }, + week: { + dow: 0, // Sunday is the first day of the week. + doy: 6, // The week that contains Jan 6th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + function translate$3(number, withoutSuffix, key) { + var result = number + ' '; + switch (key) { + case 'ss': + if (number === 1) { + result += 'sekunda'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'sekunde'; + } else { + result += 'sekundi'; + } + return result; + case 'm': + return withoutSuffix ? 'jedna minuta' : 'jedne minute'; + case 'mm': + if (number === 1) { + result += 'minuta'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'minute'; + } else { + result += 'minuta'; + } + return result; + case 'h': + return withoutSuffix ? 'jedan sat' : 'jednog sata'; + case 'hh': + if (number === 1) { + result += 'sat'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'sata'; + } else { + result += 'sati'; + } + return result; + case 'dd': + if (number === 1) { + result += 'dan'; + } else { + result += 'dana'; + } + return result; + case 'MM': + if (number === 1) { + result += 'mjesec'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'mjeseca'; + } else { + result += 'mjeseci'; + } + return result; + case 'yy': + if (number === 1) { + result += 'godina'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'godine'; + } else { + result += 'godina'; + } + return result; + } + } + + hooks.defineLocale('hr', { + months: { + format: 'siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca'.split( + '_' + ), + standalone: 'siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac'.split( + '_' + ), + }, + monthsShort: 'sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split( + '_' + ), + weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'), + weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD.MM.YYYY', + LL: 'Do MMMM YYYY', + LLL: 'Do MMMM YYYY H:mm', + LLLL: 'dddd, Do MMMM YYYY H:mm', + }, + calendar: { + sameDay: '[danas u] LT', + nextDay: '[sutra u] LT', + nextWeek: function () { + switch (this.day()) { + case 0: + return '[u] [nedjelju] [u] LT'; + case 3: + return '[u] [srijedu] [u] LT'; + case 6: + return '[u] [subotu] [u] LT'; + case 1: + case 2: + case 4: + case 5: + return '[u] dddd [u] LT'; + } + }, + lastDay: '[jučer u] LT', + lastWeek: function () { + switch (this.day()) { + case 0: + return '[prošlu] [nedjelju] [u] LT'; + case 3: + return '[prošlu] [srijedu] [u] LT'; + case 6: + return '[prošle] [subote] [u] LT'; + case 1: + case 2: + case 4: + case 5: + return '[prošli] dddd [u] LT'; + } + }, + sameElse: 'L', + }, + relativeTime: { + future: 'za %s', + past: 'prije %s', + s: 'par sekundi', + ss: translate$3, + m: translate$3, + mm: translate$3, + h: translate$3, + hh: translate$3, + d: 'dan', + dd: translate$3, + M: 'mjesec', + MM: translate$3, + y: 'godinu', + yy: translate$3, + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var weekEndings = 'vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton'.split( + ' ' + ); + function translate$4(number, withoutSuffix, key, isFuture) { + var num = number; + switch (key) { + case 's': + return isFuture || withoutSuffix + ? 'néhány másodperc' + : 'néhány másodperce'; + case 'ss': + return num + (isFuture || withoutSuffix) + ? ' másodperc' + : ' másodperce'; + case 'm': + return 'egy' + (isFuture || withoutSuffix ? ' perc' : ' perce'); + case 'mm': + return num + (isFuture || withoutSuffix ? ' perc' : ' perce'); + case 'h': + return 'egy' + (isFuture || withoutSuffix ? ' óra' : ' órája'); + case 'hh': + return num + (isFuture || withoutSuffix ? ' óra' : ' órája'); + case 'd': + return 'egy' + (isFuture || withoutSuffix ? ' nap' : ' napja'); + case 'dd': + return num + (isFuture || withoutSuffix ? ' nap' : ' napja'); + case 'M': + return 'egy' + (isFuture || withoutSuffix ? ' hónap' : ' hónapja'); + case 'MM': + return num + (isFuture || withoutSuffix ? ' hónap' : ' hónapja'); + case 'y': + return 'egy' + (isFuture || withoutSuffix ? ' év' : ' éve'); + case 'yy': + return num + (isFuture || withoutSuffix ? ' év' : ' éve'); + } + return ''; + } + function week(isFuture) { + return ( + (isFuture ? '' : '[múlt] ') + + '[' + + weekEndings[this.day()] + + '] LT[-kor]' + ); + } + + hooks.defineLocale('hu', { + months: 'január_február_március_április_május_június_július_augusztus_szeptember_október_november_december'.split( + '_' + ), + monthsShort: 'jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec'.split( + '_' + ), + weekdays: 'vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat'.split('_'), + weekdaysShort: 'vas_hét_kedd_sze_csüt_pén_szo'.split('_'), + weekdaysMin: 'v_h_k_sze_cs_p_szo'.split('_'), + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'YYYY.MM.DD.', + LL: 'YYYY. MMMM D.', + LLL: 'YYYY. MMMM D. H:mm', + LLLL: 'YYYY. MMMM D., dddd H:mm', + }, + meridiemParse: /de|du/i, + isPM: function (input) { + return input.charAt(1).toLowerCase() === 'u'; + }, + meridiem: function (hours, minutes, isLower) { + if (hours < 12) { + return isLower === true ? 'de' : 'DE'; + } else { + return isLower === true ? 'du' : 'DU'; + } + }, + calendar: { + sameDay: '[ma] LT[-kor]', + nextDay: '[holnap] LT[-kor]', + nextWeek: function () { + return week.call(this, true); + }, + lastDay: '[tegnap] LT[-kor]', + lastWeek: function () { + return week.call(this, false); + }, + sameElse: 'L', + }, + relativeTime: { + future: '%s múlva', + past: '%s', + s: translate$4, + ss: translate$4, + m: translate$4, + mm: translate$4, + h: translate$4, + hh: translate$4, + d: translate$4, + dd: translate$4, + M: translate$4, + MM: translate$4, + y: translate$4, + yy: translate$4, + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('hy-am', { + months: { + format: 'հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի'.split( + '_' + ), + standalone: 'հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր'.split( + '_' + ), + }, + monthsShort: 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_'), + weekdays: 'կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ'.split( + '_' + ), + weekdaysShort: 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'), + weekdaysMin: 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D MMMM YYYY թ.', + LLL: 'D MMMM YYYY թ., HH:mm', + LLLL: 'dddd, D MMMM YYYY թ., HH:mm', + }, + calendar: { + sameDay: '[այսօր] LT', + nextDay: '[վաղը] LT', + lastDay: '[երեկ] LT', + nextWeek: function () { + return 'dddd [օրը ժամը] LT'; + }, + lastWeek: function () { + return '[անցած] dddd [օրը ժամը] LT'; + }, + sameElse: 'L', + }, + relativeTime: { + future: '%s հետո', + past: '%s առաջ', + s: 'մի քանի վայրկյան', + ss: '%d վայրկյան', + m: 'րոպե', + mm: '%d րոպե', + h: 'ժամ', + hh: '%d ժամ', + d: 'օր', + dd: '%d օր', + M: 'ամիս', + MM: '%d ամիս', + y: 'տարի', + yy: '%d տարի', + }, + meridiemParse: /գիշերվա|առավոտվա|ցերեկվա|երեկոյան/, + isPM: function (input) { + return /^(ցերեկվա|երեկոյան)$/.test(input); + }, + meridiem: function (hour) { + if (hour < 4) { + return 'գիշերվա'; + } else if (hour < 12) { + return 'առավոտվա'; + } else if (hour < 17) { + return 'ցերեկվա'; + } else { + return 'երեկոյան'; + } + }, + dayOfMonthOrdinalParse: /\d{1,2}|\d{1,2}-(ին|րդ)/, + ordinal: function (number, period) { + switch (period) { + case 'DDD': + case 'w': + case 'W': + case 'DDDo': + if (number === 1) { + return number + '-ին'; + } + return number + '-րդ'; + default: + return number; + } + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('id', { + months: 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember'.split( + '_' + ), + monthsShort: 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des'.split('_'), + weekdays: 'Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu'.split('_'), + weekdaysShort: 'Min_Sen_Sel_Rab_Kam_Jum_Sab'.split('_'), + weekdaysMin: 'Mg_Sn_Sl_Rb_Km_Jm_Sb'.split('_'), + longDateFormat: { + LT: 'HH.mm', + LTS: 'HH.mm.ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY [pukul] HH.mm', + LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm', + }, + meridiemParse: /pagi|siang|sore|malam/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'pagi') { + return hour; + } else if (meridiem === 'siang') { + return hour >= 11 ? hour : hour + 12; + } else if (meridiem === 'sore' || meridiem === 'malam') { + return hour + 12; + } + }, + meridiem: function (hours, minutes, isLower) { + if (hours < 11) { + return 'pagi'; + } else if (hours < 15) { + return 'siang'; + } else if (hours < 19) { + return 'sore'; + } else { + return 'malam'; + } + }, + calendar: { + sameDay: '[Hari ini pukul] LT', + nextDay: '[Besok pukul] LT', + nextWeek: 'dddd [pukul] LT', + lastDay: '[Kemarin pukul] LT', + lastWeek: 'dddd [lalu pukul] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'dalam %s', + past: '%s yang lalu', + s: 'beberapa detik', + ss: '%d detik', + m: 'semenit', + mm: '%d menit', + h: 'sejam', + hh: '%d jam', + d: 'sehari', + dd: '%d hari', + M: 'sebulan', + MM: '%d bulan', + y: 'setahun', + yy: '%d tahun', + }, + week: { + dow: 0, // Sunday is the first day of the week. + doy: 6, // The week that contains Jan 6th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + function plural$2(n) { + if (n % 100 === 11) { + return true; + } else if (n % 10 === 1) { + return false; + } + return true; + } + function translate$5(number, withoutSuffix, key, isFuture) { + var result = number + ' '; + switch (key) { + case 's': + return withoutSuffix || isFuture + ? 'nokkrar sekúndur' + : 'nokkrum sekúndum'; + case 'ss': + if (plural$2(number)) { + return ( + result + + (withoutSuffix || isFuture ? 'sekúndur' : 'sekúndum') + ); + } + return result + 'sekúnda'; + case 'm': + return withoutSuffix ? 'mínúta' : 'mínútu'; + case 'mm': + if (plural$2(number)) { + return ( + result + (withoutSuffix || isFuture ? 'mínútur' : 'mínútum') + ); + } else if (withoutSuffix) { + return result + 'mínúta'; + } + return result + 'mínútu'; + case 'hh': + if (plural$2(number)) { + return ( + result + + (withoutSuffix || isFuture + ? 'klukkustundir' + : 'klukkustundum') + ); + } + return result + 'klukkustund'; + case 'd': + if (withoutSuffix) { + return 'dagur'; + } + return isFuture ? 'dag' : 'degi'; + case 'dd': + if (plural$2(number)) { + if (withoutSuffix) { + return result + 'dagar'; + } + return result + (isFuture ? 'daga' : 'dögum'); + } else if (withoutSuffix) { + return result + 'dagur'; + } + return result + (isFuture ? 'dag' : 'degi'); + case 'M': + if (withoutSuffix) { + return 'mánuður'; + } + return isFuture ? 'mánuð' : 'mánuði'; + case 'MM': + if (plural$2(number)) { + if (withoutSuffix) { + return result + 'mánuðir'; + } + return result + (isFuture ? 'mánuði' : 'mánuðum'); + } else if (withoutSuffix) { + return result + 'mánuður'; + } + return result + (isFuture ? 'mánuð' : 'mánuði'); + case 'y': + return withoutSuffix || isFuture ? 'ár' : 'ári'; + case 'yy': + if (plural$2(number)) { + return result + (withoutSuffix || isFuture ? 'ár' : 'árum'); + } + return result + (withoutSuffix || isFuture ? 'ár' : 'ári'); + } + } + + hooks.defineLocale('is', { + months: 'janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember'.split( + '_' + ), + monthsShort: 'jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des'.split('_'), + weekdays: 'sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur'.split( + '_' + ), + weekdaysShort: 'sun_mán_þri_mið_fim_fös_lau'.split('_'), + weekdaysMin: 'Su_Má_Þr_Mi_Fi_Fö_La'.split('_'), + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY [kl.] H:mm', + LLLL: 'dddd, D. MMMM YYYY [kl.] H:mm', + }, + calendar: { + sameDay: '[í dag kl.] LT', + nextDay: '[á morgun kl.] LT', + nextWeek: 'dddd [kl.] LT', + lastDay: '[í gær kl.] LT', + lastWeek: '[síðasta] dddd [kl.] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'eftir %s', + past: 'fyrir %s síðan', + s: translate$5, + ss: translate$5, + m: translate$5, + mm: translate$5, + h: 'klukkustund', + hh: translate$5, + d: translate$5, + dd: translate$5, + M: translate$5, + MM: translate$5, + y: translate$5, + yy: translate$5, + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('it-ch', { + months: 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split( + '_' + ), + monthsShort: 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'), + weekdays: 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split( + '_' + ), + weekdaysShort: 'dom_lun_mar_mer_gio_ven_sab'.split('_'), + weekdaysMin: 'do_lu_ma_me_gi_ve_sa'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Oggi alle] LT', + nextDay: '[Domani alle] LT', + nextWeek: 'dddd [alle] LT', + lastDay: '[Ieri alle] LT', + lastWeek: function () { + switch (this.day()) { + case 0: + return '[la scorsa] dddd [alle] LT'; + default: + return '[lo scorso] dddd [alle] LT'; + } + }, + sameElse: 'L', + }, + relativeTime: { + future: function (s) { + return (/^[0-9].+$/.test(s) ? 'tra' : 'in') + ' ' + s; + }, + past: '%s fa', + s: 'alcuni secondi', + ss: '%d secondi', + m: 'un minuto', + mm: '%d minuti', + h: "un'ora", + hh: '%d ore', + d: 'un giorno', + dd: '%d giorni', + M: 'un mese', + MM: '%d mesi', + y: 'un anno', + yy: '%d anni', + }, + dayOfMonthOrdinalParse: /\d{1,2}º/, + ordinal: '%dº', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('it', { + months: 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split( + '_' + ), + monthsShort: 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'), + weekdays: 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split( + '_' + ), + weekdaysShort: 'dom_lun_mar_mer_gio_ven_sab'.split('_'), + weekdaysMin: 'do_lu_ma_me_gi_ve_sa'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: function () { + return ( + '[Oggi a' + + (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : "ll'") + + ']LT' + ); + }, + nextDay: function () { + return ( + '[Domani a' + + (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : "ll'") + + ']LT' + ); + }, + nextWeek: function () { + return ( + 'dddd [a' + + (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : "ll'") + + ']LT' + ); + }, + lastDay: function () { + return ( + '[Ieri a' + + (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : "ll'") + + ']LT' + ); + }, + lastWeek: function () { + switch (this.day()) { + case 0: + return ( + '[La scorsa] dddd [a' + + (this.hours() > 1 + ? 'lle ' + : this.hours() === 0 + ? ' ' + : "ll'") + + ']LT' + ); + default: + return ( + '[Lo scorso] dddd [a' + + (this.hours() > 1 + ? 'lle ' + : this.hours() === 0 + ? ' ' + : "ll'") + + ']LT' + ); + } + }, + sameElse: 'L', + }, + relativeTime: { + future: 'tra %s', + past: '%s fa', + s: 'alcuni secondi', + ss: '%d secondi', + m: 'un minuto', + mm: '%d minuti', + h: "un'ora", + hh: '%d ore', + d: 'un giorno', + dd: '%d giorni', + M: 'un mese', + MM: '%d mesi', + y: 'un anno', + yy: '%d anni', + }, + dayOfMonthOrdinalParse: /\d{1,2}º/, + ordinal: '%dº', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('ja', { + eras: [ + { + since: '2019-05-01', + offset: 1, + name: '令和', + narrow: '㋿', + abbr: 'R', + }, + { + since: '1989-01-08', + until: '2019-04-30', + offset: 1, + name: '平成', + narrow: '㍻', + abbr: 'H', + }, + { + since: '1926-12-25', + until: '1989-01-07', + offset: 1, + name: '昭和', + narrow: '㍼', + abbr: 'S', + }, + { + since: '1912-07-30', + until: '1926-12-24', + offset: 1, + name: '大正', + narrow: '㍽', + abbr: 'T', + }, + { + since: '1873-01-01', + until: '1912-07-29', + offset: 6, + name: '明治', + narrow: '㍾', + abbr: 'M', + }, + { + since: '0001-01-01', + until: '1873-12-31', + offset: 1, + name: '西暦', + narrow: 'AD', + abbr: 'AD', + }, + { + since: '0000-12-31', + until: -Infinity, + offset: 1, + name: '紀元前', + narrow: 'BC', + abbr: 'BC', + }, + ], + eraYearOrdinalRegex: /(元|\d+)年/, + eraYearOrdinalParse: function (input, match) { + return match[1] === '元' ? 1 : parseInt(match[1] || input, 10); + }, + months: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'), + monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split( + '_' + ), + weekdays: '日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日'.split('_'), + weekdaysShort: '日_月_火_水_木_金_土'.split('_'), + weekdaysMin: '日_月_火_水_木_金_土'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'YYYY/MM/DD', + LL: 'YYYY年M月D日', + LLL: 'YYYY年M月D日 HH:mm', + LLLL: 'YYYY年M月D日 dddd HH:mm', + l: 'YYYY/MM/DD', + ll: 'YYYY年M月D日', + lll: 'YYYY年M月D日 HH:mm', + llll: 'YYYY年M月D日(ddd) HH:mm', + }, + meridiemParse: /午前|午後/i, + isPM: function (input) { + return input === '午後'; + }, + meridiem: function (hour, minute, isLower) { + if (hour < 12) { + return '午前'; + } else { + return '午後'; + } + }, + calendar: { + sameDay: '[今日] LT', + nextDay: '[明日] LT', + nextWeek: function (now) { + if (now.week() !== this.week()) { + return '[来週]dddd LT'; + } else { + return 'dddd LT'; + } + }, + lastDay: '[昨日] LT', + lastWeek: function (now) { + if (this.week() !== now.week()) { + return '[先週]dddd LT'; + } else { + return 'dddd LT'; + } + }, + sameElse: 'L', + }, + dayOfMonthOrdinalParse: /\d{1,2}日/, + ordinal: function (number, period) { + switch (period) { + case 'y': + return number === 1 ? '元年' : number + '年'; + case 'd': + case 'D': + case 'DDD': + return number + '日'; + default: + return number; + } + }, + relativeTime: { + future: '%s後', + past: '%s前', + s: '数秒', + ss: '%d秒', + m: '1分', + mm: '%d分', + h: '1時間', + hh: '%d時間', + d: '1日', + dd: '%d日', + M: '1ヶ月', + MM: '%dヶ月', + y: '1年', + yy: '%d年', + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('jv', { + months: 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember'.split( + '_' + ), + monthsShort: 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des'.split('_'), + weekdays: 'Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu'.split('_'), + weekdaysShort: 'Min_Sen_Sel_Reb_Kem_Jem_Sep'.split('_'), + weekdaysMin: 'Mg_Sn_Sl_Rb_Km_Jm_Sp'.split('_'), + longDateFormat: { + LT: 'HH.mm', + LTS: 'HH.mm.ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY [pukul] HH.mm', + LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm', + }, + meridiemParse: /enjing|siyang|sonten|ndalu/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'enjing') { + return hour; + } else if (meridiem === 'siyang') { + return hour >= 11 ? hour : hour + 12; + } else if (meridiem === 'sonten' || meridiem === 'ndalu') { + return hour + 12; + } + }, + meridiem: function (hours, minutes, isLower) { + if (hours < 11) { + return 'enjing'; + } else if (hours < 15) { + return 'siyang'; + } else if (hours < 19) { + return 'sonten'; + } else { + return 'ndalu'; + } + }, + calendar: { + sameDay: '[Dinten puniko pukul] LT', + nextDay: '[Mbenjang pukul] LT', + nextWeek: 'dddd [pukul] LT', + lastDay: '[Kala wingi pukul] LT', + lastWeek: 'dddd [kepengker pukul] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'wonten ing %s', + past: '%s ingkang kepengker', + s: 'sawetawis detik', + ss: '%d detik', + m: 'setunggal menit', + mm: '%d menit', + h: 'setunggal jam', + hh: '%d jam', + d: 'sedinten', + dd: '%d dinten', + M: 'sewulan', + MM: '%d wulan', + y: 'setaun', + yy: '%d taun', + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('ka', { + months: 'იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი'.split( + '_' + ), + monthsShort: 'იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ'.split('_'), + weekdays: { + standalone: 'კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი'.split( + '_' + ), + format: 'კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს'.split( + '_' + ), + isFormat: /(წინა|შემდეგ)/, + }, + weekdaysShort: 'კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ'.split('_'), + weekdaysMin: 'კვ_ორ_სა_ოთ_ხუ_პა_შა'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[დღეს] LT[-ზე]', + nextDay: '[ხვალ] LT[-ზე]', + lastDay: '[გუშინ] LT[-ზე]', + nextWeek: '[შემდეგ] dddd LT[-ზე]', + lastWeek: '[წინა] dddd LT-ზე', + sameElse: 'L', + }, + relativeTime: { + future: function (s) { + return s.replace(/(წამ|წუთ|საათ|წელ|დღ|თვ)(ი|ე)/, function ( + $0, + $1, + $2 + ) { + return $2 === 'ი' ? $1 + 'ში' : $1 + $2 + 'ში'; + }); + }, + past: function (s) { + if (/(წამი|წუთი|საათი|დღე|თვე)/.test(s)) { + return s.replace(/(ი|ე)$/, 'ის წინ'); + } + if (/წელი/.test(s)) { + return s.replace(/წელი$/, 'წლის წინ'); + } + return s; + }, + s: 'რამდენიმე წამი', + ss: '%d წამი', + m: 'წუთი', + mm: '%d წუთი', + h: 'საათი', + hh: '%d საათი', + d: 'დღე', + dd: '%d დღე', + M: 'თვე', + MM: '%d თვე', + y: 'წელი', + yy: '%d წელი', + }, + dayOfMonthOrdinalParse: /0|1-ლი|მე-\d{1,2}|\d{1,2}-ე/, + ordinal: function (number) { + if (number === 0) { + return number; + } + if (number === 1) { + return number + '-ლი'; + } + if ( + number < 20 || + (number <= 100 && number % 20 === 0) || + number % 100 === 0 + ) { + return 'მე-' + number; + } + return number + '-ე'; + }, + week: { + dow: 1, + doy: 7, + }, + }); + + //! moment.js locale configuration + + var suffixes$1 = { + 0: '-ші', + 1: '-ші', + 2: '-ші', + 3: '-ші', + 4: '-ші', + 5: '-ші', + 6: '-шы', + 7: '-ші', + 8: '-ші', + 9: '-шы', + 10: '-шы', + 20: '-шы', + 30: '-шы', + 40: '-шы', + 50: '-ші', + 60: '-шы', + 70: '-ші', + 80: '-ші', + 90: '-шы', + 100: '-ші', + }; + + hooks.defineLocale('kk', { + months: 'қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан'.split( + '_' + ), + monthsShort: 'қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел'.split('_'), + weekdays: 'жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі'.split( + '_' + ), + weekdaysShort: 'жек_дүй_сей_сәр_бей_жұм_сен'.split('_'), + weekdaysMin: 'жк_дй_сй_ср_бй_жм_сн'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Бүгін сағат] LT', + nextDay: '[Ертең сағат] LT', + nextWeek: 'dddd [сағат] LT', + lastDay: '[Кеше сағат] LT', + lastWeek: '[Өткен аптаның] dddd [сағат] LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s ішінде', + past: '%s бұрын', + s: 'бірнеше секунд', + ss: '%d секунд', + m: 'бір минут', + mm: '%d минут', + h: 'бір сағат', + hh: '%d сағат', + d: 'бір күн', + dd: '%d күн', + M: 'бір ай', + MM: '%d ай', + y: 'бір жыл', + yy: '%d жыл', + }, + dayOfMonthOrdinalParse: /\d{1,2}-(ші|шы)/, + ordinal: function (number) { + var a = number % 10, + b = number >= 100 ? 100 : null; + return number + (suffixes$1[number] || suffixes$1[a] || suffixes$1[b]); + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var symbolMap$8 = { + '1': '១', + '2': '២', + '3': '៣', + '4': '៤', + '5': '៥', + '6': '៦', + '7': '៧', + '8': '៨', + '9': '៩', + '0': '០', + }, + numberMap$7 = { + '១': '1', + '២': '2', + '៣': '3', + '៤': '4', + '៥': '5', + '៦': '6', + '៧': '7', + '៨': '8', + '៩': '9', + '០': '0', + }; + + hooks.defineLocale('km', { + months: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split( + '_' + ), + monthsShort: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split( + '_' + ), + weekdays: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'), + weekdaysShort: 'អា_ច_អ_ព_ព្រ_សុ_ស'.split('_'), + weekdaysMin: 'អា_ច_អ_ព_ព្រ_សុ_ស'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + meridiemParse: /ព្រឹក|ល្ងាច/, + isPM: function (input) { + return input === 'ល្ងាច'; + }, + meridiem: function (hour, minute, isLower) { + if (hour < 12) { + return 'ព្រឹក'; + } else { + return 'ល្ងាច'; + } + }, + calendar: { + sameDay: '[ថ្ងៃនេះ ម៉ោង] LT', + nextDay: '[ស្អែក ម៉ោង] LT', + nextWeek: 'dddd [ម៉ោង] LT', + lastDay: '[ម្សិលមិញ ម៉ោង] LT', + lastWeek: 'dddd [សប្តាហ៍មុន] [ម៉ោង] LT', + sameElse: 'L', + }, + relativeTime: { + future: '%sទៀត', + past: '%sមុន', + s: 'ប៉ុន្មានវិនាទី', + ss: '%d វិនាទី', + m: 'មួយនាទី', + mm: '%d នាទី', + h: 'មួយម៉ោង', + hh: '%d ម៉ោង', + d: 'មួយថ្ងៃ', + dd: '%d ថ្ងៃ', + M: 'មួយខែ', + MM: '%d ខែ', + y: 'មួយឆ្នាំ', + yy: '%d ឆ្នាំ', + }, + dayOfMonthOrdinalParse: /ទី\d{1,2}/, + ordinal: 'ទី%d', + preparse: function (string) { + return string.replace(/[១២៣៤៥៦៧៨៩០]/g, function (match) { + return numberMap$7[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$8[match]; + }); + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var symbolMap$9 = { + '1': '೧', + '2': '೨', + '3': '೩', + '4': '೪', + '5': '೫', + '6': '೬', + '7': '೭', + '8': '೮', + '9': '೯', + '0': '೦', + }, + numberMap$8 = { + '೧': '1', + '೨': '2', + '೩': '3', + '೪': '4', + '೫': '5', + '೬': '6', + '೭': '7', + '೮': '8', + '೯': '9', + '೦': '0', + }; + + hooks.defineLocale('kn', { + months: 'ಜನವರಿ_ಫೆಬ್ರವರಿ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬರ್_ಅಕ್ಟೋಬರ್_ನವೆಂಬರ್_ಡಿಸೆಂಬರ್'.split( + '_' + ), + monthsShort: 'ಜನ_ಫೆಬ್ರ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂ_ಅಕ್ಟೋ_ನವೆಂ_ಡಿಸೆಂ'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'ಭಾನುವಾರ_ಸೋಮವಾರ_ಮಂಗಳವಾರ_ಬುಧವಾರ_ಗುರುವಾರ_ಶುಕ್ರವಾರ_ಶನಿವಾರ'.split( + '_' + ), + weekdaysShort: 'ಭಾನು_ಸೋಮ_ಮಂಗಳ_ಬುಧ_ಗುರು_ಶುಕ್ರ_ಶನಿ'.split('_'), + weekdaysMin: 'ಭಾ_ಸೋ_ಮಂ_ಬು_ಗು_ಶು_ಶ'.split('_'), + longDateFormat: { + LT: 'A h:mm', + LTS: 'A h:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY, A h:mm', + LLLL: 'dddd, D MMMM YYYY, A h:mm', + }, + calendar: { + sameDay: '[ಇಂದು] LT', + nextDay: '[ನಾಳೆ] LT', + nextWeek: 'dddd, LT', + lastDay: '[ನಿನ್ನೆ] LT', + lastWeek: '[ಕೊನೆಯ] dddd, LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s ನಂತರ', + past: '%s ಹಿಂದೆ', + s: 'ಕೆಲವು ಕ್ಷಣಗಳು', + ss: '%d ಸೆಕೆಂಡುಗಳು', + m: 'ಒಂದು ನಿಮಿಷ', + mm: '%d ನಿಮಿಷ', + h: 'ಒಂದು ಗಂಟೆ', + hh: '%d ಗಂಟೆ', + d: 'ಒಂದು ದಿನ', + dd: '%d ದಿನ', + M: 'ಒಂದು ತಿಂಗಳು', + MM: '%d ತಿಂಗಳು', + y: 'ಒಂದು ವರ್ಷ', + yy: '%d ವರ್ಷ', + }, + preparse: function (string) { + return string.replace(/[೧೨೩೪೫೬೭೮೯೦]/g, function (match) { + return numberMap$8[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$9[match]; + }); + }, + meridiemParse: /ರಾತ್ರಿ|ಬೆಳಿಗ್ಗೆ|ಮಧ್ಯಾಹ್ನ|ಸಂಜೆ/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'ರಾತ್ರಿ') { + return hour < 4 ? hour : hour + 12; + } else if (meridiem === 'ಬೆಳಿಗ್ಗೆ') { + return hour; + } else if (meridiem === 'ಮಧ್ಯಾಹ್ನ') { + return hour >= 10 ? hour : hour + 12; + } else if (meridiem === 'ಸಂಜೆ') { + return hour + 12; + } + }, + meridiem: function (hour, minute, isLower) { + if (hour < 4) { + return 'ರಾತ್ರಿ'; + } else if (hour < 10) { + return 'ಬೆಳಿಗ್ಗೆ'; + } else if (hour < 17) { + return 'ಮಧ್ಯಾಹ್ನ'; + } else if (hour < 20) { + return 'ಸಂಜೆ'; + } else { + return 'ರಾತ್ರಿ'; + } + }, + dayOfMonthOrdinalParse: /\d{1,2}(ನೇ)/, + ordinal: function (number) { + return number + 'ನೇ'; + }, + week: { + dow: 0, // Sunday is the first day of the week. + doy: 6, // The week that contains Jan 6th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('ko', { + months: '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'), + monthsShort: '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split( + '_' + ), + weekdays: '일요일_월요일_화요일_수요일_목요일_금요일_토요일'.split('_'), + weekdaysShort: '일_월_화_수_목_금_토'.split('_'), + weekdaysMin: '일_월_화_수_목_금_토'.split('_'), + longDateFormat: { + LT: 'A h:mm', + LTS: 'A h:mm:ss', + L: 'YYYY.MM.DD.', + LL: 'YYYY년 MMMM D일', + LLL: 'YYYY년 MMMM D일 A h:mm', + LLLL: 'YYYY년 MMMM D일 dddd A h:mm', + l: 'YYYY.MM.DD.', + ll: 'YYYY년 MMMM D일', + lll: 'YYYY년 MMMM D일 A h:mm', + llll: 'YYYY년 MMMM D일 dddd A h:mm', + }, + calendar: { + sameDay: '오늘 LT', + nextDay: '내일 LT', + nextWeek: 'dddd LT', + lastDay: '어제 LT', + lastWeek: '지난주 dddd LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s 후', + past: '%s 전', + s: '몇 초', + ss: '%d초', + m: '1분', + mm: '%d분', + h: '한 시간', + hh: '%d시간', + d: '하루', + dd: '%d일', + M: '한 달', + MM: '%d달', + y: '일 년', + yy: '%d년', + }, + dayOfMonthOrdinalParse: /\d{1,2}(일|월|주)/, + ordinal: function (number, period) { + switch (period) { + case 'd': + case 'D': + case 'DDD': + return number + '일'; + case 'M': + return number + '월'; + case 'w': + case 'W': + return number + '주'; + default: + return number; + } + }, + meridiemParse: /오전|오후/, + isPM: function (token) { + return token === '오후'; + }, + meridiem: function (hour, minute, isUpper) { + return hour < 12 ? '오전' : '오후'; + }, + }); + + //! moment.js locale configuration + + var symbolMap$a = { + '1': '١', + '2': '٢', + '3': '٣', + '4': '٤', + '5': '٥', + '6': '٦', + '7': '٧', + '8': '٨', + '9': '٩', + '0': '٠', + }, + numberMap$9 = { + '١': '1', + '٢': '2', + '٣': '3', + '٤': '4', + '٥': '5', + '٦': '6', + '٧': '7', + '٨': '8', + '٩': '9', + '٠': '0', + }, + months$8 = [ + 'کانونی دووەم', + 'شوبات', + 'ئازار', + 'نیسان', + 'ئایار', + 'حوزەیران', + 'تەمموز', + 'ئاب', + 'ئەیلوول', + 'تشرینی یەكەم', + 'تشرینی دووەم', + 'كانونی یەکەم', + ]; + + hooks.defineLocale('ku', { + months: months$8, + monthsShort: months$8, + weekdays: 'یه‌كشه‌ممه‌_دووشه‌ممه‌_سێشه‌ممه‌_چوارشه‌ممه‌_پێنجشه‌ممه‌_هه‌ینی_شه‌ممه‌'.split( + '_' + ), + weekdaysShort: 'یه‌كشه‌م_دووشه‌م_سێشه‌م_چوارشه‌م_پێنجشه‌م_هه‌ینی_شه‌ممه‌'.split( + '_' + ), + weekdaysMin: 'ی_د_س_چ_پ_ه_ش'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + meridiemParse: /ئێواره‌|به‌یانی/, + isPM: function (input) { + return /ئێواره‌/.test(input); + }, + meridiem: function (hour, minute, isLower) { + if (hour < 12) { + return 'به‌یانی'; + } else { + return 'ئێواره‌'; + } + }, + calendar: { + sameDay: '[ئه‌مرۆ كاتژمێر] LT', + nextDay: '[به‌یانی كاتژمێر] LT', + nextWeek: 'dddd [كاتژمێر] LT', + lastDay: '[دوێنێ كاتژمێر] LT', + lastWeek: 'dddd [كاتژمێر] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'له‌ %s', + past: '%s', + s: 'چه‌ند چركه‌یه‌ك', + ss: 'چركه‌ %d', + m: 'یه‌ك خوله‌ك', + mm: '%d خوله‌ك', + h: 'یه‌ك كاتژمێر', + hh: '%d كاتژمێر', + d: 'یه‌ك ڕۆژ', + dd: '%d ڕۆژ', + M: 'یه‌ك مانگ', + MM: '%d مانگ', + y: 'یه‌ك ساڵ', + yy: '%d ساڵ', + }, + preparse: function (string) { + return string + .replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) { + return numberMap$9[match]; + }) + .replace(/،/g, ','); + }, + postformat: function (string) { + return string + .replace(/\d/g, function (match) { + return symbolMap$a[match]; + }) + .replace(/,/g, '،'); + }, + week: { + dow: 6, // Saturday is the first day of the week. + doy: 12, // The week that contains Jan 12th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var suffixes$2 = { + 0: '-чү', + 1: '-чи', + 2: '-чи', + 3: '-чү', + 4: '-чү', + 5: '-чи', + 6: '-чы', + 7: '-чи', + 8: '-чи', + 9: '-чу', + 10: '-чу', + 20: '-чы', + 30: '-чу', + 40: '-чы', + 50: '-чү', + 60: '-чы', + 70: '-чи', + 80: '-чи', + 90: '-чу', + 100: '-чү', + }; + + hooks.defineLocale('ky', { + months: 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split( + '_' + ), + monthsShort: 'янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек'.split( + '_' + ), + weekdays: 'Жекшемби_Дүйшөмбү_Шейшемби_Шаршемби_Бейшемби_Жума_Ишемби'.split( + '_' + ), + weekdaysShort: 'Жек_Дүй_Шей_Шар_Бей_Жум_Ише'.split('_'), + weekdaysMin: 'Жк_Дй_Шй_Шр_Бй_Жм_Иш'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Бүгүн саат] LT', + nextDay: '[Эртең саат] LT', + nextWeek: 'dddd [саат] LT', + lastDay: '[Кечээ саат] LT', + lastWeek: '[Өткөн аптанын] dddd [күнү] [саат] LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s ичинде', + past: '%s мурун', + s: 'бирнече секунд', + ss: '%d секунд', + m: 'бир мүнөт', + mm: '%d мүнөт', + h: 'бир саат', + hh: '%d саат', + d: 'бир күн', + dd: '%d күн', + M: 'бир ай', + MM: '%d ай', + y: 'бир жыл', + yy: '%d жыл', + }, + dayOfMonthOrdinalParse: /\d{1,2}-(чи|чы|чү|чу)/, + ordinal: function (number) { + var a = number % 10, + b = number >= 100 ? 100 : null; + return number + (suffixes$2[number] || suffixes$2[a] || suffixes$2[b]); + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + function processRelativeTime$6(number, withoutSuffix, key, isFuture) { + var format = { + m: ['eng Minutt', 'enger Minutt'], + h: ['eng Stonn', 'enger Stonn'], + d: ['een Dag', 'engem Dag'], + M: ['ee Mount', 'engem Mount'], + y: ['ee Joer', 'engem Joer'], + }; + return withoutSuffix ? format[key][0] : format[key][1]; + } + function processFutureTime(string) { + var number = string.substr(0, string.indexOf(' ')); + if (eifelerRegelAppliesToNumber(number)) { + return 'a ' + string; + } + return 'an ' + string; + } + function processPastTime(string) { + var number = string.substr(0, string.indexOf(' ')); + if (eifelerRegelAppliesToNumber(number)) { + return 'viru ' + string; + } + return 'virun ' + string; + } + /** + * Returns true if the word before the given number loses the '-n' ending. + * e.g. 'an 10 Deeg' but 'a 5 Deeg' + * + * @param number {integer} + * @returns {boolean} + */ + function eifelerRegelAppliesToNumber(number) { + number = parseInt(number, 10); + if (isNaN(number)) { + return false; + } + if (number < 0) { + // Negative Number --> always true + return true; + } else if (number < 10) { + // Only 1 digit + if (4 <= number && number <= 7) { + return true; + } + return false; + } else if (number < 100) { + // 2 digits + var lastDigit = number % 10, + firstDigit = number / 10; + if (lastDigit === 0) { + return eifelerRegelAppliesToNumber(firstDigit); + } + return eifelerRegelAppliesToNumber(lastDigit); + } else if (number < 10000) { + // 3 or 4 digits --> recursively check first digit + while (number >= 10) { + number = number / 10; + } + return eifelerRegelAppliesToNumber(number); + } else { + // Anything larger than 4 digits: recursively check first n-3 digits + number = number / 1000; + return eifelerRegelAppliesToNumber(number); + } + } + + hooks.defineLocale('lb', { + months: 'Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember'.split( + '_' + ), + monthsShort: 'Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg'.split( + '_' + ), + weekdaysShort: 'So._Mé._Dë._Më._Do._Fr._Sa.'.split('_'), + weekdaysMin: 'So_Mé_Dë_Më_Do_Fr_Sa'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'H:mm [Auer]', + LTS: 'H:mm:ss [Auer]', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY H:mm [Auer]', + LLLL: 'dddd, D. MMMM YYYY H:mm [Auer]', + }, + calendar: { + sameDay: '[Haut um] LT', + sameElse: 'L', + nextDay: '[Muer um] LT', + nextWeek: 'dddd [um] LT', + lastDay: '[Gëschter um] LT', + lastWeek: function () { + // Different date string for 'Dënschdeg' (Tuesday) and 'Donneschdeg' (Thursday) due to phonological rule + switch (this.day()) { + case 2: + case 4: + return '[Leschten] dddd [um] LT'; + default: + return '[Leschte] dddd [um] LT'; + } + }, + }, + relativeTime: { + future: processFutureTime, + past: processPastTime, + s: 'e puer Sekonnen', + ss: '%d Sekonnen', + m: processRelativeTime$6, + mm: '%d Minutten', + h: processRelativeTime$6, + hh: '%d Stonnen', + d: processRelativeTime$6, + dd: '%d Deeg', + M: processRelativeTime$6, + MM: '%d Méint', + y: processRelativeTime$6, + yy: '%d Joer', + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('lo', { + months: 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split( + '_' + ), + monthsShort: 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split( + '_' + ), + weekdays: 'ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'), + weekdaysShort: 'ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'), + weekdaysMin: 'ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'ວັນdddd D MMMM YYYY HH:mm', + }, + meridiemParse: /ຕອນເຊົ້າ|ຕອນແລງ/, + isPM: function (input) { + return input === 'ຕອນແລງ'; + }, + meridiem: function (hour, minute, isLower) { + if (hour < 12) { + return 'ຕອນເຊົ້າ'; + } else { + return 'ຕອນແລງ'; + } + }, + calendar: { + sameDay: '[ມື້ນີ້ເວລາ] LT', + nextDay: '[ມື້ອື່ນເວລາ] LT', + nextWeek: '[ວັນ]dddd[ໜ້າເວລາ] LT', + lastDay: '[ມື້ວານນີ້ເວລາ] LT', + lastWeek: '[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'ອີກ %s', + past: '%sຜ່ານມາ', + s: 'ບໍ່ເທົ່າໃດວິນາທີ', + ss: '%d ວິນາທີ', + m: '1 ນາທີ', + mm: '%d ນາທີ', + h: '1 ຊົ່ວໂມງ', + hh: '%d ຊົ່ວໂມງ', + d: '1 ມື້', + dd: '%d ມື້', + M: '1 ເດືອນ', + MM: '%d ເດືອນ', + y: '1 ປີ', + yy: '%d ປີ', + }, + dayOfMonthOrdinalParse: /(ທີ່)\d{1,2}/, + ordinal: function (number) { + return 'ທີ່' + number; + }, + }); + + //! moment.js locale configuration + + var units = { + ss: 'sekundė_sekundžių_sekundes', + m: 'minutė_minutės_minutę', + mm: 'minutės_minučių_minutes', + h: 'valanda_valandos_valandą', + hh: 'valandos_valandų_valandas', + d: 'diena_dienos_dieną', + dd: 'dienos_dienų_dienas', + M: 'mėnuo_mėnesio_mėnesį', + MM: 'mėnesiai_mėnesių_mėnesius', + y: 'metai_metų_metus', + yy: 'metai_metų_metus', + }; + function translateSeconds(number, withoutSuffix, key, isFuture) { + if (withoutSuffix) { + return 'kelios sekundės'; + } else { + return isFuture ? 'kelių sekundžių' : 'kelias sekundes'; + } + } + function translateSingular(number, withoutSuffix, key, isFuture) { + return withoutSuffix + ? forms(key)[0] + : isFuture + ? forms(key)[1] + : forms(key)[2]; + } + function special(number) { + return number % 10 === 0 || (number > 10 && number < 20); + } + function forms(key) { + return units[key].split('_'); + } + function translate$6(number, withoutSuffix, key, isFuture) { + var result = number + ' '; + if (number === 1) { + return ( + result + translateSingular(number, withoutSuffix, key[0], isFuture) + ); + } else if (withoutSuffix) { + return result + (special(number) ? forms(key)[1] : forms(key)[0]); + } else { + if (isFuture) { + return result + forms(key)[1]; + } else { + return result + (special(number) ? forms(key)[1] : forms(key)[2]); + } + } + } + hooks.defineLocale('lt', { + months: { + format: 'sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio'.split( + '_' + ), + standalone: 'sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis'.split( + '_' + ), + isFormat: /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?|MMMM?(\[[^\[\]]*\]|\s)+D[oD]?/, + }, + monthsShort: 'sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd'.split('_'), + weekdays: { + format: 'sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį'.split( + '_' + ), + standalone: 'sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis'.split( + '_' + ), + isFormat: /dddd HH:mm/, + }, + weekdaysShort: 'Sek_Pir_Ant_Tre_Ket_Pen_Šeš'.split('_'), + weekdaysMin: 'S_P_A_T_K_Pn_Š'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'YYYY-MM-DD', + LL: 'YYYY [m.] MMMM D [d.]', + LLL: 'YYYY [m.] MMMM D [d.], HH:mm [val.]', + LLLL: 'YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]', + l: 'YYYY-MM-DD', + ll: 'YYYY [m.] MMMM D [d.]', + lll: 'YYYY [m.] MMMM D [d.], HH:mm [val.]', + llll: 'YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]', + }, + calendar: { + sameDay: '[Šiandien] LT', + nextDay: '[Rytoj] LT', + nextWeek: 'dddd LT', + lastDay: '[Vakar] LT', + lastWeek: '[Praėjusį] dddd LT', + sameElse: 'L', + }, + relativeTime: { + future: 'po %s', + past: 'prieš %s', + s: translateSeconds, + ss: translate$6, + m: translateSingular, + mm: translate$6, + h: translateSingular, + hh: translate$6, + d: translateSingular, + dd: translate$6, + M: translateSingular, + MM: translate$6, + y: translateSingular, + yy: translate$6, + }, + dayOfMonthOrdinalParse: /\d{1,2}-oji/, + ordinal: function (number) { + return number + '-oji'; + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var units$1 = { + ss: 'sekundes_sekundēm_sekunde_sekundes'.split('_'), + m: 'minūtes_minūtēm_minūte_minūtes'.split('_'), + mm: 'minūtes_minūtēm_minūte_minūtes'.split('_'), + h: 'stundas_stundām_stunda_stundas'.split('_'), + hh: 'stundas_stundām_stunda_stundas'.split('_'), + d: 'dienas_dienām_diena_dienas'.split('_'), + dd: 'dienas_dienām_diena_dienas'.split('_'), + M: 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'), + MM: 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'), + y: 'gada_gadiem_gads_gadi'.split('_'), + yy: 'gada_gadiem_gads_gadi'.split('_'), + }; + /** + * @param withoutSuffix boolean true = a length of time; false = before/after a period of time. + */ + function format$1(forms, number, withoutSuffix) { + if (withoutSuffix) { + // E.g. "21 minūte", "3 minūtes". + return number % 10 === 1 && number % 100 !== 11 ? forms[2] : forms[3]; + } else { + // E.g. "21 minūtes" as in "pēc 21 minūtes". + // E.g. "3 minūtēm" as in "pēc 3 minūtēm". + return number % 10 === 1 && number % 100 !== 11 ? forms[0] : forms[1]; + } + } + function relativeTimeWithPlural$1(number, withoutSuffix, key) { + return number + ' ' + format$1(units$1[key], number, withoutSuffix); + } + function relativeTimeWithSingular(number, withoutSuffix, key) { + return format$1(units$1[key], number, withoutSuffix); + } + function relativeSeconds(number, withoutSuffix) { + return withoutSuffix ? 'dažas sekundes' : 'dažām sekundēm'; + } + + hooks.defineLocale('lv', { + months: 'janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris'.split( + '_' + ), + monthsShort: 'jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec'.split('_'), + weekdays: 'svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena'.split( + '_' + ), + weekdaysShort: 'Sv_P_O_T_C_Pk_S'.split('_'), + weekdaysMin: 'Sv_P_O_T_C_Pk_S'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY.', + LL: 'YYYY. [gada] D. MMMM', + LLL: 'YYYY. [gada] D. MMMM, HH:mm', + LLLL: 'YYYY. [gada] D. MMMM, dddd, HH:mm', + }, + calendar: { + sameDay: '[Šodien pulksten] LT', + nextDay: '[Rīt pulksten] LT', + nextWeek: 'dddd [pulksten] LT', + lastDay: '[Vakar pulksten] LT', + lastWeek: '[Pagājušā] dddd [pulksten] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'pēc %s', + past: 'pirms %s', + s: relativeSeconds, + ss: relativeTimeWithPlural$1, + m: relativeTimeWithSingular, + mm: relativeTimeWithPlural$1, + h: relativeTimeWithSingular, + hh: relativeTimeWithPlural$1, + d: relativeTimeWithSingular, + dd: relativeTimeWithPlural$1, + M: relativeTimeWithSingular, + MM: relativeTimeWithPlural$1, + y: relativeTimeWithSingular, + yy: relativeTimeWithPlural$1, + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var translator = { + words: { + //Different grammatical cases + ss: ['sekund', 'sekunda', 'sekundi'], + m: ['jedan minut', 'jednog minuta'], + mm: ['minut', 'minuta', 'minuta'], + h: ['jedan sat', 'jednog sata'], + hh: ['sat', 'sata', 'sati'], + dd: ['dan', 'dana', 'dana'], + MM: ['mjesec', 'mjeseca', 'mjeseci'], + yy: ['godina', 'godine', 'godina'], + }, + correctGrammaticalCase: function (number, wordKey) { + return number === 1 + ? wordKey[0] + : number >= 2 && number <= 4 + ? wordKey[1] + : wordKey[2]; + }, + translate: function (number, withoutSuffix, key) { + var wordKey = translator.words[key]; + if (key.length === 1) { + return withoutSuffix ? wordKey[0] : wordKey[1]; + } else { + return ( + number + + ' ' + + translator.correctGrammaticalCase(number, wordKey) + ); + } + }, + }; + + hooks.defineLocale('me', { + months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split( + '_' + ), + monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split( + '_' + ), + weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'), + weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY H:mm', + LLLL: 'dddd, D. MMMM YYYY H:mm', + }, + calendar: { + sameDay: '[danas u] LT', + nextDay: '[sjutra u] LT', + + nextWeek: function () { + switch (this.day()) { + case 0: + return '[u] [nedjelju] [u] LT'; + case 3: + return '[u] [srijedu] [u] LT'; + case 6: + return '[u] [subotu] [u] LT'; + case 1: + case 2: + case 4: + case 5: + return '[u] dddd [u] LT'; + } + }, + lastDay: '[juče u] LT', + lastWeek: function () { + var lastWeekDays = [ + '[prošle] [nedjelje] [u] LT', + '[prošlog] [ponedjeljka] [u] LT', + '[prošlog] [utorka] [u] LT', + '[prošle] [srijede] [u] LT', + '[prošlog] [četvrtka] [u] LT', + '[prošlog] [petka] [u] LT', + '[prošle] [subote] [u] LT', + ]; + return lastWeekDays[this.day()]; + }, + sameElse: 'L', + }, + relativeTime: { + future: 'za %s', + past: 'prije %s', + s: 'nekoliko sekundi', + ss: translator.translate, + m: translator.translate, + mm: translator.translate, + h: translator.translate, + hh: translator.translate, + d: 'dan', + dd: translator.translate, + M: 'mjesec', + MM: translator.translate, + y: 'godinu', + yy: translator.translate, + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('mi', { + months: 'Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea'.split( + '_' + ), + monthsShort: 'Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki'.split( + '_' + ), + monthsRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i, + monthsStrictRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i, + monthsShortRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i, + monthsShortStrictRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,2}/i, + weekdays: 'Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei'.split('_'), + weekdaysShort: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'), + weekdaysMin: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY [i] HH:mm', + LLLL: 'dddd, D MMMM YYYY [i] HH:mm', + }, + calendar: { + sameDay: '[i teie mahana, i] LT', + nextDay: '[apopo i] LT', + nextWeek: 'dddd [i] LT', + lastDay: '[inanahi i] LT', + lastWeek: 'dddd [whakamutunga i] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'i roto i %s', + past: '%s i mua', + s: 'te hēkona ruarua', + ss: '%d hēkona', + m: 'he meneti', + mm: '%d meneti', + h: 'te haora', + hh: '%d haora', + d: 'he ra', + dd: '%d ra', + M: 'he marama', + MM: '%d marama', + y: 'he tau', + yy: '%d tau', + }, + dayOfMonthOrdinalParse: /\d{1,2}º/, + ordinal: '%dº', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('mk', { + months: 'јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември'.split( + '_' + ), + monthsShort: 'јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек'.split('_'), + weekdays: 'недела_понеделник_вторник_среда_четврток_петок_сабота'.split( + '_' + ), + weekdaysShort: 'нед_пон_вто_сре_чет_пет_саб'.split('_'), + weekdaysMin: 'нe_пo_вт_ср_че_пе_сa'.split('_'), + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'D.MM.YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY H:mm', + LLLL: 'dddd, D MMMM YYYY H:mm', + }, + calendar: { + sameDay: '[Денес во] LT', + nextDay: '[Утре во] LT', + nextWeek: '[Во] dddd [во] LT', + lastDay: '[Вчера во] LT', + lastWeek: function () { + switch (this.day()) { + case 0: + case 3: + case 6: + return '[Изминатата] dddd [во] LT'; + case 1: + case 2: + case 4: + case 5: + return '[Изминатиот] dddd [во] LT'; + } + }, + sameElse: 'L', + }, + relativeTime: { + future: 'за %s', + past: 'пред %s', + s: 'неколку секунди', + ss: '%d секунди', + m: 'една минута', + mm: '%d минути', + h: 'еден час', + hh: '%d часа', + d: 'еден ден', + dd: '%d дена', + M: 'еден месец', + MM: '%d месеци', + y: 'една година', + yy: '%d години', + }, + dayOfMonthOrdinalParse: /\d{1,2}-(ев|ен|ти|ви|ри|ми)/, + ordinal: function (number) { + var lastDigit = number % 10, + last2Digits = number % 100; + if (number === 0) { + return number + '-ев'; + } else if (last2Digits === 0) { + return number + '-ен'; + } else if (last2Digits > 10 && last2Digits < 20) { + return number + '-ти'; + } else if (lastDigit === 1) { + return number + '-ви'; + } else if (lastDigit === 2) { + return number + '-ри'; + } else if (lastDigit === 7 || lastDigit === 8) { + return number + '-ми'; + } else { + return number + '-ти'; + } + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('ml', { + months: 'ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ'.split( + '_' + ), + monthsShort: 'ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച'.split( + '_' + ), + weekdaysShort: 'ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി'.split('_'), + weekdaysMin: 'ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ'.split('_'), + longDateFormat: { + LT: 'A h:mm -നു', + LTS: 'A h:mm:ss -നു', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY, A h:mm -നു', + LLLL: 'dddd, D MMMM YYYY, A h:mm -നു', + }, + calendar: { + sameDay: '[ഇന്ന്] LT', + nextDay: '[നാളെ] LT', + nextWeek: 'dddd, LT', + lastDay: '[ഇന്നലെ] LT', + lastWeek: '[കഴിഞ്ഞ] dddd, LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s കഴിഞ്ഞ്', + past: '%s മുൻപ്', + s: 'അൽപ നിമിഷങ്ങൾ', + ss: '%d സെക്കൻഡ്', + m: 'ഒരു മിനിറ്റ്', + mm: '%d മിനിറ്റ്', + h: 'ഒരു മണിക്കൂർ', + hh: '%d മണിക്കൂർ', + d: 'ഒരു ദിവസം', + dd: '%d ദിവസം', + M: 'ഒരു മാസം', + MM: '%d മാസം', + y: 'ഒരു വർഷം', + yy: '%d വർഷം', + }, + meridiemParse: /രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if ( + (meridiem === 'രാത്രി' && hour >= 4) || + meridiem === 'ഉച്ച കഴിഞ്ഞ്' || + meridiem === 'വൈകുന്നേരം' + ) { + return hour + 12; + } else { + return hour; + } + }, + meridiem: function (hour, minute, isLower) { + if (hour < 4) { + return 'രാത്രി'; + } else if (hour < 12) { + return 'രാവിലെ'; + } else if (hour < 17) { + return 'ഉച്ച കഴിഞ്ഞ്'; + } else if (hour < 20) { + return 'വൈകുന്നേരം'; + } else { + return 'രാത്രി'; + } + }, + }); + + //! moment.js locale configuration + + function translate$7(number, withoutSuffix, key, isFuture) { + switch (key) { + case 's': + return withoutSuffix ? 'хэдхэн секунд' : 'хэдхэн секундын'; + case 'ss': + return number + (withoutSuffix ? ' секунд' : ' секундын'); + case 'm': + case 'mm': + return number + (withoutSuffix ? ' минут' : ' минутын'); + case 'h': + case 'hh': + return number + (withoutSuffix ? ' цаг' : ' цагийн'); + case 'd': + case 'dd': + return number + (withoutSuffix ? ' өдөр' : ' өдрийн'); + case 'M': + case 'MM': + return number + (withoutSuffix ? ' сар' : ' сарын'); + case 'y': + case 'yy': + return number + (withoutSuffix ? ' жил' : ' жилийн'); + default: + return number; + } + } + + hooks.defineLocale('mn', { + months: 'Нэгдүгээр сар_Хоёрдугаар сар_Гуравдугаар сар_Дөрөвдүгээр сар_Тавдугаар сар_Зургадугаар сар_Долдугаар сар_Наймдугаар сар_Есдүгээр сар_Аравдугаар сар_Арван нэгдүгээр сар_Арван хоёрдугаар сар'.split( + '_' + ), + monthsShort: '1 сар_2 сар_3 сар_4 сар_5 сар_6 сар_7 сар_8 сар_9 сар_10 сар_11 сар_12 сар'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'Ням_Даваа_Мягмар_Лхагва_Пүрэв_Баасан_Бямба'.split('_'), + weekdaysShort: 'Ням_Дав_Мяг_Лха_Пүр_Баа_Бям'.split('_'), + weekdaysMin: 'Ня_Да_Мя_Лх_Пү_Ба_Бя'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'YYYY-MM-DD', + LL: 'YYYY оны MMMMын D', + LLL: 'YYYY оны MMMMын D HH:mm', + LLLL: 'dddd, YYYY оны MMMMын D HH:mm', + }, + meridiemParse: /ҮӨ|ҮХ/i, + isPM: function (input) { + return input === 'ҮХ'; + }, + meridiem: function (hour, minute, isLower) { + if (hour < 12) { + return 'ҮӨ'; + } else { + return 'ҮХ'; + } + }, + calendar: { + sameDay: '[Өнөөдөр] LT', + nextDay: '[Маргааш] LT', + nextWeek: '[Ирэх] dddd LT', + lastDay: '[Өчигдөр] LT', + lastWeek: '[Өнгөрсөн] dddd LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s дараа', + past: '%s өмнө', + s: translate$7, + ss: translate$7, + m: translate$7, + mm: translate$7, + h: translate$7, + hh: translate$7, + d: translate$7, + dd: translate$7, + M: translate$7, + MM: translate$7, + y: translate$7, + yy: translate$7, + }, + dayOfMonthOrdinalParse: /\d{1,2} өдөр/, + ordinal: function (number, period) { + switch (period) { + case 'd': + case 'D': + case 'DDD': + return number + ' өдөр'; + default: + return number; + } + }, + }); + + //! moment.js locale configuration + + var symbolMap$b = { + '1': '१', + '2': '२', + '3': '३', + '4': '४', + '5': '५', + '6': '६', + '7': '७', + '8': '८', + '9': '९', + '0': '०', + }, + numberMap$a = { + '१': '1', + '२': '2', + '३': '3', + '४': '4', + '५': '5', + '६': '6', + '७': '7', + '८': '8', + '९': '9', + '०': '0', + }; + + function relativeTimeMr(number, withoutSuffix, string, isFuture) { + var output = ''; + if (withoutSuffix) { + switch (string) { + case 's': + output = 'काही सेकंद'; + break; + case 'ss': + output = '%d सेकंद'; + break; + case 'm': + output = 'एक मिनिट'; + break; + case 'mm': + output = '%d मिनिटे'; + break; + case 'h': + output = 'एक तास'; + break; + case 'hh': + output = '%d तास'; + break; + case 'd': + output = 'एक दिवस'; + break; + case 'dd': + output = '%d दिवस'; + break; + case 'M': + output = 'एक महिना'; + break; + case 'MM': + output = '%d महिने'; + break; + case 'y': + output = 'एक वर्ष'; + break; + case 'yy': + output = '%d वर्षे'; + break; + } + } else { + switch (string) { + case 's': + output = 'काही सेकंदां'; + break; + case 'ss': + output = '%d सेकंदां'; + break; + case 'm': + output = 'एका मिनिटा'; + break; + case 'mm': + output = '%d मिनिटां'; + break; + case 'h': + output = 'एका तासा'; + break; + case 'hh': + output = '%d तासां'; + break; + case 'd': + output = 'एका दिवसा'; + break; + case 'dd': + output = '%d दिवसां'; + break; + case 'M': + output = 'एका महिन्या'; + break; + case 'MM': + output = '%d महिन्यां'; + break; + case 'y': + output = 'एका वर्षा'; + break; + case 'yy': + output = '%d वर्षां'; + break; + } + } + return output.replace(/%d/i, number); + } + + hooks.defineLocale('mr', { + months: 'जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split( + '_' + ), + monthsShort: 'जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'), + weekdaysShort: 'रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि'.split('_'), + weekdaysMin: 'र_सो_मं_बु_गु_शु_श'.split('_'), + longDateFormat: { + LT: 'A h:mm वाजता', + LTS: 'A h:mm:ss वाजता', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY, A h:mm वाजता', + LLLL: 'dddd, D MMMM YYYY, A h:mm वाजता', + }, + calendar: { + sameDay: '[आज] LT', + nextDay: '[उद्या] LT', + nextWeek: 'dddd, LT', + lastDay: '[काल] LT', + lastWeek: '[मागील] dddd, LT', + sameElse: 'L', + }, + relativeTime: { + future: '%sमध्ये', + past: '%sपूर्वी', + s: relativeTimeMr, + ss: relativeTimeMr, + m: relativeTimeMr, + mm: relativeTimeMr, + h: relativeTimeMr, + hh: relativeTimeMr, + d: relativeTimeMr, + dd: relativeTimeMr, + M: relativeTimeMr, + MM: relativeTimeMr, + y: relativeTimeMr, + yy: relativeTimeMr, + }, + preparse: function (string) { + return string.replace(/[१२३४५६७८९०]/g, function (match) { + return numberMap$a[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$b[match]; + }); + }, + meridiemParse: /पहाटे|सकाळी|दुपारी|सायंकाळी|रात्री/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'पहाटे' || meridiem === 'सकाळी') { + return hour; + } else if ( + meridiem === 'दुपारी' || + meridiem === 'सायंकाळी' || + meridiem === 'रात्री' + ) { + return hour >= 12 ? hour : hour + 12; + } + }, + meridiem: function (hour, minute, isLower) { + if (hour >= 0 && hour < 6) { + return 'पहाटे'; + } else if (hour < 12) { + return 'सकाळी'; + } else if (hour < 17) { + return 'दुपारी'; + } else if (hour < 20) { + return 'सायंकाळी'; + } else { + return 'रात्री'; + } + }, + week: { + dow: 0, // Sunday is the first day of the week. + doy: 6, // The week that contains Jan 6th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('ms-my', { + months: 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split( + '_' + ), + monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'), + weekdays: 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'), + weekdaysShort: 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'), + weekdaysMin: 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'), + longDateFormat: { + LT: 'HH.mm', + LTS: 'HH.mm.ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY [pukul] HH.mm', + LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm', + }, + meridiemParse: /pagi|tengahari|petang|malam/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'pagi') { + return hour; + } else if (meridiem === 'tengahari') { + return hour >= 11 ? hour : hour + 12; + } else if (meridiem === 'petang' || meridiem === 'malam') { + return hour + 12; + } + }, + meridiem: function (hours, minutes, isLower) { + if (hours < 11) { + return 'pagi'; + } else if (hours < 15) { + return 'tengahari'; + } else if (hours < 19) { + return 'petang'; + } else { + return 'malam'; + } + }, + calendar: { + sameDay: '[Hari ini pukul] LT', + nextDay: '[Esok pukul] LT', + nextWeek: 'dddd [pukul] LT', + lastDay: '[Kelmarin pukul] LT', + lastWeek: 'dddd [lepas pukul] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'dalam %s', + past: '%s yang lepas', + s: 'beberapa saat', + ss: '%d saat', + m: 'seminit', + mm: '%d minit', + h: 'sejam', + hh: '%d jam', + d: 'sehari', + dd: '%d hari', + M: 'sebulan', + MM: '%d bulan', + y: 'setahun', + yy: '%d tahun', + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('ms', { + months: 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split( + '_' + ), + monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'), + weekdays: 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'), + weekdaysShort: 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'), + weekdaysMin: 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'), + longDateFormat: { + LT: 'HH.mm', + LTS: 'HH.mm.ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY [pukul] HH.mm', + LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm', + }, + meridiemParse: /pagi|tengahari|petang|malam/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'pagi') { + return hour; + } else if (meridiem === 'tengahari') { + return hour >= 11 ? hour : hour + 12; + } else if (meridiem === 'petang' || meridiem === 'malam') { + return hour + 12; + } + }, + meridiem: function (hours, minutes, isLower) { + if (hours < 11) { + return 'pagi'; + } else if (hours < 15) { + return 'tengahari'; + } else if (hours < 19) { + return 'petang'; + } else { + return 'malam'; + } + }, + calendar: { + sameDay: '[Hari ini pukul] LT', + nextDay: '[Esok pukul] LT', + nextWeek: 'dddd [pukul] LT', + lastDay: '[Kelmarin pukul] LT', + lastWeek: 'dddd [lepas pukul] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'dalam %s', + past: '%s yang lepas', + s: 'beberapa saat', + ss: '%d saat', + m: 'seminit', + mm: '%d minit', + h: 'sejam', + hh: '%d jam', + d: 'sehari', + dd: '%d hari', + M: 'sebulan', + MM: '%d bulan', + y: 'setahun', + yy: '%d tahun', + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('mt', { + months: 'Jannar_Frar_Marzu_April_Mejju_Ġunju_Lulju_Awwissu_Settembru_Ottubru_Novembru_Diċembru'.split( + '_' + ), + monthsShort: 'Jan_Fra_Mar_Apr_Mej_Ġun_Lul_Aww_Set_Ott_Nov_Diċ'.split('_'), + weekdays: 'Il-Ħadd_It-Tnejn_It-Tlieta_L-Erbgħa_Il-Ħamis_Il-Ġimgħa_Is-Sibt'.split( + '_' + ), + weekdaysShort: 'Ħad_Tne_Tli_Erb_Ħam_Ġim_Sib'.split('_'), + weekdaysMin: 'Ħa_Tn_Tl_Er_Ħa_Ġi_Si'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Illum fil-]LT', + nextDay: '[Għada fil-]LT', + nextWeek: 'dddd [fil-]LT', + lastDay: '[Il-bieraħ fil-]LT', + lastWeek: 'dddd [li għadda] [fil-]LT', + sameElse: 'L', + }, + relativeTime: { + future: 'f’ %s', + past: '%s ilu', + s: 'ftit sekondi', + ss: '%d sekondi', + m: 'minuta', + mm: '%d minuti', + h: 'siegħa', + hh: '%d siegħat', + d: 'ġurnata', + dd: '%d ġranet', + M: 'xahar', + MM: '%d xhur', + y: 'sena', + yy: '%d sni', + }, + dayOfMonthOrdinalParse: /\d{1,2}º/, + ordinal: '%dº', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var symbolMap$c = { + '1': '၁', + '2': '၂', + '3': '၃', + '4': '၄', + '5': '၅', + '6': '၆', + '7': '၇', + '8': '၈', + '9': '၉', + '0': '၀', + }, + numberMap$b = { + '၁': '1', + '၂': '2', + '၃': '3', + '၄': '4', + '၅': '5', + '၆': '6', + '၇': '7', + '၈': '8', + '၉': '9', + '၀': '0', + }; + + hooks.defineLocale('my', { + months: 'ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ'.split( + '_' + ), + monthsShort: 'ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ'.split('_'), + weekdays: 'တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ'.split( + '_' + ), + weekdaysShort: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'), + weekdaysMin: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'), + + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[ယနေ.] LT [မှာ]', + nextDay: '[မနက်ဖြန်] LT [မှာ]', + nextWeek: 'dddd LT [မှာ]', + lastDay: '[မနေ.က] LT [မှာ]', + lastWeek: '[ပြီးခဲ့သော] dddd LT [မှာ]', + sameElse: 'L', + }, + relativeTime: { + future: 'လာမည့် %s မှာ', + past: 'လွန်ခဲ့သော %s က', + s: 'စက္ကန်.အနည်းငယ်', + ss: '%d စက္ကန့်', + m: 'တစ်မိနစ်', + mm: '%d မိနစ်', + h: 'တစ်နာရီ', + hh: '%d နာရီ', + d: 'တစ်ရက်', + dd: '%d ရက်', + M: 'တစ်လ', + MM: '%d လ', + y: 'တစ်နှစ်', + yy: '%d နှစ်', + }, + preparse: function (string) { + return string.replace(/[၁၂၃၄၅၆၇၈၉၀]/g, function (match) { + return numberMap$b[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$c[match]; + }); + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('nb', { + months: 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split( + '_' + ), + monthsShort: 'jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'), + weekdaysShort: 'sø._ma._ti._on._to._fr._lø.'.split('_'), + weekdaysMin: 'sø_ma_ti_on_to_fr_lø'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY [kl.] HH:mm', + LLLL: 'dddd D. MMMM YYYY [kl.] HH:mm', + }, + calendar: { + sameDay: '[i dag kl.] LT', + nextDay: '[i morgen kl.] LT', + nextWeek: 'dddd [kl.] LT', + lastDay: '[i går kl.] LT', + lastWeek: '[forrige] dddd [kl.] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'om %s', + past: '%s siden', + s: 'noen sekunder', + ss: '%d sekunder', + m: 'ett minutt', + mm: '%d minutter', + h: 'en time', + hh: '%d timer', + d: 'en dag', + dd: '%d dager', + M: 'en måned', + MM: '%d måneder', + y: 'ett år', + yy: '%d år', + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var symbolMap$d = { + '1': '१', + '2': '२', + '3': '३', + '4': '४', + '5': '५', + '6': '६', + '7': '७', + '8': '८', + '9': '९', + '0': '०', + }, + numberMap$c = { + '१': '1', + '२': '2', + '३': '3', + '४': '4', + '५': '5', + '६': '6', + '७': '7', + '८': '8', + '९': '9', + '०': '0', + }; + + hooks.defineLocale('ne', { + months: 'जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर'.split( + '_' + ), + monthsShort: 'जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार'.split( + '_' + ), + weekdaysShort: 'आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.'.split('_'), + weekdaysMin: 'आ._सो._मं._बु._बि._शु._श.'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'Aको h:mm बजे', + LTS: 'Aको h:mm:ss बजे', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY, Aको h:mm बजे', + LLLL: 'dddd, D MMMM YYYY, Aको h:mm बजे', + }, + preparse: function (string) { + return string.replace(/[१२३४५६७८९०]/g, function (match) { + return numberMap$c[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$d[match]; + }); + }, + meridiemParse: /राति|बिहान|दिउँसो|साँझ/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'राति') { + return hour < 4 ? hour : hour + 12; + } else if (meridiem === 'बिहान') { + return hour; + } else if (meridiem === 'दिउँसो') { + return hour >= 10 ? hour : hour + 12; + } else if (meridiem === 'साँझ') { + return hour + 12; + } + }, + meridiem: function (hour, minute, isLower) { + if (hour < 3) { + return 'राति'; + } else if (hour < 12) { + return 'बिहान'; + } else if (hour < 16) { + return 'दिउँसो'; + } else if (hour < 20) { + return 'साँझ'; + } else { + return 'राति'; + } + }, + calendar: { + sameDay: '[आज] LT', + nextDay: '[भोलि] LT', + nextWeek: '[आउँदो] dddd[,] LT', + lastDay: '[हिजो] LT', + lastWeek: '[गएको] dddd[,] LT', + sameElse: 'L', + }, + relativeTime: { + future: '%sमा', + past: '%s अगाडि', + s: 'केही क्षण', + ss: '%d सेकेण्ड', + m: 'एक मिनेट', + mm: '%d मिनेट', + h: 'एक घण्टा', + hh: '%d घण्टा', + d: 'एक दिन', + dd: '%d दिन', + M: 'एक महिना', + MM: '%d महिना', + y: 'एक बर्ष', + yy: '%d बर्ष', + }, + week: { + dow: 0, // Sunday is the first day of the week. + doy: 6, // The week that contains Jan 6th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var monthsShortWithDots$1 = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split( + '_' + ), + monthsShortWithoutDots$1 = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split( + '_' + ), + monthsParse$6 = [ + /^jan/i, + /^feb/i, + /^maart|mrt.?$/i, + /^apr/i, + /^mei$/i, + /^jun[i.]?$/i, + /^jul[i.]?$/i, + /^aug/i, + /^sep/i, + /^okt/i, + /^nov/i, + /^dec/i, + ], + monthsRegex$7 = /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i; + + hooks.defineLocale('nl-be', { + months: 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split( + '_' + ), + monthsShort: function (m, format) { + if (!m) { + return monthsShortWithDots$1; + } else if (/-MMM-/.test(format)) { + return monthsShortWithoutDots$1[m.month()]; + } else { + return monthsShortWithDots$1[m.month()]; + } + }, + + monthsRegex: monthsRegex$7, + monthsShortRegex: monthsRegex$7, + monthsStrictRegex: /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i, + monthsShortStrictRegex: /^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i, + + monthsParse: monthsParse$6, + longMonthsParse: monthsParse$6, + shortMonthsParse: monthsParse$6, + + weekdays: 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split( + '_' + ), + weekdaysShort: 'zo._ma._di._wo._do._vr._za.'.split('_'), + weekdaysMin: 'zo_ma_di_wo_do_vr_za'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[vandaag om] LT', + nextDay: '[morgen om] LT', + nextWeek: 'dddd [om] LT', + lastDay: '[gisteren om] LT', + lastWeek: '[afgelopen] dddd [om] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'over %s', + past: '%s geleden', + s: 'een paar seconden', + ss: '%d seconden', + m: 'één minuut', + mm: '%d minuten', + h: 'één uur', + hh: '%d uur', + d: 'één dag', + dd: '%d dagen', + M: 'één maand', + MM: '%d maanden', + y: 'één jaar', + yy: '%d jaar', + }, + dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/, + ordinal: function (number) { + return ( + number + + (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de') + ); + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var monthsShortWithDots$2 = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split( + '_' + ), + monthsShortWithoutDots$2 = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split( + '_' + ), + monthsParse$7 = [ + /^jan/i, + /^feb/i, + /^maart|mrt.?$/i, + /^apr/i, + /^mei$/i, + /^jun[i.]?$/i, + /^jul[i.]?$/i, + /^aug/i, + /^sep/i, + /^okt/i, + /^nov/i, + /^dec/i, + ], + monthsRegex$8 = /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i; + + hooks.defineLocale('nl', { + months: 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split( + '_' + ), + monthsShort: function (m, format) { + if (!m) { + return monthsShortWithDots$2; + } else if (/-MMM-/.test(format)) { + return monthsShortWithoutDots$2[m.month()]; + } else { + return monthsShortWithDots$2[m.month()]; + } + }, + + monthsRegex: monthsRegex$8, + monthsShortRegex: monthsRegex$8, + monthsStrictRegex: /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i, + monthsShortStrictRegex: /^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i, + + monthsParse: monthsParse$7, + longMonthsParse: monthsParse$7, + shortMonthsParse: monthsParse$7, + + weekdays: 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split( + '_' + ), + weekdaysShort: 'zo._ma._di._wo._do._vr._za.'.split('_'), + weekdaysMin: 'zo_ma_di_wo_do_vr_za'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD-MM-YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[vandaag om] LT', + nextDay: '[morgen om] LT', + nextWeek: 'dddd [om] LT', + lastDay: '[gisteren om] LT', + lastWeek: '[afgelopen] dddd [om] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'over %s', + past: '%s geleden', + s: 'een paar seconden', + ss: '%d seconden', + m: 'één minuut', + mm: '%d minuten', + h: 'één uur', + hh: '%d uur', + d: 'één dag', + dd: '%d dagen', + M: 'één maand', + MM: '%d maanden', + y: 'één jaar', + yy: '%d jaar', + }, + dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/, + ordinal: function (number) { + return ( + number + + (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de') + ); + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('nn', { + months: 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split( + '_' + ), + monthsShort: 'jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag'.split('_'), + weekdaysShort: 'su._må._ty._on._to._fr._lau.'.split('_'), + weekdaysMin: 'su_må_ty_on_to_fr_la'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY [kl.] H:mm', + LLLL: 'dddd D. MMMM YYYY [kl.] HH:mm', + }, + calendar: { + sameDay: '[I dag klokka] LT', + nextDay: '[I morgon klokka] LT', + nextWeek: 'dddd [klokka] LT', + lastDay: '[I går klokka] LT', + lastWeek: '[Føregåande] dddd [klokka] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'om %s', + past: '%s sidan', + s: 'nokre sekund', + ss: '%d sekund', + m: 'eit minutt', + mm: '%d minutt', + h: 'ein time', + hh: '%d timar', + d: 'ein dag', + dd: '%d dagar', + M: 'ein månad', + MM: '%d månader', + y: 'eit år', + yy: '%d år', + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('oc-lnc', { + months: { + standalone: 'genièr_febrièr_març_abril_mai_junh_julhet_agost_setembre_octòbre_novembre_decembre'.split( + '_' + ), + format: "de genièr_de febrièr_de març_d'abril_de mai_de junh_de julhet_d'agost_de setembre_d'octòbre_de novembre_de decembre".split( + '_' + ), + isFormat: /D[oD]?(\s)+MMMM/, + }, + monthsShort: 'gen._febr._març_abr._mai_junh_julh._ago._set._oct._nov._dec.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'dimenge_diluns_dimars_dimècres_dijòus_divendres_dissabte'.split( + '_' + ), + weekdaysShort: 'dg._dl._dm._dc._dj._dv._ds.'.split('_'), + weekdaysMin: 'dg_dl_dm_dc_dj_dv_ds'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM [de] YYYY', + ll: 'D MMM YYYY', + LLL: 'D MMMM [de] YYYY [a] H:mm', + lll: 'D MMM YYYY, H:mm', + LLLL: 'dddd D MMMM [de] YYYY [a] H:mm', + llll: 'ddd D MMM YYYY, H:mm', + }, + calendar: { + sameDay: '[uèi a] LT', + nextDay: '[deman a] LT', + nextWeek: 'dddd [a] LT', + lastDay: '[ièr a] LT', + lastWeek: 'dddd [passat a] LT', + sameElse: 'L', + }, + relativeTime: { + future: "d'aquí %s", + past: 'fa %s', + s: 'unas segondas', + ss: '%d segondas', + m: 'una minuta', + mm: '%d minutas', + h: 'una ora', + hh: '%d oras', + d: 'un jorn', + dd: '%d jorns', + M: 'un mes', + MM: '%d meses', + y: 'un an', + yy: '%d ans', + }, + dayOfMonthOrdinalParse: /\d{1,2}(r|n|t|è|a)/, + ordinal: function (number, period) { + var output = + number === 1 + ? 'r' + : number === 2 + ? 'n' + : number === 3 + ? 'r' + : number === 4 + ? 't' + : 'è'; + if (period === 'w' || period === 'W') { + output = 'a'; + } + return number + output; + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, + }, + }); + + //! moment.js locale configuration + + var symbolMap$e = { + '1': '੧', + '2': '੨', + '3': '੩', + '4': '੪', + '5': '੫', + '6': '੬', + '7': '੭', + '8': '੮', + '9': '੯', + '0': '੦', + }, + numberMap$d = { + '੧': '1', + '੨': '2', + '੩': '3', + '੪': '4', + '੫': '5', + '੬': '6', + '੭': '7', + '੮': '8', + '੯': '9', + '੦': '0', + }; + + hooks.defineLocale('pa-in', { + // There are months name as per Nanakshahi Calendar but they are not used as rigidly in modern Punjabi. + months: 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split( + '_' + ), + monthsShort: 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split( + '_' + ), + weekdays: 'ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ'.split( + '_' + ), + weekdaysShort: 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'), + weekdaysMin: 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'), + longDateFormat: { + LT: 'A h:mm ਵਜੇ', + LTS: 'A h:mm:ss ਵਜੇ', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY, A h:mm ਵਜੇ', + LLLL: 'dddd, D MMMM YYYY, A h:mm ਵਜੇ', + }, + calendar: { + sameDay: '[ਅਜ] LT', + nextDay: '[ਕਲ] LT', + nextWeek: '[ਅਗਲਾ] dddd, LT', + lastDay: '[ਕਲ] LT', + lastWeek: '[ਪਿਛਲੇ] dddd, LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s ਵਿੱਚ', + past: '%s ਪਿਛਲੇ', + s: 'ਕੁਝ ਸਕਿੰਟ', + ss: '%d ਸਕਿੰਟ', + m: 'ਇਕ ਮਿੰਟ', + mm: '%d ਮਿੰਟ', + h: 'ਇੱਕ ਘੰਟਾ', + hh: '%d ਘੰਟੇ', + d: 'ਇੱਕ ਦਿਨ', + dd: '%d ਦਿਨ', + M: 'ਇੱਕ ਮਹੀਨਾ', + MM: '%d ਮਹੀਨੇ', + y: 'ਇੱਕ ਸਾਲ', + yy: '%d ਸਾਲ', + }, + preparse: function (string) { + return string.replace(/[੧੨੩੪੫੬੭੮੯੦]/g, function (match) { + return numberMap$d[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$e[match]; + }); + }, + // Punjabi notation for meridiems are quite fuzzy in practice. While there exists + // a rigid notion of a 'Pahar' it is not used as rigidly in modern Punjabi. + meridiemParse: /ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'ਰਾਤ') { + return hour < 4 ? hour : hour + 12; + } else if (meridiem === 'ਸਵੇਰ') { + return hour; + } else if (meridiem === 'ਦੁਪਹਿਰ') { + return hour >= 10 ? hour : hour + 12; + } else if (meridiem === 'ਸ਼ਾਮ') { + return hour + 12; + } + }, + meridiem: function (hour, minute, isLower) { + if (hour < 4) { + return 'ਰਾਤ'; + } else if (hour < 10) { + return 'ਸਵੇਰ'; + } else if (hour < 17) { + return 'ਦੁਪਹਿਰ'; + } else if (hour < 20) { + return 'ਸ਼ਾਮ'; + } else { + return 'ਰਾਤ'; + } + }, + week: { + dow: 0, // Sunday is the first day of the week. + doy: 6, // The week that contains Jan 6th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var monthsNominative = 'styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień'.split( + '_' + ), + monthsSubjective = 'stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia'.split( + '_' + ); + function plural$3(n) { + return n % 10 < 5 && n % 10 > 1 && ~~(n / 10) % 10 !== 1; + } + function translate$8(number, withoutSuffix, key) { + var result = number + ' '; + switch (key) { + case 'ss': + return result + (plural$3(number) ? 'sekundy' : 'sekund'); + case 'm': + return withoutSuffix ? 'minuta' : 'minutę'; + case 'mm': + return result + (plural$3(number) ? 'minuty' : 'minut'); + case 'h': + return withoutSuffix ? 'godzina' : 'godzinę'; + case 'hh': + return result + (plural$3(number) ? 'godziny' : 'godzin'); + case 'MM': + return result + (plural$3(number) ? 'miesiące' : 'miesięcy'); + case 'yy': + return result + (plural$3(number) ? 'lata' : 'lat'); + } + } + + hooks.defineLocale('pl', { + months: function (momentToFormat, format) { + if (!momentToFormat) { + return monthsNominative; + } else if (format === '') { + // Hack: if format empty we know this is used to generate + // RegExp by moment. Give then back both valid forms of months + // in RegExp ready format. + return ( + '(' + + monthsSubjective[momentToFormat.month()] + + '|' + + monthsNominative[momentToFormat.month()] + + ')' + ); + } else if (/D MMMM/.test(format)) { + return monthsSubjective[momentToFormat.month()]; + } else { + return monthsNominative[momentToFormat.month()]; + } + }, + monthsShort: 'sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru'.split('_'), + weekdays: 'niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota'.split( + '_' + ), + weekdaysShort: 'ndz_pon_wt_śr_czw_pt_sob'.split('_'), + weekdaysMin: 'Nd_Pn_Wt_Śr_Cz_Pt_So'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Dziś o] LT', + nextDay: '[Jutro o] LT', + nextWeek: function () { + switch (this.day()) { + case 0: + return '[W niedzielę o] LT'; + + case 2: + return '[We wtorek o] LT'; + + case 3: + return '[W środę o] LT'; + + case 6: + return '[W sobotę o] LT'; + + default: + return '[W] dddd [o] LT'; + } + }, + lastDay: '[Wczoraj o] LT', + lastWeek: function () { + switch (this.day()) { + case 0: + return '[W zeszłą niedzielę o] LT'; + case 3: + return '[W zeszłą środę o] LT'; + case 6: + return '[W zeszłą sobotę o] LT'; + default: + return '[W zeszły] dddd [o] LT'; + } + }, + sameElse: 'L', + }, + relativeTime: { + future: 'za %s', + past: '%s temu', + s: 'kilka sekund', + ss: translate$8, + m: translate$8, + mm: translate$8, + h: translate$8, + hh: translate$8, + d: '1 dzień', + dd: '%d dni', + M: 'miesiąc', + MM: translate$8, + y: 'rok', + yy: translate$8, + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('pt-br', { + months: 'janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split( + '_' + ), + monthsShort: 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'), + weekdays: 'domingo_segunda-feira_terça-feira_quarta-feira_quinta-feira_sexta-feira_sábado'.split( + '_' + ), + weekdaysShort: 'dom_seg_ter_qua_qui_sex_sáb'.split('_'), + weekdaysMin: 'do_2ª_3ª_4ª_5ª_6ª_sá'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D [de] MMMM [de] YYYY', + LLL: 'D [de] MMMM [de] YYYY [às] HH:mm', + LLLL: 'dddd, D [de] MMMM [de] YYYY [às] HH:mm', + }, + calendar: { + sameDay: '[Hoje às] LT', + nextDay: '[Amanhã às] LT', + nextWeek: 'dddd [às] LT', + lastDay: '[Ontem às] LT', + lastWeek: function () { + return this.day() === 0 || this.day() === 6 + ? '[Último] dddd [às] LT' // Saturday + Sunday + : '[Última] dddd [às] LT'; // Monday - Friday + }, + sameElse: 'L', + }, + relativeTime: { + future: 'em %s', + past: 'há %s', + s: 'poucos segundos', + ss: '%d segundos', + m: 'um minuto', + mm: '%d minutos', + h: 'uma hora', + hh: '%d horas', + d: 'um dia', + dd: '%d dias', + M: 'um mês', + MM: '%d meses', + y: 'um ano', + yy: '%d anos', + }, + dayOfMonthOrdinalParse: /\d{1,2}º/, + ordinal: '%dº', + }); + + //! moment.js locale configuration + + hooks.defineLocale('pt', { + months: 'janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split( + '_' + ), + monthsShort: 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'), + weekdays: 'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split( + '_' + ), + weekdaysShort: 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'), + weekdaysMin: 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D [de] MMMM [de] YYYY', + LLL: 'D [de] MMMM [de] YYYY HH:mm', + LLLL: 'dddd, D [de] MMMM [de] YYYY HH:mm', + }, + calendar: { + sameDay: '[Hoje às] LT', + nextDay: '[Amanhã às] LT', + nextWeek: 'dddd [às] LT', + lastDay: '[Ontem às] LT', + lastWeek: function () { + return this.day() === 0 || this.day() === 6 + ? '[Último] dddd [às] LT' // Saturday + Sunday + : '[Última] dddd [às] LT'; // Monday - Friday + }, + sameElse: 'L', + }, + relativeTime: { + future: 'em %s', + past: 'há %s', + s: 'segundos', + ss: '%d segundos', + m: 'um minuto', + mm: '%d minutos', + h: 'uma hora', + hh: '%d horas', + d: 'um dia', + dd: '%d dias', + M: 'um mês', + MM: '%d meses', + y: 'um ano', + yy: '%d anos', + }, + dayOfMonthOrdinalParse: /\d{1,2}º/, + ordinal: '%dº', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + function relativeTimeWithPlural$2(number, withoutSuffix, key) { + var format = { + ss: 'secunde', + mm: 'minute', + hh: 'ore', + dd: 'zile', + MM: 'luni', + yy: 'ani', + }, + separator = ' '; + if (number % 100 >= 20 || (number >= 100 && number % 100 === 0)) { + separator = ' de '; + } + return number + separator + format[key]; + } + + hooks.defineLocale('ro', { + months: 'ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie'.split( + '_' + ), + monthsShort: 'ian._feb._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'duminică_luni_marți_miercuri_joi_vineri_sâmbătă'.split('_'), + weekdaysShort: 'Dum_Lun_Mar_Mie_Joi_Vin_Sâm'.split('_'), + weekdaysMin: 'Du_Lu_Ma_Mi_Jo_Vi_Sâ'.split('_'), + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY H:mm', + LLLL: 'dddd, D MMMM YYYY H:mm', + }, + calendar: { + sameDay: '[azi la] LT', + nextDay: '[mâine la] LT', + nextWeek: 'dddd [la] LT', + lastDay: '[ieri la] LT', + lastWeek: '[fosta] dddd [la] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'peste %s', + past: '%s în urmă', + s: 'câteva secunde', + ss: relativeTimeWithPlural$2, + m: 'un minut', + mm: relativeTimeWithPlural$2, + h: 'o oră', + hh: relativeTimeWithPlural$2, + d: 'o zi', + dd: relativeTimeWithPlural$2, + M: 'o lună', + MM: relativeTimeWithPlural$2, + y: 'un an', + yy: relativeTimeWithPlural$2, + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + function plural$4(word, num) { + var forms = word.split('_'); + return num % 10 === 1 && num % 100 !== 11 + ? forms[0] + : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) + ? forms[1] + : forms[2]; + } + function relativeTimeWithPlural$3(number, withoutSuffix, key) { + var format = { + ss: withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд', + mm: withoutSuffix ? 'минута_минуты_минут' : 'минуту_минуты_минут', + hh: 'час_часа_часов', + dd: 'день_дня_дней', + MM: 'месяц_месяца_месяцев', + yy: 'год_года_лет', + }; + if (key === 'm') { + return withoutSuffix ? 'минута' : 'минуту'; + } else { + return number + ' ' + plural$4(format[key], +number); + } + } + var monthsParse$8 = [ + /^янв/i, + /^фев/i, + /^мар/i, + /^апр/i, + /^ма[йя]/i, + /^июн/i, + /^июл/i, + /^авг/i, + /^сен/i, + /^окт/i, + /^ноя/i, + /^дек/i, + ]; + + // http://new.gramota.ru/spravka/rules/139-prop : § 103 + // Сокращения месяцев: http://new.gramota.ru/spravka/buro/search-answer?s=242637 + // CLDR data: http://www.unicode.org/cldr/charts/28/summary/ru.html#1753 + hooks.defineLocale('ru', { + months: { + format: 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split( + '_' + ), + standalone: 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split( + '_' + ), + }, + monthsShort: { + // по CLDR именно "июл." и "июн.", но какой смысл менять букву на точку? + format: 'янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.'.split( + '_' + ), + standalone: 'янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.'.split( + '_' + ), + }, + weekdays: { + standalone: 'воскресенье_понедельник_вторник_среда_четверг_пятница_суббота'.split( + '_' + ), + format: 'воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу'.split( + '_' + ), + isFormat: /\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?] ?dddd/, + }, + weekdaysShort: 'вс_пн_вт_ср_чт_пт_сб'.split('_'), + weekdaysMin: 'вс_пн_вт_ср_чт_пт_сб'.split('_'), + monthsParse: monthsParse$8, + longMonthsParse: monthsParse$8, + shortMonthsParse: monthsParse$8, + + // полные названия с падежами, по три буквы, для некоторых, по 4 буквы, сокращения с точкой и без точки + monthsRegex: /^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i, + + // копия предыдущего + monthsShortRegex: /^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i, + + // полные названия с падежами + monthsStrictRegex: /^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i, + + // Выражение, которое соответствует только сокращённым формам + monthsShortStrictRegex: /^(янв\.|февр?\.|мар[т.]|апр\.|ма[яй]|июн[ья.]|июл[ья.]|авг\.|сент?\.|окт\.|нояб?\.|дек\.)/i, + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D MMMM YYYY г.', + LLL: 'D MMMM YYYY г., H:mm', + LLLL: 'dddd, D MMMM YYYY г., H:mm', + }, + calendar: { + sameDay: '[Сегодня, в] LT', + nextDay: '[Завтра, в] LT', + lastDay: '[Вчера, в] LT', + nextWeek: function (now) { + if (now.week() !== this.week()) { + switch (this.day()) { + case 0: + return '[В следующее] dddd, [в] LT'; + case 1: + case 2: + case 4: + return '[В следующий] dddd, [в] LT'; + case 3: + case 5: + case 6: + return '[В следующую] dddd, [в] LT'; + } + } else { + if (this.day() === 2) { + return '[Во] dddd, [в] LT'; + } else { + return '[В] dddd, [в] LT'; + } + } + }, + lastWeek: function (now) { + if (now.week() !== this.week()) { + switch (this.day()) { + case 0: + return '[В прошлое] dddd, [в] LT'; + case 1: + case 2: + case 4: + return '[В прошлый] dddd, [в] LT'; + case 3: + case 5: + case 6: + return '[В прошлую] dddd, [в] LT'; + } + } else { + if (this.day() === 2) { + return '[Во] dddd, [в] LT'; + } else { + return '[В] dddd, [в] LT'; + } + } + }, + sameElse: 'L', + }, + relativeTime: { + future: 'через %s', + past: '%s назад', + s: 'несколько секунд', + ss: relativeTimeWithPlural$3, + m: relativeTimeWithPlural$3, + mm: relativeTimeWithPlural$3, + h: 'час', + hh: relativeTimeWithPlural$3, + d: 'день', + dd: relativeTimeWithPlural$3, + M: 'месяц', + MM: relativeTimeWithPlural$3, + y: 'год', + yy: relativeTimeWithPlural$3, + }, + meridiemParse: /ночи|утра|дня|вечера/i, + isPM: function (input) { + return /^(дня|вечера)$/.test(input); + }, + meridiem: function (hour, minute, isLower) { + if (hour < 4) { + return 'ночи'; + } else if (hour < 12) { + return 'утра'; + } else if (hour < 17) { + return 'дня'; + } else { + return 'вечера'; + } + }, + dayOfMonthOrdinalParse: /\d{1,2}-(й|го|я)/, + ordinal: function (number, period) { + switch (period) { + case 'M': + case 'd': + case 'DDD': + return number + '-й'; + case 'D': + return number + '-го'; + case 'w': + case 'W': + return number + '-я'; + default: + return number; + } + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var months$9 = [ + 'جنوري', + 'فيبروري', + 'مارچ', + 'اپريل', + 'مئي', + 'جون', + 'جولاءِ', + 'آگسٽ', + 'سيپٽمبر', + 'آڪٽوبر', + 'نومبر', + 'ڊسمبر', + ], + days$1 = ['آچر', 'سومر', 'اڱارو', 'اربع', 'خميس', 'جمع', 'ڇنڇر']; + + hooks.defineLocale('sd', { + months: months$9, + monthsShort: months$9, + weekdays: days$1, + weekdaysShort: days$1, + weekdaysMin: days$1, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd، D MMMM YYYY HH:mm', + }, + meridiemParse: /صبح|شام/, + isPM: function (input) { + return 'شام' === input; + }, + meridiem: function (hour, minute, isLower) { + if (hour < 12) { + return 'صبح'; + } + return 'شام'; + }, + calendar: { + sameDay: '[اڄ] LT', + nextDay: '[سڀاڻي] LT', + nextWeek: 'dddd [اڳين هفتي تي] LT', + lastDay: '[ڪالهه] LT', + lastWeek: '[گزريل هفتي] dddd [تي] LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s پوء', + past: '%s اڳ', + s: 'چند سيڪنڊ', + ss: '%d سيڪنڊ', + m: 'هڪ منٽ', + mm: '%d منٽ', + h: 'هڪ ڪلاڪ', + hh: '%d ڪلاڪ', + d: 'هڪ ڏينهن', + dd: '%d ڏينهن', + M: 'هڪ مهينو', + MM: '%d مهينا', + y: 'هڪ سال', + yy: '%d سال', + }, + preparse: function (string) { + return string.replace(/،/g, ','); + }, + postformat: function (string) { + return string.replace(/,/g, '،'); + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('se', { + months: 'ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu'.split( + '_' + ), + monthsShort: 'ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov'.split( + '_' + ), + weekdays: 'sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat'.split( + '_' + ), + weekdaysShort: 'sotn_vuos_maŋ_gask_duor_bear_láv'.split('_'), + weekdaysMin: 's_v_m_g_d_b_L'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'MMMM D. [b.] YYYY', + LLL: 'MMMM D. [b.] YYYY [ti.] HH:mm', + LLLL: 'dddd, MMMM D. [b.] YYYY [ti.] HH:mm', + }, + calendar: { + sameDay: '[otne ti] LT', + nextDay: '[ihttin ti] LT', + nextWeek: 'dddd [ti] LT', + lastDay: '[ikte ti] LT', + lastWeek: '[ovddit] dddd [ti] LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s geažes', + past: 'maŋit %s', + s: 'moadde sekunddat', + ss: '%d sekunddat', + m: 'okta minuhta', + mm: '%d minuhtat', + h: 'okta diimmu', + hh: '%d diimmut', + d: 'okta beaivi', + dd: '%d beaivvit', + M: 'okta mánnu', + MM: '%d mánut', + y: 'okta jahki', + yy: '%d jagit', + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + /*jshint -W100*/ + hooks.defineLocale('si', { + months: 'ජනවාරි_පෙබරවාරි_මාර්තු_අප්‍රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්'.split( + '_' + ), + monthsShort: 'ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ'.split( + '_' + ), + weekdays: 'ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා'.split( + '_' + ), + weekdaysShort: 'ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන'.split('_'), + weekdaysMin: 'ඉ_ස_අ_බ_බ්‍ර_සි_සෙ'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'a h:mm', + LTS: 'a h:mm:ss', + L: 'YYYY/MM/DD', + LL: 'YYYY MMMM D', + LLL: 'YYYY MMMM D, a h:mm', + LLLL: 'YYYY MMMM D [වැනි] dddd, a h:mm:ss', + }, + calendar: { + sameDay: '[අද] LT[ට]', + nextDay: '[හෙට] LT[ට]', + nextWeek: 'dddd LT[ට]', + lastDay: '[ඊයේ] LT[ට]', + lastWeek: '[පසුගිය] dddd LT[ට]', + sameElse: 'L', + }, + relativeTime: { + future: '%sකින්', + past: '%sකට පෙර', + s: 'තත්පර කිහිපය', + ss: 'තත්පර %d', + m: 'මිනිත්තුව', + mm: 'මිනිත්තු %d', + h: 'පැය', + hh: 'පැය %d', + d: 'දිනය', + dd: 'දින %d', + M: 'මාසය', + MM: 'මාස %d', + y: 'වසර', + yy: 'වසර %d', + }, + dayOfMonthOrdinalParse: /\d{1,2} වැනි/, + ordinal: function (number) { + return number + ' වැනි'; + }, + meridiemParse: /පෙර වරු|පස් වරු|පෙ.ව|ප.ව./, + isPM: function (input) { + return input === 'ප.ව.' || input === 'පස් වරු'; + }, + meridiem: function (hours, minutes, isLower) { + if (hours > 11) { + return isLower ? 'ප.ව.' : 'පස් වරු'; + } else { + return isLower ? 'පෙ.ව.' : 'පෙර වරු'; + } + }, + }); + + //! moment.js locale configuration + + var months$a = 'január_február_marec_apríl_máj_jún_júl_august_september_október_november_december'.split( + '_' + ), + monthsShort$6 = 'jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec'.split('_'); + function plural$5(n) { + return n > 1 && n < 5; + } + function translate$9(number, withoutSuffix, key, isFuture) { + var result = number + ' '; + switch (key) { + case 's': // a few seconds / in a few seconds / a few seconds ago + return withoutSuffix || isFuture ? 'pár sekúnd' : 'pár sekundami'; + case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago + if (withoutSuffix || isFuture) { + return result + (plural$5(number) ? 'sekundy' : 'sekúnd'); + } else { + return result + 'sekundami'; + } + case 'm': // a minute / in a minute / a minute ago + return withoutSuffix ? 'minúta' : isFuture ? 'minútu' : 'minútou'; + case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago + if (withoutSuffix || isFuture) { + return result + (plural$5(number) ? 'minúty' : 'minút'); + } else { + return result + 'minútami'; + } + case 'h': // an hour / in an hour / an hour ago + return withoutSuffix ? 'hodina' : isFuture ? 'hodinu' : 'hodinou'; + case 'hh': // 9 hours / in 9 hours / 9 hours ago + if (withoutSuffix || isFuture) { + return result + (plural$5(number) ? 'hodiny' : 'hodín'); + } else { + return result + 'hodinami'; + } + case 'd': // a day / in a day / a day ago + return withoutSuffix || isFuture ? 'deň' : 'dňom'; + case 'dd': // 9 days / in 9 days / 9 days ago + if (withoutSuffix || isFuture) { + return result + (plural$5(number) ? 'dni' : 'dní'); + } else { + return result + 'dňami'; + } + case 'M': // a month / in a month / a month ago + return withoutSuffix || isFuture ? 'mesiac' : 'mesiacom'; + case 'MM': // 9 months / in 9 months / 9 months ago + if (withoutSuffix || isFuture) { + return result + (plural$5(number) ? 'mesiace' : 'mesiacov'); + } else { + return result + 'mesiacmi'; + } + case 'y': // a year / in a year / a year ago + return withoutSuffix || isFuture ? 'rok' : 'rokom'; + case 'yy': // 9 years / in 9 years / 9 years ago + if (withoutSuffix || isFuture) { + return result + (plural$5(number) ? 'roky' : 'rokov'); + } else { + return result + 'rokmi'; + } + } + } + + hooks.defineLocale('sk', { + months: months$a, + monthsShort: monthsShort$6, + weekdays: 'nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota'.split('_'), + weekdaysShort: 'ne_po_ut_st_št_pi_so'.split('_'), + weekdaysMin: 'ne_po_ut_st_št_pi_so'.split('_'), + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY H:mm', + LLLL: 'dddd D. MMMM YYYY H:mm', + }, + calendar: { + sameDay: '[dnes o] LT', + nextDay: '[zajtra o] LT', + nextWeek: function () { + switch (this.day()) { + case 0: + return '[v nedeľu o] LT'; + case 1: + case 2: + return '[v] dddd [o] LT'; + case 3: + return '[v stredu o] LT'; + case 4: + return '[vo štvrtok o] LT'; + case 5: + return '[v piatok o] LT'; + case 6: + return '[v sobotu o] LT'; + } + }, + lastDay: '[včera o] LT', + lastWeek: function () { + switch (this.day()) { + case 0: + return '[minulú nedeľu o] LT'; + case 1: + case 2: + return '[minulý] dddd [o] LT'; + case 3: + return '[minulú stredu o] LT'; + case 4: + case 5: + return '[minulý] dddd [o] LT'; + case 6: + return '[minulú sobotu o] LT'; + } + }, + sameElse: 'L', + }, + relativeTime: { + future: 'za %s', + past: 'pred %s', + s: translate$9, + ss: translate$9, + m: translate$9, + mm: translate$9, + h: translate$9, + hh: translate$9, + d: translate$9, + dd: translate$9, + M: translate$9, + MM: translate$9, + y: translate$9, + yy: translate$9, + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + function processRelativeTime$7(number, withoutSuffix, key, isFuture) { + var result = number + ' '; + switch (key) { + case 's': + return withoutSuffix || isFuture + ? 'nekaj sekund' + : 'nekaj sekundami'; + case 'ss': + if (number === 1) { + result += withoutSuffix ? 'sekundo' : 'sekundi'; + } else if (number === 2) { + result += withoutSuffix || isFuture ? 'sekundi' : 'sekundah'; + } else if (number < 5) { + result += withoutSuffix || isFuture ? 'sekunde' : 'sekundah'; + } else { + result += 'sekund'; + } + return result; + case 'm': + return withoutSuffix ? 'ena minuta' : 'eno minuto'; + case 'mm': + if (number === 1) { + result += withoutSuffix ? 'minuta' : 'minuto'; + } else if (number === 2) { + result += withoutSuffix || isFuture ? 'minuti' : 'minutama'; + } else if (number < 5) { + result += withoutSuffix || isFuture ? 'minute' : 'minutami'; + } else { + result += withoutSuffix || isFuture ? 'minut' : 'minutami'; + } + return result; + case 'h': + return withoutSuffix ? 'ena ura' : 'eno uro'; + case 'hh': + if (number === 1) { + result += withoutSuffix ? 'ura' : 'uro'; + } else if (number === 2) { + result += withoutSuffix || isFuture ? 'uri' : 'urama'; + } else if (number < 5) { + result += withoutSuffix || isFuture ? 'ure' : 'urami'; + } else { + result += withoutSuffix || isFuture ? 'ur' : 'urami'; + } + return result; + case 'd': + return withoutSuffix || isFuture ? 'en dan' : 'enim dnem'; + case 'dd': + if (number === 1) { + result += withoutSuffix || isFuture ? 'dan' : 'dnem'; + } else if (number === 2) { + result += withoutSuffix || isFuture ? 'dni' : 'dnevoma'; + } else { + result += withoutSuffix || isFuture ? 'dni' : 'dnevi'; + } + return result; + case 'M': + return withoutSuffix || isFuture ? 'en mesec' : 'enim mesecem'; + case 'MM': + if (number === 1) { + result += withoutSuffix || isFuture ? 'mesec' : 'mesecem'; + } else if (number === 2) { + result += withoutSuffix || isFuture ? 'meseca' : 'mesecema'; + } else if (number < 5) { + result += withoutSuffix || isFuture ? 'mesece' : 'meseci'; + } else { + result += withoutSuffix || isFuture ? 'mesecev' : 'meseci'; + } + return result; + case 'y': + return withoutSuffix || isFuture ? 'eno leto' : 'enim letom'; + case 'yy': + if (number === 1) { + result += withoutSuffix || isFuture ? 'leto' : 'letom'; + } else if (number === 2) { + result += withoutSuffix || isFuture ? 'leti' : 'letoma'; + } else if (number < 5) { + result += withoutSuffix || isFuture ? 'leta' : 'leti'; + } else { + result += withoutSuffix || isFuture ? 'let' : 'leti'; + } + return result; + } + } + + hooks.defineLocale('sl', { + months: 'januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december'.split( + '_' + ), + monthsShort: 'jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota'.split('_'), + weekdaysShort: 'ned._pon._tor._sre._čet._pet._sob.'.split('_'), + weekdaysMin: 'ne_po_to_sr_če_pe_so'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD. MM. YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY H:mm', + LLLL: 'dddd, D. MMMM YYYY H:mm', + }, + calendar: { + sameDay: '[danes ob] LT', + nextDay: '[jutri ob] LT', + + nextWeek: function () { + switch (this.day()) { + case 0: + return '[v] [nedeljo] [ob] LT'; + case 3: + return '[v] [sredo] [ob] LT'; + case 6: + return '[v] [soboto] [ob] LT'; + case 1: + case 2: + case 4: + case 5: + return '[v] dddd [ob] LT'; + } + }, + lastDay: '[včeraj ob] LT', + lastWeek: function () { + switch (this.day()) { + case 0: + return '[prejšnjo] [nedeljo] [ob] LT'; + case 3: + return '[prejšnjo] [sredo] [ob] LT'; + case 6: + return '[prejšnjo] [soboto] [ob] LT'; + case 1: + case 2: + case 4: + case 5: + return '[prejšnji] dddd [ob] LT'; + } + }, + sameElse: 'L', + }, + relativeTime: { + future: 'čez %s', + past: 'pred %s', + s: processRelativeTime$7, + ss: processRelativeTime$7, + m: processRelativeTime$7, + mm: processRelativeTime$7, + h: processRelativeTime$7, + hh: processRelativeTime$7, + d: processRelativeTime$7, + dd: processRelativeTime$7, + M: processRelativeTime$7, + MM: processRelativeTime$7, + y: processRelativeTime$7, + yy: processRelativeTime$7, + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('sq', { + months: 'Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor'.split( + '_' + ), + monthsShort: 'Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj'.split('_'), + weekdays: 'E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë'.split( + '_' + ), + weekdaysShort: 'Die_Hën_Mar_Mër_Enj_Pre_Sht'.split('_'), + weekdaysMin: 'D_H_Ma_Më_E_P_Sh'.split('_'), + weekdaysParseExact: true, + meridiemParse: /PD|MD/, + isPM: function (input) { + return input.charAt(0) === 'M'; + }, + meridiem: function (hours, minutes, isLower) { + return hours < 12 ? 'PD' : 'MD'; + }, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Sot në] LT', + nextDay: '[Nesër në] LT', + nextWeek: 'dddd [në] LT', + lastDay: '[Dje në] LT', + lastWeek: 'dddd [e kaluar në] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'në %s', + past: '%s më parë', + s: 'disa sekonda', + ss: '%d sekonda', + m: 'një minutë', + mm: '%d minuta', + h: 'një orë', + hh: '%d orë', + d: 'një ditë', + dd: '%d ditë', + M: 'një muaj', + MM: '%d muaj', + y: 'një vit', + yy: '%d vite', + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var translator$1 = { + words: { + //Different grammatical cases + ss: ['секунда', 'секунде', 'секунди'], + m: ['један минут', 'једне минуте'], + mm: ['минут', 'минуте', 'минута'], + h: ['један сат', 'једног сата'], + hh: ['сат', 'сата', 'сати'], + dd: ['дан', 'дана', 'дана'], + MM: ['месец', 'месеца', 'месеци'], + yy: ['година', 'године', 'година'], + }, + correctGrammaticalCase: function (number, wordKey) { + return number === 1 + ? wordKey[0] + : number >= 2 && number <= 4 + ? wordKey[1] + : wordKey[2]; + }, + translate: function (number, withoutSuffix, key) { + var wordKey = translator$1.words[key]; + if (key.length === 1) { + return withoutSuffix ? wordKey[0] : wordKey[1]; + } else { + return ( + number + + ' ' + + translator$1.correctGrammaticalCase(number, wordKey) + ); + } + }, + }; + + hooks.defineLocale('sr-cyrl', { + months: 'јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар'.split( + '_' + ), + monthsShort: 'јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'недеља_понедељак_уторак_среда_четвртак_петак_субота'.split('_'), + weekdaysShort: 'нед._пон._уто._сре._чет._пет._суб.'.split('_'), + weekdaysMin: 'не_по_ут_ср_че_пе_су'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY H:mm', + LLLL: 'dddd, D. MMMM YYYY H:mm', + }, + calendar: { + sameDay: '[данас у] LT', + nextDay: '[сутра у] LT', + nextWeek: function () { + switch (this.day()) { + case 0: + return '[у] [недељу] [у] LT'; + case 3: + return '[у] [среду] [у] LT'; + case 6: + return '[у] [суботу] [у] LT'; + case 1: + case 2: + case 4: + case 5: + return '[у] dddd [у] LT'; + } + }, + lastDay: '[јуче у] LT', + lastWeek: function () { + var lastWeekDays = [ + '[прошле] [недеље] [у] LT', + '[прошлог] [понедељка] [у] LT', + '[прошлог] [уторка] [у] LT', + '[прошле] [среде] [у] LT', + '[прошлог] [четвртка] [у] LT', + '[прошлог] [петка] [у] LT', + '[прошле] [суботе] [у] LT', + ]; + return lastWeekDays[this.day()]; + }, + sameElse: 'L', + }, + relativeTime: { + future: 'за %s', + past: 'пре %s', + s: 'неколико секунди', + ss: translator$1.translate, + m: translator$1.translate, + mm: translator$1.translate, + h: translator$1.translate, + hh: translator$1.translate, + d: 'дан', + dd: translator$1.translate, + M: 'месец', + MM: translator$1.translate, + y: 'годину', + yy: translator$1.translate, + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var translator$2 = { + words: { + //Different grammatical cases + ss: ['sekunda', 'sekunde', 'sekundi'], + m: ['jedan minut', 'jedne minute'], + mm: ['minut', 'minute', 'minuta'], + h: ['jedan sat', 'jednog sata'], + hh: ['sat', 'sata', 'sati'], + dd: ['dan', 'dana', 'dana'], + MM: ['mesec', 'meseca', 'meseci'], + yy: ['godina', 'godine', 'godina'], + }, + correctGrammaticalCase: function (number, wordKey) { + return number === 1 + ? wordKey[0] + : number >= 2 && number <= 4 + ? wordKey[1] + : wordKey[2]; + }, + translate: function (number, withoutSuffix, key) { + var wordKey = translator$2.words[key]; + if (key.length === 1) { + return withoutSuffix ? wordKey[0] : wordKey[1]; + } else { + return ( + number + + ' ' + + translator$2.correctGrammaticalCase(number, wordKey) + ); + } + }, + }; + + hooks.defineLocale('sr', { + months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split( + '_' + ), + monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota'.split( + '_' + ), + weekdaysShort: 'ned._pon._uto._sre._čet._pet._sub.'.split('_'), + weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY H:mm', + LLLL: 'dddd, D. MMMM YYYY H:mm', + }, + calendar: { + sameDay: '[danas u] LT', + nextDay: '[sutra u] LT', + nextWeek: function () { + switch (this.day()) { + case 0: + return '[u] [nedelju] [u] LT'; + case 3: + return '[u] [sredu] [u] LT'; + case 6: + return '[u] [subotu] [u] LT'; + case 1: + case 2: + case 4: + case 5: + return '[u] dddd [u] LT'; + } + }, + lastDay: '[juče u] LT', + lastWeek: function () { + var lastWeekDays = [ + '[prošle] [nedelje] [u] LT', + '[prošlog] [ponedeljka] [u] LT', + '[prošlog] [utorka] [u] LT', + '[prošle] [srede] [u] LT', + '[prošlog] [četvrtka] [u] LT', + '[prošlog] [petka] [u] LT', + '[prošle] [subote] [u] LT', + ]; + return lastWeekDays[this.day()]; + }, + sameElse: 'L', + }, + relativeTime: { + future: 'za %s', + past: 'pre %s', + s: 'nekoliko sekundi', + ss: translator$2.translate, + m: translator$2.translate, + mm: translator$2.translate, + h: translator$2.translate, + hh: translator$2.translate, + d: 'dan', + dd: translator$2.translate, + M: 'mesec', + MM: translator$2.translate, + y: 'godinu', + yy: translator$2.translate, + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('ss', { + months: "Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni".split( + '_' + ), + monthsShort: 'Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo'.split('_'), + weekdays: 'Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo'.split( + '_' + ), + weekdaysShort: 'Lis_Umb_Lsb_Les_Lsi_Lsh_Umg'.split('_'), + weekdaysMin: 'Li_Us_Lb_Lt_Ls_Lh_Ug'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'h:mm A', + LTS: 'h:mm:ss A', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY h:mm A', + LLLL: 'dddd, D MMMM YYYY h:mm A', + }, + calendar: { + sameDay: '[Namuhla nga] LT', + nextDay: '[Kusasa nga] LT', + nextWeek: 'dddd [nga] LT', + lastDay: '[Itolo nga] LT', + lastWeek: 'dddd [leliphelile] [nga] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'nga %s', + past: 'wenteka nga %s', + s: 'emizuzwana lomcane', + ss: '%d mzuzwana', + m: 'umzuzu', + mm: '%d emizuzu', + h: 'lihora', + hh: '%d emahora', + d: 'lilanga', + dd: '%d emalanga', + M: 'inyanga', + MM: '%d tinyanga', + y: 'umnyaka', + yy: '%d iminyaka', + }, + meridiemParse: /ekuseni|emini|entsambama|ebusuku/, + meridiem: function (hours, minutes, isLower) { + if (hours < 11) { + return 'ekuseni'; + } else if (hours < 15) { + return 'emini'; + } else if (hours < 19) { + return 'entsambama'; + } else { + return 'ebusuku'; + } + }, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'ekuseni') { + return hour; + } else if (meridiem === 'emini') { + return hour >= 11 ? hour : hour + 12; + } else if (meridiem === 'entsambama' || meridiem === 'ebusuku') { + if (hour === 0) { + return 0; + } + return hour + 12; + } + }, + dayOfMonthOrdinalParse: /\d{1,2}/, + ordinal: '%d', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('sv', { + months: 'januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december'.split( + '_' + ), + monthsShort: 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'), + weekdays: 'söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag'.split('_'), + weekdaysShort: 'sön_mån_tis_ons_tor_fre_lör'.split('_'), + weekdaysMin: 'sö_må_ti_on_to_fr_lö'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'YYYY-MM-DD', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY [kl.] HH:mm', + LLLL: 'dddd D MMMM YYYY [kl.] HH:mm', + lll: 'D MMM YYYY HH:mm', + llll: 'ddd D MMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Idag] LT', + nextDay: '[Imorgon] LT', + lastDay: '[Igår] LT', + nextWeek: '[På] dddd LT', + lastWeek: '[I] dddd[s] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'om %s', + past: 'för %s sedan', + s: 'några sekunder', + ss: '%d sekunder', + m: 'en minut', + mm: '%d minuter', + h: 'en timme', + hh: '%d timmar', + d: 'en dag', + dd: '%d dagar', + M: 'en månad', + MM: '%d månader', + y: 'ett år', + yy: '%d år', + }, + dayOfMonthOrdinalParse: /\d{1,2}(\:e|\:a)/, + ordinal: function (number) { + var b = number % 10, + output = + ~~((number % 100) / 10) === 1 + ? ':e' + : b === 1 + ? ':a' + : b === 2 + ? ':a' + : b === 3 + ? ':e' + : ':e'; + return number + output; + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('sw', { + months: 'Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba'.split( + '_' + ), + monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des'.split('_'), + weekdays: 'Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi'.split( + '_' + ), + weekdaysShort: 'Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos'.split('_'), + weekdaysMin: 'J2_J3_J4_J5_Al_Ij_J1'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'hh:mm A', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[leo saa] LT', + nextDay: '[kesho saa] LT', + nextWeek: '[wiki ijayo] dddd [saat] LT', + lastDay: '[jana] LT', + lastWeek: '[wiki iliyopita] dddd [saat] LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s baadaye', + past: 'tokea %s', + s: 'hivi punde', + ss: 'sekunde %d', + m: 'dakika moja', + mm: 'dakika %d', + h: 'saa limoja', + hh: 'masaa %d', + d: 'siku moja', + dd: 'siku %d', + M: 'mwezi mmoja', + MM: 'miezi %d', + y: 'mwaka mmoja', + yy: 'miaka %d', + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var symbolMap$f = { + '1': '௧', + '2': '௨', + '3': '௩', + '4': '௪', + '5': '௫', + '6': '௬', + '7': '௭', + '8': '௮', + '9': '௯', + '0': '௦', + }, + numberMap$e = { + '௧': '1', + '௨': '2', + '௩': '3', + '௪': '4', + '௫': '5', + '௬': '6', + '௭': '7', + '௮': '8', + '௯': '9', + '௦': '0', + }; + + hooks.defineLocale('ta', { + months: 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split( + '_' + ), + monthsShort: 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split( + '_' + ), + weekdays: 'ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை'.split( + '_' + ), + weekdaysShort: 'ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி'.split( + '_' + ), + weekdaysMin: 'ஞா_தி_செ_பு_வி_வெ_ச'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY, HH:mm', + LLLL: 'dddd, D MMMM YYYY, HH:mm', + }, + calendar: { + sameDay: '[இன்று] LT', + nextDay: '[நாளை] LT', + nextWeek: 'dddd, LT', + lastDay: '[நேற்று] LT', + lastWeek: '[கடந்த வாரம்] dddd, LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s இல்', + past: '%s முன்', + s: 'ஒரு சில விநாடிகள்', + ss: '%d விநாடிகள்', + m: 'ஒரு நிமிடம்', + mm: '%d நிமிடங்கள்', + h: 'ஒரு மணி நேரம்', + hh: '%d மணி நேரம்', + d: 'ஒரு நாள்', + dd: '%d நாட்கள்', + M: 'ஒரு மாதம்', + MM: '%d மாதங்கள்', + y: 'ஒரு வருடம்', + yy: '%d ஆண்டுகள்', + }, + dayOfMonthOrdinalParse: /\d{1,2}வது/, + ordinal: function (number) { + return number + 'வது'; + }, + preparse: function (string) { + return string.replace(/[௧௨௩௪௫௬௭௮௯௦]/g, function (match) { + return numberMap$e[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$f[match]; + }); + }, + // refer http://ta.wikipedia.org/s/1er1 + meridiemParse: /யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/, + meridiem: function (hour, minute, isLower) { + if (hour < 2) { + return ' யாமம்'; + } else if (hour < 6) { + return ' வைகறை'; // வைகறை + } else if (hour < 10) { + return ' காலை'; // காலை + } else if (hour < 14) { + return ' நண்பகல்'; // நண்பகல் + } else if (hour < 18) { + return ' எற்பாடு'; // எற்பாடு + } else if (hour < 22) { + return ' மாலை'; // மாலை + } else { + return ' யாமம்'; + } + }, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'யாமம்') { + return hour < 2 ? hour : hour + 12; + } else if (meridiem === 'வைகறை' || meridiem === 'காலை') { + return hour; + } else if (meridiem === 'நண்பகல்') { + return hour >= 10 ? hour : hour + 12; + } else { + return hour + 12; + } + }, + week: { + dow: 0, // Sunday is the first day of the week. + doy: 6, // The week that contains Jan 6th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('te', { + months: 'జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జులై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్'.split( + '_' + ), + monthsShort: 'జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జులై_ఆగ._సెప్._అక్టో._నవ._డిసె.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం'.split( + '_' + ), + weekdaysShort: 'ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని'.split('_'), + weekdaysMin: 'ఆ_సో_మం_బు_గు_శు_శ'.split('_'), + longDateFormat: { + LT: 'A h:mm', + LTS: 'A h:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY, A h:mm', + LLLL: 'dddd, D MMMM YYYY, A h:mm', + }, + calendar: { + sameDay: '[నేడు] LT', + nextDay: '[రేపు] LT', + nextWeek: 'dddd, LT', + lastDay: '[నిన్న] LT', + lastWeek: '[గత] dddd, LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s లో', + past: '%s క్రితం', + s: 'కొన్ని క్షణాలు', + ss: '%d సెకన్లు', + m: 'ఒక నిమిషం', + mm: '%d నిమిషాలు', + h: 'ఒక గంట', + hh: '%d గంటలు', + d: 'ఒక రోజు', + dd: '%d రోజులు', + M: 'ఒక నెల', + MM: '%d నెలలు', + y: 'ఒక సంవత్సరం', + yy: '%d సంవత్సరాలు', + }, + dayOfMonthOrdinalParse: /\d{1,2}వ/, + ordinal: '%dవ', + meridiemParse: /రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'రాత్రి') { + return hour < 4 ? hour : hour + 12; + } else if (meridiem === 'ఉదయం') { + return hour; + } else if (meridiem === 'మధ్యాహ్నం') { + return hour >= 10 ? hour : hour + 12; + } else if (meridiem === 'సాయంత్రం') { + return hour + 12; + } + }, + meridiem: function (hour, minute, isLower) { + if (hour < 4) { + return 'రాత్రి'; + } else if (hour < 10) { + return 'ఉదయం'; + } else if (hour < 17) { + return 'మధ్యాహ్నం'; + } else if (hour < 20) { + return 'సాయంత్రం'; + } else { + return 'రాత్రి'; + } + }, + week: { + dow: 0, // Sunday is the first day of the week. + doy: 6, // The week that contains Jan 6th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('tet', { + months: 'Janeiru_Fevereiru_Marsu_Abril_Maiu_Juñu_Jullu_Agustu_Setembru_Outubru_Novembru_Dezembru'.split( + '_' + ), + monthsShort: 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'), + weekdays: 'Domingu_Segunda_Tersa_Kuarta_Kinta_Sesta_Sabadu'.split('_'), + weekdaysShort: 'Dom_Seg_Ters_Kua_Kint_Sest_Sab'.split('_'), + weekdaysMin: 'Do_Seg_Te_Ku_Ki_Ses_Sa'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Ohin iha] LT', + nextDay: '[Aban iha] LT', + nextWeek: 'dddd [iha] LT', + lastDay: '[Horiseik iha] LT', + lastWeek: 'dddd [semana kotuk] [iha] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'iha %s', + past: '%s liuba', + s: 'segundu balun', + ss: 'segundu %d', + m: 'minutu ida', + mm: 'minutu %d', + h: 'oras ida', + hh: 'oras %d', + d: 'loron ida', + dd: 'loron %d', + M: 'fulan ida', + MM: 'fulan %d', + y: 'tinan ida', + yy: 'tinan %d', + }, + dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, + ordinal: function (number) { + var b = number % 10, + output = + ~~((number % 100) / 10) === 1 + ? 'th' + : b === 1 + ? 'st' + : b === 2 + ? 'nd' + : b === 3 + ? 'rd' + : 'th'; + return number + output; + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var suffixes$3 = { + 0: '-ум', + 1: '-ум', + 2: '-юм', + 3: '-юм', + 4: '-ум', + 5: '-ум', + 6: '-ум', + 7: '-ум', + 8: '-ум', + 9: '-ум', + 10: '-ум', + 12: '-ум', + 13: '-ум', + 20: '-ум', + 30: '-юм', + 40: '-ум', + 50: '-ум', + 60: '-ум', + 70: '-ум', + 80: '-ум', + 90: '-ум', + 100: '-ум', + }; + + hooks.defineLocale('tg', { + months: 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split( + '_' + ), + monthsShort: 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'), + weekdays: 'якшанбе_душанбе_сешанбе_чоршанбе_панҷшанбе_ҷумъа_шанбе'.split( + '_' + ), + weekdaysShort: 'яшб_дшб_сшб_чшб_пшб_ҷум_шнб'.split('_'), + weekdaysMin: 'яш_дш_сш_чш_пш_ҷм_шб'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Имрӯз соати] LT', + nextDay: '[Пагоҳ соати] LT', + lastDay: '[Дирӯз соати] LT', + nextWeek: 'dddd[и] [ҳафтаи оянда соати] LT', + lastWeek: 'dddd[и] [ҳафтаи гузашта соати] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'баъди %s', + past: '%s пеш', + s: 'якчанд сония', + m: 'як дақиқа', + mm: '%d дақиқа', + h: 'як соат', + hh: '%d соат', + d: 'як рӯз', + dd: '%d рӯз', + M: 'як моҳ', + MM: '%d моҳ', + y: 'як сол', + yy: '%d сол', + }, + meridiemParse: /шаб|субҳ|рӯз|бегоҳ/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'шаб') { + return hour < 4 ? hour : hour + 12; + } else if (meridiem === 'субҳ') { + return hour; + } else if (meridiem === 'рӯз') { + return hour >= 11 ? hour : hour + 12; + } else if (meridiem === 'бегоҳ') { + return hour + 12; + } + }, + meridiem: function (hour, minute, isLower) { + if (hour < 4) { + return 'шаб'; + } else if (hour < 11) { + return 'субҳ'; + } else if (hour < 16) { + return 'рӯз'; + } else if (hour < 19) { + return 'бегоҳ'; + } else { + return 'шаб'; + } + }, + dayOfMonthOrdinalParse: /\d{1,2}-(ум|юм)/, + ordinal: function (number) { + var a = number % 10, + b = number >= 100 ? 100 : null; + return number + (suffixes$3[number] || suffixes$3[a] || suffixes$3[b]); + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 1th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('th', { + months: 'มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม'.split( + '_' + ), + monthsShort: 'ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์'.split('_'), + weekdaysShort: 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์'.split('_'), // yes, three characters difference + weekdaysMin: 'อา._จ._อ._พ._พฤ._ศ._ส.'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY เวลา H:mm', + LLLL: 'วันddddที่ D MMMM YYYY เวลา H:mm', + }, + meridiemParse: /ก่อนเที่ยง|หลังเที่ยง/, + isPM: function (input) { + return input === 'หลังเที่ยง'; + }, + meridiem: function (hour, minute, isLower) { + if (hour < 12) { + return 'ก่อนเที่ยง'; + } else { + return 'หลังเที่ยง'; + } + }, + calendar: { + sameDay: '[วันนี้ เวลา] LT', + nextDay: '[พรุ่งนี้ เวลา] LT', + nextWeek: 'dddd[หน้า เวลา] LT', + lastDay: '[เมื่อวานนี้ เวลา] LT', + lastWeek: '[วัน]dddd[ที่แล้ว เวลา] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'อีก %s', + past: '%sที่แล้ว', + s: 'ไม่กี่วินาที', + ss: '%d วินาที', + m: '1 นาที', + mm: '%d นาที', + h: '1 ชั่วโมง', + hh: '%d ชั่วโมง', + d: '1 วัน', + dd: '%d วัน', + M: '1 เดือน', + MM: '%d เดือน', + y: '1 ปี', + yy: '%d ปี', + }, + }); + + //! moment.js locale configuration + + var suffixes$4 = { + 1: "'inji", + 5: "'inji", + 8: "'inji", + 70: "'inji", + 80: "'inji", + 2: "'nji", + 7: "'nji", + 20: "'nji", + 50: "'nji", + 3: "'ünji", + 4: "'ünji", + 100: "'ünji", + 6: "'njy", + 9: "'unjy", + 10: "'unjy", + 30: "'unjy", + 60: "'ynjy", + 90: "'ynjy", + }; + + hooks.defineLocale('tk', { + months: 'Ýanwar_Fewral_Mart_Aprel_Maý_Iýun_Iýul_Awgust_Sentýabr_Oktýabr_Noýabr_Dekabr'.split( + '_' + ), + monthsShort: 'Ýan_Few_Mar_Apr_Maý_Iýn_Iýl_Awg_Sen_Okt_Noý_Dek'.split('_'), + weekdays: 'Ýekşenbe_Duşenbe_Sişenbe_Çarşenbe_Penşenbe_Anna_Şenbe'.split( + '_' + ), + weekdaysShort: 'Ýek_Duş_Siş_Çar_Pen_Ann_Şen'.split('_'), + weekdaysMin: 'Ýk_Dş_Sş_Çr_Pn_An_Şn'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[bugün sagat] LT', + nextDay: '[ertir sagat] LT', + nextWeek: '[indiki] dddd [sagat] LT', + lastDay: '[düýn] LT', + lastWeek: '[geçen] dddd [sagat] LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s soň', + past: '%s öň', + s: 'birnäçe sekunt', + m: 'bir minut', + mm: '%d minut', + h: 'bir sagat', + hh: '%d sagat', + d: 'bir gün', + dd: '%d gün', + M: 'bir aý', + MM: '%d aý', + y: 'bir ýyl', + yy: '%d ýyl', + }, + ordinal: function (number, period) { + switch (period) { + case 'd': + case 'D': + case 'Do': + case 'DD': + return number; + default: + if (number === 0) { + // special case for zero + return number + "'unjy"; + } + var a = number % 10, + b = (number % 100) - a, + c = number >= 100 ? 100 : null; + return number + (suffixes$4[a] || suffixes$4[b] || suffixes$4[c]); + } + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('tl-ph', { + months: 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split( + '_' + ), + monthsShort: 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'), + weekdays: 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split( + '_' + ), + weekdaysShort: 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'), + weekdaysMin: 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'MM/D/YYYY', + LL: 'MMMM D, YYYY', + LLL: 'MMMM D, YYYY HH:mm', + LLLL: 'dddd, MMMM DD, YYYY HH:mm', + }, + calendar: { + sameDay: 'LT [ngayong araw]', + nextDay: '[Bukas ng] LT', + nextWeek: 'LT [sa susunod na] dddd', + lastDay: 'LT [kahapon]', + lastWeek: 'LT [noong nakaraang] dddd', + sameElse: 'L', + }, + relativeTime: { + future: 'sa loob ng %s', + past: '%s ang nakalipas', + s: 'ilang segundo', + ss: '%d segundo', + m: 'isang minuto', + mm: '%d minuto', + h: 'isang oras', + hh: '%d oras', + d: 'isang araw', + dd: '%d araw', + M: 'isang buwan', + MM: '%d buwan', + y: 'isang taon', + yy: '%d taon', + }, + dayOfMonthOrdinalParse: /\d{1,2}/, + ordinal: function (number) { + return number; + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var numbersNouns = 'pagh_wa’_cha’_wej_loS_vagh_jav_Soch_chorgh_Hut'.split('_'); + + function translateFuture(output) { + var time = output; + time = + output.indexOf('jaj') !== -1 + ? time.slice(0, -3) + 'leS' + : output.indexOf('jar') !== -1 + ? time.slice(0, -3) + 'waQ' + : output.indexOf('DIS') !== -1 + ? time.slice(0, -3) + 'nem' + : time + ' pIq'; + return time; + } + + function translatePast(output) { + var time = output; + time = + output.indexOf('jaj') !== -1 + ? time.slice(0, -3) + 'Hu’' + : output.indexOf('jar') !== -1 + ? time.slice(0, -3) + 'wen' + : output.indexOf('DIS') !== -1 + ? time.slice(0, -3) + 'ben' + : time + ' ret'; + return time; + } + + function translate$a(number, withoutSuffix, string, isFuture) { + var numberNoun = numberAsNoun(number); + switch (string) { + case 'ss': + return numberNoun + ' lup'; + case 'mm': + return numberNoun + ' tup'; + case 'hh': + return numberNoun + ' rep'; + case 'dd': + return numberNoun + ' jaj'; + case 'MM': + return numberNoun + ' jar'; + case 'yy': + return numberNoun + ' DIS'; + } + } + + function numberAsNoun(number) { + var hundred = Math.floor((number % 1000) / 100), + ten = Math.floor((number % 100) / 10), + one = number % 10, + word = ''; + if (hundred > 0) { + word += numbersNouns[hundred] + 'vatlh'; + } + if (ten > 0) { + word += (word !== '' ? ' ' : '') + numbersNouns[ten] + 'maH'; + } + if (one > 0) { + word += (word !== '' ? ' ' : '') + numbersNouns[one]; + } + return word === '' ? 'pagh' : word; + } + + hooks.defineLocale('tlh', { + months: 'tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’'.split( + '_' + ), + monthsShort: 'jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split( + '_' + ), + weekdaysShort: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split( + '_' + ), + weekdaysMin: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split( + '_' + ), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[DaHjaj] LT', + nextDay: '[wa’leS] LT', + nextWeek: 'LLL', + lastDay: '[wa’Hu’] LT', + lastWeek: 'LLL', + sameElse: 'L', + }, + relativeTime: { + future: translateFuture, + past: translatePast, + s: 'puS lup', + ss: translate$a, + m: 'wa’ tup', + mm: translate$a, + h: 'wa’ rep', + hh: translate$a, + d: 'wa’ jaj', + dd: translate$a, + M: 'wa’ jar', + MM: translate$a, + y: 'wa’ DIS', + yy: translate$a, + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var suffixes$5 = { + 1: "'inci", + 5: "'inci", + 8: "'inci", + 70: "'inci", + 80: "'inci", + 2: "'nci", + 7: "'nci", + 20: "'nci", + 50: "'nci", + 3: "'üncü", + 4: "'üncü", + 100: "'üncü", + 6: "'ncı", + 9: "'uncu", + 10: "'uncu", + 30: "'uncu", + 60: "'ıncı", + 90: "'ıncı", + }; + + hooks.defineLocale('tr', { + months: 'Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık'.split( + '_' + ), + monthsShort: 'Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara'.split('_'), + weekdays: 'Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi'.split( + '_' + ), + weekdaysShort: 'Paz_Pts_Sal_Çar_Per_Cum_Cts'.split('_'), + weekdaysMin: 'Pz_Pt_Sa_Ça_Pe_Cu_Ct'.split('_'), + meridiem: function (hours, minutes, isLower) { + if (hours < 12) { + return isLower ? 'öö' : 'ÖÖ'; + } else { + return isLower ? 'ös' : 'ÖS'; + } + }, + meridiemParse: /öö|ÖÖ|ös|ÖS/, + isPM: function (input) { + return input === 'ös' || input === 'ÖS'; + }, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[bugün saat] LT', + nextDay: '[yarın saat] LT', + nextWeek: '[gelecek] dddd [saat] LT', + lastDay: '[dün] LT', + lastWeek: '[geçen] dddd [saat] LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s sonra', + past: '%s önce', + s: 'birkaç saniye', + ss: '%d saniye', + m: 'bir dakika', + mm: '%d dakika', + h: 'bir saat', + hh: '%d saat', + d: 'bir gün', + dd: '%d gün', + M: 'bir ay', + MM: '%d ay', + y: 'bir yıl', + yy: '%d yıl', + }, + ordinal: function (number, period) { + switch (period) { + case 'd': + case 'D': + case 'Do': + case 'DD': + return number; + default: + if (number === 0) { + // special case for zero + return number + "'ıncı"; + } + var a = number % 10, + b = (number % 100) - a, + c = number >= 100 ? 100 : null; + return number + (suffixes$5[a] || suffixes$5[b] || suffixes$5[c]); + } + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + // After the year there should be a slash and the amount of years since December 26, 1979 in Roman numerals. + // This is currently too difficult (maybe even impossible) to add. + hooks.defineLocale('tzl', { + months: 'Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar'.split( + '_' + ), + monthsShort: 'Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec'.split('_'), + weekdays: 'Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi'.split('_'), + weekdaysShort: 'Súl_Lún_Mai_Már_Xhú_Vié_Sát'.split('_'), + weekdaysMin: 'Sú_Lú_Ma_Má_Xh_Vi_Sá'.split('_'), + longDateFormat: { + LT: 'HH.mm', + LTS: 'HH.mm.ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM [dallas] YYYY', + LLL: 'D. MMMM [dallas] YYYY HH.mm', + LLLL: 'dddd, [li] D. MMMM [dallas] YYYY HH.mm', + }, + meridiemParse: /d\'o|d\'a/i, + isPM: function (input) { + return "d'o" === input.toLowerCase(); + }, + meridiem: function (hours, minutes, isLower) { + if (hours > 11) { + return isLower ? "d'o" : "D'O"; + } else { + return isLower ? "d'a" : "D'A"; + } + }, + calendar: { + sameDay: '[oxhi à] LT', + nextDay: '[demà à] LT', + nextWeek: 'dddd [à] LT', + lastDay: '[ieiri à] LT', + lastWeek: '[sür el] dddd [lasteu à] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'osprei %s', + past: 'ja%s', + s: processRelativeTime$8, + ss: processRelativeTime$8, + m: processRelativeTime$8, + mm: processRelativeTime$8, + h: processRelativeTime$8, + hh: processRelativeTime$8, + d: processRelativeTime$8, + dd: processRelativeTime$8, + M: processRelativeTime$8, + MM: processRelativeTime$8, + y: processRelativeTime$8, + yy: processRelativeTime$8, + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + function processRelativeTime$8(number, withoutSuffix, key, isFuture) { + var format = { + s: ['viensas secunds', "'iensas secunds"], + ss: [number + ' secunds', '' + number + ' secunds'], + m: ["'n míut", "'iens míut"], + mm: [number + ' míuts', '' + number + ' míuts'], + h: ["'n þora", "'iensa þora"], + hh: [number + ' þoras', '' + number + ' þoras'], + d: ["'n ziua", "'iensa ziua"], + dd: [number + ' ziuas', '' + number + ' ziuas'], + M: ["'n mes", "'iens mes"], + MM: [number + ' mesen', '' + number + ' mesen'], + y: ["'n ar", "'iens ar"], + yy: [number + ' ars', '' + number + ' ars'], + }; + return isFuture + ? format[key][0] + : withoutSuffix + ? format[key][0] + : format[key][1]; + } + + //! moment.js locale configuration + + hooks.defineLocale('tzm-latn', { + months: 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split( + '_' + ), + monthsShort: 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split( + '_' + ), + weekdays: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'), + weekdaysShort: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'), + weekdaysMin: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[asdkh g] LT', + nextDay: '[aska g] LT', + nextWeek: 'dddd [g] LT', + lastDay: '[assant g] LT', + lastWeek: 'dddd [g] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'dadkh s yan %s', + past: 'yan %s', + s: 'imik', + ss: '%d imik', + m: 'minuḍ', + mm: '%d minuḍ', + h: 'saɛa', + hh: '%d tassaɛin', + d: 'ass', + dd: '%d ossan', + M: 'ayowr', + MM: '%d iyyirn', + y: 'asgas', + yy: '%d isgasn', + }, + week: { + dow: 6, // Saturday is the first day of the week. + doy: 12, // The week that contains Jan 12th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('tzm', { + months: 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split( + '_' + ), + monthsShort: 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split( + '_' + ), + weekdays: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'), + weekdaysShort: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'), + weekdaysMin: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[ⴰⵙⴷⵅ ⴴ] LT', + nextDay: '[ⴰⵙⴽⴰ ⴴ] LT', + nextWeek: 'dddd [ⴴ] LT', + lastDay: '[ⴰⵚⴰⵏⵜ ⴴ] LT', + lastWeek: 'dddd [ⴴ] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s', + past: 'ⵢⴰⵏ %s', + s: 'ⵉⵎⵉⴽ', + ss: '%d ⵉⵎⵉⴽ', + m: 'ⵎⵉⵏⵓⴺ', + mm: '%d ⵎⵉⵏⵓⴺ', + h: 'ⵙⴰⵄⴰ', + hh: '%d ⵜⴰⵙⵙⴰⵄⵉⵏ', + d: 'ⴰⵙⵙ', + dd: '%d oⵙⵙⴰⵏ', + M: 'ⴰⵢoⵓⵔ', + MM: '%d ⵉⵢⵢⵉⵔⵏ', + y: 'ⴰⵙⴳⴰⵙ', + yy: '%d ⵉⵙⴳⴰⵙⵏ', + }, + week: { + dow: 6, // Saturday is the first day of the week. + doy: 12, // The week that contains Jan 12th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('ug-cn', { + months: 'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split( + '_' + ), + monthsShort: 'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split( + '_' + ), + weekdays: 'يەكشەنبە_دۈشەنبە_سەيشەنبە_چارشەنبە_پەيشەنبە_جۈمە_شەنبە'.split( + '_' + ), + weekdaysShort: 'يە_دۈ_سە_چا_پە_جۈ_شە'.split('_'), + weekdaysMin: 'يە_دۈ_سە_چا_پە_جۈ_شە'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'YYYY-MM-DD', + LL: 'YYYY-يىلىM-ئاينىڭD-كۈنى', + LLL: 'YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm', + LLLL: 'dddd، YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm', + }, + meridiemParse: /يېرىم كېچە|سەھەر|چۈشتىن بۇرۇن|چۈش|چۈشتىن كېيىن|كەچ/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if ( + meridiem === 'يېرىم كېچە' || + meridiem === 'سەھەر' || + meridiem === 'چۈشتىن بۇرۇن' + ) { + return hour; + } else if (meridiem === 'چۈشتىن كېيىن' || meridiem === 'كەچ') { + return hour + 12; + } else { + return hour >= 11 ? hour : hour + 12; + } + }, + meridiem: function (hour, minute, isLower) { + var hm = hour * 100 + minute; + if (hm < 600) { + return 'يېرىم كېچە'; + } else if (hm < 900) { + return 'سەھەر'; + } else if (hm < 1130) { + return 'چۈشتىن بۇرۇن'; + } else if (hm < 1230) { + return 'چۈش'; + } else if (hm < 1800) { + return 'چۈشتىن كېيىن'; + } else { + return 'كەچ'; + } + }, + calendar: { + sameDay: '[بۈگۈن سائەت] LT', + nextDay: '[ئەتە سائەت] LT', + nextWeek: '[كېلەركى] dddd [سائەت] LT', + lastDay: '[تۆنۈگۈن] LT', + lastWeek: '[ئالدىنقى] dddd [سائەت] LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s كېيىن', + past: '%s بۇرۇن', + s: 'نەچچە سېكونت', + ss: '%d سېكونت', + m: 'بىر مىنۇت', + mm: '%d مىنۇت', + h: 'بىر سائەت', + hh: '%d سائەت', + d: 'بىر كۈن', + dd: '%d كۈن', + M: 'بىر ئاي', + MM: '%d ئاي', + y: 'بىر يىل', + yy: '%d يىل', + }, + + dayOfMonthOrdinalParse: /\d{1,2}(-كۈنى|-ئاي|-ھەپتە)/, + ordinal: function (number, period) { + switch (period) { + case 'd': + case 'D': + case 'DDD': + return number + '-كۈنى'; + case 'w': + case 'W': + return number + '-ھەپتە'; + default: + return number; + } + }, + preparse: function (string) { + return string.replace(/،/g, ','); + }, + postformat: function (string) { + return string.replace(/,/g, '،'); + }, + week: { + // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效 + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 1st is the first week of the year. + }, + }); + + //! moment.js locale configuration + + function plural$6(word, num) { + var forms = word.split('_'); + return num % 10 === 1 && num % 100 !== 11 + ? forms[0] + : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) + ? forms[1] + : forms[2]; + } + function relativeTimeWithPlural$4(number, withoutSuffix, key) { + var format = { + ss: withoutSuffix ? 'секунда_секунди_секунд' : 'секунду_секунди_секунд', + mm: withoutSuffix ? 'хвилина_хвилини_хвилин' : 'хвилину_хвилини_хвилин', + hh: withoutSuffix ? 'година_години_годин' : 'годину_години_годин', + dd: 'день_дні_днів', + MM: 'місяць_місяці_місяців', + yy: 'рік_роки_років', + }; + if (key === 'm') { + return withoutSuffix ? 'хвилина' : 'хвилину'; + } else if (key === 'h') { + return withoutSuffix ? 'година' : 'годину'; + } else { + return number + ' ' + plural$6(format[key], +number); + } + } + function weekdaysCaseReplace(m, format) { + var weekdays = { + nominative: 'неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота'.split( + '_' + ), + accusative: 'неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу'.split( + '_' + ), + genitive: 'неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи'.split( + '_' + ), + }, + nounCase; + + if (m === true) { + return weekdays['nominative'] + .slice(1, 7) + .concat(weekdays['nominative'].slice(0, 1)); + } + if (!m) { + return weekdays['nominative']; + } + + nounCase = /(\[[ВвУу]\]) ?dddd/.test(format) + ? 'accusative' + : /\[?(?:минулої|наступної)? ?\] ?dddd/.test(format) + ? 'genitive' + : 'nominative'; + return weekdays[nounCase][m.day()]; + } + function processHoursFunction(str) { + return function () { + return str + 'о' + (this.hours() === 11 ? 'б' : '') + '] LT'; + }; + } + + hooks.defineLocale('uk', { + months: { + format: 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split( + '_' + ), + standalone: 'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split( + '_' + ), + }, + monthsShort: 'січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд'.split( + '_' + ), + weekdays: weekdaysCaseReplace, + weekdaysShort: 'нд_пн_вт_ср_чт_пт_сб'.split('_'), + weekdaysMin: 'нд_пн_вт_ср_чт_пт_сб'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D MMMM YYYY р.', + LLL: 'D MMMM YYYY р., HH:mm', + LLLL: 'dddd, D MMMM YYYY р., HH:mm', + }, + calendar: { + sameDay: processHoursFunction('[Сьогодні '), + nextDay: processHoursFunction('[Завтра '), + lastDay: processHoursFunction('[Вчора '), + nextWeek: processHoursFunction('[У] dddd ['), + lastWeek: function () { + switch (this.day()) { + case 0: + case 3: + case 5: + case 6: + return processHoursFunction('[Минулої] dddd [').call(this); + case 1: + case 2: + case 4: + return processHoursFunction('[Минулого] dddd [').call(this); + } + }, + sameElse: 'L', + }, + relativeTime: { + future: 'за %s', + past: '%s тому', + s: 'декілька секунд', + ss: relativeTimeWithPlural$4, + m: relativeTimeWithPlural$4, + mm: relativeTimeWithPlural$4, + h: 'годину', + hh: relativeTimeWithPlural$4, + d: 'день', + dd: relativeTimeWithPlural$4, + M: 'місяць', + MM: relativeTimeWithPlural$4, + y: 'рік', + yy: relativeTimeWithPlural$4, + }, + // M. E.: those two are virtually unused but a user might want to implement them for his/her website for some reason + meridiemParse: /ночі|ранку|дня|вечора/, + isPM: function (input) { + return /^(дня|вечора)$/.test(input); + }, + meridiem: function (hour, minute, isLower) { + if (hour < 4) { + return 'ночі'; + } else if (hour < 12) { + return 'ранку'; + } else if (hour < 17) { + return 'дня'; + } else { + return 'вечора'; + } + }, + dayOfMonthOrdinalParse: /\d{1,2}-(й|го)/, + ordinal: function (number, period) { + switch (period) { + case 'M': + case 'd': + case 'DDD': + case 'w': + case 'W': + return number + '-й'; + case 'D': + return number + '-го'; + default: + return number; + } + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var months$b = [ + 'جنوری', + 'فروری', + 'مارچ', + 'اپریل', + 'مئی', + 'جون', + 'جولائی', + 'اگست', + 'ستمبر', + 'اکتوبر', + 'نومبر', + 'دسمبر', + ], + days$2 = ['اتوار', 'پیر', 'منگل', 'بدھ', 'جمعرات', 'جمعہ', 'ہفتہ']; + + hooks.defineLocale('ur', { + months: months$b, + monthsShort: months$b, + weekdays: days$2, + weekdaysShort: days$2, + weekdaysMin: days$2, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd، D MMMM YYYY HH:mm', + }, + meridiemParse: /صبح|شام/, + isPM: function (input) { + return 'شام' === input; + }, + meridiem: function (hour, minute, isLower) { + if (hour < 12) { + return 'صبح'; + } + return 'شام'; + }, + calendar: { + sameDay: '[آج بوقت] LT', + nextDay: '[کل بوقت] LT', + nextWeek: 'dddd [بوقت] LT', + lastDay: '[گذشتہ روز بوقت] LT', + lastWeek: '[گذشتہ] dddd [بوقت] LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s بعد', + past: '%s قبل', + s: 'چند سیکنڈ', + ss: '%d سیکنڈ', + m: 'ایک منٹ', + mm: '%d منٹ', + h: 'ایک گھنٹہ', + hh: '%d گھنٹے', + d: 'ایک دن', + dd: '%d دن', + M: 'ایک ماہ', + MM: '%d ماہ', + y: 'ایک سال', + yy: '%d سال', + }, + preparse: function (string) { + return string.replace(/،/g, ','); + }, + postformat: function (string) { + return string.replace(/,/g, '،'); + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('uz-latn', { + months: 'Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr'.split( + '_' + ), + monthsShort: 'Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek'.split('_'), + weekdays: 'Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba'.split( + '_' + ), + weekdaysShort: 'Yak_Dush_Sesh_Chor_Pay_Jum_Shan'.split('_'), + weekdaysMin: 'Ya_Du_Se_Cho_Pa_Ju_Sha'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'D MMMM YYYY, dddd HH:mm', + }, + calendar: { + sameDay: '[Bugun soat] LT [da]', + nextDay: '[Ertaga] LT [da]', + nextWeek: 'dddd [kuni soat] LT [da]', + lastDay: '[Kecha soat] LT [da]', + lastWeek: "[O'tgan] dddd [kuni soat] LT [da]", + sameElse: 'L', + }, + relativeTime: { + future: 'Yaqin %s ichida', + past: 'Bir necha %s oldin', + s: 'soniya', + ss: '%d soniya', + m: 'bir daqiqa', + mm: '%d daqiqa', + h: 'bir soat', + hh: '%d soat', + d: 'bir kun', + dd: '%d kun', + M: 'bir oy', + MM: '%d oy', + y: 'bir yil', + yy: '%d yil', + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('uz', { + months: 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split( + '_' + ), + monthsShort: 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'), + weekdays: 'Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба'.split('_'), + weekdaysShort: 'Якш_Душ_Сеш_Чор_Пай_Жум_Шан'.split('_'), + weekdaysMin: 'Як_Ду_Се_Чо_Па_Жу_Ша'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'D MMMM YYYY, dddd HH:mm', + }, + calendar: { + sameDay: '[Бугун соат] LT [да]', + nextDay: '[Эртага] LT [да]', + nextWeek: 'dddd [куни соат] LT [да]', + lastDay: '[Кеча соат] LT [да]', + lastWeek: '[Утган] dddd [куни соат] LT [да]', + sameElse: 'L', + }, + relativeTime: { + future: 'Якин %s ичида', + past: 'Бир неча %s олдин', + s: 'фурсат', + ss: '%d фурсат', + m: 'бир дакика', + mm: '%d дакика', + h: 'бир соат', + hh: '%d соат', + d: 'бир кун', + dd: '%d кун', + M: 'бир ой', + MM: '%d ой', + y: 'бир йил', + yy: '%d йил', + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('vi', { + months: 'tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12'.split( + '_' + ), + monthsShort: 'Thg 01_Thg 02_Thg 03_Thg 04_Thg 05_Thg 06_Thg 07_Thg 08_Thg 09_Thg 10_Thg 11_Thg 12'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy'.split( + '_' + ), + weekdaysShort: 'CN_T2_T3_T4_T5_T6_T7'.split('_'), + weekdaysMin: 'CN_T2_T3_T4_T5_T6_T7'.split('_'), + weekdaysParseExact: true, + meridiemParse: /sa|ch/i, + isPM: function (input) { + return /^ch$/i.test(input); + }, + meridiem: function (hours, minutes, isLower) { + if (hours < 12) { + return isLower ? 'sa' : 'SA'; + } else { + return isLower ? 'ch' : 'CH'; + } + }, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM [năm] YYYY', + LLL: 'D MMMM [năm] YYYY HH:mm', + LLLL: 'dddd, D MMMM [năm] YYYY HH:mm', + l: 'DD/M/YYYY', + ll: 'D MMM YYYY', + lll: 'D MMM YYYY HH:mm', + llll: 'ddd, D MMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Hôm nay lúc] LT', + nextDay: '[Ngày mai lúc] LT', + nextWeek: 'dddd [tuần tới lúc] LT', + lastDay: '[Hôm qua lúc] LT', + lastWeek: 'dddd [tuần trước lúc] LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s tới', + past: '%s trước', + s: 'vài giây', + ss: '%d giây', + m: 'một phút', + mm: '%d phút', + h: 'một giờ', + hh: '%d giờ', + d: 'một ngày', + dd: '%d ngày', + M: 'một tháng', + MM: '%d tháng', + y: 'một năm', + yy: '%d năm', + }, + dayOfMonthOrdinalParse: /\d{1,2}/, + ordinal: function (number) { + return number; + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('x-pseudo', { + months: 'J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér'.split( + '_' + ), + monthsShort: 'J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý'.split( + '_' + ), + weekdaysShort: 'S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát'.split('_'), + weekdaysMin: 'S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[T~ódá~ý át] LT', + nextDay: '[T~ómó~rró~w át] LT', + nextWeek: 'dddd [át] LT', + lastDay: '[Ý~ést~érdá~ý át] LT', + lastWeek: '[L~ást] dddd [át] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'í~ñ %s', + past: '%s á~gó', + s: 'á ~féw ~sécó~ñds', + ss: '%d s~écóñ~ds', + m: 'á ~míñ~úté', + mm: '%d m~íñú~tés', + h: 'á~ñ hó~úr', + hh: '%d h~óúrs', + d: 'á ~dáý', + dd: '%d d~áýs', + M: 'á ~móñ~th', + MM: '%d m~óñt~hs', + y: 'á ~ýéár', + yy: '%d ý~éárs', + }, + dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/, + ordinal: function (number) { + var b = number % 10, + output = + ~~((number % 100) / 10) === 1 + ? 'th' + : b === 1 + ? 'st' + : b === 2 + ? 'nd' + : b === 3 + ? 'rd' + : 'th'; + return number + output; + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('yo', { + months: 'Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀'.split( + '_' + ), + monthsShort: 'Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀'.split('_'), + weekdays: 'Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta'.split('_'), + weekdaysShort: 'Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá'.split('_'), + weekdaysMin: 'Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb'.split('_'), + longDateFormat: { + LT: 'h:mm A', + LTS: 'h:mm:ss A', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY h:mm A', + LLLL: 'dddd, D MMMM YYYY h:mm A', + }, + calendar: { + sameDay: '[Ònì ni] LT', + nextDay: '[Ọ̀la ni] LT', + nextWeek: "dddd [Ọsẹ̀ tón'bọ] [ni] LT", + lastDay: '[Àna ni] LT', + lastWeek: 'dddd [Ọsẹ̀ tólọ́] [ni] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'ní %s', + past: '%s kọjá', + s: 'ìsẹjú aayá die', + ss: 'aayá %d', + m: 'ìsẹjú kan', + mm: 'ìsẹjú %d', + h: 'wákati kan', + hh: 'wákati %d', + d: 'ọjọ́ kan', + dd: 'ọjọ́ %d', + M: 'osù kan', + MM: 'osù %d', + y: 'ọdún kan', + yy: 'ọdún %d', + }, + dayOfMonthOrdinalParse: /ọjọ́\s\d{1,2}/, + ordinal: 'ọjọ́ %d', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('zh-cn', { + months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split( + '_' + ), + monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split( + '_' + ), + weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'), + weekdaysShort: '周日_周一_周二_周三_周四_周五_周六'.split('_'), + weekdaysMin: '日_一_二_三_四_五_六'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'YYYY/MM/DD', + LL: 'YYYY年M月D日', + LLL: 'YYYY年M月D日Ah点mm分', + LLLL: 'YYYY年M月D日ddddAh点mm分', + l: 'YYYY/M/D', + ll: 'YYYY年M月D日', + lll: 'YYYY年M月D日 HH:mm', + llll: 'YYYY年M月D日dddd HH:mm', + }, + meridiemParse: /凌晨|早上|上午|中午|下午|晚上/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') { + return hour; + } else if (meridiem === '下午' || meridiem === '晚上') { + return hour + 12; + } else { + // '中午' + return hour >= 11 ? hour : hour + 12; + } + }, + meridiem: function (hour, minute, isLower) { + var hm = hour * 100 + minute; + if (hm < 600) { + return '凌晨'; + } else if (hm < 900) { + return '早上'; + } else if (hm < 1130) { + return '上午'; + } else if (hm < 1230) { + return '中午'; + } else if (hm < 1800) { + return '下午'; + } else { + return '晚上'; + } + }, + calendar: { + sameDay: '[今天]LT', + nextDay: '[明天]LT', + nextWeek: function (now) { + if (now.week() !== this.week()) { + return '[下]dddLT'; + } else { + return '[本]dddLT'; + } + }, + lastDay: '[昨天]LT', + lastWeek: function (now) { + if (this.week() !== now.week()) { + return '[上]dddLT'; + } else { + return '[本]dddLT'; + } + }, + sameElse: 'L', + }, + dayOfMonthOrdinalParse: /\d{1,2}(日|月|周)/, + ordinal: function (number, period) { + switch (period) { + case 'd': + case 'D': + case 'DDD': + return number + '日'; + case 'M': + return number + '月'; + case 'w': + case 'W': + return number + '周'; + default: + return number; + } + }, + relativeTime: { + future: '%s后', + past: '%s前', + s: '几秒', + ss: '%d 秒', + m: '1 分钟', + mm: '%d 分钟', + h: '1 小时', + hh: '%d 小时', + d: '1 天', + dd: '%d 天', + M: '1 个月', + MM: '%d 个月', + y: '1 年', + yy: '%d 年', + }, + week: { + // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效 + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('zh-hk', { + months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split( + '_' + ), + monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split( + '_' + ), + weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'), + weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'), + weekdaysMin: '日_一_二_三_四_五_六'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'YYYY/MM/DD', + LL: 'YYYY年M月D日', + LLL: 'YYYY年M月D日 HH:mm', + LLLL: 'YYYY年M月D日dddd HH:mm', + l: 'YYYY/M/D', + ll: 'YYYY年M月D日', + lll: 'YYYY年M月D日 HH:mm', + llll: 'YYYY年M月D日dddd HH:mm', + }, + meridiemParse: /凌晨|早上|上午|中午|下午|晚上/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') { + return hour; + } else if (meridiem === '中午') { + return hour >= 11 ? hour : hour + 12; + } else if (meridiem === '下午' || meridiem === '晚上') { + return hour + 12; + } + }, + meridiem: function (hour, minute, isLower) { + var hm = hour * 100 + minute; + if (hm < 600) { + return '凌晨'; + } else if (hm < 900) { + return '早上'; + } else if (hm < 1200) { + return '上午'; + } else if (hm === 1200) { + return '中午'; + } else if (hm < 1800) { + return '下午'; + } else { + return '晚上'; + } + }, + calendar: { + sameDay: '[今天]LT', + nextDay: '[明天]LT', + nextWeek: '[下]ddddLT', + lastDay: '[昨天]LT', + lastWeek: '[上]ddddLT', + sameElse: 'L', + }, + dayOfMonthOrdinalParse: /\d{1,2}(日|月|週)/, + ordinal: function (number, period) { + switch (period) { + case 'd': + case 'D': + case 'DDD': + return number + '日'; + case 'M': + return number + '月'; + case 'w': + case 'W': + return number + '週'; + default: + return number; + } + }, + relativeTime: { + future: '%s後', + past: '%s前', + s: '幾秒', + ss: '%d 秒', + m: '1 分鐘', + mm: '%d 分鐘', + h: '1 小時', + hh: '%d 小時', + d: '1 天', + dd: '%d 天', + M: '1 個月', + MM: '%d 個月', + y: '1 年', + yy: '%d 年', + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('zh-mo', { + months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split( + '_' + ), + monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split( + '_' + ), + weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'), + weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'), + weekdaysMin: '日_一_二_三_四_五_六'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'YYYY年M月D日', + LLL: 'YYYY年M月D日 HH:mm', + LLLL: 'YYYY年M月D日dddd HH:mm', + l: 'D/M/YYYY', + ll: 'YYYY年M月D日', + lll: 'YYYY年M月D日 HH:mm', + llll: 'YYYY年M月D日dddd HH:mm', + }, + meridiemParse: /凌晨|早上|上午|中午|下午|晚上/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') { + return hour; + } else if (meridiem === '中午') { + return hour >= 11 ? hour : hour + 12; + } else if (meridiem === '下午' || meridiem === '晚上') { + return hour + 12; + } + }, + meridiem: function (hour, minute, isLower) { + var hm = hour * 100 + minute; + if (hm < 600) { + return '凌晨'; + } else if (hm < 900) { + return '早上'; + } else if (hm < 1130) { + return '上午'; + } else if (hm < 1230) { + return '中午'; + } else if (hm < 1800) { + return '下午'; + } else { + return '晚上'; + } + }, + calendar: { + sameDay: '[今天] LT', + nextDay: '[明天] LT', + nextWeek: '[下]dddd LT', + lastDay: '[昨天] LT', + lastWeek: '[上]dddd LT', + sameElse: 'L', + }, + dayOfMonthOrdinalParse: /\d{1,2}(日|月|週)/, + ordinal: function (number, period) { + switch (period) { + case 'd': + case 'D': + case 'DDD': + return number + '日'; + case 'M': + return number + '月'; + case 'w': + case 'W': + return number + '週'; + default: + return number; + } + }, + relativeTime: { + future: '%s內', + past: '%s前', + s: '幾秒', + ss: '%d 秒', + m: '1 分鐘', + mm: '%d 分鐘', + h: '1 小時', + hh: '%d 小時', + d: '1 天', + dd: '%d 天', + M: '1 個月', + MM: '%d 個月', + y: '1 年', + yy: '%d 年', + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('zh-tw', { + months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split( + '_' + ), + monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split( + '_' + ), + weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'), + weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'), + weekdaysMin: '日_一_二_三_四_五_六'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'YYYY/MM/DD', + LL: 'YYYY年M月D日', + LLL: 'YYYY年M月D日 HH:mm', + LLLL: 'YYYY年M月D日dddd HH:mm', + l: 'YYYY/M/D', + ll: 'YYYY年M月D日', + lll: 'YYYY年M月D日 HH:mm', + llll: 'YYYY年M月D日dddd HH:mm', + }, + meridiemParse: /凌晨|早上|上午|中午|下午|晚上/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') { + return hour; + } else if (meridiem === '中午') { + return hour >= 11 ? hour : hour + 12; + } else if (meridiem === '下午' || meridiem === '晚上') { + return hour + 12; + } + }, + meridiem: function (hour, minute, isLower) { + var hm = hour * 100 + minute; + if (hm < 600) { + return '凌晨'; + } else if (hm < 900) { + return '早上'; + } else if (hm < 1130) { + return '上午'; + } else if (hm < 1230) { + return '中午'; + } else if (hm < 1800) { + return '下午'; + } else { + return '晚上'; + } + }, + calendar: { + sameDay: '[今天] LT', + nextDay: '[明天] LT', + nextWeek: '[下]dddd LT', + lastDay: '[昨天] LT', + lastWeek: '[上]dddd LT', + sameElse: 'L', + }, + dayOfMonthOrdinalParse: /\d{1,2}(日|月|週)/, + ordinal: function (number, period) { + switch (period) { + case 'd': + case 'D': + case 'DDD': + return number + '日'; + case 'M': + return number + '月'; + case 'w': + case 'W': + return number + '週'; + default: + return number; + } + }, + relativeTime: { + future: '%s後', + past: '%s前', + s: '幾秒', + ss: '%d 秒', + m: '1 分鐘', + mm: '%d 分鐘', + h: '1 小時', + hh: '%d 小時', + d: '1 天', + dd: '%d 天', + M: '1 個月', + MM: '%d 個月', + y: '1 年', + yy: '%d 年', + }, + }); + + hooks.locale('en'); + + return hooks; + +}))); diff --git a/install/bin/electron/resources/app/vendor/moment/moment-with-locales.min.js b/install/bin/electron/resources/app/vendor/moment/moment-with-locales.min.js new file mode 100644 index 0000000..f1f8aba --- /dev/null +++ b/install/bin/electron/resources/app/vendor/moment/moment-with-locales.min.js @@ -0,0 +1,2 @@ +!function(e,a){"object"==typeof exports&&"undefined"!=typeof module?module.exports=a():"function"==typeof define&&define.amd?define(a):e.moment=a()}(this,function(){"use strict";var e,n;function M(){return e.apply(null,arguments)}function _(e){return e instanceof Array||"[object Array]"===Object.prototype.toString.call(e)}function i(e){return null!=e&&"[object Object]"===Object.prototype.toString.call(e)}function h(e,a){return Object.prototype.hasOwnProperty.call(e,a)}function o(e){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(e).length;for(var a in e)if(h(e,a))return;return 1}function r(e){return void 0===e}function m(e){return"number"==typeof e||"[object Number]"===Object.prototype.toString.call(e)}function d(e){return e instanceof Date||"[object Date]"===Object.prototype.toString.call(e)}function u(e,a){for(var t=[],s=0;s>>0,s=0;sFe(e)?(r=e+1,d-Fe(e)):(r=e,d);return{year:r,dayOfYear:_}}function Ce(e,a,t){var s,n,r=Je(e.year(),a,t),d=Math.floor((e.dayOfYear()-r-1)/7)+1;return d<1?s=d+Ie(n=e.year()-1,a,t):d>Ie(e.year(),a,t)?(s=d-Ie(e.year(),a,t),n=e.year()+1):(n=e.year(),s=d),{week:s,year:n}}function Ie(e,a,t){var s=Je(e,a,t),n=Je(e+1,a,t);return(Fe(e)-s+n)/7}W("w",["ww",2],"wo","week"),W("W",["WW",2],"Wo","isoWeek"),z("week","w"),z("isoWeek","W"),C("week",5),C("isoWeek",5),le("w",ae),le("ww",ae,$),le("W",ae),le("WW",ae,$),Ye(["w","ww","W","WW"],function(e,a,t,s){a[s.substr(0,1)]=G(e)});function Ue(e,a){return e.slice(a,7).concat(e.slice(0,a))}W("d",0,"do","day"),W("dd",0,0,function(e){return this.localeData().weekdaysMin(this,e)}),W("ddd",0,0,function(e){return this.localeData().weekdaysShort(this,e)}),W("dddd",0,0,function(e){return this.localeData().weekdays(this,e)}),W("e",0,0,"weekday"),W("E",0,0,"isoWeekday"),z("day","d"),z("weekday","e"),z("isoWeekday","E"),C("day",11),C("weekday",11),C("isoWeekday",11),le("d",ae),le("e",ae),le("E",ae),le("dd",function(e,a){return a.weekdaysMinRegex(e)}),le("ddd",function(e,a){return a.weekdaysShortRegex(e)}),le("dddd",function(e,a){return a.weekdaysRegex(e)}),Ye(["dd","ddd","dddd"],function(e,a,t,s){var n=t._locale.weekdaysParse(e,s,t._strict);null!=n?a.d=n:L(t).invalidWeekday=e}),Ye(["d","e","E"],function(e,a,t,s){a[s]=G(e)});var Ge="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),Ve="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),Be="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),Ke=ue,qe=ue,Ze=ue;function $e(){function e(e,a){return a.length-e.length}for(var a,t,s,n,r=[],d=[],_=[],i=[],o=0;o<7;o++)a=c([2e3,1]).day(o),t=he(this.weekdaysMin(a,"")),s=he(this.weekdaysShort(a,"")),n=he(this.weekdays(a,"")),r.push(t),d.push(s),_.push(n),i.push(t),i.push(s),i.push(n);r.sort(e),d.sort(e),_.sort(e),i.sort(e),this._weekdaysRegex=new RegExp("^("+i.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+_.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+d.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+r.join("|")+")","i")}function Qe(){return this.hours()%12||12}function Xe(e,a){W(e,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),a)})}function ea(e,a){return a._meridiemParse}W("H",["HH",2],0,"hour"),W("h",["hh",2],0,Qe),W("k",["kk",2],0,function(){return this.hours()||24}),W("hmm",0,0,function(){return""+Qe.apply(this)+S(this.minutes(),2)}),W("hmmss",0,0,function(){return""+Qe.apply(this)+S(this.minutes(),2)+S(this.seconds(),2)}),W("Hmm",0,0,function(){return""+this.hours()+S(this.minutes(),2)}),W("Hmmss",0,0,function(){return""+this.hours()+S(this.minutes(),2)+S(this.seconds(),2)}),Xe("a",!0),Xe("A",!1),z("hour","h"),C("hour",13),le("a",ea),le("A",ea),le("H",ae),le("h",ae),le("k",ae),le("HH",ae,$),le("hh",ae,$),le("kk",ae,$),le("hmm",te),le("hmmss",se),le("Hmm",te),le("Hmmss",se),Le(["H","HH"],De),Le(["k","kk"],function(e,a,t){var s=G(e);a[De]=24===s?0:s}),Le(["a","A"],function(e,a,t){t._isPm=t._locale.isPM(e),t._meridiem=e}),Le(["h","hh"],function(e,a,t){a[De]=G(e),L(t).bigHour=!0}),Le("hmm",function(e,a,t){var s=e.length-2;a[De]=G(e.substr(0,s)),a[Te]=G(e.substr(s)),L(t).bigHour=!0}),Le("hmmss",function(e,a,t){var s=e.length-4,n=e.length-2;a[De]=G(e.substr(0,s)),a[Te]=G(e.substr(s,2)),a[ge]=G(e.substr(n)),L(t).bigHour=!0}),Le("Hmm",function(e,a,t){var s=e.length-2;a[De]=G(e.substr(0,s)),a[Te]=G(e.substr(s))}),Le("Hmmss",function(e,a,t){var s=e.length-4,n=e.length-2;a[De]=G(e.substr(0,s)),a[Te]=G(e.substr(s,2)),a[ge]=G(e.substr(n))});var aa=V("Hours",!0);var ta,sa={calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},longDateFormat:{LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},invalidDate:"Invalid date",ordinal:"%d",dayOfMonthOrdinalParse:/\d{1,2}/,relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",w:"a week",ww:"%d weeks",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},months:Se,monthsShort:je,week:{dow:0,doy:6},weekdays:Ge,weekdaysMin:Be,weekdaysShort:Ve,meridiemParse:/[ap]\.?m?\.?/i},na={},ra={};function da(e){return e?e.toLowerCase().replace("_","-"):e}function _a(e){for(var a,t,s,n,r=0;r=a&&function(e,a){for(var t=Math.min(e.length,a.length),s=0;s=a-1)break;a--}r++}return ta}function ia(a){var e;if(void 0===na[a]&&"undefined"!=typeof module&&module&&module.exports)try{e=ta._abbr,require("./locale/"+a),oa(e)}catch(e){na[a]=null}return na[a]}function oa(e,a){var t;return e&&((t=r(a)?ua(e):ma(e,a))?ta=t:"undefined"!=typeof console&&console.warn&&console.warn("Locale "+e+" not found. Did you forget to load it?")),ta._abbr}function ma(e,a){if(null===a)return delete na[e],null;var t,s=sa;if(a.abbr=e,null!=na[e])w("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),s=na[e]._config;else if(null!=a.parentLocale)if(null!=na[a.parentLocale])s=na[a.parentLocale]._config;else{if(null==(t=ia(a.parentLocale)))return ra[a.parentLocale]||(ra[a.parentLocale]=[]),ra[a.parentLocale].push({name:e,config:a}),null;s=t._config}return na[e]=new H(b(s,a)),ra[e]&&ra[e].forEach(function(e){ma(e.name,e.config)}),oa(e),na[e]}function ua(e){var a;if(e&&e._locale&&e._locale._abbr&&(e=e._locale._abbr),!e)return ta;if(!_(e)){if(a=ia(e))return a;e=[e]}return _a(e)}function la(e){var a,t=e._a;return t&&-2===L(e).overflow&&(a=t[pe]<0||11He(t[fe],t[pe])?ke:t[De]<0||24Ie(t,r,d)?L(e)._overflowWeeks=!0:null!=i?L(e)._overflowWeekday=!0:(_=Re(t,s,n,r,d),e._a[fe]=_.year,e._dayOfYear=_.dayOfYear)}(e),null!=e._dayOfYear&&(r=ga(e._a[fe],s[fe]),(e._dayOfYear>Fe(r)||0===e._dayOfYear)&&(L(e)._overflowDayOfYear=!0),t=Ne(r,0,e._dayOfYear),e._a[pe]=t.getUTCMonth(),e._a[ke]=t.getUTCDate()),a=0;a<3&&null==e._a[a];++a)e._a[a]=i[a]=s[a];for(;a<7;a++)e._a[a]=i[a]=null==e._a[a]?2===a?1:0:e._a[a];24===e._a[De]&&0===e._a[Te]&&0===e._a[ge]&&0===e._a[we]&&(e._nextDay=!0,e._a[De]=0),e._d=(e._useUTC?Ne:function(e,a,t,s,n,r,d){var _;return e<100&&0<=e?(_=new Date(e+400,a,t,s,n,r,d),isFinite(_.getFullYear())&&_.setFullYear(e)):_=new Date(e,a,t,s,n,r,d),_}).apply(null,i),n=e._useUTC?e._d.getUTCDay():e._d.getDay(),null!=e._tzm&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[De]=24),e._w&&void 0!==e._w.d&&e._w.d!==n&&(L(e).weekdayMismatch=!0)}}function va(e){if(e._f!==M.ISO_8601)if(e._f!==M.RFC_2822){e._a=[],L(e).empty=!0;for(var a,t,s,n,r,d,_,i=""+e._i,o=i.length,m=0,u=E(e._f,e._locale).match(j)||[],l=0;lt.valueOf():t.valueOf()"}),yt.toJSON=function(){return this.isValid()?this.toISOString():null},yt.toString=function(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},yt.unix=function(){return Math.floor(this.valueOf()/1e3)},yt.valueOf=function(){return this._d.valueOf()-6e4*(this._offset||0)},yt.creationData=function(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}},yt.eraName=function(){for(var e,a=this.localeData().eras(),t=0,s=a.length;tthis.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},yt.isLocal=function(){return!!this.isValid()&&!this._isUTC},yt.isUtcOffset=function(){return!!this.isValid()&&this._isUTC},yt.isUtc=Ca,yt.isUTC=Ca,yt.zoneAbbr=function(){return this._isUTC?"UTC":""},yt.zoneName=function(){return this._isUTC?"Coordinated Universal Time":""},yt.dates=t("dates accessor is deprecated. Use date instead.",lt),yt.months=t("months accessor is deprecated. Use month instead",Ae),yt.years=t("years accessor is deprecated. Use year instead",ze),yt.zone=t("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",function(e,a){return null!=e?("string"!=typeof e&&(e=-e),this.utcOffset(e,a),this):-this.utcOffset()}),yt.isDSTShifted=t("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",function(){if(!r(this._isDSTShifted))return this._isDSTShifted;var e,a={};return p(a,this),(a=ba(a))._a?(e=(a._isUTC?c:Sa)(a._a),this._isDSTShifted=this.isValid()&&0>> 0, + i; + + for (i = 0; i < len; i++) { + if (i in t && fun.call(this, t[i], i, t)) { + return true; + } + } + + return false; + }; + } + + function isValid(m) { + if (m._isValid == null) { + var flags = getParsingFlags(m), + parsedParts = some.call(flags.parsedDateParts, function (i) { + return i != null; + }), + isNowValid = + !isNaN(m._d.getTime()) && + flags.overflow < 0 && + !flags.empty && + !flags.invalidEra && + !flags.invalidMonth && + !flags.invalidWeekday && + !flags.weekdayMismatch && + !flags.nullInput && + !flags.invalidFormat && + !flags.userInvalidated && + (!flags.meridiem || (flags.meridiem && parsedParts)); + + if (m._strict) { + isNowValid = + isNowValid && + flags.charsLeftOver === 0 && + flags.unusedTokens.length === 0 && + flags.bigHour === undefined; + } + + if (Object.isFrozen == null || !Object.isFrozen(m)) { + m._isValid = isNowValid; + } else { + return isNowValid; + } + } + return m._isValid; + } + + function createInvalid(flags) { + var m = createUTC(NaN); + if (flags != null) { + extend(getParsingFlags(m), flags); + } else { + getParsingFlags(m).userInvalidated = true; + } + + return m; + } + + // Plugins that add properties should also add the key here (null value), + // so we can properly clone ourselves. + var momentProperties = (hooks.momentProperties = []), + updateInProgress = false; + + function copyConfig(to, from) { + var i, prop, val; + + if (!isUndefined(from._isAMomentObject)) { + to._isAMomentObject = from._isAMomentObject; + } + if (!isUndefined(from._i)) { + to._i = from._i; + } + if (!isUndefined(from._f)) { + to._f = from._f; + } + if (!isUndefined(from._l)) { + to._l = from._l; + } + if (!isUndefined(from._strict)) { + to._strict = from._strict; + } + if (!isUndefined(from._tzm)) { + to._tzm = from._tzm; + } + if (!isUndefined(from._isUTC)) { + to._isUTC = from._isUTC; + } + if (!isUndefined(from._offset)) { + to._offset = from._offset; + } + if (!isUndefined(from._pf)) { + to._pf = getParsingFlags(from); + } + if (!isUndefined(from._locale)) { + to._locale = from._locale; + } + + if (momentProperties.length > 0) { + for (i = 0; i < momentProperties.length; i++) { + prop = momentProperties[i]; + val = from[prop]; + if (!isUndefined(val)) { + to[prop] = val; + } + } + } + + return to; + } + + // Moment prototype object + function Moment(config) { + copyConfig(this, config); + this._d = new Date(config._d != null ? config._d.getTime() : NaN); + if (!this.isValid()) { + this._d = new Date(NaN); + } + // Prevent infinite loop in case updateOffset creates new moment + // objects. + if (updateInProgress === false) { + updateInProgress = true; + hooks.updateOffset(this); + updateInProgress = false; + } + } + + function isMoment(obj) { + return ( + obj instanceof Moment || (obj != null && obj._isAMomentObject != null) + ); + } + + function warn(msg) { + if ( + hooks.suppressDeprecationWarnings === false && + typeof console !== 'undefined' && + console.warn + ) { + console.warn('Deprecation warning: ' + msg); + } + } + + function deprecate(msg, fn) { + var firstTime = true; + + return extend(function () { + if (hooks.deprecationHandler != null) { + hooks.deprecationHandler(null, msg); + } + if (firstTime) { + var args = [], + arg, + i, + key; + for (i = 0; i < arguments.length; i++) { + arg = ''; + if (typeof arguments[i] === 'object') { + arg += '\n[' + i + '] '; + for (key in arguments[0]) { + if (hasOwnProp(arguments[0], key)) { + arg += key + ': ' + arguments[0][key] + ', '; + } + } + arg = arg.slice(0, -2); // Remove trailing comma and space + } else { + arg = arguments[i]; + } + args.push(arg); + } + warn( + msg + + '\nArguments: ' + + Array.prototype.slice.call(args).join('') + + '\n' + + new Error().stack + ); + firstTime = false; + } + return fn.apply(this, arguments); + }, fn); + } + + var deprecations = {}; + + function deprecateSimple(name, msg) { + if (hooks.deprecationHandler != null) { + hooks.deprecationHandler(name, msg); + } + if (!deprecations[name]) { + warn(msg); + deprecations[name] = true; + } + } + + hooks.suppressDeprecationWarnings = false; + hooks.deprecationHandler = null; + + function isFunction(input) { + return ( + (typeof Function !== 'undefined' && input instanceof Function) || + Object.prototype.toString.call(input) === '[object Function]' + ); + } + + function set(config) { + var prop, i; + for (i in config) { + if (hasOwnProp(config, i)) { + prop = config[i]; + if (isFunction(prop)) { + this[i] = prop; + } else { + this['_' + i] = prop; + } + } + } + this._config = config; + // Lenient ordinal parsing accepts just a number in addition to + // number + (possibly) stuff coming from _dayOfMonthOrdinalParse. + // TODO: Remove "ordinalParse" fallback in next major release. + this._dayOfMonthOrdinalParseLenient = new RegExp( + (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) + + '|' + + /\d{1,2}/.source + ); + } + + function mergeConfigs(parentConfig, childConfig) { + var res = extend({}, parentConfig), + prop; + for (prop in childConfig) { + if (hasOwnProp(childConfig, prop)) { + if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) { + res[prop] = {}; + extend(res[prop], parentConfig[prop]); + extend(res[prop], childConfig[prop]); + } else if (childConfig[prop] != null) { + res[prop] = childConfig[prop]; + } else { + delete res[prop]; + } + } + } + for (prop in parentConfig) { + if ( + hasOwnProp(parentConfig, prop) && + !hasOwnProp(childConfig, prop) && + isObject(parentConfig[prop]) + ) { + // make sure changes to properties don't modify parent config + res[prop] = extend({}, res[prop]); + } + } + return res; + } + + function Locale(config) { + if (config != null) { + this.set(config); + } + } + + var keys; + + if (Object.keys) { + keys = Object.keys; + } else { + keys = function (obj) { + var i, + res = []; + for (i in obj) { + if (hasOwnProp(obj, i)) { + res.push(i); + } + } + return res; + }; + } + + var defaultCalendar = { + sameDay: '[Today at] LT', + nextDay: '[Tomorrow at] LT', + nextWeek: 'dddd [at] LT', + lastDay: '[Yesterday at] LT', + lastWeek: '[Last] dddd [at] LT', + sameElse: 'L', + }; + + function calendar(key, mom, now) { + var output = this._calendar[key] || this._calendar['sameElse']; + return isFunction(output) ? output.call(mom, now) : output; + } + + function zeroFill(number, targetLength, forceSign) { + var absNumber = '' + Math.abs(number), + zerosToFill = targetLength - absNumber.length, + sign = number >= 0; + return ( + (sign ? (forceSign ? '+' : '') : '-') + + Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + + absNumber + ); + } + + var formattingTokens = /(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g, + localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g, + formatFunctions = {}, + formatTokenFunctions = {}; + + // token: 'M' + // padded: ['MM', 2] + // ordinal: 'Mo' + // callback: function () { this.month() + 1 } + function addFormatToken(token, padded, ordinal, callback) { + var func = callback; + if (typeof callback === 'string') { + func = function () { + return this[callback](); + }; + } + if (token) { + formatTokenFunctions[token] = func; + } + if (padded) { + formatTokenFunctions[padded[0]] = function () { + return zeroFill(func.apply(this, arguments), padded[1], padded[2]); + }; + } + if (ordinal) { + formatTokenFunctions[ordinal] = function () { + return this.localeData().ordinal( + func.apply(this, arguments), + token + ); + }; + } + } + + function removeFormattingTokens(input) { + if (input.match(/\[[\s\S]/)) { + return input.replace(/^\[|\]$/g, ''); + } + return input.replace(/\\/g, ''); + } + + function makeFormatFunction(format) { + var array = format.match(formattingTokens), + i, + length; + + for (i = 0, length = array.length; i < length; i++) { + if (formatTokenFunctions[array[i]]) { + array[i] = formatTokenFunctions[array[i]]; + } else { + array[i] = removeFormattingTokens(array[i]); + } + } + + return function (mom) { + var output = '', + i; + for (i = 0; i < length; i++) { + output += isFunction(array[i]) + ? array[i].call(mom, format) + : array[i]; + } + return output; + }; + } + + // format date using native date object + function formatMoment(m, format) { + if (!m.isValid()) { + return m.localeData().invalidDate(); + } + + format = expandFormat(format, m.localeData()); + formatFunctions[format] = + formatFunctions[format] || makeFormatFunction(format); + + return formatFunctions[format](m); + } + + function expandFormat(format, locale) { + var i = 5; + + function replaceLongDateFormatTokens(input) { + return locale.longDateFormat(input) || input; + } + + localFormattingTokens.lastIndex = 0; + while (i >= 0 && localFormattingTokens.test(format)) { + format = format.replace( + localFormattingTokens, + replaceLongDateFormatTokens + ); + localFormattingTokens.lastIndex = 0; + i -= 1; + } + + return format; + } + + var defaultLongDateFormat = { + LTS: 'h:mm:ss A', + LT: 'h:mm A', + L: 'MM/DD/YYYY', + LL: 'MMMM D, YYYY', + LLL: 'MMMM D, YYYY h:mm A', + LLLL: 'dddd, MMMM D, YYYY h:mm A', + }; + + function longDateFormat(key) { + var format = this._longDateFormat[key], + formatUpper = this._longDateFormat[key.toUpperCase()]; + + if (format || !formatUpper) { + return format; + } + + this._longDateFormat[key] = formatUpper + .match(formattingTokens) + .map(function (tok) { + if ( + tok === 'MMMM' || + tok === 'MM' || + tok === 'DD' || + tok === 'dddd' + ) { + return tok.slice(1); + } + return tok; + }) + .join(''); + + return this._longDateFormat[key]; + } + + var defaultInvalidDate = 'Invalid date'; + + function invalidDate() { + return this._invalidDate; + } + + var defaultOrdinal = '%d', + defaultDayOfMonthOrdinalParse = /\d{1,2}/; + + function ordinal(number) { + return this._ordinal.replace('%d', number); + } + + var defaultRelativeTime = { + future: 'in %s', + past: '%s ago', + s: 'a few seconds', + ss: '%d seconds', + m: 'a minute', + mm: '%d minutes', + h: 'an hour', + hh: '%d hours', + d: 'a day', + dd: '%d days', + w: 'a week', + ww: '%d weeks', + M: 'a month', + MM: '%d months', + y: 'a year', + yy: '%d years', + }; + + function relativeTime(number, withoutSuffix, string, isFuture) { + var output = this._relativeTime[string]; + return isFunction(output) + ? output(number, withoutSuffix, string, isFuture) + : output.replace(/%d/i, number); + } + + function pastFuture(diff, output) { + var format = this._relativeTime[diff > 0 ? 'future' : 'past']; + return isFunction(format) ? format(output) : format.replace(/%s/i, output); + } + + var aliases = {}; + + function addUnitAlias(unit, shorthand) { + var lowerCase = unit.toLowerCase(); + aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit; + } + + function normalizeUnits(units) { + return typeof units === 'string' + ? aliases[units] || aliases[units.toLowerCase()] + : undefined; + } + + function normalizeObjectUnits(inputObject) { + var normalizedInput = {}, + normalizedProp, + prop; + + for (prop in inputObject) { + if (hasOwnProp(inputObject, prop)) { + normalizedProp = normalizeUnits(prop); + if (normalizedProp) { + normalizedInput[normalizedProp] = inputObject[prop]; + } + } + } + + return normalizedInput; + } + + var priorities = {}; + + function addUnitPriority(unit, priority) { + priorities[unit] = priority; + } + + function getPrioritizedUnits(unitsObj) { + var units = [], + u; + for (u in unitsObj) { + if (hasOwnProp(unitsObj, u)) { + units.push({ unit: u, priority: priorities[u] }); + } + } + units.sort(function (a, b) { + return a.priority - b.priority; + }); + return units; + } + + function isLeapYear(year) { + return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0; + } + + function absFloor(number) { + if (number < 0) { + // -0 -> 0 + return Math.ceil(number) || 0; + } else { + return Math.floor(number); + } + } + + function toInt(argumentForCoercion) { + var coercedNumber = +argumentForCoercion, + value = 0; + + if (coercedNumber !== 0 && isFinite(coercedNumber)) { + value = absFloor(coercedNumber); + } + + return value; + } + + function makeGetSet(unit, keepTime) { + return function (value) { + if (value != null) { + set$1(this, unit, value); + hooks.updateOffset(this, keepTime); + return this; + } else { + return get(this, unit); + } + }; + } + + function get(mom, unit) { + return mom.isValid() + ? mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() + : NaN; + } + + function set$1(mom, unit, value) { + if (mom.isValid() && !isNaN(value)) { + if ( + unit === 'FullYear' && + isLeapYear(mom.year()) && + mom.month() === 1 && + mom.date() === 29 + ) { + value = toInt(value); + mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit]( + value, + mom.month(), + daysInMonth(value, mom.month()) + ); + } else { + mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value); + } + } + } + + // MOMENTS + + function stringGet(units) { + units = normalizeUnits(units); + if (isFunction(this[units])) { + return this[units](); + } + return this; + } + + function stringSet(units, value) { + if (typeof units === 'object') { + units = normalizeObjectUnits(units); + var prioritized = getPrioritizedUnits(units), + i; + for (i = 0; i < prioritized.length; i++) { + this[prioritized[i].unit](units[prioritized[i].unit]); + } + } else { + units = normalizeUnits(units); + if (isFunction(this[units])) { + return this[units](value); + } + } + return this; + } + + var match1 = /\d/, // 0 - 9 + match2 = /\d\d/, // 00 - 99 + match3 = /\d{3}/, // 000 - 999 + match4 = /\d{4}/, // 0000 - 9999 + match6 = /[+-]?\d{6}/, // -999999 - 999999 + match1to2 = /\d\d?/, // 0 - 99 + match3to4 = /\d\d\d\d?/, // 999 - 9999 + match5to6 = /\d\d\d\d\d\d?/, // 99999 - 999999 + match1to3 = /\d{1,3}/, // 0 - 999 + match1to4 = /\d{1,4}/, // 0 - 9999 + match1to6 = /[+-]?\d{1,6}/, // -999999 - 999999 + matchUnsigned = /\d+/, // 0 - inf + matchSigned = /[+-]?\d+/, // -inf - inf + matchOffset = /Z|[+-]\d\d:?\d\d/gi, // +00:00 -00:00 +0000 -0000 or Z + matchShortOffset = /Z|[+-]\d\d(?::?\d\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z + matchTimestamp = /[+-]?\d+(\.\d{1,3})?/, // 123456789 123456789.123 + // any word (or two) characters or numbers including two/three word month in arabic. + // includes scottish gaelic two word and hyphenated months + matchWord = /[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i, + regexes; + + regexes = {}; + + function addRegexToken(token, regex, strictRegex) { + regexes[token] = isFunction(regex) + ? regex + : function (isStrict, localeData) { + return isStrict && strictRegex ? strictRegex : regex; + }; + } + + function getParseRegexForToken(token, config) { + if (!hasOwnProp(regexes, token)) { + return new RegExp(unescapeFormat(token)); + } + + return regexes[token](config._strict, config._locale); + } + + // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript + function unescapeFormat(s) { + return regexEscape( + s + .replace('\\', '') + .replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function ( + matched, + p1, + p2, + p3, + p4 + ) { + return p1 || p2 || p3 || p4; + }) + ); + } + + function regexEscape(s) { + return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); + } + + var tokens = {}; + + function addParseToken(token, callback) { + var i, + func = callback; + if (typeof token === 'string') { + token = [token]; + } + if (isNumber(callback)) { + func = function (input, array) { + array[callback] = toInt(input); + }; + } + for (i = 0; i < token.length; i++) { + tokens[token[i]] = func; + } + } + + function addWeekParseToken(token, callback) { + addParseToken(token, function (input, array, config, token) { + config._w = config._w || {}; + callback(input, config._w, config, token); + }); + } + + function addTimeToArrayFromToken(token, input, config) { + if (input != null && hasOwnProp(tokens, token)) { + tokens[token](input, config._a, config, token); + } + } + + var YEAR = 0, + MONTH = 1, + DATE = 2, + HOUR = 3, + MINUTE = 4, + SECOND = 5, + MILLISECOND = 6, + WEEK = 7, + WEEKDAY = 8; + + function mod(n, x) { + return ((n % x) + x) % x; + } + + var indexOf; + + if (Array.prototype.indexOf) { + indexOf = Array.prototype.indexOf; + } else { + indexOf = function (o) { + // I know + var i; + for (i = 0; i < this.length; ++i) { + if (this[i] === o) { + return i; + } + } + return -1; + }; + } + + function daysInMonth(year, month) { + if (isNaN(year) || isNaN(month)) { + return NaN; + } + var modMonth = mod(month, 12); + year += (month - modMonth) / 12; + return modMonth === 1 + ? isLeapYear(year) + ? 29 + : 28 + : 31 - ((modMonth % 7) % 2); + } + + // FORMATTING + + addFormatToken('M', ['MM', 2], 'Mo', function () { + return this.month() + 1; + }); + + addFormatToken('MMM', 0, 0, function (format) { + return this.localeData().monthsShort(this, format); + }); + + addFormatToken('MMMM', 0, 0, function (format) { + return this.localeData().months(this, format); + }); + + // ALIASES + + addUnitAlias('month', 'M'); + + // PRIORITY + + addUnitPriority('month', 8); + + // PARSING + + addRegexToken('M', match1to2); + addRegexToken('MM', match1to2, match2); + addRegexToken('MMM', function (isStrict, locale) { + return locale.monthsShortRegex(isStrict); + }); + addRegexToken('MMMM', function (isStrict, locale) { + return locale.monthsRegex(isStrict); + }); + + addParseToken(['M', 'MM'], function (input, array) { + array[MONTH] = toInt(input) - 1; + }); + + addParseToken(['MMM', 'MMMM'], function (input, array, config, token) { + var month = config._locale.monthsParse(input, token, config._strict); + // if we didn't find a month name, mark the date as invalid. + if (month != null) { + array[MONTH] = month; + } else { + getParsingFlags(config).invalidMonth = input; + } + }); + + // LOCALES + + var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split( + '_' + ), + defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split( + '_' + ), + MONTHS_IN_FORMAT = /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/, + defaultMonthsShortRegex = matchWord, + defaultMonthsRegex = matchWord; + + function localeMonths(m, format) { + if (!m) { + return isArray(this._months) + ? this._months + : this._months['standalone']; + } + return isArray(this._months) + ? this._months[m.month()] + : this._months[ + (this._months.isFormat || MONTHS_IN_FORMAT).test(format) + ? 'format' + : 'standalone' + ][m.month()]; + } + + function localeMonthsShort(m, format) { + if (!m) { + return isArray(this._monthsShort) + ? this._monthsShort + : this._monthsShort['standalone']; + } + return isArray(this._monthsShort) + ? this._monthsShort[m.month()] + : this._monthsShort[ + MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone' + ][m.month()]; + } + + function handleStrictParse(monthName, format, strict) { + var i, + ii, + mom, + llc = monthName.toLocaleLowerCase(); + if (!this._monthsParse) { + // this is not used + this._monthsParse = []; + this._longMonthsParse = []; + this._shortMonthsParse = []; + for (i = 0; i < 12; ++i) { + mom = createUTC([2000, i]); + this._shortMonthsParse[i] = this.monthsShort( + mom, + '' + ).toLocaleLowerCase(); + this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase(); + } + } + + if (strict) { + if (format === 'MMM') { + ii = indexOf.call(this._shortMonthsParse, llc); + return ii !== -1 ? ii : null; + } else { + ii = indexOf.call(this._longMonthsParse, llc); + return ii !== -1 ? ii : null; + } + } else { + if (format === 'MMM') { + ii = indexOf.call(this._shortMonthsParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf.call(this._longMonthsParse, llc); + return ii !== -1 ? ii : null; + } else { + ii = indexOf.call(this._longMonthsParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf.call(this._shortMonthsParse, llc); + return ii !== -1 ? ii : null; + } + } + } + + function localeMonthsParse(monthName, format, strict) { + var i, mom, regex; + + if (this._monthsParseExact) { + return handleStrictParse.call(this, monthName, format, strict); + } + + if (!this._monthsParse) { + this._monthsParse = []; + this._longMonthsParse = []; + this._shortMonthsParse = []; + } + + // TODO: add sorting + // Sorting makes sure if one month (or abbr) is a prefix of another + // see sorting in computeMonthsParse + for (i = 0; i < 12; i++) { + // make the regex if we don't have it already + mom = createUTC([2000, i]); + if (strict && !this._longMonthsParse[i]) { + this._longMonthsParse[i] = new RegExp( + '^' + this.months(mom, '').replace('.', '') + '$', + 'i' + ); + this._shortMonthsParse[i] = new RegExp( + '^' + this.monthsShort(mom, '').replace('.', '') + '$', + 'i' + ); + } + if (!strict && !this._monthsParse[i]) { + regex = + '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, ''); + this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i'); + } + // test the regex + if ( + strict && + format === 'MMMM' && + this._longMonthsParse[i].test(monthName) + ) { + return i; + } else if ( + strict && + format === 'MMM' && + this._shortMonthsParse[i].test(monthName) + ) { + return i; + } else if (!strict && this._monthsParse[i].test(monthName)) { + return i; + } + } + } + + // MOMENTS + + function setMonth(mom, value) { + var dayOfMonth; + + if (!mom.isValid()) { + // No op + return mom; + } + + if (typeof value === 'string') { + if (/^\d+$/.test(value)) { + value = toInt(value); + } else { + value = mom.localeData().monthsParse(value); + // TODO: Another silent failure? + if (!isNumber(value)) { + return mom; + } + } + } + + dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value)); + mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth); + return mom; + } + + function getSetMonth(value) { + if (value != null) { + setMonth(this, value); + hooks.updateOffset(this, true); + return this; + } else { + return get(this, 'Month'); + } + } + + function getDaysInMonth() { + return daysInMonth(this.year(), this.month()); + } + + function monthsShortRegex(isStrict) { + if (this._monthsParseExact) { + if (!hasOwnProp(this, '_monthsRegex')) { + computeMonthsParse.call(this); + } + if (isStrict) { + return this._monthsShortStrictRegex; + } else { + return this._monthsShortRegex; + } + } else { + if (!hasOwnProp(this, '_monthsShortRegex')) { + this._monthsShortRegex = defaultMonthsShortRegex; + } + return this._monthsShortStrictRegex && isStrict + ? this._monthsShortStrictRegex + : this._monthsShortRegex; + } + } + + function monthsRegex(isStrict) { + if (this._monthsParseExact) { + if (!hasOwnProp(this, '_monthsRegex')) { + computeMonthsParse.call(this); + } + if (isStrict) { + return this._monthsStrictRegex; + } else { + return this._monthsRegex; + } + } else { + if (!hasOwnProp(this, '_monthsRegex')) { + this._monthsRegex = defaultMonthsRegex; + } + return this._monthsStrictRegex && isStrict + ? this._monthsStrictRegex + : this._monthsRegex; + } + } + + function computeMonthsParse() { + function cmpLenRev(a, b) { + return b.length - a.length; + } + + var shortPieces = [], + longPieces = [], + mixedPieces = [], + i, + mom; + for (i = 0; i < 12; i++) { + // make the regex if we don't have it already + mom = createUTC([2000, i]); + shortPieces.push(this.monthsShort(mom, '')); + longPieces.push(this.months(mom, '')); + mixedPieces.push(this.months(mom, '')); + mixedPieces.push(this.monthsShort(mom, '')); + } + // Sorting makes sure if one month (or abbr) is a prefix of another it + // will match the longer piece. + shortPieces.sort(cmpLenRev); + longPieces.sort(cmpLenRev); + mixedPieces.sort(cmpLenRev); + for (i = 0; i < 12; i++) { + shortPieces[i] = regexEscape(shortPieces[i]); + longPieces[i] = regexEscape(longPieces[i]); + } + for (i = 0; i < 24; i++) { + mixedPieces[i] = regexEscape(mixedPieces[i]); + } + + this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i'); + this._monthsShortRegex = this._monthsRegex; + this._monthsStrictRegex = new RegExp( + '^(' + longPieces.join('|') + ')', + 'i' + ); + this._monthsShortStrictRegex = new RegExp( + '^(' + shortPieces.join('|') + ')', + 'i' + ); + } + + // FORMATTING + + addFormatToken('Y', 0, 0, function () { + var y = this.year(); + return y <= 9999 ? zeroFill(y, 4) : '+' + y; + }); + + addFormatToken(0, ['YY', 2], 0, function () { + return this.year() % 100; + }); + + addFormatToken(0, ['YYYY', 4], 0, 'year'); + addFormatToken(0, ['YYYYY', 5], 0, 'year'); + addFormatToken(0, ['YYYYYY', 6, true], 0, 'year'); + + // ALIASES + + addUnitAlias('year', 'y'); + + // PRIORITIES + + addUnitPriority('year', 1); + + // PARSING + + addRegexToken('Y', matchSigned); + addRegexToken('YY', match1to2, match2); + addRegexToken('YYYY', match1to4, match4); + addRegexToken('YYYYY', match1to6, match6); + addRegexToken('YYYYYY', match1to6, match6); + + addParseToken(['YYYYY', 'YYYYYY'], YEAR); + addParseToken('YYYY', function (input, array) { + array[YEAR] = + input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input); + }); + addParseToken('YY', function (input, array) { + array[YEAR] = hooks.parseTwoDigitYear(input); + }); + addParseToken('Y', function (input, array) { + array[YEAR] = parseInt(input, 10); + }); + + // HELPERS + + function daysInYear(year) { + return isLeapYear(year) ? 366 : 365; + } + + // HOOKS + + hooks.parseTwoDigitYear = function (input) { + return toInt(input) + (toInt(input) > 68 ? 1900 : 2000); + }; + + // MOMENTS + + var getSetYear = makeGetSet('FullYear', true); + + function getIsLeapYear() { + return isLeapYear(this.year()); + } + + function createDate(y, m, d, h, M, s, ms) { + // can't just apply() to create a date: + // https://stackoverflow.com/q/181348 + var date; + // the date constructor remaps years 0-99 to 1900-1999 + if (y < 100 && y >= 0) { + // preserve leap years using a full 400 year cycle, then reset + date = new Date(y + 400, m, d, h, M, s, ms); + if (isFinite(date.getFullYear())) { + date.setFullYear(y); + } + } else { + date = new Date(y, m, d, h, M, s, ms); + } + + return date; + } + + function createUTCDate(y) { + var date, args; + // the Date.UTC function remaps years 0-99 to 1900-1999 + if (y < 100 && y >= 0) { + args = Array.prototype.slice.call(arguments); + // preserve leap years using a full 400 year cycle, then reset + args[0] = y + 400; + date = new Date(Date.UTC.apply(null, args)); + if (isFinite(date.getUTCFullYear())) { + date.setUTCFullYear(y); + } + } else { + date = new Date(Date.UTC.apply(null, arguments)); + } + + return date; + } + + // start-of-first-week - start-of-year + function firstWeekOffset(year, dow, doy) { + var // first-week day -- which january is always in the first week (4 for iso, 1 for other) + fwd = 7 + dow - doy, + // first-week day local weekday -- which local weekday is fwd + fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7; + + return -fwdlw + fwd - 1; + } + + // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday + function dayOfYearFromWeeks(year, week, weekday, dow, doy) { + var localWeekday = (7 + weekday - dow) % 7, + weekOffset = firstWeekOffset(year, dow, doy), + dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset, + resYear, + resDayOfYear; + + if (dayOfYear <= 0) { + resYear = year - 1; + resDayOfYear = daysInYear(resYear) + dayOfYear; + } else if (dayOfYear > daysInYear(year)) { + resYear = year + 1; + resDayOfYear = dayOfYear - daysInYear(year); + } else { + resYear = year; + resDayOfYear = dayOfYear; + } + + return { + year: resYear, + dayOfYear: resDayOfYear, + }; + } + + function weekOfYear(mom, dow, doy) { + var weekOffset = firstWeekOffset(mom.year(), dow, doy), + week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1, + resWeek, + resYear; + + if (week < 1) { + resYear = mom.year() - 1; + resWeek = week + weeksInYear(resYear, dow, doy); + } else if (week > weeksInYear(mom.year(), dow, doy)) { + resWeek = week - weeksInYear(mom.year(), dow, doy); + resYear = mom.year() + 1; + } else { + resYear = mom.year(); + resWeek = week; + } + + return { + week: resWeek, + year: resYear, + }; + } + + function weeksInYear(year, dow, doy) { + var weekOffset = firstWeekOffset(year, dow, doy), + weekOffsetNext = firstWeekOffset(year + 1, dow, doy); + return (daysInYear(year) - weekOffset + weekOffsetNext) / 7; + } + + // FORMATTING + + addFormatToken('w', ['ww', 2], 'wo', 'week'); + addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek'); + + // ALIASES + + addUnitAlias('week', 'w'); + addUnitAlias('isoWeek', 'W'); + + // PRIORITIES + + addUnitPriority('week', 5); + addUnitPriority('isoWeek', 5); + + // PARSING + + addRegexToken('w', match1to2); + addRegexToken('ww', match1to2, match2); + addRegexToken('W', match1to2); + addRegexToken('WW', match1to2, match2); + + addWeekParseToken(['w', 'ww', 'W', 'WW'], function ( + input, + week, + config, + token + ) { + week[token.substr(0, 1)] = toInt(input); + }); + + // HELPERS + + // LOCALES + + function localeWeek(mom) { + return weekOfYear(mom, this._week.dow, this._week.doy).week; + } + + var defaultLocaleWeek = { + dow: 0, // Sunday is the first day of the week. + doy: 6, // The week that contains Jan 6th is the first week of the year. + }; + + function localeFirstDayOfWeek() { + return this._week.dow; + } + + function localeFirstDayOfYear() { + return this._week.doy; + } + + // MOMENTS + + function getSetWeek(input) { + var week = this.localeData().week(this); + return input == null ? week : this.add((input - week) * 7, 'd'); + } + + function getSetISOWeek(input) { + var week = weekOfYear(this, 1, 4).week; + return input == null ? week : this.add((input - week) * 7, 'd'); + } + + // FORMATTING + + addFormatToken('d', 0, 'do', 'day'); + + addFormatToken('dd', 0, 0, function (format) { + return this.localeData().weekdaysMin(this, format); + }); + + addFormatToken('ddd', 0, 0, function (format) { + return this.localeData().weekdaysShort(this, format); + }); + + addFormatToken('dddd', 0, 0, function (format) { + return this.localeData().weekdays(this, format); + }); + + addFormatToken('e', 0, 0, 'weekday'); + addFormatToken('E', 0, 0, 'isoWeekday'); + + // ALIASES + + addUnitAlias('day', 'd'); + addUnitAlias('weekday', 'e'); + addUnitAlias('isoWeekday', 'E'); + + // PRIORITY + addUnitPriority('day', 11); + addUnitPriority('weekday', 11); + addUnitPriority('isoWeekday', 11); + + // PARSING + + addRegexToken('d', match1to2); + addRegexToken('e', match1to2); + addRegexToken('E', match1to2); + addRegexToken('dd', function (isStrict, locale) { + return locale.weekdaysMinRegex(isStrict); + }); + addRegexToken('ddd', function (isStrict, locale) { + return locale.weekdaysShortRegex(isStrict); + }); + addRegexToken('dddd', function (isStrict, locale) { + return locale.weekdaysRegex(isStrict); + }); + + addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) { + var weekday = config._locale.weekdaysParse(input, token, config._strict); + // if we didn't get a weekday name, mark the date as invalid + if (weekday != null) { + week.d = weekday; + } else { + getParsingFlags(config).invalidWeekday = input; + } + }); + + addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) { + week[token] = toInt(input); + }); + + // HELPERS + + function parseWeekday(input, locale) { + if (typeof input !== 'string') { + return input; + } + + if (!isNaN(input)) { + return parseInt(input, 10); + } + + input = locale.weekdaysParse(input); + if (typeof input === 'number') { + return input; + } + + return null; + } + + function parseIsoWeekday(input, locale) { + if (typeof input === 'string') { + return locale.weekdaysParse(input) % 7 || 7; + } + return isNaN(input) ? null : input; + } + + // LOCALES + function shiftWeekdays(ws, n) { + return ws.slice(n, 7).concat(ws.slice(0, n)); + } + + var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split( + '_' + ), + defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + defaultWeekdaysRegex = matchWord, + defaultWeekdaysShortRegex = matchWord, + defaultWeekdaysMinRegex = matchWord; + + function localeWeekdays(m, format) { + var weekdays = isArray(this._weekdays) + ? this._weekdays + : this._weekdays[ + m && m !== true && this._weekdays.isFormat.test(format) + ? 'format' + : 'standalone' + ]; + return m === true + ? shiftWeekdays(weekdays, this._week.dow) + : m + ? weekdays[m.day()] + : weekdays; + } + + function localeWeekdaysShort(m) { + return m === true + ? shiftWeekdays(this._weekdaysShort, this._week.dow) + : m + ? this._weekdaysShort[m.day()] + : this._weekdaysShort; + } + + function localeWeekdaysMin(m) { + return m === true + ? shiftWeekdays(this._weekdaysMin, this._week.dow) + : m + ? this._weekdaysMin[m.day()] + : this._weekdaysMin; + } + + function handleStrictParse$1(weekdayName, format, strict) { + var i, + ii, + mom, + llc = weekdayName.toLocaleLowerCase(); + if (!this._weekdaysParse) { + this._weekdaysParse = []; + this._shortWeekdaysParse = []; + this._minWeekdaysParse = []; + + for (i = 0; i < 7; ++i) { + mom = createUTC([2000, 1]).day(i); + this._minWeekdaysParse[i] = this.weekdaysMin( + mom, + '' + ).toLocaleLowerCase(); + this._shortWeekdaysParse[i] = this.weekdaysShort( + mom, + '' + ).toLocaleLowerCase(); + this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase(); + } + } + + if (strict) { + if (format === 'dddd') { + ii = indexOf.call(this._weekdaysParse, llc); + return ii !== -1 ? ii : null; + } else if (format === 'ddd') { + ii = indexOf.call(this._shortWeekdaysParse, llc); + return ii !== -1 ? ii : null; + } else { + ii = indexOf.call(this._minWeekdaysParse, llc); + return ii !== -1 ? ii : null; + } + } else { + if (format === 'dddd') { + ii = indexOf.call(this._weekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf.call(this._shortWeekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf.call(this._minWeekdaysParse, llc); + return ii !== -1 ? ii : null; + } else if (format === 'ddd') { + ii = indexOf.call(this._shortWeekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf.call(this._weekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf.call(this._minWeekdaysParse, llc); + return ii !== -1 ? ii : null; + } else { + ii = indexOf.call(this._minWeekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf.call(this._weekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf.call(this._shortWeekdaysParse, llc); + return ii !== -1 ? ii : null; + } + } + } + + function localeWeekdaysParse(weekdayName, format, strict) { + var i, mom, regex; + + if (this._weekdaysParseExact) { + return handleStrictParse$1.call(this, weekdayName, format, strict); + } + + if (!this._weekdaysParse) { + this._weekdaysParse = []; + this._minWeekdaysParse = []; + this._shortWeekdaysParse = []; + this._fullWeekdaysParse = []; + } + + for (i = 0; i < 7; i++) { + // make the regex if we don't have it already + + mom = createUTC([2000, 1]).day(i); + if (strict && !this._fullWeekdaysParse[i]) { + this._fullWeekdaysParse[i] = new RegExp( + '^' + this.weekdays(mom, '').replace('.', '\\.?') + '$', + 'i' + ); + this._shortWeekdaysParse[i] = new RegExp( + '^' + this.weekdaysShort(mom, '').replace('.', '\\.?') + '$', + 'i' + ); + this._minWeekdaysParse[i] = new RegExp( + '^' + this.weekdaysMin(mom, '').replace('.', '\\.?') + '$', + 'i' + ); + } + if (!this._weekdaysParse[i]) { + regex = + '^' + + this.weekdays(mom, '') + + '|^' + + this.weekdaysShort(mom, '') + + '|^' + + this.weekdaysMin(mom, ''); + this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i'); + } + // test the regex + if ( + strict && + format === 'dddd' && + this._fullWeekdaysParse[i].test(weekdayName) + ) { + return i; + } else if ( + strict && + format === 'ddd' && + this._shortWeekdaysParse[i].test(weekdayName) + ) { + return i; + } else if ( + strict && + format === 'dd' && + this._minWeekdaysParse[i].test(weekdayName) + ) { + return i; + } else if (!strict && this._weekdaysParse[i].test(weekdayName)) { + return i; + } + } + } + + // MOMENTS + + function getSetDayOfWeek(input) { + if (!this.isValid()) { + return input != null ? this : NaN; + } + var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay(); + if (input != null) { + input = parseWeekday(input, this.localeData()); + return this.add(input - day, 'd'); + } else { + return day; + } + } + + function getSetLocaleDayOfWeek(input) { + if (!this.isValid()) { + return input != null ? this : NaN; + } + var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7; + return input == null ? weekday : this.add(input - weekday, 'd'); + } + + function getSetISODayOfWeek(input) { + if (!this.isValid()) { + return input != null ? this : NaN; + } + + // behaves the same as moment#day except + // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6) + // as a setter, sunday should belong to the previous week. + + if (input != null) { + var weekday = parseIsoWeekday(input, this.localeData()); + return this.day(this.day() % 7 ? weekday : weekday - 7); + } else { + return this.day() || 7; + } + } + + function weekdaysRegex(isStrict) { + if (this._weekdaysParseExact) { + if (!hasOwnProp(this, '_weekdaysRegex')) { + computeWeekdaysParse.call(this); + } + if (isStrict) { + return this._weekdaysStrictRegex; + } else { + return this._weekdaysRegex; + } + } else { + if (!hasOwnProp(this, '_weekdaysRegex')) { + this._weekdaysRegex = defaultWeekdaysRegex; + } + return this._weekdaysStrictRegex && isStrict + ? this._weekdaysStrictRegex + : this._weekdaysRegex; + } + } + + function weekdaysShortRegex(isStrict) { + if (this._weekdaysParseExact) { + if (!hasOwnProp(this, '_weekdaysRegex')) { + computeWeekdaysParse.call(this); + } + if (isStrict) { + return this._weekdaysShortStrictRegex; + } else { + return this._weekdaysShortRegex; + } + } else { + if (!hasOwnProp(this, '_weekdaysShortRegex')) { + this._weekdaysShortRegex = defaultWeekdaysShortRegex; + } + return this._weekdaysShortStrictRegex && isStrict + ? this._weekdaysShortStrictRegex + : this._weekdaysShortRegex; + } + } + + function weekdaysMinRegex(isStrict) { + if (this._weekdaysParseExact) { + if (!hasOwnProp(this, '_weekdaysRegex')) { + computeWeekdaysParse.call(this); + } + if (isStrict) { + return this._weekdaysMinStrictRegex; + } else { + return this._weekdaysMinRegex; + } + } else { + if (!hasOwnProp(this, '_weekdaysMinRegex')) { + this._weekdaysMinRegex = defaultWeekdaysMinRegex; + } + return this._weekdaysMinStrictRegex && isStrict + ? this._weekdaysMinStrictRegex + : this._weekdaysMinRegex; + } + } + + function computeWeekdaysParse() { + function cmpLenRev(a, b) { + return b.length - a.length; + } + + var minPieces = [], + shortPieces = [], + longPieces = [], + mixedPieces = [], + i, + mom, + minp, + shortp, + longp; + for (i = 0; i < 7; i++) { + // make the regex if we don't have it already + mom = createUTC([2000, 1]).day(i); + minp = regexEscape(this.weekdaysMin(mom, '')); + shortp = regexEscape(this.weekdaysShort(mom, '')); + longp = regexEscape(this.weekdays(mom, '')); + minPieces.push(minp); + shortPieces.push(shortp); + longPieces.push(longp); + mixedPieces.push(minp); + mixedPieces.push(shortp); + mixedPieces.push(longp); + } + // Sorting makes sure if one weekday (or abbr) is a prefix of another it + // will match the longer piece. + minPieces.sort(cmpLenRev); + shortPieces.sort(cmpLenRev); + longPieces.sort(cmpLenRev); + mixedPieces.sort(cmpLenRev); + + this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i'); + this._weekdaysShortRegex = this._weekdaysRegex; + this._weekdaysMinRegex = this._weekdaysRegex; + + this._weekdaysStrictRegex = new RegExp( + '^(' + longPieces.join('|') + ')', + 'i' + ); + this._weekdaysShortStrictRegex = new RegExp( + '^(' + shortPieces.join('|') + ')', + 'i' + ); + this._weekdaysMinStrictRegex = new RegExp( + '^(' + minPieces.join('|') + ')', + 'i' + ); + } + + // FORMATTING + + function hFormat() { + return this.hours() % 12 || 12; + } + + function kFormat() { + return this.hours() || 24; + } + + addFormatToken('H', ['HH', 2], 0, 'hour'); + addFormatToken('h', ['hh', 2], 0, hFormat); + addFormatToken('k', ['kk', 2], 0, kFormat); + + addFormatToken('hmm', 0, 0, function () { + return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2); + }); + + addFormatToken('hmmss', 0, 0, function () { + return ( + '' + + hFormat.apply(this) + + zeroFill(this.minutes(), 2) + + zeroFill(this.seconds(), 2) + ); + }); + + addFormatToken('Hmm', 0, 0, function () { + return '' + this.hours() + zeroFill(this.minutes(), 2); + }); + + addFormatToken('Hmmss', 0, 0, function () { + return ( + '' + + this.hours() + + zeroFill(this.minutes(), 2) + + zeroFill(this.seconds(), 2) + ); + }); + + function meridiem(token, lowercase) { + addFormatToken(token, 0, 0, function () { + return this.localeData().meridiem( + this.hours(), + this.minutes(), + lowercase + ); + }); + } + + meridiem('a', true); + meridiem('A', false); + + // ALIASES + + addUnitAlias('hour', 'h'); + + // PRIORITY + addUnitPriority('hour', 13); + + // PARSING + + function matchMeridiem(isStrict, locale) { + return locale._meridiemParse; + } + + addRegexToken('a', matchMeridiem); + addRegexToken('A', matchMeridiem); + addRegexToken('H', match1to2); + addRegexToken('h', match1to2); + addRegexToken('k', match1to2); + addRegexToken('HH', match1to2, match2); + addRegexToken('hh', match1to2, match2); + addRegexToken('kk', match1to2, match2); + + addRegexToken('hmm', match3to4); + addRegexToken('hmmss', match5to6); + addRegexToken('Hmm', match3to4); + addRegexToken('Hmmss', match5to6); + + addParseToken(['H', 'HH'], HOUR); + addParseToken(['k', 'kk'], function (input, array, config) { + var kInput = toInt(input); + array[HOUR] = kInput === 24 ? 0 : kInput; + }); + addParseToken(['a', 'A'], function (input, array, config) { + config._isPm = config._locale.isPM(input); + config._meridiem = input; + }); + addParseToken(['h', 'hh'], function (input, array, config) { + array[HOUR] = toInt(input); + getParsingFlags(config).bigHour = true; + }); + addParseToken('hmm', function (input, array, config) { + var pos = input.length - 2; + array[HOUR] = toInt(input.substr(0, pos)); + array[MINUTE] = toInt(input.substr(pos)); + getParsingFlags(config).bigHour = true; + }); + addParseToken('hmmss', function (input, array, config) { + var pos1 = input.length - 4, + pos2 = input.length - 2; + array[HOUR] = toInt(input.substr(0, pos1)); + array[MINUTE] = toInt(input.substr(pos1, 2)); + array[SECOND] = toInt(input.substr(pos2)); + getParsingFlags(config).bigHour = true; + }); + addParseToken('Hmm', function (input, array, config) { + var pos = input.length - 2; + array[HOUR] = toInt(input.substr(0, pos)); + array[MINUTE] = toInt(input.substr(pos)); + }); + addParseToken('Hmmss', function (input, array, config) { + var pos1 = input.length - 4, + pos2 = input.length - 2; + array[HOUR] = toInt(input.substr(0, pos1)); + array[MINUTE] = toInt(input.substr(pos1, 2)); + array[SECOND] = toInt(input.substr(pos2)); + }); + + // LOCALES + + function localeIsPM(input) { + // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays + // Using charAt should be more compatible. + return (input + '').toLowerCase().charAt(0) === 'p'; + } + + var defaultLocaleMeridiemParse = /[ap]\.?m?\.?/i, + // Setting the hour should keep the time, because the user explicitly + // specified which hour they want. So trying to maintain the same hour (in + // a new timezone) makes sense. Adding/subtracting hours does not follow + // this rule. + getSetHour = makeGetSet('Hours', true); + + function localeMeridiem(hours, minutes, isLower) { + if (hours > 11) { + return isLower ? 'pm' : 'PM'; + } else { + return isLower ? 'am' : 'AM'; + } + } + + var baseConfig = { + calendar: defaultCalendar, + longDateFormat: defaultLongDateFormat, + invalidDate: defaultInvalidDate, + ordinal: defaultOrdinal, + dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse, + relativeTime: defaultRelativeTime, + + months: defaultLocaleMonths, + monthsShort: defaultLocaleMonthsShort, + + week: defaultLocaleWeek, + + weekdays: defaultLocaleWeekdays, + weekdaysMin: defaultLocaleWeekdaysMin, + weekdaysShort: defaultLocaleWeekdaysShort, + + meridiemParse: defaultLocaleMeridiemParse, + }; + + // internal storage for locale config files + var locales = {}, + localeFamilies = {}, + globalLocale; + + function commonPrefix(arr1, arr2) { + var i, + minl = Math.min(arr1.length, arr2.length); + for (i = 0; i < minl; i += 1) { + if (arr1[i] !== arr2[i]) { + return i; + } + } + return minl; + } + + function normalizeLocale(key) { + return key ? key.toLowerCase().replace('_', '-') : key; + } + + // pick the locale from the array + // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each + // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root + function chooseLocale(names) { + var i = 0, + j, + next, + locale, + split; + + while (i < names.length) { + split = normalizeLocale(names[i]).split('-'); + j = split.length; + next = normalizeLocale(names[i + 1]); + next = next ? next.split('-') : null; + while (j > 0) { + locale = loadLocale(split.slice(0, j).join('-')); + if (locale) { + return locale; + } + if ( + next && + next.length >= j && + commonPrefix(split, next) >= j - 1 + ) { + //the next array item is better than a shallower substring of this one + break; + } + j--; + } + i++; + } + return globalLocale; + } + + function loadLocale(name) { + var oldLocale = null, + aliasedRequire; + // TODO: Find a better way to register and load all the locales in Node + if ( + locales[name] === undefined && + typeof module !== 'undefined' && + module && + module.exports + ) { + try { + oldLocale = globalLocale._abbr; + aliasedRequire = require; + aliasedRequire('./locale/' + name); + getSetGlobalLocale(oldLocale); + } catch (e) { + // mark as not found to avoid repeating expensive file require call causing high CPU + // when trying to find en-US, en_US, en-us for every format call + locales[name] = null; // null means not found + } + } + return locales[name]; + } + + // This function will load locale and then set the global locale. If + // no arguments are passed in, it will simply return the current global + // locale key. + function getSetGlobalLocale(key, values) { + var data; + if (key) { + if (isUndefined(values)) { + data = getLocale(key); + } else { + data = defineLocale(key, values); + } + + if (data) { + // moment.duration._locale = moment._locale = data; + globalLocale = data; + } else { + if (typeof console !== 'undefined' && console.warn) { + //warn user if arguments are passed but the locale could not be set + console.warn( + 'Locale ' + key + ' not found. Did you forget to load it?' + ); + } + } + } + + return globalLocale._abbr; + } + + function defineLocale(name, config) { + if (config !== null) { + var locale, + parentConfig = baseConfig; + config.abbr = name; + if (locales[name] != null) { + deprecateSimple( + 'defineLocaleOverride', + 'use moment.updateLocale(localeName, config) to change ' + + 'an existing locale. moment.defineLocale(localeName, ' + + 'config) should only be used for creating a new locale ' + + 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.' + ); + parentConfig = locales[name]._config; + } else if (config.parentLocale != null) { + if (locales[config.parentLocale] != null) { + parentConfig = locales[config.parentLocale]._config; + } else { + locale = loadLocale(config.parentLocale); + if (locale != null) { + parentConfig = locale._config; + } else { + if (!localeFamilies[config.parentLocale]) { + localeFamilies[config.parentLocale] = []; + } + localeFamilies[config.parentLocale].push({ + name: name, + config: config, + }); + return null; + } + } + } + locales[name] = new Locale(mergeConfigs(parentConfig, config)); + + if (localeFamilies[name]) { + localeFamilies[name].forEach(function (x) { + defineLocale(x.name, x.config); + }); + } + + // backwards compat for now: also set the locale + // make sure we set the locale AFTER all child locales have been + // created, so we won't end up with the child locale set. + getSetGlobalLocale(name); + + return locales[name]; + } else { + // useful for testing + delete locales[name]; + return null; + } + } + + function updateLocale(name, config) { + if (config != null) { + var locale, + tmpLocale, + parentConfig = baseConfig; + + if (locales[name] != null && locales[name].parentLocale != null) { + // Update existing child locale in-place to avoid memory-leaks + locales[name].set(mergeConfigs(locales[name]._config, config)); + } else { + // MERGE + tmpLocale = loadLocale(name); + if (tmpLocale != null) { + parentConfig = tmpLocale._config; + } + config = mergeConfigs(parentConfig, config); + if (tmpLocale == null) { + // updateLocale is called for creating a new locale + // Set abbr so it will have a name (getters return + // undefined otherwise). + config.abbr = name; + } + locale = new Locale(config); + locale.parentLocale = locales[name]; + locales[name] = locale; + } + + // backwards compat for now: also set the locale + getSetGlobalLocale(name); + } else { + // pass null for config to unupdate, useful for tests + if (locales[name] != null) { + if (locales[name].parentLocale != null) { + locales[name] = locales[name].parentLocale; + if (name === getSetGlobalLocale()) { + getSetGlobalLocale(name); + } + } else if (locales[name] != null) { + delete locales[name]; + } + } + } + return locales[name]; + } + + // returns locale data + function getLocale(key) { + var locale; + + if (key && key._locale && key._locale._abbr) { + key = key._locale._abbr; + } + + if (!key) { + return globalLocale; + } + + if (!isArray(key)) { + //short-circuit everything else + locale = loadLocale(key); + if (locale) { + return locale; + } + key = [key]; + } + + return chooseLocale(key); + } + + function listLocales() { + return keys(locales); + } + + function checkOverflow(m) { + var overflow, + a = m._a; + + if (a && getParsingFlags(m).overflow === -2) { + overflow = + a[MONTH] < 0 || a[MONTH] > 11 + ? MONTH + : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH]) + ? DATE + : a[HOUR] < 0 || + a[HOUR] > 24 || + (a[HOUR] === 24 && + (a[MINUTE] !== 0 || + a[SECOND] !== 0 || + a[MILLISECOND] !== 0)) + ? HOUR + : a[MINUTE] < 0 || a[MINUTE] > 59 + ? MINUTE + : a[SECOND] < 0 || a[SECOND] > 59 + ? SECOND + : a[MILLISECOND] < 0 || a[MILLISECOND] > 999 + ? MILLISECOND + : -1; + + if ( + getParsingFlags(m)._overflowDayOfYear && + (overflow < YEAR || overflow > DATE) + ) { + overflow = DATE; + } + if (getParsingFlags(m)._overflowWeeks && overflow === -1) { + overflow = WEEK; + } + if (getParsingFlags(m)._overflowWeekday && overflow === -1) { + overflow = WEEKDAY; + } + + getParsingFlags(m).overflow = overflow; + } + + return m; + } + + // iso 8601 regex + // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00) + var extendedIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/, + basicIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/, + tzRegex = /Z|[+-]\d\d(?::?\d\d)?/, + isoDates = [ + ['YYYYYY-MM-DD', /[+-]\d{6}-\d\d-\d\d/], + ['YYYY-MM-DD', /\d{4}-\d\d-\d\d/], + ['GGGG-[W]WW-E', /\d{4}-W\d\d-\d/], + ['GGGG-[W]WW', /\d{4}-W\d\d/, false], + ['YYYY-DDD', /\d{4}-\d{3}/], + ['YYYY-MM', /\d{4}-\d\d/, false], + ['YYYYYYMMDD', /[+-]\d{10}/], + ['YYYYMMDD', /\d{8}/], + ['GGGG[W]WWE', /\d{4}W\d{3}/], + ['GGGG[W]WW', /\d{4}W\d{2}/, false], + ['YYYYDDD', /\d{7}/], + ['YYYYMM', /\d{6}/, false], + ['YYYY', /\d{4}/, false], + ], + // iso time formats and regexes + isoTimes = [ + ['HH:mm:ss.SSSS', /\d\d:\d\d:\d\d\.\d+/], + ['HH:mm:ss,SSSS', /\d\d:\d\d:\d\d,\d+/], + ['HH:mm:ss', /\d\d:\d\d:\d\d/], + ['HH:mm', /\d\d:\d\d/], + ['HHmmss.SSSS', /\d\d\d\d\d\d\.\d+/], + ['HHmmss,SSSS', /\d\d\d\d\d\d,\d+/], + ['HHmmss', /\d\d\d\d\d\d/], + ['HHmm', /\d\d\d\d/], + ['HH', /\d\d/], + ], + aspNetJsonRegex = /^\/?Date\((-?\d+)/i, + // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3 + rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/, + obsOffsets = { + UT: 0, + GMT: 0, + EDT: -4 * 60, + EST: -5 * 60, + CDT: -5 * 60, + CST: -6 * 60, + MDT: -6 * 60, + MST: -7 * 60, + PDT: -7 * 60, + PST: -8 * 60, + }; + + // date from iso format + function configFromISO(config) { + var i, + l, + string = config._i, + match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string), + allowTime, + dateFormat, + timeFormat, + tzFormat; + + if (match) { + getParsingFlags(config).iso = true; + + for (i = 0, l = isoDates.length; i < l; i++) { + if (isoDates[i][1].exec(match[1])) { + dateFormat = isoDates[i][0]; + allowTime = isoDates[i][2] !== false; + break; + } + } + if (dateFormat == null) { + config._isValid = false; + return; + } + if (match[3]) { + for (i = 0, l = isoTimes.length; i < l; i++) { + if (isoTimes[i][1].exec(match[3])) { + // match[2] should be 'T' or space + timeFormat = (match[2] || ' ') + isoTimes[i][0]; + break; + } + } + if (timeFormat == null) { + config._isValid = false; + return; + } + } + if (!allowTime && timeFormat != null) { + config._isValid = false; + return; + } + if (match[4]) { + if (tzRegex.exec(match[4])) { + tzFormat = 'Z'; + } else { + config._isValid = false; + return; + } + } + config._f = dateFormat + (timeFormat || '') + (tzFormat || ''); + configFromStringAndFormat(config); + } else { + config._isValid = false; + } + } + + function extractFromRFC2822Strings( + yearStr, + monthStr, + dayStr, + hourStr, + minuteStr, + secondStr + ) { + var result = [ + untruncateYear(yearStr), + defaultLocaleMonthsShort.indexOf(monthStr), + parseInt(dayStr, 10), + parseInt(hourStr, 10), + parseInt(minuteStr, 10), + ]; + + if (secondStr) { + result.push(parseInt(secondStr, 10)); + } + + return result; + } + + function untruncateYear(yearStr) { + var year = parseInt(yearStr, 10); + if (year <= 49) { + return 2000 + year; + } else if (year <= 999) { + return 1900 + year; + } + return year; + } + + function preprocessRFC2822(s) { + // Remove comments and folding whitespace and replace multiple-spaces with a single space + return s + .replace(/\([^)]*\)|[\n\t]/g, ' ') + .replace(/(\s\s+)/g, ' ') + .replace(/^\s\s*/, '') + .replace(/\s\s*$/, ''); + } + + function checkWeekday(weekdayStr, parsedInput, config) { + if (weekdayStr) { + // TODO: Replace the vanilla JS Date object with an independent day-of-week check. + var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr), + weekdayActual = new Date( + parsedInput[0], + parsedInput[1], + parsedInput[2] + ).getDay(); + if (weekdayProvided !== weekdayActual) { + getParsingFlags(config).weekdayMismatch = true; + config._isValid = false; + return false; + } + } + return true; + } + + function calculateOffset(obsOffset, militaryOffset, numOffset) { + if (obsOffset) { + return obsOffsets[obsOffset]; + } else if (militaryOffset) { + // the only allowed military tz is Z + return 0; + } else { + var hm = parseInt(numOffset, 10), + m = hm % 100, + h = (hm - m) / 100; + return h * 60 + m; + } + } + + // date and time from ref 2822 format + function configFromRFC2822(config) { + var match = rfc2822.exec(preprocessRFC2822(config._i)), + parsedArray; + if (match) { + parsedArray = extractFromRFC2822Strings( + match[4], + match[3], + match[2], + match[5], + match[6], + match[7] + ); + if (!checkWeekday(match[1], parsedArray, config)) { + return; + } + + config._a = parsedArray; + config._tzm = calculateOffset(match[8], match[9], match[10]); + + config._d = createUTCDate.apply(null, config._a); + config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm); + + getParsingFlags(config).rfc2822 = true; + } else { + config._isValid = false; + } + } + + // date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict + function configFromString(config) { + var matched = aspNetJsonRegex.exec(config._i); + if (matched !== null) { + config._d = new Date(+matched[1]); + return; + } + + configFromISO(config); + if (config._isValid === false) { + delete config._isValid; + } else { + return; + } + + configFromRFC2822(config); + if (config._isValid === false) { + delete config._isValid; + } else { + return; + } + + if (config._strict) { + config._isValid = false; + } else { + // Final attempt, use Input Fallback + hooks.createFromInputFallback(config); + } + } + + hooks.createFromInputFallback = deprecate( + 'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' + + 'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' + + 'discouraged and will be removed in an upcoming major release. Please refer to ' + + 'http://momentjs.com/guides/#/warnings/js-date/ for more info.', + function (config) { + config._d = new Date(config._i + (config._useUTC ? ' UTC' : '')); + } + ); + + // Pick the first defined of two or three arguments. + function defaults(a, b, c) { + if (a != null) { + return a; + } + if (b != null) { + return b; + } + return c; + } + + function currentDateArray(config) { + // hooks is actually the exported moment object + var nowValue = new Date(hooks.now()); + if (config._useUTC) { + return [ + nowValue.getUTCFullYear(), + nowValue.getUTCMonth(), + nowValue.getUTCDate(), + ]; + } + return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()]; + } + + // convert an array to a date. + // the array should mirror the parameters below + // note: all values past the year are optional and will default to the lowest possible value. + // [year, month, day , hour, minute, second, millisecond] + function configFromArray(config) { + var i, + date, + input = [], + currentDate, + expectedWeekday, + yearToUse; + + if (config._d) { + return; + } + + currentDate = currentDateArray(config); + + //compute day of the year from weeks and weekdays + if (config._w && config._a[DATE] == null && config._a[MONTH] == null) { + dayOfYearFromWeekInfo(config); + } + + //if the day of the year is set, figure out what it is + if (config._dayOfYear != null) { + yearToUse = defaults(config._a[YEAR], currentDate[YEAR]); + + if ( + config._dayOfYear > daysInYear(yearToUse) || + config._dayOfYear === 0 + ) { + getParsingFlags(config)._overflowDayOfYear = true; + } + + date = createUTCDate(yearToUse, 0, config._dayOfYear); + config._a[MONTH] = date.getUTCMonth(); + config._a[DATE] = date.getUTCDate(); + } + + // Default to current date. + // * if no year, month, day of month are given, default to today + // * if day of month is given, default month and year + // * if month is given, default only year + // * if year is given, don't default anything + for (i = 0; i < 3 && config._a[i] == null; ++i) { + config._a[i] = input[i] = currentDate[i]; + } + + // Zero out whatever was not defaulted, including time + for (; i < 7; i++) { + config._a[i] = input[i] = + config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i]; + } + + // Check for 24:00:00.000 + if ( + config._a[HOUR] === 24 && + config._a[MINUTE] === 0 && + config._a[SECOND] === 0 && + config._a[MILLISECOND] === 0 + ) { + config._nextDay = true; + config._a[HOUR] = 0; + } + + config._d = (config._useUTC ? createUTCDate : createDate).apply( + null, + input + ); + expectedWeekday = config._useUTC + ? config._d.getUTCDay() + : config._d.getDay(); + + // Apply timezone offset from input. The actual utcOffset can be changed + // with parseZone. + if (config._tzm != null) { + config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm); + } + + if (config._nextDay) { + config._a[HOUR] = 24; + } + + // check for mismatching day of week + if ( + config._w && + typeof config._w.d !== 'undefined' && + config._w.d !== expectedWeekday + ) { + getParsingFlags(config).weekdayMismatch = true; + } + } + + function dayOfYearFromWeekInfo(config) { + var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek; + + w = config._w; + if (w.GG != null || w.W != null || w.E != null) { + dow = 1; + doy = 4; + + // TODO: We need to take the current isoWeekYear, but that depends on + // how we interpret now (local, utc, fixed offset). So create + // a now version of current config (take local/utc/offset flags, and + // create now). + weekYear = defaults( + w.GG, + config._a[YEAR], + weekOfYear(createLocal(), 1, 4).year + ); + week = defaults(w.W, 1); + weekday = defaults(w.E, 1); + if (weekday < 1 || weekday > 7) { + weekdayOverflow = true; + } + } else { + dow = config._locale._week.dow; + doy = config._locale._week.doy; + + curWeek = weekOfYear(createLocal(), dow, doy); + + weekYear = defaults(w.gg, config._a[YEAR], curWeek.year); + + // Default to current week. + week = defaults(w.w, curWeek.week); + + if (w.d != null) { + // weekday -- low day numbers are considered next week + weekday = w.d; + if (weekday < 0 || weekday > 6) { + weekdayOverflow = true; + } + } else if (w.e != null) { + // local weekday -- counting starts from beginning of week + weekday = w.e + dow; + if (w.e < 0 || w.e > 6) { + weekdayOverflow = true; + } + } else { + // default to beginning of week + weekday = dow; + } + } + if (week < 1 || week > weeksInYear(weekYear, dow, doy)) { + getParsingFlags(config)._overflowWeeks = true; + } else if (weekdayOverflow != null) { + getParsingFlags(config)._overflowWeekday = true; + } else { + temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy); + config._a[YEAR] = temp.year; + config._dayOfYear = temp.dayOfYear; + } + } + + // constant that refers to the ISO standard + hooks.ISO_8601 = function () {}; + + // constant that refers to the RFC 2822 form + hooks.RFC_2822 = function () {}; + + // date from string and format string + function configFromStringAndFormat(config) { + // TODO: Move this to another part of the creation flow to prevent circular deps + if (config._f === hooks.ISO_8601) { + configFromISO(config); + return; + } + if (config._f === hooks.RFC_2822) { + configFromRFC2822(config); + return; + } + config._a = []; + getParsingFlags(config).empty = true; + + // This array is used to make a Date, either with `new Date` or `Date.UTC` + var string = '' + config._i, + i, + parsedInput, + tokens, + token, + skipped, + stringLength = string.length, + totalParsedInputLength = 0, + era; + + tokens = + expandFormat(config._f, config._locale).match(formattingTokens) || []; + + for (i = 0; i < tokens.length; i++) { + token = tokens[i]; + parsedInput = (string.match(getParseRegexForToken(token, config)) || + [])[0]; + if (parsedInput) { + skipped = string.substr(0, string.indexOf(parsedInput)); + if (skipped.length > 0) { + getParsingFlags(config).unusedInput.push(skipped); + } + string = string.slice( + string.indexOf(parsedInput) + parsedInput.length + ); + totalParsedInputLength += parsedInput.length; + } + // don't parse if it's not a known token + if (formatTokenFunctions[token]) { + if (parsedInput) { + getParsingFlags(config).empty = false; + } else { + getParsingFlags(config).unusedTokens.push(token); + } + addTimeToArrayFromToken(token, parsedInput, config); + } else if (config._strict && !parsedInput) { + getParsingFlags(config).unusedTokens.push(token); + } + } + + // add remaining unparsed input length to the string + getParsingFlags(config).charsLeftOver = + stringLength - totalParsedInputLength; + if (string.length > 0) { + getParsingFlags(config).unusedInput.push(string); + } + + // clear _12h flag if hour is <= 12 + if ( + config._a[HOUR] <= 12 && + getParsingFlags(config).bigHour === true && + config._a[HOUR] > 0 + ) { + getParsingFlags(config).bigHour = undefined; + } + + getParsingFlags(config).parsedDateParts = config._a.slice(0); + getParsingFlags(config).meridiem = config._meridiem; + // handle meridiem + config._a[HOUR] = meridiemFixWrap( + config._locale, + config._a[HOUR], + config._meridiem + ); + + // handle era + era = getParsingFlags(config).era; + if (era !== null) { + config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]); + } + + configFromArray(config); + checkOverflow(config); + } + + function meridiemFixWrap(locale, hour, meridiem) { + var isPm; + + if (meridiem == null) { + // nothing to do + return hour; + } + if (locale.meridiemHour != null) { + return locale.meridiemHour(hour, meridiem); + } else if (locale.isPM != null) { + // Fallback + isPm = locale.isPM(meridiem); + if (isPm && hour < 12) { + hour += 12; + } + if (!isPm && hour === 12) { + hour = 0; + } + return hour; + } else { + // this is not supposed to happen + return hour; + } + } + + // date from string and array of format strings + function configFromStringAndArray(config) { + var tempConfig, + bestMoment, + scoreToBeat, + i, + currentScore, + validFormatFound, + bestFormatIsValid = false; + + if (config._f.length === 0) { + getParsingFlags(config).invalidFormat = true; + config._d = new Date(NaN); + return; + } + + for (i = 0; i < config._f.length; i++) { + currentScore = 0; + validFormatFound = false; + tempConfig = copyConfig({}, config); + if (config._useUTC != null) { + tempConfig._useUTC = config._useUTC; + } + tempConfig._f = config._f[i]; + configFromStringAndFormat(tempConfig); + + if (isValid(tempConfig)) { + validFormatFound = true; + } + + // if there is any input that was not parsed add a penalty for that format + currentScore += getParsingFlags(tempConfig).charsLeftOver; + + //or tokens + currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10; + + getParsingFlags(tempConfig).score = currentScore; + + if (!bestFormatIsValid) { + if ( + scoreToBeat == null || + currentScore < scoreToBeat || + validFormatFound + ) { + scoreToBeat = currentScore; + bestMoment = tempConfig; + if (validFormatFound) { + bestFormatIsValid = true; + } + } + } else { + if (currentScore < scoreToBeat) { + scoreToBeat = currentScore; + bestMoment = tempConfig; + } + } + } + + extend(config, bestMoment || tempConfig); + } + + function configFromObject(config) { + if (config._d) { + return; + } + + var i = normalizeObjectUnits(config._i), + dayOrDate = i.day === undefined ? i.date : i.day; + config._a = map( + [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond], + function (obj) { + return obj && parseInt(obj, 10); + } + ); + + configFromArray(config); + } + + function createFromConfig(config) { + var res = new Moment(checkOverflow(prepareConfig(config))); + if (res._nextDay) { + // Adding is smart enough around DST + res.add(1, 'd'); + res._nextDay = undefined; + } + + return res; + } + + function prepareConfig(config) { + var input = config._i, + format = config._f; + + config._locale = config._locale || getLocale(config._l); + + if (input === null || (format === undefined && input === '')) { + return createInvalid({ nullInput: true }); + } + + if (typeof input === 'string') { + config._i = input = config._locale.preparse(input); + } + + if (isMoment(input)) { + return new Moment(checkOverflow(input)); + } else if (isDate(input)) { + config._d = input; + } else if (isArray(format)) { + configFromStringAndArray(config); + } else if (format) { + configFromStringAndFormat(config); + } else { + configFromInput(config); + } + + if (!isValid(config)) { + config._d = null; + } + + return config; + } + + function configFromInput(config) { + var input = config._i; + if (isUndefined(input)) { + config._d = new Date(hooks.now()); + } else if (isDate(input)) { + config._d = new Date(input.valueOf()); + } else if (typeof input === 'string') { + configFromString(config); + } else if (isArray(input)) { + config._a = map(input.slice(0), function (obj) { + return parseInt(obj, 10); + }); + configFromArray(config); + } else if (isObject(input)) { + configFromObject(config); + } else if (isNumber(input)) { + // from milliseconds + config._d = new Date(input); + } else { + hooks.createFromInputFallback(config); + } + } + + function createLocalOrUTC(input, format, locale, strict, isUTC) { + var c = {}; + + if (format === true || format === false) { + strict = format; + format = undefined; + } + + if (locale === true || locale === false) { + strict = locale; + locale = undefined; + } + + if ( + (isObject(input) && isObjectEmpty(input)) || + (isArray(input) && input.length === 0) + ) { + input = undefined; + } + // object construction must be done this way. + // https://github.com/moment/moment/issues/1423 + c._isAMomentObject = true; + c._useUTC = c._isUTC = isUTC; + c._l = locale; + c._i = input; + c._f = format; + c._strict = strict; + + return createFromConfig(c); + } + + function createLocal(input, format, locale, strict) { + return createLocalOrUTC(input, format, locale, strict, false); + } + + var prototypeMin = deprecate( + 'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/', + function () { + var other = createLocal.apply(null, arguments); + if (this.isValid() && other.isValid()) { + return other < this ? this : other; + } else { + return createInvalid(); + } + } + ), + prototypeMax = deprecate( + 'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/', + function () { + var other = createLocal.apply(null, arguments); + if (this.isValid() && other.isValid()) { + return other > this ? this : other; + } else { + return createInvalid(); + } + } + ); + + // Pick a moment m from moments so that m[fn](other) is true for all + // other. This relies on the function fn to be transitive. + // + // moments should either be an array of moment objects or an array, whose + // first element is an array of moment objects. + function pickBy(fn, moments) { + var res, i; + if (moments.length === 1 && isArray(moments[0])) { + moments = moments[0]; + } + if (!moments.length) { + return createLocal(); + } + res = moments[0]; + for (i = 1; i < moments.length; ++i) { + if (!moments[i].isValid() || moments[i][fn](res)) { + res = moments[i]; + } + } + return res; + } + + // TODO: Use [].sort instead? + function min() { + var args = [].slice.call(arguments, 0); + + return pickBy('isBefore', args); + } + + function max() { + var args = [].slice.call(arguments, 0); + + return pickBy('isAfter', args); + } + + var now = function () { + return Date.now ? Date.now() : +new Date(); + }; + + var ordering = [ + 'year', + 'quarter', + 'month', + 'week', + 'day', + 'hour', + 'minute', + 'second', + 'millisecond', + ]; + + function isDurationValid(m) { + var key, + unitHasDecimal = false, + i; + for (key in m) { + if ( + hasOwnProp(m, key) && + !( + indexOf.call(ordering, key) !== -1 && + (m[key] == null || !isNaN(m[key])) + ) + ) { + return false; + } + } + + for (i = 0; i < ordering.length; ++i) { + if (m[ordering[i]]) { + if (unitHasDecimal) { + return false; // only allow non-integers for smallest unit + } + if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) { + unitHasDecimal = true; + } + } + } + + return true; + } + + function isValid$1() { + return this._isValid; + } + + function createInvalid$1() { + return createDuration(NaN); + } + + function Duration(duration) { + var normalizedInput = normalizeObjectUnits(duration), + years = normalizedInput.year || 0, + quarters = normalizedInput.quarter || 0, + months = normalizedInput.month || 0, + weeks = normalizedInput.week || normalizedInput.isoWeek || 0, + days = normalizedInput.day || 0, + hours = normalizedInput.hour || 0, + minutes = normalizedInput.minute || 0, + seconds = normalizedInput.second || 0, + milliseconds = normalizedInput.millisecond || 0; + + this._isValid = isDurationValid(normalizedInput); + + // representation for dateAddRemove + this._milliseconds = + +milliseconds + + seconds * 1e3 + // 1000 + minutes * 6e4 + // 1000 * 60 + hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978 + // Because of dateAddRemove treats 24 hours as different from a + // day when working around DST, we need to store them separately + this._days = +days + weeks * 7; + // It is impossible to translate months into days without knowing + // which months you are are talking about, so we have to store + // it separately. + this._months = +months + quarters * 3 + years * 12; + + this._data = {}; + + this._locale = getLocale(); + + this._bubble(); + } + + function isDuration(obj) { + return obj instanceof Duration; + } + + function absRound(number) { + if (number < 0) { + return Math.round(-1 * number) * -1; + } else { + return Math.round(number); + } + } + + // compare two arrays, return the number of differences + function compareArrays(array1, array2, dontConvert) { + var len = Math.min(array1.length, array2.length), + lengthDiff = Math.abs(array1.length - array2.length), + diffs = 0, + i; + for (i = 0; i < len; i++) { + if ( + (dontConvert && array1[i] !== array2[i]) || + (!dontConvert && toInt(array1[i]) !== toInt(array2[i])) + ) { + diffs++; + } + } + return diffs + lengthDiff; + } + + // FORMATTING + + function offset(token, separator) { + addFormatToken(token, 0, 0, function () { + var offset = this.utcOffset(), + sign = '+'; + if (offset < 0) { + offset = -offset; + sign = '-'; + } + return ( + sign + + zeroFill(~~(offset / 60), 2) + + separator + + zeroFill(~~offset % 60, 2) + ); + }); + } + + offset('Z', ':'); + offset('ZZ', ''); + + // PARSING + + addRegexToken('Z', matchShortOffset); + addRegexToken('ZZ', matchShortOffset); + addParseToken(['Z', 'ZZ'], function (input, array, config) { + config._useUTC = true; + config._tzm = offsetFromString(matchShortOffset, input); + }); + + // HELPERS + + // timezone chunker + // '+10:00' > ['10', '00'] + // '-1530' > ['-15', '30'] + var chunkOffset = /([\+\-]|\d\d)/gi; + + function offsetFromString(matcher, string) { + var matches = (string || '').match(matcher), + chunk, + parts, + minutes; + + if (matches === null) { + return null; + } + + chunk = matches[matches.length - 1] || []; + parts = (chunk + '').match(chunkOffset) || ['-', 0, 0]; + minutes = +(parts[1] * 60) + toInt(parts[2]); + + return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes; + } + + // Return a moment from input, that is local/utc/zone equivalent to model. + function cloneWithOffset(input, model) { + var res, diff; + if (model._isUTC) { + res = model.clone(); + diff = + (isMoment(input) || isDate(input) + ? input.valueOf() + : createLocal(input).valueOf()) - res.valueOf(); + // Use low-level api, because this fn is low-level api. + res._d.setTime(res._d.valueOf() + diff); + hooks.updateOffset(res, false); + return res; + } else { + return createLocal(input).local(); + } + } + + function getDateOffset(m) { + // On Firefox.24 Date#getTimezoneOffset returns a floating point. + // https://github.com/moment/moment/pull/1871 + return -Math.round(m._d.getTimezoneOffset()); + } + + // HOOKS + + // This function will be called whenever a moment is mutated. + // It is intended to keep the offset in sync with the timezone. + hooks.updateOffset = function () {}; + + // MOMENTS + + // keepLocalTime = true means only change the timezone, without + // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]--> + // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset + // +0200, so we adjust the time as needed, to be valid. + // + // Keeping the time actually adds/subtracts (one hour) + // from the actual represented time. That is why we call updateOffset + // a second time. In case it wants us to change the offset again + // _changeInProgress == true case, then we have to adjust, because + // there is no such time in the given timezone. + function getSetOffset(input, keepLocalTime, keepMinutes) { + var offset = this._offset || 0, + localAdjust; + if (!this.isValid()) { + return input != null ? this : NaN; + } + if (input != null) { + if (typeof input === 'string') { + input = offsetFromString(matchShortOffset, input); + if (input === null) { + return this; + } + } else if (Math.abs(input) < 16 && !keepMinutes) { + input = input * 60; + } + if (!this._isUTC && keepLocalTime) { + localAdjust = getDateOffset(this); + } + this._offset = input; + this._isUTC = true; + if (localAdjust != null) { + this.add(localAdjust, 'm'); + } + if (offset !== input) { + if (!keepLocalTime || this._changeInProgress) { + addSubtract( + this, + createDuration(input - offset, 'm'), + 1, + false + ); + } else if (!this._changeInProgress) { + this._changeInProgress = true; + hooks.updateOffset(this, true); + this._changeInProgress = null; + } + } + return this; + } else { + return this._isUTC ? offset : getDateOffset(this); + } + } + + function getSetZone(input, keepLocalTime) { + if (input != null) { + if (typeof input !== 'string') { + input = -input; + } + + this.utcOffset(input, keepLocalTime); + + return this; + } else { + return -this.utcOffset(); + } + } + + function setOffsetToUTC(keepLocalTime) { + return this.utcOffset(0, keepLocalTime); + } + + function setOffsetToLocal(keepLocalTime) { + if (this._isUTC) { + this.utcOffset(0, keepLocalTime); + this._isUTC = false; + + if (keepLocalTime) { + this.subtract(getDateOffset(this), 'm'); + } + } + return this; + } + + function setOffsetToParsedOffset() { + if (this._tzm != null) { + this.utcOffset(this._tzm, false, true); + } else if (typeof this._i === 'string') { + var tZone = offsetFromString(matchOffset, this._i); + if (tZone != null) { + this.utcOffset(tZone); + } else { + this.utcOffset(0, true); + } + } + return this; + } + + function hasAlignedHourOffset(input) { + if (!this.isValid()) { + return false; + } + input = input ? createLocal(input).utcOffset() : 0; + + return (this.utcOffset() - input) % 60 === 0; + } + + function isDaylightSavingTime() { + return ( + this.utcOffset() > this.clone().month(0).utcOffset() || + this.utcOffset() > this.clone().month(5).utcOffset() + ); + } + + function isDaylightSavingTimeShifted() { + if (!isUndefined(this._isDSTShifted)) { + return this._isDSTShifted; + } + + var c = {}, + other; + + copyConfig(c, this); + c = prepareConfig(c); + + if (c._a) { + other = c._isUTC ? createUTC(c._a) : createLocal(c._a); + this._isDSTShifted = + this.isValid() && compareArrays(c._a, other.toArray()) > 0; + } else { + this._isDSTShifted = false; + } + + return this._isDSTShifted; + } + + function isLocal() { + return this.isValid() ? !this._isUTC : false; + } + + function isUtcOffset() { + return this.isValid() ? this._isUTC : false; + } + + function isUtc() { + return this.isValid() ? this._isUTC && this._offset === 0 : false; + } + + // ASP.NET json date format regex + var aspNetRegex = /^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/, + // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html + // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere + // and further modified to allow for strings containing both week and day + isoRegex = /^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/; + + function createDuration(input, key) { + var duration = input, + // matching against regexp is expensive, do it on demand + match = null, + sign, + ret, + diffRes; + + if (isDuration(input)) { + duration = { + ms: input._milliseconds, + d: input._days, + M: input._months, + }; + } else if (isNumber(input) || !isNaN(+input)) { + duration = {}; + if (key) { + duration[key] = +input; + } else { + duration.milliseconds = +input; + } + } else if ((match = aspNetRegex.exec(input))) { + sign = match[1] === '-' ? -1 : 1; + duration = { + y: 0, + d: toInt(match[DATE]) * sign, + h: toInt(match[HOUR]) * sign, + m: toInt(match[MINUTE]) * sign, + s: toInt(match[SECOND]) * sign, + ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign, // the millisecond decimal point is included in the match + }; + } else if ((match = isoRegex.exec(input))) { + sign = match[1] === '-' ? -1 : 1; + duration = { + y: parseIso(match[2], sign), + M: parseIso(match[3], sign), + w: parseIso(match[4], sign), + d: parseIso(match[5], sign), + h: parseIso(match[6], sign), + m: parseIso(match[7], sign), + s: parseIso(match[8], sign), + }; + } else if (duration == null) { + // checks for null or undefined + duration = {}; + } else if ( + typeof duration === 'object' && + ('from' in duration || 'to' in duration) + ) { + diffRes = momentsDifference( + createLocal(duration.from), + createLocal(duration.to) + ); + + duration = {}; + duration.ms = diffRes.milliseconds; + duration.M = diffRes.months; + } + + ret = new Duration(duration); + + if (isDuration(input) && hasOwnProp(input, '_locale')) { + ret._locale = input._locale; + } + + if (isDuration(input) && hasOwnProp(input, '_isValid')) { + ret._isValid = input._isValid; + } + + return ret; + } + + createDuration.fn = Duration.prototype; + createDuration.invalid = createInvalid$1; + + function parseIso(inp, sign) { + // We'd normally use ~~inp for this, but unfortunately it also + // converts floats to ints. + // inp may be undefined, so careful calling replace on it. + var res = inp && parseFloat(inp.replace(',', '.')); + // apply sign while we're at it + return (isNaN(res) ? 0 : res) * sign; + } + + function positiveMomentsDifference(base, other) { + var res = {}; + + res.months = + other.month() - base.month() + (other.year() - base.year()) * 12; + if (base.clone().add(res.months, 'M').isAfter(other)) { + --res.months; + } + + res.milliseconds = +other - +base.clone().add(res.months, 'M'); + + return res; + } + + function momentsDifference(base, other) { + var res; + if (!(base.isValid() && other.isValid())) { + return { milliseconds: 0, months: 0 }; + } + + other = cloneWithOffset(other, base); + if (base.isBefore(other)) { + res = positiveMomentsDifference(base, other); + } else { + res = positiveMomentsDifference(other, base); + res.milliseconds = -res.milliseconds; + res.months = -res.months; + } + + return res; + } + + // TODO: remove 'name' arg after deprecation is removed + function createAdder(direction, name) { + return function (val, period) { + var dur, tmp; + //invert the arguments, but complain about it + if (period !== null && !isNaN(+period)) { + deprecateSimple( + name, + 'moment().' + + name + + '(period, number) is deprecated. Please use moment().' + + name + + '(number, period). ' + + 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.' + ); + tmp = val; + val = period; + period = tmp; + } + + dur = createDuration(val, period); + addSubtract(this, dur, direction); + return this; + }; + } + + function addSubtract(mom, duration, isAdding, updateOffset) { + var milliseconds = duration._milliseconds, + days = absRound(duration._days), + months = absRound(duration._months); + + if (!mom.isValid()) { + // No op + return; + } + + updateOffset = updateOffset == null ? true : updateOffset; + + if (months) { + setMonth(mom, get(mom, 'Month') + months * isAdding); + } + if (days) { + set$1(mom, 'Date', get(mom, 'Date') + days * isAdding); + } + if (milliseconds) { + mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding); + } + if (updateOffset) { + hooks.updateOffset(mom, days || months); + } + } + + var add = createAdder(1, 'add'), + subtract = createAdder(-1, 'subtract'); + + function isString(input) { + return typeof input === 'string' || input instanceof String; + } + + // type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined + function isMomentInput(input) { + return ( + isMoment(input) || + isDate(input) || + isString(input) || + isNumber(input) || + isNumberOrStringArray(input) || + isMomentInputObject(input) || + input === null || + input === undefined + ); + } + + function isMomentInputObject(input) { + var objectTest = isObject(input) && !isObjectEmpty(input), + propertyTest = false, + properties = [ + 'years', + 'year', + 'y', + 'months', + 'month', + 'M', + 'days', + 'day', + 'd', + 'dates', + 'date', + 'D', + 'hours', + 'hour', + 'h', + 'minutes', + 'minute', + 'm', + 'seconds', + 'second', + 's', + 'milliseconds', + 'millisecond', + 'ms', + ], + i, + property; + + for (i = 0; i < properties.length; i += 1) { + property = properties[i]; + propertyTest = propertyTest || hasOwnProp(input, property); + } + + return objectTest && propertyTest; + } + + function isNumberOrStringArray(input) { + var arrayTest = isArray(input), + dataTypeTest = false; + if (arrayTest) { + dataTypeTest = + input.filter(function (item) { + return !isNumber(item) && isString(input); + }).length === 0; + } + return arrayTest && dataTypeTest; + } + + function isCalendarSpec(input) { + var objectTest = isObject(input) && !isObjectEmpty(input), + propertyTest = false, + properties = [ + 'sameDay', + 'nextDay', + 'lastDay', + 'nextWeek', + 'lastWeek', + 'sameElse', + ], + i, + property; + + for (i = 0; i < properties.length; i += 1) { + property = properties[i]; + propertyTest = propertyTest || hasOwnProp(input, property); + } + + return objectTest && propertyTest; + } + + function getCalendarFormat(myMoment, now) { + var diff = myMoment.diff(now, 'days', true); + return diff < -6 + ? 'sameElse' + : diff < -1 + ? 'lastWeek' + : diff < 0 + ? 'lastDay' + : diff < 1 + ? 'sameDay' + : diff < 2 + ? 'nextDay' + : diff < 7 + ? 'nextWeek' + : 'sameElse'; + } + + function calendar$1(time, formats) { + // Support for single parameter, formats only overload to the calendar function + if (arguments.length === 1) { + if (isMomentInput(arguments[0])) { + time = arguments[0]; + formats = undefined; + } else if (isCalendarSpec(arguments[0])) { + formats = arguments[0]; + time = undefined; + } + } + // We want to compare the start of today, vs this. + // Getting start-of-today depends on whether we're local/utc/offset or not. + var now = time || createLocal(), + sod = cloneWithOffset(now, this).startOf('day'), + format = hooks.calendarFormat(this, sod) || 'sameElse', + output = + formats && + (isFunction(formats[format]) + ? formats[format].call(this, now) + : formats[format]); + + return this.format( + output || this.localeData().calendar(format, this, createLocal(now)) + ); + } + + function clone() { + return new Moment(this); + } + + function isAfter(input, units) { + var localInput = isMoment(input) ? input : createLocal(input); + if (!(this.isValid() && localInput.isValid())) { + return false; + } + units = normalizeUnits(units) || 'millisecond'; + if (units === 'millisecond') { + return this.valueOf() > localInput.valueOf(); + } else { + return localInput.valueOf() < this.clone().startOf(units).valueOf(); + } + } + + function isBefore(input, units) { + var localInput = isMoment(input) ? input : createLocal(input); + if (!(this.isValid() && localInput.isValid())) { + return false; + } + units = normalizeUnits(units) || 'millisecond'; + if (units === 'millisecond') { + return this.valueOf() < localInput.valueOf(); + } else { + return this.clone().endOf(units).valueOf() < localInput.valueOf(); + } + } + + function isBetween(from, to, units, inclusivity) { + var localFrom = isMoment(from) ? from : createLocal(from), + localTo = isMoment(to) ? to : createLocal(to); + if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) { + return false; + } + inclusivity = inclusivity || '()'; + return ( + (inclusivity[0] === '(' + ? this.isAfter(localFrom, units) + : !this.isBefore(localFrom, units)) && + (inclusivity[1] === ')' + ? this.isBefore(localTo, units) + : !this.isAfter(localTo, units)) + ); + } + + function isSame(input, units) { + var localInput = isMoment(input) ? input : createLocal(input), + inputMs; + if (!(this.isValid() && localInput.isValid())) { + return false; + } + units = normalizeUnits(units) || 'millisecond'; + if (units === 'millisecond') { + return this.valueOf() === localInput.valueOf(); + } else { + inputMs = localInput.valueOf(); + return ( + this.clone().startOf(units).valueOf() <= inputMs && + inputMs <= this.clone().endOf(units).valueOf() + ); + } + } + + function isSameOrAfter(input, units) { + return this.isSame(input, units) || this.isAfter(input, units); + } + + function isSameOrBefore(input, units) { + return this.isSame(input, units) || this.isBefore(input, units); + } + + function diff(input, units, asFloat) { + var that, zoneDelta, output; + + if (!this.isValid()) { + return NaN; + } + + that = cloneWithOffset(input, this); + + if (!that.isValid()) { + return NaN; + } + + zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4; + + units = normalizeUnits(units); + + switch (units) { + case 'year': + output = monthDiff(this, that) / 12; + break; + case 'month': + output = monthDiff(this, that); + break; + case 'quarter': + output = monthDiff(this, that) / 3; + break; + case 'second': + output = (this - that) / 1e3; + break; // 1000 + case 'minute': + output = (this - that) / 6e4; + break; // 1000 * 60 + case 'hour': + output = (this - that) / 36e5; + break; // 1000 * 60 * 60 + case 'day': + output = (this - that - zoneDelta) / 864e5; + break; // 1000 * 60 * 60 * 24, negate dst + case 'week': + output = (this - that - zoneDelta) / 6048e5; + break; // 1000 * 60 * 60 * 24 * 7, negate dst + default: + output = this - that; + } + + return asFloat ? output : absFloor(output); + } + + function monthDiff(a, b) { + if (a.date() < b.date()) { + // end-of-month calculations work correct when the start month has more + // days than the end month. + return -monthDiff(b, a); + } + // difference in months + var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()), + // b is in (anchor - 1 month, anchor + 1 month) + anchor = a.clone().add(wholeMonthDiff, 'months'), + anchor2, + adjust; + + if (b - anchor < 0) { + anchor2 = a.clone().add(wholeMonthDiff - 1, 'months'); + // linear across the month + adjust = (b - anchor) / (anchor - anchor2); + } else { + anchor2 = a.clone().add(wholeMonthDiff + 1, 'months'); + // linear across the month + adjust = (b - anchor) / (anchor2 - anchor); + } + + //check for negative zero, return zero if negative zero + return -(wholeMonthDiff + adjust) || 0; + } + + hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ'; + hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]'; + + function toString() { + return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ'); + } + + function toISOString(keepOffset) { + if (!this.isValid()) { + return null; + } + var utc = keepOffset !== true, + m = utc ? this.clone().utc() : this; + if (m.year() < 0 || m.year() > 9999) { + return formatMoment( + m, + utc + ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]' + : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ' + ); + } + if (isFunction(Date.prototype.toISOString)) { + // native implementation is ~50x faster, use it when we can + if (utc) { + return this.toDate().toISOString(); + } else { + return new Date(this.valueOf() + this.utcOffset() * 60 * 1000) + .toISOString() + .replace('Z', formatMoment(m, 'Z')); + } + } + return formatMoment( + m, + utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ' + ); + } + + /** + * Return a human readable representation of a moment that can + * also be evaluated to get a new moment which is the same + * + * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects + */ + function inspect() { + if (!this.isValid()) { + return 'moment.invalid(/* ' + this._i + ' */)'; + } + var func = 'moment', + zone = '', + prefix, + year, + datetime, + suffix; + if (!this.isLocal()) { + func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone'; + zone = 'Z'; + } + prefix = '[' + func + '("]'; + year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY'; + datetime = '-MM-DD[T]HH:mm:ss.SSS'; + suffix = zone + '[")]'; + + return this.format(prefix + year + datetime + suffix); + } + + function format(inputString) { + if (!inputString) { + inputString = this.isUtc() + ? hooks.defaultFormatUtc + : hooks.defaultFormat; + } + var output = formatMoment(this, inputString); + return this.localeData().postformat(output); + } + + function from(time, withoutSuffix) { + if ( + this.isValid() && + ((isMoment(time) && time.isValid()) || createLocal(time).isValid()) + ) { + return createDuration({ to: this, from: time }) + .locale(this.locale()) + .humanize(!withoutSuffix); + } else { + return this.localeData().invalidDate(); + } + } + + function fromNow(withoutSuffix) { + return this.from(createLocal(), withoutSuffix); + } + + function to(time, withoutSuffix) { + if ( + this.isValid() && + ((isMoment(time) && time.isValid()) || createLocal(time).isValid()) + ) { + return createDuration({ from: this, to: time }) + .locale(this.locale()) + .humanize(!withoutSuffix); + } else { + return this.localeData().invalidDate(); + } + } + + function toNow(withoutSuffix) { + return this.to(createLocal(), withoutSuffix); + } + + // If passed a locale key, it will set the locale for this + // instance. Otherwise, it will return the locale configuration + // variables for this instance. + function locale(key) { + var newLocaleData; + + if (key === undefined) { + return this._locale._abbr; + } else { + newLocaleData = getLocale(key); + if (newLocaleData != null) { + this._locale = newLocaleData; + } + return this; + } + } + + var lang = deprecate( + 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.', + function (key) { + if (key === undefined) { + return this.localeData(); + } else { + return this.locale(key); + } + } + ); + + function localeData() { + return this._locale; + } + + var MS_PER_SECOND = 1000, + MS_PER_MINUTE = 60 * MS_PER_SECOND, + MS_PER_HOUR = 60 * MS_PER_MINUTE, + MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR; + + // actual modulo - handles negative numbers (for dates before 1970): + function mod$1(dividend, divisor) { + return ((dividend % divisor) + divisor) % divisor; + } + + function localStartOfDate(y, m, d) { + // the date constructor remaps years 0-99 to 1900-1999 + if (y < 100 && y >= 0) { + // preserve leap years using a full 400 year cycle, then reset + return new Date(y + 400, m, d) - MS_PER_400_YEARS; + } else { + return new Date(y, m, d).valueOf(); + } + } + + function utcStartOfDate(y, m, d) { + // Date.UTC remaps years 0-99 to 1900-1999 + if (y < 100 && y >= 0) { + // preserve leap years using a full 400 year cycle, then reset + return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS; + } else { + return Date.UTC(y, m, d); + } + } + + function startOf(units) { + var time, startOfDate; + units = normalizeUnits(units); + if (units === undefined || units === 'millisecond' || !this.isValid()) { + return this; + } + + startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate; + + switch (units) { + case 'year': + time = startOfDate(this.year(), 0, 1); + break; + case 'quarter': + time = startOfDate( + this.year(), + this.month() - (this.month() % 3), + 1 + ); + break; + case 'month': + time = startOfDate(this.year(), this.month(), 1); + break; + case 'week': + time = startOfDate( + this.year(), + this.month(), + this.date() - this.weekday() + ); + break; + case 'isoWeek': + time = startOfDate( + this.year(), + this.month(), + this.date() - (this.isoWeekday() - 1) + ); + break; + case 'day': + case 'date': + time = startOfDate(this.year(), this.month(), this.date()); + break; + case 'hour': + time = this._d.valueOf(); + time -= mod$1( + time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE), + MS_PER_HOUR + ); + break; + case 'minute': + time = this._d.valueOf(); + time -= mod$1(time, MS_PER_MINUTE); + break; + case 'second': + time = this._d.valueOf(); + time -= mod$1(time, MS_PER_SECOND); + break; + } + + this._d.setTime(time); + hooks.updateOffset(this, true); + return this; + } + + function endOf(units) { + var time, startOfDate; + units = normalizeUnits(units); + if (units === undefined || units === 'millisecond' || !this.isValid()) { + return this; + } + + startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate; + + switch (units) { + case 'year': + time = startOfDate(this.year() + 1, 0, 1) - 1; + break; + case 'quarter': + time = + startOfDate( + this.year(), + this.month() - (this.month() % 3) + 3, + 1 + ) - 1; + break; + case 'month': + time = startOfDate(this.year(), this.month() + 1, 1) - 1; + break; + case 'week': + time = + startOfDate( + this.year(), + this.month(), + this.date() - this.weekday() + 7 + ) - 1; + break; + case 'isoWeek': + time = + startOfDate( + this.year(), + this.month(), + this.date() - (this.isoWeekday() - 1) + 7 + ) - 1; + break; + case 'day': + case 'date': + time = startOfDate(this.year(), this.month(), this.date() + 1) - 1; + break; + case 'hour': + time = this._d.valueOf(); + time += + MS_PER_HOUR - + mod$1( + time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE), + MS_PER_HOUR + ) - + 1; + break; + case 'minute': + time = this._d.valueOf(); + time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1; + break; + case 'second': + time = this._d.valueOf(); + time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1; + break; + } + + this._d.setTime(time); + hooks.updateOffset(this, true); + return this; + } + + function valueOf() { + return this._d.valueOf() - (this._offset || 0) * 60000; + } + + function unix() { + return Math.floor(this.valueOf() / 1000); + } + + function toDate() { + return new Date(this.valueOf()); + } + + function toArray() { + var m = this; + return [ + m.year(), + m.month(), + m.date(), + m.hour(), + m.minute(), + m.second(), + m.millisecond(), + ]; + } + + function toObject() { + var m = this; + return { + years: m.year(), + months: m.month(), + date: m.date(), + hours: m.hours(), + minutes: m.minutes(), + seconds: m.seconds(), + milliseconds: m.milliseconds(), + }; + } + + function toJSON() { + // new Date(NaN).toJSON() === null + return this.isValid() ? this.toISOString() : null; + } + + function isValid$2() { + return isValid(this); + } + + function parsingFlags() { + return extend({}, getParsingFlags(this)); + } + + function invalidAt() { + return getParsingFlags(this).overflow; + } + + function creationData() { + return { + input: this._i, + format: this._f, + locale: this._locale, + isUTC: this._isUTC, + strict: this._strict, + }; + } + + addFormatToken('N', 0, 0, 'eraAbbr'); + addFormatToken('NN', 0, 0, 'eraAbbr'); + addFormatToken('NNN', 0, 0, 'eraAbbr'); + addFormatToken('NNNN', 0, 0, 'eraName'); + addFormatToken('NNNNN', 0, 0, 'eraNarrow'); + + addFormatToken('y', ['y', 1], 'yo', 'eraYear'); + addFormatToken('y', ['yy', 2], 0, 'eraYear'); + addFormatToken('y', ['yyy', 3], 0, 'eraYear'); + addFormatToken('y', ['yyyy', 4], 0, 'eraYear'); + + addRegexToken('N', matchEraAbbr); + addRegexToken('NN', matchEraAbbr); + addRegexToken('NNN', matchEraAbbr); + addRegexToken('NNNN', matchEraName); + addRegexToken('NNNNN', matchEraNarrow); + + addParseToken(['N', 'NN', 'NNN', 'NNNN', 'NNNNN'], function ( + input, + array, + config, + token + ) { + var era = config._locale.erasParse(input, token, config._strict); + if (era) { + getParsingFlags(config).era = era; + } else { + getParsingFlags(config).invalidEra = input; + } + }); + + addRegexToken('y', matchUnsigned); + addRegexToken('yy', matchUnsigned); + addRegexToken('yyy', matchUnsigned); + addRegexToken('yyyy', matchUnsigned); + addRegexToken('yo', matchEraYearOrdinal); + + addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR); + addParseToken(['yo'], function (input, array, config, token) { + var match; + if (config._locale._eraYearOrdinalRegex) { + match = input.match(config._locale._eraYearOrdinalRegex); + } + + if (config._locale.eraYearOrdinalParse) { + array[YEAR] = config._locale.eraYearOrdinalParse(input, match); + } else { + array[YEAR] = parseInt(input, 10); + } + }); + + function localeEras(m, format) { + var i, + l, + date, + eras = this._eras || getLocale('en')._eras; + for (i = 0, l = eras.length; i < l; ++i) { + switch (typeof eras[i].since) { + case 'string': + // truncate time + date = hooks(eras[i].since).startOf('day'); + eras[i].since = date.valueOf(); + break; + } + + switch (typeof eras[i].until) { + case 'undefined': + eras[i].until = +Infinity; + break; + case 'string': + // truncate time + date = hooks(eras[i].until).startOf('day').valueOf(); + eras[i].until = date.valueOf(); + break; + } + } + return eras; + } + + function localeErasParse(eraName, format, strict) { + var i, + l, + eras = this.eras(), + name, + abbr, + narrow; + eraName = eraName.toUpperCase(); + + for (i = 0, l = eras.length; i < l; ++i) { + name = eras[i].name.toUpperCase(); + abbr = eras[i].abbr.toUpperCase(); + narrow = eras[i].narrow.toUpperCase(); + + if (strict) { + switch (format) { + case 'N': + case 'NN': + case 'NNN': + if (abbr === eraName) { + return eras[i]; + } + break; + + case 'NNNN': + if (name === eraName) { + return eras[i]; + } + break; + + case 'NNNNN': + if (narrow === eraName) { + return eras[i]; + } + break; + } + } else if ([name, abbr, narrow].indexOf(eraName) >= 0) { + return eras[i]; + } + } + } + + function localeErasConvertYear(era, year) { + var dir = era.since <= era.until ? +1 : -1; + if (year === undefined) { + return hooks(era.since).year(); + } else { + return hooks(era.since).year() + (year - era.offset) * dir; + } + } + + function getEraName() { + var i, + l, + val, + eras = this.localeData().eras(); + for (i = 0, l = eras.length; i < l; ++i) { + // truncate time + val = this.startOf('day').valueOf(); + + if (eras[i].since <= val && val <= eras[i].until) { + return eras[i].name; + } + if (eras[i].until <= val && val <= eras[i].since) { + return eras[i].name; + } + } + + return ''; + } + + function getEraNarrow() { + var i, + l, + val, + eras = this.localeData().eras(); + for (i = 0, l = eras.length; i < l; ++i) { + // truncate time + val = this.startOf('day').valueOf(); + + if (eras[i].since <= val && val <= eras[i].until) { + return eras[i].narrow; + } + if (eras[i].until <= val && val <= eras[i].since) { + return eras[i].narrow; + } + } + + return ''; + } + + function getEraAbbr() { + var i, + l, + val, + eras = this.localeData().eras(); + for (i = 0, l = eras.length; i < l; ++i) { + // truncate time + val = this.startOf('day').valueOf(); + + if (eras[i].since <= val && val <= eras[i].until) { + return eras[i].abbr; + } + if (eras[i].until <= val && val <= eras[i].since) { + return eras[i].abbr; + } + } + + return ''; + } + + function getEraYear() { + var i, + l, + dir, + val, + eras = this.localeData().eras(); + for (i = 0, l = eras.length; i < l; ++i) { + dir = eras[i].since <= eras[i].until ? +1 : -1; + + // truncate time + val = this.startOf('day').valueOf(); + + if ( + (eras[i].since <= val && val <= eras[i].until) || + (eras[i].until <= val && val <= eras[i].since) + ) { + return ( + (this.year() - hooks(eras[i].since).year()) * dir + + eras[i].offset + ); + } + } + + return this.year(); + } + + function erasNameRegex(isStrict) { + if (!hasOwnProp(this, '_erasNameRegex')) { + computeErasParse.call(this); + } + return isStrict ? this._erasNameRegex : this._erasRegex; + } + + function erasAbbrRegex(isStrict) { + if (!hasOwnProp(this, '_erasAbbrRegex')) { + computeErasParse.call(this); + } + return isStrict ? this._erasAbbrRegex : this._erasRegex; + } + + function erasNarrowRegex(isStrict) { + if (!hasOwnProp(this, '_erasNarrowRegex')) { + computeErasParse.call(this); + } + return isStrict ? this._erasNarrowRegex : this._erasRegex; + } + + function matchEraAbbr(isStrict, locale) { + return locale.erasAbbrRegex(isStrict); + } + + function matchEraName(isStrict, locale) { + return locale.erasNameRegex(isStrict); + } + + function matchEraNarrow(isStrict, locale) { + return locale.erasNarrowRegex(isStrict); + } + + function matchEraYearOrdinal(isStrict, locale) { + return locale._eraYearOrdinalRegex || matchUnsigned; + } + + function computeErasParse() { + var abbrPieces = [], + namePieces = [], + narrowPieces = [], + mixedPieces = [], + i, + l, + eras = this.eras(); + + for (i = 0, l = eras.length; i < l; ++i) { + namePieces.push(regexEscape(eras[i].name)); + abbrPieces.push(regexEscape(eras[i].abbr)); + narrowPieces.push(regexEscape(eras[i].narrow)); + + mixedPieces.push(regexEscape(eras[i].name)); + mixedPieces.push(regexEscape(eras[i].abbr)); + mixedPieces.push(regexEscape(eras[i].narrow)); + } + + this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i'); + this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i'); + this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i'); + this._erasNarrowRegex = new RegExp( + '^(' + narrowPieces.join('|') + ')', + 'i' + ); + } + + // FORMATTING + + addFormatToken(0, ['gg', 2], 0, function () { + return this.weekYear() % 100; + }); + + addFormatToken(0, ['GG', 2], 0, function () { + return this.isoWeekYear() % 100; + }); + + function addWeekYearFormatToken(token, getter) { + addFormatToken(0, [token, token.length], 0, getter); + } + + addWeekYearFormatToken('gggg', 'weekYear'); + addWeekYearFormatToken('ggggg', 'weekYear'); + addWeekYearFormatToken('GGGG', 'isoWeekYear'); + addWeekYearFormatToken('GGGGG', 'isoWeekYear'); + + // ALIASES + + addUnitAlias('weekYear', 'gg'); + addUnitAlias('isoWeekYear', 'GG'); + + // PRIORITY + + addUnitPriority('weekYear', 1); + addUnitPriority('isoWeekYear', 1); + + // PARSING + + addRegexToken('G', matchSigned); + addRegexToken('g', matchSigned); + addRegexToken('GG', match1to2, match2); + addRegexToken('gg', match1to2, match2); + addRegexToken('GGGG', match1to4, match4); + addRegexToken('gggg', match1to4, match4); + addRegexToken('GGGGG', match1to6, match6); + addRegexToken('ggggg', match1to6, match6); + + addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function ( + input, + week, + config, + token + ) { + week[token.substr(0, 2)] = toInt(input); + }); + + addWeekParseToken(['gg', 'GG'], function (input, week, config, token) { + week[token] = hooks.parseTwoDigitYear(input); + }); + + // MOMENTS + + function getSetWeekYear(input) { + return getSetWeekYearHelper.call( + this, + input, + this.week(), + this.weekday(), + this.localeData()._week.dow, + this.localeData()._week.doy + ); + } + + function getSetISOWeekYear(input) { + return getSetWeekYearHelper.call( + this, + input, + this.isoWeek(), + this.isoWeekday(), + 1, + 4 + ); + } + + function getISOWeeksInYear() { + return weeksInYear(this.year(), 1, 4); + } + + function getISOWeeksInISOWeekYear() { + return weeksInYear(this.isoWeekYear(), 1, 4); + } + + function getWeeksInYear() { + var weekInfo = this.localeData()._week; + return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy); + } + + function getWeeksInWeekYear() { + var weekInfo = this.localeData()._week; + return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy); + } + + function getSetWeekYearHelper(input, week, weekday, dow, doy) { + var weeksTarget; + if (input == null) { + return weekOfYear(this, dow, doy).year; + } else { + weeksTarget = weeksInYear(input, dow, doy); + if (week > weeksTarget) { + week = weeksTarget; + } + return setWeekAll.call(this, input, week, weekday, dow, doy); + } + } + + function setWeekAll(weekYear, week, weekday, dow, doy) { + var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy), + date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear); + + this.year(date.getUTCFullYear()); + this.month(date.getUTCMonth()); + this.date(date.getUTCDate()); + return this; + } + + // FORMATTING + + addFormatToken('Q', 0, 'Qo', 'quarter'); + + // ALIASES + + addUnitAlias('quarter', 'Q'); + + // PRIORITY + + addUnitPriority('quarter', 7); + + // PARSING + + addRegexToken('Q', match1); + addParseToken('Q', function (input, array) { + array[MONTH] = (toInt(input) - 1) * 3; + }); + + // MOMENTS + + function getSetQuarter(input) { + return input == null + ? Math.ceil((this.month() + 1) / 3) + : this.month((input - 1) * 3 + (this.month() % 3)); + } + + // FORMATTING + + addFormatToken('D', ['DD', 2], 'Do', 'date'); + + // ALIASES + + addUnitAlias('date', 'D'); + + // PRIORITY + addUnitPriority('date', 9); + + // PARSING + + addRegexToken('D', match1to2); + addRegexToken('DD', match1to2, match2); + addRegexToken('Do', function (isStrict, locale) { + // TODO: Remove "ordinalParse" fallback in next major release. + return isStrict + ? locale._dayOfMonthOrdinalParse || locale._ordinalParse + : locale._dayOfMonthOrdinalParseLenient; + }); + + addParseToken(['D', 'DD'], DATE); + addParseToken('Do', function (input, array) { + array[DATE] = toInt(input.match(match1to2)[0]); + }); + + // MOMENTS + + var getSetDayOfMonth = makeGetSet('Date', true); + + // FORMATTING + + addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear'); + + // ALIASES + + addUnitAlias('dayOfYear', 'DDD'); + + // PRIORITY + addUnitPriority('dayOfYear', 4); + + // PARSING + + addRegexToken('DDD', match1to3); + addRegexToken('DDDD', match3); + addParseToken(['DDD', 'DDDD'], function (input, array, config) { + config._dayOfYear = toInt(input); + }); + + // HELPERS + + // MOMENTS + + function getSetDayOfYear(input) { + var dayOfYear = + Math.round( + (this.clone().startOf('day') - this.clone().startOf('year')) / 864e5 + ) + 1; + return input == null ? dayOfYear : this.add(input - dayOfYear, 'd'); + } + + // FORMATTING + + addFormatToken('m', ['mm', 2], 0, 'minute'); + + // ALIASES + + addUnitAlias('minute', 'm'); + + // PRIORITY + + addUnitPriority('minute', 14); + + // PARSING + + addRegexToken('m', match1to2); + addRegexToken('mm', match1to2, match2); + addParseToken(['m', 'mm'], MINUTE); + + // MOMENTS + + var getSetMinute = makeGetSet('Minutes', false); + + // FORMATTING + + addFormatToken('s', ['ss', 2], 0, 'second'); + + // ALIASES + + addUnitAlias('second', 's'); + + // PRIORITY + + addUnitPriority('second', 15); + + // PARSING + + addRegexToken('s', match1to2); + addRegexToken('ss', match1to2, match2); + addParseToken(['s', 'ss'], SECOND); + + // MOMENTS + + var getSetSecond = makeGetSet('Seconds', false); + + // FORMATTING + + addFormatToken('S', 0, 0, function () { + return ~~(this.millisecond() / 100); + }); + + addFormatToken(0, ['SS', 2], 0, function () { + return ~~(this.millisecond() / 10); + }); + + addFormatToken(0, ['SSS', 3], 0, 'millisecond'); + addFormatToken(0, ['SSSS', 4], 0, function () { + return this.millisecond() * 10; + }); + addFormatToken(0, ['SSSSS', 5], 0, function () { + return this.millisecond() * 100; + }); + addFormatToken(0, ['SSSSSS', 6], 0, function () { + return this.millisecond() * 1000; + }); + addFormatToken(0, ['SSSSSSS', 7], 0, function () { + return this.millisecond() * 10000; + }); + addFormatToken(0, ['SSSSSSSS', 8], 0, function () { + return this.millisecond() * 100000; + }); + addFormatToken(0, ['SSSSSSSSS', 9], 0, function () { + return this.millisecond() * 1000000; + }); + + // ALIASES + + addUnitAlias('millisecond', 'ms'); + + // PRIORITY + + addUnitPriority('millisecond', 16); + + // PARSING + + addRegexToken('S', match1to3, match1); + addRegexToken('SS', match1to3, match2); + addRegexToken('SSS', match1to3, match3); + + var token, getSetMillisecond; + for (token = 'SSSS'; token.length <= 9; token += 'S') { + addRegexToken(token, matchUnsigned); + } + + function parseMs(input, array) { + array[MILLISECOND] = toInt(('0.' + input) * 1000); + } + + for (token = 'S'; token.length <= 9; token += 'S') { + addParseToken(token, parseMs); + } + + getSetMillisecond = makeGetSet('Milliseconds', false); + + // FORMATTING + + addFormatToken('z', 0, 0, 'zoneAbbr'); + addFormatToken('zz', 0, 0, 'zoneName'); + + // MOMENTS + + function getZoneAbbr() { + return this._isUTC ? 'UTC' : ''; + } + + function getZoneName() { + return this._isUTC ? 'Coordinated Universal Time' : ''; + } + + var proto = Moment.prototype; + + proto.add = add; + proto.calendar = calendar$1; + proto.clone = clone; + proto.diff = diff; + proto.endOf = endOf; + proto.format = format; + proto.from = from; + proto.fromNow = fromNow; + proto.to = to; + proto.toNow = toNow; + proto.get = stringGet; + proto.invalidAt = invalidAt; + proto.isAfter = isAfter; + proto.isBefore = isBefore; + proto.isBetween = isBetween; + proto.isSame = isSame; + proto.isSameOrAfter = isSameOrAfter; + proto.isSameOrBefore = isSameOrBefore; + proto.isValid = isValid$2; + proto.lang = lang; + proto.locale = locale; + proto.localeData = localeData; + proto.max = prototypeMax; + proto.min = prototypeMin; + proto.parsingFlags = parsingFlags; + proto.set = stringSet; + proto.startOf = startOf; + proto.subtract = subtract; + proto.toArray = toArray; + proto.toObject = toObject; + proto.toDate = toDate; + proto.toISOString = toISOString; + proto.inspect = inspect; + if (typeof Symbol !== 'undefined' && Symbol.for != null) { + proto[Symbol.for('nodejs.util.inspect.custom')] = function () { + return 'Moment<' + this.format() + '>'; + }; + } + proto.toJSON = toJSON; + proto.toString = toString; + proto.unix = unix; + proto.valueOf = valueOf; + proto.creationData = creationData; + proto.eraName = getEraName; + proto.eraNarrow = getEraNarrow; + proto.eraAbbr = getEraAbbr; + proto.eraYear = getEraYear; + proto.year = getSetYear; + proto.isLeapYear = getIsLeapYear; + proto.weekYear = getSetWeekYear; + proto.isoWeekYear = getSetISOWeekYear; + proto.quarter = proto.quarters = getSetQuarter; + proto.month = getSetMonth; + proto.daysInMonth = getDaysInMonth; + proto.week = proto.weeks = getSetWeek; + proto.isoWeek = proto.isoWeeks = getSetISOWeek; + proto.weeksInYear = getWeeksInYear; + proto.weeksInWeekYear = getWeeksInWeekYear; + proto.isoWeeksInYear = getISOWeeksInYear; + proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear; + proto.date = getSetDayOfMonth; + proto.day = proto.days = getSetDayOfWeek; + proto.weekday = getSetLocaleDayOfWeek; + proto.isoWeekday = getSetISODayOfWeek; + proto.dayOfYear = getSetDayOfYear; + proto.hour = proto.hours = getSetHour; + proto.minute = proto.minutes = getSetMinute; + proto.second = proto.seconds = getSetSecond; + proto.millisecond = proto.milliseconds = getSetMillisecond; + proto.utcOffset = getSetOffset; + proto.utc = setOffsetToUTC; + proto.local = setOffsetToLocal; + proto.parseZone = setOffsetToParsedOffset; + proto.hasAlignedHourOffset = hasAlignedHourOffset; + proto.isDST = isDaylightSavingTime; + proto.isLocal = isLocal; + proto.isUtcOffset = isUtcOffset; + proto.isUtc = isUtc; + proto.isUTC = isUtc; + proto.zoneAbbr = getZoneAbbr; + proto.zoneName = getZoneName; + proto.dates = deprecate( + 'dates accessor is deprecated. Use date instead.', + getSetDayOfMonth + ); + proto.months = deprecate( + 'months accessor is deprecated. Use month instead', + getSetMonth + ); + proto.years = deprecate( + 'years accessor is deprecated. Use year instead', + getSetYear + ); + proto.zone = deprecate( + 'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/', + getSetZone + ); + proto.isDSTShifted = deprecate( + 'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information', + isDaylightSavingTimeShifted + ); + + function createUnix(input) { + return createLocal(input * 1000); + } + + function createInZone() { + return createLocal.apply(null, arguments).parseZone(); + } + + function preParsePostFormat(string) { + return string; + } + + var proto$1 = Locale.prototype; + + proto$1.calendar = calendar; + proto$1.longDateFormat = longDateFormat; + proto$1.invalidDate = invalidDate; + proto$1.ordinal = ordinal; + proto$1.preparse = preParsePostFormat; + proto$1.postformat = preParsePostFormat; + proto$1.relativeTime = relativeTime; + proto$1.pastFuture = pastFuture; + proto$1.set = set; + proto$1.eras = localeEras; + proto$1.erasParse = localeErasParse; + proto$1.erasConvertYear = localeErasConvertYear; + proto$1.erasAbbrRegex = erasAbbrRegex; + proto$1.erasNameRegex = erasNameRegex; + proto$1.erasNarrowRegex = erasNarrowRegex; + + proto$1.months = localeMonths; + proto$1.monthsShort = localeMonthsShort; + proto$1.monthsParse = localeMonthsParse; + proto$1.monthsRegex = monthsRegex; + proto$1.monthsShortRegex = monthsShortRegex; + proto$1.week = localeWeek; + proto$1.firstDayOfYear = localeFirstDayOfYear; + proto$1.firstDayOfWeek = localeFirstDayOfWeek; + + proto$1.weekdays = localeWeekdays; + proto$1.weekdaysMin = localeWeekdaysMin; + proto$1.weekdaysShort = localeWeekdaysShort; + proto$1.weekdaysParse = localeWeekdaysParse; + + proto$1.weekdaysRegex = weekdaysRegex; + proto$1.weekdaysShortRegex = weekdaysShortRegex; + proto$1.weekdaysMinRegex = weekdaysMinRegex; + + proto$1.isPM = localeIsPM; + proto$1.meridiem = localeMeridiem; + + function get$1(format, index, field, setter) { + var locale = getLocale(), + utc = createUTC().set(setter, index); + return locale[field](utc, format); + } + + function listMonthsImpl(format, index, field) { + if (isNumber(format)) { + index = format; + format = undefined; + } + + format = format || ''; + + if (index != null) { + return get$1(format, index, field, 'month'); + } + + var i, + out = []; + for (i = 0; i < 12; i++) { + out[i] = get$1(format, i, field, 'month'); + } + return out; + } + + // () + // (5) + // (fmt, 5) + // (fmt) + // (true) + // (true, 5) + // (true, fmt, 5) + // (true, fmt) + function listWeekdaysImpl(localeSorted, format, index, field) { + if (typeof localeSorted === 'boolean') { + if (isNumber(format)) { + index = format; + format = undefined; + } + + format = format || ''; + } else { + format = localeSorted; + index = format; + localeSorted = false; + + if (isNumber(format)) { + index = format; + format = undefined; + } + + format = format || ''; + } + + var locale = getLocale(), + shift = localeSorted ? locale._week.dow : 0, + i, + out = []; + + if (index != null) { + return get$1(format, (index + shift) % 7, field, 'day'); + } + + for (i = 0; i < 7; i++) { + out[i] = get$1(format, (i + shift) % 7, field, 'day'); + } + return out; + } + + function listMonths(format, index) { + return listMonthsImpl(format, index, 'months'); + } + + function listMonthsShort(format, index) { + return listMonthsImpl(format, index, 'monthsShort'); + } + + function listWeekdays(localeSorted, format, index) { + return listWeekdaysImpl(localeSorted, format, index, 'weekdays'); + } + + function listWeekdaysShort(localeSorted, format, index) { + return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort'); + } + + function listWeekdaysMin(localeSorted, format, index) { + return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin'); + } + + getSetGlobalLocale('en', { + eras: [ + { + since: '0001-01-01', + until: +Infinity, + offset: 1, + name: 'Anno Domini', + narrow: 'AD', + abbr: 'AD', + }, + { + since: '0000-12-31', + until: -Infinity, + offset: 1, + name: 'Before Christ', + narrow: 'BC', + abbr: 'BC', + }, + ], + dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/, + ordinal: function (number) { + var b = number % 10, + output = + toInt((number % 100) / 10) === 1 + ? 'th' + : b === 1 + ? 'st' + : b === 2 + ? 'nd' + : b === 3 + ? 'rd' + : 'th'; + return number + output; + }, + }); + + // Side effect imports + + hooks.lang = deprecate( + 'moment.lang is deprecated. Use moment.locale instead.', + getSetGlobalLocale + ); + hooks.langData = deprecate( + 'moment.langData is deprecated. Use moment.localeData instead.', + getLocale + ); + + var mathAbs = Math.abs; + + function abs() { + var data = this._data; + + this._milliseconds = mathAbs(this._milliseconds); + this._days = mathAbs(this._days); + this._months = mathAbs(this._months); + + data.milliseconds = mathAbs(data.milliseconds); + data.seconds = mathAbs(data.seconds); + data.minutes = mathAbs(data.minutes); + data.hours = mathAbs(data.hours); + data.months = mathAbs(data.months); + data.years = mathAbs(data.years); + + return this; + } + + function addSubtract$1(duration, input, value, direction) { + var other = createDuration(input, value); + + duration._milliseconds += direction * other._milliseconds; + duration._days += direction * other._days; + duration._months += direction * other._months; + + return duration._bubble(); + } + + // supports only 2.0-style add(1, 's') or add(duration) + function add$1(input, value) { + return addSubtract$1(this, input, value, 1); + } + + // supports only 2.0-style subtract(1, 's') or subtract(duration) + function subtract$1(input, value) { + return addSubtract$1(this, input, value, -1); + } + + function absCeil(number) { + if (number < 0) { + return Math.floor(number); + } else { + return Math.ceil(number); + } + } + + function bubble() { + var milliseconds = this._milliseconds, + days = this._days, + months = this._months, + data = this._data, + seconds, + minutes, + hours, + years, + monthsFromDays; + + // if we have a mix of positive and negative values, bubble down first + // check: https://github.com/moment/moment/issues/2166 + if ( + !( + (milliseconds >= 0 && days >= 0 && months >= 0) || + (milliseconds <= 0 && days <= 0 && months <= 0) + ) + ) { + milliseconds += absCeil(monthsToDays(months) + days) * 864e5; + days = 0; + months = 0; + } + + // The following code bubbles up values, see the tests for + // examples of what that means. + data.milliseconds = milliseconds % 1000; + + seconds = absFloor(milliseconds / 1000); + data.seconds = seconds % 60; + + minutes = absFloor(seconds / 60); + data.minutes = minutes % 60; + + hours = absFloor(minutes / 60); + data.hours = hours % 24; + + days += absFloor(hours / 24); + + // convert days to months + monthsFromDays = absFloor(daysToMonths(days)); + months += monthsFromDays; + days -= absCeil(monthsToDays(monthsFromDays)); + + // 12 months -> 1 year + years = absFloor(months / 12); + months %= 12; + + data.days = days; + data.months = months; + data.years = years; + + return this; + } + + function daysToMonths(days) { + // 400 years have 146097 days (taking into account leap year rules) + // 400 years have 12 months === 4800 + return (days * 4800) / 146097; + } + + function monthsToDays(months) { + // the reverse of daysToMonths + return (months * 146097) / 4800; + } + + function as(units) { + if (!this.isValid()) { + return NaN; + } + var days, + months, + milliseconds = this._milliseconds; + + units = normalizeUnits(units); + + if (units === 'month' || units === 'quarter' || units === 'year') { + days = this._days + milliseconds / 864e5; + months = this._months + daysToMonths(days); + switch (units) { + case 'month': + return months; + case 'quarter': + return months / 3; + case 'year': + return months / 12; + } + } else { + // handle milliseconds separately because of floating point math errors (issue #1867) + days = this._days + Math.round(monthsToDays(this._months)); + switch (units) { + case 'week': + return days / 7 + milliseconds / 6048e5; + case 'day': + return days + milliseconds / 864e5; + case 'hour': + return days * 24 + milliseconds / 36e5; + case 'minute': + return days * 1440 + milliseconds / 6e4; + case 'second': + return days * 86400 + milliseconds / 1000; + // Math.floor prevents floating point math errors here + case 'millisecond': + return Math.floor(days * 864e5) + milliseconds; + default: + throw new Error('Unknown unit ' + units); + } + } + } + + // TODO: Use this.as('ms')? + function valueOf$1() { + if (!this.isValid()) { + return NaN; + } + return ( + this._milliseconds + + this._days * 864e5 + + (this._months % 12) * 2592e6 + + toInt(this._months / 12) * 31536e6 + ); + } + + function makeAs(alias) { + return function () { + return this.as(alias); + }; + } + + var asMilliseconds = makeAs('ms'), + asSeconds = makeAs('s'), + asMinutes = makeAs('m'), + asHours = makeAs('h'), + asDays = makeAs('d'), + asWeeks = makeAs('w'), + asMonths = makeAs('M'), + asQuarters = makeAs('Q'), + asYears = makeAs('y'); + + function clone$1() { + return createDuration(this); + } + + function get$2(units) { + units = normalizeUnits(units); + return this.isValid() ? this[units + 's']() : NaN; + } + + function makeGetter(name) { + return function () { + return this.isValid() ? this._data[name] : NaN; + }; + } + + var milliseconds = makeGetter('milliseconds'), + seconds = makeGetter('seconds'), + minutes = makeGetter('minutes'), + hours = makeGetter('hours'), + days = makeGetter('days'), + months = makeGetter('months'), + years = makeGetter('years'); + + function weeks() { + return absFloor(this.days() / 7); + } + + var round = Math.round, + thresholds = { + ss: 44, // a few seconds to seconds + s: 45, // seconds to minute + m: 45, // minutes to hour + h: 22, // hours to day + d: 26, // days to month/week + w: null, // weeks to month + M: 11, // months to year + }; + + // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize + function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) { + return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture); + } + + function relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) { + var duration = createDuration(posNegDuration).abs(), + seconds = round(duration.as('s')), + minutes = round(duration.as('m')), + hours = round(duration.as('h')), + days = round(duration.as('d')), + months = round(duration.as('M')), + weeks = round(duration.as('w')), + years = round(duration.as('y')), + a = + (seconds <= thresholds.ss && ['s', seconds]) || + (seconds < thresholds.s && ['ss', seconds]) || + (minutes <= 1 && ['m']) || + (minutes < thresholds.m && ['mm', minutes]) || + (hours <= 1 && ['h']) || + (hours < thresholds.h && ['hh', hours]) || + (days <= 1 && ['d']) || + (days < thresholds.d && ['dd', days]); + + if (thresholds.w != null) { + a = + a || + (weeks <= 1 && ['w']) || + (weeks < thresholds.w && ['ww', weeks]); + } + a = a || + (months <= 1 && ['M']) || + (months < thresholds.M && ['MM', months]) || + (years <= 1 && ['y']) || ['yy', years]; + + a[2] = withoutSuffix; + a[3] = +posNegDuration > 0; + a[4] = locale; + return substituteTimeAgo.apply(null, a); + } + + // This function allows you to set the rounding function for relative time strings + function getSetRelativeTimeRounding(roundingFunction) { + if (roundingFunction === undefined) { + return round; + } + if (typeof roundingFunction === 'function') { + round = roundingFunction; + return true; + } + return false; + } + + // This function allows you to set a threshold for relative time strings + function getSetRelativeTimeThreshold(threshold, limit) { + if (thresholds[threshold] === undefined) { + return false; + } + if (limit === undefined) { + return thresholds[threshold]; + } + thresholds[threshold] = limit; + if (threshold === 's') { + thresholds.ss = limit - 1; + } + return true; + } + + function humanize(argWithSuffix, argThresholds) { + if (!this.isValid()) { + return this.localeData().invalidDate(); + } + + var withSuffix = false, + th = thresholds, + locale, + output; + + if (typeof argWithSuffix === 'object') { + argThresholds = argWithSuffix; + argWithSuffix = false; + } + if (typeof argWithSuffix === 'boolean') { + withSuffix = argWithSuffix; + } + if (typeof argThresholds === 'object') { + th = Object.assign({}, thresholds, argThresholds); + if (argThresholds.s != null && argThresholds.ss == null) { + th.ss = argThresholds.s - 1; + } + } + + locale = this.localeData(); + output = relativeTime$1(this, !withSuffix, th, locale); + + if (withSuffix) { + output = locale.pastFuture(+this, output); + } + + return locale.postformat(output); + } + + var abs$1 = Math.abs; + + function sign(x) { + return (x > 0) - (x < 0) || +x; + } + + function toISOString$1() { + // for ISO strings we do not use the normal bubbling rules: + // * milliseconds bubble up until they become hours + // * days do not bubble at all + // * months bubble up until they become years + // This is because there is no context-free conversion between hours and days + // (think of clock changes) + // and also not between days and months (28-31 days per month) + if (!this.isValid()) { + return this.localeData().invalidDate(); + } + + var seconds = abs$1(this._milliseconds) / 1000, + days = abs$1(this._days), + months = abs$1(this._months), + minutes, + hours, + years, + s, + total = this.asSeconds(), + totalSign, + ymSign, + daysSign, + hmsSign; + + if (!total) { + // this is the same as C#'s (Noda) and python (isodate)... + // but not other JS (goog.date) + return 'P0D'; + } + + // 3600 seconds -> 60 minutes -> 1 hour + minutes = absFloor(seconds / 60); + hours = absFloor(minutes / 60); + seconds %= 60; + minutes %= 60; + + // 12 months -> 1 year + years = absFloor(months / 12); + months %= 12; + + // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js + s = seconds ? seconds.toFixed(3).replace(/\.?0+$/, '') : ''; + + totalSign = total < 0 ? '-' : ''; + ymSign = sign(this._months) !== sign(total) ? '-' : ''; + daysSign = sign(this._days) !== sign(total) ? '-' : ''; + hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : ''; + + return ( + totalSign + + 'P' + + (years ? ymSign + years + 'Y' : '') + + (months ? ymSign + months + 'M' : '') + + (days ? daysSign + days + 'D' : '') + + (hours || minutes || seconds ? 'T' : '') + + (hours ? hmsSign + hours + 'H' : '') + + (minutes ? hmsSign + minutes + 'M' : '') + + (seconds ? hmsSign + s + 'S' : '') + ); + } + + var proto$2 = Duration.prototype; + + proto$2.isValid = isValid$1; + proto$2.abs = abs; + proto$2.add = add$1; + proto$2.subtract = subtract$1; + proto$2.as = as; + proto$2.asMilliseconds = asMilliseconds; + proto$2.asSeconds = asSeconds; + proto$2.asMinutes = asMinutes; + proto$2.asHours = asHours; + proto$2.asDays = asDays; + proto$2.asWeeks = asWeeks; + proto$2.asMonths = asMonths; + proto$2.asQuarters = asQuarters; + proto$2.asYears = asYears; + proto$2.valueOf = valueOf$1; + proto$2._bubble = bubble; + proto$2.clone = clone$1; + proto$2.get = get$2; + proto$2.milliseconds = milliseconds; + proto$2.seconds = seconds; + proto$2.minutes = minutes; + proto$2.hours = hours; + proto$2.days = days; + proto$2.weeks = weeks; + proto$2.months = months; + proto$2.years = years; + proto$2.humanize = humanize; + proto$2.toISOString = toISOString$1; + proto$2.toString = toISOString$1; + proto$2.toJSON = toISOString$1; + proto$2.locale = locale; + proto$2.localeData = localeData; + + proto$2.toIsoString = deprecate( + 'toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', + toISOString$1 + ); + proto$2.lang = lang; + + // FORMATTING + + addFormatToken('X', 0, 0, 'unix'); + addFormatToken('x', 0, 0, 'valueOf'); + + // PARSING + + addRegexToken('x', matchSigned); + addRegexToken('X', matchTimestamp); + addParseToken('X', function (input, array, config) { + config._d = new Date(parseFloat(input) * 1000); + }); + addParseToken('x', function (input, array, config) { + config._d = new Date(toInt(input)); + }); + + //! moment.js + + hooks.version = '2.27.0'; + + setHookCallback(createLocal); + + hooks.fn = proto; + hooks.min = min; + hooks.max = max; + hooks.now = now; + hooks.utc = createUTC; + hooks.unix = createUnix; + hooks.months = listMonths; + hooks.isDate = isDate; + hooks.locale = getSetGlobalLocale; + hooks.invalid = createInvalid; + hooks.duration = createDuration; + hooks.isMoment = isMoment; + hooks.weekdays = listWeekdays; + hooks.parseZone = createInZone; + hooks.localeData = getLocale; + hooks.isDuration = isDuration; + hooks.monthsShort = listMonthsShort; + hooks.weekdaysMin = listWeekdaysMin; + hooks.defineLocale = defineLocale; + hooks.updateLocale = updateLocale; + hooks.locales = listLocales; + hooks.weekdaysShort = listWeekdaysShort; + hooks.normalizeUnits = normalizeUnits; + hooks.relativeTimeRounding = getSetRelativeTimeRounding; + hooks.relativeTimeThreshold = getSetRelativeTimeThreshold; + hooks.calendarFormat = getCalendarFormat; + hooks.prototype = proto; + + // currently HTML5 input type only supports 24-hour formats + hooks.HTML5_FMT = { + DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // + DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // + DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // + DATE: 'YYYY-MM-DD', // + TIME: 'HH:mm', // + TIME_SECONDS: 'HH:mm:ss', // + TIME_MS: 'HH:mm:ss.SSS', // + WEEK: 'GGGG-[W]WW', // + MONTH: 'YYYY-MM', // + }; + + return hooks; + +}))); diff --git a/install/bin/electron/resources/app/vendor/moment/moment.min.js b/install/bin/electron/resources/app/vendor/moment/moment.min.js new file mode 100644 index 0000000..36f8628 --- /dev/null +++ b/install/bin/electron/resources/app/vendor/moment/moment.min.js @@ -0,0 +1,2 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.moment=t()}(this,function(){"use strict";var e,i;function f(){return e.apply(null,arguments)}function o(e){return e instanceof Array||"[object Array]"===Object.prototype.toString.call(e)}function u(e){return null!=e&&"[object Object]"===Object.prototype.toString.call(e)}function m(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function l(e){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(e).length;for(var t in e)if(m(e,t))return;return 1}function r(e){return void 0===e}function h(e){return"number"==typeof e||"[object Number]"===Object.prototype.toString.call(e)}function a(e){return e instanceof Date||"[object Date]"===Object.prototype.toString.call(e)}function d(e,t){for(var n=[],s=0;s>>0,s=0;sFe(e)?(r=e+1,a-Fe(e)):(r=e,a);return{year:r,dayOfYear:o}}function Ae(e,t,n){var s,i,r=Ge(e.year(),t,n),a=Math.floor((e.dayOfYear()-r-1)/7)+1;return a<1?s=a+je(i=e.year()-1,t,n):a>je(e.year(),t,n)?(s=a-je(e.year(),t,n),i=e.year()+1):(i=e.year(),s=a),{week:s,year:i}}function je(e,t,n){var s=Ge(e,t,n),i=Ge(e+1,t,n);return(Fe(e)-s+i)/7}C("w",["ww",2],"wo","week"),C("W",["WW",2],"Wo","isoWeek"),L("week","w"),L("isoWeek","W"),A("week",5),A("isoWeek",5),ce("w",te),ce("ww",te,Q),ce("W",te),ce("WW",te,Q),ge(["w","ww","W","WW"],function(e,t,n,s){t[s.substr(0,1)]=Z(e)});function Ie(e,t){return e.slice(t,7).concat(e.slice(0,t))}C("d",0,"do","day"),C("dd",0,0,function(e){return this.localeData().weekdaysMin(this,e)}),C("ddd",0,0,function(e){return this.localeData().weekdaysShort(this,e)}),C("dddd",0,0,function(e){return this.localeData().weekdays(this,e)}),C("e",0,0,"weekday"),C("E",0,0,"isoWeekday"),L("day","d"),L("weekday","e"),L("isoWeekday","E"),A("day",11),A("weekday",11),A("isoWeekday",11),ce("d",te),ce("e",te),ce("E",te),ce("dd",function(e,t){return t.weekdaysMinRegex(e)}),ce("ddd",function(e,t){return t.weekdaysShortRegex(e)}),ce("dddd",function(e,t){return t.weekdaysRegex(e)}),ge(["dd","ddd","dddd"],function(e,t,n,s){var i=n._locale.weekdaysParse(e,s,n._strict);null!=i?t.d=i:y(n).invalidWeekday=e}),ge(["d","e","E"],function(e,t,n,s){t[s]=Z(e)});var Ze="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),ze="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),$e="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),qe=de,Be=de,Je=de;function Qe(){function e(e,t){return t.length-e.length}for(var t,n,s,i,r=[],a=[],o=[],u=[],l=0;l<7;l++)t=_([2e3,1]).day(l),n=me(this.weekdaysMin(t,"")),s=me(this.weekdaysShort(t,"")),i=me(this.weekdays(t,"")),r.push(n),a.push(s),o.push(i),u.push(n),u.push(s),u.push(i);r.sort(e),a.sort(e),o.sort(e),u.sort(e),this._weekdaysRegex=new RegExp("^("+u.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+o.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+a.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+r.join("|")+")","i")}function Xe(){return this.hours()%12||12}function Ke(e,t){C(e,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),t)})}function et(e,t){return t._meridiemParse}C("H",["HH",2],0,"hour"),C("h",["hh",2],0,Xe),C("k",["kk",2],0,function(){return this.hours()||24}),C("hmm",0,0,function(){return""+Xe.apply(this)+T(this.minutes(),2)}),C("hmmss",0,0,function(){return""+Xe.apply(this)+T(this.minutes(),2)+T(this.seconds(),2)}),C("Hmm",0,0,function(){return""+this.hours()+T(this.minutes(),2)}),C("Hmmss",0,0,function(){return""+this.hours()+T(this.minutes(),2)+T(this.seconds(),2)}),Ke("a",!0),Ke("A",!1),L("hour","h"),A("hour",13),ce("a",et),ce("A",et),ce("H",te),ce("h",te),ce("k",te),ce("HH",te,Q),ce("hh",te,Q),ce("kk",te,Q),ce("hmm",ne),ce("hmmss",se),ce("Hmm",ne),ce("Hmmss",se),ye(["H","HH"],Me),ye(["k","kk"],function(e,t,n){var s=Z(e);t[Me]=24===s?0:s}),ye(["a","A"],function(e,t,n){n._isPm=n._locale.isPM(e),n._meridiem=e}),ye(["h","hh"],function(e,t,n){t[Me]=Z(e),y(n).bigHour=!0}),ye("hmm",function(e,t,n){var s=e.length-2;t[Me]=Z(e.substr(0,s)),t[De]=Z(e.substr(s)),y(n).bigHour=!0}),ye("hmmss",function(e,t,n){var s=e.length-4,i=e.length-2;t[Me]=Z(e.substr(0,s)),t[De]=Z(e.substr(s,2)),t[Se]=Z(e.substr(i)),y(n).bigHour=!0}),ye("Hmm",function(e,t,n){var s=e.length-2;t[Me]=Z(e.substr(0,s)),t[De]=Z(e.substr(s))}),ye("Hmmss",function(e,t,n){var s=e.length-4,i=e.length-2;t[Me]=Z(e.substr(0,s)),t[De]=Z(e.substr(s,2)),t[Se]=Z(e.substr(i))});var tt=z("Hours",!0);var nt,st={calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},longDateFormat:{LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},invalidDate:"Invalid date",ordinal:"%d",dayOfMonthOrdinalParse:/\d{1,2}/,relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",w:"a week",ww:"%d weeks",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},months:Te,monthsShort:Ne,week:{dow:0,doy:6},weekdays:Ze,weekdaysMin:$e,weekdaysShort:ze,meridiemParse:/[ap]\.?m?\.?/i},it={},rt={};function at(e){return e?e.toLowerCase().replace("_","-"):e}function ot(e){for(var t,n,s,i,r=0;r=t&&function(e,t){for(var n=Math.min(e.length,t.length),s=0;s=t-1)break;t--}r++}return nt}function ut(t){var e;if(void 0===it[t]&&"undefined"!=typeof module&&module&&module.exports)try{e=nt._abbr,require("./locale/"+t),lt(e)}catch(e){it[t]=null}return it[t]}function lt(e,t){var n;return e&&((n=r(t)?dt(e):ht(e,t))?nt=n:"undefined"!=typeof console&&console.warn&&console.warn("Locale "+e+" not found. Did you forget to load it?")),nt._abbr}function ht(e,t){if(null===t)return delete it[e],null;var n,s=st;if(t.abbr=e,null!=it[e])Y("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),s=it[e]._config;else if(null!=t.parentLocale)if(null!=it[t.parentLocale])s=it[t.parentLocale]._config;else{if(null==(n=ut(t.parentLocale)))return rt[t.parentLocale]||(rt[t.parentLocale]=[]),rt[t.parentLocale].push({name:e,config:t}),null;s=n._config}return it[e]=new x(b(s,t)),rt[e]&&rt[e].forEach(function(e){ht(e.name,e.config)}),lt(e),it[e]}function dt(e){var t;if(e&&e._locale&&e._locale._abbr&&(e=e._locale._abbr),!e)return nt;if(!o(e)){if(t=ut(e))return t;e=[e]}return ot(e)}function ct(e){var t,n=e._a;return n&&-2===y(e).overflow&&(t=n[ve]<0||11xe(n[pe],n[ve])?ke:n[Me]<0||24je(n,r,a)?y(e)._overflowWeeks=!0:null!=u?y(e)._overflowWeekday=!0:(o=Ee(n,s,i,r,a),e._a[pe]=o.year,e._dayOfYear=o.dayOfYear)}(e),null!=e._dayOfYear&&(r=St(e._a[pe],s[pe]),(e._dayOfYear>Fe(r)||0===e._dayOfYear)&&(y(e)._overflowDayOfYear=!0),n=Ve(r,0,e._dayOfYear),e._a[ve]=n.getUTCMonth(),e._a[ke]=n.getUTCDate()),t=0;t<3&&null==e._a[t];++t)e._a[t]=u[t]=s[t];for(;t<7;t++)e._a[t]=u[t]=null==e._a[t]?2===t?1:0:e._a[t];24===e._a[Me]&&0===e._a[De]&&0===e._a[Se]&&0===e._a[Ye]&&(e._nextDay=!0,e._a[Me]=0),e._d=(e._useUTC?Ve:function(e,t,n,s,i,r,a){var o;return e<100&&0<=e?(o=new Date(e+400,t,n,s,i,r,a),isFinite(o.getFullYear())&&o.setFullYear(e)):o=new Date(e,t,n,s,i,r,a),o}).apply(null,u),i=e._useUTC?e._d.getUTCDay():e._d.getDay(),null!=e._tzm&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[Me]=24),e._w&&void 0!==e._w.d&&e._w.d!==i&&(y(e).weekdayMismatch=!0)}}function Ot(e){if(e._f!==f.ISO_8601)if(e._f!==f.RFC_2822){e._a=[],y(e).empty=!0;for(var t,n,s,i,r,a,o,u=""+e._i,l=u.length,h=0,d=H(e._f,e._locale).match(N)||[],c=0;cn.valueOf():n.valueOf()"}),pn.toJSON=function(){return this.isValid()?this.toISOString():null},pn.toString=function(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},pn.unix=function(){return Math.floor(this.valueOf()/1e3)},pn.valueOf=function(){return this._d.valueOf()-6e4*(this._offset||0)},pn.creationData=function(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}},pn.eraName=function(){for(var e,t=this.localeData().eras(),n=0,s=t.length;nthis.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},pn.isLocal=function(){return!!this.isValid()&&!this._isUTC},pn.isUtcOffset=function(){return!!this.isValid()&&this._isUTC},pn.isUtc=At,pn.isUTC=At,pn.zoneAbbr=function(){return this._isUTC?"UTC":""},pn.zoneName=function(){return this._isUTC?"Coordinated Universal Time":""},pn.dates=n("dates accessor is deprecated. Use date instead.",fn),pn.months=n("months accessor is deprecated. Use month instead",Ue),pn.years=n("years accessor is deprecated. Use year instead",Le),pn.zone=n("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",function(e,t){return null!=e?("string"!=typeof e&&(e=-e),this.utcOffset(e,t),this):-this.utcOffset()}),pn.isDSTShifted=n("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",function(){if(!r(this._isDSTShifted))return this._isDSTShifted;var e,t={};return v(t,this),(t=bt(t))._a?(e=(t._isUTC?_:Tt)(t._a),this._isDSTShifted=this.isValid()&&0 *: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/install/bin/electron/resources/app/vendor/tabulator/css/tabulator.min.css b/install/bin/electron/resources/app/vendor/tabulator/css/tabulator.min.css new file mode 100644 index 0000000..bafd6c7 --- /dev/null +++ b/install/bin/electron/resources/app/vendor/tabulator/css/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/install/bin/electron/resources/app/vendor/tabulator/css/tabulator.min.css.map b/install/bin/electron/resources/app/vendor/tabulator/css/tabulator.min.css.map new file mode 100644 index 0000000..47a4c5c --- /dev/null +++ b/install/bin/electron/resources/app/vendor/tabulator/css/tabulator.min.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["tabulator.scss"],"names":[],"mappings":"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","file":"tabulator.min.css","sourcesContent":["/* Tabulator v4.7.0 (c) Oliver Folkerd */\n\n\r\n//Main Theme Variables\r\n$backgroundColor: #888 !default; //background color of tabulator\r\n$borderColor:#999 !default; //border to tabulator\r\n$textSize:14px !default; //table text size\r\n\r\n//header themeing\r\n$headerBackgroundColor:#e6e6e6 !default; //border to tabulator\r\n$headerTextColor:#555 !default; //header text colour\r\n$headerBorderColor:#aaa !default; //header border color\r\n$headerSeperatorColor:#999 !default; //header bottom seperator color\r\n$headerMargin:4px !default; //padding round header\r\n\r\n//column header arrows\r\n$sortArrowActive: #666 !default;\r\n$sortArrowInactive: #bbb !default;\r\n\r\n//row themeing\r\n$rowBackgroundColor:#fff !default; //table row background color\r\n$rowAltBackgroundColor:#EFEFEF !default; //table row background color\r\n$rowBorderColor:#aaa !default; //table border color\r\n$rowTextColor:#333 !default; //table text color\r\n$rowHoverBackground:#bbb !default; //row background color on hover\r\n\r\n$rowSelectedBackground: #9ABCEA !default; //row background color when selected\r\n$rowSelectedBackgroundHover: #769BCC !default;//row background color when selected and hovered\r\n\r\n$editBoxColor:#1D68CD !default; //border color for edit boxes\r\n$errorColor:#dd0000 !default; //error indication\r\n\r\n//footer themeing\r\n$footerBackgroundColor:#e6e6e6 !default; //border to tabulator\r\n$footerTextColor:#555 !default; //footer text colour\r\n$footerBorderColor:#aaa !default; //footer border color\r\n$footerSeperatorColor:#999 !default; //footer bottom seperator color\r\n$footerActiveColor:#d00 !default; //footer bottom active text color\r\n\r\n\r\n\r\n//Tabulator Containing Element\r\n.tabulator{\r\n\tposition: relative;\r\n\r\n\tborder: 1px solid $borderColor;\r\n\r\n\tbackground-color: $backgroundColor;\r\n\r\n\tfont-size:$textSize;\r\n\ttext-align: left;\r\n\toverflow:hidden;\r\n\r\n\t-webkit-transform: translatez(0);\r\n\t-moz-transform: translatez(0);\r\n\t-ms-transform: translatez(0);\r\n\t-o-transform: translatez(0);\r\n\ttransform: translatez(0);\r\n\r\n\t&[tabulator-layout=\"fitDataFill\"]{\r\n\t\t.tabulator-tableHolder{\r\n\t\t\t.tabulator-table{\r\n\t\t\t\tmin-width:100%;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t&[tabulator-layout=\"fitDataTable\"]{\r\n\t\tdisplay: inline-block;\r\n\t}\r\n\r\n\t&.tabulator-block-select{\r\n\t\tuser-select: none;\r\n\t}\r\n\r\n\t//column header containing element\r\n\t.tabulator-header{\r\n\t\tposition:relative;\r\n\t\tbox-sizing: border-box;\r\n\r\n\t\twidth:100%;\r\n\r\n\t\tborder-bottom:1px solid $headerSeperatorColor;\r\n\t\tbackground-color: $headerBackgroundColor;\r\n\t\tcolor: $headerTextColor;\r\n\t\tfont-weight:bold;\r\n\r\n\t\twhite-space: nowrap;\r\n\t\toverflow:hidden;\r\n\r\n\t\t-moz-user-select: none;\r\n\t\t-khtml-user-select: none;\r\n\t\t-webkit-user-select: none;\r\n\t\t-o-user-select: none;\r\n\r\n\t\t&.tabulator-header-hidden{\r\n\t\t\tdisplay:none;\r\n\t\t}\r\n\r\n\t\t//individual column header element\r\n\t\t.tabulator-col{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tposition:relative;\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\tborder-right:1px solid $headerBorderColor;\r\n\t\t\tbackground:$headerBackgroundColor;\r\n\t\t\ttext-align:left;\r\n\t\t\tvertical-align: bottom;\r\n\t\t\toverflow: hidden;\r\n\r\n\t\t\t&.tabulator-moving{\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\tborder:1px solid $headerSeperatorColor;\r\n\t\t\t\tbackground:darken($headerBackgroundColor, 10%);\r\n\t\t\t\tpointer-events: none;\r\n\t\t\t}\r\n\r\n\t\t\t//hold content of column header\r\n\t\t\t.tabulator-col-content{\r\n\t\t\t\tbox-sizing:border-box;\r\n\t\t\t\tposition: relative;\r\n\t\t\t\tpadding:4px;\r\n\r\n\t\t\t\t//header menu button\r\n\t\t\t\t.tabulator-header-menu-button{\r\n\t\t\t\t\tpadding: 0 8px;\r\n\r\n\t\t\t\t\t&:hover{\r\n\t\t\t\t\t\tcursor: pointer;\r\n\t\t\t\t\t\topacity: .6;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//hold title of column header\r\n\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\tbox-sizing:border-box;\r\n\t\t\t\t\twidth: 100%;\r\n\r\n\t\t\t\t\twhite-space: nowrap;\r\n\t\t\t\t\toverflow: hidden;\r\n\t\t\t\t\ttext-overflow: ellipsis;\r\n\t\t\t\t\tvertical-align:bottom;\r\n\r\n\t\t\t\t\t//element to hold title editor\r\n\t\t\t\t\t.tabulator-title-editor{\r\n\t\t\t\t\t\tbox-sizing: border-box;\r\n\t\t\t\t\t\twidth: 100%;\r\n\r\n\t\t\t\t\t\tborder:1px solid #999;\r\n\r\n\t\t\t\t\t\tpadding:1px;\r\n\r\n\t\t\t\t\t\tbackground: #fff;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//column sorter arrow\r\n\t\t\t\t.tabulator-arrow{\r\n\t\t\t\t\tdisplay: inline-block;\r\n\t\t\t\t\tposition: absolute;\r\n\t\t\t\t\ttop:9px;\r\n\t\t\t\t\tright:8px;\r\n\t\t\t\t\twidth: 0;\r\n\t\t\t\t\theight: 0;\r\n\t\t\t\t\tborder-left: 6px solid transparent;\r\n\t\t\t\t\tborder-right: 6px solid transparent;\r\n\t\t\t\t\tborder-bottom: 6px solid $sortArrowInactive;\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\t//complex header column group\r\n\t\t\t&.tabulator-col-group{\r\n\r\n\t\t\t\t//gelement to hold sub columns in column group\r\n\t\t\t\t.tabulator-col-group-cols{\r\n\t\t\t\t\tposition:relative;\r\n\t\t\t\t\tdisplay: flex;\r\n\r\n\t\t\t\t\tborder-top:1px solid $headerBorderColor;\r\n\t\t\t\t\toverflow: hidden;\r\n\r\n\t\t\t\t\tmargin-right:-1px;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//hide left resize handle on first column\r\n\t\t\t&:first-child{\r\n\t\t\t\t.tabulator-col-resize-handle.prev{\r\n\t\t\t\t\tdisplay: none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//header filter containing element\r\n\t\t\t.tabulator-header-filter{\r\n\t\t\t\tposition: relative;\r\n\t\t\t\tbox-sizing: border-box;\r\n\t\t\t\tmargin-top:2px;\r\n\t\t\t\twidth:100%;\r\n\t\t\t\ttext-align: center;\r\n\r\n\t\t\t\t//styling adjustment for inbuilt editors\r\n\t\t\t\ttextarea{\r\n\t\t\t\t\theight:auto !important;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tsvg{\r\n\t\t\t\t\tmargin-top: 3px;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tinput{\r\n\t\t\t\t\t&::-ms-clear {\r\n\t\t\t\t\t\twidth : 0;\r\n\t\t\t\t\t\theight: 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//styling child elements for sortable columns\r\n\t\t\t&.tabulator-sortable{\r\n\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\tpadding-right:25px;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&:hover{\r\n\t\t\t\t\tcursor:pointer;\r\n\t\t\t\t\tbackground-color:darken($headerBackgroundColor, 10%);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&[aria-sort=\"none\"]{\r\n\t\t\t\t\t.tabulator-col-content .tabulator-arrow{\r\n\t\t\t\t\t\tborder-top: none;\r\n\t\t\t\t\t\tborder-bottom: 6px solid $sortArrowInactive;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&[aria-sort=\"asc\"]{\r\n\t\t\t\t\t.tabulator-col-content .tabulator-arrow{\r\n\t\t\t\t\t\tborder-top: none;\r\n\t\t\t\t\t\tborder-bottom: 6px solid $sortArrowActive;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&[aria-sort=\"desc\"]{\r\n\t\t\t\t\t.tabulator-col-content .tabulator-arrow{\r\n\t\t\t\t\t\tborder-top: 6px solid $sortArrowActive;\r\n\t\t\t\t\t\tborder-bottom: none;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\r\n\t\t\t&.tabulator-col-vertical{\r\n\t\t\t\t.tabulator-col-content{\r\n\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\twriting-mode: vertical-rl;\r\n\t\t\t\t\t\ttext-orientation: mixed;\r\n\r\n\t\t\t\t\t\tdisplay:flex;\r\n\t\t\t\t\t\talign-items:center;\r\n\t\t\t\t\t\tjustify-content:center;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&.tabulator-col-vertical-flip{\r\n\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\ttransform: rotate(180deg);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&.tabulator-sortable{\r\n\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\tpadding-right:0;\r\n\t\t\t\t\t\tpadding-top:20px;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t&.tabulator-col-vertical-flip{\r\n\t\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\t\tpadding-right:0;\r\n\t\t\t\t\t\t\tpadding-bottom:20px;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t.tabulator-arrow{\r\n\t\t\t\t\t\tright:calc(50% - 6px);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-frozen{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\tposition: absolute;\r\n\r\n\t\t\t// background-color: inherit;\r\n\r\n\t\t\tz-index: 10;\r\n\r\n\t\t\t&.tabulator-frozen-left{\r\n\t\t\t\tborder-right:2px solid $rowBorderColor;\r\n\t\t\t}\r\n\r\n\t\t\t&.tabulator-frozen-right{\r\n\t\t\t\tborder-left:2px solid $rowBorderColor;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\t.tabulator-calcs-holder{\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\tmin-width:600%;\r\n\r\n\t\t\tbackground:lighten($headerBackgroundColor, 5%) !important;\r\n\r\n\t\t\t.tabulator-row{\r\n\t\t\t\tbackground:lighten($headerBackgroundColor, 5%) !important;\r\n\r\n\t\t\t\t.tabulator-col-resize-handle{\r\n\t\t\t\t\tdisplay: none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tborder-top:1px solid $rowBorderColor;\r\n\t\t\tborder-bottom:1px solid $headerBorderColor;\r\n\r\n\t\t\toverflow: hidden;\r\n\t\t}\r\n\r\n\t\t.tabulator-frozen-rows-holder{\r\n\t\t\tmin-width:600%;\r\n\r\n\t\t\t&:empty{\r\n\t\t\t\tdisplay: none;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//scrolling element to hold table\r\n\t.tabulator-tableHolder{\r\n\t\tposition:relative;\r\n\t\twidth:100%;\r\n\t\twhite-space: nowrap;\r\n\t\toverflow:auto;\r\n\t\t-webkit-overflow-scrolling: touch;\r\n\r\n\t\t&:focus{\r\n\t\t\toutline: none;\r\n\t\t}\r\n\r\n\t\t//default placeholder element\r\n\t\t.tabulator-placeholder{\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\tdisplay: flex;\r\n\t\t\talign-items:center;\r\n\r\n\t\t\t&[tabulator-render-mode=\"virtual\"]{\r\n\t\t\t\tmin-height:100%;\r\n\t\t\t\tmin-width:100%;\r\n\t\t\t}\r\n\r\n\t\t\twidth:100%;\r\n\r\n\t\t\tspan{\r\n\t\t\t\tdisplay: inline-block;\r\n\r\n\t\t\t\tmargin:0 auto;\r\n\t\t\t\tpadding:10px;\r\n\r\n\t\t\t\tcolor:#ccc;\r\n\t\t\t\tfont-weight: bold;\r\n\t\t\t\tfont-size: 20px;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//element to hold table rows\r\n\t\t.tabulator-table{\r\n\t\t\tposition:relative;\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tbackground-color:$rowBackgroundColor;\r\n\t\t\twhite-space: nowrap;\r\n\t\t\toverflow:visible;\r\n\t\t\tcolor:$rowTextColor;\r\n\r\n\t\t\t//row element\r\n\t\t\t.tabulator-row{\r\n\t\t\t\t&.tabulator-calcs{\r\n\t\t\t\t\tfont-weight: bold;\r\n\t\t\t\t\tbackground:darken($rowAltBackgroundColor, 5%) !important;\r\n\r\n\t\t\t\t\t&.tabulator-calcs-top{\r\n\t\t\t\t\t\tborder-bottom:2px solid $rowBorderColor;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t&.tabulator-calcs-bottom{\r\n\t\t\t\t\t\tborder-top:2px solid $rowBorderColor;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\t}\r\n\r\n\r\n\r\n\t//footer element\r\n\t.tabulator-footer{\r\n\t\tpadding:5px 10px;\r\n\t\tborder-top:1px solid $footerSeperatorColor;\r\n\t\tbackground-color: $footerBackgroundColor;\r\n\t\ttext-align: right;\r\n\t\tcolor: $footerTextColor;\r\n\t\tfont-weight:bold;\r\n\t\twhite-space:nowrap;\r\n\t\tuser-select:none;\r\n\r\n\t\t-moz-user-select: none;\r\n\t\t-khtml-user-select: none;\r\n\t\t-webkit-user-select: none;\r\n\t\t-o-user-select: none;\r\n\r\n\t\t.tabulator-calcs-holder{\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\twidth:calc(100% + 20px);\r\n\t\t\tmargin:-5px -10px 5px -10px;\r\n\r\n\t\t\ttext-align: left;\r\n\r\n\t\t\tbackground:lighten($footerBackgroundColor, 5%) !important;\r\n\r\n\t\t\t.tabulator-row{\r\n\t\t\t\tbackground:lighten($footerBackgroundColor, 5%) !important;\r\n\r\n\t\t\t\t.tabulator-col-resize-handle{\r\n\t\t\t\t\tdisplay: none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tborder-bottom:1px solid $rowBorderColor;\r\n\t\t\tborder-top:1px solid $rowBorderColor;\r\n\r\n\t\t\toverflow: hidden;\r\n\r\n\t\t\t&:only-child{\r\n\t\t\t\tmargin-bottom:-5px;\r\n\t\t\t\tborder-bottom:none;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-paginator{\r\n\t\t\tcolor: $footerTextColor;\r\n\t\t\tfont-family:inherit;\r\n\t\t\tfont-weight:inherit;\r\n\t\t\tfont-size:inherit;\r\n\t\t}\r\n\r\n\t\t//pagination container element\r\n\t\t.tabulator-page-size{\r\n\t\t\tdisplay:inline-block;\r\n\r\n\t\t\tmargin:0 5px;\r\n\t\t\tpadding:2px 5px;\r\n\r\n\t\t\tborder:1px solid $footerBorderColor;\r\n\t\t\tborder-radius:3px;\r\n\t\t}\r\n\r\n\t\t.tabulator-pages{\r\n\t\t\tmargin:0 7px;\r\n\t\t}\r\n\r\n\t\t//pagination button\r\n\t\t.tabulator-page{\r\n\t\t\tdisplay:inline-block;\r\n\r\n\t\t\tmargin:0 2px;\r\n\t\t\tpadding:2px 5px;\r\n\r\n\t\t\tborder:1px solid $footerBorderColor;\r\n\t\t\tborder-radius:3px;\r\n\r\n\t\t\tbackground:rgba(255,255,255,.2);\r\n\r\n\t\t\t&.active{\r\n\t\t\t\tcolor:$footerActiveColor;\r\n\t\t\t}\r\n\r\n\t\t\t&:disabled{\r\n\t\t\t\topacity:.5;\r\n\t\t\t}\r\n\r\n\t\t\t&:not(.disabled){\r\n\t\t\t\t&:hover{\r\n\t\t\t\t\tcursor:pointer;\r\n\t\t\t\t\tbackground:rgba(0,0,0,.2);\r\n\t\t\t\t\tcolor:#fff;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//column resize handles\r\n\t.tabulator-col-resize-handle{\r\n\t\tposition:absolute;\r\n\t\tright:0;\r\n\t\ttop:0;\r\n\t\tbottom:0;\r\n\t\twidth:5px;\r\n\r\n\t\t&.prev{\r\n\t\t\tleft:0;\r\n\t\t\tright:auto;\r\n\t\t}\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:ew-resize;\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t//holding div that contains loader and covers tabulator element to prevent interaction\r\n\t.tabulator-loader{\r\n\t\tposition:absolute;\r\n\t\tdisplay: flex;\r\n\t\talign-items:center;\r\n\r\n\t\ttop:0;\r\n\t\tleft:0;\r\n\t\tz-index:100;\r\n\r\n\t\theight:100%;\r\n\t\twidth:100%;\r\n\t\tbackground:rgba(0,0,0,.4);\r\n\t\ttext-align:center;\r\n\r\n\t\t//loading message element\r\n\t\t.tabulator-loader-msg{\r\n\t\t\tdisplay:inline-block;\r\n\r\n\t\t\tmargin:0 auto;\r\n\t\t\tpadding:10px 20px;\r\n\r\n\t\t\tborder-radius:10px;\r\n\r\n\t\t\tbackground:#fff;\r\n\t\t\tfont-weight:bold;\r\n\t\t\tfont-size:16px;\r\n\r\n\t\t\t//loading message\r\n\t\t\t&.tabulator-loading{\r\n\t\t\t\tborder:4px solid #333;\r\n\t\t\t\tcolor:#000;\r\n\t\t\t}\r\n\r\n\t\t\t//error message\r\n\t\t\t&.tabulator-error{\r\n\t\t\t\tborder:4px solid #D00;\r\n\t\t\t\tcolor:#590000;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\n//row element\r\n.tabulator-row{\r\n\tposition: relative;\r\n\tbox-sizing: border-box;\r\n\tmin-height:$textSize + ($headerMargin * 2);\r\n\tbackground-color: $rowBackgroundColor;\r\n\r\n\r\n\t&.tabulator-row-even{\r\n\t\tbackground-color: $rowAltBackgroundColor;\r\n\t}\r\n\r\n\t&.tabulator-selectable:hover{\r\n\t\tbackground-color:$rowHoverBackground;\r\n\t\tcursor: pointer;\r\n\t}\r\n\r\n\t&.tabulator-selected{\r\n\t\tbackground-color:$rowSelectedBackground;\r\n\t}\r\n\r\n\t&.tabulator-selected:hover{\r\n\t\tbackground-color:$rowSelectedBackgroundHover;\r\n\t\tcursor: pointer;\r\n\t}\r\n\r\n\t&.tabulator-row-moving{\r\n\t\tborder:1px solid #000;\r\n\t\tbackground:#fff;\r\n\t}\r\n\r\n\t&.tabulator-moving{\r\n\t\tposition: absolute;\r\n\r\n\t\tborder-top:1px solid $rowBorderColor;\r\n\t\tborder-bottom:1px solid $rowBorderColor;\r\n\r\n\t\tpointer-events: none;\r\n\t\tz-index:15;\r\n\t}\r\n\r\n\t//row resize handles\r\n\t.tabulator-row-resize-handle{\r\n\t\tposition:absolute;\r\n\t\tright:0;\r\n\t\tbottom:0;\r\n\t\tleft:0;\r\n\t\theight:5px;\r\n\r\n\t\t&.prev{\r\n\t\t\ttop:0;\r\n\t\t\tbottom:auto;\r\n\t\t}\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:ns-resize;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-frozen{\r\n\t\tdisplay: inline-block;\r\n\t\tposition: absolute;\r\n\r\n\t\tbackground-color: inherit;\r\n\r\n\t\tz-index: 10;\r\n\r\n\t\t&.tabulator-frozen-left{\r\n\t\t\tborder-right:2px solid $rowBorderColor;\r\n\t\t}\r\n\r\n\t\t&.tabulator-frozen-right{\r\n\t\t\tborder-left:2px solid $rowBorderColor;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-responsive-collapse{\r\n\t\tbox-sizing:border-box;\r\n\r\n\t\tpadding:5px;\r\n\r\n\t\tborder-top:1px solid $rowBorderColor;\r\n\t\tborder-bottom:1px solid $rowBorderColor;\r\n\r\n\t\t&:empty{\r\n\t\t\tdisplay:none;\r\n\t\t}\r\n\r\n\t\ttable{\r\n\t\t\tfont-size:$textSize;\r\n\r\n\t\t\ttr{\r\n\t\t\t\ttd{\r\n\t\t\t\t\tposition: relative;\r\n\r\n\t\t\t\t\t&:first-of-type{\r\n\t\t\t\t\t\tpadding-right:10px;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//cell element\r\n\t.tabulator-cell{\r\n\t\tdisplay:inline-block;\r\n\t\tposition: relative;\r\n\t\tbox-sizing:border-box;\r\n\t\tpadding:4px;\r\n\t\tborder-right:1px solid $rowBorderColor;\r\n\t\tvertical-align:middle;\r\n\t\twhite-space:nowrap;\r\n\t\toverflow:hidden;\r\n\t\ttext-overflow:ellipsis;\r\n\r\n\t\t&.tabulator-editing{\r\n\t\t\tborder:1px solid $editBoxColor;\r\n\t\t\tpadding: 0;\r\n\r\n\t\t\tinput, select{\r\n\t\t\t\tborder:1px;\r\n\t\t\t\tbackground:transparent;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-validation-fail{\r\n\t\t\tborder:1px solid $errorColor;\r\n\t\t\tinput, select{\r\n\t\t\t\tborder:1px;\r\n\t\t\t\tbackground:transparent;\r\n\r\n\t\t\t\tcolor: $errorColor;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//hide left resize handle on first column\r\n\t\t&:first-child{\r\n\t\t\t.tabulator-col-resize-handle.prev{\r\n\t\t\t\tdisplay: none;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//movable row handle\r\n\t\t&.tabulator-row-handle{\r\n\t\t\tdisplay: inline-flex;\r\n\t\t\talign-items:center;\r\n\t\t\tjustify-content:center;\r\n\r\n\t\t\t-moz-user-select: none;\r\n\t\t\t-khtml-user-select: none;\r\n\t\t\t-webkit-user-select: none;\r\n\t\t\t-o-user-select: none;\r\n\r\n\t\t\t//handle holder\r\n\t\t\t.tabulator-row-handle-box{\r\n\t\t\t\twidth:80%;\r\n\r\n\t\t\t\t//Hamburger element\r\n\t\t\t\t.tabulator-row-handle-bar{\r\n\t\t\t\t\twidth:100%;\r\n\t\t\t\t\theight:3px;\r\n\t\t\t\t\tmargin-top:2px;\r\n\t\t\t\t\tbackground:#666;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-branch{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tvertical-align:middle;\r\n\r\n\t\t\theight:9px;\r\n\t\t\twidth:7px;\r\n\r\n\t\t\tmargin-top:-9px;\r\n\t\t\tmargin-right:5px;\r\n\r\n\t\t\tborder-bottom-left-radius:1px;\r\n\r\n\t\t\tborder-left:2px solid $rowBorderColor;\r\n\t\t\tborder-bottom:2px solid $rowBorderColor;\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-control{\r\n\r\n\t\t\tdisplay:inline-flex;\r\n\t\t\tjustify-content:center;\r\n\t\t\talign-items:center;\r\n\t\t\tvertical-align:middle;\r\n\r\n\t\t\theight:11px;\r\n\t\t\twidth:11px;\r\n\r\n\t\t\tmargin-right:5px;\r\n\r\n\t\t\tborder:1px solid $rowTextColor;\r\n\t\t\tborder-radius:2px;\r\n\t\t\tbackground:rgba(0, 0, 0, .1);\r\n\r\n\t\t\toverflow:hidden;\r\n\r\n\t\t\t&:hover{\r\n\t\t\t\tcursor:pointer;\r\n\t\t\t\tbackground:rgba(0, 0, 0, .2);\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-data-tree-control-collapse{\r\n\t\t\t\tdisplay:inline-block;\r\n\t\t\t\tposition: relative;\r\n\r\n\t\t\t\theight: 7px;\r\n\t\t\t\twidth: 1px;\r\n\r\n\t\t\t\tbackground: transparent;\r\n\r\n\t\t\t\t&:after {\r\n\t\t\t\t\tposition: absolute;\r\n\t\t\t\t\tcontent: \"\";\r\n\t\t\t\t\tleft: -3px;\r\n\t\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\t\theight: 1px;\r\n\t\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-data-tree-control-expand{\r\n\t\t\t\tdisplay:inline-block;\r\n\t\t\t\tposition: relative;\r\n\r\n\t\t\t\theight: 7px;\r\n\t\t\t\twidth: 1px;\r\n\r\n\t\t\t\tbackground: $rowTextColor;\r\n\r\n\t\t\t\t&:after {\r\n\t\t\t\t\tposition: absolute;\r\n\t\t\t\t\tcontent: \"\";\r\n\t\t\t\t\tleft: -3px;\r\n\t\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\t\theight: 1px;\r\n\t\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t.tabulator-responsive-collapse-toggle{\r\n\t\t\tdisplay: inline-flex;\r\n\t\t\talign-items:center;\r\n\t\t\tjustify-content:center;\r\n\r\n\t\t\t-moz-user-select: none;\r\n\t\t\t-khtml-user-select: none;\r\n\t\t\t-webkit-user-select: none;\r\n\t\t\t-o-user-select: none;\r\n\r\n\t\t\theight:15px;\r\n\t\t\twidth:15px;\r\n\r\n\t\t\tborder-radius:20px;\r\n\t\t\tbackground:#666;\r\n\r\n\t\t\tcolor:$rowBackgroundColor;\r\n\t\t\tfont-weight:bold;\r\n\t\t\tfont-size:1.1em;\r\n\r\n\t\t\t&:hover{\r\n\t\t\t\topacity:.7;\r\n\t\t\t}\r\n\r\n\t\t\t&.open{\r\n\t\t\t\t.tabulator-responsive-collapse-toggle-close{\r\n\t\t\t\t\tdisplay:initial;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t.tabulator-responsive-collapse-toggle-open{\r\n\t\t\t\t\tdisplay:none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-responsive-collapse-toggle-close{\r\n\t\t\t\tdisplay:none;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-traffic-light{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\theight:14px;\r\n\t\t\twidth:14px;\r\n\r\n\t\t\tborder-radius:14px;\r\n\t\t}\r\n\t}\r\n\r\n\t//row grouping element\r\n\t&.tabulator-group{\r\n\t\tbox-sizing:border-box;\r\n\t\tborder-bottom:1px solid #999;\r\n\t\tborder-right:1px solid $rowBorderColor;\r\n\t\tborder-top:1px solid #999;\r\n\t\tpadding:5px;\r\n\t\tpadding-left:10px;\r\n\t\tbackground:#ccc;\r\n\t\tfont-weight:bold;\r\n\r\n\t\tmin-width: 100%;\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\t\t\tbackground-color:rgba(0,0,0,.1);\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-visible{\r\n\r\n\t\t\t.tabulator-arrow{\r\n\t\t\t\tmargin-right:10px;\r\n\t\t\t\tborder-left: 6px solid transparent;\r\n\t\t\t\tborder-right: 6px solid transparent;\r\n\t\t\t\tborder-top: 6px solid $sortArrowActive;\r\n\t\t\t\tborder-bottom: 0;\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-1{\r\n\t\t\tpadding-left:30px;\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-2{\r\n\t\t\tpadding-left:50px;\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-3{\r\n\t\t\tpadding-left:70px;\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-4{\r\n\t\t\tpadding-left:90px;\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-5{\r\n\t\t\tpadding-left:110px;\r\n\t\t}\r\n\r\n\t\t.tabulator-group-toggle{\r\n\t\t\tdisplay: inline-block;\r\n\t\t}\r\n\r\n\t\t//sorting arrow\r\n\t\t.tabulator-arrow{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\twidth: 0;\r\n\t\t\theight: 0;\r\n\t\t\tmargin-right:16px;\r\n\t\t\tborder-top: 6px solid transparent;\r\n\t\t\tborder-bottom: 6px solid transparent;\r\n\t\t\tborder-right: 0;\r\n\t\t\tborder-left: 6px solid $sortArrowActive;\r\n\t\t\tvertical-align:middle;\r\n\t\t}\r\n\r\n\t\tspan{\r\n\t\t\tmargin-left:10px;\r\n\t\t\tcolor:#d00;\r\n\t\t}\r\n\t}\r\n\r\n}\r\n\r\n.tabulator-menu{\r\n\tposition: absolute;\r\n\tdisplay:inline-block;\r\n\tbox-sizing:border-box;\r\n\r\n\tbackground:$rowBackgroundColor;\r\n\tborder:1px solid $rowBorderColor;\r\n\tbox-shadow: 0 0 5px 0 rgba(0, 0, 0, .2);\r\n\r\n\tfont-size:$textSize;\r\n\r\n\toverflow-y:auto;\r\n\t-webkit-overflow-scrolling: touch;\r\n\r\n\tz-index: 10000;\r\n\r\n\t.tabulator-menu-item{\r\n\r\n\t\tpadding:5px 10px;\r\n\r\n\t\tuser-select: none;\r\n\r\n\t\t&.tabulator-menu-item-disabled{\r\n\t\t\topacity: .5;\r\n\t\t}\r\n\r\n\t\t&:not(.tabulator-menu-item-disabled):hover{\r\n\t\t\tcursor: pointer;\r\n\t\t\tbackground: $rowAltBackgroundColor;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-menu-separator{\r\n\t\tborder-top:1px solid $rowBorderColor;\r\n\t}\r\n}\r\n\r\n.tabulator-edit-select-list{\r\n\tposition: absolute;\r\n\tdisplay:inline-block;\r\n\tbox-sizing:border-box;\r\n\r\n\tmax-height:200px;\r\n\r\n\tbackground:$rowBackgroundColor;\r\n\tborder:1px solid $rowBorderColor;\r\n\r\n\tfont-size:$textSize;\r\n\r\n\toverflow-y:auto;\r\n\t-webkit-overflow-scrolling: touch;\r\n\r\n\tz-index: 10000;\r\n\r\n\t.tabulator-edit-select-list-item{\r\n\t\tpadding:4px;\r\n\r\n\t\tcolor:$rowTextColor;\r\n\r\n\t\t&.active{\r\n\t\t\tcolor:$rowBackgroundColor;\r\n\t\t\tbackground:$editBoxColor;\r\n\r\n\t\t\t&.focused{\r\n\t\t\t\toutline:1px solid rgba($rowBackgroundColor, .5);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.focused{\r\n\t\t\toutline:1px solid $editBoxColor;\r\n\t\t}\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\r\n\t\t\tcolor:$rowBackgroundColor;\r\n\t\t\tbackground:$editBoxColor;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-edit-select-list-notice{\r\n\t\tpadding:4px;\r\n\r\n\t\tcolor:$rowTextColor;\r\n\t\ttext-align: center;\r\n\t}\r\n\r\n\t.tabulator-edit-select-list-group{\r\n\t\tborder-bottom:1px solid $rowBorderColor;\r\n\r\n\t\tpadding:4px;\r\n\t\tpadding-top:6px;\r\n\r\n\t\tcolor:$rowTextColor;\r\n\t\tfont-weight:bold;\r\n\t}\r\n}\r\n\r\n// Table print styling\r\n\r\n.tabulator-print-fullscreen{\r\n\tposition: absolute;\r\n\ttop:0;\r\n\tbottom:0;\r\n\tleft:0;\r\n\tright:0;\r\n\r\n\tz-index: 10000;\r\n}\r\n\r\nbody.tabulator-print-fullscreen-hide>*:not(.tabulator-print-fullscreen){\r\n\tdisplay:none !important;\r\n}\r\n\r\n.tabulator-print-table{\r\n\tborder-collapse: collapse;\r\n\r\n\t.tabulator-data-tree-branch{\r\n\t\tdisplay:inline-block;\r\n\t\tvertical-align:middle;\r\n\r\n\t\theight:9px;\r\n\t\twidth:7px;\r\n\r\n\t\tmargin-top:-9px;\r\n\t\tmargin-right:5px;\r\n\r\n\t\tborder-bottom-left-radius:1px;\r\n\r\n\t\tborder-left:2px solid $rowBorderColor;\r\n\t\tborder-bottom:2px solid $rowBorderColor;\r\n\t}\r\n\r\n\t//row grouping element\r\n\t.tabulator-print-table-group{\r\n\t\tbox-sizing:border-box;\r\n\t\tborder-bottom:1px solid #999;\r\n\t\tborder-right:1px solid $rowBorderColor;\r\n\t\tborder-top:1px solid #999;\r\n\t\tpadding:5px;\r\n\t\tpadding-left:10px;\r\n\t\tbackground:#ccc;\r\n\t\tfont-weight:bold;\r\n\r\n\t\tmin-width: 100%;\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\t\t\tbackground-color:rgba(0,0,0,.1);\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-visible{\r\n\r\n\t\t\t.tabulator-arrow{\r\n\t\t\t\tmargin-right:10px;\r\n\t\t\t\tborder-left: 6px solid transparent;\r\n\t\t\t\tborder-right: 6px solid transparent;\r\n\t\t\t\tborder-top: 6px solid $sortArrowActive;\r\n\t\t\t\tborder-bottom: 0;\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-1{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:30px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-2{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:50px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-3{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:70px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-4{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:90px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-5{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:110px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-group-toggle{\r\n\t\t\tdisplay: inline-block;\r\n\t\t}\r\n\r\n\t\t//sorting arrow\r\n\t\t.tabulator-arrow{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\twidth: 0;\r\n\t\t\theight: 0;\r\n\t\t\tmargin-right:16px;\r\n\t\t\tborder-top: 6px solid transparent;\r\n\t\t\tborder-bottom: 6px solid transparent;\r\n\t\t\tborder-right: 0;\r\n\t\t\tborder-left: 6px solid $sortArrowActive;\r\n\t\t\tvertical-align:middle;\r\n\t\t}\r\n\r\n\t\tspan{\r\n\t\t\tmargin-left:10px;\r\n\t\t\tcolor:#d00;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-data-tree-control{\r\n\r\n\t\tdisplay:inline-flex;\r\n\t\tjustify-content:center;\r\n\t\talign-items:center;\r\n\t\tvertical-align:middle;\r\n\r\n\t\theight:11px;\r\n\t\twidth:11px;\r\n\r\n\t\tmargin-right:5px;\r\n\r\n\t\tborder:1px solid $rowTextColor;\r\n\t\tborder-radius:2px;\r\n\t\tbackground:rgba(0, 0, 0, .1);\r\n\r\n\t\toverflow:hidden;\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\t\t\tbackground:rgba(0, 0, 0, .2);\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-control-collapse{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tposition: relative;\r\n\r\n\t\t\theight: 7px;\r\n\t\t\twidth: 1px;\r\n\r\n\t\t\tbackground: transparent;\r\n\r\n\t\t\t&:after {\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\tcontent: \"\";\r\n\t\t\t\tleft: -3px;\r\n\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\theight: 1px;\r\n\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-control-expand{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tposition: relative;\r\n\r\n\t\t\theight: 7px;\r\n\t\t\twidth: 1px;\r\n\r\n\t\t\tbackground: $rowTextColor;\r\n\r\n\t\t\t&:after {\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\tcontent: \"\";\r\n\t\t\t\tleft: -3px;\r\n\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\theight: 1px;\r\n\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\n"]} \ No newline at end of file diff --git a/install/bin/electron/resources/app/vendor/tabulator/css/tabulator_site.css b/install/bin/electron/resources/app/vendor/tabulator/css/tabulator_site.css new file mode 100644 index 0000000..7139757 --- /dev/null +++ b/install/bin/electron/resources/app/vendor/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/install/bin/electron/resources/app/vendor/tabulator/css/tabulator_site.min.css b/install/bin/electron/resources/app/vendor/tabulator/css/tabulator_site.min.css new file mode 100644 index 0000000..67f5443 --- /dev/null +++ b/install/bin/electron/resources/app/vendor/tabulator/css/tabulator_site.min.css @@ -0,0 +1 @@ +.tabulator{position:relative;border-bottom:5px solid #293146;background-color:#fff;font-size:14px;text-align:left;overflow:hidden;-ms-transform:translatez(0);transform:translatez(0)}.tabulator[tabulator-layout=fitDataFill] .tabulator-tableHolder .tabulator-table{min-width:100%}.tabulator[tabulator-layout=fitDataTable]{display:inline-block}.tabulator[tabulator-layout=fitColumns] .tabulator-row .tabulator-cell:last-of-type{border-right:none}.tabulator.tabulator-block-select{-webkit-user-select:none;-ms-user-select:none;user-select:none}.tabulator .tabulator-header{position:relative;box-sizing:border-box;width:100%;background-color:#293146;color:#fff;font-weight:700;white-space:nowrap;overflow:hidden;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator .tabulator-header.tabulator-header-hidden{display:none}.tabulator .tabulator-header .tabulator-col{display:inline-block;position:relative;box-sizing:border-box;border-right:1px solid #aaa;background-color:#293146;text-align:left;vertical-align:bottom;overflow:hidden}.tabulator .tabulator-header .tabulator-col.tabulator-moving{position:absolute;background:#090909;pointer-events:none}.tabulator .tabulator-header .tabulator-col .tabulator-col-content{box-sizing:border-box;position:relative;padding:8px}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-menu-button{padding:0 8px}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-menu-button:hover{cursor:pointer;opacity:.6}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title{box-sizing:border-box;width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;vertical-align:bottom}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor{box-sizing:border-box;width:100%;border:1px solid #999;padding:1px;background:#fff}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow{display:inline-block;position:absolute;top:14px;right:8px;width:0;height:0;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #bbb}.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols{position:relative;display:-ms-flexbox;display:flex;border-top:1px solid #aaa;overflow:hidden;margin-right:-1px}.tabulator .tabulator-header .tabulator-col:first-child .tabulator-col-resize-handle.prev{display:none}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter{position:relative;box-sizing:border-box;margin-top:2px;width:100%;text-align:center}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea{height:auto!important}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg{margin-top:3px}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear{width:0;height:0}.tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title{padding-right:25px}.tabulator .tabulator-header .tabulator-col.tabulator-sortable:hover{cursor:pointer;background-color:#090909}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=none] .tabulator-col-content .tabulator-arrow{border-top:none;border-bottom:6px solid #bbb}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=asc] .tabulator-col-content .tabulator-arrow{border-top:none}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=desc] .tabulator-col-content .tabulator-arrow{border-top:6px solid #3fb449;border-bottom:none}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title{-ms-writing-mode:tb-rl;writing-mode:vertical-rl;text-orientation:mixed;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title{-ms-transform:rotate(180deg);transform:rotate(180deg)}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title{padding-right:0;padding-top:20px}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title{padding-right:0;padding-bottom:20px}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-arrow{right:calc(50% - 6px)}.tabulator .tabulator-header .tabulator-frozen{display:inline-block;position:absolute;z-index:10}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left{border-right:2px solid #aaa}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right{border-left:2px solid #aaa}.tabulator .tabulator-header .tabulator-calcs-holder{box-sizing:border-box;min-width:600%;background:#3c3c3c!important;border-top:1px solid #aaa;overflow:hidden}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row{background:#3c3c3c!important}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle{display:none}.tabulator .tabulator-header .tabulator-frozen-rows-holder{min-width:600%}.tabulator .tabulator-header .tabulator-frozen-rows-holder:empty{display:none}.tabulator .tabulator-tableHolder{position:relative;width:100%;white-space:nowrap;overflow:auto;-webkit-overflow-scrolling:touch}.tabulator .tabulator-tableHolder:focus{outline:0}.tabulator .tabulator-tableHolder .tabulator-placeholder{box-sizing:border-box;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;width:100%}.tabulator .tabulator-tableHolder .tabulator-placeholder[tabulator-render-mode=virtual]{min-height:100%;min-width:100%}.tabulator .tabulator-tableHolder .tabulator-placeholder span{display:inline-block;margin:0 auto;padding:10px;color:#3fb449;font-weight:700;font-size:20px}.tabulator .tabulator-tableHolder .tabulator-table{position:relative;display:inline-block;background-color:#fff;white-space:nowrap;overflow:visible;color:#333}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs{font-weight:700;background:#484848!important;color:#fff}.tabulator .tabulator-footer{padding:5px 10px;padding-top:8px;background-color:#293146;text-align:right;color:#293146;font-weight:700;white-space:nowrap;-ms-user-select:none;user-select:none;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator .tabulator-footer .tabulator-calcs-holder{box-sizing:border-box;width:calc(100% + 20px);margin:-8px -10px 8px -10px;text-align:left;background:#3c3c3c!important;border-bottom:1px solid #aaa;overflow:hidden}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row{background:#3c3c3c!important;color:#fff!important}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle{display:none}.tabulator .tabulator-footer .tabulator-calcs-holder:only-child{margin-bottom:-5px;border-bottom:none}.tabulator .tabulator-footer .tabulator-paginator label{color:#fff}.tabulator .tabulator-footer .tabulator-page-size{display:inline-block;margin:0 5px;padding:2px 5px;border:1px solid #aaa;border-radius:3px}.tabulator .tabulator-footer .tabulator-pages{margin:0 7px}.tabulator .tabulator-footer .tabulator-page{display:inline-block;margin:0 2px;padding:2px 5px;border:1px solid #aaa;border-radius:3px;background:#fff;color:#293146;font-family:inherit;font-weight:inherit;font-size:inherit}.tabulator .tabulator-footer .tabulator-page:disabled{opacity:.5}.tabulator .tabulator-footer .tabulator-page:not(.disabled):hover{cursor:pointer;background:rgba(0,0,0,.2);color:#fff}.tabulator .tabulator-col-resize-handle{position:absolute;right:0;top:0;bottom:0;width:5px}.tabulator .tabulator-col-resize-handle.prev{left:0;right:auto}.tabulator .tabulator-col-resize-handle:hover{cursor:ew-resize}.tabulator .tabulator-loader{position:absolute;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;top:0;left:0;z-index:100;height:100%;width:100%;background:rgba(0,0,0,.4);text-align:center}.tabulator .tabulator-loader .tabulator-loader-msg{display:inline-block;margin:0 auto;padding:10px 20px;border-radius:10px;background:#fff;font-weight:700;font-size:16px}.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-loading{border:4px solid #333;color:#000}.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-error{border:4px solid #d00;color:#590000}.tabulator-row{position:relative;box-sizing:border-box;min-height:22px;background-color:#fff}.tabulator-row.tabulator-row-even{background-color:#efefef}.tabulator-row.tabulator-selectable:hover{background-color:#bbb;cursor:pointer}.tabulator-row.tabulator-selected{background-color:#9abcea}.tabulator-row.tabulator-selected:hover{background-color:#769bcc;cursor:pointer}.tabulator-row.tabulator-row-moving{border:1px solid #000;background:#fff}.tabulator-row.tabulator-moving{position:absolute;border-top:1px solid #aaa;border-bottom:1px solid #aaa;pointer-events:none!important;z-index:15}.tabulator-row .tabulator-row-resize-handle{position:absolute;right:0;bottom:0;left:0;height:5px}.tabulator-row .tabulator-row-resize-handle.prev{top:0;bottom:auto}.tabulator-row .tabulator-row-resize-handle:hover{cursor:ns-resize}.tabulator-row .tabulator-frozen{display:inline-block;position:absolute;background-color:inherit;z-index:10}.tabulator-row .tabulator-frozen.tabulator-frozen-left{border-right:2px solid #aaa}.tabulator-row .tabulator-frozen.tabulator-frozen-right{border-left:2px solid #aaa}.tabulator-row .tabulator-responsive-collapse{box-sizing:border-box;padding:5px;border-top:1px solid #aaa;border-bottom:1px solid #aaa}.tabulator-row .tabulator-responsive-collapse:empty{display:none}.tabulator-row .tabulator-responsive-collapse table{font-size:14px}.tabulator-row .tabulator-responsive-collapse table tr td{position:relative}.tabulator-row .tabulator-responsive-collapse table tr td:first-of-type{padding-right:10px}.tabulator-row .tabulator-cell{display:inline-block;position:relative;box-sizing:border-box;padding:6px;border-right:1px solid #aaa;vertical-align:middle;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tabulator-row .tabulator-cell.tabulator-editing{border:1px solid #1d68cd;padding:0}.tabulator-row .tabulator-cell.tabulator-editing input,.tabulator-row .tabulator-cell.tabulator-editing select{border:1px;background:0 0}.tabulator-row .tabulator-cell.tabulator-validation-fail{border:1px solid #d00}.tabulator-row .tabulator-cell.tabulator-validation-fail input,.tabulator-row .tabulator-cell.tabulator-validation-fail select{border:1px;background:0 0;color:#d00}.tabulator-row .tabulator-cell:first-child .tabulator-col-resize-handle.prev{display:none}.tabulator-row .tabulator-cell.tabulator-row-handle{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box{width:80%}.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar{width:100%;height:3px;margin-top:2px;background:#3fb449}.tabulator-row .tabulator-cell .tabulator-data-tree-branch{display:inline-block;vertical-align:middle;height:9px;width:7px;margin-top:-9px;margin-right:5px;border-bottom-left-radius:1px;border-left:2px solid #aaa;border-bottom:2px solid #aaa}.tabulator-row .tabulator-cell .tabulator-data-tree-control{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;vertical-align:middle;height:11px;width:11px;margin-right:5px;border:1px solid #333;border-radius:2px;background:rgba(0,0,0,.1);overflow:hidden}.tabulator-row .tabulator-cell .tabulator-data-tree-control:hover{cursor:pointer;background:rgba(0,0,0,.2)}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse{display:inline-block;position:relative;height:7px;width:1px;background:0 0}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#333}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand{display:inline-block;position:relative;height:7px;width:1px;background:#333}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#333}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none;height:15px;width:15px;border-radius:20px;background:#666;color:#fff;font-weight:700;font-size:1.1em}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover{opacity:.7}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close{display:initial}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open{display:none}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close{display:none}.tabulator-row .tabulator-cell .tabulator-traffic-light{display:inline-block;height:14px;width:14px;border-radius:14px}.tabulator-row.tabulator-group{box-sizing:border-box;border-right:1px solid #aaa;border-top:1px solid #000;padding:5px;padding-left:10px;background:#293146;color:#fff;font-weight:700;min-width:100%}.tabulator-row.tabulator-group:hover{cursor:pointer;background-color:#090909}.tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow{margin-right:10px;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #bbb;border-bottom:0}.tabulator-row.tabulator-group.tabulator-group-level-1{padding-left:30px}.tabulator-row.tabulator-group.tabulator-group-level-2{padding-left:50px}.tabulator-row.tabulator-group.tabulator-group-level-3{padding-left:70px}.tabulator-row.tabulator-group.tabulator-group-level-4{padding-left:90px}.tabulator-row.tabulator-group.tabulator-group-level-5{padding-left:110px}.tabulator-row.tabulator-group .tabulator-group-toggle{display:inline-block}.tabulator-row.tabulator-group .tabulator-arrow{display:inline-block;width:0;height:0;margin-right:16px;border-top:6px solid transparent;border-bottom:6px solid transparent;border-right:0;border-left:6px solid #bbb;vertical-align:middle}.tabulator-row.tabulator-group span{margin-left:10px;color:#bbb}.tabulator-menu{position:absolute;display:inline-block;box-sizing:border-box;background:#fff;border:1px solid #aaa;box-shadow:0 0 5px 0 rgba(0,0,0,.2);font-size:14px;overflow-y:auto;-webkit-overflow-scrolling:touch;z-index:10000}.tabulator-menu .tabulator-menu-item{padding:5px 10px;-webkit-user-select:none;-ms-user-select:none;user-select:none}.tabulator-menu .tabulator-menu-item.tabulator-menu-item-disabled{opacity:.5}.tabulator-menu .tabulator-menu-item:not(.tabulator-menu-item-disabled):hover{cursor:pointer;background:#efefef}.tabulator-menu .tabulator-menu-separator{border-top:1px solid #aaa}.tabulator-edit-select-list{position:absolute;display:inline-block;box-sizing:border-box;max-height:200px;background:#fff;border:1px solid #aaa;font-size:14px;overflow-y:auto;-webkit-overflow-scrolling:touch;z-index:10000}.tabulator-edit-select-list .tabulator-edit-select-list-item{padding:4px;color:#333}.tabulator-edit-select-list .tabulator-edit-select-list-item.active{color:#fff;background:#1d68cd}.tabulator-edit-select-list .tabulator-edit-select-list-item.active.focused{outline:1px solid rgba(255,255,255,.5)}.tabulator-edit-select-list .tabulator-edit-select-list-item.focused{outline:1px solid #1d68cd}.tabulator-edit-select-list .tabulator-edit-select-list-item:hover{cursor:pointer;color:#fff;background:#1d68cd}.tabulator-edit-select-list .tabulator-edit-select-list-notice{padding:4px;color:#333;text-align:center}.tabulator-edit-select-list .tabulator-edit-select-list-group{border-bottom:1px solid #aaa;padding:4px;padding-top:6px;color:#333;font-weight:700}.tabulator-print-fullscreen{position:absolute;top:0;bottom:0;left:0;right:0;z-index:10000}body.tabulator-print-fullscreen-hide>:not(.tabulator-print-fullscreen){display:none!important}.tabulator-print-table{border-collapse:collapse}.tabulator-print-table .tabulator-print-table-group{box-sizing:border-box;border-right:1px solid #aaa;border-top:1px solid #000;border-bottom:2px solid #3fb449;padding:5px;padding-left:10px;background:#293146;color:#fff;font-weight:700;min-width:100%}.tabulator-print-table .tabulator-print-table-group:hover{cursor:pointer;background-color:#090909}.tabulator-print-table .tabulator-print-table-group.tabulator-group-visible .tabulator-arrow{margin-right:10px;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #3fb449;border-bottom:0}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-1 td{padding-left:30px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-2 td{padding-left:50px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-3 td{padding-left:70px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-4 td{padding-left:90px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-5 td{padding-left:110px!important}.tabulator-print-table .tabulator-print-table-group .tabulator-group-toggle{display:inline-block}.tabulator-print-table .tabulator-print-table-group .tabulator-arrow{display:inline-block;width:0;height:0;margin-right:16px;border-top:6px solid transparent;border-bottom:6px solid transparent;border-right:0;border-left:6px solid #3fb449;vertical-align:middle}.tabulator-print-table .tabulator-print-table-group span{margin-left:10px;color:#3fb449}.tabulator-print-table .tabulator-data-tree-branch{display:inline-block;vertical-align:middle;height:9px;width:7px;margin-top:-9px;margin-right:5px;border-bottom-left-radius:1px;border-left:2px solid #aaa;border-bottom:2px solid #aaa}.tabulator-print-table .tabulator-data-tree-control{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;vertical-align:middle;height:11px;width:11px;margin-right:5px;border:1px solid #333;border-radius:2px;background:rgba(0,0,0,.1);overflow:hidden}.tabulator-print-table .tabulator-data-tree-control:hover{cursor:pointer;background:rgba(0,0,0,.2)}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse{display:inline-block;position:relative;height:7px;width:1px;background:0 0}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#333}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand{display:inline-block;position:relative;height:7px;width:1px;background:#333}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#333} \ No newline at end of file diff --git a/install/bin/electron/resources/app/vendor/tabulator/css/tabulator_site.min.css.map b/install/bin/electron/resources/app/vendor/tabulator/css/tabulator_site.min.css.map new file mode 100644 index 0000000..6970f0b --- /dev/null +++ b/install/bin/electron/resources/app/vendor/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/install/bin/electron/resources/app/vendor/tabulator/css/tabulator_site.min.orig.css b/install/bin/electron/resources/app/vendor/tabulator/css/tabulator_site.min.orig.css new file mode 100644 index 0000000..2fc522d --- /dev/null +++ b/install/bin/electron/resources/app/vendor/tabulator/css/tabulator_site.min.orig.css @@ -0,0 +1,3 @@ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ +.tabulator{position:relative;border-bottom:5px solid #222;background-color:#fff;font-size:14px;text-align:left;overflow:hidden;transform:translatez(0)}.tabulator[tabulator-layout=fitDataFill] .tabulator-tableHolder .tabulator-table{min-width:100%}.tabulator[tabulator-layout=fitDataTable]{display:inline-block}.tabulator[tabulator-layout=fitColumns] .tabulator-row .tabulator-cell:last-of-type{border-right:none}.tabulator.tabulator-block-select{-webkit-user-select:none;-ms-user-select:none;user-select:none}.tabulator .tabulator-header{position:relative;box-sizing:border-box;width:100%;border-bottom:3px solid #3fb449;background-color:#222;color:#fff;font-weight:700;white-space:nowrap;overflow:hidden;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator .tabulator-header.tabulator-header-hidden{display:none}.tabulator .tabulator-header .tabulator-col{display:inline-block;position:relative;box-sizing:border-box;border-right:1px solid #aaa;background-color:#222;text-align:left;vertical-align:bottom;overflow:hidden}.tabulator .tabulator-header .tabulator-col.tabulator-moving{position:absolute;border:1px solid #3fb449;background:#090909;pointer-events:none}.tabulator .tabulator-header .tabulator-col .tabulator-col-content{box-sizing:border-box;position:relative;padding:8px}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-menu-button{padding:0 8px}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-menu-button:hover{cursor:pointer;opacity:.6}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title{box-sizing:border-box;width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;vertical-align:bottom}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor{box-sizing:border-box;width:100%;border:1px solid #999;padding:1px;background:#fff}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow{display:inline-block;position:absolute;top:14px;right:8px;width:0;height:0;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #bbb}.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols{position:relative;display:-ms-flexbox;display:flex;border-top:1px solid #aaa;overflow:hidden;margin-right:-1px}.tabulator .tabulator-header .tabulator-col:first-child .tabulator-col-resize-handle.prev{display:none}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter{position:relative;box-sizing:border-box;margin-top:2px;width:100%;text-align:center}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea{height:auto!important}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg{margin-top:3px}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear{width:0;height:0}.tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title{padding-right:25px}.tabulator .tabulator-header .tabulator-col.tabulator-sortable:hover{cursor:pointer;background-color:#090909}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=none] .tabulator-col-content .tabulator-arrow{border-top:none;border-bottom:6px solid #bbb}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=asc] .tabulator-col-content .tabulator-arrow{border-top:none;border-bottom:6px solid #3fb449}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=desc] .tabulator-col-content .tabulator-arrow{border-top:6px solid #3fb449;border-bottom:none}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title{-ms-writing-mode:tb-rl;writing-mode:vertical-rl;text-orientation:mixed;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title{transform:rotate(180deg)}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title{padding-right:0;padding-top:20px}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title{padding-right:0;padding-bottom:20px}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-arrow{right:calc(50% - 6px)}.tabulator .tabulator-header .tabulator-frozen{display:inline-block;position:absolute;z-index:10}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left{border-right:2px solid #aaa}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right{border-left:2px solid #aaa}.tabulator .tabulator-header .tabulator-calcs-holder{box-sizing:border-box;min-width:600%;background:#3c3c3c!important;border-top:1px solid #aaa;overflow:hidden}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row{background:#3c3c3c!important}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle{display:none}.tabulator .tabulator-header .tabulator-frozen-rows-holder{min-width:600%}.tabulator .tabulator-header .tabulator-frozen-rows-holder:empty{display:none}.tabulator .tabulator-tableHolder{position:relative;width:100%;white-space:nowrap;overflow:auto;-webkit-overflow-scrolling:touch}.tabulator .tabulator-tableHolder:focus{outline:none}.tabulator .tabulator-tableHolder .tabulator-placeholder{box-sizing:border-box;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;width:100%}.tabulator .tabulator-tableHolder .tabulator-placeholder[tabulator-render-mode=virtual]{min-height:100%;min-width:100%}.tabulator .tabulator-tableHolder .tabulator-placeholder span{display:inline-block;margin:0 auto;padding:10px;color:#3fb449;font-weight:700;font-size:20px}.tabulator .tabulator-tableHolder .tabulator-table{position:relative;display:inline-block;background-color:#fff;white-space:nowrap;overflow:visible;color:#333}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs{font-weight:700;background:#484848!important;color:#fff}.tabulator .tabulator-footer{padding:5px 10px;padding-top:8px;border-top:3px solid #3fb449;background-color:#222;text-align:right;color:#222;font-weight:700;white-space:nowrap;-ms-user-select:none;user-select:none;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator .tabulator-footer .tabulator-calcs-holder{box-sizing:border-box;width:calc(100% + 20px);margin:-8px -10px 8px;text-align:left;background:#3c3c3c!important;border-bottom:1px solid #aaa;overflow:hidden}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row{background:#3c3c3c!important;color:#fff!important}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle{display:none}.tabulator .tabulator-footer .tabulator-calcs-holder:only-child{margin-bottom:-5px;border-bottom:none}.tabulator .tabulator-footer .tabulator-paginator label{color:#fff}.tabulator .tabulator-footer .tabulator-page-size{display:inline-block;margin:0 5px;padding:2px 5px;border:1px solid #aaa;border-radius:3px}.tabulator .tabulator-footer .tabulator-pages{margin:0 7px}.tabulator .tabulator-footer .tabulator-page{display:inline-block;margin:0 2px;padding:2px 5px;border:1px solid #aaa;border-radius:3px;background:#fff;color:#222;font-family:inherit;font-weight:inherit;font-size:inherit}.tabulator .tabulator-footer .tabulator-page.active{color:#3fb449}.tabulator .tabulator-footer .tabulator-page:disabled{opacity:.5}.tabulator .tabulator-footer .tabulator-page:not(.disabled):hover{cursor:pointer;background:rgba(0,0,0,.2);color:#fff}.tabulator .tabulator-col-resize-handle{position:absolute;right:0;top:0;bottom:0;width:5px}.tabulator .tabulator-col-resize-handle.prev{left:0;right:auto}.tabulator .tabulator-col-resize-handle:hover{cursor:ew-resize}.tabulator .tabulator-loader{position:absolute;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;top:0;left:0;z-index:100;height:100%;width:100%;background:rgba(0,0,0,.4);text-align:center}.tabulator .tabulator-loader .tabulator-loader-msg{display:inline-block;margin:0 auto;padding:10px 20px;border-radius:10px;background:#fff;font-weight:700;font-size:16px}.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-loading{border:4px solid #333;color:#000}.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-error{border:4px solid #d00;color:#590000}.tabulator-row{position:relative;box-sizing:border-box;min-height:22px;background-color:#fff}.tabulator-row.tabulator-row-even{background-color:#efefef}.tabulator-row.tabulator-selectable:hover{background-color:#bbb;cursor:pointer}.tabulator-row.tabulator-selected{background-color:#9abcea}.tabulator-row.tabulator-selected:hover{background-color:#769bcc;cursor:pointer}.tabulator-row.tabulator-row-moving{border:1px solid #000;background:#fff}.tabulator-row.tabulator-moving{position:absolute;border-top:1px solid #aaa;border-bottom:1px solid #aaa;pointer-events:none!important;z-index:15}.tabulator-row .tabulator-row-resize-handle{position:absolute;right:0;bottom:0;left:0;height:5px}.tabulator-row .tabulator-row-resize-handle.prev{top:0;bottom:auto}.tabulator-row .tabulator-row-resize-handle:hover{cursor:ns-resize}.tabulator-row .tabulator-frozen{display:inline-block;position:absolute;background-color:inherit;z-index:10}.tabulator-row .tabulator-frozen.tabulator-frozen-left{border-right:2px solid #aaa}.tabulator-row .tabulator-frozen.tabulator-frozen-right{border-left:2px solid #aaa}.tabulator-row .tabulator-responsive-collapse{box-sizing:border-box;padding:5px;border-top:1px solid #aaa;border-bottom:1px solid #aaa}.tabulator-row .tabulator-responsive-collapse:empty{display:none}.tabulator-row .tabulator-responsive-collapse table{font-size:14px}.tabulator-row .tabulator-responsive-collapse table tr td{position:relative}.tabulator-row .tabulator-responsive-collapse table tr td:first-of-type{padding-right:10px}.tabulator-row .tabulator-cell{display:inline-block;position:relative;box-sizing:border-box;padding:6px;border-right:1px solid #aaa;vertical-align:middle;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tabulator-row .tabulator-cell.tabulator-editing{border:1px solid #1d68cd;padding:0}.tabulator-row .tabulator-cell.tabulator-editing input,.tabulator-row .tabulator-cell.tabulator-editing select{border:1px;background:transparent}.tabulator-row .tabulator-cell.tabulator-validation-fail{border:1px solid #d00}.tabulator-row .tabulator-cell.tabulator-validation-fail input,.tabulator-row .tabulator-cell.tabulator-validation-fail select{border:1px;background:transparent;color:#d00}.tabulator-row .tabulator-cell:first-child .tabulator-col-resize-handle.prev{display:none}.tabulator-row .tabulator-cell.tabulator-row-handle{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box{width:80%}.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar{width:100%;height:3px;margin-top:2px;background:#3fb449}.tabulator-row .tabulator-cell .tabulator-data-tree-branch{display:inline-block;vertical-align:middle;height:9px;width:7px;margin-top:-9px;margin-right:5px;border-bottom-left-radius:1px;border-left:2px solid #aaa;border-bottom:2px solid #aaa}.tabulator-row .tabulator-cell .tabulator-data-tree-control{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;vertical-align:middle;height:11px;width:11px;margin-right:5px;border:1px solid #333;border-radius:2px;background:rgba(0,0,0,.1);overflow:hidden}.tabulator-row .tabulator-cell .tabulator-data-tree-control:hover{cursor:pointer;background:rgba(0,0,0,.2)}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse{display:inline-block;position:relative;height:7px;width:1px;background:transparent}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#333}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand{display:inline-block;position:relative;height:7px;width:1px;background:#333}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#333}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none;height:15px;width:15px;border-radius:20px;background:#666;color:#fff;font-weight:700;font-size:1.1em}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover{opacity:.7}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close{display:initial}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open,.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close{display:none}.tabulator-row .tabulator-cell .tabulator-traffic-light{display:inline-block;height:14px;width:14px;border-radius:14px}.tabulator-row.tabulator-group{box-sizing:border-box;border-right:1px solid #aaa;border-top:1px solid #000;border-bottom:2px solid #3fb449;padding:5px;padding-left:10px;background:#222;color:#fff;font-weight:700;min-width:100%}.tabulator-row.tabulator-group:hover{cursor:pointer;background-color:#090909}.tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow{margin-right:10px;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #3fb449;border-bottom:0}.tabulator-row.tabulator-group.tabulator-group-level-1{padding-left:30px}.tabulator-row.tabulator-group.tabulator-group-level-2{padding-left:50px}.tabulator-row.tabulator-group.tabulator-group-level-3{padding-left:70px}.tabulator-row.tabulator-group.tabulator-group-level-4{padding-left:90px}.tabulator-row.tabulator-group.tabulator-group-level-5{padding-left:110px}.tabulator-row.tabulator-group .tabulator-group-toggle{display:inline-block}.tabulator-row.tabulator-group .tabulator-arrow{display:inline-block;width:0;height:0;margin-right:16px;border-top:6px solid transparent;border-bottom:6px solid transparent;border-right:0;border-left:6px solid #3fb449;vertical-align:middle}.tabulator-row.tabulator-group span{margin-left:10px;color:#3fb449}.tabulator-menu{position:absolute;display:inline-block;box-sizing:border-box;background:#fff;border:1px solid #aaa;box-shadow:0 0 5px 0 rgba(0,0,0,.2);font-size:14px;overflow-y:auto;-webkit-overflow-scrolling:touch;z-index:10000}.tabulator-menu .tabulator-menu-item{padding:5px 10px;-webkit-user-select:none;-ms-user-select:none;user-select:none}.tabulator-menu .tabulator-menu-item.tabulator-menu-item-disabled{opacity:.5}.tabulator-menu .tabulator-menu-item:not(.tabulator-menu-item-disabled):hover{cursor:pointer;background:#efefef}.tabulator-menu .tabulator-menu-separator{border-top:1px solid #aaa}.tabulator-edit-select-list{position:absolute;display:inline-block;box-sizing:border-box;max-height:200px;background:#fff;border:1px solid #aaa;font-size:14px;overflow-y:auto;-webkit-overflow-scrolling:touch;z-index:10000}.tabulator-edit-select-list .tabulator-edit-select-list-item{padding:4px;color:#333}.tabulator-edit-select-list .tabulator-edit-select-list-item.active{color:#fff;background:#1d68cd}.tabulator-edit-select-list .tabulator-edit-select-list-item.active.focused{outline:1px solid hsla(0,0%,100%,.5)}.tabulator-edit-select-list .tabulator-edit-select-list-item.focused{outline:1px solid #1d68cd}.tabulator-edit-select-list .tabulator-edit-select-list-item:hover{cursor:pointer;color:#fff;background:#1d68cd}.tabulator-edit-select-list .tabulator-edit-select-list-notice{padding:4px;color:#333;text-align:center}.tabulator-edit-select-list .tabulator-edit-select-list-group{border-bottom:1px solid #aaa;padding:4px;padding-top:6px;color:#333;font-weight:700}.tabulator-print-fullscreen{position:absolute;top:0;bottom:0;left:0;right:0;z-index:10000}body.tabulator-print-fullscreen-hide>:not(.tabulator-print-fullscreen){display:none!important}.tabulator-print-table{border-collapse:collapse}.tabulator-print-table .tabulator-print-table-group{box-sizing:border-box;border-right:1px solid #aaa;border-top:1px solid #000;border-bottom:2px solid #3fb449;padding:5px;padding-left:10px;background:#222;color:#fff;font-weight:700;min-width:100%}.tabulator-print-table .tabulator-print-table-group:hover{cursor:pointer;background-color:#090909}.tabulator-print-table .tabulator-print-table-group.tabulator-group-visible .tabulator-arrow{margin-right:10px;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #3fb449;border-bottom:0}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-1 td{padding-left:30px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-2 td{padding-left:50px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-3 td{padding-left:70px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-4 td{padding-left:90px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-5 td{padding-left:110px!important}.tabulator-print-table .tabulator-print-table-group .tabulator-group-toggle{display:inline-block}.tabulator-print-table .tabulator-print-table-group .tabulator-arrow{display:inline-block;width:0;height:0;margin-right:16px;border-top:6px solid transparent;border-bottom:6px solid transparent;border-right:0;border-left:6px solid #3fb449;vertical-align:middle}.tabulator-print-table .tabulator-print-table-group span{margin-left:10px;color:#3fb449}.tabulator-print-table .tabulator-data-tree-branch{display:inline-block;vertical-align:middle;height:9px;width:7px;margin-top:-9px;margin-right:5px;border-bottom-left-radius:1px;border-left:2px solid #aaa;border-bottom:2px solid #aaa}.tabulator-print-table .tabulator-data-tree-control{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;vertical-align:middle;height:11px;width:11px;margin-right:5px;border:1px solid #333;border-radius:2px;background:rgba(0,0,0,.1);overflow:hidden}.tabulator-print-table .tabulator-data-tree-control:hover{cursor:pointer;background:rgba(0,0,0,.2)}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse{display:inline-block;position:relative;height:7px;width:1px;background:transparent}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#333}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand{display:inline-block;position:relative;height:7px;width:1px;background:#333}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#333} +/*# sourceMappingURL=tabulator_site.min.css.map */ diff --git a/install/bin/electron/resources/app/vendor/tabulator/js/modules/accessor.js b/install/bin/electron/resources/app/vendor/tabulator/js/modules/accessor.js new file mode 100644 index 0000000..8ffe1bf --- /dev/null +++ b/install/bin/electron/resources/app/vendor/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/install/bin/electron/resources/app/vendor/tabulator/js/modules/accessor.min.js b/install/bin/electron/resources/app/vendor/tabulator/js/modules/accessor.min.js new file mode 100644 index 0000000..2633b8f --- /dev/null +++ b/install/bin/electron/resources/app/vendor/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/install/bin/electron/resources/app/vendor/tabulator/js/modules/ajax.js b/install/bin/electron/resources/app/vendor/tabulator/js/modules/ajax.js new file mode 100644 index 0000000..7d72604 --- /dev/null +++ b/install/bin/electron/resources/app/vendor/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/install/bin/electron/resources/app/vendor/tabulator/js/modules/ajax.min.js b/install/bin/electron/resources/app/vendor/tabulator/js/modules/ajax.min.js new file mode 100644 index 0000000..a5dae29 --- /dev/null +++ b/install/bin/electron/resources/app/vendor/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/install/bin/electron/resources/app/vendor/tabulator/js/modules/calculation_colums.min.js b/install/bin/electron/resources/app/vendor/tabulator/js/modules/calculation_colums.min.js new file mode 100644 index 0000000..33464d5 --- /dev/null +++ b/install/bin/electron/resources/app/vendor/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/install/bin/electron/resources/app/vendor/tabulator/js/modules/download.js b/install/bin/electron/resources/app/vendor/tabulator/js/modules/download.js new file mode 100644 index 0000000..9954910 --- /dev/null +++ b/install/bin/electron/resources/app/vendor/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/install/bin/electron/resources/app/vendor/tabulator/js/modules/download.min.js b/install/bin/electron/resources/app/vendor/tabulator/js/modules/download.min.js new file mode 100644 index 0000000..b3b776c --- /dev/null +++ b/install/bin/electron/resources/app/vendor/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/install/bin/electron/resources/app/vendor/tabulator/js/modules/edit.js b/install/bin/electron/resources/app/vendor/tabulator/js/modules/edit.js new file mode 100644 index 0000000..e35dd84 --- /dev/null +++ b/install/bin/electron/resources/app/vendor/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/install/bin/electron/resources/app/vendor/tabulator/js/modules/edit.min.js b/install/bin/electron/resources/app/vendor/tabulator/js/modules/edit.min.js new file mode 100644 index 0000000..8e256be --- /dev/null +++ b/install/bin/electron/resources/app/vendor/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/install/bin/electron/resources/app/vendor/tabulator/js/modules/export.js b/install/bin/electron/resources/app/vendor/tabulator/js/modules/export.js new file mode 100644 index 0000000..18d3f6c --- /dev/null +++ b/install/bin/electron/resources/app/vendor/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/install/bin/electron/resources/app/vendor/tabulator/js/modules/export.min.js b/install/bin/electron/resources/app/vendor/tabulator/js/modules/export.min.js new file mode 100644 index 0000000..d0dcccd --- /dev/null +++ b/install/bin/electron/resources/app/vendor/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/install/bin/electron/resources/app/vendor/tabulator/js/modules/filter.js b/install/bin/electron/resources/app/vendor/tabulator/js/modules/filter.js new file mode 100644 index 0000000..aaed59b --- /dev/null +++ b/install/bin/electron/resources/app/vendor/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/install/bin/electron/resources/app/vendor/tabulator/js/modules/filter.min.js b/install/bin/electron/resources/app/vendor/tabulator/js/modules/filter.min.js new file mode 100644 index 0000000..8be2662 --- /dev/null +++ b/install/bin/electron/resources/app/vendor/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/install/bin/electron/resources/app/vendor/tabulator/js/modules/format.js b/install/bin/electron/resources/app/vendor/tabulator/js/modules/format.js new file mode 100644 index 0000000..5714027 --- /dev/null +++ b/install/bin/electron/resources/app/vendor/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/install/bin/electron/resources/app/vendor/tabulator/js/modules/format.min.js b/install/bin/electron/resources/app/vendor/tabulator/js/modules/format.min.js new file mode 100644 index 0000000..0b39b61 --- /dev/null +++ b/install/bin/electron/resources/app/vendor/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/install/bin/electron/resources/app/vendor/tabulator/js/modules/frozen_columns.js b/install/bin/electron/resources/app/vendor/tabulator/js/modules/frozen_columns.js new file mode 100644 index 0000000..fdbc4ab --- /dev/null +++ b/install/bin/electron/resources/app/vendor/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/install/bin/electron/resources/app/vendor/tabulator/js/modules/frozen_columns.min.js b/install/bin/electron/resources/app/vendor/tabulator/js/modules/frozen_columns.min.js new file mode 100644 index 0000000..bf2bb60 --- /dev/null +++ b/install/bin/electron/resources/app/vendor/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/install/bin/electron/resources/app/vendor/tabulator/js/modules/frozen_rows.min.js b/install/bin/electron/resources/app/vendor/tabulator/js/modules/frozen_rows.min.js new file mode 100644 index 0000000..c38e992 --- /dev/null +++ b/install/bin/electron/resources/app/vendor/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/install/bin/electron/resources/app/vendor/tabulator/js/modules/group_rows.js b/install/bin/electron/resources/app/vendor/tabulator/js/modules/group_rows.js new file mode 100644 index 0000000..05731ec --- /dev/null +++ b/install/bin/electron/resources/app/vendor/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/install/bin/electron/resources/app/vendor/tabulator/js/modules/group_rows.min.js b/install/bin/electron/resources/app/vendor/tabulator/js/modules/group_rows.min.js new file mode 100644 index 0000000..6039f2c --- /dev/null +++ b/install/bin/electron/resources/app/vendor/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/install/bin/electron/resources/app/vendor/tabulator/js/modules/history.js b/install/bin/electron/resources/app/vendor/tabulator/js/modules/history.js new file mode 100644 index 0000000..1c3ae3e --- /dev/null +++ b/install/bin/electron/resources/app/vendor/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/install/bin/electron/resources/app/vendor/tabulator/js/modules/history.min.js b/install/bin/electron/resources/app/vendor/tabulator/js/modules/history.min.js new file mode 100644 index 0000000..5df3187 --- /dev/null +++ b/install/bin/electron/resources/app/vendor/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/install/bin/electron/resources/app/vendor/tabulator/js/modules/html_table_import.js b/install/bin/electron/resources/app/vendor/tabulator/js/modules/html_table_import.js new file mode 100644 index 0000000..34fed7c --- /dev/null +++ b/install/bin/electron/resources/app/vendor/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/install/bin/electron/resources/app/vendor/tabulator/js/modules/html_table_import.min.js b/install/bin/electron/resources/app/vendor/tabulator/js/modules/html_table_import.min.js new file mode 100644 index 0000000..aef2b5c --- /dev/null +++ b/install/bin/electron/resources/app/vendor/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/install/bin/electron/resources/app/vendor/tabulator/js/modules/keybindings.min.js b/install/bin/electron/resources/app/vendor/tabulator/js/modules/keybindings.min.js new file mode 100644 index 0000000..3535b88 --- /dev/null +++ b/install/bin/electron/resources/app/vendor/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/install/bin/electron/resources/app/vendor/tabulator/js/modules/menu.js b/install/bin/electron/resources/app/vendor/tabulator/js/modules/menu.js new file mode 100644 index 0000000..d86575f --- /dev/null +++ b/install/bin/electron/resources/app/vendor/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/install/bin/electron/resources/app/vendor/tabulator/js/modules/menu.min.js b/install/bin/electron/resources/app/vendor/tabulator/js/modules/menu.min.js new file mode 100644 index 0000000..40b8241 --- /dev/null +++ b/install/bin/electron/resources/app/vendor/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/install/bin/electron/resources/app/vendor/tabulator/js/modules/moveable_columns.js b/install/bin/electron/resources/app/vendor/tabulator/js/modules/moveable_columns.js new file mode 100644 index 0000000..5244016 --- /dev/null +++ b/install/bin/electron/resources/app/vendor/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/install/bin/electron/resources/app/vendor/tabulator/js/modules/moveable_columns.min.js b/install/bin/electron/resources/app/vendor/tabulator/js/modules/moveable_columns.min.js new file mode 100644 index 0000000..0135a3b --- /dev/null +++ b/install/bin/electron/resources/app/vendor/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/install/bin/electron/resources/app/vendor/tabulator/js/modules/moveable_rows.min.js b/install/bin/electron/resources/app/vendor/tabulator/js/modules/moveable_rows.min.js new file mode 100644 index 0000000..f928535 --- /dev/null +++ b/install/bin/electron/resources/app/vendor/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/install/bin/electron/resources/app/vendor/tabulator/js/modules/mutator.js b/install/bin/electron/resources/app/vendor/tabulator/js/modules/mutator.js new file mode 100644 index 0000000..e5b5dad --- /dev/null +++ b/install/bin/electron/resources/app/vendor/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/install/bin/electron/resources/app/vendor/tabulator/js/modules/mutator.min.js b/install/bin/electron/resources/app/vendor/tabulator/js/modules/mutator.min.js new file mode 100644 index 0000000..00005d1 --- /dev/null +++ b/install/bin/electron/resources/app/vendor/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/install/bin/electron/resources/app/vendor/tabulator/js/modules/page.js b/install/bin/electron/resources/app/vendor/tabulator/js/modules/page.js new file mode 100644 index 0000000..d37b814 --- /dev/null +++ b/install/bin/electron/resources/app/vendor/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/install/bin/electron/resources/app/vendor/tabulator/js/modules/page.min.js b/install/bin/electron/resources/app/vendor/tabulator/js/modules/page.min.js new file mode 100644 index 0000000..c2835ba --- /dev/null +++ b/install/bin/electron/resources/app/vendor/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/install/bin/electron/resources/app/vendor/tabulator/js/modules/persistence.min.js b/install/bin/electron/resources/app/vendor/tabulator/js/modules/persistence.min.js new file mode 100644 index 0000000..8d87ab3 --- /dev/null +++ b/install/bin/electron/resources/app/vendor/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/install/bin/electron/resources/app/vendor/tabulator/js/modules/print.js b/install/bin/electron/resources/app/vendor/tabulator/js/modules/print.js new file mode 100644 index 0000000..940f1a9 --- /dev/null +++ b/install/bin/electron/resources/app/vendor/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/install/bin/electron/resources/app/vendor/tabulator/js/modules/print.min.js b/install/bin/electron/resources/app/vendor/tabulator/js/modules/print.min.js new file mode 100644 index 0000000..b46279c --- /dev/null +++ b/install/bin/electron/resources/app/vendor/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/install/bin/electron/resources/app/vendor/tabulator/js/modules/reactive_data.js b/install/bin/electron/resources/app/vendor/tabulator/js/modules/reactive_data.js new file mode 100644 index 0000000..eb73971 --- /dev/null +++ b/install/bin/electron/resources/app/vendor/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/install/bin/electron/resources/app/vendor/tabulator/js/modules/reactive_data.min.js b/install/bin/electron/resources/app/vendor/tabulator/js/modules/reactive_data.min.js new file mode 100644 index 0000000..c5dc047 --- /dev/null +++ b/install/bin/electron/resources/app/vendor/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/install/bin/electron/resources/app/vendor/tabulator/js/modules/resize_columns.js b/install/bin/electron/resources/app/vendor/tabulator/js/modules/resize_columns.js new file mode 100644 index 0000000..753c02b --- /dev/null +++ b/install/bin/electron/resources/app/vendor/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/install/bin/electron/resources/app/vendor/tabulator/js/modules/resize_columns.min.js b/install/bin/electron/resources/app/vendor/tabulator/js/modules/resize_columns.min.js new file mode 100644 index 0000000..7ae0e38 --- /dev/null +++ b/install/bin/electron/resources/app/vendor/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/install/bin/electron/resources/app/vendor/tabulator/js/modules/resize_rows.js b/install/bin/electron/resources/app/vendor/tabulator/js/modules/resize_rows.js new file mode 100644 index 0000000..8d39fcd --- /dev/null +++ b/install/bin/electron/resources/app/vendor/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/install/bin/electron/resources/app/vendor/tabulator/js/modules/resize_rows.min.js b/install/bin/electron/resources/app/vendor/tabulator/js/modules/resize_rows.min.js new file mode 100644 index 0000000..fb0db00 --- /dev/null +++ b/install/bin/electron/resources/app/vendor/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/install/bin/electron/resources/app/vendor/tabulator/js/modules/resize_table.js b/install/bin/electron/resources/app/vendor/tabulator/js/modules/resize_table.js new file mode 100644 index 0000000..1286641 --- /dev/null +++ b/install/bin/electron/resources/app/vendor/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/install/bin/electron/resources/app/vendor/tabulator/js/modules/resize_table.min.js b/install/bin/electron/resources/app/vendor/tabulator/js/modules/resize_table.min.js new file mode 100644 index 0000000..e992d75 --- /dev/null +++ b/install/bin/electron/resources/app/vendor/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/install/bin/electron/resources/app/vendor/tabulator/js/modules/responsive_layout.js b/install/bin/electron/resources/app/vendor/tabulator/js/modules/responsive_layout.js new file mode 100644 index 0000000..329f2a6 --- /dev/null +++ b/install/bin/electron/resources/app/vendor/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/install/bin/electron/resources/app/vendor/tabulator/js/modules/responsive_layout.min.js b/install/bin/electron/resources/app/vendor/tabulator/js/modules/responsive_layout.min.js new file mode 100644 index 0000000..4ef6538 --- /dev/null +++ b/install/bin/electron/resources/app/vendor/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/install/bin/electron/resources/app/vendor/tabulator/js/modules/select_row.js b/install/bin/electron/resources/app/vendor/tabulator/js/modules/select_row.js new file mode 100644 index 0000000..2869429 --- /dev/null +++ b/install/bin/electron/resources/app/vendor/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/install/bin/electron/resources/app/vendor/tabulator/js/modules/select_row.min.js b/install/bin/electron/resources/app/vendor/tabulator/js/modules/select_row.min.js new file mode 100644 index 0000000..488d7e6 --- /dev/null +++ b/install/bin/electron/resources/app/vendor/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/install/bin/electron/resources/app/vendor/tabulator/js/modules/sort.js b/install/bin/electron/resources/app/vendor/tabulator/js/modules/sort.js new file mode 100644 index 0000000..2422968 --- /dev/null +++ b/install/bin/electron/resources/app/vendor/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/install/bin/electron/resources/app/vendor/tabulator/js/modules/sort.min.js b/install/bin/electron/resources/app/vendor/tabulator/js/modules/sort.min.js new file mode 100644 index 0000000..d0b4cb0 --- /dev/null +++ b/install/bin/electron/resources/app/vendor/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/install/bin/electron/resources/app/vendor/tabulator/js/modules/validate.js b/install/bin/electron/resources/app/vendor/tabulator/js/modules/validate.js new file mode 100644 index 0000000..b5f6182 --- /dev/null +++ b/install/bin/electron/resources/app/vendor/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/install/bin/electron/resources/app/vendor/tabulator/js/modules/validate.min.js b/install/bin/electron/resources/app/vendor/tabulator/js/modules/validate.min.js new file mode 100644 index 0000000..fc189c0 --- /dev/null +++ b/install/bin/electron/resources/app/vendor/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/install/bin/electron/resources/app/vendor/tabulator/js/tabulator.js b/install/bin/electron/resources/app/vendor/tabulator/js/tabulator.js new file mode 100644 index 0000000..256e565 --- /dev/null +++ b/install/bin/electron/resources/app/vendor/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/install/bin/electron/resources/app/vendor/tabulator/js/tabulator.min.js b/install/bin/electron/resources/app/vendor/tabulator/js/tabulator.min.js new file mode 100644 index 0000000..425389a --- /dev/null +++ b/install/bin/electron/resources/app/vendor/tabulator/js/tabulator.min.js @@ -0,0 +1 @@ +var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(obj){return typeof obj}:function(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj};!function(global,factory){"object"===("undefined"==typeof exports?"undefined":_typeof(exports))&&"undefined"!=typeof module?module.exports=factory():"function"==typeof define&&define.amd?define(factory):global.Tabulator=factory()}(this,(function(){"use strict";Array.prototype.findIndex||Object.defineProperty(Array.prototype,"findIndex",{value:function value(predicate){if(null==this)throw new TypeError('"this" is null or not defined');var o=Object(this),len=o.length>>>0;if("function"!=typeof predicate)throw new TypeError("predicate must be a function");for(var thisArg=arguments[1],k=0;k>>0;if("function"!=typeof predicate)throw new TypeError("predicate must be a function");for(var thisArg=arguments[1],k=0;k>>0;if(0===len)return!1;var n=0|fromIndex,k=Math.max(n>=0?n:len-Math.abs(n),0);function sameValueZero(x,y){return x===y||"number"==typeof x&&"number"==typeof y&&isNaN(x)&&isNaN(y)}for(;kscrollWidth?(hozAdjust=left-scrollWidth,this.element.style.marginLeft=-hozAdjust+"px"):this.element.style.marginLeft=0,this.scrollLeft=left,this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.scrollHorizontal()},ColumnManager.prototype.generateColumnsFromRowData=function(data){var cols=[],row,sorter;if(data&&data.length){for(var key in row=data[0]){var col={field:key,title:key},value=row[key];switch(void 0===value?"undefined":_typeof(value)){case"undefined":sorter="string";break;case"boolean":sorter="boolean";break;case"object":sorter=Array.isArray(value)?"array":"string";break;default:sorter=isNaN(value)||""===value?value.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)?"alphanum":"string":"number"}col.sorter=sorter,cols.push(col)}this.table.options.columns=cols,this.setColumns(this.table.options.columns)}},ColumnManager.prototype.setColumns=function(cols,row){for(var self=this;self.headersElement.firstChild;)self.headersElement.removeChild(self.headersElement.firstChild);self.columns=[],self.columnsByIndex=[],self.columnsByField={},self.table.modExists("frozenColumns")&&self.table.modules.frozenColumns.reset(),cols.forEach((function(def,i){self._addColumn(def)})),self._reIndexColumns(),self.table.options.responsiveLayout&&self.table.modExists("responsiveLayout",!0)&&self.table.modules.responsiveLayout.initialize(),self.redraw(!0)},ColumnManager.prototype._addColumn=function(definition,before,nextToColumn){var column=new Column(definition,this),colEl=column.getElement(),index=nextToColumn?this.findColumnIndex(nextToColumn):nextToColumn;if(nextToColumn&&index>-1){var parentIndex=this.columns.indexOf(nextToColumn.getTopColumn()),nextEl=nextToColumn.getElement();before?(this.columns.splice(parentIndex,0,column),nextEl.parentNode.insertBefore(colEl,nextEl)):(this.columns.splice(parentIndex+1,0,column),nextEl.parentNode.insertBefore(colEl,nextEl.nextSibling))}else before?(this.columns.unshift(column),this.headersElement.insertBefore(column.getElement(),this.headersElement.firstChild)):(this.columns.push(column),this.headersElement.appendChild(column.getElement())),column.columnRendered();return column},ColumnManager.prototype.registerColumnField=function(col){col.definition.field&&(this.columnsByField[col.definition.field]=col)},ColumnManager.prototype.registerColumnPosition=function(col){this.columnsByIndex.push(col)},ColumnManager.prototype._reIndexColumns=function(){this.columnsByIndex=[],this.columns.forEach((function(column){column.reRegisterPosition()}))},ColumnManager.prototype._verticalAlignHeaders=function(){var self=this,minHeight=0;self.columns.forEach((function(column){var height;column.clearVerticalAlign(),(height=column.getHeight())>minHeight&&(minHeight=height)})),self.columns.forEach((function(column){column.verticalAlign(self.table.options.columnHeaderVertAlign,minHeight)})),self.rowManager.adjustTableSize()},ColumnManager.prototype.findColumn=function(subject){var self=this,match;return"object"!=(void 0===subject?"undefined":_typeof(subject))?this.columnsByField[subject]||!1:subject instanceof Column?subject:subject instanceof ColumnComponent?subject._getSelf()||!1:"undefined"!=typeof HTMLElement&&subject instanceof HTMLElement&&this.columns.find((function(column){return column.element===subject}))||!1},ColumnManager.prototype.getColumnByField=function(field){return this.columnsByField[field]},ColumnManager.prototype.getColumnsByFieldRoot=function(root){var _this=this,matches=[];return Object.keys(this.columnsByField).forEach((function(field){var fieldRoot;field.split(".")[0]===root&&matches.push(_this.columnsByField[field])})),matches},ColumnManager.prototype.getColumnByIndex=function(index){return this.columnsByIndex[index]},ColumnManager.prototype.getFirstVisibileColumn=function(index){var index;return(index=this.columnsByIndex.findIndex((function(col){return col.visible})))>-1&&this.columnsByIndex[index]},ColumnManager.prototype.getColumns=function(){return this.columns},ColumnManager.prototype.findColumnIndex=function(column){return this.columnsByIndex.findIndex((function(col){return column===col}))},ColumnManager.prototype.getRealColumns=function(){return this.columnsByIndex},ColumnManager.prototype.traverse=function(callback){var self=this;this.columnsByIndex.forEach((function(column,i){callback(column,i)}))},ColumnManager.prototype.getDefinitions=function(active){var self=this,output=[];return this.columnsByIndex.forEach((function(column){(!active||active&&column.visible)&&output.push(column.getDefinition())})),output},ColumnManager.prototype.getDefinitionTree=function(){var self=this,output=[];return this.columns.forEach((function(column){output.push(column.getDefinition(!0))})),output},ColumnManager.prototype.getComponents=function(structured){var self=this,output=[],columns;return(structured?this.columns:this.columnsByIndex).forEach((function(column){output.push(column.getComponent())})),output},ColumnManager.prototype.getWidth=function(){var width=0;return this.columnsByIndex.forEach((function(column){column.visible&&(width+=column.getWidth())})),width},ColumnManager.prototype.moveColumn=function(from,to,after){this.moveColumnActual(from,to,after),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.initialize(),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows),to.element.parentNode.insertBefore(from.element,to.element),after&&to.element.parentNode.insertBefore(to.element,from.element),this._verticalAlignHeaders(),this.table.rowManager.reinitialize()},ColumnManager.prototype.moveColumnActual=function(from,to,after){from.parent.isGroup?this._moveColumnInArray(from.parent.columns,from,to,after):this._moveColumnInArray(this.columns,from,to,after),this._moveColumnInArray(this.columnsByIndex,from,to,after,!0),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.initialize(),this.table.options.columnMoved&&this.table.options.columnMoved.call(this.table,from.getComponent(),this.table.columnManager.getComponents()),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.columns&&this.table.modules.persistence.save("columns")},ColumnManager.prototype._moveColumnInArray=function(columns,from,to,after,updateRows){var fromIndex=columns.indexOf(from),toIndex;fromIndex>-1&&(columns.splice(fromIndex,1),(toIndex=columns.indexOf(to))>-1?after&&(toIndex+=1):toIndex=fromIndex,columns.splice(toIndex,0,from),updateRows&&this.table.rowManager.rows.forEach((function(row){if(row.cells.length){var cell=row.cells.splice(fromIndex,1)[0];row.cells.splice(toIndex,0,cell)}})))},ColumnManager.prototype.scrollToColumn=function(column,position,ifVisible){var _this2=this,left=0,offset=0,adjust=0,colEl=column.getElement();return new Promise((function(resolve,reject){if(void 0===position&&(position=_this2.table.options.scrollToColumnPosition),void 0===ifVisible&&(ifVisible=_this2.table.options.scrollToColumnIfVisible),column.visible){switch(position){case"middle":case"center":adjust=-_this2.element.clientWidth/2;break;case"right":adjust=colEl.clientWidth-_this2.headersElement.clientWidth}if(!ifVisible&&(offset=colEl.offsetLeft)>0&&offset+colEl.offsetWidth<_this2.element.clientWidth)return!1;left=colEl.offsetLeft+_this2.element.scrollLeft+adjust,left=Math.max(Math.min(left,_this2.table.rowManager.element.scrollWidth-_this2.table.rowManager.element.clientWidth),0),_this2.table.rowManager.scrollHorizontal(left),_this2.scrollHorizontal(left),resolve()}else console.warn("Scroll Error - Column not visible"),reject("Scroll Error - Column not visible")}))},ColumnManager.prototype.generateCells=function(row){var self=this,cells=[];return this.columnsByIndex.forEach((function(column){cells.push(column.generateCell(row))})),cells},ColumnManager.prototype.getFlexBaseWidth=function(){var self=this,totalWidth=self.table.element.clientWidth,fixedWidth=0;return self.rowManager.element.scrollHeight>self.rowManager.element.clientHeight&&(totalWidth-=self.rowManager.element.offsetWidth-self.rowManager.element.clientWidth),this.columnsByIndex.forEach((function(column){var width,minWidth,colWidth;column.visible&&(width=column.definition.width||0,minWidth=void 0===column.minWidth?self.table.options.columnMinWidth:parseInt(column.minWidth),colWidth="string"==typeof width?width.indexOf("%")>-1?totalWidth/100*parseInt(width):parseInt(width):width,fixedWidth+=colWidth>minWidth?colWidth:minWidth)})),fixedWidth},ColumnManager.prototype.addColumn=function(definition,before,nextToColumn){var _this3=this;return new Promise((function(resolve,reject){var column=_this3._addColumn(definition,before,nextToColumn);_this3._reIndexColumns(),_this3.table.options.responsiveLayout&&_this3.table.modExists("responsiveLayout",!0)&&_this3.table.modules.responsiveLayout.initialize(),_this3.table.modExists("columnCalcs")&&_this3.table.modules.columnCalcs.recalc(_this3.table.rowManager.activeRows),_this3.redraw(),"fitColumns"!=_this3.table.modules.layout.getMode()&&column.reinitializeWidth(),_this3._verticalAlignHeaders(),_this3.table.rowManager.reinitialize(),resolve(column)}))},ColumnManager.prototype.deregisterColumn=function(column){var field=column.getField(),index;field&&delete this.columnsByField[field],(index=this.columnsByIndex.indexOf(column))>-1&&this.columnsByIndex.splice(index,1),(index=this.columns.indexOf(column))>-1&&this.columns.splice(index,1),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.initialize(),this.redraw()},ColumnManager.prototype.redraw=function(force){force&&(Tabulator.prototype.helpers.elVisible(this.element)&&this._verticalAlignHeaders(),this.table.rowManager.resetScroll(),this.table.rowManager.reinitialize()),["fitColumns","fitDataStretch"].indexOf(this.table.modules.layout.getMode())>-1?this.table.modules.layout.layout():force?this.table.modules.layout.layout():this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update(),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layout(),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows),force&&(this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.columns&&this.table.modules.persistence.save("columns"),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.redraw()),this.table.footerManager.redraw()};var ColumnComponent=function ColumnComponent(column){this._column=column,this.type="ColumnComponent"};ColumnComponent.prototype.getElement=function(){return this._column.getElement()},ColumnComponent.prototype.getDefinition=function(){return this._column.getDefinition()},ColumnComponent.prototype.getField=function(){return this._column.getField()},ColumnComponent.prototype.getCells=function(){var cells=[];return this._column.cells.forEach((function(cell){cells.push(cell.getComponent())})),cells},ColumnComponent.prototype.getVisibility=function(){return console.warn("getVisibility function is deprecated, you should now use the isVisible function"),this._column.visible},ColumnComponent.prototype.isVisible=function(){return this._column.visible},ColumnComponent.prototype.show=function(){this._column.isGroup?this._column.columns.forEach((function(column){column.show()})):this._column.show()},ColumnComponent.prototype.hide=function(){this._column.isGroup?this._column.columns.forEach((function(column){column.hide()})):this._column.hide()},ColumnComponent.prototype.toggle=function(){this._column.visible?this.hide():this.show()},ColumnComponent.prototype.delete=function(){return this._column.delete()},ColumnComponent.prototype.getSubColumns=function(){var output=[];return this._column.columns.length&&this._column.columns.forEach((function(column){output.push(column.getComponent())})),output},ColumnComponent.prototype.getParentColumn=function(){return this._column.parent instanceof Column&&this._column.parent.getComponent()},ColumnComponent.prototype._getSelf=function(){return this._column},ColumnComponent.prototype.scrollTo=function(){return this._column.table.columnManager.scrollToColumn(this._column)},ColumnComponent.prototype.getTable=function(){return this._column.table},ColumnComponent.prototype.headerFilterFocus=function(){this._column.table.modExists("filter",!0)&&this._column.table.modules.filter.setHeaderFilterFocus(this._column)},ColumnComponent.prototype.reloadHeaderFilter=function(){this._column.table.modExists("filter",!0)&&this._column.table.modules.filter.reloadHeaderFilter(this._column)},ColumnComponent.prototype.getHeaderFilterValue=function(){if(this._column.table.modExists("filter",!0))return this._column.table.modules.filter.getHeaderFilterValue(this._column)},ColumnComponent.prototype.setHeaderFilterValue=function(value){this._column.table.modExists("filter",!0)&&this._column.table.modules.filter.setHeaderFilterValue(this._column,value)},ColumnComponent.prototype.move=function(to,after){var toColumn=this._column.table.columnManager.findColumn(to);toColumn?this._column.table.columnManager.moveColumn(this._column,toColumn,after):console.warn("Move Error - No matching column found:",toColumn)},ColumnComponent.prototype.getNextColumn=function(){var nextCol=this._column.nextColumn();return!!nextCol&&nextCol.getComponent()},ColumnComponent.prototype.getPrevColumn=function(){var prevCol=this._column.prevColumn();return!!prevCol&&prevCol.getComponent()},ColumnComponent.prototype.updateDefinition=function(updates){return this._column.updateDefinition(updates)},ColumnComponent.prototype.getWidth=function(){return this._column.getWidth()},ColumnComponent.prototype.setWidth=function(width){return!0===width?this._column.reinitializeWidth(!0):this._column.setWidth(width)},ColumnComponent.prototype.validate=function(){return this._column.validate()};var Column=function Column(def,parent){var self=this;this.table=parent.table,this.definition=def,this.parent=parent,this.type="column",this.columns=[],this.cells=[],this.element=this.createElement(),this.contentElement=!1,this.titleElement=!1,this.groupElement=this.createGroupElement(),this.isGroup=!1,this.tooltip=!1,this.hozAlign="",this.vertAlign="",this.field="",this.fieldStructure="",this.getFieldValue="",this.setFieldValue="",this.titleFormatterRendered=!1,this.setField(this.definition.field),this.table.options.invalidOptionWarnings&&this.checkDefinition(),this.modules={},this.cellEvents={cellClick:!1,cellDblClick:!1,cellContext:!1,cellTap:!1,cellDblTap:!1,cellTapHold:!1,cellMouseEnter:!1,cellMouseLeave:!1,cellMouseOver:!1,cellMouseOut:!1,cellMouseMove:!1},this.width=null,this.widthStyled="",this.minWidth=null,this.minWidthStyled="",this.widthFixed=!1,this.visible=!0,this.component=null,this._mapDepricatedFunctionality(),def.columns?(this.isGroup=!0,def.columns.forEach((function(def,i){var newCol=new Column(def,self);self.attachColumn(newCol)})),self.checkColumnVisibility()):parent.registerColumnField(this),def.rowHandle&&!1!==this.table.options.movableRows&&this.table.modExists("moveRow")&&this.table.modules.moveRow.setHandle(!0),this._buildHeader(),this.bindModuleColumns()};Column.prototype.createElement=function(){var el=document.createElement("div");return el.classList.add("tabulator-col"),el.setAttribute("role","columnheader"),el.setAttribute("aria-sort","none"),el},Column.prototype.createGroupElement=function(){var el=document.createElement("div");return el.classList.add("tabulator-col-group-cols"),el},Column.prototype.checkDefinition=function(){var _this4=this;Object.keys(this.definition).forEach((function(key){-1===_this4.defaultOptionList.indexOf(key)&&console.warn("Invalid column definition option in '"+(_this4.field||_this4.definition.title)+"' column:",key)}))},Column.prototype.setField=function(field){this.field=field,this.fieldStructure=field?this.table.options.nestedFieldSeparator?field.split(this.table.options.nestedFieldSeparator):[field]:[],this.getFieldValue=this.fieldStructure.length>1?this._getNestedData:this._getFlatData,this.setFieldValue=this.fieldStructure.length>1?this._setNestedData:this._setFlatData},Column.prototype.registerColumnPosition=function(column){this.parent.registerColumnPosition(column)},Column.prototype.registerColumnField=function(column){this.parent.registerColumnField(column)},Column.prototype.reRegisterPosition=function(){this.isGroup?this.columns.forEach((function(column){column.reRegisterPosition()})):this.registerColumnPosition(this)},Column.prototype._mapDepricatedFunctionality=function(){void 0!==this.definition.hideInHtml&&(this.definition.htmlOutput=!this.definition.hideInHtml,console.warn("hideInHtml column definition property is deprecated, you should now use htmlOutput")),void 0!==this.definition.align&&(this.definition.hozAlign=this.definition.align,console.warn("align column definition property is deprecated, you should now use hozAlign")),void 0!==this.definition.downloadTitle&&(this.definition.titleDownload=this.definition.downloadTitle,console.warn("downloadTitle definition property is deprecated, you should now use titleDownload"))},Column.prototype.setTooltip=function(){var self=this,def=self.definition,tooltip=def.headerTooltip||!1===def.tooltip?def.headerTooltip:self.table.options.tooltipsHeader;tooltip?!0===tooltip?def.field?self.table.modules.localize.bind("columns|"+def.field,(function(value){self.element.setAttribute("title",value||def.title)})):self.element.setAttribute("title",def.title):("function"==typeof tooltip&&!1===(tooltip=tooltip(self.getComponent()))&&(tooltip=""),self.element.setAttribute("title",tooltip)):self.element.setAttribute("title","")},Column.prototype._buildHeader=function(){for(var self=this,def=self.definition;self.element.firstChild;)self.element.removeChild(self.element.firstChild);def.headerVertical&&(self.element.classList.add("tabulator-col-vertical"),"flip"===def.headerVertical&&self.element.classList.add("tabulator-col-vertical-flip")),self.contentElement=self._bindEvents(),self.contentElement=self._buildColumnHeaderContent(),self.element.appendChild(self.contentElement),self.isGroup?self._buildGroupHeader():self._buildColumnHeader(),self.setTooltip(),self.table.options.resizableColumns&&self.table.modExists("resizeColumns")&&self.table.modules.resizeColumns.initializeColumn("header",self,self.element),def.headerFilter&&self.table.modExists("filter")&&self.table.modExists("edit")&&(void 0!==def.headerFilterPlaceholder&&def.field&&self.table.modules.localize.setHeaderFilterColumnPlaceholder(def.field,def.headerFilterPlaceholder),self.table.modules.filter.initializeColumn(self)),self.table.modExists("frozenColumns")&&self.table.modules.frozenColumns.initializeColumn(self),self.table.options.movableColumns&&!self.isGroup&&self.table.modExists("moveColumn")&&self.table.modules.moveColumn.initializeColumn(self),(def.topCalc||def.bottomCalc)&&self.table.modExists("columnCalcs")&&self.table.modules.columnCalcs.initializeColumn(self),self.table.modExists("persistence")&&self.table.modules.persistence.config.columns&&self.table.modules.persistence.initializeColumn(self),self.element.addEventListener("mouseenter",(function(e){self.setTooltip()}))},Column.prototype._bindEvents=function(){var self=this,def=self.definition,dblTap,tapHold,tap;"function"==typeof def.headerClick&&self.element.addEventListener("click",(function(e){def.headerClick(e,self.getComponent())})),"function"==typeof def.headerDblClick&&self.element.addEventListener("dblclick",(function(e){def.headerDblClick(e,self.getComponent())})),"function"==typeof def.headerContext&&self.element.addEventListener("contextmenu",(function(e){def.headerContext(e,self.getComponent())})),"function"==typeof def.headerTap&&(tap=!1,self.element.addEventListener("touchstart",(function(e){tap=!0}),{passive:!0}),self.element.addEventListener("touchend",(function(e){tap&&def.headerTap(e,self.getComponent()),tap=!1}))),"function"==typeof def.headerDblTap&&(dblTap=null,self.element.addEventListener("touchend",(function(e){dblTap?(clearTimeout(dblTap),dblTap=null,def.headerDblTap(e,self.getComponent())):dblTap=setTimeout((function(){clearTimeout(dblTap),dblTap=null}),300)}))),"function"==typeof def.headerTapHold&&(tapHold=null,self.element.addEventListener("touchstart",(function(e){clearTimeout(tapHold),tapHold=setTimeout((function(){clearTimeout(tapHold),tapHold=null,tap=!1,def.headerTapHold(e,self.getComponent())}),1e3)}),{passive:!0}),self.element.addEventListener("touchend",(function(e){clearTimeout(tapHold),tapHold=null}))),"function"==typeof def.cellClick&&(self.cellEvents.cellClick=def.cellClick),"function"==typeof def.cellDblClick&&(self.cellEvents.cellDblClick=def.cellDblClick),"function"==typeof def.cellContext&&(self.cellEvents.cellContext=def.cellContext),"function"==typeof def.cellMouseEnter&&(self.cellEvents.cellMouseEnter=def.cellMouseEnter),"function"==typeof def.cellMouseLeave&&(self.cellEvents.cellMouseLeave=def.cellMouseLeave),"function"==typeof def.cellMouseOver&&(self.cellEvents.cellMouseOver=def.cellMouseOver),"function"==typeof def.cellMouseOut&&(self.cellEvents.cellMouseOut=def.cellMouseOut),"function"==typeof def.cellMouseMove&&(self.cellEvents.cellMouseMove=def.cellMouseMove),"function"==typeof def.cellTap&&(self.cellEvents.cellTap=def.cellTap),"function"==typeof def.cellDblTap&&(self.cellEvents.cellDblTap=def.cellDblTap),"function"==typeof def.cellTapHold&&(self.cellEvents.cellTapHold=def.cellTapHold),"function"==typeof def.cellEdited&&(self.cellEvents.cellEdited=def.cellEdited),"function"==typeof def.cellEditing&&(self.cellEvents.cellEditing=def.cellEditing),"function"==typeof def.cellEditCancelled&&(self.cellEvents.cellEditCancelled=def.cellEditCancelled)},Column.prototype._buildColumnHeader=function(){var self=this,def=self.definition,table=self.table,sortable,classeNames;(table.modExists("sort")&&table.modules.sort.initializeColumn(self,self.contentElement),(def.headerContextMenu||def.headerMenu)&&table.modExists("menu")&&table.modules.menu.initializeColumnHeader(self),table.modExists("format")&&table.modules.format.initializeColumn(self),void 0!==def.editor&&table.modExists("edit")&&table.modules.edit.initializeColumn(self),void 0!==def.validator&&table.modExists("validate")&&table.modules.validate.initializeColumn(self),table.modExists("mutator")&&table.modules.mutator.initializeColumn(self),table.modExists("accessor")&&table.modules.accessor.initializeColumn(self),_typeof(table.options.responsiveLayout)&&table.modExists("responsiveLayout")&&table.modules.responsiveLayout.initializeColumn(self),void 0!==def.visible&&(def.visible?self.show(!0):self.hide(!0)),def.cssClass)&&def.cssClass.split(" ").forEach((function(className){self.element.classList.add(className)}));def.field&&this.element.setAttribute("tabulator-field",def.field),self.setMinWidth(void 0===def.minWidth?self.table.options.columnMinWidth:parseInt(def.minWidth)),self.reinitializeWidth(),self.tooltip=self.definition.tooltip||!1===self.definition.tooltip?self.definition.tooltip:self.table.options.tooltips,self.hozAlign=void 0===self.definition.hozAlign?self.table.options.cellHozAlign:self.definition.hozAlign,self.vertAlign=void 0===self.definition.vertAlign?self.table.options.cellVertAlign:self.definition.vertAlign},Column.prototype._buildColumnHeaderContent=function(){var def=this.definition,table=this.table,contentElement=document.createElement("div");return contentElement.classList.add("tabulator-col-content"),this.titleElement=this._buildColumnHeaderTitle(),contentElement.appendChild(this.titleElement),contentElement},Column.prototype._buildColumnHeaderTitle=function(){var self=this,def=self.definition,table=self.table,title,titleHolderElement=document.createElement("div");if(titleHolderElement.classList.add("tabulator-col-title"),def.editableTitle){var titleElement=document.createElement("input");titleElement.classList.add("tabulator-title-editor"),titleElement.addEventListener("click",(function(e){e.stopPropagation(),titleElement.focus()})),titleElement.addEventListener("change",(function(){def.title=titleElement.value,table.options.columnTitleChanged.call(self.table,self.getComponent())})),titleHolderElement.appendChild(titleElement),def.field?table.modules.localize.bind("columns|"+def.field,(function(text){titleElement.value=text||def.title||" "})):titleElement.value=def.title||" "}else def.field?table.modules.localize.bind("columns|"+def.field,(function(text){self._formatColumnHeaderTitle(titleHolderElement,text||def.title||" ")})):self._formatColumnHeaderTitle(titleHolderElement,def.title||" ");return titleHolderElement},Column.prototype._formatColumnHeaderTitle=function(el,title){var _this5=this,formatter,contents,params,mockCell,onRendered;if(this.definition.titleFormatter&&this.table.modExists("format"))switch(formatter=this.table.modules.format.getFormatter(this.definition.titleFormatter),onRendered=function onRendered(callback){_this5.titleFormatterRendered=callback},mockCell={getValue:function getValue(){return title},getElement:function getElement(){return el}},params="function"==typeof(params=this.definition.titleFormatterParams||{})?params():params,void 0===(contents=formatter.call(this.table.modules.format,mockCell,params,onRendered))?"undefined":_typeof(contents)){case"object":contents instanceof Node?el.appendChild(contents):(el.innerHTML="",console.warn("Format Error - Title formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:",contents));break;case"undefined":case"null":el.innerHTML="";break;default:el.innerHTML=contents}else el.innerHTML=title},Column.prototype._buildGroupHeader=function(){var _this6=this,classeNames;(this.element.classList.add("tabulator-col-group"),this.element.setAttribute("role","columngroup"),this.element.setAttribute("aria-title",this.definition.title),this.definition.cssClass)&&this.definition.cssClass.split(" ").forEach((function(className){_this6.element.classList.add(className)}));(this.definition.headerContextMenu||this.definition.headerMenu)&&this.table.modExists("menu")&&this.table.modules.menu.initializeColumnHeader(this),this.element.appendChild(this.groupElement)},Column.prototype._getFlatData=function(data){return data[this.field]},Column.prototype._getNestedData=function(data){for(var dataObj=data,structure=this.fieldStructure,length=structure.length,output,_i=0;_i-1&&this._nextVisibleColumn(index+1)},Column.prototype._nextVisibleColumn=function(index){var column=this.table.columnManager.getColumnByIndex(index);return!column||column.visible?column:this._nextVisibleColumn(index+1)},Column.prototype.prevColumn=function(){var index=this.table.columnManager.findColumnIndex(this);return index>-1&&this._prevVisibleColumn(index-1)},Column.prototype._prevVisibleColumn=function(index){var column=this.table.columnManager.getColumnByIndex(index);return!column||column.visible?column:this._prevVisibleColumn(index-1)},Column.prototype.reinitializeWidth=function(force){this.widthFixed=!1,void 0===this.definition.width||force||this.setWidth(this.definition.width),this.table.modExists("filter")&&this.table.modules.filter.hideHeaderFilterElements(),this.fitToData(),this.table.modExists("filter")&&this.table.modules.filter.showHeaderFilterElements()},Column.prototype.fitToData=function(){var self=this;this.widthFixed||(this.element.style.width="",this.cells.forEach((function(cell){cell.clearWidth()})));var maxWidth=this.element.offsetWidth;this.width&&this.widthFixed||(this.cells.forEach((function(cell){var width=cell.getWidth();width>maxWidth&&(maxWidth=width)})),maxWidth&&this.setWidthActual(maxWidth+1))},Column.prototype.updateDefinition=function(updates){var _this8=this;return new Promise((function(resolve,reject){var definition;_this8.isGroup?(console.warn("Column Update Error - The updateDefintion function is only available on columns, not column groups"),reject("Column Update Error - The updateDefintion function is only available on columns, not column groups")):(definition=Object.assign({},_this8.getDefinition()),definition=Object.assign(definition,updates),_this8.table.columnManager.addColumn(definition,!1,_this8).then((function(column){definition.field==_this8.field&&(_this8.field=!1),_this8.delete().then((function(){resolve(column.getComponent())})).catch((function(err){reject(err)}))})).catch((function(err){reject(err)})))}))},Column.prototype.deleteCell=function(cell){var index=this.cells.indexOf(cell);index>-1&&this.cells.splice(index,1)},Column.prototype.defaultOptionList=["title","field","columns","visible","align","hozAlign","vertAlign","width","minWidth","widthGrow","widthShrink","resizable","frozen","responsive","tooltip","cssClass","rowHandle","hideInHtml","print","htmlOutput","sorter","sorterParams","formatter","formatterParams","variableHeight","editable","editor","editorParams","validator","mutator","mutatorParams","mutatorData","mutatorDataParams","mutatorEdit","mutatorEditParams","mutatorClipboard","mutatorClipboardParams","accessor","accessorParams","accessorData","accessorDataParams","accessorDownload","accessorDownloadParams","accessorClipboard","accessorClipboardParams","accessorPrint","accessorPrintParams","accessorHtmlOutput","accessorHtmlOutputParams","clipboard","download","downloadTitle","topCalc","topCalcParams","topCalcFormatter","topCalcFormatterParams","bottomCalc","bottomCalcParams","bottomCalcFormatter","bottomCalcFormatterParams","cellClick","cellDblClick","cellContext","cellTap","cellDblTap","cellTapHold","cellMouseEnter","cellMouseLeave","cellMouseOver","cellMouseOut","cellMouseMove","cellEditing","cellEdited","cellEditCancelled","headerSort","headerSortStartingDir","headerSortTristate","headerClick","headerDblClick","headerContext","headerTap","headerDblTap","headerTapHold","headerTooltip","headerVertical","editableTitle","titleFormatter","titleFormatterParams","headerFilter","headerFilterPlaceholder","headerFilterParams","headerFilterEmptyCheck","headerFilterFunc","headerFilterFuncParams","headerFilterLiveFilter","print","headerContextMenu","headerMenu","contextMenu","formatterPrint","formatterPrintParams","formatterClipboard","formatterClipboardParams","formatterHtmlOutput","formatterHtmlOutputParams","titlePrint","titleClipboard","titleHtmlOutput","titleDownload"],Column.prototype.getComponent=function(){return this.component||(this.component=new ColumnComponent(this)),this.component};var RowManager=function RowManager(table){this.table=table,this.element=this.createHolderElement(),this.tableElement=this.createTableElement(),this.heightFixer=this.createTableElement(),this.columnManager=null,this.height=0,this.firstRender=!1,this.renderMode="virtual",this.fixedHeight=!1,this.rows=[],this.activeRows=[],this.activeRowsCount=0,this.displayRows=[],this.displayRowsCount=0,this.scrollTop=0,this.scrollLeft=0,this.vDomRowHeight=20,this.vDomTop=0,this.vDomBottom=0,this.vDomScrollPosTop=0,this.vDomScrollPosBottom=0,this.vDomTopPad=0,this.vDomBottomPad=0,this.vDomMaxRenderChain=90,this.vDomWindowBuffer=0,this.vDomWindowMinTotalRows=20,this.vDomWindowMinMarginRows=5,this.vDomTopNewRows=[],this.vDomBottomNewRows=[],this.rowNumColumn=!1,this.redrawBlock=!1,this.redrawBlockRestoreConfig=!1,this.redrawBlockRederInPosition=!1};RowManager.prototype.createHolderElement=function(){var el=document.createElement("div");return el.classList.add("tabulator-tableHolder"),el.setAttribute("tabindex",0),el},RowManager.prototype.createTableElement=function(){var el=document.createElement("div");return el.classList.add("tabulator-table"),el},RowManager.prototype.getElement=function(){return this.element},RowManager.prototype.getTableElement=function(){return this.tableElement},RowManager.prototype.getRowPosition=function(row,active){return active?this.activeRows.indexOf(row):this.rows.indexOf(row)},RowManager.prototype.setColumnManager=function(manager){this.columnManager=manager},RowManager.prototype.initialize=function(){var self=this;self.setRenderMode(),self.element.appendChild(self.tableElement),self.firstRender=!0,self.element.addEventListener("scroll",(function(){var left=self.element.scrollLeft;self.scrollLeft!=left&&(self.columnManager.scrollHorizontal(left),self.table.options.groupBy&&self.table.modules.groupRows.scrollHeaders(left),self.table.modExists("columnCalcs")&&self.table.modules.columnCalcs.scrollHorizontal(left),self.table.options.scrollHorizontal(left)),self.scrollLeft=left})),"virtual"===this.renderMode&&self.element.addEventListener("scroll",(function(){var top=self.element.scrollTop,dir=self.scrollTop>top;self.scrollTop!=top?(self.scrollTop=top,self.scrollVertical(dir),"scroll"==self.table.options.ajaxProgressiveLoad&&self.table.modules.ajax.nextPage(self.element.scrollHeight-self.element.clientHeight-top),self.table.options.scrollVertical(top)):self.scrollTop=top}))},RowManager.prototype.findRow=function(subject){var self=this,_match,match;return"object"!=(void 0===subject?"undefined":_typeof(subject))?null!=subject&&(self.rows.find((function(row){return row.data[self.table.options.index]==subject}))||!1):subject instanceof Row?subject:subject instanceof RowComponent?subject._getSelf()||!1:"undefined"!=typeof HTMLElement&&subject instanceof HTMLElement&&self.rows.find((function(row){return row.element===subject}))||!1},RowManager.prototype.getRowFromDataObject=function(data){var match;return this.rows.find((function(row){return row.data===data}))||!1},RowManager.prototype.getRowFromPosition=function(position,active){return active?this.activeRows[position]:this.rows[position]},RowManager.prototype.scrollToRow=function(row,position,ifVisible){var _this9=this,rowIndex=this.getDisplayRows().indexOf(row),rowEl=row.getElement(),rowTop,offset=0;return new Promise((function(resolve,reject){if(rowIndex>-1){if(void 0===position&&(position=_this9.table.options.scrollToRowPosition),void 0===ifVisible&&(ifVisible=_this9.table.options.scrollToRowIfVisible),"nearest"===position)switch(_this9.renderMode){case"classic":rowTop=Tabulator.prototype.helpers.elOffset(rowEl).top,position=Math.abs(_this9.element.scrollTop-rowTop)>Math.abs(_this9.element.scrollTop+_this9.element.clientHeight-rowTop)?"bottom":"top";break;case"virtual":position=Math.abs(_this9.vDomTop-rowIndex)>Math.abs(_this9.vDomBottom-rowIndex)?"bottom":"top"}if(!ifVisible&&Tabulator.prototype.helpers.elVisible(rowEl)&&(offset=Tabulator.prototype.helpers.elOffset(rowEl).top-Tabulator.prototype.helpers.elOffset(_this9.element).top)>0&&offset<_this9.element.clientHeight-rowEl.offsetHeight)return!1;switch(_this9.renderMode){case"classic":_this9.element.scrollTop=Tabulator.prototype.helpers.elOffset(rowEl).top-Tabulator.prototype.helpers.elOffset(_this9.element).top+_this9.element.scrollTop;break;case"virtual":_this9._virtualRenderFill(rowIndex,!0)}switch(position){case"middle":case"center":_this9.element.scrollHeight-_this9.element.scrollTop==_this9.element.clientHeight?_this9.element.scrollTop=_this9.element.scrollTop+(rowEl.offsetTop-_this9.element.scrollTop)-(_this9.element.scrollHeight-rowEl.offsetTop)/2:_this9.element.scrollTop=_this9.element.scrollTop-_this9.element.clientHeight/2;break;case"bottom":_this9.element.scrollHeight-_this9.element.scrollTop==_this9.element.clientHeight?_this9.element.scrollTop=_this9.element.scrollTop-(_this9.element.scrollHeight-rowEl.offsetTop)+rowEl.offsetHeight:_this9.element.scrollTop=_this9.element.scrollTop-_this9.element.clientHeight+rowEl.offsetHeight}resolve()}else console.warn("Scroll Error - Row not visible"),reject("Scroll Error - Row not visible")}))},RowManager.prototype.setData=function(data,renderInPosition,columnsChanged){var _this10=this,self=this;return new Promise((function(resolve,reject){renderInPosition&&_this10.getDisplayRows().length?self.table.options.pagination?self._setDataActual(data,!0):_this10.reRenderInPosition((function(){self._setDataActual(data)})):(_this10.table.options.autoColumns&&columnsChanged&&_this10.table.columnManager.generateColumnsFromRowData(data),_this10.resetScroll(),_this10._setDataActual(data)),resolve()}))},RowManager.prototype._setDataActual=function(data,renderInPosition){var self=this;self.table.options.dataLoading.call(this.table,data),this._wipeElements(),this.table.options.history&&this.table.modExists("history")&&this.table.modules.history.clear(),Array.isArray(data)?(this.table.modExists("selectRow")&&this.table.modules.selectRow.clearSelectionData(),this.table.options.reactiveData&&this.table.modExists("reactiveData",!0)&&this.table.modules.reactiveData.watchData(data),data.forEach((function(def,i){if(def&&"object"===(void 0===def?"undefined":_typeof(def))){var row=new Row(def,self);self.rows.push(row)}else console.warn("Data Loading Warning - Invalid row data detected and ignored, expecting object but received:",def)})),self.table.options.dataLoaded.call(this.table,data),self.refreshActiveData(!1,!1,renderInPosition)):console.error("Data Loading Error - Unable to process data due to invalid data type \nExpecting: array \nReceived: ",void 0===data?"undefined":_typeof(data),"\nData: ",data)},RowManager.prototype._wipeElements=function(){this.rows.forEach((function(row){row.wipe()})),this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.wipe(),this.rows=[]},RowManager.prototype.deleteRow=function(row,blockRedraw){var allIndex=this.rows.indexOf(row),activeIndex=this.activeRows.indexOf(row);activeIndex>-1&&this.activeRows.splice(activeIndex,1),allIndex>-1&&this.rows.splice(allIndex,1),this.setActiveRows(this.activeRows),this.displayRowIterator((function(rows){var displayIndex=rows.indexOf(row);displayIndex>-1&&rows.splice(displayIndex,1)})),blockRedraw||this.reRenderInPosition(),this.regenerateRowNumbers(),this.table.options.rowDeleted.call(this.table,row.getComponent()),this.table.options.dataEdited.call(this.table,this.getData()),this.table.options.groupBy&&this.table.modExists("groupRows")?this.table.modules.groupRows.updateGroupRows(!0):this.table.options.pagination&&this.table.modExists("page")?this.refreshActiveData(!1,!1,!0):this.table.options.pagination&&this.table.modExists("page")&&this.refreshActiveData("page")},RowManager.prototype.addRow=function(data,pos,index,blockRedraw){var row=this.addRowActual(data,pos,index,blockRedraw);return this.table.options.history&&this.table.modExists("history")&&this.table.modules.history.action("rowAdd",row,{data:data,pos:pos,index:index}),row},RowManager.prototype.addRows=function(data,pos,index){var _this11=this,self=this,length=0,rows=[];return new Promise((function(resolve,reject){pos=_this11.findAddRowPos(pos),Array.isArray(data)||(data=[data]),length=data.length-1,(void 0===index&&pos||void 0!==index&&!pos)&&data.reverse(),data.forEach((function(item,i){var row=self.addRow(item,pos,index,!0);rows.push(row)})),_this11.table.options.groupBy&&_this11.table.modExists("groupRows")?_this11.table.modules.groupRows.updateGroupRows(!0):_this11.table.options.pagination&&_this11.table.modExists("page")?_this11.refreshActiveData(!1,!1,!0):_this11.reRenderInPosition(),_this11.table.modExists("columnCalcs")&&_this11.table.modules.columnCalcs.recalc(_this11.table.rowManager.activeRows),_this11.regenerateRowNumbers(),resolve(rows)}))},RowManager.prototype.findAddRowPos=function(pos){return void 0===pos&&(pos=this.table.options.addRowPos),"pos"===pos&&(pos=!0),"bottom"===pos&&(pos=!1),pos},RowManager.prototype.addRowActual=function(data,pos,index,blockRedraw){var row=data instanceof Row?data:new Row(data||{},this),top=this.findAddRowPos(pos),allIndex=-1,activeIndex,dispRows;if(!index&&this.table.options.pagination&&"page"==this.table.options.paginationAddRow&&(dispRows=this.getDisplayRows(),top?dispRows.length?index=dispRows[0]:this.activeRows.length&&(index=this.activeRows[this.activeRows.length-1],top=!1):dispRows.length&&(index=dispRows[dispRows.length-1],top=!(dispRows.length1&&(!index||index&&-1==groupRows.indexOf(index)?top?groupRows[0]!==row&&(index=groupRows[0],this._moveRowInArray(row.getGroup().rows,row,index,!top)):groupRows[groupRows.length-1]!==row&&(index=groupRows[groupRows.length-1],this._moveRowInArray(row.getGroup().rows,row,index,!top)):this._moveRowInArray(row.getGroup().rows,row,index,!top))}return index&&(allIndex=this.rows.indexOf(index)),index&&allIndex>-1?(activeIndex=this.activeRows.indexOf(index),this.displayRowIterator((function(rows){var displayIndex=rows.indexOf(index);displayIndex>-1&&rows.splice(top?displayIndex:displayIndex+1,0,row)})),activeIndex>-1&&this.activeRows.splice(top?activeIndex:activeIndex+1,0,row),this.rows.splice(top?allIndex:allIndex+1,0,row)):top?(this.displayRowIterator((function(rows){rows.unshift(row)})),this.activeRows.unshift(row),this.rows.unshift(row)):(this.displayRowIterator((function(rows){rows.push(row)})),this.activeRows.push(row),this.rows.push(row)),this.setActiveRows(this.activeRows),this.table.options.rowAdded.call(this.table,row.getComponent()),this.table.options.dataEdited.call(this.table,this.getData()),blockRedraw||this.reRenderInPosition(),row},RowManager.prototype.moveRow=function(from,to,after){this.table.options.history&&this.table.modExists("history")&&this.table.modules.history.action("rowMove",from,{posFrom:this.getRowPosition(from),posTo:this.getRowPosition(to),to:to,after:after}),this.moveRowActual(from,to,after),this.regenerateRowNumbers(),this.table.options.rowMoved.call(this.table,from.getComponent())},RowManager.prototype.moveRowActual=function(from,to,after){var _this12=this;if(this._moveRowInArray(this.rows,from,to,after),this._moveRowInArray(this.activeRows,from,to,after),this.displayRowIterator((function(rows){_this12._moveRowInArray(rows,from,to,after)})),this.table.options.groupBy&&this.table.modExists("groupRows")){!after&&to instanceof Group&&(to=this.table.rowManager.prevDisplayRow(from)||to);var toGroup=to.getGroup(),fromGroup=from.getGroup();toGroup===fromGroup?this._moveRowInArray(toGroup.rows,from,to,after):(fromGroup&&fromGroup.removeRow(from),toGroup.insertRow(from,to,after))}},RowManager.prototype._moveRowInArray=function(rows,from,to,after){var fromIndex,toIndex,start,end;if(from!==to&&((fromIndex=rows.indexOf(from))>-1&&(rows.splice(fromIndex,1),(toIndex=rows.indexOf(to))>-1?after?rows.splice(toIndex+1,0,from):rows.splice(toIndex,0,from):rows.splice(fromIndex,0,from)),rows===this.getDisplayRows())){end=toIndex>fromIndex?toIndex:fromIndex+1;for(var _i4=start=fromIndex-1&&index},RowManager.prototype.nextDisplayRow=function(row,rowOnly){var index=this.getDisplayRowIndex(row),nextRow=!1;return!1!==index&&index-1)&&rowIndex},RowManager.prototype.getData=function(active,transform){var output=[],rows;return this.getRows(active).forEach((function(row){"row"==row.type&&output.push(row.getData(transform||"data"))})),output},RowManager.prototype.getComponents=function(active){var output=[],rows;return this.getRows(active).forEach((function(row){output.push(row.getComponent())})),output},RowManager.prototype.getDataCount=function(active){var rows;return this.getRows(active).length},RowManager.prototype._genRemoteRequest=function(){var _this13=this,table=this.table,options=table.options,params={};if(table.modExists("page")){if(options.ajaxSorting){var sorters=this.table.modules.sort.getSort();sorters.forEach((function(item){delete item.column})),params[this.table.modules.page.paginationDataSentNames.sorters]=sorters}if(options.ajaxFiltering){var filters=this.table.modules.filter.getFilters(!0,!0);params[this.table.modules.page.paginationDataSentNames.filters]=filters}this.table.modules.ajax.setParams(params,!0)}table.modules.ajax.sendRequest().then((function(data){_this13._setDataActual(data,!0)})).catch((function(e){}))},RowManager.prototype.filterRefresh=function(){var table=this.table,options=table.options,left=this.scrollLeft;options.ajaxFiltering?"remote"==options.pagination&&table.modExists("page")?(table.modules.page.reset(!0),table.modules.page.setPage(1).then((function(){})).catch((function(){}))):options.ajaxProgressiveLoad?table.modules.ajax.loadData().then((function(){})).catch((function(){})):this._genRemoteRequest():this.refreshActiveData("filter"),this.scrollHorizontal(left)},RowManager.prototype.sorterRefresh=function(loadOrignalData){var table=this.table,options=this.table.options,left=this.scrollLeft;options.ajaxSorting?("remote"==options.pagination||options.progressiveLoad)&&table.modExists("page")?(table.modules.page.reset(!0),table.modules.page.setPage(1).then((function(){})).catch((function(){}))):options.ajaxProgressiveLoad?table.modules.ajax.loadData().then((function(){})).catch((function(){})):this._genRemoteRequest():this.refreshActiveData(loadOrignalData?"filter":"sort"),this.scrollHorizontal(left)},RowManager.prototype.scrollHorizontal=function(left){this.scrollLeft=left,this.element.scrollLeft=left,this.table.options.groupBy&&this.table.modules.groupRows.scrollHeaders(left),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.scrollHorizontal(left)},RowManager.prototype.refreshActiveData=function(stage,skipStage,renderInPosition){var self=this,table=this.table,cascadeOrder=["all","filter","sort","display","freeze","group","tree","page"],displayIndex;if(this.redrawBlock)(!this.redrawBlockRestoreConfig||cascadeOrder.indexOf(stage)=0))break;bottomRow=i}else if(topEdge-rows[i].getElement().offsetTop>=0)topRow=i;else{if(topFound=!0,!(bottomEdge-rows[i].getElement().offsetTop>=0))break;bottomRow=i}}else topRow=this.vDomTop,bottomRow=this.vDomBottom;return rows.slice(topRow,bottomRow+1)},RowManager.prototype.displayRowIterator=function(callback){this.displayRows.forEach(callback),this.displayRowsCount=this.displayRows[this.displayRows.length-1].length},RowManager.prototype.getRows=function(active){var rows;switch(active){case"active":rows=this.activeRows;break;case"display":rows=this.table.rowManager.getDisplayRows();break;case"visible":rows=this.getVisibleRows(!0);break;default:rows=this.rows}return rows},RowManager.prototype.reRenderInPosition=function(callback){if("virtual"==this.getRenderMode())if(this.redrawBlock)callback?callback():this.redrawBlockRederInPosition=!0;else{for(var scrollTop=this.element.scrollTop,topRow=!1,topOffset=!1,left=this.scrollLeft,rows=this.getDisplayRows(),i=this.vDomTop;i<=this.vDomBottom;i++)if(rows[i]){var diff=scrollTop-rows[i].getElement().offsetTop;if(!(!1===topOffset||Math.abs(diff)this.vDomWindowBuffer&&(this.vDomWindowBuffer=2*rowHeight),"group"!==row.type&&(onlyGroupHeaders=!1),this.vDomBottom++,i++}position?(this.vDomTopPad=forceMove?this.vDomRowHeight*this.vDomTop+offset:this.scrollTop-topPadHeight,this.vDomBottomPad=this.vDomBottom==this.displayRowsCount-1?0:Math.max(this.vDomScrollHeight-this.vDomTopPad-rowsHeight-topPadHeight,0)):(this.vDomTopPad=0,this.vDomRowHeight=Math.floor((rowsHeight+topPadHeight)/i),this.vDomBottomPad=this.vDomRowHeight*(this.displayRowsCount-this.vDomBottom-1),this.vDomScrollHeight=topPadHeight+rowsHeight+this.vDomBottomPad-this.height),element.style.paddingTop=this.vDomTopPad+"px",element.style.paddingBottom=this.vDomBottomPad+"px",forceMove&&(this.scrollTop=this.vDomTopPad+topPadHeight+offset-(this.element.scrollWidth>this.element.clientWidth?this.element.offsetHeight-this.element.clientHeight:0)),this.scrollTop=Math.min(this.scrollTop,this.element.scrollHeight-this.height),this.element.scrollWidth>this.element.offsetWidth&&forceMove&&(this.scrollTop+=this.element.offsetHeight-this.element.clientHeight),this.vDomScrollPosTop=this.scrollTop,this.vDomScrollPosBottom=this.scrollTop,holder.scrollTop=this.scrollTop,element.style.minWidth=onlyGroupHeaders?this.table.columnManager.getWidth()+"px":"",this.table.options.groupBy&&"fitDataFill"!=this.table.modules.layout.getMode()&&this.displayRowsCount==this.table.modules.groupRows.countGroups()&&(this.tableElement.style.minWidth=this.table.columnManager.getWidth())}else this.renderEmptyScroll();this.fixedHeight||this.adjustTableSize()},RowManager.prototype.scrollVertical=function(dir){var topDiff=this.scrollTop-this.vDomScrollPosTop,bottomDiff=this.scrollTop-this.vDomScrollPosBottom,margin=2*this.vDomWindowBuffer;if(-topDiff>margin||bottomDiff>margin){var left=this.scrollLeft;this._virtualRenderFill(Math.floor(this.element.scrollTop/this.element.scrollHeight*this.displayRowsCount)),this.scrollHorizontal(left)}else dir?(topDiff<0&&this._addTopRow(-topDiff),bottomDiff<0&&(this.vDomScrollHeight-this.scrollTop>this.vDomWindowBuffer?this._removeBottomRow(-bottomDiff):this.vDomScrollPosBottom=this.scrollTop)):(topDiff>=0&&(this.scrollTop>this.vDomWindowBuffer?this._removeTopRow(topDiff):this.vDomScrollPosTop=this.scrollTop),bottomDiff>=0&&this._addBottomRow(bottomDiff))},RowManager.prototype._addTopRow=function(topDiff){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,table=this.tableElement,rows=this.getDisplayRows();if(this.vDomTop){var index=this.vDomTop-1,topRow=rows[index],topRowHeight=topRow.getHeight()||this.vDomRowHeight;topDiff>=topRowHeight&&(this.styleRow(topRow,index),table.insertBefore(topRow.getElement(),table.firstChild),topRow.initialized&&topRow.heightInitialized||(this.vDomTopNewRows.push(topRow),topRow.heightInitialized||topRow.clearCellHeight()),topRow.initialize(),this.vDomTopPad-=topRowHeight,this.vDomTopPad<0&&(this.vDomTopPad=index*this.vDomRowHeight),index||(this.vDomTopPad=0),table.style.paddingTop=this.vDomTopPad+"px",this.vDomScrollPosTop-=topRowHeight,this.vDomTop--),topDiff=-(this.scrollTop-this.vDomScrollPosTop),topRow.getHeight()>this.vDomWindowBuffer&&(this.vDomWindowBuffer=2*topRow.getHeight()),i=(rows[this.vDomTop-1].getHeight()||this.vDomRowHeight)?this._addTopRow(topDiff,i+1):this._quickNormalizeRowHeight(this.vDomTopNewRows)}},RowManager.prototype._removeTopRow=function(topDiff){var table=this.tableElement,topRow=this.getDisplayRows()[this.vDomTop],topRowHeight=topRow.getHeight()||this.vDomRowHeight;if(topDiff>=topRowHeight){var rowEl=topRow.getElement();rowEl.parentNode.removeChild(rowEl),this.vDomTopPad+=topRowHeight,table.style.paddingTop=this.vDomTopPad+"px",this.vDomScrollPosTop+=this.vDomTop?topRowHeight:topRowHeight+this.vDomWindowBuffer,this.vDomTop++,topDiff=this.scrollTop-this.vDomScrollPosTop,this._removeTopRow(topDiff)}},RowManager.prototype._addBottomRow=function(bottomDiff){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,table=this.tableElement,rows=this.getDisplayRows();if(this.vDomBottom=bottomRowHeight&&(this.styleRow(bottomRow,index),table.appendChild(bottomRow.getElement()),bottomRow.initialized&&bottomRow.heightInitialized||(this.vDomBottomNewRows.push(bottomRow),bottomRow.heightInitialized||bottomRow.clearCellHeight()),bottomRow.initialize(),this.vDomBottomPad-=bottomRowHeight,(this.vDomBottomPad<0||index==this.displayRowsCount-1)&&(this.vDomBottomPad=0),table.style.paddingBottom=this.vDomBottomPad+"px",this.vDomScrollPosBottom+=bottomRowHeight,this.vDomBottom++),bottomDiff=this.scrollTop-this.vDomScrollPosBottom,bottomRow.getHeight()>this.vDomWindowBuffer&&(this.vDomWindowBuffer=2*bottomRow.getHeight()),i=(rows[this.vDomBottom+1].getHeight()||this.vDomRowHeight)?this._addBottomRow(bottomDiff,i+1):this._quickNormalizeRowHeight(this.vDomBottomNewRows)}},RowManager.prototype._removeBottomRow=function(bottomDiff){var table=this.tableElement,bottomRow=this.getDisplayRows()[this.vDomBottom],bottomRowHeight=bottomRow.getHeight()||this.vDomRowHeight;if(bottomDiff>=bottomRowHeight){var rowEl=bottomRow.getElement();rowEl.parentNode&&rowEl.parentNode.removeChild(rowEl),this.vDomBottomPad+=bottomRowHeight,this.vDomBottomPad<0&&(this.vDomBottomPad=0),table.style.paddingBottom=this.vDomBottomPad+"px",this.vDomScrollPosBottom-=bottomRowHeight,this.vDomBottom--,bottomDiff=-(this.scrollTop-this.vDomScrollPosBottom),this._removeBottomRow(bottomDiff)}},RowManager.prototype._quickNormalizeRowHeight=function(rows){rows.forEach((function(row){row.calcHeight()})),rows.forEach((function(row){row.setCellHeight()})),rows.length=0},RowManager.prototype.normalizeHeight=function(){this.activeRows.forEach((function(row){row.normalizeHeight()}))},RowManager.prototype.adjustTableSize=function(){var initialHeight=this.element.clientHeight,modExists;if("virtual"===this.renderMode){var otherHeight=this.columnManager.getElement().offsetHeight+(this.table.footerManager&&!this.table.footerManager.external?this.table.footerManager.getElement().offsetHeight:0);this.fixedHeight?(this.element.style.minHeight="calc(100% - "+otherHeight+"px)",this.element.style.height="calc(100% - "+otherHeight+"px)",this.element.style.maxHeight="calc(100% - "+otherHeight+"px)"):(this.element.style.height="",this.element.style.height=this.table.element.clientHeight-otherHeight+"px",this.element.scrollTop=this.scrollTop),this.height=this.element.clientHeight,this.vDomWindowBuffer=this.table.options.virtualDomBuffer||this.height,this.fixedHeight||initialHeight==this.element.clientHeight||((modExists=this.table.modExists("resizeTable"))&&!this.table.modules.resizeTable.autoResize||!modExists)&&this.redraw()}},RowManager.prototype.reinitialize=function(){this.rows.forEach((function(row){row.reinitialize()}))},RowManager.prototype.blockRedraw=function(){this.redrawBlock=!0,this.redrawBlockRestoreConfig=!1},RowManager.prototype.restoreRedraw=function(){this.redrawBlock=!1,this.redrawBlockRestoreConfig?(this.refreshActiveData(this.redrawBlockRestoreConfig.stage,this.redrawBlockRestoreConfig.skipStage,this.redrawBlockRestoreConfig.renderInPosition),this.redrawBlockRestoreConfig=!1):this.redrawBlockRederInPosition&&this.reRenderInPosition(),this.redrawBlockRederInPosition=!1},RowManager.prototype.redraw=function(force){var pos=0,left=this.scrollLeft;this.adjustTableSize(),this.table.tableWidth=this.table.element.clientWidth,force?this.renderTable():("classic"==this.renderMode?this.table.options.groupBy?this.refreshActiveData("group",!1,!1):this._simpleRender():(this.reRenderInPosition(),this.scrollHorizontal(left)),this.displayRowsCount||this.table.options.placeholder&&this.getElement().appendChild(this.table.options.placeholder))},RowManager.prototype.resetScroll=function(){if(this.element.scrollLeft=0,this.element.scrollTop=0,"ie"===this.table.browser){var event=document.createEvent("Event");event.initEvent("scroll",!1,!0),this.element.dispatchEvent(event)}else this.element.dispatchEvent(new Event("scroll"))};var RowComponent=function RowComponent(row){this._row=row};RowComponent.prototype.getData=function(transform){return this._row.getData(transform)},RowComponent.prototype.getElement=function(){return this._row.getElement()},RowComponent.prototype.getCells=function(){var cells=[];return this._row.getCells().forEach((function(cell){cells.push(cell.getComponent())})),cells},RowComponent.prototype.getCell=function(column){var cell=this._row.getCell(column);return!!cell&&cell.getComponent()},RowComponent.prototype.getIndex=function(){return this._row.getData("data")[this._row.table.options.index]},RowComponent.prototype.getPosition=function(active){return this._row.table.rowManager.getRowPosition(this._row,active)},RowComponent.prototype.delete=function(){return this._row.delete()},RowComponent.prototype.scrollTo=function(){return this._row.table.rowManager.scrollToRow(this._row)},RowComponent.prototype.pageTo=function(){if(this._row.table.modExists("page",!0))return this._row.table.modules.page.setPageToRow(this._row)},RowComponent.prototype.move=function(to,after){this._row.moveToRow(to,after)},RowComponent.prototype.update=function(data){return this._row.updateData(data)},RowComponent.prototype.normalizeHeight=function(){this._row.normalizeHeight(!0)},RowComponent.prototype.select=function(){this._row.table.modules.selectRow.selectRows(this._row)},RowComponent.prototype.deselect=function(){this._row.table.modules.selectRow.deselectRows(this._row)},RowComponent.prototype.toggleSelect=function(){this._row.table.modules.selectRow.toggleRow(this._row)},RowComponent.prototype.isSelected=function(){return this._row.table.modules.selectRow.isRowSelected(this._row)},RowComponent.prototype._getSelf=function(){return this._row},RowComponent.prototype.validate=function(){return this._row.validate()},RowComponent.prototype.freeze=function(){this._row.table.modExists("frozenRows",!0)&&this._row.table.modules.frozenRows.freezeRow(this._row)},RowComponent.prototype.unfreeze=function(){this._row.table.modExists("frozenRows",!0)&&this._row.table.modules.frozenRows.unfreezeRow(this._row)},RowComponent.prototype.isFrozen=function(){var index;return!!this._row.table.modExists("frozenRows",!0)&&this._row.table.modules.frozenRows.rows.indexOf(this._row)>-1},RowComponent.prototype.treeCollapse=function(){this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.collapseRow(this._row)},RowComponent.prototype.treeExpand=function(){this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.expandRow(this._row)},RowComponent.prototype.treeToggle=function(){this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.toggleRow(this._row)},RowComponent.prototype.getTreeParent=function(){return!!this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.getTreeParent(this._row)},RowComponent.prototype.getTreeChildren=function(){return!!this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.getTreeChildren(this._row)},RowComponent.prototype.addTreeChild=function(data,pos,index){return!!this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.addTreeChildRow(this._row,data,pos,index)},RowComponent.prototype.reformat=function(){return this._row.reinitialize()},RowComponent.prototype.getGroup=function(){return this._row.getGroup().getComponent()},RowComponent.prototype.getTable=function(){return this._row.table},RowComponent.prototype.getNextRow=function(){var row=this._row.nextRow();return row?row.getComponent():row},RowComponent.prototype.getPrevRow=function(){var row=this._row.prevRow();return row?row.getComponent():row};var Row=function Row(data,parent){var type=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"row";this.table=parent.table,this.parent=parent,this.data={},this.type=type,this.element=this.createElement(),this.modules={},this.cells=[],this.height=0,this.heightStyled="",this.manualHeight=!1,this.outerHeight=0,this.initialized=!1,this.heightInitialized=!1,this.component=null,this.setData(data),this.generateElement()};Row.prototype.createElement=function(){var el=document.createElement("div");return el.classList.add("tabulator-row"),el.setAttribute("role","row"),el},Row.prototype.getElement=function(){return this.element},Row.prototype.detachElement=function(){this.element&&this.element.parentNode&&this.element.parentNode.removeChild(this.element)},Row.prototype.generateElement=function(){var self=this,dblTap,tapHold,tap;!1!==self.table.options.selectable&&self.table.modExists("selectRow")&&self.table.modules.selectRow.initializeRow(this),!1!==self.table.options.movableRows&&self.table.modExists("moveRow")&&self.table.modules.moveRow.initializeRow(this),!1!==self.table.options.dataTree&&self.table.modExists("dataTree")&&self.table.modules.dataTree.initializeRow(this),"collapse"===self.table.options.responsiveLayout&&self.table.modExists("responsiveLayout")&&self.table.modules.responsiveLayout.initializeRow(this),self.table.options.rowContextMenu&&this.table.modExists("menu")&&self.table.modules.menu.initializeRow(this),self.table.options.rowClick&&self.element.addEventListener("click",(function(e){self.table.options.rowClick(e,self.getComponent())})),self.table.options.rowDblClick&&self.element.addEventListener("dblclick",(function(e){self.table.options.rowDblClick(e,self.getComponent())})),self.table.options.rowContext&&self.element.addEventListener("contextmenu",(function(e){self.table.options.rowContext(e,self.getComponent())})),self.table.options.rowMouseEnter&&self.element.addEventListener("mouseenter",(function(e){self.table.options.rowMouseEnter(e,self.getComponent())})),self.table.options.rowMouseLeave&&self.element.addEventListener("mouseleave",(function(e){self.table.options.rowMouseLeave(e,self.getComponent())})),self.table.options.rowMouseOver&&self.element.addEventListener("mouseover",(function(e){self.table.options.rowMouseOver(e,self.getComponent())})),self.table.options.rowMouseOut&&self.element.addEventListener("mouseout",(function(e){self.table.options.rowMouseOut(e,self.getComponent())})),self.table.options.rowMouseMove&&self.element.addEventListener("mousemove",(function(e){self.table.options.rowMouseMove(e,self.getComponent())})),self.table.options.rowTap&&(tap=!1,self.element.addEventListener("touchstart",(function(e){tap=!0}),{passive:!0}),self.element.addEventListener("touchend",(function(e){tap&&self.table.options.rowTap(e,self.getComponent()),tap=!1}))),self.table.options.rowDblTap&&(dblTap=null,self.element.addEventListener("touchend",(function(e){dblTap?(clearTimeout(dblTap),dblTap=null,self.table.options.rowDblTap(e,self.getComponent())):dblTap=setTimeout((function(){clearTimeout(dblTap),dblTap=null}),300)}))),self.table.options.rowTapHold&&(tapHold=null,self.element.addEventListener("touchstart",(function(e){clearTimeout(tapHold),tapHold=setTimeout((function(){clearTimeout(tapHold),tapHold=null,tap=!1,self.table.options.rowTapHold(e,self.getComponent())}),1e3)}),{passive:!0}),self.element.addEventListener("touchend",(function(e){clearTimeout(tapHold),tapHold=null})))},Row.prototype.generateCells=function(){this.cells=this.table.columnManager.generateCells(this)},Row.prototype.initialize=function(force){var self=this;if(!self.initialized||force){for(self.deleteCells();self.element.firstChild;)self.element.removeChild(self.element.firstChild);this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layoutRow(this),this.generateCells(),self.cells.forEach((function(cell){self.element.appendChild(cell.getElement()),cell.cellRendered()})),force&&self.normalizeHeight(),self.table.options.dataTree&&self.table.modExists("dataTree")&&self.table.modules.dataTree.layoutRow(this),"collapse"===self.table.options.responsiveLayout&&self.table.modExists("responsiveLayout")&&self.table.modules.responsiveLayout.layoutRow(this),self.table.options.rowFormatter&&self.table.options.rowFormatter(self.getComponent()),self.table.options.resizableRows&&self.table.modExists("resizeRows")&&self.table.modules.resizeRows.initializeRow(self),self.initialized=!0}},Row.prototype.reinitializeHeight=function(){this.heightInitialized=!1,null!==this.element.offsetParent&&this.normalizeHeight(!0)},Row.prototype.reinitialize=function(){this.initialized=!1,this.heightInitialized=!1,this.manualHeight||(this.height=0,this.heightStyled=""),null!==this.element.offsetParent&&this.initialize(!0)},Row.prototype.calcHeight=function(force){var maxHeight=0,minHeight=this.table.options.resizableRows?this.element.clientHeight:0;this.cells.forEach((function(cell){var height=cell.getHeight();height>maxHeight&&(maxHeight=height)})),this.height=force?Math.max(maxHeight,minHeight):this.manualHeight?this.height:Math.max(maxHeight,minHeight),this.heightStyled=this.height?this.height+"px":"",this.outerHeight=this.element.offsetHeight},Row.prototype.setCellHeight=function(){this.cells.forEach((function(cell){cell.setHeight()})),this.heightInitialized=!0},Row.prototype.clearCellHeight=function(){this.cells.forEach((function(cell){cell.clearHeight()}))},Row.prototype.normalizeHeight=function(force){force&&this.clearCellHeight(),this.calcHeight(force),this.setCellHeight()},Row.prototype.setHeight=function(height,force){(this.height!=height||force)&&(this.manualHeight=!0,this.height=height,this.heightStyled=height?height+"px":"",this.setCellHeight(),this.outerHeight=this.element.offsetHeight)},Row.prototype.getHeight=function(){return this.outerHeight},Row.prototype.getWidth=function(){return this.element.offsetWidth},Row.prototype.deleteCell=function(cell){var index=this.cells.indexOf(cell);index>-1&&this.cells.splice(index,1)},Row.prototype.setData=function(data){this.table.modExists("mutator")&&(data=this.table.modules.mutator.transformRow(data,"data")),this.data=data,this.table.options.reactiveData&&this.table.modExists("reactiveData",!0)&&this.table.modules.reactiveData.watchRow(this)},Row.prototype.updateData=function(updatedData){var _this15=this,visible=Tabulator.prototype.helpers.elVisible(this.element),tempData={},newRowData;return new Promise((function(resolve,reject){for(var attrname in"string"==typeof updatedData&&(updatedData=JSON.parse(updatedData)),_this15.table.options.reactiveData&&_this15.table.modExists("reactiveData",!0)&&_this15.table.modules.reactiveData.block(),_this15.table.modExists("mutator")?(tempData=Object.assign(tempData,_this15.data),tempData=Object.assign(tempData,updatedData),newRowData=_this15.table.modules.mutator.transformRow(tempData,"data",updatedData)):newRowData=updatedData,newRowData)_this15.data[attrname]=newRowData[attrname];for(var attrname in _this15.table.options.reactiveData&&_this15.table.modExists("reactiveData",!0)&&_this15.table.modules.reactiveData.unblock(),updatedData){var columns;_this15.table.columnManager.getColumnsByFieldRoot(attrname).forEach((function(column){var cell=_this15.getCell(column.getField());if(cell){var value=column.getFieldValue(newRowData);cell.getValue()!=value&&(cell.setValueProcessData(value),visible&&cell.cellRendered())}}))}visible?(_this15.normalizeHeight(!0),_this15.table.options.rowFormatter&&_this15.table.options.rowFormatter(_this15.getComponent())):(_this15.initialized=!1,_this15.height=0,_this15.heightStyled=""),!1!==_this15.table.options.dataTree&&_this15.table.modExists("dataTree")&&_this15.table.modules.dataTree.redrawNeeded(updatedData)&&(_this15.table.modules.dataTree.initializeRow(_this15),_this15.table.modules.dataTree.layoutRow(_this15),_this15.table.rowManager.refreshActiveData("tree",!1,!0)),_this15.table.options.rowUpdated.call(_this15.table,_this15.getComponent()),resolve()}))},Row.prototype.getData=function(transform){var self=this;return transform?this.table.modExists("accessor")?this.table.modules.accessor.transformRow(this.data,transform):void 0:this.data},Row.prototype.getCell=function(column){var match=!1;return column=this.table.columnManager.findColumn(column),match=this.cells.find((function(cell){return cell.column===column}))},Row.prototype.getCellIndex=function(findCell){return this.cells.findIndex((function(cell){return cell===findCell}))},Row.prototype.findNextEditableCell=function(index){var nextCell=!1;if(index0)for(var i=index-1;i>=0;i--){var cell=this.cells[i],allowEdit=!0;if(cell.column.modules.edit&&Tabulator.prototype.helpers.elVisible(cell.getElement())&&("function"==typeof cell.column.modules.edit.check&&(allowEdit=cell.column.modules.edit.check(cell.getComponent())),allowEdit)){prevCell=cell;break}}return prevCell},Row.prototype.getCells=function(){return this.cells},Row.prototype.nextRow=function(){var row;return this.table.rowManager.nextDisplayRow(this,!0)||!1},Row.prototype.prevRow=function(){var row;return this.table.rowManager.prevDisplayRow(this,!0)||!1},Row.prototype.moveToRow=function(to,before){var toRow=this.table.rowManager.findRow(to);toRow?(this.table.rowManager.moveRowActual(this,toRow,!before),this.table.rowManager.refreshActiveData("display",!1,!0)):console.warn("Move Error - No matching row found:",to)},Row.prototype.validate=function(){var invalid=[];return this.cells.forEach((function(cell){cell.validate()||invalid.push(cell.getComponent())})),!invalid.length||invalid},Row.prototype.delete=function(){var _this16=this;return new Promise((function(resolve,reject){var index,rows;_this16.table.options.history&&_this16.table.modExists("history")&&(_this16.table.options.groupBy&&_this16.table.modExists("groupRows")?(index=(rows=_this16.getGroup().rows).indexOf(_this16))&&(index=rows[index-1]):(index=_this16.table.rowManager.getRowIndex(_this16))&&(index=_this16.table.rowManager.rows[index-1]),_this16.table.modules.history.action("rowDelete",_this16,{data:_this16.getData(),pos:!index,index:index})),_this16.deleteActual(),resolve()}))},Row.prototype.deleteActual=function(blockRedraw){var index=this.table.rowManager.getRowIndex(this);this.table.modExists("selectRow")&&this.table.modules.selectRow._deselectRow(this,!0),this.table.modExists("edit")&&this.table.modules.edit.currentCell.row===this&&this.table.modules.edit.cancelEdit(),this.table.options.reactiveData&&this.table.modExists("reactiveData",!0),this.modules.group&&this.modules.group.removeRow(this),this.table.rowManager.deleteRow(this,blockRedraw),this.deleteCells(),this.initialized=!1,this.heightInitialized=!1,this.table.options.dataTree&&this.table.modExists("dataTree",!0)&&this.table.modules.dataTree.rowDelete(this),this.table.modExists("columnCalcs")&&(this.table.options.groupBy&&this.table.modExists("groupRows")?this.table.modules.columnCalcs.recalcRowGroup(this):this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows))},Row.prototype.deleteCells=function(){for(var cellCount=this.cells.length,_i5=0;_i5-1?(this.browser="ie",this.browserSlow=!0):ua.indexOf("Edge")>-1?(this.browser="edge",this.browserSlow=!0):ua.indexOf("Firefox")>-1?(this.browser="firefox",this.browserSlow=!1):(this.browser="other",this.browserSlow=!1),this.browserMobile=/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(ua)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(ua.substr(0,4))},Tabulator.prototype.blockRedraw=function(){return this.rowManager.blockRedraw()},Tabulator.prototype.restoreRedraw=function(){return this.rowManager.restoreRedraw()},Tabulator.prototype.setDataFromLocalFile=function(extensions){var _this18=this;return new Promise((function(resolve,reject){var input=document.createElement("input");input.type="file",input.accept=extensions||".json,application/json",input.addEventListener("change",(function(e){var file=input.files[0],reader=new FileReader,data;reader.readAsText(file),reader.onload=function(e){try{data=JSON.parse(reader.result)}catch(e){return console.warn("File Load Error - File contents is invalid JSON",e),void reject(e)}_this18._setData(data).then((function(data){resolve(data)})).catch((function(err){resolve(err)}))},reader.onerror=function(e){console.warn("File Load Error - Unable to read file"),reject()}})),input.click()}))},Tabulator.prototype.setData=function(data,params,config){return this.modExists("ajax")&&this.modules.ajax.blockActiveRequest(),this._setData(data,params,config,!1,!0)},Tabulator.prototype._setData=function(data,params,config,inPosition,columnsChanged){var self=this;return"string"!=typeof data?data?this.rowManager.setData(data,inPosition,columnsChanged):this.modExists("ajax")&&(this.modules.ajax.getUrl||this.options.ajaxURLGenerator)?"remote"==this.options.pagination&&this.modExists("page",!0)?(this.modules.page.reset(!0,!0),this.modules.page.setPage(1)):this.modules.ajax.loadData(inPosition,columnsChanged):this.rowManager.setData([],inPosition,columnsChanged):0==data.indexOf("{")||0==data.indexOf("[")?this.rowManager.setData(JSON.parse(data),inPosition,columnsChanged):this.modExists("ajax",!0)?(params&&this.modules.ajax.setParams(params),config&&this.modules.ajax.setConfig(config),this.modules.ajax.setUrl(data),"remote"==this.options.pagination&&this.modExists("page",!0)?(this.modules.page.reset(!0,!0),this.modules.page.setPage(1)):this.modules.ajax.loadData(inPosition,columnsChanged)):void 0},Tabulator.prototype.clearData=function(){this.modExists("ajax")&&this.modules.ajax.blockActiveRequest(),this.rowManager.clearData()},Tabulator.prototype.getData=function(active){return!0===active&&(console.warn("passing a boolean to the getData function is deprecated, you should now pass the string 'active'"),active="active"),this.rowManager.getData(active)},Tabulator.prototype.getDataCount=function(active){return!0===active&&(console.warn("passing a boolean to the getDataCount function is deprecated, you should now pass the string 'active'"),active="active"),this.rowManager.getDataCount(active)},Tabulator.prototype.searchRows=function(field,type,value){if(this.modExists("filter",!0))return this.modules.filter.search("rows",field,type,value)},Tabulator.prototype.searchData=function(field,type,value){if(this.modExists("filter",!0))return this.modules.filter.search("data",field,type,value)},Tabulator.prototype.getHtml=function(visible,style,config){if(this.modExists("export",!0))return this.modules.export.getHtml(visible,style,config)},Tabulator.prototype.print=function(visible,style,config){if(this.modExists("print",!0))return this.modules.print.printFullscreen(visible,style,config)},Tabulator.prototype.getAjaxUrl=function(){if(this.modExists("ajax",!0))return this.modules.ajax.getUrl()},Tabulator.prototype.replaceData=function(data,params,config){return this.modExists("ajax")&&this.modules.ajax.blockActiveRequest(),this._setData(data,params,config,!0)},Tabulator.prototype.updateData=function(data){var _this19=this,self=this,responses=0;return new Promise((function(resolve,reject){_this19.modExists("ajax")&&_this19.modules.ajax.blockActiveRequest(),"string"==typeof data&&(data=JSON.parse(data)),data?data.forEach((function(item){var row=self.rowManager.findRow(item[self.options.index]);row&&(responses++,row.updateData(item).then((function(){--responses||resolve()})))})):(console.warn("Update Error - No data provided"),reject("Update Error - No data provided"))}))},Tabulator.prototype.addData=function(data,pos,index){var _this20=this;return new Promise((function(resolve,reject){_this20.modExists("ajax")&&_this20.modules.ajax.blockActiveRequest(),"string"==typeof data&&(data=JSON.parse(data)),data?_this20.rowManager.addRows(data,pos,index).then((function(rows){var output=[];rows.forEach((function(row){output.push(row.getComponent())})),resolve(output)})):(console.warn("Update Error - No data provided"),reject("Update Error - No data provided"))}))},Tabulator.prototype.updateOrAddData=function(data){var _this21=this,self=this,rows=[],responses=0;return new Promise((function(resolve,reject){_this21.modExists("ajax")&&_this21.modules.ajax.blockActiveRequest(),"string"==typeof data&&(data=JSON.parse(data)),data?data.forEach((function(item){var row=self.rowManager.findRow(item[self.options.index]);responses++,row?row.updateData(item).then((function(){responses--,rows.push(row.getComponent()),responses||resolve(rows)})):self.rowManager.addRows(item).then((function(newRows){responses--,rows.push(newRows[0].getComponent()),responses||resolve(rows)}))})):(console.warn("Update Error - No data provided"),reject("Update Error - No data provided"))}))},Tabulator.prototype.getRow=function(index){var row=this.rowManager.findRow(index);return row?row.getComponent():(console.warn("Find Error - No matching row found:",index),!1)},Tabulator.prototype.getRowFromPosition=function(position,active){var row=this.rowManager.getRowFromPosition(position,active);return row?row.getComponent():(console.warn("Find Error - No matching row found:",position),!1)},Tabulator.prototype.deleteRow=function(index){var _this22=this;return new Promise((function(resolve,reject){var self=_this22,count=0,successCount=0,foundRows=[];function doneCheck(){++count==index.length&&successCount&&(self.rowManager.reRenderInPosition(),resolve())}Array.isArray(index)||(index=[index]),index.forEach((function(item){var row=_this22.rowManager.findRow(item,!0);row?foundRows.push(row):(console.warn("Delete Error - No matching row found:",item),reject("Delete Error - No matching row found"),doneCheck())})),foundRows.sort((function(a,b){return _this22.rowManager.rows.indexOf(a)>_this22.rowManager.rows.indexOf(b)?1:-1})),foundRows.forEach((function(row){row.delete().then((function(){successCount++,doneCheck()})).catch((function(err){doneCheck(),reject(err)}))}))}))},Tabulator.prototype.addRow=function(data,pos,index){var _this23=this;return new Promise((function(resolve,reject){"string"==typeof data&&(data=JSON.parse(data)),_this23.rowManager.addRows(data,pos,index).then((function(rows){_this23.modExists("columnCalcs")&&_this23.modules.columnCalcs.recalc(_this23.rowManager.activeRows),resolve(rows[0].getComponent())}))}))},Tabulator.prototype.updateOrAddRow=function(index,data){var _this24=this;return new Promise((function(resolve,reject){var row=_this24.rowManager.findRow(index);"string"==typeof data&&(data=JSON.parse(data)),row?row.updateData(data).then((function(){_this24.modExists("columnCalcs")&&_this24.modules.columnCalcs.recalc(_this24.rowManager.activeRows),resolve(row.getComponent())})).catch((function(err){reject(err)})):row=_this24.rowManager.addRows(data).then((function(rows){_this24.modExists("columnCalcs")&&_this24.modules.columnCalcs.recalc(_this24.rowManager.activeRows),resolve(rows[0].getComponent())})).catch((function(err){reject(err)}))}))},Tabulator.prototype.updateRow=function(index,data){var _this25=this;return new Promise((function(resolve,reject){var row=_this25.rowManager.findRow(index);"string"==typeof data&&(data=JSON.parse(data)),row?row.updateData(data).then((function(){resolve(row.getComponent())})).catch((function(err){reject(err)})):(console.warn("Update Error - No matching row found:",index),reject("Update Error - No matching row found"))}))},Tabulator.prototype.scrollToRow=function(index,position,ifVisible){var _this26=this;return new Promise((function(resolve,reject){var row=_this26.rowManager.findRow(index);row?_this26.rowManager.scrollToRow(row,position,ifVisible).then((function(){resolve()})).catch((function(err){reject(err)})):(console.warn("Scroll Error - No matching row found:",index),reject("Scroll Error - No matching row found"))}))},Tabulator.prototype.moveRow=function(from,to,after){var fromRow=this.rowManager.findRow(from);fromRow?fromRow.moveToRow(to,after):console.warn("Move Error - No matching row found:",from)},Tabulator.prototype.getRows=function(active){return!0===active&&(console.warn("passing a boolean to the getRows function is deprecated, you should now pass the string 'active'"),active="active"),this.rowManager.getComponents(active)},Tabulator.prototype.getRowPosition=function(index,active){var row=this.rowManager.findRow(index);return row?this.rowManager.getRowPosition(row,active):(console.warn("Position Error - No matching row found:",index),!1)},Tabulator.prototype.copyToClipboard=function(selector){this.modExists("clipboard",!0)&&this.modules.clipboard.copy(selector)},Tabulator.prototype.setColumns=function(definition){this.columnManager.setColumns(definition)},Tabulator.prototype.getColumns=function(structured){return this.columnManager.getComponents(structured)},Tabulator.prototype.getColumn=function(field){var col=this.columnManager.findColumn(field);return col?col.getComponent():(console.warn("Find Error - No matching column found:",field),!1)},Tabulator.prototype.getColumnDefinitions=function(){return this.columnManager.getDefinitionTree()},Tabulator.prototype.getColumnLayout=function(){if(this.modExists("persistence",!0))return this.modules.persistence.parseColumns(this.columnManager.getColumns())},Tabulator.prototype.setColumnLayout=function(layout){return!!this.modExists("persistence",!0)&&(this.columnManager.setColumns(this.modules.persistence.mergeDefinition(this.options.columns,layout)),!0)},Tabulator.prototype.showColumn=function(field){var column=this.columnManager.findColumn(field);if(!column)return console.warn("Column Show Error - No matching column found:",field),!1;column.show(),this.options.responsiveLayout&&this.modExists("responsiveLayout",!0)&&this.modules.responsiveLayout.update()},Tabulator.prototype.hideColumn=function(field){var column=this.columnManager.findColumn(field);if(!column)return console.warn("Column Hide Error - No matching column found:",field),!1;column.hide(),this.options.responsiveLayout&&this.modExists("responsiveLayout",!0)&&this.modules.responsiveLayout.update()},Tabulator.prototype.toggleColumn=function(field){var column=this.columnManager.findColumn(field);if(!column)return console.warn("Column Visibility Toggle Error - No matching column found:",field),!1;column.visible?column.hide():column.show()},Tabulator.prototype.addColumn=function(definition,before,field){var _this27=this;return new Promise((function(resolve,reject){var column=_this27.columnManager.findColumn(field);_this27.columnManager.addColumn(definition,before,column).then((function(column){resolve(column.getComponent())})).catch((function(err){reject(err)}))}))},Tabulator.prototype.deleteColumn=function(field){var _this28=this;return new Promise((function(resolve,reject){var column=_this28.columnManager.findColumn(field);column?column.delete().then((function(){resolve()})).catch((function(err){reject(err)})):(console.warn("Column Delete Error - No matching column found:",field),reject())}))},Tabulator.prototype.updateColumnDefinition=function(field,definition){var _this29=this;return new Promise((function(resolve,reject){var column=_this29.columnManager.findColumn(field);column?column.updateDefinition(definition).then((function(col){resolve(col)})).catch((function(err){reject(err)})):(console.warn("Column Update Error - No matching column found:",field),reject())}))},Tabulator.prototype.moveColumn=function(from,to,after){var fromColumn=this.columnManager.findColumn(from),toColumn=this.columnManager.findColumn(to);fromColumn?toColumn?this.columnManager.moveColumn(fromColumn,toColumn,after):console.warn("Move Error - No matching column found:",toColumn):console.warn("Move Error - No matching column found:",from)},Tabulator.prototype.scrollToColumn=function(field,position,ifVisible){var _this30=this;return new Promise((function(resolve,reject){var column=_this30.columnManager.findColumn(field);column?_this30.columnManager.scrollToColumn(column,position,ifVisible).then((function(){resolve()})).catch((function(err){reject(err)})):(console.warn("Scroll Error - No matching column found:",field),reject("Scroll Error - No matching column found"))}))},Tabulator.prototype.setLocale=function(locale){this.modules.localize.setLocale(locale)},Tabulator.prototype.getLocale=function(){return this.modules.localize.getLocale()},Tabulator.prototype.getLang=function(locale){return this.modules.localize.getLang(locale)},Tabulator.prototype.redraw=function(force){this.columnManager.redraw(force),this.rowManager.redraw(force)},Tabulator.prototype.setHeight=function(height){"classic"!==this.rowManager.renderMode?(this.options.height=isNaN(height)?height:height+"px",this.element.style.height=this.options.height,this.rowManager.setRenderMode(),this.rowManager.redraw()):console.warn("setHeight function is not available in classic render mode")},Tabulator.prototype.setSort=function(sortList,dir){this.modExists("sort",!0)&&(this.modules.sort.setSort(sortList,dir),this.rowManager.sorterRefresh())},Tabulator.prototype.getSorters=function(){if(this.modExists("sort",!0))return this.modules.sort.getSort()},Tabulator.prototype.clearSort=function(){this.modExists("sort",!0)&&(this.modules.sort.clear(),this.rowManager.sorterRefresh())},Tabulator.prototype.setFilter=function(field,type,value,params){this.modExists("filter",!0)&&(this.modules.filter.setFilter(field,type,value,params),this.rowManager.filterRefresh())},Tabulator.prototype.addFilter=function(field,type,value,params){this.modExists("filter",!0)&&(this.modules.filter.addFilter(field,type,value,params),this.rowManager.filterRefresh())},Tabulator.prototype.getFilters=function(all){if(this.modExists("filter",!0))return this.modules.filter.getFilters(all)},Tabulator.prototype.setHeaderFilterFocus=function(field){if(this.modExists("filter",!0)){var column=this.columnManager.findColumn(field);if(!column)return console.warn("Column Filter Focus Error - No matching column found:",field),!1;this.modules.filter.setHeaderFilterFocus(column)}},Tabulator.prototype.getHeaderFilterValue=function(field){if(this.modExists("filter",!0)){var column=this.columnManager.findColumn(field);if(column)return this.modules.filter.getHeaderFilterValue(column);console.warn("Column Filter Error - No matching column found:",field)}},Tabulator.prototype.setHeaderFilterValue=function(field,value){if(this.modExists("filter",!0)){var column=this.columnManager.findColumn(field);if(!column)return console.warn("Column Filter Error - No matching column found:",field),!1;this.modules.filter.setHeaderFilterValue(column,value)}},Tabulator.prototype.getHeaderFilters=function(){if(this.modExists("filter",!0))return this.modules.filter.getHeaderFilters()},Tabulator.prototype.removeFilter=function(field,type,value){this.modExists("filter",!0)&&(this.modules.filter.removeFilter(field,type,value),this.rowManager.filterRefresh())},Tabulator.prototype.clearFilter=function(all){this.modExists("filter",!0)&&(this.modules.filter.clearFilter(all),this.rowManager.filterRefresh())},Tabulator.prototype.clearHeaderFilter=function(){this.modExists("filter",!0)&&(this.modules.filter.clearHeaderFilter(),this.rowManager.filterRefresh())},Tabulator.prototype.selectRow=function(rows){this.modExists("selectRow",!0)&&(!0===rows&&(console.warn("passing a boolean to the selectRowselectRow function is deprecated, you should now pass the string 'active'"),rows="active"),this.modules.selectRow.selectRows(rows))},Tabulator.prototype.deselectRow=function(rows){this.modExists("selectRow",!0)&&this.modules.selectRow.deselectRows(rows)},Tabulator.prototype.toggleSelectRow=function(row){this.modExists("selectRow",!0)&&this.modules.selectRow.toggleRow(row)},Tabulator.prototype.getSelectedRows=function(){if(this.modExists("selectRow",!0))return this.modules.selectRow.getSelectedRows()},Tabulator.prototype.getSelectedData=function(){if(this.modExists("selectRow",!0))return this.modules.selectRow.getSelectedData()},Tabulator.prototype.getInvalidCells=function(){if(this.modExists("validate",!0))return this.modules.validate.getInvalidCells()},Tabulator.prototype.clearCellValidation=function(cells){var _this31=this;this.modExists("validate",!0)&&(cells||(cells=this.modules.validate.getInvalidCells()),Array.isArray(cells)||(cells=[cells]),cells.forEach((function(cell){_this31.modules.validate.clearValidation(cell._getSelf())})))},Tabulator.prototype.validate=function(cells){var output=[];return this.rowManager.rows.forEach((function(row){var valid=row.validate();!0!==valid&&(output=output.concat(valid))})),!output.length||output},Tabulator.prototype.setMaxPage=function(max){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.setMaxPage(max)},Tabulator.prototype.setPage=function(page){return this.options.pagination&&this.modExists("page")?this.modules.page.setPage(page):new Promise((function(resolve,reject){reject()}))},Tabulator.prototype.setPageToRow=function(row){var _this32=this;return new Promise((function(resolve,reject){_this32.options.pagination&&_this32.modExists("page")&&(row=_this32.rowManager.findRow(row))?_this32.modules.page.setPageToRow(row).then((function(){resolve()})).catch((function(){reject()})):reject()}))},Tabulator.prototype.setPageSize=function(size){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.setPageSize(size),this.modules.page.setPage(1).then((function(){})).catch((function(){}))},Tabulator.prototype.getPageSize=function(){if(this.options.pagination&&this.modExists("page",!0))return this.modules.page.getPageSize()},Tabulator.prototype.previousPage=function(){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.previousPage()},Tabulator.prototype.nextPage=function(){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.nextPage()},Tabulator.prototype.getPage=function(){return!(!this.options.pagination||!this.modExists("page"))&&this.modules.page.getPage()},Tabulator.prototype.getPageMax=function(){return!(!this.options.pagination||!this.modExists("page"))&&this.modules.page.getPageMax()},Tabulator.prototype.setGroupBy=function(groups){if(!this.modExists("groupRows",!0))return!1;this.options.groupBy=groups,this.modules.groupRows.initialize(),this.rowManager.refreshActiveData("display"),this.options.persistence&&this.modExists("persistence",!0)&&this.modules.persistence.config.group&&this.modules.persistence.save("group")},Tabulator.prototype.setGroupStartOpen=function(values){if(!this.modExists("groupRows",!0))return!1;this.options.groupStartOpen=values,this.modules.groupRows.initialize(),this.options.groupBy?(this.rowManager.refreshActiveData("group"),this.options.persistence&&this.modExists("persistence",!0)&&this.modules.persistence.config.group&&this.modules.persistence.save("group")):console.warn("Grouping Update - cant refresh view, no groups have been set")},Tabulator.prototype.setGroupHeader=function(values){if(!this.modExists("groupRows",!0))return!1;this.options.groupHeader=values,this.modules.groupRows.initialize(),this.options.groupBy?(this.rowManager.refreshActiveData("group"),this.options.persistence&&this.modExists("persistence",!0)&&this.modules.persistence.config.group&&this.modules.persistence.save("group")):console.warn("Grouping Update - cant refresh view, no groups have been set")},Tabulator.prototype.getGroups=function(values){return!!this.modExists("groupRows",!0)&&this.modules.groupRows.getGroups(!0)},Tabulator.prototype.getGroupedData=function(){if(this.modExists("groupRows",!0))return this.options.groupBy?this.modules.groupRows.getGroupedData():this.getData()},Tabulator.prototype.getEditedCells=function(){if(this.modExists("edit",!0))return this.modules.edit.getEditedCells()},Tabulator.prototype.clearCellEdited=function(cells){var _this33=this;this.modExists("edit",!0)&&(cells||(cells=this.modules.edit.getEditedCells()),Array.isArray(cells)||(cells=[cells]),cells.forEach((function(cell){_this33.modules.edit.clearEdited(cell._getSelf())})))},Tabulator.prototype.getCalcResults=function(){return!!this.modExists("columnCalcs",!0)&&this.modules.columnCalcs.getResults()},Tabulator.prototype.recalc=function(){this.modExists("columnCalcs",!0)&&this.modules.columnCalcs.recalcAll(this.rowManager.activeRows)},Tabulator.prototype.navigatePrev=function(){var cell=!1;return!(!this.modExists("edit",!0)||!(cell=this.modules.edit.currentCell))&&cell.nav().prev()},Tabulator.prototype.navigateNext=function(){var cell=!1;return!(!this.modExists("edit",!0)||!(cell=this.modules.edit.currentCell))&&cell.nav().next()},Tabulator.prototype.navigateLeft=function(){var cell=!1;return!(!this.modExists("edit",!0)||!(cell=this.modules.edit.currentCell))&&(e.preventDefault(),cell.nav().left())},Tabulator.prototype.navigateRight=function(){var cell=!1;return!(!this.modExists("edit",!0)||!(cell=this.modules.edit.currentCell))&&(e.preventDefault(),cell.nav().right())},Tabulator.prototype.navigateUp=function(){var cell=!1;return!(!this.modExists("edit",!0)||!(cell=this.modules.edit.currentCell))&&(e.preventDefault(),cell.nav().up())},Tabulator.prototype.navigateDown=function(){var cell=!1;return!(!this.modExists("edit",!0)||!(cell=this.modules.edit.currentCell))&&(e.preventDefault(),cell.nav().down())},Tabulator.prototype.undo=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.undo()},Tabulator.prototype.redo=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.redo()},Tabulator.prototype.getHistoryUndoSize=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.getHistoryUndoSize()},Tabulator.prototype.getHistoryRedoSize=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.getHistoryRedoSize()},Tabulator.prototype.download=function(type,filename,options,active){this.modExists("download",!0)&&this.modules.download.download(type,filename,options,active)},Tabulator.prototype.downloadToTab=function(type,filename,options,active){this.modExists("download",!0)&&this.modules.download.download(type,filename,options,active,!0)},Tabulator.prototype.tableComms=function(table,module,action,data){this.modules.comms.receive(table,module,action,data)},Tabulator.prototype.moduleBindings={},Tabulator.prototype.extendModule=function(name,property,values){if(Tabulator.prototype.moduleBindings[name]){var source=Tabulator.prototype.moduleBindings[name].prototype[property];if(source)if("object"==(void 0===values?"undefined":_typeof(values)))for(var key in values)source[key]=values[key];else console.warn("Module Error - Invalid value type, it must be an object");else console.warn("Module Error - property does not exist:",property)}else console.warn("Module Error - module does not exist:",name)},Tabulator.prototype.registerModule=function(name,module){var self=this;Tabulator.prototype.moduleBindings[name]=module},Tabulator.prototype.bindModules=function(){for(var name in this.modules={},Tabulator.prototype.moduleBindings)this.modules[name]=new Tabulator.prototype.moduleBindings[name](this)},Tabulator.prototype.modExists=function(plugin,required){return!!this.modules[plugin]||(required&&console.error("Tabulator Module Not Installed: "+plugin),!1)},Tabulator.prototype.helpers={elVisible:function elVisible(el){return!(el.offsetWidth<=0&&el.offsetHeight<=0)},elOffset:function elOffset(el){var box=el.getBoundingClientRect();return{top:box.top+window.pageYOffset-document.documentElement.clientTop,left:box.left+window.pageXOffset-document.documentElement.clientLeft}},deepClone:function deepClone(obj){var clone=Array.isArray(obj)?[]:{};for(var i in obj)null!=obj[i]&&"object"===_typeof(obj[i])?obj[i]instanceof Date?clone[i]=new Date(obj[i]):clone[i]=this.deepClone(obj[i]):clone[i]=obj[i];return clone}},Tabulator.prototype.comms={tables:[],register:function register(table){Tabulator.prototype.comms.tables.push(table)},deregister:function deregister(table){var index=Tabulator.prototype.comms.tables.indexOf(table);index>-1&&Tabulator.prototype.comms.tables.splice(index,1)},lookupTable:function lookupTable(query,silent){var results=[],matches,match;if("string"==typeof query){if((matches=document.querySelectorAll(query)).length)for(var i=0;i0?lastCol.setWidth(gap):lastCol.reinitializeWidth()):this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()},fitColumns:function fitColumns(columns){var self=this,totalWidth=this.table.element.clientWidth,fixedWidth=0,flexWidth=0,flexGrowUnits=0,flexColWidth=0,flexColumns=[],fixedShrinkColumns=[],flexShrinkUnits=0,overflowWidth=0,gapFill=0;function calcWidth(width){var colWidth;return colWidth="string"==typeof width?width.indexOf("%")>-1?totalWidth/100*parseInt(width):parseInt(width):width}function scaleColumns(columns,freeSpace,colWidth,shrinkCols){var oversizeCols=[],oversizeSpace=0,remainingSpace=0,nextColWidth=0,gap=0,changeUnits=0,undersizeCols=[];function calcGrow(col){return colWidth*(col.column.definition.widthGrow||1)}function calcShrink(col){return calcWidth(col.width)-colWidth*(col.column.definition.widthShrink||0)}return columns.forEach((function(col,i){var width=shrinkCols?calcShrink(col):calcGrow(col);col.column.minWidth>=width?oversizeCols.push(col):(undersizeCols.push(col),changeUnits+=shrinkCols?col.column.definition.widthShrink||1:col.column.definition.widthGrow||1)})),oversizeCols.length?(oversizeCols.forEach((function(col){oversizeSpace+=shrinkCols?col.width-col.column.minWidth:col.column.minWidth,col.width=col.column.minWidth})),gap=(remainingSpace=freeSpace-oversizeSpace)-(nextColWidth=changeUnits?Math.floor(remainingSpace/changeUnits):remainingSpace)*changeUnits,gap+=scaleColumns(undersizeCols,remainingSpace,nextColWidth,shrinkCols)):(gap=changeUnits?freeSpace-Math.floor(freeSpace/changeUnits)*changeUnits:freeSpace,undersizeCols.forEach((function(column){column.width=shrinkCols?calcShrink(column):calcGrow(column)}))),gap}this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update(),this.table.rowManager.element.scrollHeight>this.table.rowManager.element.clientHeight&&(totalWidth-=this.table.rowManager.element.offsetWidth-this.table.rowManager.element.clientWidth),columns.forEach((function(column){var width,minWidth,colWidth;column.visible&&(width=column.definition.width,minWidth=parseInt(column.minWidth),width?(colWidth=calcWidth(width),fixedWidth+=colWidth>minWidth?colWidth:minWidth,column.definition.widthShrink&&(fixedShrinkColumns.push({column:column,width:colWidth>minWidth?colWidth:minWidth}),flexShrinkUnits+=column.definition.widthShrink)):(flexColumns.push({column:column,width:0}),flexGrowUnits+=column.definition.widthGrow||1))})),flexWidth=totalWidth-fixedWidth,flexColWidth=Math.floor(flexWidth/flexGrowUnits);var gapFill=scaleColumns(flexColumns,flexWidth,flexColWidth,!1);flexColumns.length&&gapFill>0&&(flexColumns[flexColumns.length-1].width+=+gapFill),flexColumns.forEach((function(col){flexWidth-=col.width})),(overflowWidth=Math.abs(gapFill)+flexWidth)>0&&flexShrinkUnits&&(gapFill=scaleColumns(fixedShrinkColumns,overflowWidth,Math.floor(overflowWidth/flexShrinkUnits),!0)),fixedShrinkColumns.length&&(fixedShrinkColumns[fixedShrinkColumns.length-1].width-=gapFill),flexColumns.forEach((function(col){col.column.setWidth(col.width)})),fixedShrinkColumns.forEach((function(col){col.column.setWidth(col.width)}))}},Tabulator.prototype.registerModule("layout",Layout);var Localize=function Localize(table){this.table=table,this.locale="default",this.lang=!1,this.bindings={}};Localize.prototype.setHeaderFilterPlaceholder=function(placeholder){this.langs.default.headerFilters.default=placeholder},Localize.prototype.setHeaderFilterColumnPlaceholder=function(column,placeholder){this.langs.default.headerFilters.columns[column]=placeholder,this.lang&&!this.lang.headerFilters.columns[column]&&(this.lang.headerFilters.columns[column]=placeholder)},Localize.prototype.installLang=function(locale,lang){this.langs[locale]?this._setLangProp(this.langs[locale],lang):this.langs[locale]=lang},Localize.prototype._setLangProp=function(lang,values){for(var key in values)lang[key]&&"object"==_typeof(lang[key])?this._setLangProp(lang[key],values[key]):lang[key]=values[key]},Localize.prototype.setLocale=function(desiredLocale){var self=this;function traverseLang(trans,path){for(var prop in trans)"object"==_typeof(trans[prop])?(path[prop]||(path[prop]={}),traverseLang(trans[prop],path[prop])):path[prop]=trans[prop]}if(!0===(desiredLocale=desiredLocale||"default")&&navigator.language&&(desiredLocale=navigator.language.toLowerCase()),desiredLocale&&!this.langs[desiredLocale]){var prefix=desiredLocale.split("-")[0];this.langs[prefix]?(console.warn("Localization Error - Exact matching locale not found, using closest match: ",desiredLocale,prefix),desiredLocale=prefix):(console.warn("Localization Error - Matching locale not found, using default: ",desiredLocale),desiredLocale="default")}this.locale=desiredLocale,this.lang=Tabulator.prototype.helpers.deepClone(this.langs.default||{}),"default"!=desiredLocale&&traverseLang(this.langs[desiredLocale],this.lang),this.table.options.localized.call(this.table,this.locale,this.lang),this._executeBindings()},Localize.prototype.getLocale=function(locale){return self.locale},Localize.prototype.getLang=function(locale){return locale?this.langs[locale]:this.lang},Localize.prototype.getText=function(path,value){var path,pathArray=(path=value?path+"|"+value:path).split("|"),text;return this._getLangElement(pathArray,this.locale)||""},Localize.prototype._getLangElement=function(path,locale){var self=this,root=this.lang;return path.forEach((function(level){var rootPath;root&&(rootPath=root[level],root=void 0!==rootPath&&rootPath)})),root},Localize.prototype.bind=function(path,callback){this.bindings[path]||(this.bindings[path]=[]),this.bindings[path].push(callback),callback(this.getText(path),this.lang)},Localize.prototype._executeBindings=function(){var self=this,_loop=function _loop(path){self.bindings[path].forEach((function(binding){binding(self.getText(path),self.lang)}))};for(var path in self.bindings)_loop(path)},Localize.prototype.langs={default:{groups:{item:"item",items:"items"},columns:{},ajax:{loading:"Loading",error:"Error"},pagination:{page_size:"Page Size",page_title:"Show Page",first:"First",first_title:"First Page",last:"Last",last_title:"Last Page",prev:"Prev",prev_title:"Prev Page",next:"Next",next_title:"Next Page",all:"All"},headerFilters:{default:"filter column...",columns:{}}}},Tabulator.prototype.registerModule("localize",Localize);var Comms=function Comms(table){this.table=table};Comms.prototype.getConnections=function(selectors){var self=this,connections=[],connection;return(connection=Tabulator.prototype.comms.lookupTable(selectors)).forEach((function(con){self.table!==con&&connections.push(con)})),connections},Comms.prototype.send=function(selectors,module,action,data){var self=this,connections=this.getConnections(selectors);connections.forEach((function(connection){connection.tableComms(self.table.element,module,action,data)})),!connections.length&&selectors&&console.warn("Table Connection Error - No tables matching selector found",selectors)},Comms.prototype.receive=function(table,module,action,data){if(this.table.modExists(module))return this.table.modules[module].commsReceived(table,action,data);console.warn("Inter-table Comms Error - no such module:",module)},Tabulator.prototype.registerModule("comms",Comms);var Accessor=function Accessor(table){this.table=table,this.allowedTypes=["","data","download","clipboard","print","htmlOutput"]};Accessor.prototype.initializeColumn=function(column){var self=this,match=!1,config={};this.allowedTypes.forEach((function(type){var key="accessor"+(type.charAt(0).toUpperCase()+type.slice(1)),accessor;column.definition[key]&&(accessor=self.lookupAccessor(column.definition[key]))&&(match=!0,config[key]={accessor:accessor,params:column.definition[key+"Params"]||{}})})),match&&(column.modules.accessor=config)},Accessor.prototype.lookupAccessor=function(value){var accessor=!1;switch(void 0===value?"undefined":_typeof(value)){case"string":this.accessors[value]?accessor=this.accessors[value]:console.warn("Accessor Error - No such accessor found, ignoring: ",value);break;case"function":accessor=value}return accessor},Accessor.prototype.transformRow=function(dataIn,type){var self=this,key="accessor"+(type.charAt(0).toUpperCase()+type.slice(1)),data=Tabulator.prototype.helpers.deepClone(dataIn||{});return this.table.columnManager.traverse((function(column){var value,accessor,params,component;column.modules.accessor&&(accessor=column.modules.accessor[key]||column.modules.accessor.accessor||!1)&&"undefined"!=(value=column.getFieldValue(data))&&(component=column.getComponent(),params="function"==typeof accessor.params?accessor.params(value,data,type,component):accessor.params,column.setFieldValue(data,accessor.accessor(value,data,type,params,component)))})),data},Accessor.prototype.accessors={},Tabulator.prototype.registerModule("accessor",Accessor);var Ajax=function Ajax(table){this.table=table,this.config=!1,this.url="",this.urlGenerator=!1,this.params=!1,this.loaderElement=this.createLoaderElement(),this.msgElement=this.createMsgElement(),this.loadingElement=!1,this.errorElement=!1,this.loaderPromise=!1,this.progressiveLoad=!1,this.loading=!1,this.requestOrder=0};Ajax.prototype.initialize=function(){var template;this.loaderElement.appendChild(this.msgElement),this.table.options.ajaxLoaderLoading&&("string"==typeof this.table.options.ajaxLoaderLoading?((template=document.createElement("template")).innerHTML=this.table.options.ajaxLoaderLoading.trim(),this.loadingElement=template.content.firstChild):this.loadingElement=this.table.options.ajaxLoaderLoading),this.loaderPromise=this.table.options.ajaxRequestFunc||this.defaultLoaderPromise,this.urlGenerator=this.table.options.ajaxURLGenerator||this.defaultURLGenerator,this.table.options.ajaxLoaderError&&("string"==typeof this.table.options.ajaxLoaderError?((template=document.createElement("template")).innerHTML=this.table.options.ajaxLoaderError.trim(),this.errorElement=template.content.firstChild):this.errorElement=this.table.options.ajaxLoaderError),this.table.options.ajaxParams&&this.setParams(this.table.options.ajaxParams),this.table.options.ajaxConfig&&this.setConfig(this.table.options.ajaxConfig),this.table.options.ajaxURL&&this.setUrl(this.table.options.ajaxURL),this.table.options.ajaxProgressiveLoad&&(this.table.options.pagination?(this.progressiveLoad=!1,console.error("Progressive Load Error - Pagination and progressive load cannot be used at the same time")):this.table.modExists("page")?(this.progressiveLoad=this.table.options.ajaxProgressiveLoad,this.table.modules.page.initializeProgressive(this.progressiveLoad)):console.error("Pagination plugin is required for progressive ajax loading"))},Ajax.prototype.createLoaderElement=function(){var el=document.createElement("div");return el.classList.add("tabulator-loader"),el},Ajax.prototype.createMsgElement=function(){var el=document.createElement("div");return el.classList.add("tabulator-loader-msg"),el.setAttribute("role","alert"),el},Ajax.prototype.setParams=function(params,update){if(update)for(var key in this.params=this.params||{},params)this.params[key]=params[key];else this.params=params},Ajax.prototype.getParams=function(){return this.params||{}},Ajax.prototype.setConfig=function(config){if(this._loadDefaultConfig(),"string"==typeof config)this.config.method=config;else for(var key in config)this.config[key]=config[key]},Ajax.prototype._loadDefaultConfig=function(force){var self=this;if(!this.config||force)for(var key in this.config={},this.defaultConfig)this.config[key]=this.defaultConfig[key]},Ajax.prototype.setUrl=function(url){this.url=url},Ajax.prototype.getUrl=function(){return this.url},Ajax.prototype.loadData=function(inPosition,columnsChanged){var self=this;return this.progressiveLoad?this._loadDataProgressive():this._loadDataStandard(inPosition,columnsChanged)},Ajax.prototype.nextPage=function(diff){var margin;this.loading||diff<(margin=this.table.options.ajaxProgressiveLoadScrollMargin||2*this.table.rowManager.getElement().clientHeight)&&this.table.modules.page.nextPage().then((function(){})).catch((function(){}))},Ajax.prototype.blockActiveRequest=function(){this.requestOrder++},Ajax.prototype._loadDataProgressive=function(){return this.table.rowManager.setData([]),this.table.modules.page.setPage(1)},Ajax.prototype._loadDataStandard=function(inPosition,columnsChanged){var _this35=this;return new Promise((function(resolve,reject){_this35.sendRequest(inPosition).then((function(data){_this35.table.rowManager.setData(data,inPosition,columnsChanged).then((function(){resolve()})).catch((function(e){reject(e)}))})).catch((function(e){reject(e)}))}))},Ajax.prototype.generateParamsList=function(data,prefix){var self=this,output=[];if(prefix=prefix||"",Array.isArray(data))data.forEach((function(item,i){output=output.concat(self.generateParamsList(item,prefix?prefix+"["+i+"]":i))}));else if("object"===(void 0===data?"undefined":_typeof(data)))for(var key in data)output=output.concat(self.generateParamsList(data[key],prefix?prefix+"["+key+"]":key));else output.push({key:prefix,value:data});return output},Ajax.prototype.serializeParams=function(params){var output=this.generateParamsList(params),encoded=[];return output.forEach((function(item){encoded.push(encodeURIComponent(item.key)+"="+encodeURIComponent(item.value))})),encoded.join("&")},Ajax.prototype.sendRequest=function(silent){var _this36=this,self=this,url=self.url,requestNo,esc,query;return self.requestOrder++,requestNo=self.requestOrder,self._loadDefaultConfig(),new Promise((function(resolve,reject){!1!==self.table.options.ajaxRequesting.call(_this36.table,self.url,self.params)?(self.loading=!0,silent||self.showLoader(),_this36.loaderPromise(url,self.config,self.params).then((function(data){requestNo===self.requestOrder?(self.table.options.ajaxResponse&&(data=self.table.options.ajaxResponse.call(self.table,self.url,self.params,data)),resolve(data),self.hideLoader(),self.loading=!1):console.warn("Ajax Response Blocked - An active ajax request was blocked by an attempt to change table data while the request was being made")})).catch((function(error){console.error("Ajax Load Error: ",error),self.table.options.ajaxError.call(self.table,error),self.showError(),setTimeout((function(){self.hideLoader()}),3e3),self.loading=!1,reject()}))):reject()}))},Ajax.prototype.showLoader=function(){var shouldLoad;if("function"==typeof this.table.options.ajaxLoader?this.table.options.ajaxLoader():this.table.options.ajaxLoader){for(this.hideLoader();this.msgElement.firstChild;)this.msgElement.removeChild(this.msgElement.firstChild);this.msgElement.classList.remove("tabulator-error"),this.msgElement.classList.add("tabulator-loading"),this.loadingElement?this.msgElement.appendChild(this.loadingElement):this.msgElement.innerHTML=this.table.modules.localize.getText("ajax|loading"),this.table.element.appendChild(this.loaderElement)}},Ajax.prototype.showError=function(){for(this.hideLoader();this.msgElement.firstChild;)this.msgElement.removeChild(this.msgElement.firstChild);this.msgElement.classList.remove("tabulator-loading"),this.msgElement.classList.add("tabulator-error"),this.errorElement?this.msgElement.appendChild(this.errorElement):this.msgElement.innerHTML=this.table.modules.localize.getText("ajax|error"),this.table.element.appendChild(this.loaderElement)},Ajax.prototype.hideLoader=function(){this.loaderElement.parentNode&&this.loaderElement.parentNode.removeChild(this.loaderElement)},Ajax.prototype.defaultConfig={method:"GET"},Ajax.prototype.defaultURLGenerator=function(url,config,params){return url&¶ms&&Object.keys(params).length&&(config.method&&"get"!=config.method.toLowerCase()||(config.method="get",url+=(url.includes("?")?"&":"?")+this.serializeParams(params))),url},Ajax.prototype.defaultLoaderPromise=function(url,config,params){var self=this,contentType;return new Promise((function(resolve,reject){if(url=self.urlGenerator(url,config,params),"GET"!=config.method.toUpperCase())if(contentType="object"===_typeof(self.table.options.ajaxContentType)?self.table.options.ajaxContentType:self.contentTypeFormatters[self.table.options.ajaxContentType]){for(var key in contentType.headers)config.headers||(config.headers={}),void 0===config.headers[key]&&(config.headers[key]=contentType.headers[key]);config.body=contentType.body.call(self,url,config,params)}else console.warn("Ajax Error - Invalid ajaxContentType value:",self.table.options.ajaxContentType);url?(void 0===config.headers&&(config.headers={}),void 0===config.headers.Accept&&(config.headers.Accept="application/json"),void 0===config.headers["X-Requested-With"]&&(config.headers["X-Requested-With"]="XMLHttpRequest"),void 0===config.mode&&(config.mode="cors"),"cors"==config.mode?(void 0===config.headers["Access-Control-Allow-Origin"]&&(config.headers["Access-Control-Allow-Origin"]=window.location.origin),void 0===config.credentials&&(config.credentials="same-origin")):void 0===config.credentials&&(config.credentials="include"),fetch(url,config).then((function(response){response.ok?response.json().then((function(data){resolve(data)})).catch((function(error){reject(error),console.warn("Ajax Load Error - Invalid JSON returned",error)})):(console.error("Ajax Load Error - Connection Error: "+response.status,response.statusText),reject(response))})).catch((function(error){console.error("Ajax Load Error - Connection Error: ",error),reject(error)}))):(console.warn("Ajax Load Error - No URL Set"),resolve([]))}))},Ajax.prototype.contentTypeFormatters={json:{headers:{"Content-Type":"application/json"},body:function body(url,config,params){return JSON.stringify(params)}},form:{headers:{},body:function body(url,config,params){var output=this.generateParamsList(params),form=new FormData;return output.forEach((function(item){form.append(item.key,item.value)})),form}}},Tabulator.prototype.registerModule("ajax",Ajax);var ColumnCalcs=function ColumnCalcs(table){this.table=table,this.topCalcs=[],this.botCalcs=[],this.genColumn=!1,this.topElement=this.createElement(),this.botElement=this.createElement(),this.topRow=!1,this.botRow=!1,this.topInitialized=!1,this.botInitialized=!1,this.initialize()};ColumnCalcs.prototype.createElement=function(){var el=document.createElement("div");return el.classList.add("tabulator-calcs-holder"),el},ColumnCalcs.prototype.initialize=function(){this.genColumn=new Column({field:"value"},this)},ColumnCalcs.prototype.registerColumnField=function(){},ColumnCalcs.prototype.initializeColumn=function(column){var def=column.definition,config={topCalcParams:def.topCalcParams||{},botCalcParams:def.bottomCalcParams||{}};if(def.topCalc){switch(_typeof(def.topCalc)){case"string":this.calculations[def.topCalc]?config.topCalc=this.calculations[def.topCalc]:console.warn("Column Calc Error - No such calculation found, ignoring: ",def.topCalc);break;case"function":config.topCalc=def.topCalc}config.topCalc&&(column.modules.columnCalcs=config,this.topCalcs.push(column),"group"!=this.table.options.columnCalcs&&this.initializeTopRow())}if(def.bottomCalc){switch(_typeof(def.bottomCalc)){case"string":this.calculations[def.bottomCalc]?config.botCalc=this.calculations[def.bottomCalc]:console.warn("Column Calc Error - No such calculation found, ignoring: ",def.bottomCalc);break;case"function":config.botCalc=def.bottomCalc}config.botCalc&&(column.modules.columnCalcs=config,this.botCalcs.push(column),"group"!=this.table.options.columnCalcs&&this.initializeBottomRow())}},ColumnCalcs.prototype.removeCalcs=function(){var changed=!1;this.topInitialized&&(this.topInitialized=!1,this.topElement.parentNode.removeChild(this.topElement),changed=!0),this.botInitialized&&(this.botInitialized=!1,this.table.footerManager.remove(this.botElement),changed=!0),changed&&this.table.rowManager.adjustTableSize()},ColumnCalcs.prototype.initializeTopRow=function(){this.topInitialized||(this.table.columnManager.getElement().insertBefore(this.topElement,this.table.columnManager.headersElement.nextSibling),this.topInitialized=!0)},ColumnCalcs.prototype.initializeBottomRow=function(){this.botInitialized||(this.table.footerManager.prepend(this.botElement),this.botInitialized=!0)},ColumnCalcs.prototype.scrollHorizontal=function(left){var hozAdjust=0,scrollWidth=this.table.columnManager.getElement().scrollWidth-this.table.element.clientWidth;this.botInitialized&&(this.botRow.getElement().style.marginLeft=-left+"px")},ColumnCalcs.prototype.recalc=function(rows){var data,row;if(this.topInitialized||this.botInitialized){if(data=this.rowsToData(rows),this.topInitialized){for(this.topRow&&this.topRow.deleteCells(),row=this.generateRow("top",this.rowsToData(rows)),this.topRow=row;this.topElement.firstChild;)this.topElement.removeChild(this.topElement.firstChild);this.topElement.appendChild(row.getElement()),row.initialize(!0)}if(this.botInitialized){for(this.botRow&&this.botRow.deleteCells(),row=this.generateRow("bottom",this.rowsToData(rows)),this.botRow=row;this.botElement.firstChild;)this.botElement.removeChild(this.botElement.firstChild);this.botElement.appendChild(row.getElement()),row.initialize(!0)}this.table.rowManager.adjustTableSize(),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layout()}},ColumnCalcs.prototype.recalcRowGroup=function(row){this.recalcGroup(this.table.modules.groupRows.getRowGroup(row))},ColumnCalcs.prototype.recalcAll=function(){var _this37=this,groups;(this.topCalcs.length||this.botCalcs.length)&&("group"!==this.table.options.columnCalcs&&this.recalc(this.table.rowManager.activeRows),this.table.options.groupBy&&"table"!==this.table.options.columnCalcs&&table.modules.groupRows.getChildGroups().forEach((function(group){_this37.recalcGroup(group)})))},ColumnCalcs.prototype.recalcGroup=function(group){var data,rowData;group&&group.calcs&&(group.calcs.bottom&&(data=this.rowsToData(group.rows),rowData=this.generateRowData("bottom",data),group.calcs.bottom.updateData(rowData),group.calcs.bottom.reinitialize()),group.calcs.top&&(data=this.rowsToData(group.rows),rowData=this.generateRowData("top",data),group.calcs.top.updateData(rowData),group.calcs.top.reinitialize()))},ColumnCalcs.prototype.generateTopRow=function(rows){return this.generateRow("top",this.rowsToData(rows))},ColumnCalcs.prototype.generateBottomRow=function(rows){return this.generateRow("bottom",this.rowsToData(rows))},ColumnCalcs.prototype.rowsToData=function(rows){var _this38=this,data=[];return rows.forEach((function(row){if(data.push(row.getData()),_this38.table.options.dataTree&&_this38.table.options.dataTreeChildColumnCalcs&&row.modules.dataTree.open){var children=_this38.rowsToData(_this38.table.modules.dataTree.getFilteredTreeChildren(row));data=data.concat(children)}})),data},ColumnCalcs.prototype.generateRow=function(pos,data){var self=this,rowData=this.generateRowData(pos,data),row;return self.table.modExists("mutator")&&self.table.modules.mutator.disable(),row=new Row(rowData,this,"calc"),self.table.modExists("mutator")&&self.table.modules.mutator.enable(),row.getElement().classList.add("tabulator-calcs","tabulator-calcs-"+pos),row.generateCells=function(){var cells=[];self.table.columnManager.columnsByIndex.forEach((function(column){self.genColumn.setField(column.getField()),self.genColumn.hozAlign=column.hozAlign,column.definition[pos+"CalcFormatter"]&&self.table.modExists("format")?self.genColumn.modules.format={formatter:self.table.modules.format.getFormatter(column.definition[pos+"CalcFormatter"]),params:column.definition[pos+"CalcFormatterParams"]}:self.genColumn.modules.format={formatter:self.table.modules.format.getFormatter("plaintext"),params:{}},self.genColumn.definition.cssClass=column.definition.cssClass;var cell=new Cell(self.genColumn,row);cell.column=column,cell.setWidth(),column.cells.push(cell),cells.push(cell),column.visible||cell.hide()})),this.cells=cells},row},ColumnCalcs.prototype.generateRowData=function(pos,data){var rowData={},calcs="top"==pos?this.topCalcs:this.botCalcs,type="top"==pos?"topCalc":"botCalc",params,paramKey;return calcs.forEach((function(column){var values=[];column.modules.columnCalcs&&column.modules.columnCalcs[type]&&(data.forEach((function(item){values.push(column.getFieldValue(item))})),paramKey=type+"Params",params="function"==typeof column.modules.columnCalcs[paramKey]?column.modules.columnCalcs[paramKey](values,data):column.modules.columnCalcs[paramKey],column.setFieldValue(rowData,column.modules.columnCalcs[type](values,data,params)))})),rowData},ColumnCalcs.prototype.hasTopCalcs=function(){return!!this.topCalcs.length},ColumnCalcs.prototype.hasBottomCalcs=function(){return!!this.botCalcs.length},ColumnCalcs.prototype.redraw=function(){this.topRow&&this.topRow.normalizeHeight(!0),this.botRow&&this.botRow.normalizeHeight(!0)},ColumnCalcs.prototype.getResults=function(){var self=this,results={},groups;return this.table.options.groupBy&&this.table.modExists("groupRows")?(groups=this.table.modules.groupRows.getGroups(!0)).forEach((function(group){results[group.getKey()]=self.getGroupResults(group)})):results={top:this.topRow?this.topRow.getData():{},bottom:this.botRow?this.botRow.getData():{}},results},ColumnCalcs.prototype.getGroupResults=function(group){var self=this,groupObj=group._getSelf(),subGroups=group.getSubGroups(),subGroupResults={},results={};return subGroups.forEach((function(subgroup){subGroupResults[subgroup.getKey()]=self.getGroupResults(subgroup)})),results={top:groupObj.calcs.top?groupObj.calcs.top.getData():{},bottom:groupObj.calcs.bottom?groupObj.calcs.bottom.getData():{},groups:subGroupResults}},ColumnCalcs.prototype.calculations={avg:function avg(values,data,calcParams){var output=0,precision=void 0!==calcParams.precision?calcParams.precision:2;return values.length&&(output=values.reduce((function(sum,value){return sum+(value=Number(value))})),output/=values.length,output=!1!==precision?output.toFixed(precision):output),parseFloat(output).toString()},max:function max(values,data,calcParams){var output=null,precision=void 0!==calcParams.precision&&calcParams.precision;return values.forEach((function(value){((value=Number(value))>output||null===output)&&(output=value)})),null!==output?!1!==precision?output.toFixed(precision):output:""},min:function min(values,data,calcParams){var output=null,precision=void 0!==calcParams.precision&&calcParams.precision;return values.forEach((function(value){((value=Number(value))"),options.dataTreeExpandElement?"string"==typeof options.dataTreeExpandElement?((dummyEl=document.createElement("div")).innerHTML=options.dataTreeExpandElement,this.expandEl=dummyEl.firstChild):this.expandEl=options.dataTreeExpandElement:(this.expandEl=document.createElement("div"),this.expandEl.classList.add("tabulator-data-tree-control"),this.expandEl.tabIndex=0,this.expandEl.innerHTML="
"),_typeof(options.dataTreeStartExpanded)){case"boolean":this.startOpen=function(row,index){return options.dataTreeStartExpanded};break;case"function":this.startOpen=options.dataTreeStartExpanded;break;default:this.startOpen=function(row,index){return options.dataTreeStartExpanded[index]}}},DataTree.prototype.initializeRow=function(row){var childArray=row.getData()[this.field],isArray=Array.isArray(childArray),children=isArray||!isArray&&"object"===(void 0===childArray?"undefined":_typeof(childArray))&&null!==childArray;!children&&row.modules.dataTree&&row.modules.dataTree.branchEl&&row.modules.dataTree.branchEl.parentNode.removeChild(row.modules.dataTree.branchEl),!children&&row.modules.dataTree&&row.modules.dataTree.controlEl&&row.modules.dataTree.controlEl.parentNode.removeChild(row.modules.dataTree.controlEl),row.modules.dataTree={index:row.modules.dataTree?row.modules.dataTree.index:0,open:!!children&&(row.modules.dataTree?row.modules.dataTree.open:this.startOpen(row.getComponent(),0)),controlEl:!(!row.modules.dataTree||!children)&&row.modules.dataTree.controlEl,branchEl:!(!row.modules.dataTree||!children)&&row.modules.dataTree.branchEl,parent:!!row.modules.dataTree&&row.modules.dataTree.parent,children:children}},DataTree.prototype.layoutRow=function(row){var cell,el=(this.elementField?row.getCell(this.elementField):row.getCells()[0]).getElement(),config=row.modules.dataTree;config.branchEl&&(config.branchEl.parentNode&&config.branchEl.parentNode.removeChild(config.branchEl),config.branchEl=!1),config.controlEl&&(config.controlEl.parentNode&&config.controlEl.parentNode.removeChild(config.controlEl),config.controlEl=!1),this.generateControlElement(row,el),row.element.classList.add("tabulator-tree-level-"+config.index),config.index&&(this.branchEl?(config.branchEl=this.branchEl.cloneNode(!0),el.insertBefore(config.branchEl,el.firstChild),config.branchEl.style.marginLeft=(config.branchEl.offsetWidth+config.branchEl.style.marginRight)*(config.index-1)+config.index*this.indent+"px"):el.style.paddingLeft=parseInt(window.getComputedStyle(el,null).getPropertyValue("padding-left"))+config.index*this.indent+"px")},DataTree.prototype.generateControlElement=function(row,el){var _this40=this,config=row.modules.dataTree,el=el||row.getCells()[0].getElement(),oldControl=config.controlEl;!1!==config.children&&(config.open?(config.controlEl=this.collapseEl.cloneNode(!0),config.controlEl.addEventListener("click",(function(e){e.stopPropagation(),_this40.collapseRow(row)}))):(config.controlEl=this.expandEl.cloneNode(!0),config.controlEl.addEventListener("click",(function(e){e.stopPropagation(),_this40.expandRow(row)}))),config.controlEl.addEventListener("mousedown",(function(e){e.stopPropagation()})),oldControl&&oldControl.parentNode===el?oldControl.parentNode.replaceChild(config.controlEl,oldControl):el.insertBefore(config.controlEl,el.firstChild))},DataTree.prototype.setDisplayIndex=function(index){this.displayIndex=index},DataTree.prototype.getDisplayIndex=function(){return this.displayIndex},DataTree.prototype.getRows=function(rows){var _this41=this,output=[];return rows.forEach((function(row,i){var config,children;output.push(row),row instanceof Row&&((config=row.modules.dataTree.children).index||!1===config.children||(children=_this41.getChildren(row)).forEach((function(child){output.push(child)})))})),output},DataTree.prototype.getChildren=function(row){var _this42=this,config=row.modules.dataTree,children=[],output=[];return!1!==config.children&&config.open&&(Array.isArray(config.children)||(config.children=this.generateChildren(row)),children=this.table.modExists("filter")?this.table.modules.filter.filter(config.children):config.children,this.table.modExists("sort")&&this.table.modules.sort.sort(children),children.forEach((function(child){var subChildren;output.push(child),_this42.getChildren(child).forEach((function(sub){output.push(sub)}))}))),output},DataTree.prototype.generateChildren=function(row){var _this43=this,children=[],childArray=row.getData()[this.field];return Array.isArray(childArray)||(childArray=[childArray]),childArray.forEach((function(childData){var childRow=new Row(childData||{},_this43.table.rowManager);childRow.modules.dataTree.index=row.modules.dataTree.index+1,childRow.modules.dataTree.parent=row,childRow.modules.dataTree.children&&(childRow.modules.dataTree.open=_this43.startOpen(childRow.getComponent(),childRow.modules.dataTree.index)),children.push(childRow)})),children},DataTree.prototype.expandRow=function(row,silent){var config=row.modules.dataTree;!1!==config.children&&(config.open=!0,row.reinitialize(),this.table.rowManager.refreshActiveData("tree",!1,!0),this.table.options.dataTreeRowExpanded(row.getComponent(),row.modules.dataTree.index))},DataTree.prototype.collapseRow=function(row){var config=row.modules.dataTree;!1!==config.children&&(config.open=!1,row.reinitialize(),this.table.rowManager.refreshActiveData("tree",!1,!0),this.table.options.dataTreeRowCollapsed(row.getComponent(),row.modules.dataTree.index))},DataTree.prototype.toggleRow=function(row){var config=row.modules.dataTree;!1!==config.children&&(config.open?this.collapseRow(row):this.expandRow(row))},DataTree.prototype.getTreeParent=function(row){return!!row.modules.dataTree.parent&&row.modules.dataTree.parent.getComponent()},DataTree.prototype.getFilteredTreeChildren=function(row){var config=row.modules.dataTree,output=[],children;return config.children&&(Array.isArray(config.children)||(config.children=this.generateChildren(row)),(children=this.table.modExists("filter")?this.table.modules.filter.filter(config.children):config.children).forEach((function(childRow){childRow instanceof Row&&output.push(childRow)}))),output},DataTree.prototype.rowDelete=function(row){var parent=row.modules.dataTree.parent,childIndex;parent&&(!1!==(childIndex=this.findChildIndex(row,parent))&&parent.data[this.field].splice(childIndex,1),parent.data[this.field].length||delete parent.data[this.field],this.initializeRow(parent),this.layoutRow(parent)),this.table.rowManager.refreshActiveData("tree",!1,!0)},DataTree.prototype.addTreeChildRow=function(row,data,top,index){var childIndex=!1;"string"==typeof data&&(data=JSON.parse(data)),Array.isArray(row.data[this.field])||(row.data[this.field]=[],row.modules.dataTree.open=this.startOpen(row.getComponent(),row.modules.dataTree.index)),void 0!==index&&!1!==(childIndex=this.findChildIndex(index,row))&&row.data[this.field].splice(top?childIndex:childIndex+1,0,data),!1===childIndex&&(top?row.data[this.field].unshift(data):row.data[this.field].push(data)),this.initializeRow(row),this.layoutRow(row),this.table.rowManager.refreshActiveData("tree",!1,!0)},DataTree.prototype.findChildIndex=function(subject,parent){var _this44=this,match=!1;return"object"==(void 0===subject?"undefined":_typeof(subject))?subject instanceof Row?match=subject.data:subject instanceof RowComponent?match=subject._getSelf().data:"undefined"!=typeof HTMLElement&&subject instanceof HTMLElement&&parent.modules.dataTree&&(match=parent.modules.dataTree.children.find((function(childRow){return childRow instanceof Row&&childRow.element===subject})))&&(match=match.data):match=null!=subject&&parent.data[this.field].find((function(row){return row.data[_this44.table.options.index]==subject})),match&&(Array.isArray(parent.data[this.field])&&(match=parent.data[this.field].indexOf(match)),-1==match&&(match=!1)),match},DataTree.prototype.getTreeChildren=function(row){var config=row.modules.dataTree,output=[];return config.children&&(Array.isArray(config.children)||(config.children=this.generateChildren(row)),config.children.forEach((function(childRow){childRow instanceof Row&&output.push(childRow.getComponent())}))),output},DataTree.prototype.checkForRestyle=function(cell){cell.row.cells.indexOf(cell)||cell.row.reinitialize()},DataTree.prototype.getChildField=function(){return this.field},DataTree.prototype.redrawNeeded=function(data){return!!this.field&&void 0!==data[this.field]||!!this.elementField&&void 0!==data[this.elementField]},Tabulator.prototype.registerModule("dataTree",DataTree);var Download=function Download(table){this.table=table};Download.prototype.download=function(type,filename,options,range,interceptCallback){var self=this,downloadFunc=!1;function buildLink(data,mime){interceptCallback?!0===interceptCallback?self.triggerDownload(data,mime,type,filename,!0):interceptCallback(data):self.triggerDownload(data,mime,type,filename)}if("function"==typeof type?downloadFunc=type:self.downloaders[type]?downloadFunc=self.downloaders[type]:console.warn("Download Error - No such download type found: ",type),downloadFunc){var list=this.generateExportList(range);downloadFunc.call(this.table,list,options||{},buildLink)}},Download.prototype.generateExportList=function(range){var list=this.table.modules.export.generateExportList(this.table.options.downloadConfig,!1,range||this.table.options.downloadRowRange,"download"),groupHeader=this.table.options.groupHeaderDownload;return groupHeader&&!Array.isArray(groupHeader)&&(groupHeader=[groupHeader]),list.forEach((function(row){var group;"group"===row.type&&(group=row.columns[0],groupHeader&&groupHeader[row.indent]&&(group.value=groupHeader[row.indent](group.value,row.component._group.getRowCount(),row.component._group.getData(),row.component)))})),list},Download.prototype.triggerDownload=function(data,mime,type,filename,newTab){var element=document.createElement("a"),blob=new Blob([data],{type:mime}),filename=filename||"Tabulator."+("function"==typeof type?"txt":type);(blob=this.table.options.downloadReady.call(this.table,data,blob))&&(newTab?window.open(window.URL.createObjectURL(blob)):navigator.msSaveOrOpenBlob?navigator.msSaveOrOpenBlob(blob,filename):(element.setAttribute("href",window.URL.createObjectURL(blob)),element.setAttribute("download",filename),element.style.display="none",document.body.appendChild(element),element.click(),document.body.removeChild(element)),this.table.options.downloadComplete&&this.table.options.downloadComplete())},Download.prototype.commsReceived=function(table,action,data){switch(action){case"intercept":this.download(data.type,"",data.options,data.active,data.intercept)}},Download.prototype.downloaders={csv:function csv(list,options,setFileContents){var delimiter=options&&options.delimiter?options.delimiter:",",fileContents=[],headers=[];list.forEach((function(row){var item=[];switch(row.type){case"group":console.warn("Download Warning - CSV downloader cannot process row groups");break;case"calc":console.warn("Download Warning - CSV downloader cannot process column calculations");break;case"header":row.columns.forEach((function(col,i){col&&1===col.depth&&(headers[i]=void 0===col.value||"null"==typeof col.value?"":col.value)}));break;case"row":row.columns.forEach((function(col){if(col){switch(_typeof(col.value)){case"object":col.value=JSON.stringify(col.value);break;case"undefined":case"null":col.value=""}item.push('"'+String(col.value).split('"').join('""')+'"')}})),fileContents.push(item.join(delimiter))}})),headers.length&&(fileContents=[headers].concat(fileContents)),fileContents=fileContents.join("\n"),options.bom&&(fileContents="\ufeff"+fileContents),setFileContents(fileContents,"text/csv")},json:function json(list,options,setFileContents){var fileContents=[];list.forEach((function(row){var item={};switch(row.type){case"header":break;case"group":console.warn("Download Warning - JSON downloader cannot process row groups");break;case"calc":console.warn("Download Warning - JSON downloader cannot process column calculations");break;case"row":row.columns.forEach((function(col){col&&(item[col.component.getField()]=col.value)})),fileContents.push(item)}})),setFileContents(fileContents=JSON.stringify(fileContents,null,"\t"),"application/json")},pdf:function pdf(list,options,setFileContents){var header=[],body=[],autoTableParams={},rowGroupStyles=options.rowGroupStyles||{fontStyle:"bold",fontSize:12,cellPadding:6,fillColor:220},rowCalcStyles=options.rowCalcStyles||{fontStyle:"bold",fontSize:10,cellPadding:4,fillColor:232},jsPDFParams=options.jsPDF||{},title=options&&options.title?options.title:"";function parseRow(row,styles){var rowData=[];return row.columns.forEach((function(col){var cell;if(col){switch(_typeof(col.value)){case"object":col.value=JSON.stringify(col.value);break;case"undefined":case"null":col.value=""}cell={content:col.value,colSpan:col.width,rowSpan:col.height},styles&&(cell.styles=styles),rowData.push(cell)}else rowData.push("")})),rowData}jsPDFParams.orientation||(jsPDFParams.orientation=options.orientation||"landscape"),jsPDFParams.unit||(jsPDFParams.unit="pt"),list.forEach((function(row){switch(row.type){case"header":header.push(parseRow(row));break;case"group":body.push(parseRow(row,rowGroupStyles));break;case"calc":body.push(parseRow(row,rowCalcStyles));break;case"row":body.push(parseRow(row))}}));var doc=new jsPDF(jsPDFParams);options&&options.autoTable&&(autoTableParams="function"==typeof options.autoTable?options.autoTable(doc)||{}:options.autoTable),title&&(autoTableParams.addPageContent=function(data){doc.text(title,40,30)}),autoTableParams.head=header,autoTableParams.body=body,doc.autoTable(autoTableParams),options&&options.documentProcessing&&options.documentProcessing(doc),setFileContents(doc.output("arraybuffer"),"application/pdf")},xlsx:function xlsx(list,options,setFileContents){var self=this,sheetName=options.sheetName||"Sheet1",workbook=XLSX.utils.book_new(),output;function generateSheet(){var rows=[],merges=[],worksheet={},range={s:{c:0,r:0},e:{c:list[0]?list[0].columns.reduce((function(a,b){return a+(b&&b.width?b.width:1)}),0):0,r:list.length}};return list.forEach((function(row,i){var rowData=[];row.columns.forEach((function(col,j){col?(rowData.push(col.value instanceof Date||"object"!==_typeof(col.value)?col.value:JSON.stringify(col.value)),(col.width>1||col.height>-1)&&merges.push({s:{r:i,c:j},e:{r:i+col.height-1,c:j+col.width-1}})):rowData.push("")})),rows.push(rowData)})),XLSX.utils.sheet_add_aoa(worksheet,rows),worksheet["!ref"]=XLSX.utils.encode_range(range),merges.length&&(worksheet["!merges"]=merges),worksheet}if(workbook.SheetNames=[],workbook.Sheets={},options.sheetOnly)setFileContents(generateSheet());else{if(options.sheets)for(var sheet in options.sheets)!0===options.sheets[sheet]?(workbook.SheetNames.push(sheet),workbook.Sheets[sheet]=generateSheet()):(workbook.SheetNames.push(sheet),this.table.modules.comms.send(options.sheets[sheet],"download","intercept",{type:"xlsx",options:{sheetOnly:!0},active:this.active,intercept:function intercept(data){workbook.Sheets[sheet]=data}}));else workbook.SheetNames.push(sheetName),workbook.Sheets[sheetName]=generateSheet();options.documentProcessing&&(workbook=options.documentProcessing(workbook)),setFileContents(s2ab(output=XLSX.write(workbook,{bookType:"xlsx",bookSST:!0,type:"binary"})),"application/octet-stream")}function s2ab(s){for(var buf=new ArrayBuffer(s.length),view=new Uint8Array(buf),i=0;i!=s.length;++i)view[i]=255&s.charCodeAt(i);return buf}},html:function html(list,options,setFileContents){this.modExists("export",!0)&&setFileContents(this.modules.export.genereateHTMLTable(list),"text/html")}},Tabulator.prototype.registerModule("download",Download);var Edit=function Edit(table){this.table=table,this.currentCell=!1,this.mouseClick=!1,this.recursionBlock=!1,this.invalidEdit=!1,this.editedCells=[]};Edit.prototype.initializeColumn=function(column){var self=this,config={editor:!1,blocked:!1,check:column.definition.editable,params:column.definition.editorParams||{}};switch(_typeof(column.definition.editor)){case"string":"tick"===column.definition.editor&&(column.definition.editor="tickCross",console.warn("DEPRECATION WARNING - the tick editor has been deprecated, please use the tickCross editor")),this.editors[column.definition.editor]?config.editor=this.editors[column.definition.editor]:console.warn("Editor Error - No such editor found: ",column.definition.editor);break;case"function":config.editor=column.definition.editor;break;case"boolean":!0===column.definition.editor&&("function"!=typeof column.definition.formatter?("tick"===column.definition.formatter&&(column.definition.formatter="tickCross",console.warn("DEPRECATION WARNING - the tick editor has been deprecated, please use the tickCross editor")),this.editors[column.definition.formatter]?config.editor=this.editors[column.definition.formatter]:config.editor=this.editors.input):console.warn("Editor Error - Cannot auto lookup editor for a custom formatter: ",column.definition.formatter))}config.editor&&(column.modules.edit=config)},Edit.prototype.getCurrentCell=function(){return!!this.currentCell&&this.currentCell.getComponent()},Edit.prototype.clearEditor=function(cancel){var cell=this.currentCell,cellEl;if(this.invalidEdit=!1,cell){for(this.currentCell=!1,cellEl=cell.getElement(),cancel?cell.validate():cellEl.classList.remove("tabulator-validation-fail"),cellEl.classList.remove("tabulator-editing");cellEl.firstChild;)cellEl.removeChild(cellEl.firstChild);cell.row.getElement().classList.remove("tabulator-row-editing")}},Edit.prototype.cancelEdit=function(){if(this.currentCell){var cell=this.currentCell,component=this.currentCell.getComponent();this.clearEditor(!0),cell.setValueActual(cell.getValue()),cell.cellRendered(),cell.column.cellEvents.cellEditCancelled&&cell.column.cellEvents.cellEditCancelled.call(this.table,component),this.table.options.cellEditCancelled.call(this.table,component)}},Edit.prototype.bindEditor=function(cell){var self=this,element=cell.getElement();element.setAttribute("tabindex",0),element.addEventListener("click",(function(e){element.classList.contains("tabulator-editing")||element.focus({preventScroll:!0})})),element.addEventListener("mousedown",(function(e){self.mouseClick=!0})),element.addEventListener("focus",(function(e){self.recursionBlock||self.edit(cell,e,!1)}))},Edit.prototype.focusCellNoEvent=function(cell,block){this.recursionBlock=!0,block&&"ie"===this.table.browser||cell.getElement().focus({preventScroll:!0}),this.recursionBlock=!1},Edit.prototype.editCell=function(cell,forceEdit){this.focusCellNoEvent(cell),this.edit(cell,!1,forceEdit)},Edit.prototype.focusScrollAdjust=function(cell){if("virtual"==this.table.rowManager.getRenderMode()){var topEdge=this.table.rowManager.element.scrollTop,bottomEdge=this.table.rowManager.element.clientHeight+this.table.rowManager.element.scrollTop,rowEl=cell.row.getElement(),offset=rowEl.offsetTop;rowEl.offsetTopbottomEdge&&(this.table.rowManager.element.scrollTop+=rowEl.offsetTop+rowEl.offsetHeight-bottomEdge)}},Edit.prototype.edit=function(cell,e,forceEdit){var self=this,allowEdit=!0,rendered=function rendered(){},element=cell.getElement(),cellEditor,component,params;if(!this.currentCell){if(cell.column.modules.edit.blocked)return this.mouseClick=!1,element.blur(),!1;switch(e&&e.stopPropagation(),_typeof(cell.column.modules.edit.check)){case"function":allowEdit=cell.column.modules.edit.check(cell.getComponent());break;case"boolean":allowEdit=cell.column.modules.edit.check}if(allowEdit||forceEdit){if(self.cancelEdit(),self.currentCell=cell,this.focusScrollAdjust(cell),component=cell.getComponent(),this.mouseClick&&(this.mouseClick=!1,cell.column.cellEvents.cellClick&&cell.column.cellEvents.cellClick.call(this.table,e,component)),cell.column.cellEvents.cellEditing&&cell.column.cellEvents.cellEditing.call(this.table,component),self.table.options.cellEditing.call(this.table,component),params="function"==typeof cell.column.modules.edit.params?cell.column.modules.edit.params(component):cell.column.modules.edit.params,!1===(cellEditor=cell.column.modules.edit.editor.call(self,component,onRendered,success,cancel,params)))return element.blur(),!1;if(!(cellEditor instanceof Node))return console.warn("Edit Error - Editor should return an instance of Node, the editor returned:",cellEditor),element.blur(),!1;for(element.classList.add("tabulator-editing"),cell.row.getElement().classList.add("tabulator-row-editing");element.firstChild;)element.removeChild(element.firstChild);element.appendChild(cellEditor),rendered();for(var children=element.children,i=0;i46){if(index>=mask.length)return e.preventDefault(),e.stopPropagation(),success=!1,!1;switch(mask[index]){case maskLetter:if(char.toUpperCase()==char.toLowerCase())return e.preventDefault(),e.stopPropagation(),success=!1,!1;break;case maskNumber:if(isNaN(char))return e.preventDefault(),e.stopPropagation(),success=!1,!1;break;case maskWildcard:break;default:if(char!==mask[index])return e.preventDefault(),e.stopPropagation(),success=!1,!1}success=!0}})),el.addEventListener("keyup",(function(e){e.keyCode>46&&options.maskAutoFill&&fillSymbols(el.value.length)})),el.placeholder||(el.placeholder=mask),options.maskAutoFill&&fillSymbols(el.value.length)},Edit.prototype.getEditedCells=function(){var output=[];return this.editedCells.forEach((function(cell){output.push(cell.getComponent())})),output},Edit.prototype.clearEdited=function(cell){var editIndex;cell.modules.edit&&cell.modules.edit.edited&&(cell.modules.validate.invalid=!1,(editIndex=this.editedCells.indexOf(cell))>-1&&this.editedCells.splice(editIndex,1))},Edit.prototype.editors={input:function input(cell,onRendered,success,cancel,editorParams){var cellValue=cell.getValue(),input=document.createElement("input");if(input.setAttribute("type",editorParams.search?"search":"text"),input.style.padding="4px",input.style.width="100%",input.style.boxSizing="border-box",editorParams.elementAttributes&&"object"==_typeof(editorParams.elementAttributes))for(var key in editorParams.elementAttributes)"+"==key.charAt(0)?(key=key.slice(1),input.setAttribute(key,input.getAttribute(key)+editorParams.elementAttributes["+"+key])):input.setAttribute(key,editorParams.elementAttributes[key]);function onChange(e){null==cellValue&&""!==input.value||input.value!==cellValue?success(input.value)&&(cellValue=input.value):cancel()}return input.value=void 0!==cellValue?cellValue:"",onRendered((function(){input.focus({preventScroll:!0}),input.style.height="100%"})),input.addEventListener("change",onChange),input.addEventListener("blur",onChange),input.addEventListener("keydown",(function(e){switch(e.keyCode){case 13:onChange(e);break;case 27:cancel()}})),editorParams.mask&&this.table.modules.edit.maskInput(input,editorParams),input},textarea:function textarea(cell,onRendered,success,cancel,editorParams){var self=this,cellValue=cell.getValue(),vertNav=editorParams.verticalNavigation||"hybrid",value=String(null!=cellValue?cellValue:""),count=(value.match(/(?:\r\n|\r|\n)/g)||[]).length+1,input=document.createElement("textarea"),scrollHeight=0;if(input.style.display="block",input.style.padding="2px",input.style.height="100%",input.style.width="100%",input.style.boxSizing="border-box",input.style.whiteSpace="pre-wrap",input.style.resize="none",editorParams.elementAttributes&&"object"==_typeof(editorParams.elementAttributes))for(var key in editorParams.elementAttributes)"+"==key.charAt(0)?(key=key.slice(1),input.setAttribute(key,input.getAttribute(key)+editorParams.elementAttributes["+"+key])):input.setAttribute(key,editorParams.elementAttributes[key]);function onChange(e){null==cellValue&&""!==input.value||input.value!==cellValue?(success(input.value)&&(cellValue=input.value),setTimeout((function(){cell.getRow().normalizeHeight()}),300)):cancel()}return input.value=value,onRendered((function(){input.focus({preventScroll:!0}),input.style.height="100%"})),input.addEventListener("change",onChange),input.addEventListener("blur",onChange),input.addEventListener("keyup",(function(){input.style.height="";var heightNow=input.scrollHeight;input.style.height=heightNow+"px",heightNow!=scrollHeight&&(scrollHeight=heightNow,cell.getRow().normalizeHeight())})),input.addEventListener("keydown",(function(e){switch(e.keyCode){case 27:cancel();break;case 38:("editor"==vertNav||"hybrid"==vertNav&&input.selectionStart)&&(e.stopImmediatePropagation(),e.stopPropagation());break;case 40:("editor"==vertNav||"hybrid"==vertNav&&input.selectionStart!==input.value.length)&&(e.stopImmediatePropagation(),e.stopPropagation())}})),editorParams.mask&&this.table.modules.edit.maskInput(input,editorParams),input},number:function number(cell,onRendered,success,cancel,editorParams){var cellValue=cell.getValue(),vertNav=editorParams.verticalNavigation||"editor",input=document.createElement("input");if(input.setAttribute("type","number"),void 0!==editorParams.max&&input.setAttribute("max",editorParams.max),void 0!==editorParams.min&&input.setAttribute("min",editorParams.min),void 0!==editorParams.step&&input.setAttribute("step",editorParams.step),input.style.padding="4px",input.style.width="100%",input.style.boxSizing="border-box",editorParams.elementAttributes&&"object"==_typeof(editorParams.elementAttributes))for(var key in editorParams.elementAttributes)"+"==key.charAt(0)?(key=key.slice(1),input.setAttribute(key,input.getAttribute(key)+editorParams.elementAttributes["+"+key])):input.setAttribute(key,editorParams.elementAttributes[key]);input.value=cellValue;var blurFunc=function blurFunc(e){onChange()};function onChange(){var value=input.value;isNaN(value)||""===value||(value=Number(value)),value!==cellValue?success(value)&&(cellValue=value):cancel()}return onRendered((function(){input.removeEventListener("blur",blurFunc),input.focus({preventScroll:!0}),input.style.height="100%",input.addEventListener("blur",blurFunc)})),input.addEventListener("keydown",(function(e){switch(e.keyCode){case 13:onChange();break;case 27:cancel();break;case 38:case 40:"editor"==vertNav&&(e.stopImmediatePropagation(),e.stopPropagation())}})),editorParams.mask&&this.table.modules.edit.maskInput(input,editorParams),input},range:function range(cell,onRendered,success,cancel,editorParams){var cellValue=cell.getValue(),input=document.createElement("input");if(input.setAttribute("type","range"),void 0!==editorParams.max&&input.setAttribute("max",editorParams.max),void 0!==editorParams.min&&input.setAttribute("min",editorParams.min),void 0!==editorParams.step&&input.setAttribute("step",editorParams.step),input.style.padding="4px",input.style.width="100%",input.style.boxSizing="border-box",editorParams.elementAttributes&&"object"==_typeof(editorParams.elementAttributes))for(var key in editorParams.elementAttributes)"+"==key.charAt(0)?(key=key.slice(1),input.setAttribute(key,input.getAttribute(key)+editorParams.elementAttributes["+"+key])):input.setAttribute(key,editorParams.elementAttributes[key]);function onChange(){var value=input.value;isNaN(value)||""===value||(value=Number(value)),value!=cellValue?success(value)&&(cellValue=value):cancel()}return input.value=cellValue,onRendered((function(){input.focus({preventScroll:!0}),input.style.height="100%"})),input.addEventListener("blur",(function(e){onChange()})),input.addEventListener("keydown",(function(e){switch(e.keyCode){case 13:onChange();break;case 27:cancel()}})),input},select:function select(cell,onRendered,success,cancel,editorParams){var self=this,cellEl=cell.getElement(),initialValue=cell.getValue(),vertNav=editorParams.verticalNavigation||"editor",initialDisplayValue=void 0!==initialValue||null===initialValue?initialValue:void 0!==editorParams.defaultValue?editorParams.defaultValue:[],input=document.createElement("input"),listEl=document.createElement("div"),multiselect=editorParams.multiselect,dataItems=[],currentItem={},displayItems=[],currentItems=[],blurable=!0;function getUniqueColumnValues(field){var output={},data=self.table.getData(),column;return(column=field?self.table.columnManager.getColumnByField(field):cell.getColumn()._getSelf())?(data.forEach((function(row){var val=column.getFieldValue(row);null!=val&&""!==val&&(output[val]=!0)})),output=editorParams.sortValuesList?"asc"==editorParams.sortValuesList?Object.keys(output).sort():Object.keys(output).sort().reverse():Object.keys(output)):console.warn("unable to find matching column to create select lookup list:",field),output}function parseItems(inputValues,curentValues){var dataList=[],displayList=[];function processComplexListItem(item){var item={label:item.label,value:item.value,itemParams:item.itemParams,elementAttributes:item.elementAttributes,element:!1};return curentValues.indexOf(item.value)>-1&&setItem(item),dataList.push(item),displayList.push(item),item}if("function"==typeof inputValues&&(inputValues=inputValues(cell)),Array.isArray(inputValues))inputValues.forEach((function(value){var item;"object"===(void 0===value?"undefined":_typeof(value))?value.options?(item={label:value.label,group:!0,itemParams:value.itemParams,elementAttributes:value.elementAttributes,element:!1},displayList.push(item),value.options.forEach((function(item){processComplexListItem(item)}))):processComplexListItem(value):(item={label:value,value:value,element:!1},curentValues.indexOf(item.value)>-1&&setItem(item),dataList.push(item),displayList.push(item))}));else for(var key in inputValues){var item={label:inputValues[key],value:key,element:!1};curentValues.indexOf(item.value)>-1&&setItem(item),dataList.push(item),displayList.push(item)}dataItems=dataList,displayItems=displayList,fillList()}function fillList(){for(;listEl.firstChild;)listEl.removeChild(listEl.firstChild);displayItems.forEach((function(item){var el=item.element;if(!el){if(el=document.createElement("div"),item.label=editorParams.listItemFormatter?editorParams.listItemFormatter(item.value,item.label,cell,el,item.itemParams):item.label,item.group?(el.classList.add("tabulator-edit-select-list-group"),el.tabIndex=0,el.innerHTML=""===item.label?" ":item.label):(el.classList.add("tabulator-edit-select-list-item"),el.tabIndex=0,el.innerHTML=""===item.label?" ":item.label,el.addEventListener("click",(function(){multiselect?(toggleItem(item),input.focus()):chooseItem(item)})),currentItems.indexOf(item)>-1&&el.classList.add("active")),item.elementAttributes&&"object"==_typeof(item.elementAttributes))for(var key in item.elementAttributes)"+"==key.charAt(0)?(key=key.slice(1),el.setAttribute(key,input.getAttribute(key)+item.elementAttributes["+"+key])):el.setAttribute(key,item.elementAttributes[key]);el.addEventListener("mousedown",(function(){blurable=!1,setTimeout((function(){blurable=!0}),10)})),item.element=el}listEl.appendChild(el)}))}function setCurrentItem(item,active){!multiselect&¤tItem&¤tItem.element&¤tItem.element.classList.remove("active"),currentItem&¤tItem.element&¤tItem.element.classList.remove("focused"),currentItem=item,item.element&&(item.element.classList.add("focused"),active&&item.element.classList.add("active"))}function setItem(item){var index;-1==currentItems.indexOf(item)&&(currentItems.push(item),setCurrentItem(item,!0)),fillInput()}function unsetItem(index){var item=currentItems[index];index>-1&&(currentItems.splice(index,1),item.element&&item.element.classList.remove("active"))}function toggleItem(item){item||(item=currentItem);var index=currentItems.indexOf(item);index>-1?unsetItem(index):(!0!==multiselect&¤tItems.length>=multiselect&&unsetItem(0),setItem(item)),fillInput()}function chooseItem(item){hideList(),item||(item=currentItem),item&&success(item.value)}function chooseItems(){hideList();var output=[];currentItems.forEach((function(item){output.push(item.value)})),success(output)}function fillInput(){var output=[];currentItems.forEach((function(item){output.push(item.label)})),input.value=output.join(", ")}function cancelItem(){hideList(),cancel()}function showList(){if(!listEl.parentNode){!0===editorParams.values?parseItems(getUniqueColumnValues(),initialDisplayValue):"string"==typeof editorParams.values?parseItems(getUniqueColumnValues(editorParams.values),initialDisplayValue):parseItems(editorParams.values||[],initialDisplayValue);var offset=Tabulator.prototype.helpers.elOffset(cellEl);listEl.style.minWidth=cellEl.offsetWidth+"px",listEl.style.top=offset.top+cellEl.offsetHeight+"px",listEl.style.left=offset.left+"px",listEl.addEventListener("mousedown",(function(e){blurable=!1,setTimeout((function(){blurable=!0}),10)})),document.body.appendChild(listEl)}}function hideList(){listEl.parentNode&&listEl.parentNode.removeChild(listEl),removeScrollListener()}function removeScrollListener(){self.table.rowManager.element.removeEventListener("scroll",cancelItem)}if(this.table.rowManager.element.addEventListener("scroll",cancelItem),(Array.isArray(editorParams)||!Array.isArray(editorParams)&&"object"===(void 0===editorParams?"undefined":_typeof(editorParams))&&!editorParams.values)&&(console.warn("DEPRECATION WARNING - values for the select editor must now be passed into the values property of the editorParams object, not as the editorParams object"),editorParams={values:editorParams}),input.setAttribute("type","text"),input.style.padding="4px",input.style.width="100%",input.style.boxSizing="border-box",input.style.cursor="default",input.readOnly=0!=this.currentCell,editorParams.elementAttributes&&"object"==_typeof(editorParams.elementAttributes))for(var key in editorParams.elementAttributes)"+"==key.charAt(0)?(key=key.slice(1),input.setAttribute(key,input.getAttribute(key)+editorParams.elementAttributes["+"+key])):input.setAttribute(key,editorParams.elementAttributes[key]);return input.value=void 0!==initialValue||null===initialValue?initialValue:"",input.addEventListener("keydown",(function(e){var index;switch(e.keyCode){case 38:index=dataItems.indexOf(currentItem),("editor"==vertNav||"hybrid"==vertNav&&index)&&(e.stopImmediatePropagation(),e.stopPropagation(),e.preventDefault(),index>0&&setCurrentItem(dataItems[index-1],!multiselect));break;case 40:index=dataItems.indexOf(currentItem),("editor"==vertNav||"hybrid"==vertNav&&index-1||String(item.title).toLowerCase().indexOf(String(term).toLowerCase())>-1)&&matches.push(item)})),fillListIfNotEmpty(matches,intialLoad))}function addNotice(notice){var searchEl=document.createElement("div");clearList(),!1!==notice&&(searchEl.classList.add("tabulator-edit-select-list-notice"),searchEl.tabIndex=0,notice instanceof Node?searchEl.appendChild(notice):searchEl.innerHTML=notice,listEl.appendChild(searchEl))}function parseItems(inputValues){var itemList=[];if(Array.isArray(inputValues))inputValues.forEach((function(value){var item={};"object"===(void 0===value?"undefined":_typeof(value))?(item.title=editorParams.listItemFormatter?editorParams.listItemFormatter(value.value,value.label):value.label,item.value=value.value):(item.title=editorParams.listItemFormatter?editorParams.listItemFormatter(value,value):value,item.value=value),itemList.push(item)}));else for(var key in inputValues){var item={title:editorParams.listItemFormatter?editorParams.listItemFormatter(key,inputValues[key]):inputValues[key],value:key};itemList.push(item)}return itemList}function clearList(){for(;listEl.firstChild;)listEl.removeChild(listEl.firstChild)}function fillListIfNotEmpty(items,intialLoad){items.length?fillList(items,intialLoad):editorParams.emptyPlaceholder&&addNotice(editorParams.emptyPlaceholder)}function fillList(items,intialLoad){var current=!1;clearList(),(displayItems=items).forEach((function(item){var el=item.element;el||((el=document.createElement("div")).classList.add("tabulator-edit-select-list-item"),el.tabIndex=0,el.innerHTML=item.title,el.addEventListener("click",(function(e){setCurrentItem(item),chooseItem()})),el.addEventListener("mousedown",(function(e){blurable=!1,setTimeout((function(){blurable=!0}),10)})),item.element=el,intialLoad&&item.value==initialValue&&(input.value=item.title,item.element.classList.add("active"),current=!0),item===currentItem&&(item.element.classList.add("active"),current=!0)),listEl.appendChild(el)})),current||setCurrentItem(!1)}function chooseItem(){hideList(),currentItem?initialValue!==currentItem.value?(initialValue=currentItem.value,input.value=currentItem.title,success(currentItem.value)):cancel():editorParams.freetext?(initialValue=input.value,success(input.value)):editorParams.allowEmpty&&""===input.value?(initialValue=input.value,success(input.value)):cancel()}function showList(){if(!listEl.parentNode){for(;listEl.firstChild;)listEl.removeChild(listEl.firstChild);var offset=Tabulator.prototype.helpers.elOffset(cellEl);listEl.style.minWidth=cellEl.offsetWidth+"px",listEl.style.top=offset.top+cellEl.offsetHeight+"px",listEl.style.left=offset.left+"px",document.body.appendChild(listEl)}}function setCurrentItem(item,showInputValue){currentItem&¤tItem.element&¤tItem.element.classList.remove("active"),currentItem=item,item&&item.element&&item.element.classList.add("active")}function hideList(){listEl.parentNode&&listEl.parentNode.removeChild(listEl),removeScrollListener()}function cancelItem(){hideList(),cancel()}function removeScrollListener(){self.table.rowManager.element.removeEventListener("scroll",cancelItem)}return listEl.classList.add("tabulator-edit-select-list"),listEl.addEventListener("mousedown",(function(e){blurable=!1,setTimeout((function(){blurable=!0}),10)})),input.addEventListener("keydown",(function(e){var index;switch(e.keyCode){case 38:index=displayItems.indexOf(currentItem),("editor"==vertNav||"hybrid"==vertNav&&index)&&(e.stopImmediatePropagation(),e.stopPropagation(),e.preventDefault(),setCurrentItem(index>0&&displayItems[index-1]));break;case 40:index=displayItems.indexOf(currentItem),("editor"==vertNav||"hybrid"==vertNav&&index'):("ie"==self.table.browser?star.setAttribute("class","tabulator-star-inactive"):star.classList.replace("tabulator-star-active","tabulator-star-inactive"),star.innerHTML='')}))}function buildStar(i){var starHolder=document.createElement("span"),nextStar=star.cloneNode(!0);stars.push(nextStar),starHolder.addEventListener("mouseenter",(function(e){e.stopPropagation(),e.stopImmediatePropagation(),starChange(i)})),starHolder.addEventListener("mousemove",(function(e){e.stopPropagation(),e.stopImmediatePropagation()})),starHolder.addEventListener("click",(function(e){e.stopPropagation(),e.stopImmediatePropagation(),success(i),element.blur()})),starHolder.appendChild(nextStar),starsHolder.appendChild(starHolder)}function changeValue(val){value=val,starChange(val)}if(element.style.whiteSpace="nowrap",element.style.overflow="hidden",element.style.textOverflow="ellipsis",starsHolder.style.verticalAlign="middle",starsHolder.style.display="inline-block",starsHolder.style.padding="4px",star.setAttribute("width",size),star.setAttribute("height",size),star.setAttribute("viewBox","0 0 512 512"),star.setAttribute("xml:space","preserve"),star.style.padding="0 1px",editorParams.elementAttributes&&"object"==_typeof(editorParams.elementAttributes))for(var key in editorParams.elementAttributes)"+"==key.charAt(0)?(key=key.slice(1),starsHolder.setAttribute(key,starsHolder.getAttribute(key)+editorParams.elementAttributes["+"+key])):starsHolder.setAttribute(key,editorParams.elementAttributes[key]);for(var i=1;i<=maxStars;i++)buildStar(i);return starChange(value=Math.min(parseInt(value),maxStars)),starsHolder.addEventListener("mousemove",(function(e){starChange(0)})),starsHolder.addEventListener("click",(function(e){success(0)})),element.addEventListener("blur",(function(e){cancel()})),element.addEventListener("keydown",(function(e){switch(e.keyCode){case 39:changeValue(value+1);break;case 37:changeValue(value-1);break;case 13:success(value);break;case 27:cancel()}})),starsHolder},progress:function progress(cell,onRendered,success,cancel,editorParams){var element=cell.getElement(),max=void 0===editorParams.max?element.getElementsByTagName("div")[0].getAttribute("max")||100:editorParams.max,min=void 0===editorParams.min?element.getElementsByTagName("div")[0].getAttribute("min")||0:editorParams.min,percent=(max-min)/100,value=cell.getValue()||0,handle=document.createElement("div"),bar=document.createElement("div"),mouseDrag,mouseDragWidth;function updateValue(){var calcVal=percent*Math.round(bar.offsetWidth/(element.clientWidth/100))+min;success(calcVal),element.setAttribute("aria-valuenow",calcVal),element.setAttribute("aria-label",value)}if(handle.style.position="absolute",handle.style.right="0",handle.style.top="0",handle.style.bottom="0",handle.style.width="5px",handle.classList.add("tabulator-progress-handle"),bar.style.display="inline-block",bar.style.position="relative",bar.style.height="100%",bar.style.backgroundColor="#488CE9",bar.style.maxWidth="100%",bar.style.minWidth="0%",editorParams.elementAttributes&&"object"==_typeof(editorParams.elementAttributes))for(var key in editorParams.elementAttributes)"+"==key.charAt(0)?(key=key.slice(1),bar.setAttribute(key,bar.getAttribute(key)+editorParams.elementAttributes["+"+key])):bar.setAttribute(key,editorParams.elementAttributes[key]);return element.style.padding="4px 4px",value=Math.min(parseFloat(value),max),value=Math.max(parseFloat(value),min),value=Math.round((value-min)/percent),bar.style.width=value+"%",element.setAttribute("aria-valuemin",min),element.setAttribute("aria-valuemax",max),bar.appendChild(handle),handle.addEventListener("mousedown",(function(e){mouseDrag=e.screenX,mouseDragWidth=bar.offsetWidth})),handle.addEventListener("mouseover",(function(){handle.style.cursor="ew-resize"})),element.addEventListener("mousemove",(function(e){mouseDrag&&(bar.style.width=mouseDragWidth+e.screenX-mouseDrag+"px")})),element.addEventListener("mouseup",(function(e){mouseDrag&&(e.stopPropagation(),e.stopImmediatePropagation(),mouseDrag=!1,mouseDragWidth=!1,updateValue())})),element.addEventListener("keydown",(function(e){switch(e.keyCode){case 39:e.preventDefault(),bar.style.width=bar.clientWidth+element.clientWidth/100+"px";break;case 37:e.preventDefault(),bar.style.width=bar.clientWidth-element.clientWidth/100+"px";break;case 9:case 13:updateValue();break;case 27:cancel()}})),element.addEventListener("blur",(function(){cancel()})),bar},tickCross:function tickCross(cell,onRendered,success,cancel,editorParams){var value=cell.getValue(),input=document.createElement("input"),tristate=editorParams.tristate,indetermValue=void 0===editorParams.indeterminateValue?null:editorParams.indeterminateValue,indetermState=!1;if(input.setAttribute("type","checkbox"),input.style.marginTop="5px",input.style.boxSizing="border-box",editorParams.elementAttributes&&"object"==_typeof(editorParams.elementAttributes))for(var key in editorParams.elementAttributes)"+"==key.charAt(0)?(key=key.slice(1),input.setAttribute(key,input.getAttribute(key)+editorParams.elementAttributes["+"+key])):input.setAttribute(key,editorParams.elementAttributes[key]);function setValue(blur){return tristate?blur?indetermState?indetermValue:input.checked:input.checked&&!indetermState?(input.checked=!1,input.indeterminate=!0,indetermState=!0,indetermValue):(indetermState=!1,input.checked):input.checked}return input.value=value,!tristate||void 0!==value&&value!==indetermValue&&""!==value||(indetermState=!0,input.indeterminate=!0),"firefox"!=this.table.browser&&onRendered((function(){input.focus({preventScroll:!0})})),input.checked=!0===value||"true"===value||"True"===value||1===value,input.addEventListener("change",(function(e){success(setValue())})),input.addEventListener("blur",(function(e){success(setValue(!0))})),input.addEventListener("keydown",(function(e){13==e.keyCode&&success(setValue()),27==e.keyCode&&cancel()})),input}},Tabulator.prototype.registerModule("edit",Edit);var ExportRow=function ExportRow(type,columns,component,indent){this.type=type,this.columns=columns,this.component=component||!1,this.indent=indent||0},ExportColumn=function ExportColumn(value,component,width,height,depth){this.value=value,this.component=component||!1,this.width=width,this.height=height,this.depth=depth},Export=function Export(table){this.table=table,this.config={},this.cloneTableStyle=!0,this.colVisProp=""};Export.prototype.generateExportList=function(config,style,range,colVisProp){this.cloneTableStyle=style,this.config=config||{},this.colVisProp=colVisProp;var headers=!1!==this.config.columnHeaders?this.headersToExportRows(this.generateColumnGroupHeaders()):[],body=this.bodyToExportRows(this.rowLookup(range));return headers.concat(body)},Export.prototype.genereateTable=function(config,style,range,colVisProp){var list=this.generateExportList(config,style,range,colVisProp);return this.genereateTableElement(list)},Export.prototype.rowLookup=function(range){var _this45=this,rows=[];if("function"==typeof range)range.call(this.table).forEach((function(row){(row=_this45.table.rowManager.findRow(row))&&rows.push(row)}));else switch(range){case!0:case"visible":rows=this.table.rowManager.getVisibleRows(!0);break;case"all":rows=this.table.rowManager.rows;break;case"selected":rows=this.table.modules.selectRow.selectedRows;break;case"active":default:rows=this.table.rowManager.getDisplayRows()}return Object.assign([],rows)},Export.prototype.generateColumnGroupHeaders=function(){var _this46=this,output=[],columns;return(!1!==this.config.columnGroups?this.table.columnManager.columns:this.table.columnManager.columnsByIndex).forEach((function(column){var colData=_this46.processColumnGroup(column);colData&&output.push(colData)})),output},Export.prototype.processColumnGroup=function(column){var _this47=this,subGroups=column.columns,maxDepth=0,title,groupData={title:column.definition["title"+(this.colVisProp.charAt(0).toUpperCase()+this.colVisProp.slice(1))]||column.definition.title,column:column,depth:1};if(subGroups.length){if(groupData.subGroups=[],groupData.width=0,subGroups.forEach((function(subGroup){var subGroupData=_this47.processColumnGroup(subGroup);subGroupData&&(groupData.width+=subGroupData.width,groupData.subGroups.push(subGroupData),subGroupData.depth>maxDepth&&(maxDepth=subGroupData.depth))})),groupData.depth+=maxDepth,!groupData.width)return!1}else{if(!this.columnVisCheck(column))return!1;groupData.width=1}return groupData},Export.prototype.columnVisCheck=function(column){return!1!==column.definition[this.colVisProp]&&(column.visible||!column.visible&&column.definition[this.colVisProp])},Export.prototype.headersToExportRows=function(columns){var headers=[],headerDepth=0,exportRows=[];function parseColumnGroup(column,level){var depth=headerDepth-level;if(void 0===headers[level]&&(headers[level]=[]),column.height=column.subGroups?1:depth-column.depth+1,headers[level].push(column),column.height>1)for(var _i6=1;_i61)for(var _i7=1;_i7headerDepth&&(headerDepth=column.depth)})),columns.forEach((function(column){parseColumnGroup(column,0)})),headers.forEach((function(header){var columns=[];header.forEach((function(col){col?columns.push(new ExportColumn(col.title,col.column.getComponent(),col.width,col.height,col.depth)):columns.push(null)})),exportRows.push(new ExportRow("header",columns))})),exportRows},Export.prototype.bodyToExportRows=function(rows){var _this48=this,columns=[],exportRows=[];return this.table.columnManager.columnsByIndex.forEach((function(column){_this48.columnVisCheck(column)&&columns.push(column.getComponent())})),!1!==this.config.columnCalcs&&this.table.modExists("columnCalcs")&&(this.table.modules.columnCalcs.topInitialized&&rows.unshift(this.table.modules.columnCalcs.topRow),this.table.modules.columnCalcs.botInitialized&&rows.push(this.table.modules.columnCalcs.botRow)),(rows=rows.filter((function(row){switch(row.type){case"group":return!1!==_this48.config.rowGroups;case"calc":return!1!==_this48.config.columnCalcs;case"row":return!(_this48.table.options.dataTree&&!1===_this48.config.dataTree&&row.modules.dataTree.parent)}return!0}))).forEach((function(row,i){var rowData=row.getData(_this48.colVisProp),exportCols=[],indent=0;switch(row.type){case"group":indent=row.level,exportCols.push(new ExportColumn(row.key,row.getComponent(),columns.length,1));break;case"calc":case"row":columns.forEach((function(col){exportCols.push(new ExportColumn(col._column.getFieldValue(rowData),col,1,1))})),_this48.table.options.dataTree&&!1!==_this48.config.dataTree&&(indent=row.modules.dataTree.index)}exportRows.push(new ExportRow(row.type,exportCols,row.getComponent(),indent))})),exportRows},Export.prototype.genereateTableElement=function(list){var _this49=this,table=document.createElement("table"),headerEl=document.createElement("thead"),bodyEl=document.createElement("tbody"),styles=this.lookupTableStyles(),rowFormatter=this.table.options["rowFormatter"+(this.colVisProp.charAt(0).toUpperCase()+this.colVisProp.slice(1))],setup={};return setup.rowFormatter=null!==rowFormatter?rowFormatter:this.table.options.rowFormatter,this.table.options.dataTree&&!1!==this.config.dataTree&&this.table.modExists("columnCalcs")&&(setup.treeElementField=this.table.modules.dataTree.elementField),setup.groupHeader=this.table.options["groupHeader"+(this.colVisProp.charAt(0).toUpperCase()+this.colVisProp.slice(1))],setup.groupHeader&&!Array.isArray(setup.groupHeader)&&(setup.groupHeader=[setup.groupHeader]),table.classList.add("tabulator-print-table"),this.mapElementStyles(this.table.columnManager.getHeadersElement(),headerEl,["border-top","border-left","border-right","border-bottom","background-color","color","font-weight","font-family","font-size"]),list.length>1e3&&console.warn("It may take a long time to render an HTML table with more than 1000 rows"),list.forEach((function(row,i){switch(row.type){case"header":headerEl.appendChild(_this49.genereateHeaderElement(row,setup,styles));break;case"group":bodyEl.appendChild(_this49.genereateGroupElement(row,setup,styles));break;case"calc":bodyEl.appendChild(_this49.genereateCalcElement(row,setup,styles));break;case"row":var rowEl=_this49.genereateRowElement(row,setup,styles);_this49.mapElementStyles(i%2&&styles.evenRow?styles.evenRow:styles.oddRow,rowEl,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),bodyEl.appendChild(rowEl)}})),headerEl.innerHTML&&table.appendChild(headerEl),table.appendChild(bodyEl),this.mapElementStyles(this.table.element,table,["border-top","border-left","border-right","border-bottom"]),table},Export.prototype.lookupTableStyles=function(){var styles={};return this.cloneTableStyle&&window.getComputedStyle&&(styles.oddRow=this.table.element.querySelector(".tabulator-row-odd:not(.tabulator-group):not(.tabulator-calcs)"),styles.evenRow=this.table.element.querySelector(".tabulator-row-even:not(.tabulator-group):not(.tabulator-calcs)"),styles.calcRow=this.table.element.querySelector(".tabulator-row.tabulator-calcs"),styles.firstRow=this.table.element.querySelector(".tabulator-row:not(.tabulator-group):not(.tabulator-calcs)"),styles.firstGroup=this.table.element.getElementsByClassName("tabulator-group")[0],styles.firstRow&&(styles.styleCells=styles.firstRow.getElementsByClassName("tabulator-cell"),styles.firstCell=styles.styleCells[0],styles.lastCell=styles.styleCells[styles.styleCells.length-1])),styles},Export.prototype.genereateHeaderElement=function(row,setup,styles){var _this50=this,rowEl=document.createElement("tr");return row.columns.forEach((function(column){if(column){var cellEl=document.createElement("th"),classNames=column.component._column.definition.cssClass?column.component._column.definition.cssClass.split(" "):[];cellEl.colSpan=column.width,cellEl.rowSpan=column.height,cellEl.innerHTML=column.value,_this50.cloneTableStyle&&(cellEl.style.boxSizing="border-box"),classNames.forEach((function(className){cellEl.classList.add(className)})),_this50.mapElementStyles(column.component.getElement(),cellEl,["text-align","border-top","border-left","border-right","border-bottom","background-color","color","font-weight","font-family","font-size"]),_this50.mapElementStyles(column.component._column.contentElement,cellEl,["padding-top","padding-left","padding-right","padding-bottom"]),column.component._column.visible?_this50.mapElementStyles(column.component.getElement(),cellEl,["width"]):column.component._column.definition.width&&(cellEl.style.width=column.component._column.definition.width+"px"),column.component._column.parent&&_this50.mapElementStyles(column.component._column.parent.groupElement,cellEl,["border-top"]),rowEl.appendChild(cellEl)}})),rowEl},Export.prototype.genereateGroupElement=function(row,setup,styles){var rowEl=document.createElement("tr"),cellEl=document.createElement("td"),group=row.columns[0];return rowEl.classList.add("tabulator-print-table-row"),setup.groupHeader&&setup.groupHeader[row.indent]?group.value=setup.groupHeader[row.indent](group.value,row.component._group.getRowCount(),row.component._group.getData(),row.component):!1===setup.groupHeader?group.value=group.value:group.value=row.component._group.generator(group.value,row.component._group.getRowCount(),row.component._group.getData(),row.component),cellEl.colSpan=group.width,cellEl.innerHTML=group.value,rowEl.classList.add("tabulator-print-table-group"),rowEl.classList.add("tabulator-group-level-"+row.indent),group.component.getVisibility()&&rowEl.classList.add("tabulator-group-visible"),this.mapElementStyles(styles.firstGroup,rowEl,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),this.mapElementStyles(styles.firstGroup,cellEl,["padding-top","padding-left","padding-right","padding-bottom"]),rowEl.appendChild(cellEl),rowEl},Export.prototype.genereateCalcElement=function(row,setup,styles){var rowEl=this.genereateRowElement(row,setup,styles);return rowEl.classList.add("tabulator-print-table-calcs"),this.mapElementStyles(styles.calcRow,rowEl,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),rowEl},Export.prototype.genereateRowElement=function(row,setup,styles){var _this51=this,rowEl=document.createElement("tr");return rowEl.classList.add("tabulator-print-table-row"),row.columns.forEach((function(col){if(col){var cellEl=document.createElement("td"),column=col.component._column,value=col.value,cellWrapper={modules:{},getValue:function getValue(){return value},getField:function getField(){return column.definition.field},getElement:function getElement(){return cellEl},getColumn:function getColumn(){return column.getComponent()},getData:function getData(){return rowData},getRow:function getRow(){return row.getComponent()},getComponent:function getComponent(){return cellWrapper},column:column},classNames;if((column.definition.cssClass?column.definition.cssClass.split(" "):[]).forEach((function(className){cellEl.classList.add(className)})),_this51.table.modExists("format")&&!1!==_this51.config.formatCells)value=_this51.table.modules.format.formatExportValue(cellWrapper,_this51.colVisProp);else switch(void 0===value?"undefined":_typeof(value)){case"object":value=JSON.stringify(value);break;case"undefined":case"null":value="";break;default:value=value}if(value instanceof Node?cellEl.appendChild(value):cellEl.innerHTML=value,styles.firstCell&&(_this51.mapElementStyles(styles.firstCell,cellEl,["padding-top","padding-left","padding-right","padding-bottom","border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size"]),column.definition.align&&(cellEl.style.textAlign=column.definition.align)),_this51.table.options.dataTree&&!1!==_this51.config.dataTree&&(setup.treeElementField&&setup.treeElementField==column.field||!setup.treeElementField&&0==i)&&(row.component._row.modules.dataTree.controlEl&&cellEl.insertBefore(row.component._row.modules.dataTree.controlEl.cloneNode(!0),cellEl.firstChild),row.component._row.modules.dataTree.branchEl&&cellEl.insertBefore(row.component._row.modules.dataTree.branchEl.cloneNode(!0),cellEl.firstChild)),rowEl.appendChild(cellEl),cellWrapper.modules.format&&cellWrapper.modules.format.renderedCallback&&cellWrapper.modules.format.renderedCallback(),setup.rowFormatter&&!1!==_this51.config.formatCells){var rowComponent=row.getComponent();rowComponent.getElement=function(){return rowEl},setup.rowFormatter(rowComponent)}}})),rowEl},Export.prototype.genereateHTMLTable=function(list){var holder=document.createElement("div");return holder.appendChild(this.genereateTableElement(list)),holder.innerHTML},Export.prototype.getHtml=function(visible,style,config,colVisProp){var list=this.generateExportList(config||this.table.options.htmlOutputConfig,style,visible,colVisProp||"htmlOutput");return this.genereateHTMLTable(list)},Export.prototype.mapElementStyles=function(from,to,props){if(this.cloneTableStyle&&from&&to){var lookup={"background-color":"backgroundColor",color:"fontColor",width:"width","font-weight":"fontWeight","font-family":"fontFamily","font-size":"fontSize","text-align":"textAlign","border-top":"borderTop","border-left":"borderLeft","border-right":"borderRight","border-bottom":"borderBottom","padding-top":"paddingTop","padding-left":"paddingLeft","padding-right":"paddingRight","padding-bottom":"paddingBottom"};if(window.getComputedStyle){var fromStyle=window.getComputedStyle(from);props.forEach((function(prop){to.style[lookup[prop]]=fromStyle.getPropertyValue(prop)}))}}},Tabulator.prototype.registerModule("export",Export);var Filter=function Filter(table){this.table=table,this.filterList=[],this.headerFilters={},this.headerFilterColumns=[],this.prevHeaderFilterChangeCheck="",this.prevHeaderFilterChangeCheck="{}",this.changed=!1};Filter.prototype.initializeColumn=function(column,value){var self=this,field=column.getField(),params;function success(value){var filterType="input"==column.modules.filter.tagType&&"text"==column.modules.filter.attrType||"textarea"==column.modules.filter.tagType?"partial":"match",type="",filterChangeCheck="",filterFunc;if(void 0===column.modules.filter.prevSuccess||column.modules.filter.prevSuccess!==value){if(column.modules.filter.prevSuccess=value,column.modules.filter.emptyFunc(value))delete self.headerFilters[field];else{switch(column.modules.filter.value=value,_typeof(column.definition.headerFilterFunc)){case"string":self.filters[column.definition.headerFilterFunc]?(type=column.definition.headerFilterFunc,filterFunc=function filterFunc(data){var params=column.definition.headerFilterFuncParams||{},fieldVal=column.getFieldValue(data);return params="function"==typeof params?params(value,fieldVal,data):params,self.filters[column.definition.headerFilterFunc](value,fieldVal,data,params)}):console.warn("Header Filter Error - Matching filter function not found: ",column.definition.headerFilterFunc);break;case"function":type=filterFunc=function filterFunc(data){var params=column.definition.headerFilterFuncParams||{},fieldVal=column.getFieldValue(data);return params="function"==typeof params?params(value,fieldVal,data):params,column.definition.headerFilterFunc(value,fieldVal,data,params)}}if(!filterFunc)switch(filterType){case"partial":filterFunc=function filterFunc(data){var colVal=column.getFieldValue(data);return null!=colVal&&String(colVal).toLowerCase().indexOf(String(value).toLowerCase())>-1},type="like";break;default:filterFunc=function filterFunc(data){return column.getFieldValue(data)==value},type="="}self.headerFilters[field]={value:value,func:filterFunc,type:type,params:{}}}filterChangeCheck=JSON.stringify(self.headerFilters),self.prevHeaderFilterChangeCheck!==filterChangeCheck&&(self.prevHeaderFilterChangeCheck=filterChangeCheck,self.changed=!0,self.table.rowManager.filterRefresh())}return!0}column.modules.filter={success:success,attrType:!1,tagType:!1,emptyFunc:!1},this.generateHeaderFilterElement(column)},Filter.prototype.generateHeaderFilterElement=function(column,initialValue,reinitialize){var _this52=this,self=this,success=column.modules.filter.success,field=column.getField(),filterElement,editor,editorElement,cellWrapper,typingTimer,searchTrigger,params;function cancel(){}if(column.modules.filter.headerElement&&column.modules.filter.headerElement.parentNode&&column.contentElement.removeChild(column.modules.filter.headerElement.parentNode),field){switch(column.modules.filter.emptyFunc=column.definition.headerFilterEmptyCheck||function(value){return!value&&"0"!==value},(filterElement=document.createElement("div")).classList.add("tabulator-header-filter"),_typeof(column.definition.headerFilter)){case"string":self.table.modules.edit.editors[column.definition.headerFilter]?(editor=self.table.modules.edit.editors[column.definition.headerFilter],"tick"!==column.definition.headerFilter&&"tickCross"!==column.definition.headerFilter||column.definition.headerFilterEmptyCheck||(column.modules.filter.emptyFunc=function(value){return!0!==value&&!1!==value})):console.warn("Filter Error - Cannot build header filter, No such editor found: ",column.definition.editor);break;case"function":editor=column.definition.headerFilter;break;case"boolean":column.modules.edit&&column.modules.edit.editor?editor=column.modules.edit.editor:column.definition.formatter&&self.table.modules.edit.editors[column.definition.formatter]?(editor=self.table.modules.edit.editors[column.definition.formatter],"tick"!==column.definition.formatter&&"tickCross"!==column.definition.formatter||column.definition.headerFilterEmptyCheck||(column.modules.filter.emptyFunc=function(value){return!0!==value&&!1!==value})):editor=self.table.modules.edit.editors.input}if(editor){if(cellWrapper={getValue:function getValue(){return void 0!==initialValue?initialValue:""},getField:function getField(){return column.definition.field},getElement:function getElement(){return filterElement},getColumn:function getColumn(){return column.getComponent()},getRow:function getRow(){return{normalizeHeight:function normalizeHeight(){}}}},params="function"==typeof(params=column.definition.headerFilterParams||{})?params.call(self.table):params,!(editorElement=editor.call(this.table.modules.edit,cellWrapper,(function(){}),success,cancel,params)))return void console.warn("Filter Error - Cannot add filter to "+field+" column, editor returned a value of false");if(!(editorElement instanceof Node))return void console.warn("Filter Error - Cannot add filter to "+field+" column, editor should return an instance of Node, the editor returned:",editorElement);field?self.table.modules.localize.bind("headerFilters|columns|"+column.definition.field,(function(value){editorElement.setAttribute("placeholder",void 0!==value&&value?value:self.table.modules.localize.getText("headerFilters|default"))})):self.table.modules.localize.bind("headerFilters|default",(function(value){editorElement.setAttribute("placeholder",void 0!==self.column.definition.headerFilterPlaceholder&&self.column.definition.headerFilterPlaceholder?self.column.definition.headerFilterPlaceholder:value)})),editorElement.addEventListener("click",(function(e){e.stopPropagation(),editorElement.focus()})),editorElement.addEventListener("focus",(function(e){var left=_this52.table.columnManager.element.scrollLeft;left!==_this52.table.rowManager.element.scrollLeft&&(_this52.table.rowManager.scrollHorizontal(left),_this52.table.columnManager.scrollHorizontal(left))})),typingTimer=!1,searchTrigger=function searchTrigger(e){typingTimer&&clearTimeout(typingTimer),typingTimer=setTimeout((function(){success(editorElement.value)}),self.table.options.headerFilterLiveFilterDelay)},column.modules.filter.headerElement=editorElement,column.modules.filter.attrType=editorElement.hasAttribute("type")?editorElement.getAttribute("type").toLowerCase():"",column.modules.filter.tagType=editorElement.tagName.toLowerCase(),!1!==column.definition.headerFilterLiveFilter&&("autocomplete"!==column.definition.headerFilter&&"tickCross"!==column.definition.headerFilter&&("autocomplete"!==column.definition.editor&&"tickCross"!==column.definition.editor||!0!==column.definition.headerFilter)&&(editorElement.addEventListener("keyup",searchTrigger),editorElement.addEventListener("search",searchTrigger),"number"==column.modules.filter.attrType&&editorElement.addEventListener("change",(function(e){success(editorElement.value)})),"text"==column.modules.filter.attrType&&"ie"!==this.table.browser&&editorElement.setAttribute("type","search")),"input"!=column.modules.filter.tagType&&"select"!=column.modules.filter.tagType&&"textarea"!=column.modules.filter.tagType||editorElement.addEventListener("mousedown",(function(e){e.stopPropagation()}))),filterElement.appendChild(editorElement),column.contentElement.appendChild(filterElement),reinitialize||self.headerFilterColumns.push(column)}}else console.warn("Filter Error - Cannot add header filter, column has no field set:",column.definition.title)},Filter.prototype.hideHeaderFilterElements=function(){this.headerFilterColumns.forEach((function(column){column.modules.filter&&column.modules.filter.headerElement&&(column.modules.filter.headerElement.style.display="none")}))},Filter.prototype.showHeaderFilterElements=function(){this.headerFilterColumns.forEach((function(column){column.modules.filter&&column.modules.filter.headerElement&&(column.modules.filter.headerElement.style.display="")}))},Filter.prototype.setHeaderFilterFocus=function(column){column.modules.filter&&column.modules.filter.headerElement?column.modules.filter.headerElement.focus():console.warn("Column Filter Focus Error - No header filter set on column:",column.getField())},Filter.prototype.getHeaderFilterValue=function(column){if(column.modules.filter&&column.modules.filter.headerElement)return column.modules.filter.headerElement.value;console.warn("Column Filter Error - No header filter set on column:",column.getField())},Filter.prototype.setHeaderFilterValue=function(column,value){column&&(column.modules.filter&&column.modules.filter.headerElement?(this.generateHeaderFilterElement(column,value,!0),column.modules.filter.success(value)):console.warn("Column Filter Error - No header filter set on column:",column.getField()))},Filter.prototype.reloadHeaderFilter=function(column){column&&(column.modules.filter&&column.modules.filter.headerElement?this.generateHeaderFilterElement(column,column.modules.filter.value,!0):console.warn("Column Filter Error - No header filter set on column:",column.getField()))},Filter.prototype.hasChanged=function(){var changed=this.changed;return this.changed=!1,changed},Filter.prototype.setFilter=function(field,type,value,params){var self=this;this.filterList=[],Array.isArray(field)||(field=[{field:field,type:type,value:value,params:params}]),this.addFilter(field)},Filter.prototype.addFilter=function(field,type,value,params){var self=this;Array.isArray(field)||(field=[{field:field,type:type,value:value,params:params}]),field.forEach((function(filter){(filter=self.findFilter(filter))&&(self.filterList.push(filter),self.changed=!0)})),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.filter&&this.table.modules.persistence.save("filter")},Filter.prototype.findFilter=function(filter){var self=this,column;if(Array.isArray(filter))return this.findSubFilters(filter);var filterFunc=!1;return"function"==typeof filter.field?filterFunc=function filterFunc(data){return filter.field(data,filter.type||{})}:self.filters[filter.type]?filterFunc=(column=self.table.columnManager.getColumnByField(filter.field))?function filterFunc(data){return self.filters[filter.type](filter.value,column.getFieldValue(data),data,filter.params||{})}:function filterFunc(data){return self.filters[filter.type](filter.value,data[filter.field],data,filter.params||{})}:console.warn("Filter Error - No such filter type found, ignoring: ",filter.type),filter.func=filterFunc,!!filter.func&&filter},Filter.prototype.findSubFilters=function(filters){var self=this,output=[];return filters.forEach((function(filter){(filter=self.findFilter(filter))&&output.push(filter)})),!!output.length&&output},Filter.prototype.getFilters=function(all,ajax){var output=[];return all&&(output=this.getHeaderFilters()),ajax&&output.forEach((function(item){"function"==typeof item.type&&(item.type="function")})),output=output.concat(this.filtersToArray(this.filterList,ajax))},Filter.prototype.filtersToArray=function(filterList,ajax){var _this53=this,output=[];return filterList.forEach((function(filter){var item;Array.isArray(filter)?output.push(_this53.filtersToArray(filter,ajax)):(item={field:filter.field,type:filter.type,value:filter.value},ajax&&"function"==typeof item.type&&(item.type="function"),output.push(item))})),output},Filter.prototype.getHeaderFilters=function(){var self=this,output=[];for(var key in this.headerFilters)output.push({field:key,type:this.headerFilters[key].type,value:this.headerFilters[key].value});return output},Filter.prototype.removeFilter=function(field,type,value){var self=this;Array.isArray(field)||(field=[{field:field,type:type,value:value}]),field.forEach((function(filter){var index=-1;(index="object"==_typeof(filter.field)?self.filterList.findIndex((function(element){return filter===element})):self.filterList.findIndex((function(element){return filter.field===element.field&&filter.type===element.type&&filter.value===element.value})))>-1?(self.filterList.splice(index,1),self.changed=!0):console.warn("Filter Error - No matching filter type found, ignoring: ",filter.type)})),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.filter&&this.table.modules.persistence.save("filter")},Filter.prototype.clearFilter=function(all){this.filterList=[],all&&this.clearHeaderFilter(),this.changed=!0,this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.filter&&this.table.modules.persistence.save("filter")},Filter.prototype.clearHeaderFilter=function(){var self=this;this.headerFilters={},self.prevHeaderFilterChangeCheck="{}",this.headerFilterColumns.forEach((function(column){column.modules.filter.value=null,column.modules.filter.prevSuccess=void 0,self.reloadHeaderFilter(column)})),this.changed=!0},Filter.prototype.search=function(searchType,field,type,value){var self=this,activeRows=[],filterList=[];return Array.isArray(field)||(field=[{field:field,type:type,value:value}]),field.forEach((function(filter){(filter=self.findFilter(filter))&&filterList.push(filter)})),this.table.rowManager.rows.forEach((function(row){var match=!0;filterList.forEach((function(filter){self.filterRecurse(filter,row.getData())||(match=!1)})),match&&activeRows.push("data"===searchType?row.getData("data"):row.getComponent())})),activeRows},Filter.prototype.filter=function(rowList,filters){var self=this,activeRows=[],activeRowComponents=[];return self.table.options.dataFiltering&&self.table.options.dataFiltering.call(self.table,self.getFilters()),self.table.options.ajaxFiltering||!self.filterList.length&&!Object.keys(self.headerFilters).length?activeRows=rowList.slice(0):rowList.forEach((function(row){self.filterRow(row)&&activeRows.push(row)})),self.table.options.dataFiltered&&(activeRows.forEach((function(row){activeRowComponents.push(row.getComponent())})),self.table.options.dataFiltered.call(self.table,self.getFilters(),activeRowComponents)),activeRows},Filter.prototype.filterRow=function(row,filters){var self=this,match=!0,data=row.getData();for(var field in self.filterList.forEach((function(filter){self.filterRecurse(filter,data)||(match=!1)})),self.headerFilters)self.headerFilters[field].func(data)||(match=!1);return match},Filter.prototype.filterRecurse=function(filter,data){var self=this,match=!1;return Array.isArray(filter)?filter.forEach((function(subFilter){self.filterRecurse(subFilter,data)&&(match=!0)})):match=filter.func(data),match},Filter.prototype.filters={"=":function _(filterVal,rowVal,rowData,filterParams){return rowVal==filterVal},"<":function _(filterVal,rowVal,rowData,filterParams){return rowVal":function _(filterVal,rowVal,rowData,filterParams){return rowVal>filterVal},">=":function _(filterVal,rowVal,rowData,filterParams){return rowVal>=filterVal},"!=":function _(filterVal,rowVal,rowData,filterParams){return rowVal!=filterVal},regex:function regex(filterVal,rowVal,rowData,filterParams){return"string"==typeof filterVal&&(filterVal=new RegExp(filterVal)),filterVal.test(rowVal)},like:function like(filterVal,rowVal,rowData,filterParams){return null==filterVal?rowVal===filterVal:null!=rowVal&&String(rowVal).toLowerCase().indexOf(filterVal.toLowerCase())>-1},keywords:function keywords(filterVal,rowVal,rowData,filterParams){var keywords=filterVal.toLowerCase().split(void 0===filterParams.separator?" ":filterParams.separator),value=String(null==rowVal?"":rowVal).toLowerCase(),matches=[];return keywords.forEach((function(keyword){value.includes(keyword)&&matches.push(!0)})),filterParams.matchAll?matches.length===keywords.length:!!matches.length},starts:function starts(filterVal,rowVal,rowData,filterParams){return null==filterVal?rowVal===filterVal:null!=rowVal&&String(rowVal).toLowerCase().startsWith(filterVal.toLowerCase())},ends:function ends(filterVal,rowVal,rowData,filterParams){return null==filterVal?rowVal===filterVal:null!=rowVal&&String(rowVal).toLowerCase().endsWith(filterVal.toLowerCase())},in:function _in(filterVal,rowVal,rowData,filterParams){return Array.isArray(filterVal)?filterVal.indexOf(rowVal)>-1:(console.warn("Filter Error - filter value is not an array:",filterVal),!1)}},Tabulator.prototype.registerModule("filter",Filter);var Format=function Format(table){this.table=table};Format.prototype.initializeColumn=function(column){column.modules.format=this.lookupFormatter(column,""),void 0!==column.definition.formatterPrint&&(column.modules.format.print=this.lookupFormatter(column,"Print")),void 0!==column.definition.formatterClipboard&&(column.modules.format.clipboard=this.lookupFormatter(column,"Clipboard")),void 0!==column.definition.formatterHtmlOutput&&(column.modules.format.htmlOutput=this.lookupFormatter(column,"HtmlOutput"))},Format.prototype.lookupFormatter=function(column,type){var config={params:column.definition["formatter"+type+"Params"]||{}},formatter=column.definition["formatter"+type];switch(void 0===formatter?"undefined":_typeof(formatter)){case"string":"tick"===formatter&&(formatter="tickCross",void 0===config.params.crossElement&&(config.params.crossElement=!1),console.warn("DEPRECATION WARNING - the tick formatter has been deprecated, please use the tickCross formatter with the crossElement param set to false")),this.formatters[formatter]?config.formatter=this.formatters[formatter]:(console.warn("Formatter Error - No such formatter found: ",formatter),config.formatter=this.formatters.plaintext);break;case"function":config.formatter=formatter;break;default:config.formatter=this.formatters.plaintext}return config},Format.prototype.cellRendered=function(cell){cell.modules.format&&cell.modules.format.renderedCallback&&cell.modules.format.renderedCallback()},Format.prototype.formatValue=function(cell){var component=cell.getComponent(),params="function"==typeof cell.column.modules.format.params?cell.column.modules.format.params(component):cell.column.modules.format.params;function onRendered(callback){cell.modules.format||(cell.modules.format={}),cell.modules.format.renderedCallback=callback}return cell.column.modules.format.formatter.call(this,component,params,onRendered)},Format.prototype.formatExportValue=function(cell,type){var formatter=cell.column.modules.format[type],params;if(formatter){var onRendered=function onRendered(callback){cell.modules.format||(cell.modules.format={}),cell.modules.format.renderedCallback=callback};return params="function"==typeof formatter.params?formatter.params(component):formatter.params,formatter.formatter.call(this,cell.getComponent(),params,onRendered)}return this.formatValue(cell)},Format.prototype.sanitizeHTML=function(value){if(value){var entityMap={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/","`":"`","=":"="};return String(value).replace(/[&<>"'`=\/]/g,(function(s){return entityMap[s]}))}return value},Format.prototype.emptyToSpace=function(value){return null==value||""===value?" ":value},Format.prototype.getFormatter=function(formatter){var formatter;switch(void 0===formatter?"undefined":_typeof(formatter)){case"string":this.formatters[formatter]?formatter=this.formatters[formatter]:(console.warn("Formatter Error - No such formatter found: ",formatter),formatter=this.formatters.plaintext);break;case"function":formatter=formatter;break;default:formatter=this.formatters.plaintext}return formatter},Format.prototype.formatters={plaintext:function plaintext(cell,formatterParams,onRendered){return this.emptyToSpace(this.sanitizeHTML(cell.getValue()))},html:function html(cell,formatterParams,onRendered){return cell.getValue()},textarea:function textarea(cell,formatterParams,onRendered){return cell.getElement().style.whiteSpace="pre-wrap",this.emptyToSpace(this.sanitizeHTML(cell.getValue()))},money:function money(cell,formatterParams,onRendered){var floatVal=parseFloat(cell.getValue()),number,integer,decimal,rgx,decimalSym=formatterParams.decimal||".",thousandSym=formatterParams.thousand||",",symbol=formatterParams.symbol||"",after=!!formatterParams.symbolAfter,precision=void 0!==formatterParams.precision?formatterParams.precision:2;if(isNaN(floatVal))return this.emptyToSpace(this.sanitizeHTML(cell.getValue()));for(number=!1!==precision?floatVal.toFixed(precision):floatVal,integer=(number=String(number).split("."))[0],decimal=number.length>1?decimalSym+number[1]:"",rgx=/(\d+)(\d{3})/;rgx.test(integer);)integer=integer.replace(rgx,"$1"+thousandSym+"$2");return after?integer+decimal+symbol:symbol+integer+decimal},link:function link(cell,formatterParams,onRendered){var value=cell.getValue(),urlPrefix=formatterParams.urlPrefix||"",download=formatterParams.download,label=value,el=document.createElement("a"),data;if(formatterParams.labelField&&(label=(data=cell.getData())[formatterParams.labelField]),formatterParams.label)switch(_typeof(formatterParams.label)){case"string":label=formatterParams.label;break;case"function":label=formatterParams.label(cell)}if(label){if(formatterParams.urlField&&(value=(data=cell.getData())[formatterParams.urlField]),formatterParams.url)switch(_typeof(formatterParams.url)){case"string":value=formatterParams.url;break;case"function":value=formatterParams.url(cell)}return el.setAttribute("href",urlPrefix+value),formatterParams.target&&el.setAttribute("target",formatterParams.target),formatterParams.download&&(download="function"==typeof download?download(cell):!0===download?"":download,el.setAttribute("download",download)),el.innerHTML=this.emptyToSpace(this.sanitizeHTML(label)),el}return" "},image:function image(cell,formatterParams,onRendered){var el=document.createElement("img");switch(el.setAttribute("src",cell.getValue()),_typeof(formatterParams.height)){case"number":el.style.height=formatterParams.height+"px";break;case"string":el.style.height=formatterParams.height}switch(_typeof(formatterParams.width)){case"number":el.style.width=formatterParams.width+"px";break;case"string":el.style.width=formatterParams.width}return el.addEventListener("load",(function(){cell.getRow().normalizeHeight()})),el},tickCross:function tickCross(cell,formatterParams,onRendered){var value=cell.getValue(),element=cell.getElement(),empty=formatterParams.allowEmpty,truthy=formatterParams.allowTruthy,tick=void 0!==formatterParams.tickElement?formatterParams.tickElement:'',cross=void 0!==formatterParams.crossElement?formatterParams.crossElement:'';return truthy&&value||!0===value||"true"===value||"True"===value||1===value||"1"===value?(element.setAttribute("aria-checked",!0),tick||""):!empty||"null"!==value&&""!==value&&null!=value?(element.setAttribute("aria-checked",!1),cross||""):(element.setAttribute("aria-checked","mixed"),"")},datetime:function datetime(cell,formatterParams,onRendered){var inputFormat=formatterParams.inputFormat||"YYYY-MM-DD hh:mm:ss",outputFormat=formatterParams.outputFormat||"DD/MM/YYYY hh:mm:ss",invalid=void 0!==formatterParams.invalidPlaceholder?formatterParams.invalidPlaceholder:"",value=cell.getValue(),newDatetime=moment(value,inputFormat);return newDatetime.isValid()?formatterParams.timezone?newDatetime.tz(formatterParams.timezone).format(outputFormat):newDatetime.format(outputFormat):!0===invalid?value:"function"==typeof invalid?invalid(value):invalid},datetimediff:function datetime(cell,formatterParams,onRendered){var inputFormat=formatterParams.inputFormat||"YYYY-MM-DD hh:mm:ss",invalid=void 0!==formatterParams.invalidPlaceholder?formatterParams.invalidPlaceholder:"",suffix=void 0!==formatterParams.suffix&&formatterParams.suffix,unit=void 0!==formatterParams.unit?formatterParams.unit:void 0,humanize=void 0!==formatterParams.humanize&&formatterParams.humanize,date=void 0!==formatterParams.date?formatterParams.date:moment(),value=cell.getValue(),newDatetime=moment(value,inputFormat);return newDatetime.isValid()?humanize?moment.duration(newDatetime.diff(date)).humanize(suffix):newDatetime.diff(date,unit)+(suffix?" "+suffix:""):!0===invalid?value:"function"==typeof invalid?invalid(value):invalid},lookup:function lookup(cell,formatterParams,onRendered){var value=cell.getValue();return void 0===formatterParams[value]?(console.warn("Missing display value for "+value),value):formatterParams[value]},star:function star(cell,formatterParams,onRendered){var value=cell.getValue(),element=cell.getElement(),maxStars=formatterParams&&formatterParams.stars?formatterParams.stars:5,stars=document.createElement("span"),star=document.createElementNS("http://www.w3.org/2000/svg","svg"),starActive='',starInactive='';stars.style.verticalAlign="middle",star.setAttribute("width","14"),star.setAttribute("height","14"),star.setAttribute("viewBox","0 0 512 512"),star.setAttribute("xml:space","preserve"),star.style.padding="0 1px",value=value&&!isNaN(value)?parseInt(value):0,value=Math.max(0,Math.min(value,maxStars));for(var i=1;i<=maxStars;i++){var nextStar=star.cloneNode(!0);nextStar.innerHTML=i<=value?starActive:starInactive,stars.appendChild(nextStar)}return element.style.whiteSpace="nowrap",element.style.overflow="hidden",element.style.textOverflow="ellipsis",element.setAttribute("aria-label",value),stars},traffic:function traffic(cell,formatterParams,onRendered){var value=this.sanitizeHTML(cell.getValue())||0,el=document.createElement("span"),max=formatterParams&&formatterParams.max?formatterParams.max:100,min=formatterParams&&formatterParams.min?formatterParams.min:0,colors=formatterParams&&void 0!==formatterParams.color?formatterParams.color:["red","orange","green"],color="#666666",percent,percentValue;if(!isNaN(value)&&void 0!==cell.getValue()){switch(el.classList.add("tabulator-traffic-light"),percentValue=parseFloat(value)<=max?parseFloat(value):max,percentValue=parseFloat(percentValue)>=min?parseFloat(percentValue):min,percent=(max-min)/100,percentValue=Math.round((percentValue-min)/percent),void 0===colors?"undefined":_typeof(colors)){case"string":color=colors;break;case"function":color=colors(value);break;case"object":if(Array.isArray(colors)){var unit=100/colors.length,index=Math.floor(percentValue/unit);index=Math.min(index,colors.length-1),color=colors[index=Math.max(index,0)];break}}return el.style.backgroundColor=color,el}},progress:function progress(cell,formatterParams,onRendered){var value=this.sanitizeHTML(cell.getValue())||0,element=cell.getElement(),max=formatterParams&&formatterParams.max?formatterParams.max:100,min=formatterParams&&formatterParams.min?formatterParams.min:0,legendAlign=formatterParams&&formatterParams.legendAlign?formatterParams.legendAlign:"center",percent,percentValue,color,legend,legendColor,top,left,right,bottom;switch(percentValue=parseFloat(value)<=max?parseFloat(value):max,percentValue=parseFloat(percentValue)>=min?parseFloat(percentValue):min,percent=(max-min)/100,percentValue=Math.round((percentValue-min)/percent),_typeof(formatterParams.color)){case"string":color=formatterParams.color;break;case"function":color=formatterParams.color(value);break;case"object":if(Array.isArray(formatterParams.color)){var unit=100/formatterParams.color.length,index=Math.floor(percentValue/unit);index=Math.min(index,formatterParams.color.length-1),index=Math.max(index,0),color=formatterParams.color[index];break}default:color="#2DC214"}switch(_typeof(formatterParams.legend)){case"string":legend=formatterParams.legend;break;case"function":legend=formatterParams.legend(value);break;case"boolean":legend=value;break;default:legend=!1}switch(_typeof(formatterParams.legendColor)){case"string":legendColor=formatterParams.legendColor;break;case"function":legendColor=formatterParams.legendColor(value);break;case"object":if(Array.isArray(formatterParams.legendColor)){var unit=100/formatterParams.legendColor.length,index=Math.floor(percentValue/unit);index=Math.min(index,formatterParams.legendColor.length-1),index=Math.max(index,0),legendColor=formatterParams.legendColor[index]}break;default:legendColor="#000"}element.style.minWidth="30px",element.style.position="relative",element.setAttribute("aria-label",percentValue);var barEl=document.createElement("div");if(barEl.style.display="inline-block",barEl.style.position="relative",barEl.style.width=percentValue+"%",barEl.style.backgroundColor=color,barEl.style.height="100%",barEl.setAttribute("data-max",max),barEl.setAttribute("data-min",min),legend){var legendEl=document.createElement("div");legendEl.style.position="absolute",legendEl.style.top="4px",legendEl.style.left=0,legendEl.style.textAlign=legendAlign,legendEl.style.width="100%",legendEl.style.color=legendColor,legendEl.innerHTML=legend}return onRendered((function(){if(!(cell instanceof CellComponent)){var holderEl=document.createElement("div");holderEl.style.position="absolute",holderEl.style.top="4px",holderEl.style.bottom="4px",holderEl.style.left="4px",holderEl.style.right="4px",element.appendChild(holderEl),element=holderEl}element.appendChild(barEl),legend&&element.appendChild(legendEl)})),""},color:function color(cell,formatterParams,onRendered){return cell.getElement().style.backgroundColor=this.sanitizeHTML(cell.getValue()),""},buttonTick:function buttonTick(cell,formatterParams,onRendered){return''},buttonCross:function buttonCross(cell,formatterParams,onRendered){return''},rownum:function rownum(cell,formatterParams,onRendered){return this.table.rowManager.activeRows.indexOf(cell.getRow()._getSelf())+1},handle:function handle(cell,formatterParams,onRendered){return cell.getElement().classList.add("tabulator-row-handle"),"
"},responsiveCollapse:function responsiveCollapse(cell,formatterParams,onRendered){var self=this,open=!1,el=document.createElement("div"),config=cell.getRow()._row.modules.responsiveLayout;function toggleList(isOpen){var collapseEl=config.element;config.open=isOpen,collapseEl&&(config.open?(el.classList.add("open"),collapseEl.style.display=""):(el.classList.remove("open"),collapseEl.style.display="none"))}return el.classList.add("tabulator-responsive-collapse-toggle"),el.innerHTML="+-",cell.getElement().classList.add("tabulator-row-handle"),el.addEventListener("click",(function(e){e.stopImmediatePropagation(),toggleList(!config.open)})),toggleList(config.open),el},rowSelection:function rowSelection(cell){var _this54=this,checkbox=document.createElement("input");if(checkbox.type="checkbox",this.table.modExists("selectRow",!0))if(checkbox.addEventListener("click",(function(e){e.stopPropagation()})),"function"==typeof cell.getRow){var row=cell.getRow();checkbox.addEventListener("change",(function(e){row.toggleSelect()})),checkbox.checked=row.isSelected(),this.table.modules.selectRow.registerRowSelectCheckbox(row,checkbox)}else checkbox.addEventListener("change",(function(e){_this54.table.modules.selectRow.selectedRows.length?_this54.table.deselectRow():_this54.table.selectRow()})),this.table.modules.selectRow.registerHeaderSelectCheckbox(checkbox);return checkbox}},Tabulator.prototype.registerModule("format",Format);var FrozenColumns=function FrozenColumns(table){this.table=table,this.leftColumns=[],this.rightColumns=[],this.leftMargin=0,this.rightMargin=0,this.rightPadding=0,this.initializationMode="left",this.active=!1,this.scrollEndTimer=!1};FrozenColumns.prototype.reset=function(){this.initializationMode="left",this.leftColumns=[],this.rightColumns=[],this.leftMargin=0,this.rightMargin=0,this.rightMargin=0,this.active=!1,this.table.columnManager.headersElement.style.marginLeft=0,this.table.columnManager.element.style.paddingRight=0},FrozenColumns.prototype.initializeColumn=function(column){var config={margin:0,edge:!1};column.isGroup||(this.frozenCheck(column)?(config.position=this.initializationMode,"left"==this.initializationMode?this.leftColumns.push(column):this.rightColumns.unshift(column),this.active=!0,column.modules.frozen=config):this.initializationMode="right")},FrozenColumns.prototype.frozenCheck=function(column){var frozen=!1;return column.parent.isGroup&&column.definition.frozen&&console.warn("Frozen Column Error - Parent column group must be frozen, not individual columns or sub column groups"),column.parent.isGroup?this.frozenCheck(column.parent):column.definition.frozen},FrozenColumns.prototype.scrollHorizontal=function(){var _this55=this,rows;this.active&&(clearTimeout(this.scrollEndTimer),this.scrollEndTimer=setTimeout((function(){_this55.layout()}),100),rows=this.table.rowManager.getVisibleRows(),this.calcMargins(),this.layoutColumnPosition(),this.layoutCalcRows(),rows.forEach((function(row){"row"===row.type&&_this55.layoutRow(row)})),this.table.rowManager.tableElement.style.marginRight=this.rightMargin)},FrozenColumns.prototype.calcMargins=function(){this.leftMargin=this._calcSpace(this.leftColumns,this.leftColumns.length)+"px",this.table.columnManager.headersElement.style.marginLeft=this.leftMargin,this.rightMargin=this._calcSpace(this.rightColumns,this.rightColumns.length)+"px",this.table.columnManager.element.style.paddingRight=this.rightMargin,this.rightPadding=this.table.rowManager.element.clientWidth+this.table.columnManager.scrollLeft},FrozenColumns.prototype.layoutCalcRows=function(){this.table.modExists("columnCalcs")&&(this.table.modules.columnCalcs.topInitialized&&this.table.modules.columnCalcs.topRow&&this.layoutRow(this.table.modules.columnCalcs.topRow),this.table.modules.columnCalcs.botInitialized&&this.table.modules.columnCalcs.botRow&&this.layoutRow(this.table.modules.columnCalcs.botRow))},FrozenColumns.prototype.layoutColumnPosition=function(allCells){var _this56=this,leftParents=[];this.leftColumns.forEach((function(column,i){if(column.modules.frozen.margin=_this56._calcSpace(_this56.leftColumns,i)+_this56.table.columnManager.scrollLeft+"px",i==_this56.leftColumns.length-1?column.modules.frozen.edge=!0:column.modules.frozen.edge=!1,column.parent.isGroup){var parentEl=_this56.getColGroupParentElement(column);leftParents.includes(parentEl)||(_this56.layoutElement(parentEl,column),leftParents.push(parentEl)),column.modules.frozen.edge&&parentEl.classList.add("tabulator-frozen-"+column.modules.frozen.position)}else _this56.layoutElement(column.getElement(),column);allCells&&column.cells.forEach((function(cell){_this56.layoutElement(cell.getElement(),column)}))})),this.rightColumns.forEach((function(column,i){column.modules.frozen.margin=_this56.rightPadding-_this56._calcSpace(_this56.rightColumns,i+1)+"px",i==_this56.rightColumns.length-1?column.modules.frozen.edge=!0:column.modules.frozen.edge=!1,column.parent.isGroup?_this56.layoutElement(_this56.getColGroupParentElement(column),column):_this56.layoutElement(column.getElement(),column),allCells&&column.cells.forEach((function(cell){_this56.layoutElement(cell.getElement(),column)}))}))},FrozenColumns.prototype.getColGroupParentElement=function(column){return column.parent.isGroup?this.getColGroupParentElement(column.parent):column.getElement()},FrozenColumns.prototype.layout=function(){var self=this,rightMargin=0;self.active&&(this.calcMargins(),self.table.rowManager.getDisplayRows().forEach((function(row){"row"===row.type&&self.layoutRow(row)})),this.layoutCalcRows(),this.layoutColumnPosition(!0),this.table.rowManager.tableElement.style.marginRight=this.rightMargin)},FrozenColumns.prototype.layoutRow=function(row){var _this57=this,rowEl;row.getElement().style.paddingLeft=this.leftMargin,this.leftColumns.forEach((function(column){var cell=row.getCell(column);cell&&_this57.layoutElement(cell.getElement(),column)})),this.rightColumns.forEach((function(column){var cell=row.getCell(column);cell&&_this57.layoutElement(cell.getElement(),column)}))},FrozenColumns.prototype.layoutElement=function(element,column){column.modules.frozen&&(element.style.position="absolute",element.style.left=column.modules.frozen.margin,element.classList.add("tabulator-frozen"),column.modules.frozen.edge&&element.classList.add("tabulator-frozen-"+column.modules.frozen.position))},FrozenColumns.prototype._calcSpace=function(columns,index){for(var width=0,_i8=0;_i8-1&&output.splice(index,1)})),output},FrozenRows.prototype.freezeRow=function(row){row.modules.frozen?console.warn("Freeze Error - Row is already frozen"):(row.modules.frozen=!0,this.topElement.appendChild(row.getElement()),row.initialize(),row.normalizeHeight(),this.table.rowManager.adjustTableSize(),this.rows.push(row),this.table.rowManager.refreshActiveData("display"),this.styleRows())},FrozenRows.prototype.unfreezeRow=function(row){var index=this.rows.indexOf(row);if(row.modules.frozen){row.modules.frozen=!1;var rowEl=row.getElement();rowEl.parentNode.removeChild(rowEl),this.table.rowManager.adjustTableSize(),this.rows.splice(index,1),this.table.rowManager.refreshActiveData("display"),this.rows.length&&this.styleRows()}else console.warn("Freeze Error - Row is already unfrozen")},FrozenRows.prototype.styleRows=function(row){var self=this;this.rows.forEach((function(row,i){self.table.rowManager.styleRow(row,i)}))},Tabulator.prototype.registerModule("frozenRows",FrozenRows);var GroupComponent=function GroupComponent(group){this._group=group,this.type="GroupComponent"};GroupComponent.prototype.getKey=function(){return this._group.key},GroupComponent.prototype.getField=function(){return this._group.field},GroupComponent.prototype.getElement=function(){return this._group.element},GroupComponent.prototype.getRows=function(){return this._group.getRows(!0)},GroupComponent.prototype.getSubGroups=function(){return this._group.getSubGroups(!0)},GroupComponent.prototype.getParentGroup=function(){return!!this._group.parent&&this._group.parent.getComponent()},GroupComponent.prototype.getVisibility=function(){return console.warn("getVisibility function is deprecated, you should now use the isVisible function"),this._group.visible},GroupComponent.prototype.isVisible=function(){return this._group.visible},GroupComponent.prototype.show=function(){this._group.show()},GroupComponent.prototype.hide=function(){this._group.hide()},GroupComponent.prototype.toggle=function(){this._group.toggleVisibility()},GroupComponent.prototype._getSelf=function(){return this._group},GroupComponent.prototype.getTable=function(){return this._group.groupManager.table};var Group=function Group(groupManager,parent,level,key,field,generator,oldGroup){this.groupManager=groupManager,this.parent=parent,this.key=key,this.level=level,this.field=field,this.hasSubGroups=level-1?after?this.rows.splice(toIndex+1,0,row):this.rows.splice(toIndex,0,row):after?this.rows.push(row):this.rows.unshift(row),row.modules.group=this,this.generateGroupHeaderContents(),this.groupManager.table.modExists("columnCalcs")&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modules.columnCalcs.recalcGroup(this),this.groupManager.updateGroupRows(!0)},Group.prototype.scrollHeader=function(left){this.arrowElement.style.marginLeft=left,this.groupList.forEach((function(child){child.scrollHeader(left)}))},Group.prototype.getRowIndex=function(row){},Group.prototype.conformRowData=function(data){return this.field?data[this.field]=this.key:console.warn("Data Conforming Error - Cannot conform row data to match new group as groupBy is a function"),this.parent&&(data=this.parent.conformRowData(data)),data},Group.prototype.removeRow=function(row){var index=this.rows.indexOf(row),el=row.getElement();index>-1&&this.rows.splice(index,1),this.groupManager.table.options.groupValues||this.rows.length?(el.parentNode&&el.parentNode.removeChild(el),this.generateGroupHeaderContents(),this.groupManager.table.modExists("columnCalcs")&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modules.columnCalcs.recalcGroup(this)):(this.parent?this.parent.removeGroup(this):this.groupManager.removeGroup(this),this.groupManager.updateGroupRows(!0))},Group.prototype.removeGroup=function(group){var groupKey=group.level+"_"+group.key,index;this.groups[groupKey]&&(delete this.groups[groupKey],(index=this.groupList.indexOf(group))>-1&&this.groupList.splice(index,1),this.groupList.length||(this.parent?this.parent.removeGroup(this):this.groupManager.removeGroup(this)))},Group.prototype.getHeadersAndRows=function(noCalc){var output=[];return output.push(this),this._visSet(),this.visible?this.groupList.length?this.groupList.forEach((function(group){output=output.concat(group.getHeadersAndRows(noCalc))})):(!noCalc&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modExists("columnCalcs")&&this.groupManager.table.modules.columnCalcs.hasTopCalcs()&&(this.calcs.top&&(this.calcs.top.detachElement(),this.calcs.top.deleteCells()),this.calcs.top=this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows),output.push(this.calcs.top)),output=output.concat(this.rows),!noCalc&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modExists("columnCalcs")&&this.groupManager.table.modules.columnCalcs.hasBottomCalcs()&&(this.calcs.bottom&&(this.calcs.bottom.detachElement(),this.calcs.bottom.deleteCells()),this.calcs.bottom=this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows),output.push(this.calcs.bottom))):this.groupList.length||"table"==this.groupManager.table.options.columnCalcs||this.groupManager.table.modExists("columnCalcs")&&(!noCalc&&this.groupManager.table.modules.columnCalcs.hasTopCalcs()&&(this.calcs.top&&(this.calcs.top.detachElement(),this.calcs.top.deleteCells()),this.groupManager.table.options.groupClosedShowCalcs&&(this.calcs.top=this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows),output.push(this.calcs.top))),!noCalc&&this.groupManager.table.modules.columnCalcs.hasBottomCalcs()&&(this.calcs.bottom&&(this.calcs.bottom.detachElement(),this.calcs.bottom.deleteCells()),this.groupManager.table.options.groupClosedShowCalcs&&(this.calcs.bottom=this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows),output.push(this.calcs.bottom)))),output},Group.prototype.getData=function(visible,transform){var self=this,output=[];return this._visSet(),(!visible||visible&&this.visible)&&this.rows.forEach((function(row){output.push(row.getData(transform||"data"))})),output},Group.prototype.getRowCount=function(){var count=0;return this.groupList.length?this.groupList.forEach((function(group){count+=group.getRowCount()})):count=this.rows.length,count},Group.prototype.toggleVisibility=function(){this.visible?this.hide():this.show()},Group.prototype.hide=function(){this.visible=!1,"classic"!=this.groupManager.table.rowManager.getRenderMode()||this.groupManager.table.options.pagination?this.groupManager.updateGroupRows(!0):(this.element.classList.remove("tabulator-group-visible"),this.groupList.length?this.groupList.forEach((function(group){var rows;group.getHeadersAndRows().forEach((function(row){row.detachElement()}))})):this.rows.forEach((function(row){var rowEl=row.getElement();rowEl.parentNode.removeChild(rowEl)})),this.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(),this.groupManager.getDisplayIndex()),this.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth()),this.groupManager.table.options.groupVisibilityChanged.call(this.table,this.getComponent(),!1)},Group.prototype.show=function(){var self=this;if(this.visible=!0,"classic"!=this.groupManager.table.rowManager.getRenderMode()||this.groupManager.table.options.pagination)this.groupManager.updateGroupRows(!0);else{this.element.classList.add("tabulator-group-visible");var prev=this.getElement();this.groupList.length?this.groupList.forEach((function(group){var rows;group.getHeadersAndRows().forEach((function(row){var rowEl=row.getElement();prev.parentNode.insertBefore(rowEl,prev.nextSibling),row.initialize(),prev=rowEl}))})):this.rows.forEach((function(row){var rowEl=row.getElement();prev.parentNode.insertBefore(rowEl,prev.nextSibling),row.initialize(),prev=rowEl})),this.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(),this.groupManager.getDisplayIndex()),this.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth()}this.groupManager.table.options.groupVisibilityChanged.call(this.table,this.getComponent(),!0)},Group.prototype._visSet=function(){var data=[];"function"==typeof this.visible&&(this.rows.forEach((function(row){data.push(row.getData())})),this.visible=this.visible(this.key,this.getRowCount(),data,this.getComponent()))},Group.prototype.getRowGroup=function(row){var match=!1;return this.groupList.length?this.groupList.forEach((function(group){var result=group.getRowGroup(row);result&&(match=result)})):this.rows.find((function(item){return item===row}))&&(match=this),match},Group.prototype.getSubGroups=function(component){var output=[];return this.groupList.forEach((function(child){output.push(component?child.getComponent():child)})),output},Group.prototype.getRows=function(compoment){var output=[];return this.rows.forEach((function(row){output.push(compoment?row.getComponent():row)})),output},Group.prototype.generateGroupHeaderContents=function(){var data=[];for(this.rows.forEach((function(row){data.push(row.getData())})),this.elementContents=this.generator(this.key,this.getRowCount(),data,this.getComponent());this.element.firstChild;)this.element.removeChild(this.element.firstChild);"string"==typeof this.elementContents?this.element.innerHTML=this.elementContents:this.element.appendChild(this.elementContents),this.element.insertBefore(this.arrowElement,this.element.firstChild)},Group.prototype.getElement=function(){this.addBindingsd=!1,this._visSet(),this.visible?this.element.classList.add("tabulator-group-visible"):this.element.classList.remove("tabulator-group-visible");for(var i=0;igroupHeader.length&&console.warn("Error creating group headers, groupHeader array is shorter than groupBy array"),self.headerGenerator=[function(){return""}],this.startOpen=[function(){return!1}],self.table.modules.localize.bind("groups|item",(function(langValue,lang){self.headerGenerator[0]=function(value,count,data){return(void 0===value?"":value)+"("+count+" "+(1===count?langValue:lang.groups.items)+")"}})),this.groupIDLookups=[],Array.isArray(groupBy)||groupBy)?this.table.modExists("columnCalcs")&&"table"!=this.table.options.columnCalcs&&"both"!=this.table.options.columnCalcs&&this.table.modules.columnCalcs.removeCalcs():this.table.modExists("columnCalcs")&&"group"!=this.table.options.columnCalcs&&this.table.columnManager.getRealColumns().forEach((function(col){col.definition.topCalc&&self.table.modules.columnCalcs.initializeTopRow(),col.definition.bottomCalc&&self.table.modules.columnCalcs.initializeBottomRow()}));Array.isArray(groupBy)||(groupBy=[groupBy]),groupBy.forEach((function(group,i){var lookupFunc,column;lookupFunc="function"==typeof group?group:(column=self.table.columnManager.getColumnByField(group))?function lookupFunc(data){return column.getFieldValue(data)}:function lookupFunc(data){return data[group]},self.groupIDLookups.push({field:"function"!=typeof group&&group,func:lookupFunc,values:!!self.allowedValues&&self.allowedValues[i]})})),startOpen&&(Array.isArray(startOpen)||(startOpen=[startOpen]),startOpen.forEach((function(level){level="function"==typeof level?level:function(){return!0}})),self.startOpen=startOpen),groupHeader&&(self.headerGenerator=Array.isArray(groupHeader)?groupHeader:[groupHeader]),this.initialized=!0},GroupRows.prototype.setDisplayIndex=function(index){this.displayIndex=index},GroupRows.prototype.getDisplayIndex=function(){return this.displayIndex},GroupRows.prototype.getRows=function(rows){return this.groupIDLookups.length?(this.table.options.dataGrouping.call(this.table),this.generateGroups(rows),this.table.options.dataGrouped&&this.table.options.dataGrouped.call(this.table,this.getGroups(!0)),this.updateGroupRows()):rows.slice(0)},GroupRows.prototype.getGroups=function(compoment){var groupComponents=[];return this.groupList.forEach((function(group){groupComponents.push(compoment?group.getComponent():group)})),groupComponents},GroupRows.prototype.getChildGroups=function(group){var _this59=this,groupComponents=[];return group||(group=this),group.groupList.forEach((function(child){child.groupList.length?groupComponents=groupComponents.concat(_this59.getChildGroups(child)):groupComponents.push(child)})),groupComponents},GroupRows.prototype.wipe=function(){this.groupList.forEach((function(group){group.wipe()}))},GroupRows.prototype.pullGroupListData=function(groupList){var self=this,groupListData=[];return groupList.forEach((function(group){var groupHeader={level:0,rowCount:0,headerContent:""},childData=[];group.hasSubGroups?(childData=self.pullGroupListData(group.groupList),groupHeader.level=group.level,groupHeader.rowCount=childData.length-group.groupList.length,groupHeader.headerContent=group.generator(group.key,groupHeader.rowCount,group.rows,group),groupListData.push(groupHeader),groupListData=groupListData.concat(childData)):(groupHeader.level=group.level,groupHeader.headerContent=group.generator(group.key,group.rows.length,group.rows,group),groupHeader.rowCount=group.getRows().length,groupListData.push(groupHeader),group.getRows().forEach((function(row){groupListData.push(row.getData("data"))})))})),groupListData},GroupRows.prototype.getGroupedData=function(){return this.pullGroupListData(this.groupList)},GroupRows.prototype.getRowGroup=function(row){var match=!1;return this.groupList.forEach((function(group){var result=group.getRowGroup(row);result&&(match=result)})),match},GroupRows.prototype.countGroups=function(){return this.groupList.length},GroupRows.prototype.generateGroups=function(rows){var self=this,oldGroups=self.groups;self.groups={},self.groupList=[],this.allowedValues&&this.allowedValues[0]?(this.allowedValues[0].forEach((function(value){self.createGroup(value,0,oldGroups)})),rows.forEach((function(row){self.assignRowToExistingGroup(row,oldGroups)}))):rows.forEach((function(row){self.assignRowToGroup(row,oldGroups)}))},GroupRows.prototype.createGroup=function(groupID,level,oldGroups){var groupKey=level+"_"+groupID,group;oldGroups=oldGroups||[],group=new Group(this,!1,level,groupID,this.groupIDLookups[0].field,this.headerGenerator[0],oldGroups[groupKey]),this.groups[groupKey]=group,this.groupList.push(group)},GroupRows.prototype.assignRowToExistingGroup=function(row,oldGroups){var groupID,groupKey="0_"+this.groupIDLookups[0].func(row.getData());this.groups[groupKey]&&this.groups[groupKey].addRow(row)},GroupRows.prototype.assignRowToGroup=function(row,oldGroups){var groupID=this.groupIDLookups[0].func(row.getData()),newGroupNeeded=!this.groups["0_"+groupID];return newGroupNeeded&&this.createGroup(groupID,0,oldGroups),this.groups["0_"+groupID].addRow(row),!newGroupNeeded},GroupRows.prototype.updateGroupRows=function(force){var self=this,output=[],oldRowCount;if(this.groupList.forEach((function(group){output=output.concat(group.getHeadersAndRows())})),force){var displayIndex=this.table.rowManager.setDisplayRows(output,this.getDisplayIndex());!0!==displayIndex&&this.setDisplayIndex(displayIndex),this.table.rowManager.refreshActiveData("group",!0,!0)}return output},GroupRows.prototype.scrollHeaders=function(left){left+="px",this.groupList.forEach((function(group){group.scrollHeader(left)}))},GroupRows.prototype.removeGroup=function(group){var groupKey=group.level+"_"+group.key,index;this.groups[groupKey]&&(delete this.groups[groupKey],(index=this.groupList.indexOf(group))>-1&&this.groupList.splice(index,1))},Tabulator.prototype.registerModule("groupRows",GroupRows);var History=function History(table){this.table=table,this.history=[],this.index=-1};History.prototype.clear=function(){this.history=[],this.index=-1},History.prototype.action=function(type,component,data){this.history=this.history.slice(0,this.index+1),this.history.push({type:type,component:component,data:data}),this.index++},History.prototype.getHistoryUndoSize=function(){return this.index+1},History.prototype.getHistoryRedoSize=function(){return this.history.length-(this.index+1)},History.prototype.undo=function(){if(this.index>-1){var action=this.history[this.index];return this.undoers[action.type].call(this,action),this.index--,this.table.options.historyUndo.call(this.table,action.type,action.component.getComponent(),action.data),!0}return console.warn("History Undo Error - No more history to undo"),!1},History.prototype.redo=function(){if(this.history.length-1>this.index){this.index++;var action=this.history[this.index];return this.redoers[action.type].call(this,action),this.table.options.historyRedo.call(this.table,action.type,action.component.getComponent(),action.data),!0}return console.warn("History Redo Error - No more history to redo"),!1},History.prototype.undoers={cellEdit:function cellEdit(action){action.component.setValueProcessData(action.data.oldValue)},rowAdd:function rowAdd(action){action.component.deleteActual()},rowDelete:function rowDelete(action){var newRow=this.table.rowManager.addRowActual(action.data.data,action.data.pos,action.data.index);this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.updateGroupRows(!0),this._rebindRow(action.component,newRow)},rowMove:function rowMove(action){this.table.rowManager.moveRowActual(action.component,this.table.rowManager.rows[action.data.posFrom],!action.data.after),this.table.rowManager.redraw()}},History.prototype.redoers={cellEdit:function cellEdit(action){action.component.setValueProcessData(action.data.newValue)},rowAdd:function rowAdd(action){var newRow=this.table.rowManager.addRowActual(action.data.data,action.data.pos,action.data.index);this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.updateGroupRows(!0),this._rebindRow(action.component,newRow)},rowDelete:function rowDelete(action){action.component.deleteActual()},rowMove:function rowMove(action){this.table.rowManager.moveRowActual(action.component,this.table.rowManager.rows[action.data.posTo],action.data.after),this.table.rowManager.redraw()}},History.prototype._rebindRow=function(oldRow,newRow){this.history.forEach((function(action){if(action.component instanceof Row)action.component===oldRow&&(action.component=newRow);else if(action.component instanceof Cell&&action.component.row===oldRow){var field=action.component.column.getField();field&&(action.component=newRow.getCell(field))}}))},Tabulator.prototype.registerModule("history",History);var HtmlTableImport=function HtmlTableImport(table){this.table=table,this.fieldIndex=[],this.hasIndex=!1};HtmlTableImport.prototype.parseTable=function(){var self=this,element=this.table.element,options=this.table.options,columns=options.columns,headers=element.getElementsByTagName("th"),rows=element.getElementsByTagName("tbody")[0],data=[],newTable;this.hasIndex=!1,this.table.options.htmlImporting.call(this.table),rows=rows?rows.getElementsByTagName("tr"):[],this._extractOptions(element,options),headers.length?this._extractHeaders(headers,rows):this._generateBlankHeaders(headers,rows);for(var index=0;index-1&&self.pressedKeys.splice(index,1)}},this.table.element.addEventListener("keydown",this.keyupBinding),this.table.element.addEventListener("keyup",this.keydownBinding)},Keybindings.prototype.clearBindings=function(){this.keyupBinding&&this.table.element.removeEventListener("keydown",this.keyupBinding),this.keydownBinding&&this.table.element.removeEventListener("keyup",this.keydownBinding)},Keybindings.prototype.checkBinding=function(e,binding){var self=this,match=!0;return e.ctrlKey==binding.ctrl&&e.shiftKey==binding.shift&&e.metaKey==binding.meta&&(binding.keys.forEach((function(key){var index;-1==self.pressedKeys.indexOf(key)&&(match=!1)})),match&&binding.action.call(self,e),!0)},Keybindings.prototype.bindings={navPrev:"shift + 9",navNext:9,navUp:38,navDown:40,scrollPageUp:33,scrollPageDown:34,scrollToStart:36,scrollToEnd:35,undo:"ctrl + 90",redo:"ctrl + 89",copyToClipboard:"ctrl + 67"},Keybindings.prototype.actions={keyBlock:function keyBlock(e){e.stopPropagation(),e.preventDefault()},scrollPageUp:function scrollPageUp(e){var rowManager=this.table.rowManager,newPos=rowManager.scrollTop-rowManager.height,scrollMax=rowManager.element.scrollHeight;e.preventDefault(),rowManager.displayRowsCount&&(newPos>=0?rowManager.element.scrollTop=newPos:rowManager.scrollToRow(rowManager.getDisplayRows()[0])),this.table.element.focus()},scrollPageDown:function scrollPageDown(e){var rowManager=this.table.rowManager,newPos=rowManager.scrollTop+rowManager.height,scrollMax=rowManager.element.scrollHeight;e.preventDefault(),rowManager.displayRowsCount&&(newPos<=scrollMax?rowManager.element.scrollTop=newPos:rowManager.scrollToRow(rowManager.getDisplayRows()[rowManager.displayRowsCount-1])),this.table.element.focus()},scrollToStart:function scrollToStart(e){var rowManager=this.table.rowManager;e.preventDefault(),rowManager.displayRowsCount&&rowManager.scrollToRow(rowManager.getDisplayRows()[0]),this.table.element.focus()},scrollToEnd:function scrollToEnd(e){var rowManager=this.table.rowManager;e.preventDefault(),rowManager.displayRowsCount&&rowManager.scrollToRow(rowManager.getDisplayRows()[rowManager.displayRowsCount-1]),this.table.element.focus()},navPrev:function navPrev(e){var cell=!1;this.table.modExists("edit")&&(cell=this.table.modules.edit.currentCell)&&(e.preventDefault(),cell.nav().prev())},navNext:function navNext(e){var cell=!1,newRow=this.table.options.tabEndNewRow,nav;this.table.modExists("edit")&&(cell=this.table.modules.edit.currentCell)&&(e.preventDefault(),(nav=cell.nav()).next()||newRow&&(cell.getElement().firstChild.blur(),(newRow=!0===newRow?this.table.addRow({}):"function"==typeof newRow?this.table.addRow(newRow(cell.row.getComponent())):this.table.addRow(Object.assign({},newRow))).then((function(){setTimeout((function(){nav.next()}))}))))},navLeft:function navLeft(e){var cell=!1;this.table.modExists("edit")&&(cell=this.table.modules.edit.currentCell)&&(e.preventDefault(),cell.nav().left())},navRight:function navRight(e){var cell=!1;this.table.modExists("edit")&&(cell=this.table.modules.edit.currentCell)&&(e.preventDefault(),cell.nav().right())},navUp:function navUp(e){var cell=!1;this.table.modExists("edit")&&(cell=this.table.modules.edit.currentCell)&&(e.preventDefault(),cell.nav().up())},navDown:function navDown(e){var cell=!1;this.table.modExists("edit")&&(cell=this.table.modules.edit.currentCell)&&(e.preventDefault(),cell.nav().down())},undo:function undo(e){var cell=!1;this.table.options.history&&this.table.modExists("history")&&this.table.modExists("edit")&&((cell=this.table.modules.edit.currentCell)||(e.preventDefault(),this.table.modules.history.undo()))},redo:function redo(e){var cell=!1;this.table.options.history&&this.table.modExists("history")&&this.table.modExists("edit")&&((cell=this.table.modules.edit.currentCell)||(e.preventDefault(),this.table.modules.history.redo()))},copyToClipboard:function copyToClipboard(e){this.table.modules.edit.currentCell||this.table.modExists("clipboard",!0)&&this.table.modules.clipboard.copy(!1,!0)}},Tabulator.prototype.registerModule("keybindings",Keybindings);var Menu=function Menu(table){this.table=table,this.menuEl=!1,this.blurEvent=this.hideMenu.bind(this),this.escEvent=this.escMenu.bind(this),this.nestedMenuBlock=!1};Menu.prototype.initializeColumnHeader=function(column){var _this61=this,headerMenuEl;column.definition.headerContextMenu&&column.getElement().addEventListener("contextmenu",(function(e){var menu="function"==typeof column.definition.headerContextMenu?column.definition.headerContextMenu(column.getComponent()):column.definition.headerContextMenu;e.preventDefault(),_this61.loadMenu(e,column,menu)})),column.definition.headerMenu&&((headerMenuEl=document.createElement("span")).classList.add("tabulator-header-menu-button"),headerMenuEl.innerHTML="⋮",headerMenuEl.addEventListener("click",(function(e){var menu="function"==typeof column.definition.headerMenu?column.definition.headerMenu(column.getComponent()):column.definition.headerMenu;e.stopPropagation(),e.preventDefault(),_this61.loadMenu(e,column,menu)})),column.titleElement.insertBefore(headerMenuEl,column.titleElement.firstChild))},Menu.prototype.initializeCell=function(cell){var _this62=this;cell.getElement().addEventListener("contextmenu",(function(e){var menu="function"==typeof cell.column.definition.contextMenu?cell.column.definition.contextMenu(cell.getComponent()):cell.column.definition.contextMenu;e.stopImmediatePropagation(),_this62.loadMenu(e,cell,menu)}))},Menu.prototype.initializeRow=function(row){var _this63=this;row.getElement().addEventListener("contextmenu",(function(e){var menu="function"==typeof _this63.table.options.rowContextMenu?_this63.table.options.rowContextMenu(row.getComponent()):_this63.table.options.rowContextMenu;_this63.loadMenu(e,row,menu)}))},Menu.prototype.initializeGroup=function(group){var _this64=this;group.getElement().addEventListener("contextmenu",(function(e){var menu="function"==typeof _this64.table.options.groupContextMenu?_this64.table.options.groupContextMenu(group.getComponent()):_this64.table.options.groupContextMenu;_this64.loadMenu(e,group,menu)}))},Menu.prototype.loadMenu=function(e,component,menu){var _this65=this,docHeight=Math.max(document.body.offsetHeight,window.innerHeight);if(e.preventDefault(),menu&&menu.length){if(this.nestedMenuBlock){if(this.isOpen())return}else this.nestedMenuBlock=setTimeout((function(){_this65.nestedMenuBlock=!1}),100);this.hideMenu(),this.menuEl=document.createElement("div"),this.menuEl.classList.add("tabulator-menu"),menu.forEach((function(item){var itemEl=document.createElement("div"),label=item.label,disabled=item.disabled;item.separator?itemEl.classList.add("tabulator-menu-separator"):(itemEl.classList.add("tabulator-menu-item"),"function"==typeof label&&(label=label(component.getComponent())),label instanceof Node?itemEl.appendChild(label):itemEl.innerHTML=label,"function"==typeof disabled&&(disabled=disabled(component.getComponent())),disabled?(itemEl.classList.add("tabulator-menu-item-disabled"),itemEl.addEventListener("click",(function(e){e.stopPropagation()}))):itemEl.addEventListener("click",(function(e){_this65.hideMenu(),item.action(e,component.getComponent())}))),_this65.menuEl.appendChild(itemEl)})),this.menuEl.style.top=e.pageY+"px",this.menuEl.style.left=e.pageX+"px",document.body.addEventListener("click",this.blurEvent),this.table.rowManager.element.addEventListener("scroll",this.blurEvent),setTimeout((function(){document.body.addEventListener("contextmenu",_this65.blurEvent)}),100),document.body.addEventListener("keydown",this.escEvent),document.body.appendChild(this.menuEl),e.pageX+this.menuEl.offsetWidth>=document.body.offsetWidth&&(this.menuEl.style.left="",this.menuEl.style.right=document.body.offsetWidth-e.pageX+"px"),e.pageY+this.menuEl.offsetHeight>=docHeight&&(this.menuEl.style.top="",this.menuEl.style.bottom=docHeight-e.pageY+"px")}},Menu.prototype.isOpen=function(){return!!this.menuEl.parentNode},Menu.prototype.escMenu=function(e){27==e.keyCode&&this.hideMenu()},Menu.prototype.hideMenu=function(){this.menuEl.parentNode&&this.menuEl.parentNode.removeChild(this.menuEl),this.escEvent&&document.body.removeEventListener("keydown",this.escEvent),this.blurEvent&&(document.body.removeEventListener("click",this.blurEvent),document.body.removeEventListener("contextmenu",this.blurEvent),this.table.rowManager.element.removeEventListener("scroll",this.blurEvent))},Menu.prototype.menus={},Tabulator.prototype.registerModule("menu",Menu);var MoveColumns=function MoveColumns(table){this.table=table,this.placeholderElement=this.createPlaceholderElement(),this.hoverElement=!1,this.checkTimeout=!1,this.checkPeriod=250,this.moving=!1,this.toCol=!1,this.toColAfter=!1,this.startX=0,this.autoScrollMargin=40,this.autoScrollStep=5,this.autoScrollTimeout=!1,this.touchMove=!1,this.moveHover=this.moveHover.bind(this),this.endMove=this.endMove.bind(this)};MoveColumns.prototype.createPlaceholderElement=function(){var el=document.createElement("div");return el.classList.add("tabulator-col"),el.classList.add("tabulator-col-placeholder"),el},MoveColumns.prototype.initializeColumn=function(column){var self=this,config={},colEl;column.modules.frozen||(colEl=column.getElement(),config.mousemove=function(e){column.parent===self.moving.parent&&((self.touchMove?e.touches[0].pageX:e.pageX)-Tabulator.prototype.helpers.elOffset(colEl).left+self.table.columnManager.element.scrollLeft>column.getWidth()/2?self.toCol===column&&self.toColAfter||(colEl.parentNode.insertBefore(self.placeholderElement,colEl.nextSibling),self.moveColumn(column,!0)):(self.toCol!==column||self.toColAfter)&&(colEl.parentNode.insertBefore(self.placeholderElement,colEl),self.moveColumn(column,!1)))}.bind(self),colEl.addEventListener("mousedown",(function(e){self.touchMove=!1,1===e.which&&(self.checkTimeout=setTimeout((function(){self.startMove(e,column)}),self.checkPeriod))})),colEl.addEventListener("mouseup",(function(e){1===e.which&&self.checkTimeout&&clearTimeout(self.checkTimeout)})),self.bindTouchEvents(column)),column.modules.moveColumn=config},MoveColumns.prototype.bindTouchEvents=function(column){var self=this,colEl=column.getElement(),startXMove=!1,dir=!1,currentCol,nextCol,prevCol,nextColWidth,prevColWidth,nextColWidthLast,prevColWidthLast;colEl.addEventListener("touchstart",(function(e){self.checkTimeout=setTimeout((function(){self.touchMove=!0,currentCol=column,nextCol=column.nextColumn(),nextColWidth=nextCol?nextCol.getWidth()/2:0,prevCol=column.prevColumn(),prevColWidth=prevCol?prevCol.getWidth()/2:0,nextColWidthLast=0,prevColWidthLast=0,startXMove=!1,self.startMove(e,column)}),self.checkPeriod)}),{passive:!0}),colEl.addEventListener("touchmove",(function(e){var halfCol,diff,moveToCol;self.moving&&(self.moveHover(e),startXMove||(startXMove=e.touches[0].pageX),(diff=e.touches[0].pageX-startXMove)>0?nextCol&&diff-nextColWidthLast>nextColWidth&&(moveToCol=nextCol)!==column&&(startXMove=e.touches[0].pageX,moveToCol.getElement().parentNode.insertBefore(self.placeholderElement,moveToCol.getElement().nextSibling),self.moveColumn(moveToCol,!0)):prevCol&&-diff-prevColWidthLast>prevColWidth&&(moveToCol=prevCol)!==column&&(startXMove=e.touches[0].pageX,moveToCol.getElement().parentNode.insertBefore(self.placeholderElement,moveToCol.getElement()),self.moveColumn(moveToCol,!1)),moveToCol&&(currentCol=moveToCol,nextCol=moveToCol.nextColumn(),nextColWidthLast=nextColWidth,nextColWidth=nextCol?nextCol.getWidth()/2:0,prevCol=moveToCol.prevColumn(),prevColWidthLast=prevColWidth,prevColWidth=prevCol?prevCol.getWidth()/2:0))}),{passive:!0}),colEl.addEventListener("touchend",(function(e){self.checkTimeout&&clearTimeout(self.checkTimeout),self.moving&&self.endMove(e)}))},MoveColumns.prototype.startMove=function(e,column){var element=column.getElement();this.moving=column,this.startX=(this.touchMove?e.touches[0].pageX:e.pageX)-Tabulator.prototype.helpers.elOffset(element).left,this.table.element.classList.add("tabulator-block-select"),this.placeholderElement.style.width=column.getWidth()+"px",this.placeholderElement.style.height=column.getHeight()+"px",element.parentNode.insertBefore(this.placeholderElement,element),element.parentNode.removeChild(element),this.hoverElement=element.cloneNode(!0),this.hoverElement.classList.add("tabulator-moving"),this.table.columnManager.getElement().appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.bottom="0",this.touchMove||(this._bindMouseMove(),document.body.addEventListener("mousemove",this.moveHover),document.body.addEventListener("mouseup",this.endMove)),this.moveHover(e)},MoveColumns.prototype._bindMouseMove=function(){this.table.columnManager.columnsByIndex.forEach((function(column){column.modules.moveColumn.mousemove&&column.getElement().addEventListener("mousemove",column.modules.moveColumn.mousemove)}))},MoveColumns.prototype._unbindMouseMove=function(){this.table.columnManager.columnsByIndex.forEach((function(column){column.modules.moveColumn.mousemove&&column.getElement().removeEventListener("mousemove",column.modules.moveColumn.mousemove)}))},MoveColumns.prototype.moveColumn=function(column,after){var movingCells=this.moving.getCells();this.toCol=column,this.toColAfter=after,after?column.getCells().forEach((function(cell,i){var cellEl=cell.getElement();cellEl.parentNode.insertBefore(movingCells[i].getElement(),cellEl.nextSibling)})):column.getCells().forEach((function(cell,i){var cellEl=cell.getElement();cellEl.parentNode.insertBefore(movingCells[i].getElement(),cellEl)}))},MoveColumns.prototype.endMove=function(e){(1===e.which||this.touchMove)&&(this._unbindMouseMove(),this.placeholderElement.parentNode.insertBefore(this.moving.getElement(),this.placeholderElement.nextSibling),this.placeholderElement.parentNode.removeChild(this.placeholderElement),this.hoverElement.parentNode.removeChild(this.hoverElement),this.table.element.classList.remove("tabulator-block-select"),this.toCol&&this.table.columnManager.moveColumnActual(this.moving,this.toCol,this.toColAfter),this.moving=!1,this.toCol=!1,this.toColAfter=!1,this.touchMove||(document.body.removeEventListener("mousemove",this.moveHover),document.body.removeEventListener("mouseup",this.endMove)))},MoveColumns.prototype.moveHover=function(e){var self=this,columnHolder=self.table.columnManager.getElement(),scrollLeft=columnHolder.scrollLeft,xPos=(self.touchMove?e.touches[0].pageX:e.pageX)-Tabulator.prototype.helpers.elOffset(columnHolder).left+scrollLeft,scrollPos;self.hoverElement.style.left=xPos-self.startX+"px",xPos-scrollLeftgroup.getHeight()/2?self.toRow===group&&self.toRowAfter||((rowEl=group.getElement()).parentNode.insertBefore(self.placeholderElement,rowEl.nextSibling),self.moveRow(group,!0)):(self.toRow!==group||self.toRowAfter)&&(rowEl=group.getElement()).previousSibling&&(rowEl.parentNode.insertBefore(self.placeholderElement,rowEl),self.moveRow(group,!1))}.bind(self),group.modules.moveRow=config},MoveRows.prototype.initializeRow=function(row){var self=this,config={},rowEl;config.mouseup=function(e){self.tableRowDrop(e,row)}.bind(self),config.mousemove=function(e){var rowEl,rowEl;e.pageY-Tabulator.prototype.helpers.elOffset(row.element).top+self.table.rowManager.element.scrollTop>row.getHeight()/2?self.toRow===row&&self.toRowAfter||((rowEl=row.getElement()).parentNode.insertBefore(self.placeholderElement,rowEl.nextSibling),self.moveRow(row,!0)):(self.toRow!==row||self.toRowAfter)&&((rowEl=row.getElement()).parentNode.insertBefore(self.placeholderElement,rowEl),self.moveRow(row,!1))}.bind(self),this.hasHandle||((rowEl=row.getElement()).addEventListener("mousedown",(function(e){1===e.which&&(self.checkTimeout=setTimeout((function(){self.startMove(e,row)}),self.checkPeriod))})),rowEl.addEventListener("mouseup",(function(e){1===e.which&&self.checkTimeout&&clearTimeout(self.checkTimeout)})),this.bindTouchEvents(row,row.getElement())),row.modules.moveRow=config},MoveRows.prototype.initializeCell=function(cell){var self=this,cellEl=cell.getElement();cellEl.addEventListener("mousedown",(function(e){1===e.which&&(self.checkTimeout=setTimeout((function(){self.startMove(e,cell.row)}),self.checkPeriod))})),cellEl.addEventListener("mouseup",(function(e){1===e.which&&self.checkTimeout&&clearTimeout(self.checkTimeout)})),this.bindTouchEvents(cell.row,cell.getElement())},MoveRows.prototype.bindTouchEvents=function(row,element){var self=this,startYMove=!1,dir=!1,currentRow,nextRow,prevRow,nextRowHeight,prevRowHeight,nextRowHeightLast,prevRowHeightLast;element.addEventListener("touchstart",(function(e){self.checkTimeout=setTimeout((function(){self.touchMove=!0,currentRow=row,nextRow=row.nextRow(),nextRowHeight=nextRow?nextRow.getHeight()/2:0,prevRow=row.prevRow(),prevRowHeight=prevRow?prevRow.getHeight()/2:0,nextRowHeightLast=0,prevRowHeightLast=0,startYMove=!1,self.startMove(e,row)}),self.checkPeriod)}),{passive:!0}),this.moving,this.toRow,this.toRowAfter,element.addEventListener("touchmove",(function(e){var halfCol,diff,moveToRow;self.moving&&(e.preventDefault(),self.moveHover(e),startYMove||(startYMove=e.touches[0].pageY),(diff=e.touches[0].pageY-startYMove)>0?nextRow&&diff-nextRowHeightLast>nextRowHeight&&(moveToRow=nextRow)!==row&&(startYMove=e.touches[0].pageY,moveToRow.getElement().parentNode.insertBefore(self.placeholderElement,moveToRow.getElement().nextSibling),self.moveRow(moveToRow,!0)):prevRow&&-diff-prevRowHeightLast>prevRowHeight&&(moveToRow=prevRow)!==row&&(startYMove=e.touches[0].pageY,moveToRow.getElement().parentNode.insertBefore(self.placeholderElement,moveToRow.getElement()),self.moveRow(moveToRow,!1)),moveToRow&&(currentRow=moveToRow,nextRow=moveToRow.nextRow(),nextRowHeightLast=nextRowHeight,nextRowHeight=nextRow?nextRow.getHeight()/2:0,prevRow=moveToRow.prevRow(),prevRowHeightLast=prevRowHeight,prevRowHeight=prevRow?prevRow.getHeight()/2:0))})),element.addEventListener("touchend",(function(e){self.checkTimeout&&clearTimeout(self.checkTimeout),self.moving&&(self.endMove(e),self.touchMove=!1)}))},MoveRows.prototype._bindMouseMove=function(){var self=this;this.table.rowManager.getDisplayRows().forEach((function(row){"row"!==row.type&&"group"!==row.type||!row.modules.moveRow.mousemove||row.getElement().addEventListener("mousemove",row.modules.moveRow.mousemove)}))},MoveRows.prototype._unbindMouseMove=function(){var self=this;this.table.rowManager.getDisplayRows().forEach((function(row){"row"!==row.type&&"group"!==row.type||!row.modules.moveRow.mousemove||row.getElement().removeEventListener("mousemove",row.modules.moveRow.mousemove)}))},MoveRows.prototype.startMove=function(e,row){var element=row.getElement();this.setStartPosition(e,row),this.moving=row,this.table.element.classList.add("tabulator-block-select"),this.placeholderElement.style.width=row.getWidth()+"px",this.placeholderElement.style.height=row.getHeight()+"px",this.connection?(this.table.element.classList.add("tabulator-movingrow-sending"),this.connectToTables(row)):(element.parentNode.insertBefore(this.placeholderElement,element),element.parentNode.removeChild(element)),this.hoverElement=element.cloneNode(!0),this.hoverElement.classList.add("tabulator-moving"),this.connection?(document.body.appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.top="0",this.hoverElement.style.width=this.table.element.clientWidth+"px",this.hoverElement.style.whiteSpace="nowrap",this.hoverElement.style.overflow="hidden",this.hoverElement.style.pointerEvents="none"):(this.table.rowManager.getTableElement().appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.top="0",this._bindMouseMove()),document.body.addEventListener("mousemove",this.moveHover),document.body.addEventListener("mouseup",this.endMove),this.moveHover(e)},MoveRows.prototype.setStartPosition=function(e,row){var pageX=this.touchMove?e.touches[0].pageX:e.pageX,pageY=this.touchMove?e.touches[0].pageY:e.pageY,element,position;element=row.getElement(),this.connection?(position=element.getBoundingClientRect(),this.startX=position.left-pageX+window.pageXOffset,this.startY=position.top-pageY+window.pageYOffset):this.startY=pageY-element.getBoundingClientRect().top},MoveRows.prototype.endMove=function(e){e&&1!==e.which&&!this.touchMove||(this._unbindMouseMove(),this.connection||(this.placeholderElement.parentNode.insertBefore(this.moving.getElement(),this.placeholderElement.nextSibling),this.placeholderElement.parentNode.removeChild(this.placeholderElement)),this.hoverElement.parentNode.removeChild(this.hoverElement),this.table.element.classList.remove("tabulator-block-select"),this.toRow&&this.table.rowManager.moveRow(this.moving,this.toRow,this.toRowAfter),this.moving=!1,this.toRow=!1,this.toRowAfter=!1,document.body.removeEventListener("mousemove",this.moveHover),document.body.removeEventListener("mouseup",this.endMove),this.connection&&(this.table.element.classList.remove("tabulator-movingrow-sending"),this.disconnectFromTables()))},MoveRows.prototype.moveRow=function(row,after){this.toRow=row,this.toRowAfter=after},MoveRows.prototype.moveHover=function(e){this.connection?this.moveHoverConnections.call(this,e):this.moveHoverTable.call(this,e)},MoveRows.prototype.moveHoverTable=function(e){var rowHolder=this.table.rowManager.getElement(),scrollTop=rowHolder.scrollTop,yPos=(this.touchMove?e.touches[0].pageY:e.pageY)-rowHolder.getBoundingClientRect().top+scrollTop,scrollPos;this.hoverElement.style.top=yPos-this.startY+"px"},MoveRows.prototype.moveHoverConnections=function(e){this.hoverElement.style.left=this.startX+(this.touchMove?e.touches[0].pageX:e.pageX)+"px",this.hoverElement.style.top=this.startY+(this.touchMove?e.touches[0].pageY:e.pageY)+"px"},MoveRows.prototype.elementRowDrop=function(e,element,row){this.table.options.movableRowsElementDrop&&this.table.options.movableRowsElementDrop(e,element,!!row&&row.getComponent())},MoveRows.prototype.connectToTables=function(row){var _this66=this,connectionTables;this.connectionSelectorsTables&&(connectionTables=this.table.modules.comms.getConnections(this.connectionSelectorsTables),this.table.options.movableRowsSendingStart.call(this.table,connectionTables),this.table.modules.comms.send(this.connectionSelectorsTables,"moveRow","connect",{row:row})),this.connectionSelectorsElements&&(this.connectionElements=[],Array.isArray(this.connectionSelectorsElements)||(this.connectionSelectorsElements=[this.connectionSelectorsElements]),this.connectionSelectorsElements.forEach((function(query){"string"==typeof query?_this66.connectionElements=_this66.connectionElements.concat(Array.prototype.slice.call(document.querySelectorAll(query))):_this66.connectionElements.push(query)})),this.connectionElements.forEach((function(element){var dropEvent=function dropEvent(e){_this66.elementRowDrop(e,element,_this66.moving)};element.addEventListener("mouseup",dropEvent),element.tabulatorElementDropEvent=dropEvent,element.classList.add("tabulator-movingrow-receiving")})))},MoveRows.prototype.disconnectFromTables=function(){var connectionTables;this.connectionSelectorsTables&&(connectionTables=this.table.modules.comms.getConnections(this.connectionSelectorsTables),this.table.options.movableRowsSendingStop.call(this.table,connectionTables),this.table.modules.comms.send(this.connectionSelectorsTables,"moveRow","disconnect")),this.connectionElements.forEach((function(element){element.classList.remove("tabulator-movingrow-receiving"),element.removeEventListener("mouseup",element.tabulatorElementDropEvent),delete element.tabulatorElementDropEvent}))},MoveRows.prototype.connect=function(table,row){var self=this;return this.connectedTable?(console.warn("Move Row Error - Table cannot accept connection, already connected to table:",this.connectedTable),!1):(this.connectedTable=table,this.connectedRow=row,this.table.element.classList.add("tabulator-movingrow-receiving"),this.table.rowManager.getDisplayRows().forEach((function(row){"row"===row.type&&row.modules.moveRow&&row.modules.moveRow.mouseup&&row.getElement().addEventListener("mouseup",row.modules.moveRow.mouseup)})),this.tableRowDropEvent=this.tableRowDrop.bind(this),this.table.element.addEventListener("mouseup",this.tableRowDropEvent),this.table.options.movableRowsReceivingStart.call(this.table,row,table),!0)},MoveRows.prototype.disconnect=function(table){var self=this;table===this.connectedTable?(this.connectedTable=!1,this.connectedRow=!1,this.table.element.classList.remove("tabulator-movingrow-receiving"),this.table.rowManager.getDisplayRows().forEach((function(row){"row"===row.type&&row.modules.moveRow&&row.modules.moveRow.mouseup&&row.getElement().removeEventListener("mouseup",row.modules.moveRow.mouseup)})),this.table.element.removeEventListener("mouseup",this.tableRowDropEvent),this.table.options.movableRowsReceivingStop.call(this.table,table)):console.warn("Move Row Error - trying to disconnect from non connected table")},MoveRows.prototype.dropComplete=function(table,row,success){var sender=!1;if(success){switch(_typeof(this.table.options.movableRowsSender)){case"string":sender=this.senders[this.table.options.movableRowsSender];break;case"function":sender=this.table.options.movableRowsSender}sender?sender.call(this,this.moving.getComponent(),row?row.getComponent():void 0,table):this.table.options.movableRowsSender&&console.warn("Mover Row Error - no matching sender found:",this.table.options.movableRowsSender),this.table.options.movableRowsSent.call(this.table,this.moving.getComponent(),row?row.getComponent():void 0,table)}else this.table.options.movableRowsSentFailed.call(this.table,this.moving.getComponent(),row?row.getComponent():void 0,table);this.endMove()},MoveRows.prototype.tableRowDrop=function(e,row){var receiver=!1,success=!1;switch(console.trace("drop"),e.stopImmediatePropagation(),_typeof(this.table.options.movableRowsReceiver)){case"string":receiver=this.receivers[this.table.options.movableRowsReceiver];break;case"function":receiver=this.table.options.movableRowsReceiver}receiver?success=receiver.call(this,this.connectedRow.getComponent(),row?row.getComponent():void 0,this.connectedTable):console.warn("Mover Row Error - no matching receiver found:",this.table.options.movableRowsReceiver),success?this.table.options.movableRowsReceived.call(this.table,this.connectedRow.getComponent(),row?row.getComponent():void 0,this.connectedTable):this.table.options.movableRowsReceivedFailed.call(this.table,this.connectedRow.getComponent(),row?row.getComponent():void 0,this.connectedTable),this.table.modules.comms.send(this.connectedTable,"moveRow","dropcomplete",{row:row,success:success})},MoveRows.prototype.receivers={insert:function insert(fromRow,toRow,fromTable){return this.table.addRow(fromRow.getData(),void 0,toRow),!0},add:function add(fromRow,toRow,fromTable){return this.table.addRow(fromRow.getData()),!0},update:function update(fromRow,toRow,fromTable){return!!toRow&&(toRow.update(fromRow.getData()),!0)},replace:function replace(fromRow,toRow,fromTable){return!!toRow&&(this.table.addRow(fromRow.getData(),void 0,toRow),toRow.delete(),!0)}},MoveRows.prototype.senders={delete:function _delete(fromRow,toRow,toTable){fromRow.delete()}},MoveRows.prototype.commsReceived=function(table,action,data){switch(action){case"connect":return this.connect(table,data.row);case"disconnect":return this.disconnect(table);case"dropcomplete":return this.dropComplete(table,data.row,data.success)}},Tabulator.prototype.registerModule("moveRow",MoveRows);var Mutator=function Mutator(table){this.table=table,this.allowedTypes=["","data","edit","clipboard"],this.enabled=!0};Mutator.prototype.initializeColumn=function(column){var self=this,match=!1,config={};this.allowedTypes.forEach((function(type){var key="mutator"+(type.charAt(0).toUpperCase()+type.slice(1)),mutator;column.definition[key]&&(mutator=self.lookupMutator(column.definition[key]))&&(match=!0,config[key]={mutator:mutator,params:column.definition[key+"Params"]||{}})})),match&&(column.modules.mutate=config)},Mutator.prototype.lookupMutator=function(value){var mutator=!1;switch(void 0===value?"undefined":_typeof(value)){case"string":this.mutators[value]?mutator=this.mutators[value]:console.warn("Mutator Error - No such mutator found, ignoring: ",value);break;case"function":mutator=value}return mutator},Mutator.prototype.transformRow=function(data,type,updatedData){var self=this,key="mutator"+(type.charAt(0).toUpperCase()+type.slice(1)),value;return this.enabled&&this.table.columnManager.traverse((function(column){var mutator,params,component;column.modules.mutate&&(mutator=column.modules.mutate[key]||column.modules.mutate.mutator||!1)&&(value=column.getFieldValue(void 0!==updatedData?updatedData:data),"data"!=type&&void 0===value||(component=column.getComponent(),params="function"==typeof mutator.params?mutator.params(value,data,type,component):mutator.params,column.setFieldValue(data,mutator.mutator(value,data,type,params,component))))})),data},Mutator.prototype.transformCell=function(cell,value){var mutator=cell.column.modules.mutate.mutatorEdit||cell.column.modules.mutate.mutator||!1,tempData={};return mutator?(tempData=Object.assign(tempData,cell.row.getData()),cell.column.setFieldValue(tempData,value),mutator.mutator(value,tempData,"edit",mutator.params,cell.getComponent())):value},Mutator.prototype.enable=function(){this.enabled=!0},Mutator.prototype.disable=function(){this.enabled=!1},Mutator.prototype.mutators={},Tabulator.prototype.registerModule("mutator",Mutator);var Page=function Page(table){this.table=table,this.mode="local",this.progressiveLoad=!1,this.size=0,this.page=1,this.count=5,this.max=1,this.displayIndex=0,this.initialLoad=!0,this.pageSizes=[],this.dataReceivedNames={},this.dataSentNames={},this.createElements()};Page.prototype.createElements=function(){var button;this.element=document.createElement("span"),this.element.classList.add("tabulator-paginator"),this.pagesElement=document.createElement("span"),this.pagesElement.classList.add("tabulator-pages"),(button=document.createElement("button")).classList.add("tabulator-page"),button.setAttribute("type","button"),button.setAttribute("role","button"),button.setAttribute("aria-label",""),button.setAttribute("title",""),this.firstBut=button.cloneNode(!0),this.firstBut.setAttribute("data-page","first"),this.prevBut=button.cloneNode(!0),this.prevBut.setAttribute("data-page","prev"),this.nextBut=button.cloneNode(!0),this.nextBut.setAttribute("data-page","next"),this.lastBut=button.cloneNode(!0),this.lastBut.setAttribute("data-page","last"),this.table.options.paginationSizeSelector&&(this.pageSizeSelect=document.createElement("select"),this.pageSizeSelect.classList.add("tabulator-page-size"))},Page.prototype.generatePageSizeSelectList=function(){var _this67=this,pageSizes=[];if(this.pageSizeSelect){if(Array.isArray(this.table.options.paginationSizeSelector))pageSizes=this.table.options.paginationSizeSelector,this.pageSizes=pageSizes,-1==this.pageSizes.indexOf(this.size)&&pageSizes.unshift(this.size);else if(-1==this.pageSizes.indexOf(this.size)){pageSizes=[];for(var _i9=1;_i9<5;_i9++)pageSizes.push(this.size*_i9);this.pageSizes=pageSizes}else pageSizes=this.pageSizes;for(;this.pageSizeSelect.firstChild;)this.pageSizeSelect.removeChild(this.pageSizeSelect.firstChild);pageSizes.forEach((function(item){var itemEl=document.createElement("option");itemEl.value=item,!0===item?_this67.table.modules.localize.bind("pagination|all",(function(value){itemEl.innerHTML=value})):itemEl.innerHTML=item,_this67.pageSizeSelect.appendChild(itemEl)})),this.pageSizeSelect.value=this.size}},Page.prototype.initialize=function(hidden){var self=this,pageSelectLabel,testElRow,testElCell;this.dataSentNames=Object.assign({},this.paginationDataSentNames),this.dataSentNames=Object.assign(this.dataSentNames,this.table.options.paginationDataSent),this.dataReceivedNames=Object.assign({},this.paginationDataReceivedNames),this.dataReceivedNames=Object.assign(this.dataReceivedNames,this.table.options.paginationDataReceived),self.table.modules.localize.bind("pagination|first",(function(value){self.firstBut.innerHTML=value})),self.table.modules.localize.bind("pagination|first_title",(function(value){self.firstBut.setAttribute("aria-label",value),self.firstBut.setAttribute("title",value)})),self.table.modules.localize.bind("pagination|prev",(function(value){self.prevBut.innerHTML=value})),self.table.modules.localize.bind("pagination|prev_title",(function(value){self.prevBut.setAttribute("aria-label",value),self.prevBut.setAttribute("title",value)})),self.table.modules.localize.bind("pagination|next",(function(value){self.nextBut.innerHTML=value})),self.table.modules.localize.bind("pagination|next_title",(function(value){self.nextBut.setAttribute("aria-label",value),self.nextBut.setAttribute("title",value)})),self.table.modules.localize.bind("pagination|last",(function(value){self.lastBut.innerHTML=value})),self.table.modules.localize.bind("pagination|last_title",(function(value){self.lastBut.setAttribute("aria-label",value),self.lastBut.setAttribute("title",value)})),self.firstBut.addEventListener("click",(function(){self.setPage(1)})),self.prevBut.addEventListener("click",(function(){self.previousPage()})),self.nextBut.addEventListener("click",(function(){self.nextPage().then((function(){})).catch((function(){}))})),self.lastBut.addEventListener("click",(function(){self.setPage(self.max)})),self.table.options.paginationElement&&(self.element=self.table.options.paginationElement),this.pageSizeSelect&&(pageSelectLabel=document.createElement("label"),self.table.modules.localize.bind("pagination|page_size",(function(value){self.pageSizeSelect.setAttribute("aria-label",value),self.pageSizeSelect.setAttribute("title",value),pageSelectLabel.innerHTML=value})),self.element.appendChild(pageSelectLabel),self.element.appendChild(self.pageSizeSelect),self.pageSizeSelect.addEventListener("change",(function(e){self.setPageSize("true"==self.pageSizeSelect.value||self.pageSizeSelect.value),self.setPage(1).then((function(){})).catch((function(){}))}))),self.element.appendChild(self.firstBut),self.element.appendChild(self.prevBut),self.element.appendChild(self.pagesElement),self.element.appendChild(self.nextBut),self.element.appendChild(self.lastBut),self.table.options.paginationElement||hidden||self.table.footerManager.append(self.element,self),self.mode=self.table.options.pagination,self.table.options.paginationSize?self.size=self.table.options.paginationSize:((testElRow=document.createElement("div")).classList.add("tabulator-row"),testElRow.style.visibility=hidden,(testElCell=document.createElement("div")).classList.add("tabulator-cell"),testElCell.innerHTML="Page Row Test",testElRow.appendChild(testElCell),self.table.rowManager.getTableElement().appendChild(testElRow),self.size=Math.floor(self.table.rowManager.getElement().clientHeight/testElRow.offsetHeight),self.table.rowManager.getTableElement().removeChild(testElRow)),self.count=self.table.options.paginationButtonCount,self.generatePageSizeSelectList()},Page.prototype.initializeProgressive=function(mode){this.initialize(!0),this.mode="progressive_"+mode,this.progressiveLoad=!0},Page.prototype.setDisplayIndex=function(index){this.displayIndex=index},Page.prototype.getDisplayIndex=function(){return this.displayIndex},Page.prototype.setMaxRows=function(rowCount){this.max=rowCount?!0===this.size?1:Math.ceil(rowCount/this.size):1,this.page>this.max&&(this.page=this.max)},Page.prototype.reset=function(force,columnsChanged){return("local"==this.mode||force)&&(this.page=1),columnsChanged&&(this.initialLoad=!0),!0},Page.prototype.setMaxPage=function(max){max=parseInt(max),this.max=max||1,this.page>this.max&&(this.page=this.max,this.trigger())},Page.prototype.setPage=function(page){var _this68=this,self=this;switch(page){case"first":return this.setPage(1);case"prev":return this.previousPage();case"next":return this.nextPage();case"last":return this.setPage(this.max)}return new Promise((function(resolve,reject){(page=parseInt(page))>0&&page<=_this68.max?(_this68.page=page,_this68.trigger().then((function(){resolve()})).catch((function(){reject()})),self.table.options.persistence&&self.table.modExists("persistence",!0)&&self.table.modules.persistence.config.page&&self.table.modules.persistence.save("page")):(console.warn("Pagination Error - Requested page is out of range of 1 - "+_this68.max+":",page),reject())}))},Page.prototype.setPageToRow=function(row){var _this69=this;return new Promise((function(resolve,reject){var rows,index=_this69.table.rowManager.getDisplayRows(_this69.displayIndex-1).indexOf(row);if(index>-1){var page=!0===_this69.size?1:Math.ceil((index+1)/_this69.size);_this69.setPage(page).then((function(){resolve()})).catch((function(){reject()}))}else console.warn("Pagination Error - Requested row is not visible"),reject()}))},Page.prototype.setPageSize=function(size){!0!==size&&(size=parseInt(size)),size>0&&(this.size=size),this.pageSizeSelect&&this.generatePageSizeSelectList(),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.page&&this.table.modules.persistence.save("page")},Page.prototype._setPageButtons=function(){for(var self=this,leftSize=Math.floor((this.count-1)/2),rightSize=Math.ceil((this.count-1)/2),min=this.max-this.page+leftSize+10&&_i10<=this.max&&this.pagesElement.appendChild(this._generatePageButton(_i10));this.footerRedraw()},Page.prototype._generatePageButton=function(page){var self=this,button=document.createElement("button");return button.classList.add("tabulator-page"),page==self.page&&button.classList.add("active"),button.setAttribute("type","button"),button.setAttribute("role","button"),self.table.modules.localize.bind("pagination|page_title",(function(value){button.setAttribute("aria-label",value+" "+page),button.setAttribute("title",value+" "+page)})),button.setAttribute("data-page",page),button.textContent=page,button.addEventListener("click",(function(e){self.setPage(page)})),button},Page.prototype.previousPage=function(){var _this70=this;return new Promise((function(resolve,reject){_this70.page>1?(_this70.page--,_this70.trigger().then((function(){resolve()})).catch((function(){reject()})),_this70.table.options.persistence&&_this70.table.modExists("persistence",!0)&&_this70.table.modules.persistence.config.page&&_this70.table.modules.persistence.save("page")):(console.warn("Pagination Error - Previous page would be less than page 1:",0),reject())}))},Page.prototype.nextPage=function(){var _this71=this;return new Promise((function(resolve,reject){_this71.page<_this71.max?(_this71.page++,_this71.trigger().then((function(){resolve()})).catch((function(){reject()})),_this71.table.options.persistence&&_this71.table.modExists("persistence",!0)&&_this71.table.modules.persistence.config.page&&_this71.table.modules.persistence.save("page")):(_this71.progressiveLoad||console.warn("Pagination Error - Next page would be greater than maximum page of "+_this71.max+":",_this71.max+1),reject())}))},Page.prototype.getPage=function(){return this.page},Page.prototype.getPageMax=function(){return this.max},Page.prototype.getPageSize=function(size){return this.size},Page.prototype.getMode=function(){return this.mode},Page.prototype.getRows=function(data){var output,start,end;if("local"==this.mode){output=[],!0===this.size?(start=0,end=data.length-1):end=(start=this.size*(this.page-1))+parseInt(this.size),this._setPageButtons();for(var _i11=start;_i11i?output.splice(i,0,column):output.push(column))})),output},Persistence.prototype._findColumn=function(columns,subject){var type=subject.columns?"group":subject.field?"field":"object";return columns.find((function(col){switch(type){case"group":return col.title===subject.title&&col.columns.length===subject.columns.length;case"field":return col.field===subject.field;case"object":return col===subject}}))},Persistence.prototype.save=function(type){var data={};switch(type){case"columns":data=this.parseColumns(this.table.columnManager.getColumns());break;case"filter":data=this.table.modules.filter.getFilters();break;case"sort":data=this.validateSorters(this.table.modules.sort.getSort());break;case"group":data=this.getGroupConfig();break;case"page":data=this.getPageConfig()}this.writeFunc&&this.writeFunc(this.id,type,data)},Persistence.prototype.validateSorters=function(data){return data.forEach((function(item){item.column=item.field,delete item.field})),data},Persistence.prototype.getGroupConfig=function(){return this.config.group&&((!0===this.config.group||this.config.group.groupBy)&&(data.groupBy=this.table.options.groupBy),(!0===this.config.group||this.config.group.groupStartOpen)&&(data.groupStartOpen=this.table.options.groupStartOpen),(!0===this.config.group||this.config.group.groupHeader)&&(data.groupHeader=this.table.options.groupHeader)),data},Persistence.prototype.getPageConfig=function(){var data={};return this.config.page&&((!0===this.config.page||this.config.page.size)&&(data.paginationSize=this.table.modules.page.getPageSize()),(!0===this.config.page||this.config.page.page)&&(data.paginationInitialPage=this.table.modules.page.getPage())),data},Persistence.prototype.parseColumns=function(columns){var self=this,definitions=[];return columns.forEach((function(column){var defStore={},colDef=column.getDefinition(),keys;column.isGroup?(defStore.title=colDef.title,defStore.columns=self.parseColumns(column.getColumns())):(defStore.field=column.getField(),!0===self.config.columns||null==self.config.columns?(keys=Object.keys(colDef)).push("width"):keys=self.config.columns,keys.forEach((function(key){switch(key){case"width":defStore.width=column.getWidth();break;case"visible":defStore.visible=column.visible;break;default:defStore[key]=colDef[key]}}))),definitions.push(defStore)})),definitions},Persistence.prototype.readers={local:function local(id,type){var data=localStorage.getItem(id+"-"+type);return!!data&&JSON.parse(data)},cookie:function cookie(id,type){var cookie=document.cookie,key=id+"-"+type,cookiePos=cookie.indexOf(key+"="),end,data;return cookiePos>-1&&(cookie=cookie.substr(cookiePos),(end=cookie.indexOf(";"))>-1&&(cookie=cookie.substr(0,end)),data=cookie.replace(key+"=","")),!!data&&JSON.parse(data)}},Persistence.prototype.writers={local:function local(id,type,data){localStorage.setItem(id+"-"+type,JSON.stringify(data))},cookie:function cookie(id,type,data){var expireDate=new Date;expireDate.setDate(expireDate.getDate()+1e4),document.cookie=id+"-"+type+"="+JSON.stringify(data)+"; expires="+expireDate.toUTCString()}},Tabulator.prototype.registerModule("persistence",Persistence);var Print=function Print(table){this.table=table,this.element=!1,this.manualBlock=!1};Print.prototype.initialize=function(){window.addEventListener("beforeprint",this.replaceTable.bind(this)),window.addEventListener("afterprint",this.cleanup.bind(this))},Print.prototype.replaceTable=function(){this.manualBlock||(this.element=document.createElement("div"),this.element.classList.add("tabulator-print-table"),this.element.appendChild(this.table.modules.export.genereateTable(this.table.options.printConfig,this.table.options.printStyled,this.table.options.printRowRange,"print")),this.table.element.style.display="none",this.table.element.parentNode.insertBefore(this.element,this.table.element))},Print.prototype.cleanup=function(){document.body.classList.remove("tabulator-print-fullscreen-hide"),this.element&&this.element.parentNode&&(this.element.parentNode.removeChild(this.element),this.table.element.style.display="")},Print.prototype.printFullscreen=function(visible,style,config){var scrollX=window.scrollX,scrollY=window.scrollY,headerEl=document.createElement("div"),footerEl=document.createElement("div"),tableEl=this.table.modules.export.genereateTable(void 0!==config?config:this.table.options.printConfig,void 0!==style?style:this.table.options.printStyled,visible,"print"),headerContent,footerContent;this.manualBlock=!0,this.element=document.createElement("div"),this.element.classList.add("tabulator-print-fullscreen"),this.table.options.printHeader&&(headerEl.classList.add("tabulator-print-header"),"string"==typeof(headerContent="function"==typeof this.table.options.printHeader?this.table.options.printHeader.call(this.table):this.table.options.printHeader)?headerEl.innerHTML=headerContent:headerEl.appendChild(headerContent),this.element.appendChild(headerEl)),this.element.appendChild(tableEl),this.table.options.printFooter&&(footerEl.classList.add("tabulator-print-footer"),"string"==typeof(footerContent="function"==typeof this.table.options.printFooter?this.table.options.printFooter.call(this.table):this.table.options.printFooter)?footerEl.innerHTML=footerContent:footerEl.appendChild(footerContent),this.element.appendChild(footerEl)),document.body.classList.add("tabulator-print-fullscreen-hide"),document.body.appendChild(this.element),this.table.options.printFormatter&&this.table.options.printFormatter(this.element,tableEl),window.print(),this.cleanup(),window.scrollTo(scrollX,scrollY),this.manualBlock=!1},Tabulator.prototype.registerModule("print",Print);var ReactiveData=function ReactiveData(table){this.table=table,this.data=!1,this.blocked=!1,this.origFuncs={},this.currentVersion=0};ReactiveData.prototype.watchData=function(data){var self=this,pushFunc,version;this.currentVersion++,version=this.currentVersion,self.unwatchData(),self.data=data,self.origFuncs.push=data.push,Object.defineProperty(self.data,"push",{enumerable:!1,configurable:!0,value:function value(){var args=Array.from(arguments);return self.blocked||version!==self.currentVersion||args.forEach((function(arg){self.table.rowManager.addRowActual(arg,!1)})),self.origFuncs.push.apply(data,arguments)}}),self.origFuncs.unshift=data.unshift,Object.defineProperty(self.data,"unshift",{enumerable:!1,configurable:!0,value:function value(){var args=Array.from(arguments);return self.blocked||version!==self.currentVersion||args.forEach((function(arg){self.table.rowManager.addRowActual(arg,!0)})),self.origFuncs.unshift.apply(data,arguments)}}),self.origFuncs.shift=data.shift,Object.defineProperty(self.data,"shift",{enumerable:!1,configurable:!0,value:function value(){var row;return self.blocked||version!==self.currentVersion||self.data.length&&(row=self.table.rowManager.getRowFromDataObject(self.data[0]))&&row.deleteActual(),self.origFuncs.shift.call(data)}}),self.origFuncs.pop=data.pop,Object.defineProperty(self.data,"pop",{enumerable:!1,configurable:!0,value:function value(){var row;return self.blocked||version!==self.currentVersion||self.data.length&&(row=self.table.rowManager.getRowFromDataObject(self.data[self.data.length-1]))&&row.deleteActual(),self.origFuncs.pop.call(data)}}),self.origFuncs.splice=data.splice,Object.defineProperty(self.data,"splice",{enumerable:!1,configurable:!0,value:function value(){var args=Array.from(arguments),start=args[0]<0?data.length+args[0]:args[0],end=args[1],newRows=!!args[2]&&args.slice(2),startRow;if(!self.blocked&&version===self.currentVersion){if(newRows&&((startRow=!!data[start]&&self.table.rowManager.getRowFromDataObject(data[start]))?newRows.forEach((function(rowData){self.table.rowManager.addRowActual(rowData,!0,startRow,!0)})):(newRows=newRows.slice().reverse()).forEach((function(rowData){self.table.rowManager.addRowActual(rowData,!0,!1,!0)}))),0!==end){var oldRows=data.slice(start,void 0===args[1]?args[1]:start+end);oldRows.forEach((function(rowData,i){var row=self.table.rowManager.getRowFromDataObject(rowData);row&&row.deleteActual(i!==oldRows.length-1)}))}(newRows||0!==end)&&self.table.rowManager.reRenderInPosition()}return self.origFuncs.splice.apply(data,arguments)}})},ReactiveData.prototype.unwatchData=function(){if(!1!==this.data)for(var key in this.origFuncs)Object.defineProperty(this.data,key,{enumerable:!0,configurable:!0,writable:!0,value:this.origFuncs.key})},ReactiveData.prototype.watchRow=function(row){var self=this,data=row.getData();for(var key in this.blocked=!0,data)this.watchKey(row,data,key);this.blocked=!1},ReactiveData.prototype.watchKey=function(row,data,key){var self=this,props=Object.getOwnPropertyDescriptor(data,key),value=data[key],version=this.currentVersion;Object.defineProperty(data,key,{set:function set(newValue){if(value=newValue,!self.blocked&&version===self.currentVersion){var update={};update[key]=newValue,row.updateData(update)}props.set&&props.set(newValue)},get:function get(){return props.get&&props.get(),value}})},ReactiveData.prototype.unwatchRow=function(row){var data=row.getData();for(var key in data)Object.defineProperty(data,key,{value:data[key]})},ReactiveData.prototype.block=function(){this.blocked=!0},ReactiveData.prototype.unblock=function(){this.blocked=!1},Tabulator.prototype.registerModule("reactiveData",ReactiveData);var ResizeColumns=function ResizeColumns(table){this.table=table,this.startColumn=!1,this.startX=!1,this.startWidth=!1,this.handle=null,this.prevHandle=null};ResizeColumns.prototype.initializeColumn=function(type,column,element){var self=this,variableHeight=!1,mode=this.table.options.resizableColumns;if("header"===type&&(variableHeight="textarea"==column.definition.formatter||column.definition.variableHeight,column.modules.resize={variableHeight:variableHeight}),!0===mode||mode==type){var handle=document.createElement("div");handle.className="tabulator-col-resize-handle";var prevHandle=document.createElement("div");prevHandle.className="tabulator-col-resize-handle prev",handle.addEventListener("click",(function(e){e.stopPropagation()}));var handleDown=function handleDown(e){var nearestColumn=column.getLastColumn();nearestColumn&&self._checkResizability(nearestColumn)&&(self.startColumn=column,self._mouseDown(e,nearestColumn,handle))};handle.addEventListener("mousedown",handleDown),handle.addEventListener("touchstart",handleDown,{passive:!0}),handle.addEventListener("dblclick",(function(e){var col=column.getLastColumn();col&&self._checkResizability(col)&&(e.stopPropagation(),col.reinitializeWidth(!0))})),prevHandle.addEventListener("click",(function(e){e.stopPropagation()}));var prevHandleDown=function prevHandleDown(e){var nearestColumn,colIndex,prevColumn;(nearestColumn=column.getFirstColumn())&&(prevColumn=(colIndex=self.table.columnManager.findColumnIndex(nearestColumn))>0&&self.table.columnManager.getColumnByIndex(colIndex-1))&&self._checkResizability(prevColumn)&&(self.startColumn=column,self._mouseDown(e,prevColumn,prevHandle))};prevHandle.addEventListener("mousedown",prevHandleDown),prevHandle.addEventListener("touchstart",prevHandleDown,{passive:!0}),prevHandle.addEventListener("dblclick",(function(e){var nearestColumn,colIndex,prevColumn;(nearestColumn=column.getFirstColumn())&&(prevColumn=(colIndex=self.table.columnManager.findColumnIndex(nearestColumn))>0&&self.table.columnManager.getColumnByIndex(colIndex-1))&&self._checkResizability(prevColumn)&&(e.stopPropagation(),prevColumn.reinitializeWidth(!0))})),element.appendChild(handle),element.appendChild(prevHandle)}},ResizeColumns.prototype._checkResizability=function(column){return void 0!==column.definition.resizable?column.definition.resizable:this.table.options.resizableColumns},ResizeColumns.prototype._mouseDown=function(e,column,handle){var self=this;function mouseMove(e){column.setWidth(self.startWidth+((void 0===e.screenX?e.touches[0].screenX:e.screenX)-self.startX)),!self.table.browserSlow&&column.modules.resize&&column.modules.resize.variableHeight&&column.checkCellHeights()}function mouseUp(e){self.startColumn.modules.edit&&(self.startColumn.modules.edit.blocked=!1),self.table.browserSlow&&column.modules.resize&&column.modules.resize.variableHeight&&column.checkCellHeights(),document.body.removeEventListener("mouseup",mouseUp),document.body.removeEventListener("mousemove",mouseMove),handle.removeEventListener("touchmove",mouseMove),handle.removeEventListener("touchend",mouseUp),self.table.element.classList.remove("tabulator-block-select"),self.table.options.persistence&&self.table.modExists("persistence",!0)&&self.table.modules.persistence.config.columns&&self.table.modules.persistence.save("columns"),self.table.options.columnResized.call(self.table,column.getComponent())}self.table.element.classList.add("tabulator-block-select"),e.stopPropagation(),self.startColumn.modules.edit&&(self.startColumn.modules.edit.blocked=!0),self.startX=void 0===e.screenX?e.touches[0].screenX:e.screenX,self.startWidth=column.getWidth(),document.body.addEventListener("mousemove",mouseMove),document.body.addEventListener("mouseup",mouseUp),handle.addEventListener("touchmove",mouseMove,{passive:!0}),handle.addEventListener("touchend",mouseUp)},Tabulator.prototype.registerModule("resizeColumns",ResizeColumns);var ResizeRows=function ResizeRows(table){this.table=table,this.startColumn=!1,this.startY=!1,this.startHeight=!1,this.handle=null,this.prevHandle=null};ResizeRows.prototype.initializeRow=function(row){var self=this,rowEl=row.getElement(),handle=document.createElement("div");handle.className="tabulator-row-resize-handle";var prevHandle=document.createElement("div");prevHandle.className="tabulator-row-resize-handle prev",handle.addEventListener("click",(function(e){e.stopPropagation()}));var handleDown=function handleDown(e){self.startRow=row,self._mouseDown(e,row,handle)};handle.addEventListener("mousedown",handleDown),handle.addEventListener("touchstart",handleDown,{passive:!0}),prevHandle.addEventListener("click",(function(e){e.stopPropagation()}));var prevHandleDown=function prevHandleDown(e){var prevRow=self.table.rowManager.prevDisplayRow(row);prevRow&&(self.startRow=prevRow,self._mouseDown(e,prevRow,prevHandle))};prevHandle.addEventListener("mousedown",prevHandleDown),prevHandle.addEventListener("touchstart",prevHandleDown,{passive:!0}),rowEl.appendChild(handle),rowEl.appendChild(prevHandle)},ResizeRows.prototype._mouseDown=function(e,row,handle){var self=this;function mouseMove(e){row.setHeight(self.startHeight+((void 0===e.screenY?e.touches[0].screenY:e.screenY)-self.startY))}function mouseUp(e){document.body.removeEventListener("mouseup",mouseMove),document.body.removeEventListener("mousemove",mouseMove),handle.removeEventListener("touchmove",mouseMove),handle.removeEventListener("touchend",mouseUp),self.table.element.classList.remove("tabulator-block-select"),self.table.options.rowResized.call(this.table,row.getComponent())}self.table.element.classList.add("tabulator-block-select"),e.stopPropagation(),self.startY=void 0===e.screenY?e.touches[0].screenY:e.screenY,self.startHeight=row.getHeight(),document.body.addEventListener("mousemove",mouseMove),document.body.addEventListener("mouseup",mouseUp),handle.addEventListener("touchmove",mouseMove,{passive:!0}),handle.addEventListener("touchend",mouseUp)},Tabulator.prototype.registerModule("resizeRows",ResizeRows);var ResizeTable=function ResizeTable(table){this.table=table,this.binding=!1,this.observer=!1,this.containerObserver=!1,this.tableHeight=0,this.tableWidth=0,this.containerHeight=0,this.containerWidth=0,this.autoResize=!1};ResizeTable.prototype.initialize=function(row){var _this74=this,table=this.table,tableStyle;this.tableHeight=table.element.clientHeight,this.tableWidth=table.element.clientWidth,table.element.parentNode&&(this.containerHeight=table.element.parentNode.clientHeight,this.containerWidth=table.element.parentNode.clientWidth),"undefined"!=typeof ResizeObserver&&"virtual"===table.rowManager.getRenderMode()?(this.autoResize=!0,this.observer=new ResizeObserver((function(entry){if(!table.browserMobile||table.browserMobile&&!table.modules.edit.currentCell){var nodeHeight=Math.floor(entry[0].contentRect.height),nodeWidth=Math.floor(entry[0].contentRect.width);_this74.tableHeight==nodeHeight&&_this74.tableWidth==nodeWidth||(_this74.tableHeight=nodeHeight,_this74.tableWidth=nodeWidth,table.element.parentNode&&(_this74.containerHeight=table.element.parentNode.clientHeight,_this74.containerWidth=table.element.parentNode.clientWidth),table.redraw())}})),this.observer.observe(table.element),tableStyle=window.getComputedStyle(table.element),this.table.element.parentNode&&!this.table.rowManager.fixedHeight&&(tableStyle.getPropertyValue("max-height")||tableStyle.getPropertyValue("min-height"))&&(this.containerObserver=new ResizeObserver((function(entry){if(!table.browserMobile||table.browserMobile&&!table.modules.edit.currentCell){var nodeHeight=Math.floor(entry[0].contentRect.height),nodeWidth=Math.floor(entry[0].contentRect.width);_this74.containerHeight==nodeHeight&&_this74.containerWidth==nodeWidth||(_this74.containerHeight=nodeHeight,_this74.containerWidth=nodeWidth,_this74.tableHeight=table.element.clientHeight,_this74.tableWidth=table.element.clientWidth,table.redraw()),table.redraw()}})),this.containerObserver.observe(this.table.element.parentNode))):(this.binding=function(){(!table.browserMobile||table.browserMobile&&!table.modules.edit.currentCell)&&table.redraw()},window.addEventListener("resize",this.binding))},ResizeTable.prototype.clearBindings=function(row){this.binding&&window.removeEventListener("resize",this.binding),this.observer&&this.observer.unobserve(this.table.element),this.containerObserver&&this.containerObserver.unobserve(this.table.element.parentNode)},Tabulator.prototype.registerModule("resizeTable",ResizeTable);var ResponsiveLayout=function ResponsiveLayout(table){this.table=table,this.columns=[],this.hiddenColumns=[],this.mode="",this.index=0,this.collapseFormatter=[],this.collapseStartOpen=!0,this.collapseHandleColumn=!1};ResponsiveLayout.prototype.initialize=function(){var self=this,columns=[];this.mode=this.table.options.responsiveLayout,this.collapseFormatter=this.table.options.responsiveLayoutCollapseFormatter||this.formatCollapsedData,this.collapseStartOpen=this.table.options.responsiveLayoutCollapseStartOpen,this.hiddenColumns=[],this.table.columnManager.columnsByIndex.forEach((function(column,i){column.modules.responsive&&column.modules.responsive.order&&column.modules.responsive.visible&&(column.modules.responsive.index=i,columns.push(column),column.visible||"collapse"!==self.mode||self.hiddenColumns.push(column))})),columns=(columns=columns.reverse()).sort((function(a,b){var diff;return b.modules.responsive.order-a.modules.responsive.order||b.modules.responsive.index-a.modules.responsive.index})),this.columns=columns,"collapse"===this.mode&&this.generateCollapsedContent();for(var _iterator=this.table.columnManager.columnsByIndex,_isArray=Array.isArray(_iterator),_i12=0,_iterator=_isArray?_iterator:_iterator[Symbol.iterator]();;){var _ref;if(_isArray){if(_i12>=_iterator.length)break;_ref=_iterator[_i12++]}else{if((_i12=_iterator.next()).done)break;_ref=_i12.value}var col=_ref;if("responsiveCollapse"==col.definition.formatter){this.collapseHandleColumn=col;break}}this.collapseHandleColumn&&(this.hiddenColumns.length?this.collapseHandleColumn.show():this.collapseHandleColumn.hide())},ResponsiveLayout.prototype.initializeColumn=function(column){var def=column.getDefinition();column.modules.responsive={order:void 0===def.responsive?1:def.responsive,visible:!1!==def.visible}},ResponsiveLayout.prototype.initializeRow=function(row){var el;"calc"!==row.type&&((el=document.createElement("div")).classList.add("tabulator-responsive-collapse"),row.modules.responsiveLayout={element:el,open:this.collapseStartOpen},this.collapseStartOpen||(el.style.display="none"))},ResponsiveLayout.prototype.layoutRow=function(row){var rowEl=row.getElement();row.modules.responsiveLayout&&(rowEl.appendChild(row.modules.responsiveLayout.element),this.generateCollapsedRowContent(row))},ResponsiveLayout.prototype.updateColumnVisibility=function(column,visible){var index;column.modules.responsive&&(column.modules.responsive.visible=visible,this.initialize())},ResponsiveLayout.prototype.hideColumn=function(column){var colCount=this.hiddenColumns.length;column.hide(!1,!0),"collapse"===this.mode&&(this.hiddenColumns.unshift(column),this.generateCollapsedContent(),this.collapseHandleColumn&&!colCount&&this.collapseHandleColumn.show())},ResponsiveLayout.prototype.showColumn=function(column){var index;column.show(!1,!0),column.setWidth(column.getWidth()),"collapse"===this.mode&&((index=this.hiddenColumns.indexOf(column))>-1&&this.hiddenColumns.splice(index,1),this.generateCollapsedContent(),this.collapseHandleColumn&&!this.hiddenColumns.length&&this.collapseHandleColumn.hide())},ResponsiveLayout.prototype.update=function(){for(var self=this,working=!0;working;){var width="fitColumns"==this.table.modules.layout.getMode()?this.table.columnManager.getFlexBaseWidth():this.table.columnManager.getWidth(),diff=(this.table.options.headerVisible?this.table.columnManager.element.clientWidth:this.table.element.clientWidth)-width;if(diff<0){var column=this.columns[this.index];column?(this.hideColumn(column),this.index++):working=!1}else{var _column=this.columns[this.index-1];_column&&diff>0&&diff>=_column.getWidth()?(this.showColumn(_column),this.index--):working=!1}this.table.rowManager.activeRowsCount||this.table.rowManager.renderEmptyScroll()}},ResponsiveLayout.prototype.generateCollapsedContent=function(){var self=this,rows;this.table.rowManager.getDisplayRows().forEach((function(row){self.generateCollapsedRowContent(row)}))},ResponsiveLayout.prototype.generateCollapsedRowContent=function(row){var el,contents;if(row.modules.responsiveLayout){for(el=row.modules.responsiveLayout.element;el.firstChild;)el.removeChild(el.firstChild);(contents=this.collapseFormatter(this.generateCollapsedRowData(row)))&&el.appendChild(contents)}},ResponsiveLayout.prototype.generateCollapsedRowData=function(row){var self=this,data=row.getData(),output=[],mockCellComponent;return this.hiddenColumns.forEach((function(column){var value=column.getFieldValue(data);column.definition.title&&column.field&&(column.modules.format&&self.table.options.responsiveLayoutCollapseUseFormatters?(mockCellComponent={value:!1,data:{},getValue:function getValue(){return value},getData:function getData(){return data},getElement:function getElement(){return document.createElement("div")},getRow:function getRow(){return row.getComponent()},getColumn:function getColumn(){return column.getComponent()}},output.push({title:column.definition.title,value:column.modules.format.formatter.call(self.table.modules.format,mockCellComponent,column.modules.format.params)})):output.push({title:column.definition.title,value:value}))})),output},ResponsiveLayout.prototype.formatCollapsedData=function(data){var list=document.createElement("table"),listContents="";return data.forEach((function(item){var div=document.createElement("div");item.value instanceof Node&&(div.appendChild(item.value),item.value=div.innerHTML),listContents+=""+item.title+""+item.value+""})),list.innerHTML=listContents,Object.keys(data).length?list:""},Tabulator.prototype.registerModule("responsiveLayout",ResponsiveLayout);var SelectRow=function SelectRow(table){this.table=table,this.selecting=!1,this.lastClickedRow=!1,this.selectPrev=[],this.selectedRows=[],this.headerCheckboxElement=null};SelectRow.prototype.clearSelectionData=function(silent){this.selecting=!1,this.lastClickedRow=!1,this.selectPrev=[],this.selectedRows=[],silent||this._rowSelectionChanged()},SelectRow.prototype.initializeRow=function(row){var self=this,element=row.getElement(),endSelect=function endSelect(){setTimeout((function(){self.selecting=!1}),50),document.body.removeEventListener("mouseup",endSelect)};row.modules.select={selected:!1},self.table.options.selectableCheck.call(this.table,row.getComponent())?(element.classList.add("tabulator-selectable"),element.classList.remove("tabulator-unselectable"),self.table.options.selectable&&"highlight"!=self.table.options.selectable&&("click"===self.table.options.selectableRangeMode?element.addEventListener("click",(function(e){if(e.shiftKey){self.table._clearSelection(),self.lastClickedRow=self.lastClickedRow||row;var lastClickedRowIdx=self.table.rowManager.getDisplayRowIndex(self.lastClickedRow),rowIdx=self.table.rowManager.getDisplayRowIndex(row),fromRowIdx=lastClickedRowIdx<=rowIdx?lastClickedRowIdx:rowIdx,toRowIdx=lastClickedRowIdx>=rowIdx?lastClickedRowIdx:rowIdx,rows,toggledRows=self.table.rowManager.getDisplayRows().slice(0).splice(fromRowIdx,toRowIdx-fromRowIdx+1);e.ctrlKey||e.metaKey?(toggledRows.forEach((function(toggledRow){toggledRow!==self.lastClickedRow&&(!0===self.table.options.selectable||self.isRowSelected(row)?self.toggleRow(toggledRow):self.selectedRows.lengthself.table.options.selectable&&(toggledRows=toggledRows.slice(0,self.table.options.selectable)),self.selectRows(toggledRows)),self.table._clearSelection()}else e.ctrlKey||e.metaKey?(self.toggleRow(row),self.lastClickedRow=row):(self.deselectRows(void 0,!0),self.selectRows(row),self.lastClickedRow=row)})):(element.addEventListener("click",(function(e){self.table.modExists("edit")&&self.table.modules.edit.getCurrentCell()||self.table._clearSelection(),self.selecting||self.toggleRow(row)})),element.addEventListener("mousedown",(function(e){if(e.shiftKey)return self.table._clearSelection(),self.selecting=!0,self.selectPrev=[],document.body.addEventListener("mouseup",endSelect),document.body.addEventListener("keyup",endSelect),self.toggleRow(row),!1})),element.addEventListener("mouseenter",(function(e){self.selecting&&(self.table._clearSelection(),self.toggleRow(row),self.selectPrev[1]==row&&self.toggleRow(self.selectPrev[0]))})),element.addEventListener("mouseout",(function(e){self.selecting&&(self.table._clearSelection(),self.selectPrev.unshift(row))}))))):(element.classList.add("tabulator-unselectable"),element.classList.remove("tabulator-selectable"))},SelectRow.prototype.toggleRow=function(row){this.table.options.selectableCheck.call(this.table,row.getComponent())&&(row.modules.select&&row.modules.select.selected?this._deselectRow(row):this._selectRow(row))},SelectRow.prototype.selectRows=function(rows){var _this75=this,rowMatch;switch(void 0===rows?"undefined":_typeof(rows)){case"undefined":this.table.rowManager.rows.forEach((function(row){_this75._selectRow(row,!0,!0)})),this._rowSelectionChanged();break;case"string":(rowMatch=this.table.rowManager.findRow(rows))?this._selectRow(rowMatch,!0,!0):this.table.rowManager.getRows(rows).forEach((function(row){_this75._selectRow(row,!0,!0)})),this._rowSelectionChanged();break;default:Array.isArray(rows)?(rows.forEach((function(row){_this75._selectRow(row,!0,!0)})),this._rowSelectionChanged()):this._selectRow(rows,!1,!0)}},SelectRow.prototype._selectRow=function(rowInfo,silent,force){var index;if(!isNaN(this.table.options.selectable)&&!0!==this.table.options.selectable&&!force&&this.selectedRows.length>=this.table.options.selectable){if(!this.table.options.selectableRollingSelection)return!1;this._deselectRow(this.selectedRows[0])}var row=this.table.rowManager.findRow(rowInfo);row?-1==this.selectedRows.indexOf(row)&&(row.modules.select||(row.modules.select={}),row.modules.select.selected=!0,row.modules.select.checkboxEl&&(row.modules.select.checkboxEl.checked=!0),row.getElement().classList.add("tabulator-selected"),this.selectedRows.push(row),this.table.options.dataTreeSelectPropagate&&this.childRowSelection(row,!0),silent||this.table.options.rowSelected.call(this.table,row.getComponent()),this._rowSelectionChanged(silent)):silent||console.warn("Selection Error - No such row found, ignoring selection:"+rowInfo)},SelectRow.prototype.isRowSelected=function(row){return-1!==this.selectedRows.indexOf(row)},SelectRow.prototype.deselectRows=function(rows,silent){var self=this,rowCount;if(void 0===rows){rowCount=self.selectedRows.length;for(var _i13=0;_i13-1&&(row.modules.select||(row.modules.select={}),row.modules.select.selected=!1,row.modules.select.checkboxEl&&(row.modules.select.checkboxEl.checked=!1),row.getElement().classList.remove("tabulator-selected"),this.selectedRows.splice(index,1),this.table.options.dataTreeSelectPropagate&&this.childRowSelection(row,!1),silent||this.table.options.rowDeselected.call(this.table,row.getComponent()),this._rowSelectionChanged(silent)):silent||console.warn("Deselection Error - No such row found, ignoring selection:"+rowInfo)},SelectRow.prototype.getSelectedData=function(){var data=[];return this.selectedRows.forEach((function(row){data.push(row.getData())})),data},SelectRow.prototype.getSelectedRows=function(){var rows=[];return this.selectedRows.forEach((function(row){rows.push(row.getComponent())})),rows},SelectRow.prototype._rowSelectionChanged=function(silent){this.headerCheckboxElement&&(0===this.selectedRows.length?(this.headerCheckboxElement.checked=!1,this.headerCheckboxElement.indeterminate=!1):this.table.rowManager.rows.length===this.selectedRows.length?(this.headerCheckboxElement.checked=!0,this.headerCheckboxElement.indeterminate=!1):(this.headerCheckboxElement.indeterminate=!0,this.headerCheckboxElement.checked=!1)),silent||this.table.options.rowSelectionChanged.call(this.table,this.getSelectedData(),this.getSelectedRows())},SelectRow.prototype.registerRowSelectCheckbox=function(row,element){row._row.modules.select||(row._row.modules.select={}),row._row.modules.select.checkboxEl=element},SelectRow.prototype.registerHeaderSelectCheckbox=function(element){this.headerCheckboxElement=element},SelectRow.prototype.childRowSelection=function(row,select){var children=this.table.modules.dataTree.getChildren(row);if(select)for(var _iterator2=children,_isArray2=Array.isArray(_iterator2),_i14=0,_iterator2=_isArray2?_iterator2:_iterator2[Symbol.iterator]();;){var _ref2;if(_isArray2){if(_i14>=_iterator2.length)break;_ref2=_iterator2[_i14++]}else{if((_i14=_iterator2.next()).done)break;_ref2=_i14.value}var child=_ref2;this._selectRow(child,!0)}else for(var _iterator3=children,_isArray3=Array.isArray(_iterator3),_i15=0,_iterator3=_isArray3?_iterator3:_iterator3[Symbol.iterator]();;){var _ref3;if(_isArray3){if(_i15>=_iterator3.length)break;_ref3=_iterator3[_i15++]}else{if((_i15=_iterator3.next()).done)break;_ref3=_i15.value}var _child=_ref3;this._deselectRow(_child,!0)}},Tabulator.prototype.registerModule("selectRow",SelectRow);var Sort=function Sort(table){this.table=table,this.sortList=[],this.changed=!1};Sort.prototype.initializeColumn=function(column,content){var self=this,sorter=!1,colEl,arrowEl;switch(_typeof(column.definition.sorter)){case"string":self.sorters[column.definition.sorter]?sorter=self.sorters[column.definition.sorter]:console.warn("Sort Error - No such sorter found: ",column.definition.sorter);break;case"function":sorter=column.definition.sorter}column.modules.sort={sorter:sorter,dir:"none",params:column.definition.sorterParams||{},startingDir:column.definition.headerSortStartingDir||"asc",tristate:void 0!==column.definition.headerSortTristate?column.definition.headerSortTristate:this.table.options.headerSortTristate},(void 0===column.definition.headerSort?!1!==this.table.options.headerSort:!1!==column.definition.headerSort)&&((colEl=column.getElement()).classList.add("tabulator-sortable"),(arrowEl=document.createElement("div")).classList.add("tabulator-arrow"),content.appendChild(arrowEl),colEl.addEventListener("click",(function(e){var dir="",sorters=[],match=!1;if(column.modules.sort){if(column.modules.sort.tristate)dir="none"==column.modules.sort.dir?column.modules.sort.startingDir:column.modules.sort.dir==column.modules.sort.startingDir?"asc"==column.modules.sort.dir?"desc":"asc":"none";else switch(column.modules.sort.dir){case"asc":dir="desc";break;case"desc":dir="asc";break;default:dir=column.modules.sort.startingDir}self.table.options.columnHeaderSortMulti&&(e.shiftKey||e.ctrlKey)?((match=(sorters=self.getSort()).findIndex((function(sorter){return sorter.field===column.getField()})))>-1?(sorters[match].dir=dir,match!=sorters.length-1&&(match=sorters.splice(match,1)[0],"none"!=dir&&sorters.push(match))):"none"!=dir&&sorters.push({column:column,dir:dir}),self.setSort(sorters)):"none"==dir?self.clear():self.setSort(column,dir),self.table.rowManager.sorterRefresh(!self.sortList.length)}})))},Sort.prototype.hasChanged=function(){var changed=this.changed;return this.changed=!1,changed},Sort.prototype.getSort=function(){var self=this,sorters=[];return this.sortList.forEach((function(item){item.column&&sorters.push({column:item.column.getComponent(),field:item.column.getField(),dir:item.dir})})),sorters},Sort.prototype.setSort=function(sortList,dir){var self=this,newSortList=[];Array.isArray(sortList)||(sortList=[{column:sortList,dir:dir}]),sortList.forEach((function(item){var column;(column=self.table.columnManager.findColumn(item.column))?(item.column=column,newSortList.push(item),self.changed=!0):console.warn("Sort Warning - Sort field does not exist and is being ignored: ",item.column)})),self.sortList=newSortList,this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.sort&&this.table.modules.persistence.save("sort")},Sort.prototype.clear=function(){this.setSort([])},Sort.prototype.findSorter=function(column){var row=this.table.rowManager.activeRows[0],sorter="string",field,value;if(row&&(row=row.getData(),field=column.getField()))switch(void 0===(value=column.getFieldValue(row))?"undefined":_typeof(value)){case"undefined":sorter="string";break;case"boolean":sorter="boolean";break;default:isNaN(value)||""===value?value.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)&&(sorter="alphanum"):sorter="number"}return this.sorters[sorter]},Sort.prototype.sort=function(data){var self=this,sortList=this.table.options.sortOrderReverse?self.sortList.slice().reverse():self.sortList,sortListActual=[],rowComponents=[],lastSort;self.table.options.dataSorting&&self.table.options.dataSorting.call(self.table,self.getSort()),self.clearColumnHeaders(),self.table.options.ajaxSorting?sortList.forEach((function(item,i){self.setColumnHeader(item.column,item.dir)})):(sortList.forEach((function(item,i){var sortObj=item.column.modules.sort;item.column&&sortObj&&(sortObj.sorter||(sortObj.sorter=self.findSorter(item.column)),item.params="function"==typeof sortObj.params?sortObj.params(item.column.getComponent(),item.dir):sortObj.params,sortListActual.push(item)),self.setColumnHeader(item.column,item.dir)})),sortListActual.length&&self._sortItems(data,sortListActual)),self.table.options.dataSorted&&(data.forEach((function(row){rowComponents.push(row.getComponent())})),self.table.options.dataSorted.call(self.table,self.getSort(),rowComponents))},Sort.prototype.clearColumnHeaders=function(){this.table.columnManager.getRealColumns().forEach((function(column){column.modules.sort&&(column.modules.sort.dir="none",column.getElement().setAttribute("aria-sort","none"))}))},Sort.prototype.setColumnHeader=function(column,dir){column.modules.sort.dir=dir,column.getElement().setAttribute("aria-sort",dir)},Sort.prototype._sortItems=function(data,sortList){var _this76=this,sorterCount=sortList.length-1;data.sort((function(a,b){for(var result,i=sorterCount;i>=0;i--){var sortItem=sortList[i];if(0!==(result=_this76._sortRow(a,b,sortItem.column,sortItem.dir,sortItem.params)))break}return result}))},Sort.prototype._sortRow=function(a,b,column,dir,params){var el1Comp,el2Comp,colComp,el1="asc"==dir?a:b,el2="asc"==dir?b:a;return a=void 0!==(a=column.getFieldValue(el1.getData()))?a:"",b=void 0!==(b=column.getFieldValue(el2.getData()))?b:"",el1Comp=el1.getComponent(),el2Comp=el2.getComponent(),column.modules.sort.sorter.call(this,a,b,el1Comp,el2Comp,column.getComponent(),dir,params)},Sort.prototype.sorters={number:function number(a,b,aRow,bRow,column,dir,params){var alignEmptyValues=params.alignEmptyValues,decimal=params.decimalSeparator||".",thousand=params.thousandSeparator||",",emptyAlign=0;if(a=parseFloat(String(a).split(thousand).join("").split(decimal).join(".")),b=parseFloat(String(b).split(thousand).join("").split(decimal).join(".")),isNaN(a))emptyAlign=isNaN(b)?0:-1;else{if(!isNaN(b))return a-b;emptyAlign=1}return("top"===alignEmptyValues&&"desc"===dir||"bottom"===alignEmptyValues&&"asc"===dir)&&(emptyAlign*=-1),emptyAlign},string:function string(a,b,aRow,bRow,column,dir,params){var alignEmptyValues=params.alignEmptyValues,emptyAlign=0,locale;if(a){if(b){switch(_typeof(params.locale)){case"boolean":params.locale&&(locale=this.table.modules.localize.getLocale());break;case"string":locale=params.locale}return String(a).toLowerCase().localeCompare(String(b).toLowerCase(),locale)}emptyAlign=1}else emptyAlign=b?-1:0;return("top"===alignEmptyValues&&"desc"===dir||"bottom"===alignEmptyValues&&"asc"===dir)&&(emptyAlign*=-1),emptyAlign},date:function date(a,b,aRow,bRow,column,dir,params){return params.format||(params.format="DD/MM/YYYY"),this.sorters.datetime.call(this,a,b,aRow,bRow,column,dir,params)},time:function time(a,b,aRow,bRow,column,dir,params){return params.format||(params.format="HH:mm"),this.sorters.datetime.call(this,a,b,aRow,bRow,column,dir,params)},datetime:function datetime(a,b,aRow,bRow,column,dir,params){var format=params.format||"DD/MM/YYYY HH:mm:ss",alignEmptyValues=params.alignEmptyValues,emptyAlign=0;if("undefined"!=typeof moment){if(a=moment(a,format),b=moment(b,format),a.isValid()){if(b.isValid())return a-b;emptyAlign=1}else emptyAlign=b.isValid()?-1:0;return("top"===alignEmptyValues&&"desc"===dir||"bottom"===alignEmptyValues&&"asc"===dir)&&(emptyAlign*=-1),emptyAlign}console.error("Sort Error - 'datetime' sorter is dependant on moment.js")},boolean:function boolean(a,b,aRow,bRow,column,dir,params){var el1,el2;return(!0===a||"true"===a||"True"===a||1===a?1:0)-(!0===b||"true"===b||"True"===b||1===b?1:0)},array:function array(a,b,aRow,bRow,column,dir,params){var el1=0,el2=0,type=params.type||"length",alignEmptyValues=params.alignEmptyValues,emptyAlign=0;function calc(value){switch(type){case"length":return value.length;case"sum":return value.reduce((function(c,d){return c+d}));case"max":return Math.max.apply(null,value);case"min":return Math.min.apply(null,value);case"avg":return value.reduce((function(c,d){return c+d}))/value.length}}if(Array.isArray(a)){if(Array.isArray(b))return(el1=a?calc(a):0)-(el2=b?calc(b):0);alignEmptyValues=1}else alignEmptyValues=Array.isArray(b)?-1:0;return("top"===alignEmptyValues&&"desc"===dir||"bottom"===alignEmptyValues&&"asc"===dir)&&(emptyAlign*=-1),emptyAlign},exists:function exists(a,b,aRow,bRow,column,dir,params){var el1,el2;return(void 0===a?0:1)-(void 0===b?0:1)},alphanum:function alphanum(as,bs,aRow,bRow,column,dir,params){var a,b,a1,b1,i=0,L,rx=/(\d+)|(\D+)/g,rd=/\d/,alignEmptyValues=params.alignEmptyValues,emptyAlign=0;if(as||0===as){if(bs||0===bs){if(isFinite(as)&&isFinite(bs))return as-bs;if((a=String(as).toLowerCase())===(b=String(bs).toLowerCase()))return 0;if(!rd.test(a)||!rd.test(b))return a>b?1:-1;for(a=a.match(rx),b=b.match(rx),L=a.length>b.length?b.length:a.length;ib1?1:-1;return a.length>b.length}emptyAlign=1}else emptyAlign=bs||0===bs?-1:0;return("top"===alignEmptyValues&&"desc"===dir||"bottom"===alignEmptyValues&&"asc"===dir)&&(emptyAlign*=-1),emptyAlign}},Tabulator.prototype.registerModule("sort",Sort);var Validate=function Validate(table){this.table=table,this.invalidCells=[]};return Validate.prototype.initializeColumn=function(column){var self=this,config=[],validator;column.definition.validator&&(Array.isArray(column.definition.validator)?column.definition.validator.forEach((function(item){(validator=self._extractValidator(item))&&config.push(validator)})):(validator=this._extractValidator(column.definition.validator))&&config.push(validator),column.modules.validate=!!config.length&&config)},Validate.prototype._extractValidator=function(value){var type,params,pos;switch(void 0===value?"undefined":_typeof(value)){case"string":return(pos=value.indexOf(":"))>-1?(type=value.substring(0,pos),params=value.substring(pos+1)):type=value,this._buildValidator(type,params);case"function":return this._buildValidator(value);case"object":return this._buildValidator(value.type,value.parameters)}},Validate.prototype._buildValidator=function(type,params){var func="function"==typeof type?type:this.validators[type];return func?{type:"function"==typeof type?"function":type,func:func,params:params}:(console.warn("Validator Setup Error - No matching validator found:",type),!1)},Validate.prototype.validate=function(validators,cell,value){var self=this,valid=[],invalidIndex=this.invalidCells.indexOf(cell);return validators&&validators.forEach((function(item){item.func.call(self,cell.getComponent(),value,item.params)||valid.push({type:item.type,parameters:item.params})})),valid=!valid.length||valid,cell.modules.validate||(cell.modules.validate={}),!0===valid?(cell.modules.validate.invalid=!1,cell.getElement().classList.remove("tabulator-validation-fail"),invalidIndex>-1&&this.invalidCells.splice(invalidIndex,1)):(cell.modules.validate.invalid=!0,"manual"!==this.table.options.validationMode&&cell.getElement().classList.add("tabulator-validation-fail"),-1==invalidIndex&&this.invalidCells.push(cell)),valid},Validate.prototype.getInvalidCells=function(){var output=[];return this.invalidCells.forEach((function(cell){output.push(cell.getComponent())})),output},Validate.prototype.clearValidation=function(cell){var invalidIndex;cell.modules.validate&&cell.modules.validate.invalid&&(cell.element.classList.remove("tabulator-validation-fail"),cell.modules.validate.invalid=!1,(invalidIndex=this.invalidCells.indexOf(cell))>-1&&this.invalidCells.splice(invalidIndex,1))},Validate.prototype.validators={integer:function integer(cell,value,parameters){return""===value||null==value||"number"==typeof(value=Number(value))&&isFinite(value)&&Math.floor(value)===value},float:function float(cell,value,parameters){return""===value||null==value||"number"==typeof(value=Number(value))&&isFinite(value)&&value%1!=0},numeric:function numeric(cell,value,parameters){return""===value||null==value||!isNaN(value)},string:function string(cell,value,parameters){return""===value||null==value||isNaN(value)},max:function max(cell,value,parameters){return""===value||null==value||parseFloat(value)<=parameters},min:function min(cell,value,parameters){return""===value||null==value||parseFloat(value)>=parameters},starts:function starts(cell,value,parameters){return""===value||null==value||String(value).toLowerCase().startsWith(String(parameters).toLowerCase())},ends:function ends(cell,value,parameters){return""===value||null==value||String(value).toLowerCase().endsWith(String(parameters).toLowerCase())},minLength:function minLength(cell,value,parameters){return""===value||null==value||String(value).length>=parameters},maxLength:function maxLength(cell,value,parameters){return""===value||null==value||String(value).length<=parameters},in:function _in(cell,value,parameters){return""===value||null==value||("string"==typeof parameters&&(parameters=parameters.split("|")),""===value||parameters.indexOf(value)>-1)},regex:function regex(cell,value,parameters){return""===value||null==value||new RegExp(parameters).test(value);var reg},unique:function unique(cell,value,parameters){if(""===value||null==value)return!0;var unique=!0,cellData=cell.getData(),column=cell.getColumn()._getSelf();return this.table.rowManager.rows.forEach((function(row){var data=row.getData();data!==cellData&&value==column.getFieldValue(data)&&(unique=!1)})),unique},required:function required(cell,value,parameters){return""!==value&&null!=value}},Tabulator.prototype.registerModule("validate",Validate),Tabulator})); \ No newline at end of file diff --git a/install/bin/electron/resources/app/vendor/tabulator/js/tabulator.min.orig.js b/install/bin/electron/resources/app/vendor/tabulator/js/tabulator.min.orig.js new file mode 100644 index 0000000..74f4780 --- /dev/null +++ b/install/bin/electron/resources/app/vendor/tabulator/js/tabulator.min.orig.js @@ -0,0 +1,12 @@ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ +var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};!function(e,t){"object"===("undefined"==typeof exports?"undefined":_typeof(exports))&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.Tabulator=t()}(this,function(){"use strict";Array.prototype.findIndex||Object.defineProperty(Array.prototype,"findIndex",{value:function(e){if(null==this)throw new TypeError('"this" is null or not defined');var t=Object(this),o=t.length>>>0;if("function"!=typeof e)throw new TypeError("predicate must be a function");for(var i=arguments[1],n=0;n>>0;if("function"!=typeof e)throw new TypeError("predicate must be a function");for(var i=arguments[1],n=0;n>>0;if(0===i)return!1;for(var n=0|t,s=Math.max(n>=0?n:i-Math.abs(n),0);so?(t=e-o,this.element.style.marginLeft=-t+"px"):this.element.style.marginLeft=0,this.scrollLeft=e,this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.scrollHorizontal()},t.prototype.generateColumnsFromRowData=function(e){var t,o,i=[];if(e&&e.length){t=e[0];for(var n in t){var s={field:n,title:n},r=t[n];switch(void 0===r?"undefined":_typeof(r)){case"undefined":o="string";break;case"boolean":o="boolean";break;case"object":o=Array.isArray(r)?"array":"string";break;default:o=isNaN(r)||""===r?r.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)?"alphanum":"string":"number"}s.sorter=o,i.push(s)}this.table.options.columns=i,this.setColumns(this.table.options.columns)}},t.prototype.setColumns=function(e,t){for(var o=this;o.headersElement.firstChild;)o.headersElement.removeChild(o.headersElement.firstChild);o.columns=[],o.columnsByIndex=[],o.columnsByField={},o.table.modExists("frozenColumns")&&o.table.modules.frozenColumns.reset(),e.forEach(function(e,t){o._addColumn(e)}),o._reIndexColumns(),o.table.options.responsiveLayout&&o.table.modExists("responsiveLayout",!0)&&o.table.modules.responsiveLayout.initialize(),o.redraw(!0)},t.prototype._addColumn=function(e,t,o){var i=new n(e,this),s=i.getElement(),r=o?this.findColumnIndex(o):o;if(o&&r>-1){var a=this.columns.indexOf(o.getTopColumn()),l=o.getElement();t?(this.columns.splice(a,0,i),l.parentNode.insertBefore(s,l)):(this.columns.splice(a+1,0,i),l.parentNode.insertBefore(s,l.nextSibling))}else t?(this.columns.unshift(i),this.headersElement.insertBefore(i.getElement(),this.headersElement.firstChild)):(this.columns.push(i),this.headersElement.appendChild(i.getElement())),i.columnRendered();return i},t.prototype.registerColumnField=function(e){e.definition.field&&(this.columnsByField[e.definition.field]=e)},t.prototype.registerColumnPosition=function(e){this.columnsByIndex.push(e)},t.prototype._reIndexColumns=function(){this.columnsByIndex=[],this.columns.forEach(function(e){e.reRegisterPosition()})},t.prototype._verticalAlignHeaders=function(){var e=this,t=0;e.columns.forEach(function(e){var o;e.clearVerticalAlign(),(o=e.getHeight())>t&&(t=o)}),e.columns.forEach(function(o){o.verticalAlign(e.table.options.columnHeaderVertAlign,t)}),e.rowManager.adjustTableSize()},t.prototype.findColumn=function(e){var t=this;if("object"!=(void 0===e?"undefined":_typeof(e)))return this.columnsByField[e]||!1;if(e instanceof n)return e;if(e instanceof o)return e._getSelf()||!1;if("undefined"!=typeof HTMLElement&&e instanceof HTMLElement){return t.columns.find(function(t){return t.element===e})||!1}return!1},t.prototype.getColumnByField=function(e){return this.columnsByField[e]},t.prototype.getColumnsByFieldRoot=function(e){var t=this,o=[];return Object.keys(this.columnsByField).forEach(function(i){i.split(".")[0]===e&&o.push(t.columnsByField[i])}),o},t.prototype.getColumnByIndex=function(e){return this.columnsByIndex[e]},t.prototype.getFirstVisibileColumn=function(e){var e=this.columnsByIndex.findIndex(function(e){return e.visible});return e>-1&&this.columnsByIndex[e]},t.prototype.getColumns=function(){return this.columns},t.prototype.findColumnIndex=function(e){return this.columnsByIndex.findIndex(function(t){return e===t})},t.prototype.getRealColumns=function(){return this.columnsByIndex},t.prototype.traverse=function(e){this.columnsByIndex.forEach(function(t,o){e(t,o)})},t.prototype.getDefinitions=function(e){var t=this,o=[];return t.columnsByIndex.forEach(function(t){(!e||e&&t.visible)&&o.push(t.getDefinition())}),o},t.prototype.getDefinitionTree=function(){var e=this,t=[];return e.columns.forEach(function(e){t.push(e.getDefinition(!0))}),t},t.prototype.getComponents=function(e){var t=this,o=[];return(e?t.columns:t.columnsByIndex).forEach(function(e){o.push(e.getComponent())}),o},t.prototype.getWidth=function(){var e=0;return this.columnsByIndex.forEach(function(t){t.visible&&(e+=t.getWidth())}),e},t.prototype.moveColumn=function(e,t,o){this.moveColumnActual(e,t,o),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.initialize(),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows),t.element.parentNode.insertBefore(e.element,t.element),o&&t.element.parentNode.insertBefore(t.element,e.element),this._verticalAlignHeaders(),this.table.rowManager.reinitialize()},t.prototype.moveColumnActual=function(e,t,o){e.parent.isGroup?this._moveColumnInArray(e.parent.columns,e,t,o):this._moveColumnInArray(this.columns,e,t,o),this._moveColumnInArray(this.columnsByIndex,e,t,o,!0),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.initialize(),this.table.options.columnMoved&&this.table.options.columnMoved.call(this.table,e.getComponent(),this.table.columnManager.getComponents()),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.columns&&this.table.modules.persistence.save("columns")},t.prototype._moveColumnInArray=function(e,t,o,i,n){var s,r=e.indexOf(t);r>-1&&(e.splice(r,1),s=e.indexOf(o),s>-1?i&&(s+=1):s=r,e.splice(s,0,t),n&&this.table.rowManager.rows.forEach(function(e){if(e.cells.length){var t=e.cells.splice(r,1)[0];e.cells.splice(s,0,t)}}))},t.prototype.scrollToColumn=function(e,t,o){var i=this,n=0,s=0,r=0,a=e.getElement();return new Promise(function(l,c){if(void 0===t&&(t=i.table.options.scrollToColumnPosition),void 0===o&&(o=i.table.options.scrollToColumnIfVisible),e.visible){switch(t){case"middle":case"center":r=-i.element.clientWidth/2;break;case"right":r=a.clientWidth-i.headersElement.clientWidth}if(!o&&(s=a.offsetLeft)>0&&s+a.offsetWidthe.rowManager.element.clientHeight&&(t-=e.rowManager.element.offsetWidth-e.rowManager.element.clientWidth),this.columnsByIndex.forEach(function(i){var n,s,r;i.visible&&(n=i.definition.width||0,s=void 0===i.minWidth?e.table.options.columnMinWidth:parseInt(i.minWidth),r="string"==typeof n?n.indexOf("%")>-1?t/100*parseInt(n):parseInt(n):n,o+=r>s?r:s)}),o},t.prototype.addColumn=function(e,t,o){var i=this;return new Promise(function(n,s){var r=i._addColumn(e,t,o);i._reIndexColumns(),i.table.options.responsiveLayout&&i.table.modExists("responsiveLayout",!0)&&i.table.modules.responsiveLayout.initialize(),i.table.modExists("columnCalcs")&&i.table.modules.columnCalcs.recalc(i.table.rowManager.activeRows),i.redraw(),"fitColumns"!=i.table.modules.layout.getMode()&&r.reinitializeWidth(),i._verticalAlignHeaders(),i.table.rowManager.reinitialize(),n(r)})},t.prototype.deregisterColumn=function(e){var t,o=e.getField();o&&delete this.columnsByField[o],t=this.columnsByIndex.indexOf(e),t>-1&&this.columnsByIndex.splice(t,1),t=this.columns.indexOf(e),t>-1&&this.columns.splice(t,1),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.initialize(),this.redraw()},t.prototype.redraw=function(e){e&&(d.prototype.helpers.elVisible(this.element)&&this._verticalAlignHeaders(),this.table.rowManager.resetScroll(),this.table.rowManager.reinitialize()),["fitColumns","fitDataStretch"].indexOf(this.table.modules.layout.getMode())>-1?this.table.modules.layout.layout():e?this.table.modules.layout.layout():this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update(),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layout(),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows),e&&(this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.columns&&this.table.modules.persistence.save("columns"),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.redraw()),this.table.footerManager.redraw()};var o=function(e){this._column=e,this.type="ColumnComponent"};o.prototype.getElement=function(){return this._column.getElement()},o.prototype.getDefinition=function(){return this._column.getDefinition()},o.prototype.getField=function(){return this._column.getField()},o.prototype.getCells=function(){var e=[];return this._column.cells.forEach(function(t){e.push(t.getComponent())}),e},o.prototype.getVisibility=function(){return console.warn("getVisibility function is deprecated, you should now use the isVisible function"),this._column.visible},o.prototype.isVisible=function(){return this._column.visible},o.prototype.show=function(){this._column.isGroup?this._column.columns.forEach(function(e){e.show()}):this._column.show()},o.prototype.hide=function(){this._column.isGroup?this._column.columns.forEach(function(e){e.hide()}):this._column.hide()},o.prototype.toggle=function(){this._column.visible?this.hide():this.show()},o.prototype.delete=function(){return this._column.delete()},o.prototype.getSubColumns=function(){var e=[];return this._column.columns.length&&this._column.columns.forEach(function(t){e.push(t.getComponent())}),e},o.prototype.getParentColumn=function(){return this._column.parent instanceof n&&this._column.parent.getComponent()},o.prototype._getSelf=function(){return this._column},o.prototype.scrollTo=function(){return this._column.table.columnManager.scrollToColumn(this._column)},o.prototype.getTable=function(){return this._column.table},o.prototype.headerFilterFocus=function(){this._column.table.modExists("filter",!0)&&this._column.table.modules.filter.setHeaderFilterFocus(this._column)},o.prototype.reloadHeaderFilter=function(){this._column.table.modExists("filter",!0)&&this._column.table.modules.filter.reloadHeaderFilter(this._column)},o.prototype.getHeaderFilterValue=function(){if(this._column.table.modExists("filter",!0))return this._column.table.modules.filter.getHeaderFilterValue(this._column)},o.prototype.setHeaderFilterValue=function(e){this._column.table.modExists("filter",!0)&&this._column.table.modules.filter.setHeaderFilterValue(this._column,e)},o.prototype.move=function(e,t){var o=this._column.table.columnManager.findColumn(e);o?this._column.table.columnManager.moveColumn(this._column,o,t):console.warn("Move Error - No matching column found:",o)},o.prototype.getNextColumn=function(){var e=this._column.nextColumn();return!!e&&e.getComponent()},o.prototype.getPrevColumn=function(){var e=this._column.prevColumn();return!!e&&e.getComponent()},o.prototype.updateDefinition=function(e){return this._column.updateDefinition(e)},o.prototype.getWidth=function(){return this._column.getWidth()},o.prototype.setWidth=function(e){return!0===e?this._column.reinitializeWidth(!0):this._column.setWidth(e)},o.prototype.validate=function(){return this._column.validate()};var n=function e(t,o){var i=this;this.table=o.table,this.definition=t,this.parent=o,this.type="column",this.columns=[],this.cells=[],this.element=this.createElement(),this.contentElement=!1,this.titleElement=!1,this.groupElement=this.createGroupElement(),this.isGroup=!1,this.tooltip=!1,this.hozAlign="",this.vertAlign="",this.field="",this.fieldStructure="",this.getFieldValue="",this.setFieldValue="",this.titleFormatterRendered=!1,this.setField(this.definition.field),this.table.options.invalidOptionWarnings&&this.checkDefinition(),this.modules={},this.cellEvents={cellClick:!1,cellDblClick:!1,cellContext:!1,cellTap:!1,cellDblTap:!1,cellTapHold:!1,cellMouseEnter:!1,cellMouseLeave:!1,cellMouseOver:!1,cellMouseOut:!1,cellMouseMove:!1},this.width=null,this.widthStyled="",this.minWidth=null,this.minWidthStyled="",this.widthFixed=!1,this.visible=!0,this.component=null,this._mapDepricatedFunctionality(),t.columns?(this.isGroup=!0,t.columns.forEach(function(t,o){var n=new e(t,i);i.attachColumn(n)}),i.checkColumnVisibility()):o.registerColumnField(this),t.rowHandle&&!1!==this.table.options.movableRows&&this.table.modExists("moveRow")&&this.table.modules.moveRow.setHandle(!0),this._buildHeader(),this.bindModuleColumns()};n.prototype.createElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-col"),e.setAttribute("role","columnheader"),e.setAttribute("aria-sort","none"),e},n.prototype.createGroupElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-col-group-cols"),e},n.prototype.checkDefinition=function(){var e=this;Object.keys(this.definition).forEach(function(t){-1===e.defaultOptionList.indexOf(t)&&console.warn("Invalid column definition option in '"+(e.field||e.definition.title)+"' column:",t)})},n.prototype.setField=function(e){this.field=e,this.fieldStructure=e?this.table.options.nestedFieldSeparator?e.split(this.table.options.nestedFieldSeparator):[e]:[],this.getFieldValue=this.fieldStructure.length>1?this._getNestedData:this._getFlatData,this.setFieldValue=this.fieldStructure.length>1?this._setNestedData:this._setFlatData},n.prototype.registerColumnPosition=function(e){this.parent.registerColumnPosition(e)},n.prototype.registerColumnField=function(e){this.parent.registerColumnField(e)},n.prototype.reRegisterPosition=function(){this.isGroup?this.columns.forEach(function(e){e.reRegisterPosition()}):this.registerColumnPosition(this)},n.prototype._mapDepricatedFunctionality=function(){void 0!==this.definition.hideInHtml&&(this.definition.htmlOutput=!this.definition.hideInHtml,console.warn("hideInHtml column definition property is deprecated, you should now use htmlOutput")),void 0!==this.definition.align&&(this.definition.hozAlign=this.definition.align,console.warn("align column definition property is deprecated, you should now use hozAlign")),void 0!==this.definition.downloadTitle&&(this.definition.titleDownload=this.definition.downloadTitle,console.warn("downloadTitle definition property is deprecated, you should now use titleDownload"))},n.prototype.setTooltip=function(){var e=this,t=e.definition,o=t.headerTooltip||!1===t.tooltip?t.headerTooltip:e.table.options.tooltipsHeader;o?!0===o?t.field?e.table.modules.localize.bind("columns|"+t.field,function(o){e.element.setAttribute("title",o||t.title)}):e.element.setAttribute("title",t.title):("function"==typeof o&&!1===(o=o(e.getComponent()))&&(o=""),e.element.setAttribute("title",o)):e.element.setAttribute("title","")},n.prototype._buildHeader=function(){for(var e=this,t=e.definition;e.element.firstChild;)e.element.removeChild(e.element.firstChild);t.headerVertical&&(e.element.classList.add("tabulator-col-vertical"),"flip"===t.headerVertical&&e.element.classList.add("tabulator-col-vertical-flip")),e.contentElement=e._bindEvents(),e.contentElement=e._buildColumnHeaderContent(),e.element.appendChild(e.contentElement),e.isGroup?e._buildGroupHeader():e._buildColumnHeader(),e.setTooltip(),e.table.options.resizableColumns&&e.table.modExists("resizeColumns")&&e.table.modules.resizeColumns.initializeColumn("header",e,e.element),t.headerFilter&&e.table.modExists("filter")&&e.table.modExists("edit")&&(void 0!==t.headerFilterPlaceholder&&t.field&&e.table.modules.localize.setHeaderFilterColumnPlaceholder(t.field,t.headerFilterPlaceholder),e.table.modules.filter.initializeColumn(e)),e.table.modExists("frozenColumns")&&e.table.modules.frozenColumns.initializeColumn(e),e.table.options.movableColumns&&!e.isGroup&&e.table.modExists("moveColumn")&&e.table.modules.moveColumn.initializeColumn(e),(t.topCalc||t.bottomCalc)&&e.table.modExists("columnCalcs")&&e.table.modules.columnCalcs.initializeColumn(e),e.table.modExists("persistence")&&e.table.modules.persistence.config.columns&&e.table.modules.persistence.initializeColumn(e),e.element.addEventListener("mouseenter",function(t){e.setTooltip()})},n.prototype._bindEvents=function(){var e,t,o,i=this,n=i.definition;"function"==typeof n.headerClick&&i.element.addEventListener("click",function(e){n.headerClick(e,i.getComponent())}),"function"==typeof n.headerDblClick&&i.element.addEventListener("dblclick",function(e){n.headerDblClick(e,i.getComponent())}),"function"==typeof n.headerContext&&i.element.addEventListener("contextmenu",function(e){n.headerContext(e,i.getComponent())}),"function"==typeof n.headerTap&&(o=!1,i.element.addEventListener("touchstart",function(e){o=!0},{passive:!0}),i.element.addEventListener("touchend",function(e){o&&n.headerTap(e,i.getComponent()),o=!1})),"function"==typeof n.headerDblTap&&(e=null,i.element.addEventListener("touchend",function(t){e?(clearTimeout(e),e=null,n.headerDblTap(t,i.getComponent())):e=setTimeout(function(){clearTimeout(e),e=null},300)})),"function"==typeof n.headerTapHold&&(t=null,i.element.addEventListener("touchstart",function(e){clearTimeout(t),t=setTimeout(function(){clearTimeout(t),t=null,o=!1,n.headerTapHold(e,i.getComponent())},1e3)},{passive:!0}),i.element.addEventListener("touchend",function(e){clearTimeout(t),t=null})),"function"==typeof n.cellClick&&(i.cellEvents.cellClick=n.cellClick),"function"==typeof n.cellDblClick&&(i.cellEvents.cellDblClick=n.cellDblClick),"function"==typeof n.cellContext&&(i.cellEvents.cellContext=n.cellContext),"function"==typeof n.cellMouseEnter&&(i.cellEvents.cellMouseEnter=n.cellMouseEnter),"function"==typeof n.cellMouseLeave&&(i.cellEvents.cellMouseLeave=n.cellMouseLeave),"function"==typeof n.cellMouseOver&&(i.cellEvents.cellMouseOver=n.cellMouseOver),"function"==typeof n.cellMouseOut&&(i.cellEvents.cellMouseOut=n.cellMouseOut),"function"==typeof n.cellMouseMove&&(i.cellEvents.cellMouseMove=n.cellMouseMove),"function"==typeof n.cellTap&&(i.cellEvents.cellTap=n.cellTap),"function"==typeof n.cellDblTap&&(i.cellEvents.cellDblTap=n.cellDblTap),"function"==typeof n.cellTapHold&&(i.cellEvents.cellTapHold=n.cellTapHold),"function"==typeof n.cellEdited&&(i.cellEvents.cellEdited=n.cellEdited),"function"==typeof n.cellEditing&&(i.cellEvents.cellEditing=n.cellEditing),"function"==typeof n.cellEditCancelled&&(i.cellEvents.cellEditCancelled=n.cellEditCancelled)},n.prototype._buildColumnHeader=function(){var e=this,t=e.definition,o=e.table;if(o.modExists("sort")&&o.modules.sort.initializeColumn(e,e.contentElement),(t.headerContextMenu||t.headerMenu)&&o.modExists("menu")&&o.modules.menu.initializeColumnHeader(e),o.modExists("format")&&o.modules.format.initializeColumn(e),void 0!==t.editor&&o.modExists("edit")&&o.modules.edit.initializeColumn(e),void 0!==t.validator&&o.modExists("validate")&&o.modules.validate.initializeColumn(e),o.modExists("mutator")&&o.modules.mutator.initializeColumn(e),o.modExists("accessor")&&o.modules.accessor.initializeColumn(e),_typeof(o.options.responsiveLayout)&&o.modExists("responsiveLayout")&&o.modules.responsiveLayout.initializeColumn(e),void 0!==t.visible&&(t.visible?e.show(!0):e.hide(!0)),t.cssClass){t.cssClass.split(" ").forEach(function(t){e.element.classList.add(t)})}t.field&&this.element.setAttribute("tabulator-field",t.field),e.setMinWidth(void 0===t.minWidth?e.table.options.columnMinWidth:parseInt(t.minWidth)),e.reinitializeWidth(),e.tooltip=e.definition.tooltip||!1===e.definition.tooltip?e.definition.tooltip:e.table.options.tooltips,e.hozAlign=void 0===e.definition.hozAlign?e.table.options.cellHozAlign:e.definition.hozAlign,e.vertAlign=void 0===e.definition.vertAlign?e.table.options.cellVertAlign:e.definition.vertAlign},n.prototype._buildColumnHeaderContent=function(){var e=(this.definition,this.table,document.createElement("div"));return e.classList.add("tabulator-col-content"),this.titleElement=this._buildColumnHeaderTitle(),e.appendChild(this.titleElement),e},n.prototype._buildColumnHeaderTitle=function(){var e=this,t=e.definition,o=e.table,i=document.createElement("div");if(i.classList.add("tabulator-col-title"),t.editableTitle){var n=document.createElement("input");n.classList.add("tabulator-title-editor"),n.addEventListener("click",function(e){e.stopPropagation(),n.focus()}),n.addEventListener("change",function(){t.title=n.value,o.options.columnTitleChanged.call(e.table,e.getComponent())}),i.appendChild(n),t.field?o.modules.localize.bind("columns|"+t.field,function(e){n.value=e||t.title||" "}):n.value=t.title||" "}else t.field?o.modules.localize.bind("columns|"+t.field,function(o){e._formatColumnHeaderTitle(i,o||t.title||" ")}):e._formatColumnHeaderTitle(i,t.title||" ");return i},n.prototype._formatColumnHeaderTitle=function(e,t){var o,i,n,s,r,a=this;if(this.definition.titleFormatter&&this.table.modExists("format"))switch(o=this.table.modules.format.getFormatter(this.definition.titleFormatter),r=function(e){a.titleFormatterRendered=e},s={getValue:function(){return t},getElement:function(){return e}},n=this.definition.titleFormatterParams||{},n="function"==typeof n?n():n,i=o.call(this.table.modules.format,s,n,r),void 0===i?"undefined":_typeof(i)){case"object":i instanceof Node?e.appendChild(i):(e.innerHTML="",console.warn("Format Error - Title formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:",i));break;case"undefined":case"null":e.innerHTML="";break;default:e.innerHTML=i}else e.innerHTML=t},n.prototype._buildGroupHeader=function(){var e=this;if(this.element.classList.add("tabulator-col-group"),this.element.setAttribute("role","columngroup"),this.element.setAttribute("aria-title",this.definition.title),this.definition.cssClass){this.definition.cssClass.split(" ").forEach(function(t){e.element.classList.add(t)})}(this.definition.headerContextMenu||this.definition.headerMenu)&&this.table.modExists("menu")&&this.table.modules.menu.initializeColumnHeader(this),this.element.appendChild(this.groupElement)},n.prototype._getFlatData=function(e){return e[this.field]},n.prototype._getNestedData=function(e){for(var t,o=e,i=this.fieldStructure,n=i.length,s=0;s-1&&this._nextVisibleColumn(e+1)},n.prototype._nextVisibleColumn=function(e){var t=this.table.columnManager.getColumnByIndex(e);return!t||t.visible?t:this._nextVisibleColumn(e+1)},n.prototype.prevColumn=function(){var e=this.table.columnManager.findColumnIndex(this);return e>-1&&this._prevVisibleColumn(e-1)},n.prototype._prevVisibleColumn=function(e){var t=this.table.columnManager.getColumnByIndex(e);return!t||t.visible?t:this._prevVisibleColumn(e-1)},n.prototype.reinitializeWidth=function(e){this.widthFixed=!1, +void 0===this.definition.width||e||this.setWidth(this.definition.width),this.table.modExists("filter")&&this.table.modules.filter.hideHeaderFilterElements(),this.fitToData(),this.table.modExists("filter")&&this.table.modules.filter.showHeaderFilterElements()},n.prototype.fitToData=function(){var e=this;this.widthFixed||(this.element.style.width="",e.cells.forEach(function(e){e.clearWidth()}));var t=this.element.offsetWidth;e.width&&this.widthFixed||(e.cells.forEach(function(e){var o=e.getWidth();o>t&&(t=o)}),t&&e.setWidthActual(t+1))},n.prototype.updateDefinition=function(e){var t=this;return new Promise(function(o,i){var n;t.isGroup?(console.warn("Column Update Error - The updateDefintion function is only available on columns, not column groups"),i("Column Update Error - The updateDefintion function is only available on columns, not column groups")):(n=Object.assign({},t.getDefinition()),n=Object.assign(n,e),t.table.columnManager.addColumn(n,!1,t).then(function(e){n.field==t.field&&(t.field=!1),t.delete().then(function(){o(e.getComponent())}).catch(function(e){i(e)})}).catch(function(e){i(e)}))})},n.prototype.deleteCell=function(e){var t=this.cells.indexOf(e);t>-1&&this.cells.splice(t,1)},n.prototype.defaultOptionList=["title","field","columns","visible","align","hozAlign","vertAlign","width","minWidth","widthGrow","widthShrink","resizable","frozen","responsive","tooltip","cssClass","rowHandle","hideInHtml","print","htmlOutput","sorter","sorterParams","formatter","formatterParams","variableHeight","editable","editor","editorParams","validator","mutator","mutatorParams","mutatorData","mutatorDataParams","mutatorEdit","mutatorEditParams","mutatorClipboard","mutatorClipboardParams","accessor","accessorParams","accessorData","accessorDataParams","accessorDownload","accessorDownloadParams","accessorClipboard","accessorClipboardParams","accessorPrint","accessorPrintParams","accessorHtmlOutput","accessorHtmlOutputParams","clipboard","download","downloadTitle","topCalc","topCalcParams","topCalcFormatter","topCalcFormatterParams","bottomCalc","bottomCalcParams","bottomCalcFormatter","bottomCalcFormatterParams","cellClick","cellDblClick","cellContext","cellTap","cellDblTap","cellTapHold","cellMouseEnter","cellMouseLeave","cellMouseOver","cellMouseOut","cellMouseMove","cellEditing","cellEdited","cellEditCancelled","headerSort","headerSortStartingDir","headerSortTristate","headerClick","headerDblClick","headerContext","headerTap","headerDblTap","headerTapHold","headerTooltip","headerVertical","editableTitle","titleFormatter","titleFormatterParams","headerFilter","headerFilterPlaceholder","headerFilterParams","headerFilterEmptyCheck","headerFilterFunc","headerFilterFuncParams","headerFilterLiveFilter","print","headerContextMenu","headerMenu","contextMenu","formatterPrint","formatterPrintParams","formatterClipboard","formatterClipboardParams","formatterHtmlOutput","formatterHtmlOutputParams","titlePrint","titleClipboard","titleHtmlOutput","titleDownload"],n.prototype.getComponent=function(){return this.component||(this.component=new o(this)),this.component};var s=function(e){this.table=e,this.element=this.createHolderElement(),this.tableElement=this.createTableElement(),this.heightFixer=this.createTableElement(),this.columnManager=null,this.height=0,this.firstRender=!1,this.renderMode="virtual",this.fixedHeight=!1,this.rows=[],this.activeRows=[],this.activeRowsCount=0,this.displayRows=[],this.displayRowsCount=0,this.scrollTop=0,this.scrollLeft=0,this.vDomRowHeight=20,this.vDomTop=0,this.vDomBottom=0,this.vDomScrollPosTop=0,this.vDomScrollPosBottom=0,this.vDomTopPad=0,this.vDomBottomPad=0,this.vDomMaxRenderChain=90,this.vDomWindowBuffer=0,this.vDomWindowMinTotalRows=20,this.vDomWindowMinMarginRows=5,this.vDomTopNewRows=[],this.vDomBottomNewRows=[],this.rowNumColumn=!1,this.redrawBlock=!1,this.redrawBlockRestoreConfig=!1,this.redrawBlockRederInPosition=!1};s.prototype.createHolderElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-tableHolder"),e.setAttribute("tabindex",0),e},s.prototype.createTableElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-table"),e},s.prototype.getElement=function(){return this.element},s.prototype.getTableElement=function(){return this.tableElement},s.prototype.getRowPosition=function(e,t){return t?this.activeRows.indexOf(e):this.rows.indexOf(e)},s.prototype.setColumnManager=function(e){this.columnManager=e},s.prototype.initialize=function(){var e=this;e.setRenderMode(),e.element.appendChild(e.tableElement),e.firstRender=!0,e.element.addEventListener("scroll",function(){var t=e.element.scrollLeft;e.scrollLeft!=t&&(e.columnManager.scrollHorizontal(t),e.table.options.groupBy&&e.table.modules.groupRows.scrollHeaders(t),e.table.modExists("columnCalcs")&&e.table.modules.columnCalcs.scrollHorizontal(t),e.table.options.scrollHorizontal(t)),e.scrollLeft=t}),"virtual"===this.renderMode&&e.element.addEventListener("scroll",function(){var t=e.element.scrollTop,o=e.scrollTop>t;e.scrollTop!=t?(e.scrollTop=t,e.scrollVertical(o),"scroll"==e.table.options.ajaxProgressiveLoad&&e.table.modules.ajax.nextPage(e.element.scrollHeight-e.element.clientHeight-t),e.table.options.scrollVertical(t)):e.scrollTop=t})},s.prototype.findRow=function(e){var t=this;if("object"!=(void 0===e?"undefined":_typeof(e))){if(void 0===e||null===e)return!1;return t.rows.find(function(o){return o.data[t.table.options.index]==e})||!1}if(e instanceof a)return e;if(e instanceof r)return e._getSelf()||!1;if("undefined"!=typeof HTMLElement&&e instanceof HTMLElement){return t.rows.find(function(t){return t.element===e})||!1}return!1},s.prototype.getRowFromDataObject=function(e){return this.rows.find(function(t){return t.data===e})||!1},s.prototype.getRowFromPosition=function(e,t){return t?this.activeRows[e]:this.rows[e]},s.prototype.scrollToRow=function(e,t,o){var i,n=this,s=this.getDisplayRows().indexOf(e),r=e.getElement(),a=0;return new Promise(function(e,l){if(s>-1){if(void 0===t&&(t=n.table.options.scrollToRowPosition),void 0===o&&(o=n.table.options.scrollToRowIfVisible),"nearest"===t)switch(n.renderMode){case"classic":i=d.prototype.helpers.elOffset(r).top,t=Math.abs(n.element.scrollTop-i)>Math.abs(n.element.scrollTop+n.element.clientHeight-i)?"bottom":"top";break;case"virtual":t=Math.abs(n.vDomTop-s)>Math.abs(n.vDomBottom-s)?"bottom":"top"}if(!o&&d.prototype.helpers.elVisible(r)&&(a=d.prototype.helpers.elOffset(r).top-d.prototype.helpers.elOffset(n.element).top)>0&&a-1&&this.activeRows.splice(i,1),o>-1&&this.rows.splice(o,1),this.setActiveRows(this.activeRows),this.displayRowIterator(function(t){var o=t.indexOf(e);o>-1&&t.splice(o,1)}),t||this.reRenderInPosition(),this.regenerateRowNumbers(),this.table.options.rowDeleted.call(this.table,e.getComponent()),this.table.options.dataEdited.call(this.table,this.getData()),this.table.options.groupBy&&this.table.modExists("groupRows")?this.table.modules.groupRows.updateGroupRows(!0):this.table.options.pagination&&this.table.modExists("page")?this.refreshActiveData(!1,!1,!0):this.table.options.pagination&&this.table.modExists("page")&&this.refreshActiveData("page")},s.prototype.addRow=function(e,t,o,i){var n=this.addRowActual(e,t,o,i);return this.table.options.history&&this.table.modExists("history")&&this.table.modules.history.action("rowAdd",n,{data:e,pos:t,index:o}),n},s.prototype.addRows=function(e,t,o){var i=this,n=this,s=0,r=[];return new Promise(function(a,l){t=i.findAddRowPos(t),Array.isArray(e)||(e=[e]),s=e.length-1,(void 0===o&&t||void 0!==o&&!t)&&e.reverse(),e.forEach(function(e,i){var s=n.addRow(e,t,o,!0);r.push(s)}),i.table.options.groupBy&&i.table.modExists("groupRows")?i.table.modules.groupRows.updateGroupRows(!0):i.table.options.pagination&&i.table.modExists("page")?i.refreshActiveData(!1,!1,!0):i.reRenderInPosition(),i.table.modExists("columnCalcs")&&i.table.modules.columnCalcs.recalc(i.table.rowManager.activeRows),i.regenerateRowNumbers(),a(r)})},s.prototype.findAddRowPos=function(e){return void 0===e&&(e=this.table.options.addRowPos),"pos"===e&&(e=!0),"bottom"===e&&(e=!1),e},s.prototype.addRowActual=function(e,t,o,i){var n,s,r=e instanceof a?e:new a(e||{},this),l=this.findAddRowPos(t),c=-1;if(!o&&this.table.options.pagination&&"page"==this.table.options.paginationAddRow&&(s=this.getDisplayRows(),l?s.length?o=s[0]:this.activeRows.length&&(o=this.activeRows[this.activeRows.length-1],l=!1):s.length&&(o=s[s.length-1],l=!(s.length1&&(!o||o&&-1==u.indexOf(o)?l?u[0]!==r&&(o=u[0],this._moveRowInArray(r.getGroup().rows,r,o,!l)):u[u.length-1]!==r&&(o=u[u.length-1],this._moveRowInArray(r.getGroup().rows,r,o,!l)):this._moveRowInArray(r.getGroup().rows,r,o,!l))}return o&&(c=this.rows.indexOf(o)),o&&c>-1?(n=this.activeRows.indexOf(o),this.displayRowIterator(function(e){var t=e.indexOf(o);t>-1&&e.splice(l?t:t+1,0,r)}),n>-1&&this.activeRows.splice(l?n:n+1,0,r),this.rows.splice(l?c:c+1,0,r)):l?(this.displayRowIterator(function(e){e.unshift(r)}),this.activeRows.unshift(r),this.rows.unshift(r)):(this.displayRowIterator(function(e){e.push(r)}),this.activeRows.push(r),this.rows.push(r)),this.setActiveRows(this.activeRows),this.table.options.rowAdded.call(this.table,r.getComponent()),this.table.options.dataEdited.call(this.table,this.getData()),i||this.reRenderInPosition(),r},s.prototype.moveRow=function(e,t,o){this.table.options.history&&this.table.modExists("history")&&this.table.modules.history.action("rowMove",e,{posFrom:this.getRowPosition(e),posTo:this.getRowPosition(t),to:t,after:o}),this.moveRowActual(e,t,o),this.regenerateRowNumbers(),this.table.options.rowMoved.call(this.table,e.getComponent())},s.prototype.moveRowActual=function(e,t,o){var i=this;if(this._moveRowInArray(this.rows,e,t,o),this._moveRowInArray(this.activeRows,e,t,o),this.displayRowIterator(function(n){i._moveRowInArray(n,e,t,o)}),this.table.options.groupBy&&this.table.modExists("groupRows")){!o&&t instanceof S&&(t=this.table.rowManager.prevDisplayRow(e)||t);var n=t.getGroup(),s=e.getGroup();n===s?this._moveRowInArray(n.rows,e,t,o):(s&&s.removeRow(e),n.insertRow(e,t,o))}},s.prototype._moveRowInArray=function(e,t,o,i){var n,s,r,a;if(t!==o&&(n=e.indexOf(t),n>-1&&(e.splice(n,1),s=e.indexOf(o),s>-1?i?e.splice(s+1,0,t):e.splice(s,0,t):e.splice(n,0,t)),e===this.getDisplayRows())){r=nn?s:n+1;for(var l=r;l<=a;l++)e[l]&&this.styleRow(e[l],l)}},s.prototype.clearData=function(){this.setData([])},s.prototype.getRowIndex=function(e){return this.findRowIndex(e,this.rows)},s.prototype.getDisplayRowIndex=function(e){var t=this.getDisplayRows().indexOf(e);return t>-1&&t},s.prototype.nextDisplayRow=function(e,t){var o=this.getDisplayRowIndex(e),i=!1;return!1!==o&&o-1)&&o},s.prototype.getData=function(e,t){var o=[];return this.getRows(e).forEach(function(e){"row"==e.type&&o.push(e.getData(t||"data"))}),o},s.prototype.getComponents=function(e){var t=[];return this.getRows(e).forEach(function(e){t.push(e.getComponent())}),t},s.prototype.getDataCount=function(e){return this.getRows(e).length},s.prototype._genRemoteRequest=function(){var e=this,t=this.table,o=t.options,i={};if(t.modExists("page")){if(o.ajaxSorting){var n=this.table.modules.sort.getSort();n.forEach(function(e){delete e.column}),i[this.table.modules.page.paginationDataSentNames.sorters]=n}if(o.ajaxFiltering){var s=this.table.modules.filter.getFilters(!0,!0);i[this.table.modules.page.paginationDataSentNames.filters]=s}this.table.modules.ajax.setParams(i,!0)}t.modules.ajax.sendRequest().then(function(t){e._setDataActual(t,!0)}).catch(function(e){})},s.prototype.filterRefresh=function(){var e=this.table,t=e.options,o=this.scrollLeft;t.ajaxFiltering?"remote"==t.pagination&&e.modExists("page")?(e.modules.page.reset(!0),e.modules.page.setPage(1).then(function(){}).catch(function(){})):t.ajaxProgressiveLoad?e.modules.ajax.loadData().then(function(){}).catch(function(){}):this._genRemoteRequest():this.refreshActiveData("filter"),this.scrollHorizontal(o)},s.prototype.sorterRefresh=function(e){var t=this.table,o=this.table.options,i=this.scrollLeft;o.ajaxSorting?("remote"==o.pagination||o.progressiveLoad)&&t.modExists("page")?(t.modules.page.reset(!0),t.modules.page.setPage(1).then(function(){}).catch(function(){})):o.ajaxProgressiveLoad?t.modules.ajax.loadData().then(function(){}).catch(function(){}):this._genRemoteRequest():this.refreshActiveData(e?"filter":"sort"),this.scrollHorizontal(i)},s.prototype.scrollHorizontal=function(e){this.scrollLeft=e,this.element.scrollLeft=e,this.table.options.groupBy&&this.table.modules.groupRows.scrollHeaders(e),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.scrollHorizontal(e)},s.prototype.refreshActiveData=function(e,t,o){var i,n=this,s=this.table,r=["all","filter","sort","display","freeze","group","tree","page"];if(this.redrawBlock)return void((!this.redrawBlockRestoreConfig||r.indexOf(e)=0))break;s=a}else if(t-r[a].getElement().offsetTop>=0)n=a;else{if(i=!0,!(o-r[a].getElement().offsetTop>=0))break;s=a}}else n=this.vDomTop,s=this.vDomBottom;return r.slice(n,s+1)},s.prototype.displayRowIterator=function(e){this.displayRows.forEach(e),this.displayRowsCount=this.displayRows[this.displayRows.length-1].length},s.prototype.getRows=function(e){var t;switch(e){case"active":t=this.activeRows;break;case"display":t=this.table.rowManager.getDisplayRows();break;case"visible":t=this.getVisibleRows(!0);break;default:t=this.rows}return t},s.prototype.reRenderInPosition=function(e){if("virtual"==this.getRenderMode())if(this.redrawBlock)e?e():this.redrawBlockRederInPosition=!0;else{for(var t=this.element.scrollTop,o=!1,i=!1,n=this.scrollLeft,s=this.getDisplayRows(),r=this.vDomTop;r<=this.vDomBottom;r++)if(s[r]){var a=t-s[r].getElement().offsetTop;if(!(!1===i||Math.abs(a)this.vDomWindowBuffer&&(this.vDomWindowBuffer=2*g),"group"!==f.type&&(u=!1),i.vDomBottom++,c++}e?(i.vDomTopPad=t?i.vDomRowHeight*this.vDomTop+o:i.scrollTop-l,i.vDomBottomPad=i.vDomBottom==i.displayRowsCount-1?0:Math.max(i.vDomScrollHeight-i.vDomTopPad-a-l,0)):(this.vDomTopPad=0,i.vDomRowHeight=Math.floor((a+l)/c),i.vDomBottomPad=i.vDomRowHeight*(i.displayRowsCount-i.vDomBottom-1),i.vDomScrollHeight=l+a+i.vDomBottomPad-i.height),n.style.paddingTop=i.vDomTopPad+"px",n.style.paddingBottom=i.vDomBottomPad+"px",t&&(this.scrollTop=i.vDomTopPad+l+o-(this.element.scrollWidth>this.element.clientWidth?this.element.offsetHeight-this.element.clientHeight:0)),this.scrollTop=Math.min(this.scrollTop,this.element.scrollHeight-this.height),this.element.scrollWidth>this.element.offsetWidth&&t&&(this.scrollTop+=this.element.offsetHeight-this.element.clientHeight),this.vDomScrollPosTop=this.scrollTop,this.vDomScrollPosBottom=this.scrollTop,s.scrollTop=this.scrollTop,n.style.minWidth=u?i.table.columnManager.getWidth()+"px":"",i.table.options.groupBy&&"fitDataFill"!=i.table.modules.layout.getMode()&&i.displayRowsCount==i.table.modules.groupRows.countGroups()&&(i.tableElement.style.minWidth=i.table.columnManager.getWidth())}else this.renderEmptyScroll();this.fixedHeight||this.adjustTableSize()},s.prototype.scrollVertical=function(e){var t=this.scrollTop-this.vDomScrollPosTop,o=this.scrollTop-this.vDomScrollPosBottom,i=2*this.vDomWindowBuffer;if(-t>i||o>i){var n=this.scrollLeft;this._virtualRenderFill(Math.floor(this.element.scrollTop/this.element.scrollHeight*this.displayRowsCount)),this.scrollHorizontal(n)}else e?(t<0&&this._addTopRow(-t),o<0&&(this.vDomScrollHeight-this.scrollTop>this.vDomWindowBuffer?this._removeBottomRow(-o):this.vDomScrollPosBottom=this.scrollTop)):(t>=0&&(this.scrollTop>this.vDomWindowBuffer?this._removeTopRow(t):this.vDomScrollPosTop=this.scrollTop),o>=0&&this._addBottomRow(o))},s.prototype._addTopRow=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,o=this.tableElement,i=this.getDisplayRows();if(this.vDomTop){var n=this.vDomTop-1,s=i[n],r=s.getHeight()||this.vDomRowHeight;e>=r&&(this.styleRow(s,n),o.insertBefore(s.getElement(),o.firstChild),s.initialized&&s.heightInitialized||(this.vDomTopNewRows.push(s),s.heightInitialized||s.clearCellHeight()),s.initialize(),this.vDomTopPad-=r,this.vDomTopPad<0&&(this.vDomTopPad=n*this.vDomRowHeight),n||(this.vDomTopPad=0),o.style.paddingTop=this.vDomTopPad+"px",this.vDomScrollPosTop-=r,this.vDomTop--),e=-(this.scrollTop-this.vDomScrollPosTop),s.getHeight()>this.vDomWindowBuffer&&(this.vDomWindowBuffer=2*s.getHeight()),t=(i[this.vDomTop-1].getHeight()||this.vDomRowHeight)?this._addTopRow(e,t+1):this._quickNormalizeRowHeight(this.vDomTopNewRows)}},s.prototype._removeTopRow=function(e){var t=this.tableElement,o=this.getDisplayRows()[this.vDomTop],i=o.getHeight()||this.vDomRowHeight;if(e>=i){var n=o.getElement();n.parentNode.removeChild(n),this.vDomTopPad+=i,t.style.paddingTop=this.vDomTopPad+"px",this.vDomScrollPosTop+=this.vDomTop?i:i+this.vDomWindowBuffer,this.vDomTop++,e=this.scrollTop-this.vDomScrollPosTop,this._removeTopRow(e)}},s.prototype._addBottomRow=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,o=this.tableElement,i=this.getDisplayRows();if(this.vDomBottom=r&&(this.styleRow(s,n),o.appendChild(s.getElement()),s.initialized&&s.heightInitialized||(this.vDomBottomNewRows.push(s),s.heightInitialized||s.clearCellHeight()),s.initialize(),this.vDomBottomPad-=r,(this.vDomBottomPad<0||n==this.displayRowsCount-1)&&(this.vDomBottomPad=0),o.style.paddingBottom=this.vDomBottomPad+"px",this.vDomScrollPosBottom+=r,this.vDomBottom++),e=this.scrollTop-this.vDomScrollPosBottom,s.getHeight()>this.vDomWindowBuffer&&(this.vDomWindowBuffer=2*s.getHeight()),t=(i[this.vDomBottom+1].getHeight()||this.vDomRowHeight)?this._addBottomRow(e,t+1):this._quickNormalizeRowHeight(this.vDomBottomNewRows)}},s.prototype._removeBottomRow=function(e){var t=this.tableElement,o=this.getDisplayRows()[this.vDomBottom],i=o.getHeight()||this.vDomRowHeight;if(e>=i){var n=o.getElement();n.parentNode&&n.parentNode.removeChild(n),this.vDomBottomPad+=i,this.vDomBottomPad<0&&(this.vDomBottomPad=0),t.style.paddingBottom=this.vDomBottomPad+"px",this.vDomScrollPosBottom-=i,this.vDomBottom--,e=-(this.scrollTop-this.vDomScrollPosBottom),this._removeBottomRow(e)}},s.prototype._quickNormalizeRowHeight=function(e){e.forEach(function(e){e.calcHeight()}),e.forEach(function(e){e.setCellHeight()}),e.length=0},s.prototype.normalizeHeight=function(){this.activeRows.forEach(function(e){e.normalizeHeight()})},s.prototype.adjustTableSize=function(){var e,t=this.element.clientHeight;if("virtual"===this.renderMode){var o=this.columnManager.getElement().offsetHeight+(this.table.footerManager&&!this.table.footerManager.external?this.table.footerManager.getElement().offsetHeight:0);this.fixedHeight?(this.element.style.minHeight="calc(100% - "+o+"px)",this.element.style.height="calc(100% - "+o+"px)",this.element.style.maxHeight="calc(100% - "+o+"px)"):(this.element.style.height="",this.element.style.height=this.table.element.clientHeight-o+"px",this.element.scrollTop=this.scrollTop),this.height=this.element.clientHeight,this.vDomWindowBuffer=this.table.options.virtualDomBuffer||this.height,this.fixedHeight||t==this.element.clientHeight||((e=this.table.modExists("resizeTable"))&&!this.table.modules.resizeTable.autoResize||!e)&&this.redraw()}},s.prototype.reinitialize=function(){this.rows.forEach(function(e){e.reinitialize()})},s.prototype.blockRedraw=function(){this.redrawBlock=!0,this.redrawBlockRestoreConfig=!1},s.prototype.restoreRedraw=function(){this.redrawBlock=!1,this.redrawBlockRestoreConfig?(this.refreshActiveData(this.redrawBlockRestoreConfig.stage,this.redrawBlockRestoreConfig.skipStage,this.redrawBlockRestoreConfig.renderInPosition),this.redrawBlockRestoreConfig=!1):this.redrawBlockRederInPosition&&this.reRenderInPosition(),this.redrawBlockRederInPosition=!1},s.prototype.redraw=function(e){var t=this.scrollLeft;this.adjustTableSize(),this.table.tableWidth=this.table.element.clientWidth,e?this.renderTable():("classic"==this.renderMode?this.table.options.groupBy?this.refreshActiveData("group",!1,!1):this._simpleRender():(this.reRenderInPosition(),this.scrollHorizontal(t)),this.displayRowsCount||this.table.options.placeholder&&this.getElement().appendChild(this.table.options.placeholder))},s.prototype.resetScroll=function(){if(this.element.scrollLeft=0,this.element.scrollTop=0,"ie"===this.table.browser){var e=document.createEvent("Event");e.initEvent("scroll",!1,!0),this.element.dispatchEvent(e)}else this.element.dispatchEvent(new Event("scroll"))};var r=function(e){this._row=e};r.prototype.getData=function(e){return this._row.getData(e)},r.prototype.getElement=function(){return this._row.getElement()},r.prototype.getCells=function(){var e=[];return this._row.getCells().forEach(function(t){e.push(t.getComponent())}),e},r.prototype.getCell=function(e){var t=this._row.getCell(e);return!!t&&t.getComponent()},r.prototype.getIndex=function(){return this._row.getData("data")[this._row.table.options.index]},r.prototype.getPosition=function(e){return this._row.table.rowManager.getRowPosition(this._row,e)},r.prototype.delete=function(){return this._row.delete()},r.prototype.scrollTo=function(){return this._row.table.rowManager.scrollToRow(this._row)},r.prototype.pageTo=function(){if(this._row.table.modExists("page",!0))return this._row.table.modules.page.setPageToRow(this._row)},r.prototype.move=function(e,t){this._row.moveToRow(e,t)},r.prototype.update=function(e){return this._row.updateData(e)}, +r.prototype.normalizeHeight=function(){this._row.normalizeHeight(!0)},r.prototype.select=function(){this._row.table.modules.selectRow.selectRows(this._row)},r.prototype.deselect=function(){this._row.table.modules.selectRow.deselectRows(this._row)},r.prototype.toggleSelect=function(){this._row.table.modules.selectRow.toggleRow(this._row)},r.prototype.isSelected=function(){return this._row.table.modules.selectRow.isRowSelected(this._row)},r.prototype._getSelf=function(){return this._row},r.prototype.validate=function(){return this._row.validate()},r.prototype.freeze=function(){this._row.table.modExists("frozenRows",!0)&&this._row.table.modules.frozenRows.freezeRow(this._row)},r.prototype.unfreeze=function(){this._row.table.modExists("frozenRows",!0)&&this._row.table.modules.frozenRows.unfreezeRow(this._row)},r.prototype.isFrozen=function(){if(this._row.table.modExists("frozenRows",!0)){return this._row.table.modules.frozenRows.rows.indexOf(this._row)>-1}return!1},r.prototype.treeCollapse=function(){this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.collapseRow(this._row)},r.prototype.treeExpand=function(){this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.expandRow(this._row)},r.prototype.treeToggle=function(){this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.toggleRow(this._row)},r.prototype.getTreeParent=function(){return!!this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.getTreeParent(this._row)},r.prototype.getTreeChildren=function(){return!!this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.getTreeChildren(this._row)},r.prototype.addTreeChild=function(e,t,o){return!!this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.addTreeChildRow(this._row,e,t,o)},r.prototype.reformat=function(){return this._row.reinitialize()},r.prototype.getGroup=function(){return this._row.getGroup().getComponent()},r.prototype.getTable=function(){return this._row.table},r.prototype.getNextRow=function(){var e=this._row.nextRow();return e?e.getComponent():e},r.prototype.getPrevRow=function(){var e=this._row.prevRow();return e?e.getComponent():e};var a=function(e,t){var o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"row";this.table=t.table,this.parent=t,this.data={},this.type=o,this.element=this.createElement(),this.modules={},this.cells=[],this.height=0,this.heightStyled="",this.manualHeight=!1,this.outerHeight=0,this.initialized=!1,this.heightInitialized=!1,this.component=null,this.setData(e),this.generateElement()};a.prototype.createElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-row"),e.setAttribute("role","row"),e},a.prototype.getElement=function(){return this.element},a.prototype.detachElement=function(){this.element&&this.element.parentNode&&this.element.parentNode.removeChild(this.element)},a.prototype.generateElement=function(){var e,t,o,i=this;!1!==i.table.options.selectable&&i.table.modExists("selectRow")&&i.table.modules.selectRow.initializeRow(this),!1!==i.table.options.movableRows&&i.table.modExists("moveRow")&&i.table.modules.moveRow.initializeRow(this),!1!==i.table.options.dataTree&&i.table.modExists("dataTree")&&i.table.modules.dataTree.initializeRow(this),"collapse"===i.table.options.responsiveLayout&&i.table.modExists("responsiveLayout")&&i.table.modules.responsiveLayout.initializeRow(this),i.table.options.rowContextMenu&&this.table.modExists("menu")&&i.table.modules.menu.initializeRow(this),i.table.options.rowClick&&i.element.addEventListener("click",function(e){i.table.options.rowClick(e,i.getComponent())}),i.table.options.rowDblClick&&i.element.addEventListener("dblclick",function(e){i.table.options.rowDblClick(e,i.getComponent())}),i.table.options.rowContext&&i.element.addEventListener("contextmenu",function(e){i.table.options.rowContext(e,i.getComponent())}),i.table.options.rowMouseEnter&&i.element.addEventListener("mouseenter",function(e){i.table.options.rowMouseEnter(e,i.getComponent())}),i.table.options.rowMouseLeave&&i.element.addEventListener("mouseleave",function(e){i.table.options.rowMouseLeave(e,i.getComponent())}),i.table.options.rowMouseOver&&i.element.addEventListener("mouseover",function(e){i.table.options.rowMouseOver(e,i.getComponent())}),i.table.options.rowMouseOut&&i.element.addEventListener("mouseout",function(e){i.table.options.rowMouseOut(e,i.getComponent())}),i.table.options.rowMouseMove&&i.element.addEventListener("mousemove",function(e){i.table.options.rowMouseMove(e,i.getComponent())}),i.table.options.rowTap&&(o=!1,i.element.addEventListener("touchstart",function(e){o=!0},{passive:!0}),i.element.addEventListener("touchend",function(e){o&&i.table.options.rowTap(e,i.getComponent()),o=!1})),i.table.options.rowDblTap&&(e=null,i.element.addEventListener("touchend",function(t){e?(clearTimeout(e),e=null,i.table.options.rowDblTap(t,i.getComponent())):e=setTimeout(function(){clearTimeout(e),e=null},300)})),i.table.options.rowTapHold&&(t=null,i.element.addEventListener("touchstart",function(e){clearTimeout(t),t=setTimeout(function(){clearTimeout(t),t=null,o=!1,i.table.options.rowTapHold(e,i.getComponent())},1e3)},{passive:!0}),i.element.addEventListener("touchend",function(e){clearTimeout(t),t=null}))},a.prototype.generateCells=function(){this.cells=this.table.columnManager.generateCells(this)},a.prototype.initialize=function(e){var t=this;if(!t.initialized||e){for(t.deleteCells();t.element.firstChild;)t.element.removeChild(t.element.firstChild);this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layoutRow(this),this.generateCells(),t.cells.forEach(function(e){t.element.appendChild(e.getElement()),e.cellRendered()}),e&&t.normalizeHeight(),t.table.options.dataTree&&t.table.modExists("dataTree")&&t.table.modules.dataTree.layoutRow(this),"collapse"===t.table.options.responsiveLayout&&t.table.modExists("responsiveLayout")&&t.table.modules.responsiveLayout.layoutRow(this),t.table.options.rowFormatter&&t.table.options.rowFormatter(t.getComponent()),t.table.options.resizableRows&&t.table.modExists("resizeRows")&&t.table.modules.resizeRows.initializeRow(t),t.initialized=!0}},a.prototype.reinitializeHeight=function(){this.heightInitialized=!1,null!==this.element.offsetParent&&this.normalizeHeight(!0)},a.prototype.reinitialize=function(){this.initialized=!1,this.heightInitialized=!1,this.manualHeight||(this.height=0,this.heightStyled=""),null!==this.element.offsetParent&&this.initialize(!0)},a.prototype.calcHeight=function(e){var t=0,o=this.table.options.resizableRows?this.element.clientHeight:0;this.cells.forEach(function(e){var o=e.getHeight();o>t&&(t=o)}),this.height=e?Math.max(t,o):this.manualHeight?this.height:Math.max(t,o),this.heightStyled=this.height?this.height+"px":"",this.outerHeight=this.element.offsetHeight},a.prototype.setCellHeight=function(){this.cells.forEach(function(e){e.setHeight()}),this.heightInitialized=!0},a.prototype.clearCellHeight=function(){this.cells.forEach(function(e){e.clearHeight()})},a.prototype.normalizeHeight=function(e){e&&this.clearCellHeight(),this.calcHeight(e),this.setCellHeight()},a.prototype.setHeight=function(e,t){(this.height!=e||t)&&(this.manualHeight=!0,this.height=e,this.heightStyled=e?e+"px":"",this.setCellHeight(),this.outerHeight=this.element.offsetHeight)},a.prototype.getHeight=function(){return this.outerHeight},a.prototype.getWidth=function(){return this.element.offsetWidth},a.prototype.deleteCell=function(e){var t=this.cells.indexOf(e);t>-1&&this.cells.splice(t,1)},a.prototype.setData=function(e){this.table.modExists("mutator")&&(e=this.table.modules.mutator.transformRow(e,"data")),this.data=e,this.table.options.reactiveData&&this.table.modExists("reactiveData",!0)&&this.table.modules.reactiveData.watchRow(this)},a.prototype.updateData=function(e){var t,o=this,i=d.prototype.helpers.elVisible(this.element),n={};return new Promise(function(s,r){"string"==typeof e&&(e=JSON.parse(e)),o.table.options.reactiveData&&o.table.modExists("reactiveData",!0)&&o.table.modules.reactiveData.block(),o.table.modExists("mutator")?(n=Object.assign(n,o.data),n=Object.assign(n,e),t=o.table.modules.mutator.transformRow(n,"data",e)):t=e;for(var a in t)o.data[a]=t[a];o.table.options.reactiveData&&o.table.modExists("reactiveData",!0)&&o.table.modules.reactiveData.unblock();for(var a in e){o.table.columnManager.getColumnsByFieldRoot(a).forEach(function(e){var n=o.getCell(e.getField());if(n){var s=e.getFieldValue(t);n.getValue()!=s&&(n.setValueProcessData(s),i&&n.cellRendered())}})}i?(o.normalizeHeight(!0),o.table.options.rowFormatter&&o.table.options.rowFormatter(o.getComponent())):(o.initialized=!1,o.height=0,o.heightStyled=""),!1!==o.table.options.dataTree&&o.table.modExists("dataTree")&&o.table.modules.dataTree.redrawNeeded(e)&&(o.table.modules.dataTree.initializeRow(o),o.table.modules.dataTree.layoutRow(o),o.table.rowManager.refreshActiveData("tree",!1,!0)),o.table.options.rowUpdated.call(o.table,o.getComponent()),s()})},a.prototype.getData=function(e){var t=this;return e?t.table.modExists("accessor")?t.table.modules.accessor.transformRow(t.data,e):void 0:this.data},a.prototype.getCell=function(e){return e=this.table.columnManager.findColumn(e),this.cells.find(function(t){return t.column===e})},a.prototype.getCellIndex=function(e){return this.cells.findIndex(function(t){return t===e})},a.prototype.findNextEditableCell=function(e){var t=!1;if(e0)for(var o=e-1;o>=0;o--){var i=this.cells[o],n=!0;if(i.column.modules.edit&&d.prototype.helpers.elVisible(i.getElement())&&("function"==typeof i.column.modules.edit.check&&(n=i.column.modules.edit.check(i.getComponent())),n)){t=i;break}}return t},a.prototype.getCells=function(){return this.cells},a.prototype.nextRow=function(){return this.table.rowManager.nextDisplayRow(this,!0)||!1},a.prototype.prevRow=function(){return this.table.rowManager.prevDisplayRow(this,!0)||!1},a.prototype.moveToRow=function(e,t){var o=this.table.rowManager.findRow(e);o?(this.table.rowManager.moveRowActual(this,o,!t),this.table.rowManager.refreshActiveData("display",!1,!0)):console.warn("Move Error - No matching row found:",e)},a.prototype.validate=function(){var e=[];return this.cells.forEach(function(t){t.validate()||e.push(t.getComponent())}),!e.length||e},a.prototype.delete=function(){var e=this;return new Promise(function(t,o){var i,n;e.table.options.history&&e.table.modExists("history")&&(e.table.options.groupBy&&e.table.modExists("groupRows")?(n=e.getGroup().rows,(i=n.indexOf(e))&&(i=n[i-1])):(i=e.table.rowManager.getRowIndex(e))&&(i=e.table.rowManager.rows[i-1]),e.table.modules.history.action("rowDelete",e,{data:e.getData(),pos:!i,index:i})),e.deleteActual(),t()})},a.prototype.deleteActual=function(e){this.table.rowManager.getRowIndex(this);this.table.modExists("selectRow")&&this.table.modules.selectRow._deselectRow(this,!0),this.table.modExists("edit")&&this.table.modules.edit.currentCell.row===this&&this.table.modules.edit.cancelEdit(),this.table.options.reactiveData&&this.table.modExists("reactiveData",!0),this.modules.group&&this.modules.group.removeRow(this),this.table.rowManager.deleteRow(this,e),this.deleteCells(),this.initialized=!1,this.heightInitialized=!1,this.table.options.dataTree&&this.table.modExists("dataTree",!0)&&this.table.modules.dataTree.rowDelete(this),this.table.modExists("columnCalcs")&&(this.table.options.groupBy&&this.table.modExists("groupRows")?this.table.modules.columnCalcs.recalcRowGroup(this):this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows))},a.prototype.deleteCells=function(){for(var e=this.cells.length,t=0;t-1?(this.browser="ie",this.browserSlow=!0):e.indexOf("Edge")>-1?(this.browser="edge",this.browserSlow=!0):e.indexOf("Firefox")>-1?(this.browser="firefox",this.browserSlow=!1):(this.browser="other",this.browserSlow=!1),this.browserMobile=/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(e)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(e.substr(0,4))},d.prototype.blockRedraw=function(){return this.rowManager.blockRedraw()},d.prototype.restoreRedraw=function(){return this.rowManager.restoreRedraw()},d.prototype.setDataFromLocalFile=function(e){var t=this;return new Promise(function(o,i){var n=document.createElement("input");n.type="file",n.accept=e||".json,application/json",n.addEventListener("change",function(e){var s,r=n.files[0],a=new FileReader;a.readAsText(r),a.onload=function(e){try{s=JSON.parse(a.result)}catch(e){return console.warn("File Load Error - File contents is invalid JSON",e),void i(e)}t._setData(s).then(function(e){o(e)}).catch(function(e){o(e)})},a.onerror=function(e){console.warn("File Load Error - Unable to read file"),i()}}),n.click()})},d.prototype.setData=function(e,t,o){return this.modExists("ajax")&&this.modules.ajax.blockActiveRequest(),this._setData(e,t,o,!1,!0)},d.prototype._setData=function(e,t,o,i,n){var s=this;return"string"!=typeof e?e?s.rowManager.setData(e,i,n):s.modExists("ajax")&&(s.modules.ajax.getUrl||s.options.ajaxURLGenerator)?"remote"==s.options.pagination&&s.modExists("page",!0)?(s.modules.page.reset(!0,!0),s.modules.page.setPage(1)):s.modules.ajax.loadData(i,n):s.rowManager.setData([],i,n):0==e.indexOf("{")||0==e.indexOf("[")?s.rowManager.setData(JSON.parse(e),i,n):s.modExists("ajax",!0)?(t&&s.modules.ajax.setParams(t),o&&s.modules.ajax.setConfig(o),s.modules.ajax.setUrl(e),"remote"==s.options.pagination&&s.modExists("page",!0)?(s.modules.page.reset(!0,!0),s.modules.page.setPage(1)):s.modules.ajax.loadData(i,n)):void 0},d.prototype.clearData=function(){this.modExists("ajax")&&this.modules.ajax.blockActiveRequest(),this.rowManager.clearData()},d.prototype.getData=function(e){return!0===e&&(console.warn("passing a boolean to the getData function is deprecated, you should now pass the string 'active'"),e="active"),this.rowManager.getData(e)},d.prototype.getDataCount=function(e){return!0===e&&(console.warn("passing a boolean to the getDataCount function is deprecated, you should now pass the string 'active'"),e="active"),this.rowManager.getDataCount(e)},d.prototype.searchRows=function(e,t,o){if(this.modExists("filter",!0))return this.modules.filter.search("rows",e,t,o)},d.prototype.searchData=function(e,t,o){if(this.modExists("filter",!0))return this.modules.filter.search("data",e,t,o)},d.prototype.getHtml=function(e,t,o){if(this.modExists("export",!0))return this.modules.export.getHtml(e,t,o)},d.prototype.print=function(e,t,o){if(this.modExists("print",!0))return this.modules.print.printFullscreen(e,t,o)},d.prototype.getAjaxUrl=function(){if(this.modExists("ajax",!0))return this.modules.ajax.getUrl()},d.prototype.replaceData=function(e,t,o){return this.modExists("ajax")&&this.modules.ajax.blockActiveRequest(),this._setData(e,t,o,!0)},d.prototype.updateData=function(e){var t=this,o=this,i=0;return new Promise(function(n,s){t.modExists("ajax")&&t.modules.ajax.blockActiveRequest(),"string"==typeof e&&(e=JSON.parse(e)),e?e.forEach(function(e){var t=o.rowManager.findRow(e[o.options.index]);t&&(i++,t.updateData(e).then(function(){--i||n()}))}):(console.warn("Update Error - No data provided"),s("Update Error - No data provided"))})},d.prototype.addData=function(e,t,o){var i=this;return new Promise(function(n,s){i.modExists("ajax")&&i.modules.ajax.blockActiveRequest(),"string"==typeof e&&(e=JSON.parse(e)),e?i.rowManager.addRows(e,t,o).then(function(e){var t=[];e.forEach(function(e){t.push(e.getComponent())}),n(t)}):(console.warn("Update Error - No data provided"),s("Update Error - No data provided"))})},d.prototype.updateOrAddData=function(e){var t=this,o=this,i=[],n=0;return new Promise(function(s,r){t.modExists("ajax")&&t.modules.ajax.blockActiveRequest(),"string"==typeof e&&(e=JSON.parse(e)),e?e.forEach(function(e){var t=o.rowManager.findRow(e[o.options.index]);n++,t?t.updateData(e).then(function(){n--,i.push(t.getComponent()),n||s(i)}):o.rowManager.addRows(e).then(function(e){n--,i.push(e[0].getComponent()),n||s(i)})}):(console.warn("Update Error - No data provided"),r("Update Error - No data provided"))})},d.prototype.getRow=function(e){var t=this.rowManager.findRow(e);return t?t.getComponent():(console.warn("Find Error - No matching row found:",e),!1)},d.prototype.getRowFromPosition=function(e,t){var o=this.rowManager.getRowFromPosition(e,t);return o?o.getComponent():(console.warn("Find Error - No matching row found:",e),!1)},d.prototype.deleteRow=function(e){var t=this;return new Promise(function(o,i){function n(){++r==e.length&&a&&(s.rowManager.reRenderInPosition(),o())}var s=t,r=0,a=0,l=[];Array.isArray(e)||(e=[e]),e.forEach(function(e){var o=t.rowManager.findRow(e,!0);o?l.push(o):(console.warn("Delete Error - No matching row found:",e),i("Delete Error - No matching row found"),n())}),l.sort(function(e,o){return t.rowManager.rows.indexOf(e)>t.rowManager.rows.indexOf(o)?1:-1}),l.forEach(function(e){e.delete().then(function(){a++,n()}).catch(function(e){n(),i(e)})})})},d.prototype.addRow=function(e,t,o){var i=this;return new Promise(function(n,s){"string"==typeof e&&(e=JSON.parse(e)),i.rowManager.addRows(e,t,o).then(function(e){i.modExists("columnCalcs")&&i.modules.columnCalcs.recalc(i.rowManager.activeRows),n(e[0].getComponent())})})},d.prototype.updateOrAddRow=function(e,t){var o=this;return new Promise(function(i,n){var s=o.rowManager.findRow(e);"string"==typeof t&&(t=JSON.parse(t)),s?s.updateData(t).then(function(){o.modExists("columnCalcs")&&o.modules.columnCalcs.recalc(o.rowManager.activeRows),i(s.getComponent())}).catch(function(e){n(e)}):s=o.rowManager.addRows(t).then(function(e){o.modExists("columnCalcs")&&o.modules.columnCalcs.recalc(o.rowManager.activeRows),i(e[0].getComponent())}).catch(function(e){n(e)})})},d.prototype.updateRow=function(e,t){var o=this;return new Promise(function(i,n){var s=o.rowManager.findRow(e);"string"==typeof t&&(t=JSON.parse(t)),s?s.updateData(t).then(function(){i(s.getComponent())}).catch(function(e){n(e)}):(console.warn("Update Error - No matching row found:",e),n("Update Error - No matching row found"))})},d.prototype.scrollToRow=function(e,t,o){var i=this;return new Promise(function(n,s){var r=i.rowManager.findRow(e);r?i.rowManager.scrollToRow(r,t,o).then(function(){n()}).catch(function(e){s(e)}):(console.warn("Scroll Error - No matching row found:",e),s("Scroll Error - No matching row found"))})},d.prototype.moveRow=function(e,t,o){var i=this.rowManager.findRow(e);i?i.moveToRow(t,o):console.warn("Move Error - No matching row found:",e)},d.prototype.getRows=function(e){return!0===e&&(console.warn("passing a boolean to the getRows function is deprecated, you should now pass the string 'active'"),e="active"),this.rowManager.getComponents(e)},d.prototype.getRowPosition=function(e,t){var o=this.rowManager.findRow(e);return o?this.rowManager.getRowPosition(o,t):(console.warn("Position Error - No matching row found:",e),!1)},d.prototype.copyToClipboard=function(e){this.modExists("clipboard",!0)&&this.modules.clipboard.copy(e)},d.prototype.setColumns=function(e){this.columnManager.setColumns(e)},d.prototype.getColumns=function(e){return this.columnManager.getComponents(e)},d.prototype.getColumn=function(e){var t=this.columnManager.findColumn(e);return t?t.getComponent():(console.warn("Find Error - No matching column found:",e),!1)},d.prototype.getColumnDefinitions=function(){return this.columnManager.getDefinitionTree()},d.prototype.getColumnLayout=function(){if(this.modExists("persistence",!0))return this.modules.persistence.parseColumns(this.columnManager.getColumns())},d.prototype.setColumnLayout=function(e){return!!this.modExists("persistence",!0)&&(this.columnManager.setColumns(this.modules.persistence.mergeDefinition(this.options.columns,e)),!0)},d.prototype.showColumn=function(e){var t=this.columnManager.findColumn(e);if(!t)return console.warn("Column Show Error - No matching column found:",e),!1;t.show(),this.options.responsiveLayout&&this.modExists("responsiveLayout",!0)&&this.modules.responsiveLayout.update()},d.prototype.hideColumn=function(e){var t=this.columnManager.findColumn(e);if(!t)return console.warn("Column Hide Error - No matching column found:",e),!1;t.hide(),this.options.responsiveLayout&&this.modExists("responsiveLayout",!0)&&this.modules.responsiveLayout.update()},d.prototype.toggleColumn=function(e){var t=this.columnManager.findColumn(e);if(!t)return console.warn("Column Visibility Toggle Error - No matching column found:",e),!1;t.visible?t.hide():t.show()},d.prototype.addColumn=function(e,t,o){var i=this;return new Promise(function(n,s){var r=i.columnManager.findColumn(o);i.columnManager.addColumn(e,t,r).then(function(e){n(e.getComponent())}).catch(function(e){s(e)})})},d.prototype.deleteColumn=function(e){var t=this;return new Promise(function(o,i){var n=t.columnManager.findColumn(e);n?n.delete().then(function(){o()}).catch(function(e){i(e)}):(console.warn("Column Delete Error - No matching column found:",e),i())})},d.prototype.updateColumnDefinition=function(e,t){var o=this;return new Promise(function(i,n){var s=o.columnManager.findColumn(e);s?s.updateDefinition(t).then(function(e){i(e)}).catch(function(e){n(e)}):(console.warn("Column Update Error - No matching column found:",e),n())})},d.prototype.moveColumn=function(e,t,o){var i=this.columnManager.findColumn(e),n=this.columnManager.findColumn(t);i?n?this.columnManager.moveColumn(i,n,o):console.warn("Move Error - No matching column found:",n):console.warn("Move Error - No matching column found:",e)},d.prototype.scrollToColumn=function(e,t,o){var i=this;return new Promise(function(n,s){var r=i.columnManager.findColumn(e);r?i.columnManager.scrollToColumn(r,t,o).then(function(){n()}).catch(function(e){s(e)}):(console.warn("Scroll Error - No matching column found:",e),s("Scroll Error - No matching column found"))})},d.prototype.setLocale=function(e){this.modules.localize.setLocale(e)},d.prototype.getLocale=function(){return this.modules.localize.getLocale()},d.prototype.getLang=function(e){return this.modules.localize.getLang(e)},d.prototype.redraw=function(e){this.columnManager.redraw(e),this.rowManager.redraw(e)},d.prototype.setHeight=function(e){"classic"!==this.rowManager.renderMode?(this.options.height=isNaN(e)?e:e+"px",this.element.style.height=this.options.height,this.rowManager.setRenderMode(),this.rowManager.redraw()):console.warn("setHeight function is not available in classic render mode")},d.prototype.setSort=function(e,t){this.modExists("sort",!0)&&(this.modules.sort.setSort(e,t),this.rowManager.sorterRefresh())},d.prototype.getSorters=function(){if(this.modExists("sort",!0))return this.modules.sort.getSort()},d.prototype.clearSort=function(){this.modExists("sort",!0)&&(this.modules.sort.clear(),this.rowManager.sorterRefresh())},d.prototype.setFilter=function(e,t,o,i){this.modExists("filter",!0)&&(this.modules.filter.setFilter(e,t,o,i),this.rowManager.filterRefresh())},d.prototype.addFilter=function(e,t,o,i){this.modExists("filter",!0)&&(this.modules.filter.addFilter(e,t,o,i),this.rowManager.filterRefresh())},d.prototype.getFilters=function(e){if(this.modExists("filter",!0))return this.modules.filter.getFilters(e)},d.prototype.setHeaderFilterFocus=function(e){if(this.modExists("filter",!0)){var t=this.columnManager.findColumn(e);if(!t)return console.warn("Column Filter Focus Error - No matching column found:",e),!1;this.modules.filter.setHeaderFilterFocus(t)}},d.prototype.getHeaderFilterValue=function(e){if(this.modExists("filter",!0)){var t=this.columnManager.findColumn(e);if(t)return this.modules.filter.getHeaderFilterValue(t);console.warn("Column Filter Error - No matching column found:",e)}},d.prototype.setHeaderFilterValue=function(e,t){if(this.modExists("filter",!0)){var o=this.columnManager.findColumn(e);if(!o)return console.warn("Column Filter Error - No matching column found:",e),!1;this.modules.filter.setHeaderFilterValue(o,t)}},d.prototype.getHeaderFilters=function(){if(this.modExists("filter",!0))return this.modules.filter.getHeaderFilters()},d.prototype.removeFilter=function(e,t,o){this.modExists("filter",!0)&&(this.modules.filter.removeFilter(e,t,o),this.rowManager.filterRefresh())},d.prototype.clearFilter=function(e){this.modExists("filter",!0)&&(this.modules.filter.clearFilter(e),this.rowManager.filterRefresh())},d.prototype.clearHeaderFilter=function(){this.modExists("filter",!0)&&(this.modules.filter.clearHeaderFilter(),this.rowManager.filterRefresh())},d.prototype.selectRow=function(e){this.modExists("selectRow",!0)&&(!0===e&&(console.warn("passing a boolean to the selectRowselectRow function is deprecated, you should now pass the string 'active'"),e="active"),this.modules.selectRow.selectRows(e))},d.prototype.deselectRow=function(e){this.modExists("selectRow",!0)&&this.modules.selectRow.deselectRows(e)},d.prototype.toggleSelectRow=function(e){this.modExists("selectRow",!0)&&this.modules.selectRow.toggleRow(e)},d.prototype.getSelectedRows=function(){if(this.modExists("selectRow",!0))return this.modules.selectRow.getSelectedRows()},d.prototype.getSelectedData=function(){if(this.modExists("selectRow",!0))return this.modules.selectRow.getSelectedData()},d.prototype.getInvalidCells=function(){if(this.modExists("validate",!0))return this.modules.validate.getInvalidCells()},d.prototype.clearCellValidation=function(e){var t=this;this.modExists("validate",!0)&&(e||(e=this.modules.validate.getInvalidCells()),Array.isArray(e)||(e=[e]),e.forEach(function(e){t.modules.validate.clearValidation(e._getSelf())}))},d.prototype.validate=function(e){var t=[];return this.rowManager.rows.forEach(function(e){var o=e.validate();!0!==o&&(t=t.concat(o))}),!t.length||t},d.prototype.setMaxPage=function(e){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.setMaxPage(e)},d.prototype.setPage=function(e){return this.options.pagination&&this.modExists("page")?this.modules.page.setPage(e):new Promise(function(e,t){t()})},d.prototype.setPageToRow=function(e){var t=this;return new Promise(function(o,i){t.options.pagination&&t.modExists("page")?(e=t.rowManager.findRow(e),e?t.modules.page.setPageToRow(e).then(function(){o()}).catch(function(){i()}):i()):i()})},d.prototype.setPageSize=function(e){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.setPageSize(e),this.modules.page.setPage(1).then(function(){}).catch(function(){})},d.prototype.getPageSize=function(){if(this.options.pagination&&this.modExists("page",!0))return this.modules.page.getPageSize()},d.prototype.previousPage=function(){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.previousPage()},d.prototype.nextPage=function(){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.nextPage()},d.prototype.getPage=function(){return!(!this.options.pagination||!this.modExists("page"))&&this.modules.page.getPage()},d.prototype.getPageMax=function(){return!(!this.options.pagination||!this.modExists("page"))&&this.modules.page.getPageMax()},d.prototype.setGroupBy=function(e){if(!this.modExists("groupRows",!0))return!1;this.options.groupBy=e,this.modules.groupRows.initialize(),this.rowManager.refreshActiveData("display"),this.options.persistence&&this.modExists("persistence",!0)&&this.modules.persistence.config.group&&this.modules.persistence.save("group")},d.prototype.setGroupStartOpen=function(e){if(!this.modExists("groupRows",!0))return!1;this.options.groupStartOpen=e,this.modules.groupRows.initialize(),this.options.groupBy?(this.rowManager.refreshActiveData("group"),this.options.persistence&&this.modExists("persistence",!0)&&this.modules.persistence.config.group&&this.modules.persistence.save("group")):console.warn("Grouping Update - cant refresh view, no groups have been set")},d.prototype.setGroupHeader=function(e){if(!this.modExists("groupRows",!0))return!1;this.options.groupHeader=e,this.modules.groupRows.initialize(),this.options.groupBy?(this.rowManager.refreshActiveData("group"),this.options.persistence&&this.modExists("persistence",!0)&&this.modules.persistence.config.group&&this.modules.persistence.save("group")):console.warn("Grouping Update - cant refresh view, no groups have been set")},d.prototype.getGroups=function(e){return!!this.modExists("groupRows",!0)&&this.modules.groupRows.getGroups(!0)},d.prototype.getGroupedData=function(){if(this.modExists("groupRows",!0))return this.options.groupBy?this.modules.groupRows.getGroupedData():this.getData()},d.prototype.getEditedCells=function(){if(this.modExists("edit",!0))return this.modules.edit.getEditedCells()},d.prototype.clearCellEdited=function(e){var t=this;this.modExists("edit",!0)&&(e||(e=this.modules.edit.getEditedCells()),Array.isArray(e)||(e=[e]),e.forEach(function(e){t.modules.edit.clearEdited(e._getSelf())}))},d.prototype.getCalcResults=function(){return!!this.modExists("columnCalcs",!0)&&this.modules.columnCalcs.getResults()},d.prototype.recalc=function(){this.modExists("columnCalcs",!0)&&this.modules.columnCalcs.recalcAll(this.rowManager.activeRows)},d.prototype.navigatePrev=function(){var e=!1;return!(!this.modExists("edit",!0)||!(e=this.modules.edit.currentCell))&&e.nav().prev()},d.prototype.navigateNext=function(){var e=!1;return!(!this.modExists("edit",!0)||!(e=this.modules.edit.currentCell))&&e.nav().next()},d.prototype.navigateLeft=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().left())},d.prototype.navigateRight=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().right())},d.prototype.navigateUp=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().up())},d.prototype.navigateDown=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().down())},d.prototype.undo=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.undo()},d.prototype.redo=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.redo()},d.prototype.getHistoryUndoSize=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.getHistoryUndoSize()},d.prototype.getHistoryRedoSize=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.getHistoryRedoSize()},d.prototype.download=function(e,t,o,i){this.modExists("download",!0)&&this.modules.download.download(e,t,o,i)},d.prototype.downloadToTab=function(e,t,o,i){this.modExists("download",!0)&&this.modules.download.download(e,t,o,i,!0)},d.prototype.tableComms=function(e,t,o,i){this.modules.comms.receive(e,t,o,i)},d.prototype.moduleBindings={},d.prototype.extendModule=function(e,t,o){if(d.prototype.moduleBindings[e]){var i=d.prototype.moduleBindings[e].prototype[t];if(i)if("object"==(void 0===o?"undefined":_typeof(o)))for(var n in o)i[n]=o[n];else console.warn("Module Error - Invalid value type, it must be an object");else console.warn("Module Error - property does not exist:",t)}else console.warn("Module Error - module does not exist:",e)},d.prototype.registerModule=function(e,t){d.prototype.moduleBindings[e]=t},d.prototype.bindModules=function(){this.modules={};for(var e in d.prototype.moduleBindings)this.modules[e]=new d.prototype.moduleBindings[e](this)},d.prototype.modExists=function(e,t){return!!this.modules[e]||(t&&console.error("Tabulator Module Not Installed: "+e),!1)},d.prototype.helpers={elVisible:function(e){return!(e.offsetWidth<=0&&e.offsetHeight<=0)},elOffset:function(e){var t=e.getBoundingClientRect();return{top:t.top+window.pageYOffset-document.documentElement.clientTop,left:t.left+window.pageXOffset-document.documentElement.clientLeft}},deepClone:function(e){var t=Array.isArray(e)?[]:{};for(var o in e)null!=e[o]&&"object"===_typeof(e[o])?e[o]instanceof Date?t[o]=new Date(e[o]):t[o]=this.deepClone(e[o]):t[o]=e[o];return t}},d.prototype.comms={tables:[],register:function(e){d.prototype.comms.tables.push(e)},deregister:function(e){var t=d.prototype.comms.tables.indexOf(e);t>-1&&d.prototype.comms.tables.splice(t,1)},lookupTable:function(e,t){var o,i,n=[];if("string"==typeof e){if(o=document.querySelectorAll(e),o.length)for(var s=0;s0?s.setWidth(n):s.reinitializeWidth()):this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()},fitColumns:function(e){function t(e){return"string"==typeof e?e.indexOf("%")>-1?n/100*parseInt(e):parseInt(e):e}function o(e,i,n,s){function r(e){return n*(e.column.definition.widthGrow||1)}function a(e){return t(e.width)-n*(e.column.definition.widthShrink||0)}var l=[],c=0,u=0,d=0,h=0,p=0,m=[];return e.forEach(function(e,t){var o=s?a(e):r(e);e.column.minWidth>=o?l.push(e):(m.push(e),p+=s?e.column.definition.widthShrink||1:e.column.definition.widthGrow||1)}),l.length?(l.forEach(function(e){c+=s?e.width-e.column.minWidth:e.column.minWidth,e.width=e.column.minWidth}),u=i-c,d=p?Math.floor(u/p):u,h=u-d*p,h+=o(m,u,d,s)):(h=p?i-Math.floor(i/p)*p:i,m.forEach(function(e){e.width=s?a(e):r(e)})),h}var i=this,n=i.table.element.clientWidth,s=0,r=0,a=0,l=0,c=[],u=[],d=0,h=0,p=0;this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update(),this.table.rowManager.element.scrollHeight>this.table.rowManager.element.clientHeight&&(n-=this.table.rowManager.element.offsetWidth-this.table.rowManager.element.clientWidth),e.forEach(function(e){var o,i,n;e.visible&&(o=e.definition.width,i=parseInt(e.minWidth),o?(n=t(o),s+=n>i?n:i,e.definition.widthShrink&&(u.push({column:e,width:n>i?n:i}),d+=e.definition.widthShrink)):(c.push({column:e,width:0}),a+=e.definition.widthGrow||1))}),r=n-s,l=Math.floor(r/a);var p=o(c,r,l,!1);c.length&&p>0&&(c[c.length-1].width+=+p),c.forEach(function(e){r-=e.width}),h=Math.abs(p)+r,h>0&&d&&(p=o(u,h,Math.floor(h/d),!0)),u.length&&(u[u.length-1].width-=p),c.forEach(function(e){e.column.setWidth(e.width)}),u.forEach(function(e){e.column.setWidth(e.width)})}},d.prototype.registerModule("layout",h);var p=function(e){this.table=e,this.locale="default",this.lang=!1,this.bindings={}};p.prototype.setHeaderFilterPlaceholder=function(e){this.langs.default.headerFilters.default=e},p.prototype.setHeaderFilterColumnPlaceholder=function(e,t){this.langs.default.headerFilters.columns[e]=t,this.lang&&!this.lang.headerFilters.columns[e]&&(this.lang.headerFilters.columns[e]=t)},p.prototype.installLang=function(e,t){this.langs[e]?this._setLangProp(this.langs[e],t):this.langs[e]=t},p.prototype._setLangProp=function(e,t){for(var o in t)e[o]&&"object"==_typeof(e[o])?this._setLangProp(e[o],t[o]):e[o]=t[o]},p.prototype.setLocale=function(e){function t(e,o){for(var i in e)"object"==_typeof(e[i])?(o[i]||(o[i]={}),t(e[i],o[i])):o[i]=e[i]}var o=this;if(e=e||"default",!0===e&&navigator.language&&(e=navigator.language.toLowerCase()),e&&!o.langs[e]){var i=e.split("-")[0];o.langs[i]?(console.warn("Localization Error - Exact matching locale not found, using closest match: ",e,i),e=i):(console.warn("Localization Error - Matching locale not found, using default: ",e),e="default")}o.locale=e,o.lang=d.prototype.helpers.deepClone(o.langs.default||{}),"default"!=e&&t(o.langs[e],o.lang),o.table.options.localized.call(o.table,o.locale,o.lang),o._executeBindings()},p.prototype.getLocale=function(e){return self.locale},p.prototype.getLang=function(e){return e?this.langs[e]:this.lang},p.prototype.getText=function(e,t){var e=t?e+"|"+t:e,o=e.split("|");return this._getLangElement(o,this.locale)||""},p.prototype._getLangElement=function(e,t){var o=this,i=o.lang;return e.forEach(function(e){var t;i&&(t=i[e],i=void 0!==t&&t)}),i},p.prototype.bind=function(e,t){this.bindings[e]||(this.bindings[e]=[]),this.bindings[e].push(t),t(this.getText(e),this.lang)},p.prototype._executeBindings=function(){var e=this;for(var t in e.bindings)!function(t){e.bindings[t].forEach(function(o){o(e.getText(t),e.lang)})}(t)},p.prototype.langs={default:{groups:{item:"item",items:"items"},columns:{},ajax:{loading:"Loading",error:"Error"},pagination:{page_size:"Page Size",page_title:"Show Page",first:"First",first_title:"First Page",last:"Last",last_title:"Last Page",prev:"Prev",prev_title:"Prev Page",next:"Next",next_title:"Next Page",all:"All"},headerFilters:{default:"filter column...",columns:{}}}},d.prototype.registerModule("localize",p);var m=function(e){this.table=e};m.prototype.getConnections=function(e){var t,o=this,i=[];return t=d.prototype.comms.lookupTable(e),t.forEach(function(e){o.table!==e&&i.push(e)}),i},m.prototype.send=function(e,t,o,i){var n=this,s=this.getConnections(e);s.forEach(function(e){e.tableComms(n.table.element,t,o,i)}),!s.length&&e&&console.warn("Table Connection Error - No tables matching selector found",e)},m.prototype.receive=function(e,t,o,i){if(this.table.modExists(t))return this.table.modules[t].commsReceived(e,o,i);console.warn("Inter-table Comms Error - no such module:",t)},d.prototype.registerModule("comms",m);var f=function(e){this.table=e,this.allowedTypes=["","data","download","clipboard","print","htmlOutput"]};f.prototype.initializeColumn=function(e){var t=this,o=!1,i={};this.allowedTypes.forEach(function(n){var s,r="accessor"+(n.charAt(0).toUpperCase()+n.slice(1));e.definition[r]&&(s=t.lookupAccessor(e.definition[r]))&&(o=!0,i[r]={accessor:s,params:e.definition[r+"Params"]||{}})}),o&&(e.modules.accessor=i)},f.prototype.lookupAccessor=function(e){var t=!1;switch(void 0===e?"undefined":_typeof(e)){case"string":this.accessors[e]?t=this.accessors[e]:console.warn("Accessor Error - No such accessor found, ignoring: ",e);break;case"function":t=e}return t},f.prototype.transformRow=function(e,t){var o=this,i="accessor"+(t.charAt(0).toUpperCase()+t.slice(1)),n=d.prototype.helpers.deepClone(e||{});return o.table.columnManager.traverse(function(e){var o,s,r,a;e.modules.accessor&&(s=e.modules.accessor[i]||e.modules.accessor.accessor||!1)&&"undefined"!=(o=e.getFieldValue(n))&&(a=e.getComponent(),r="function"==typeof s.params?s.params(o,n,t,a):s.params,e.setFieldValue(n,s.accessor(o,n,t,r,a)))}),n},f.prototype.accessors={},d.prototype.registerModule("accessor",f);var g=function(e){this.table=e,this.config=!1,this.url="",this.urlGenerator=!1,this.params=!1,this.loaderElement=this.createLoaderElement(),this.msgElement=this.createMsgElement(),this.loadingElement=!1,this.errorElement=!1,this.loaderPromise=!1,this.progressiveLoad=!1,this.loading=!1,this.requestOrder=0};g.prototype.initialize=function(){var e;this.loaderElement.appendChild(this.msgElement),this.table.options.ajaxLoaderLoading&&("string"==typeof this.table.options.ajaxLoaderLoading?(e=document.createElement("template"),e.innerHTML=this.table.options.ajaxLoaderLoading.trim(),this.loadingElement=e.content.firstChild):this.loadingElement=this.table.options.ajaxLoaderLoading),this.loaderPromise=this.table.options.ajaxRequestFunc||this.defaultLoaderPromise,this.urlGenerator=this.table.options.ajaxURLGenerator||this.defaultURLGenerator,this.table.options.ajaxLoaderError&&("string"==typeof this.table.options.ajaxLoaderError?(e=document.createElement("template"),e.innerHTML=this.table.options.ajaxLoaderError.trim(),this.errorElement=e.content.firstChild):this.errorElement=this.table.options.ajaxLoaderError),this.table.options.ajaxParams&&this.setParams(this.table.options.ajaxParams),this.table.options.ajaxConfig&&this.setConfig(this.table.options.ajaxConfig),this.table.options.ajaxURL&&this.setUrl(this.table.options.ajaxURL),this.table.options.ajaxProgressiveLoad&&(this.table.options.pagination?(this.progressiveLoad=!1,console.error("Progressive Load Error - Pagination and progressive load cannot be used at the same time")):this.table.modExists("page")?(this.progressiveLoad=this.table.options.ajaxProgressiveLoad,this.table.modules.page.initializeProgressive(this.progressiveLoad)):console.error("Pagination plugin is required for progressive ajax loading"))},g.prototype.createLoaderElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-loader"),e},g.prototype.createMsgElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-loader-msg"),e.setAttribute("role","alert"),e},g.prototype.setParams=function(e,t){if(t){this.params=this.params||{};for(var o in e)this.params[o]=e[o]}else this.params=e},g.prototype.getParams=function(){return this.params||{}},g.prototype.setConfig=function(e){if(this._loadDefaultConfig(),"string"==typeof e)this.config.method=e;else for(var t in e)this.config[t]=e[t]},g.prototype._loadDefaultConfig=function(e){var t=this;if(!t.config||e){t.config={};for(var o in t.defaultConfig)t.config[o]=t.defaultConfig[o]}},g.prototype.setUrl=function(e){this.url=e},g.prototype.getUrl=function(){return this.url},g.prototype.loadData=function(e,t){return this.progressiveLoad?this._loadDataProgressive():this._loadDataStandard(e,t)},g.prototype.nextPage=function(e){var t;this.loading||(t=this.table.options.ajaxProgressiveLoadScrollMargin||2*this.table.rowManager.getElement().clientHeight,ei||null===i)&&(i=e)}),null!==i?!1!==n?i.toFixed(n):i:""},min:function(e,t,o){var i=null,n=void 0!==o.precision&&o.precision;return e.forEach(function(e){((e=Number(e))"),o.dataTreeExpandElement?"string"==typeof o.dataTreeExpandElement?(e=document.createElement("div"),e.innerHTML=o.dataTreeExpandElement,this.expandEl=e.firstChild):this.expandEl=o.dataTreeExpandElement:(this.expandEl=document.createElement("div"),this.expandEl.classList.add("tabulator-data-tree-control"),this.expandEl.tabIndex=0,this.expandEl.innerHTML="
"),_typeof(o.dataTreeStartExpanded)){case"boolean":this.startOpen=function(e,t){return o.dataTreeStartExpanded};break;case"function":this.startOpen=o.dataTreeStartExpanded;break;default:this.startOpen=function(e,t){return o.dataTreeStartExpanded[t]}}},y.prototype.initializeRow=function(e){var t=e.getData()[this.field],o=Array.isArray(t),i=o||!o&&"object"===(void 0===t?"undefined":_typeof(t))&&null!==t;!i&&e.modules.dataTree&&e.modules.dataTree.branchEl&&e.modules.dataTree.branchEl.parentNode.removeChild(e.modules.dataTree.branchEl),!i&&e.modules.dataTree&&e.modules.dataTree.controlEl&&e.modules.dataTree.controlEl.parentNode.removeChild(e.modules.dataTree.controlEl),e.modules.dataTree={index:e.modules.dataTree?e.modules.dataTree.index:0,open:!!i&&(e.modules.dataTree?e.modules.dataTree.open:this.startOpen(e.getComponent(),0)),controlEl:!(!e.modules.dataTree||!i)&&e.modules.dataTree.controlEl,branchEl:!(!e.modules.dataTree||!i)&&e.modules.dataTree.branchEl,parent:!!e.modules.dataTree&&e.modules.dataTree.parent,children:i}},y.prototype.layoutRow=function(e){var t=this.elementField?e.getCell(this.elementField):e.getCells()[0],o=t.getElement(),i=e.modules.dataTree;i.branchEl&&(i.branchEl.parentNode&&i.branchEl.parentNode.removeChild(i.branchEl),i.branchEl=!1),i.controlEl&&(i.controlEl.parentNode&&i.controlEl.parentNode.removeChild(i.controlEl),i.controlEl=!1),this.generateControlElement(e,o),e.element.classList.add("tabulator-tree-level-"+i.index),i.index&&(this.branchEl?(i.branchEl=this.branchEl.cloneNode(!0),o.insertBefore(i.branchEl,o.firstChild),i.branchEl.style.marginLeft=(i.branchEl.offsetWidth+i.branchEl.style.marginRight)*(i.index-1)+i.index*this.indent+"px"):o.style.paddingLeft=parseInt(window.getComputedStyle(o,null).getPropertyValue("padding-left"))+i.index*this.indent+"px")},y.prototype.generateControlElement=function(e,t){var o=this,i=e.modules.dataTree,t=t||e.getCells()[0].getElement(),n=i.controlEl;!1!==i.children&&(i.open?(i.controlEl=this.collapseEl.cloneNode(!0),i.controlEl.addEventListener("click",function(t){t.stopPropagation(),o.collapseRow(e)})):(i.controlEl=this.expandEl.cloneNode(!0),i.controlEl.addEventListener("click",function(t){t.stopPropagation(),o.expandRow(e)})),i.controlEl.addEventListener("mousedown",function(e){e.stopPropagation()}),n&&n.parentNode===t?n.parentNode.replaceChild(i.controlEl,n):t.insertBefore(i.controlEl,t.firstChild))},y.prototype.setDisplayIndex=function(e){this.displayIndex=e},y.prototype.getDisplayIndex=function(){return this.displayIndex},y.prototype.getRows=function(e){var t=this,o=[];return e.forEach(function(e,i){var n,s;o.push(e),e instanceof a&&(n=e.modules.dataTree.children,n.index||!1===n.children||(s=t.getChildren(e),s.forEach(function(e){o.push(e)})))}),o},y.prototype.getChildren=function(e){var t=this,o=e.modules.dataTree,i=[],n=[];return!1!==o.children&&o.open&&(Array.isArray(o.children)||(o.children=this.generateChildren(e)),i=this.table.modExists("filter")?this.table.modules.filter.filter(o.children):o.children,this.table.modExists("sort")&&this.table.modules.sort.sort(i),i.forEach(function(e){n.push(e),t.getChildren(e).forEach(function(e){n.push(e)})})),n}, +y.prototype.generateChildren=function(e){var t=this,o=[],i=e.getData()[this.field];return Array.isArray(i)||(i=[i]),i.forEach(function(i){var n=new a(i||{},t.table.rowManager);n.modules.dataTree.index=e.modules.dataTree.index+1,n.modules.dataTree.parent=e,n.modules.dataTree.children&&(n.modules.dataTree.open=t.startOpen(n.getComponent(),n.modules.dataTree.index)),o.push(n)}),o},y.prototype.expandRow=function(e,t){var o=e.modules.dataTree;!1!==o.children&&(o.open=!0,e.reinitialize(),this.table.rowManager.refreshActiveData("tree",!1,!0),this.table.options.dataTreeRowExpanded(e.getComponent(),e.modules.dataTree.index))},y.prototype.collapseRow=function(e){var t=e.modules.dataTree;!1!==t.children&&(t.open=!1,e.reinitialize(),this.table.rowManager.refreshActiveData("tree",!1,!0),this.table.options.dataTreeRowCollapsed(e.getComponent(),e.modules.dataTree.index))},y.prototype.toggleRow=function(e){var t=e.modules.dataTree;!1!==t.children&&(t.open?this.collapseRow(e):this.expandRow(e))},y.prototype.getTreeParent=function(e){return!!e.modules.dataTree.parent&&e.modules.dataTree.parent.getComponent()},y.prototype.getFilteredTreeChildren=function(e){var t,o=e.modules.dataTree,i=[];return o.children&&(Array.isArray(o.children)||(o.children=this.generateChildren(e)),t=this.table.modExists("filter")?this.table.modules.filter.filter(o.children):o.children,t.forEach(function(e){e instanceof a&&i.push(e)})),i},y.prototype.rowDelete=function(e){var t,o=e.modules.dataTree.parent;o&&(t=this.findChildIndex(e,o),!1!==t&&o.data[this.field].splice(t,1),o.data[this.field].length||delete o.data[this.field],this.initializeRow(o),this.layoutRow(o)),this.table.rowManager.refreshActiveData("tree",!1,!0)},y.prototype.addTreeChildRow=function(e,t,o,i){var n=!1;"string"==typeof t&&(t=JSON.parse(t)),Array.isArray(e.data[this.field])||(e.data[this.field]=[],e.modules.dataTree.open=this.startOpen(e.getComponent(),e.modules.dataTree.index)),void 0!==i&&!1!==(n=this.findChildIndex(i,e))&&e.data[this.field].splice(o?n:n+1,0,t),!1===n&&(o?e.data[this.field].unshift(t):e.data[this.field].push(t)),this.initializeRow(e),this.layoutRow(e),this.table.rowManager.refreshActiveData("tree",!1,!0)},y.prototype.findChildIndex=function(e,t){var o=this,i=!1;return"object"==(void 0===e?"undefined":_typeof(e))?e instanceof a?i=e.data:e instanceof r?i=e._getSelf().data:"undefined"!=typeof HTMLElement&&e instanceof HTMLElement&&t.modules.dataTree&&(i=t.modules.dataTree.children.find(function(t){return t instanceof a&&t.element===e}))&&(i=i.data):i=void 0!==e&&null!==e&&t.data[this.field].find(function(t){return t.data[o.table.options.index]==e}),i&&(Array.isArray(t.data[this.field])&&(i=t.data[this.field].indexOf(i)),-1==i&&(i=!1)),i},y.prototype.getTreeChildren=function(e){var t=e.modules.dataTree,o=[];return t.children&&(Array.isArray(t.children)||(t.children=this.generateChildren(e)),t.children.forEach(function(e){e instanceof a&&o.push(e.getComponent())})),o},y.prototype.checkForRestyle=function(e){e.row.cells.indexOf(e)||e.row.reinitialize()},y.prototype.getChildField=function(){return this.field},y.prototype.redrawNeeded=function(e){return!!this.field&&void 0!==e[this.field]||!!this.elementField&&void 0!==e[this.elementField]},d.prototype.registerModule("dataTree",y);var w=function(e){this.table=e};w.prototype.download=function(e,t,o,i,n){function s(o,i){n?!0===n?r.triggerDownload(o,i,e,t,!0):n(o):r.triggerDownload(o,i,e,t)}var r=this,a=!1;if("function"==typeof e?a=e:r.downloaders[e]?a=r.downloaders[e]:console.warn("Download Error - No such download type found: ",e),a){var l=this.generateExportList(i);a.call(this.table,l,o||{},s)}},w.prototype.generateExportList=function(e){var t=this.table.modules.export.generateExportList(this.table.options.downloadConfig,!1,e||this.table.options.downloadRowRange,"download"),o=this.table.options.groupHeaderDownload;return o&&!Array.isArray(o)&&(o=[o]),t.forEach(function(e){var t;"group"===e.type&&(t=e.columns[0],o&&o[e.indent]&&(t.value=o[e.indent](t.value,e.component._group.getRowCount(),e.component._group.getData(),e.component)))}),t},w.prototype.triggerDownload=function(e,t,o,i,n){var s=document.createElement("a"),r=new Blob([e],{type:t}),i=i||"Tabulator."+("function"==typeof o?"txt":o);(r=this.table.options.downloadReady.call(this.table,e,r))&&(n?window.open(window.URL.createObjectURL(r)):navigator.msSaveOrOpenBlob?navigator.msSaveOrOpenBlob(r,i):(s.setAttribute("href",window.URL.createObjectURL(r)),s.setAttribute("download",i),s.style.display="none",document.body.appendChild(s),s.click(),document.body.removeChild(s)),this.table.options.downloadComplete&&this.table.options.downloadComplete())},w.prototype.commsReceived=function(e,t,o){switch(t){case"intercept":this.download(o.type,"",o.options,o.active,o.intercept)}},w.prototype.downloaders={csv:function(e,t,o){var i=t&&t.delimiter?t.delimiter:",",n=[],s=[];e.forEach(function(e){var t=[];switch(e.type){case"group":console.warn("Download Warning - CSV downloader cannot process row groups");break;case"calc":console.warn("Download Warning - CSV downloader cannot process column calculations");break;case"header":e.columns.forEach(function(e,t){e&&1===e.depth&&(s[t]=void 0===e.value||"null"==typeof e.value?"":e.value)});break;case"row":e.columns.forEach(function(e){if(e){switch(_typeof(e.value)){case"object":e.value=JSON.stringify(e.value);break;case"undefined":case"null":e.value=""}t.push('"'+String(e.value).split('"').join('""')+'"')}}),n.push(t.join(i))}}),s.length&&(n=[s].concat(n)),n=n.join("\n"),t.bom&&(n="\ufeff"+n),o(n,"text/csv")},json:function(e,t,o){var i=[];e.forEach(function(e){var t={};switch(e.type){case"header":break;case"group":console.warn("Download Warning - JSON downloader cannot process row groups");break;case"calc":console.warn("Download Warning - JSON downloader cannot process column calculations");break;case"row":e.columns.forEach(function(e){e&&(t[e.component.getField()]=e.value)}),i.push(t)}}),i=JSON.stringify(i,null,"\t"),o(i,"application/json")},pdf:function(e,t,o){function i(e,t){var o=[];return e.columns.forEach(function(e){var i;if(e){switch(_typeof(e.value)){case"object":e.value=JSON.stringify(e.value);break;case"undefined":case"null":e.value=""}i={content:e.value,colSpan:e.width,rowSpan:e.height},t&&(i.styles=t),o.push(i)}else o.push("")}),o}var n=[],s=[],r={},a=t.rowGroupStyles||{fontStyle:"bold",fontSize:12,cellPadding:6,fillColor:220},l=t.rowCalcStyles||{fontStyle:"bold",fontSize:10,cellPadding:4,fillColor:232},c=t.jsPDF||{},u=t&&t.title?t.title:"";c.orientation||(c.orientation=t.orientation||"landscape"),c.unit||(c.unit="pt"),e.forEach(function(e){switch(e.type){case"header":n.push(i(e));break;case"group":s.push(i(e,a));break;case"calc":s.push(i(e,l));break;case"row":s.push(i(e))}});var d=new jsPDF(c);t&&t.autoTable&&(r="function"==typeof t.autoTable?t.autoTable(d)||{}:t.autoTable),u&&(r.addPageContent=function(e){d.text(u,40,30)}),r.head=n,r.body=s,d.autoTable(r),t&&t.documentProcessing&&t.documentProcessing(d),o(d.output("arraybuffer"),"application/pdf")},xlsx:function(e,t,o){function i(){var t=[],o=[],i={},n={s:{c:0,r:0},e:{c:e[0]?e[0].columns.reduce(function(e,t){return e+(t&&t.width?t.width:1)},0):0,r:e.length}};return e.forEach(function(e,i){var n=[];e.columns.forEach(function(e,t){e?(n.push(e.value instanceof Date||"object"!==_typeof(e.value)?e.value:JSON.stringify(e.value)),(e.width>1||e.height>-1)&&o.push({s:{r:i,c:t},e:{r:i+e.height-1,c:t+e.width-1}})):n.push("")}),t.push(n)}),XLSX.utils.sheet_add_aoa(i,t),i["!ref"]=XLSX.utils.encode_range(n),o.length&&(i["!merges"]=o),i}var n,s=this,r=t.sheetName||"Sheet1",a=XLSX.utils.book_new();if(a.SheetNames=[],a.Sheets={},t.sheetOnly)return void o(i());if(t.sheets)for(var l in t.sheets)!0===t.sheets[l]?(a.SheetNames.push(l),a.Sheets[l]=i()):(a.SheetNames.push(l),this.table.modules.comms.send(t.sheets[l],"download","intercept",{type:"xlsx",options:{sheetOnly:!0},active:s.active,intercept:function(e){a.Sheets[l]=e}}));else a.SheetNames.push(r),a.Sheets[r]=i();t.documentProcessing&&(a=t.documentProcessing(a)),n=XLSX.write(a,{bookType:"xlsx",bookSST:!0,type:"binary"}),o(function(e){for(var t=new ArrayBuffer(e.length),o=new Uint8Array(t),i=0;i!=e.length;++i)o[i]=255&e.charCodeAt(i);return t}(n),"application/octet-stream")},html:function(e,t,o){this.modExists("export",!0)&&o(this.modules.export.genereateHTMLTable(e),"text/html")}},d.prototype.registerModule("download",w);var E=function(e){this.table=e,this.currentCell=!1,this.mouseClick=!1,this.recursionBlock=!1,this.invalidEdit=!1,this.editedCells=[]};E.prototype.initializeColumn=function(e){var t=this,o={editor:!1,blocked:!1,check:e.definition.editable,params:e.definition.editorParams||{}};switch(_typeof(e.definition.editor)){case"string":"tick"===e.definition.editor&&(e.definition.editor="tickCross",console.warn("DEPRECATION WARNING - the tick editor has been deprecated, please use the tickCross editor")),t.editors[e.definition.editor]?o.editor=t.editors[e.definition.editor]:console.warn("Editor Error - No such editor found: ",e.definition.editor);break;case"function":o.editor=e.definition.editor;break;case"boolean":!0===e.definition.editor&&("function"!=typeof e.definition.formatter?("tick"===e.definition.formatter&&(e.definition.formatter="tickCross",console.warn("DEPRECATION WARNING - the tick editor has been deprecated, please use the tickCross editor")),t.editors[e.definition.formatter]?o.editor=t.editors[e.definition.formatter]:o.editor=t.editors.input):console.warn("Editor Error - Cannot auto lookup editor for a custom formatter: ",e.definition.formatter))}o.editor&&(e.modules.edit=o)},E.prototype.getCurrentCell=function(){return!!this.currentCell&&this.currentCell.getComponent()},E.prototype.clearEditor=function(e){var t,o=this.currentCell;if(this.invalidEdit=!1,o){for(this.currentCell=!1,t=o.getElement(),e?o.validate():t.classList.remove("tabulator-validation-fail"),t.classList.remove("tabulator-editing");t.firstChild;)t.removeChild(t.firstChild);o.row.getElement().classList.remove("tabulator-row-editing")}},E.prototype.cancelEdit=function(){if(this.currentCell){var e=this.currentCell,t=this.currentCell.getComponent();this.clearEditor(!0),e.setValueActual(e.getValue()),e.cellRendered(),e.column.cellEvents.cellEditCancelled&&e.column.cellEvents.cellEditCancelled.call(this.table,t),this.table.options.cellEditCancelled.call(this.table,t)}},E.prototype.bindEditor=function(e){var t=this,o=e.getElement();o.setAttribute("tabindex",0),o.addEventListener("click",function(e){o.classList.contains("tabulator-editing")||o.focus({preventScroll:!0})}),o.addEventListener("mousedown",function(e){t.mouseClick=!0}),o.addEventListener("focus",function(o){t.recursionBlock||t.edit(e,o,!1)})},E.prototype.focusCellNoEvent=function(e,t){this.recursionBlock=!0,t&&"ie"===this.table.browser||e.getElement().focus({preventScroll:!0}),this.recursionBlock=!1},E.prototype.editCell=function(e,t){this.focusCellNoEvent(e),this.edit(e,!1,t)},E.prototype.focusScrollAdjust=function(e){if("virtual"==this.table.rowManager.getRenderMode()){var t=this.table.rowManager.element.scrollTop,o=this.table.rowManager.element.clientHeight+this.table.rowManager.element.scrollTop,i=e.row.getElement();i.offsetTop;i.offsetTopo&&(this.table.rowManager.element.scrollTop+=i.offsetTop+i.offsetHeight-o)}},E.prototype.edit=function(e,t,o){function i(t){if(c.currentCell===e){var o=!0;return e.column.modules.validate&&c.table.modExists("validate")&&"manual"!=c.table.options.validationMode&&(o=c.table.modules.validate.validate(e.column.modules.validate,e,t)),!0===o||"highlight"===c.table.options.validationMode?(c.clearEditor(),e.setValue(t,!0),e.modules.edit||(e.modules.edit={}),e.modules.edit.edited=!0,-1==c.editedCells.indexOf(e)&&c.editedCells.push(e),c.table.options.dataTree&&c.table.modExists("dataTree")&&c.table.modules.dataTree.checkForRestyle(e),!0===o||(h.classList.add("tabulator-validation-fail"),!1)):(c.invalidEdit=!0,h.classList.add("tabulator-validation-fail"),c.focusCellNoEvent(e,!0),d(),c.table.options.validationFailed.call(c.table,e.getComponent(),t,o),!1)}}function n(){c.currentCell===e&&(c.cancelEdit(),c.table.options.dataTree&&c.table.modExists("dataTree")&&c.table.modules.dataTree.checkForRestyle(e))}function s(e){d=e}var r,a,l,c=this,u=!0,d=function(){},h=e.getElement();if(this.currentCell)return void(this.invalidEdit||this.cancelEdit());if(e.column.modules.edit.blocked)return this.mouseClick=!1,h.blur(),!1;switch(t&&t.stopPropagation(),_typeof(e.column.modules.edit.check)){case"function":u=e.column.modules.edit.check(e.getComponent());break;case"boolean":u=e.column.modules.edit.check}if(u||o){if(c.cancelEdit(),c.currentCell=e,this.focusScrollAdjust(e),a=e.getComponent(),this.mouseClick&&(this.mouseClick=!1,e.column.cellEvents.cellClick&&e.column.cellEvents.cellClick.call(this.table,t,a)),e.column.cellEvents.cellEditing&&e.column.cellEvents.cellEditing.call(this.table,a),c.table.options.cellEditing.call(this.table,a),l="function"==typeof e.column.modules.edit.params?e.column.modules.edit.params(a):e.column.modules.edit.params,!1===(r=e.column.modules.edit.editor.call(c,a,s,i,n,l)))return h.blur(),!1;if(!(r instanceof Node))return console.warn("Edit Error - Editor should return an instance of Node, the editor returned:",r),h.blur(),!1;for(h.classList.add("tabulator-editing"),e.row.getElement().classList.add("tabulator-row-editing");h.firstChild;)h.removeChild(h.firstChild);h.appendChild(r),d();for(var p=h.children,m=0;m46){if(o>=i.length)return t.preventDefault(),t.stopPropagation(),a=!1,!1;switch(i[o]){case n:if(l.toUpperCase()==l.toLowerCase())return t.preventDefault(),t.stopPropagation(),a=!1,!1;break;case s:if(isNaN(l))return t.preventDefault(),t.stopPropagation(),a=!1,!1;break;case r:break;default:if(l!==i[o])return t.preventDefault(),t.stopPropagation(),a=!1,!1}a=!0}}),e.addEventListener("keyup",function(i){i.keyCode>46&&t.maskAutoFill&&o(e.value.length)}),e.placeholder||(e.placeholder=i),t.maskAutoFill&&o(e.value.length)},E.prototype.getEditedCells=function(){var e=[];return this.editedCells.forEach(function(t){e.push(t.getComponent())}),e},E.prototype.clearEdited=function(e){var t;e.modules.edit&&e.modules.edit.edited&&(e.modules.validate.invalid=!1,(t=this.editedCells.indexOf(e))>-1&&this.editedCells.splice(t,1))},E.prototype.editors={input:function(e,t,o,i,n){function s(e){(null===r||void 0===r)&&""!==a.value||a.value!==r?o(a.value)&&(r=a.value):i()}var r=e.getValue(),a=document.createElement("input");if(a.setAttribute("type",n.search?"search":"text"),a.style.padding="4px",a.style.width="100%",a.style.boxSizing="border-box",n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var l in n.elementAttributes)"+"==l.charAt(0)?(l=l.slice(1),a.setAttribute(l,a.getAttribute(l)+n.elementAttributes["+"+l])):a.setAttribute(l,n.elementAttributes[l]);return a.value=void 0!==r?r:"",t(function(){a.focus({preventScroll:!0}),a.style.height="100%"}),a.addEventListener("change",s),a.addEventListener("blur",s),a.addEventListener("keydown",function(e){switch(e.keyCode){case 13:s(e);break;case 27:i()}}),n.mask&&this.table.modules.edit.maskInput(a,n),a},textarea:function(e,t,o,i,n){function s(t){(null===r||void 0===r)&&""!==c.value||c.value!==r?(o(c.value)&&(r=c.value),setTimeout(function(){e.getRow().normalizeHeight()},300)):i()}var r=e.getValue(),a=n.verticalNavigation||"hybrid",l=String(null!==r&&void 0!==r?r:""),c=(l.match(/(?:\r\n|\r|\n)/g),document.createElement("textarea")),u=0;if(c.style.display="block",c.style.padding="2px",c.style.height="100%",c.style.width="100%",c.style.boxSizing="border-box",c.style.whiteSpace="pre-wrap",c.style.resize="none",n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var d in n.elementAttributes)"+"==d.charAt(0)?(d=d.slice(1),c.setAttribute(d,c.getAttribute(d)+n.elementAttributes["+"+d])):c.setAttribute(d,n.elementAttributes[d]);return c.value=l,t(function(){c.focus({preventScroll:!0}),c.style.height="100%"}),c.addEventListener("change",s),c.addEventListener("blur",s),c.addEventListener("keyup",function(){c.style.height="";var t=c.scrollHeight;c.style.height=t+"px",t!=u&&(u=t,e.getRow().normalizeHeight())}),c.addEventListener("keydown",function(e){switch(e.keyCode){case 27:i();break;case 38:("editor"==a||"hybrid"==a&&c.selectionStart)&&(e.stopImmediatePropagation(),e.stopPropagation());break;case 40:("editor"==a||"hybrid"==a&&c.selectionStart!==c.value.length)&&(e.stopImmediatePropagation(),e.stopPropagation())}}),n.mask&&this.table.modules.edit.maskInput(c,n),c},number:function(e,t,o,i,n){function s(){var e=l.value;isNaN(e)||""===e||(e=Number(e)),e!==r?o(e)&&(r=e):i()}var r=e.getValue(),a=n.verticalNavigation||"editor",l=document.createElement("input");if(l.setAttribute("type","number"),void 0!==n.max&&l.setAttribute("max",n.max),void 0!==n.min&&l.setAttribute("min",n.min),void 0!==n.step&&l.setAttribute("step",n.step),l.style.padding="4px",l.style.width="100%",l.style.boxSizing="border-box",n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var c in n.elementAttributes)"+"==c.charAt(0)?(c=c.slice(1),l.setAttribute(c,l.getAttribute(c)+n.elementAttributes["+"+c])):l.setAttribute(c,n.elementAttributes[c]);l.value=r;var u=function(e){s()};return t(function(){l.removeEventListener("blur",u),l.focus({preventScroll:!0}),l.style.height="100%",l.addEventListener("blur",u)}),l.addEventListener("keydown",function(e){switch(e.keyCode){case 13:s();break;case 27:i();break;case 38:case 40:"editor"==a&&(e.stopImmediatePropagation(),e.stopPropagation())}}),n.mask&&this.table.modules.edit.maskInput(l,n),l},range:function(e,t,o,i,n){function s(){var e=a.value;isNaN(e)||""===e||(e=Number(e)),e!=r?o(e)&&(r=e):i()}var r=e.getValue(),a=document.createElement("input");if(a.setAttribute("type","range"),void 0!==n.max&&a.setAttribute("max",n.max),void 0!==n.min&&a.setAttribute("min",n.min),void 0!==n.step&&a.setAttribute("step",n.step),a.style.padding="4px",a.style.width="100%",a.style.boxSizing="border-box",n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var l in n.elementAttributes)"+"==l.charAt(0)?(l=l.slice(1),a.setAttribute(l,a.getAttribute(l)+n.elementAttributes["+"+l])):a.setAttribute(l,n.elementAttributes[l]);return a.value=r,t(function(){a.focus({preventScroll:!0}),a.style.height="100%"}),a.addEventListener("blur",function(e){s()}),a.addEventListener("keydown",function(e){switch(e.keyCode){case 13:s();break;case 27:i()}}),a},select:function(e,t,o,i,n){function s(t){var o,i={},s=w.table.getData();return o=t?w.table.columnManager.getColumnByField(t):e.getColumn()._getSelf(),o?(s.forEach(function(e){var t=o.getFieldValue(e);null!==t&&void 0!==t&&""!==t&&(i[t]=!0)}),i=n.sortValuesList?"asc"==n.sortValuesList?Object.keys(i).sort():Object.keys(i).sort().reverse():Object.keys(i)):console.warn("unable to find matching column to create select lookup list:",t),i}function r(t,o){function i(e){var e={label:e.label,value:e.value,itemParams:e.itemParams,elementAttributes:e.elementAttributes,element:!1};return o.indexOf(e.value)>-1&&c(e),n.push(e),s.push(e),e}var n=[],s=[];if("function"==typeof t&&(t=t(e)),Array.isArray(t))t.forEach(function(e){var t;"object"===(void 0===e?"undefined":_typeof(e))?e.options?(t={label:e.label,group:!0,itemParams:e.itemParams,elementAttributes:e.elementAttributes,element:!1},s.push(t),e.options.forEach(function(e){i(e)})):i(e):(t={label:e,value:e,element:!1},o.indexOf(t.value)>-1&&c(t),n.push(t),s.push(t))});else for(var r in t){var l={label:t[r],value:r,element:!1};o.indexOf(l.value)>-1&&c(l),n.push(l),s.push(l)}D=n,S=s,a()}function a(){for(;L.firstChild;)L.removeChild(L.firstChild);S.forEach(function(t){var o=t.element;if(!o){if(o=document.createElement("div"),t.label=n.listItemFormatter?n.listItemFormatter(t.value,t.label,e,o,t.itemParams):t.label,t.group?(o.classList.add("tabulator-edit-select-list-group"),o.tabIndex=0,o.innerHTML=""===t.label?" ":t.label):(o.classList.add("tabulator-edit-select-list-item"),o.tabIndex=0,o.innerHTML=""===t.label?" ":t.label,o.addEventListener("click",function(){T?(h(t),M.focus()):p(t)}),H.indexOf(t)>-1&&o.classList.add("active")),t.elementAttributes&&"object"==_typeof(t.elementAttributes))for(var i in t.elementAttributes)"+"==i.charAt(0)?(i=i.slice(1),o.setAttribute(i,M.getAttribute(i)+t.elementAttributes["+"+i])):o.setAttribute(i,t.elementAttributes[i]);o.addEventListener("mousedown",function(){z=!1,setTimeout(function(){z=!0},10)}),t.element=o}L.appendChild(o)})}function l(e,t){!T&&k&&k.element&&k.element.classList.remove("active"),k&&k.element&&k.element.classList.remove("focused"),k=e,e.element&&(e.element.classList.add("focused"),t&&e.element.classList.add("active"))}function c(e){-1==H.indexOf(e)&&(H.push(e),l(e,!0)),f()}function u(e){var t=H[e];e>-1&&(H.splice(e,1),t.element&&t.element.classList.remove("active"))}function h(e){e||(e=k);var t=H.indexOf(e);t>-1?u(t):(!0!==T&&H.length>=T&&u(0),c(e)),f()}function p(e){v(),e||(e=k),e&&o(e.value)}function m(){v();var e=[];H.forEach(function(t){e.push(t.value)}),o(e)}function f(){var e=[];H.forEach(function(t){e.push(t.label)}),M.value=e.join(", ")}function g(){v(),i()}function b(){if(!L.parentNode){!0===n.values?r(s(),R):"string"==typeof n.values?r(s(n.values),R):r(n.values||[],R);var e=d.prototype.helpers.elOffset(E);L.style.minWidth=E.offsetWidth+"px",L.style.top=e.top+E.offsetHeight+"px",L.style.left=e.left+"px",L.addEventListener("mousedown",function(e){z=!1,setTimeout(function(){z=!0},10)}),document.body.appendChild(L)}}function v(){L.parentNode&&L.parentNode.removeChild(L),y()}function y(){w.table.rowManager.element.removeEventListener("scroll",g)}var w=this,E=e.getElement(),C=e.getValue(),x=n.verticalNavigation||"editor",R=void 0!==C||null===C?C:void 0!==n.defaultValue?n.defaultValue:[],M=document.createElement("input"),L=document.createElement("div"),T=n.multiselect,D=[],k={},S=[],H=[],z=!0;if(this.table.rowManager.element.addEventListener("scroll",g),(Array.isArray(n)||!Array.isArray(n)&&"object"===(void 0===n?"undefined":_typeof(n))&&!n.values)&&(console.warn("DEPRECATION WARNING - values for the select editor must now be passed into the values property of the editorParams object, not as the editorParams object"),n={values:n}),M.setAttribute("type","text"),M.style.padding="4px",M.style.width="100%",M.style.boxSizing="border-box",M.style.cursor="default",M.readOnly=0!=this.currentCell,n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var A in n.elementAttributes)"+"==A.charAt(0)?(A=A.slice(1),M.setAttribute(A,M.getAttribute(A)+n.elementAttributes["+"+A])):M.setAttribute(A,n.elementAttributes[A]);return M.value=void 0!==C||null===C?C:"",M.addEventListener("keydown",function(e){var t;switch(e.keyCode){case 38:t=D.indexOf(k),("editor"==x||"hybrid"==x&&t)&&(e.stopImmediatePropagation(),e.stopPropagation(),e.preventDefault(),t>0&&l(D[t-1],!T));break;case 40:t=D.indexOf(k),("editor"==x||"hybrid"==x&&t-1||String(t.title).toLowerCase().indexOf(String(e).toLowerCase())>-1)&&s.push(t)}),h(s,t))}function l(e){var t=document.createElement("div");u(),!1!==e&&(t.classList.add("tabulator-edit-select-list-notice"),t.tabIndex=0,e instanceof Node?t.appendChild(e):t.innerHTML=e,L.appendChild(t))}function c(e){var t=[];if(Array.isArray(e))e.forEach(function(e){var o={};"object"===(void 0===e?"undefined":_typeof(e))?(o.title=n.listItemFormatter?n.listItemFormatter(e.value,e.label):e.label,o.value=e.value):(o.title=n.listItemFormatter?n.listItemFormatter(e,e):e,o.value=e),t.push(o)});else for(var o in e){var i={title:n.listItemFormatter?n.listItemFormatter(o,e[o]):e[o],value:o};t.push(i)}return t}function u(){for(;L.firstChild;)L.removeChild(L.firstChild)}function h(e,t){e.length?p(e,t):n.emptyPlaceholder&&l(n.emptyPlaceholder)}function p(e,t){var o=!1;u(),T=e,T.forEach(function(e){var i=e.element;i||(i=document.createElement("div"),i.classList.add("tabulator-edit-select-list-item"),i.tabIndex=0,i.innerHTML=e.title,i.addEventListener("click",function(t){g(e),m()}),i.addEventListener("mousedown",function(e){k=!1,setTimeout(function(){k=!0},10)}),e.element=i,t&&e.value==C&&(M.value=e.title,e.element.classList.add("active"),o=!0),e===D&&(e.element.classList.add("active"),o=!0)),L.appendChild(i)}),o||g(!1)}function m(){b(),D?C!==D.value?(C=D.value,M.value=D.title,o(D.value)):i():n.freetext?(C=M.value,o(M.value)):n.allowEmpty&&""===M.value?(C=M.value,o(M.value)):i()}function f(){if(!L.parentNode){for(;L.firstChild;)L.removeChild(L.firstChild);var e=d.prototype.helpers.elOffset(E);L.style.minWidth=E.offsetWidth+"px",L.style.top=e.top+E.offsetHeight+"px",L.style.left=e.left+"px",document.body.appendChild(L)}}function g(e,t){D&&D.element&&D.element.classList.remove("active"),D=e,e&&e.element&&e.element.classList.add("active")}function b(){L.parentNode&&L.parentNode.removeChild(L),y()}function v(){b(),i()}function y(){w.table.rowManager.element.removeEventListener("scroll",v)}var w=this,E=e.getElement(),C=e.getValue(),x=n.verticalNavigation||"editor",R=void 0!==C||null===C?C:void 0!==n.defaultValue?n.defaultValue:"",M=document.createElement("input"),L=document.createElement("div"),T=[],D=!1,k=!0,S=!1;if(this.table.rowManager.element.addEventListener("scroll",v),M.setAttribute("type","search"),M.style.padding="4px",M.style.width="100%",M.style.boxSizing="border-box",n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var H in n.elementAttributes)"+"==H.charAt(0)?(H=H.slice(1),M.setAttribute(H,M.getAttribute(H)+n.elementAttributes["+"+H])):M.setAttribute(H,n.elementAttributes[H]);return L.classList.add("tabulator-edit-select-list"),L.addEventListener("mousedown",function(e){k=!1,setTimeout(function(){k=!0},10)}),M.addEventListener("keydown",function(e){var t;switch(e.keyCode){case 38:t=T.indexOf(D),("editor"==x||"hybrid"==x&&t)&&(e.stopImmediatePropagation(),e.stopPropagation(),e.preventDefault(),g(t>0?T[t-1]:!1));break;case 40:t=T.indexOf(D),("editor"==x||"hybrid"==x&&t'):("ie"==a.table.browser?t.setAttribute("class","tabulator-star-inactive"):t.classList.replace("tabulator-star-active","tabulator-star-inactive"),t.innerHTML='')})}function r(e){c=e,s(e)}var a=this,l=e.getElement(),c=e.getValue(),u=l.getElementsByTagName("svg").length||5,d=l.getElementsByTagName("svg")[0]?l.getElementsByTagName("svg")[0].getAttribute("width"):14,h=[],p=document.createElement("div"),m=document.createElementNS("http://www.w3.org/2000/svg","svg");if(l.style.whiteSpace="nowrap",l.style.overflow="hidden",l.style.textOverflow="ellipsis",p.style.verticalAlign="middle",p.style.display="inline-block",p.style.padding="4px",m.setAttribute("width",d),m.setAttribute("height",d),m.setAttribute("viewBox","0 0 512 512"),m.setAttribute("xml:space","preserve"),m.style.padding="0 1px",n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var f in n.elementAttributes)"+"==f.charAt(0)?(f=f.slice(1),p.setAttribute(f,p.getAttribute(f)+n.elementAttributes["+"+f])):p.setAttribute(f,n.elementAttributes[f]);for(var g=1;g<=u;g++)!function(e){var t=document.createElement("span"),i=m.cloneNode(!0);h.push(i),t.addEventListener("mouseenter",function(t){t.stopPropagation(),t.stopImmediatePropagation(),s(e)}),t.addEventListener("mousemove",function(e){e.stopPropagation(),e.stopImmediatePropagation()}),t.addEventListener("click",function(t){t.stopPropagation(),t.stopImmediatePropagation(),o(e),l.blur()}),t.appendChild(i),p.appendChild(t)}(g);return c=Math.min(parseInt(c),u),s(c),p.addEventListener("mousemove",function(e){s(0)}),p.addEventListener("click",function(e){o(0)}),l.addEventListener("blur",function(e){i()}),l.addEventListener("keydown",function(e){switch(e.keyCode){case 39:r(c+1);break;case 37:r(c-1);break;case 13:o(c);break;case 27:i()}}),p},progress:function(e,t,o,i,n){function s(){var e=d*Math.round(m.offsetWidth/(l.clientWidth/100))+u;o(e),l.setAttribute("aria-valuenow",e),l.setAttribute("aria-label",h)}var r,a,l=e.getElement(),c=void 0===n.max?l.getElementsByTagName("div")[0].getAttribute("max")||100:n.max,u=void 0===n.min?l.getElementsByTagName("div")[0].getAttribute("min")||0:n.min,d=(c-u)/100,h=e.getValue()||0,p=document.createElement("div"),m=document.createElement("div");if(p.style.position="absolute",p.style.right="0",p.style.top="0",p.style.bottom="0",p.style.width="5px",p.classList.add("tabulator-progress-handle"),m.style.display="inline-block", +m.style.position="relative",m.style.height="100%",m.style.backgroundColor="#488CE9",m.style.maxWidth="100%",m.style.minWidth="0%",n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var f in n.elementAttributes)"+"==f.charAt(0)?(f=f.slice(1),m.setAttribute(f,m.getAttribute(f)+n.elementAttributes["+"+f])):m.setAttribute(f,n.elementAttributes[f]);return l.style.padding="4px 4px",h=Math.min(parseFloat(h),c),h=Math.max(parseFloat(h),u),h=Math.round((h-u)/d),m.style.width=h+"%",l.setAttribute("aria-valuemin",u),l.setAttribute("aria-valuemax",c),m.appendChild(p),p.addEventListener("mousedown",function(e){r=e.screenX,a=m.offsetWidth}),p.addEventListener("mouseover",function(){p.style.cursor="ew-resize"}),l.addEventListener("mousemove",function(e){r&&(m.style.width=a+e.screenX-r+"px")}),l.addEventListener("mouseup",function(e){r&&(e.stopPropagation(),e.stopImmediatePropagation(),r=!1,a=!1,s())}),l.addEventListener("keydown",function(e){switch(e.keyCode){case 39:e.preventDefault(),m.style.width=m.clientWidth+l.clientWidth/100+"px";break;case 37:e.preventDefault(),m.style.width=m.clientWidth-l.clientWidth/100+"px";break;case 9:case 13:s();break;case 27:i()}}),l.addEventListener("blur",function(){i()}),m},tickCross:function(e,t,o,i,n){function s(e){return l?e?u?c:a.checked:a.checked&&!u?(a.checked=!1,a.indeterminate=!0,u=!0,c):(u=!1,a.checked):a.checked}var r=e.getValue(),a=document.createElement("input"),l=n.tristate,c=void 0===n.indeterminateValue?null:n.indeterminateValue,u=!1;if(a.setAttribute("type","checkbox"),a.style.marginTop="5px",a.style.boxSizing="border-box",n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var d in n.elementAttributes)"+"==d.charAt(0)?(d=d.slice(1),a.setAttribute(d,a.getAttribute(d)+n.elementAttributes["+"+d])):a.setAttribute(d,n.elementAttributes[d]);return a.value=r,!l||void 0!==r&&r!==c&&""!==r||(u=!0,a.indeterminate=!0),"firefox"!=this.table.browser&&t(function(){a.focus({preventScroll:!0})}),a.checked=!0===r||"true"===r||"True"===r||1===r,a.addEventListener("change",function(e){o(s())}),a.addEventListener("blur",function(e){o(s(!0))}),a.addEventListener("keydown",function(e){13==e.keyCode&&o(s()),27==e.keyCode&&i()}),a}},d.prototype.registerModule("edit",E);var C=function(e,t,o,i){this.type=e,this.columns=t,this.component=o||!1,this.indent=i||0},x=function(e,t,o,i,n){this.value=e,this.component=t||!1,this.width=o,this.height=i,this.depth=n},R=function(e){this.table=e,this.config={},this.cloneTableStyle=!0,this.colVisProp=""};R.prototype.generateExportList=function(e,t,o,i){this.cloneTableStyle=t,this.config=e||{},this.colVisProp=i;var n=!1!==this.config.columnHeaders?this.headersToExportRows(this.generateColumnGroupHeaders()):[],s=this.bodyToExportRows(this.rowLookup(o));return n.concat(s)},R.prototype.genereateTable=function(e,t,o,i){var n=this.generateExportList(e,t,o,i);return this.genereateTableElement(n)},R.prototype.rowLookup=function(e){var t=this,o=[];if("function"==typeof e)e.call(this.table).forEach(function(e){(e=t.table.rowManager.findRow(e))&&o.push(e)});else switch(e){case!0:case"visible":o=this.table.rowManager.getVisibleRows(!0);break;case"all":o=this.table.rowManager.rows;break;case"selected":o=this.table.modules.selectRow.selectedRows;break;case"active":default:o=this.table.rowManager.getDisplayRows()}return Object.assign([],o)},R.prototype.generateColumnGroupHeaders=function(){var e=this,t=[];return(!1!==this.config.columnGroups?this.table.columnManager.columns:this.table.columnManager.columnsByIndex).forEach(function(o){var i=e.processColumnGroup(o);i&&t.push(i)}),t},R.prototype.processColumnGroup=function(e){var t=this,o=e.columns,i=0,n=e.definition["title"+(this.colVisProp.charAt(0).toUpperCase()+this.colVisProp.slice(1))]||e.definition.title,s={title:n,column:e,depth:1};if(o.length){if(s.subGroups=[],s.width=0,o.forEach(function(e){var o=t.processColumnGroup(e);o&&(s.width+=o.width,s.subGroups.push(o),o.depth>i&&(i=o.depth))}),s.depth+=i,!s.width)return!1}else{if(!this.columnVisCheck(e))return!1;s.width=1}return s},R.prototype.columnVisCheck=function(e){return!1!==e.definition[this.colVisProp]&&(e.visible||!e.visible&&e.definition[this.colVisProp])},R.prototype.headersToExportRows=function(e){function t(e,n){var s=i-n;if(void 0===o[n]&&(o[n]=[]),e.height=e.subGroups?1:s-e.depth+1,o[n].push(e),e.height>1)for(var r=1;r1)for(var a=1;ai&&(i=e.depth)}),e.forEach(function(e){t(e,0)}),o.forEach(function(e){var t=[];e.forEach(function(e){e?t.push(new x(e.title,e.column.getComponent(),e.width,e.height,e.depth)):t.push(null)}),n.push(new C("header",t))}),n},R.prototype.bodyToExportRows=function(e){var t=this,o=[],i=[];return this.table.columnManager.columnsByIndex.forEach(function(e){t.columnVisCheck(e)&&o.push(e.getComponent())}),!1!==this.config.columnCalcs&&this.table.modExists("columnCalcs")&&(this.table.modules.columnCalcs.topInitialized&&e.unshift(this.table.modules.columnCalcs.topRow),this.table.modules.columnCalcs.botInitialized&&e.push(this.table.modules.columnCalcs.botRow)),e=e.filter(function(e){switch(e.type){case"group":return!1!==t.config.rowGroups;case"calc":return!1!==t.config.columnCalcs;case"row":return!(t.table.options.dataTree&&!1===t.config.dataTree&&e.modules.dataTree.parent)}return!0}),e.forEach(function(e,n){var s=e.getData(t.colVisProp),r=[],a=0;switch(e.type){case"group":a=e.level,r.push(new x(e.key,e.getComponent(),o.length,1));break;case"calc":case"row":o.forEach(function(e){r.push(new x(e._column.getFieldValue(s),e,1,1))}),t.table.options.dataTree&&!1!==t.config.dataTree&&(a=e.modules.dataTree.index)}i.push(new C(e.type,r,e.getComponent(),a))}),i},R.prototype.genereateTableElement=function(e){var t=this,o=document.createElement("table"),i=document.createElement("thead"),n=document.createElement("tbody"),s=this.lookupTableStyles(),r=this.table.options["rowFormatter"+(this.colVisProp.charAt(0).toUpperCase()+this.colVisProp.slice(1))],a={};return a.rowFormatter=null!==r?r:this.table.options.rowFormatter,this.table.options.dataTree&&!1!==this.config.dataTree&&this.table.modExists("columnCalcs")&&(a.treeElementField=this.table.modules.dataTree.elementField),a.groupHeader=this.table.options["groupHeader"+(this.colVisProp.charAt(0).toUpperCase()+this.colVisProp.slice(1))],a.groupHeader&&!Array.isArray(a.groupHeader)&&(a.groupHeader=[a.groupHeader]),o.classList.add("tabulator-print-table"),this.mapElementStyles(this.table.columnManager.getHeadersElement(),i,["border-top","border-left","border-right","border-bottom","background-color","color","font-weight","font-family","font-size"]),e.length>1e3&&console.warn("It may take a long time to render an HTML table with more than 1000 rows"),e.forEach(function(e,o){switch(e.type){case"header":i.appendChild(t.genereateHeaderElement(e,a,s));break;case"group":n.appendChild(t.genereateGroupElement(e,a,s));break;case"calc":n.appendChild(t.genereateCalcElement(e,a,s));break;case"row":var r=t.genereateRowElement(e,a,s);t.mapElementStyles(o%2&&s.evenRow?s.evenRow:s.oddRow,r,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),n.appendChild(r)}}),i.innerHTML&&o.appendChild(i),o.appendChild(n),this.mapElementStyles(this.table.element,o,["border-top","border-left","border-right","border-bottom"]),o},R.prototype.lookupTableStyles=function(){var e={};return this.cloneTableStyle&&window.getComputedStyle&&(e.oddRow=this.table.element.querySelector(".tabulator-row-odd:not(.tabulator-group):not(.tabulator-calcs)"),e.evenRow=this.table.element.querySelector(".tabulator-row-even:not(.tabulator-group):not(.tabulator-calcs)"),e.calcRow=this.table.element.querySelector(".tabulator-row.tabulator-calcs"),e.firstRow=this.table.element.querySelector(".tabulator-row:not(.tabulator-group):not(.tabulator-calcs)"),e.firstGroup=this.table.element.getElementsByClassName("tabulator-group")[0],e.firstRow&&(e.styleCells=e.firstRow.getElementsByClassName("tabulator-cell"),e.firstCell=e.styleCells[0],e.lastCell=e.styleCells[e.styleCells.length-1])),e},R.prototype.genereateHeaderElement=function(e,t,o){var i=this,n=document.createElement("tr");return e.columns.forEach(function(e){if(e){var t=document.createElement("th"),o=e.component._column.definition.cssClass?e.component._column.definition.cssClass.split(" "):[];t.colSpan=e.width,t.rowSpan=e.height,t.innerHTML=e.value,i.cloneTableStyle&&(t.style.boxSizing="border-box"),o.forEach(function(e){t.classList.add(e)}),i.mapElementStyles(e.component.getElement(),t,["text-align","border-top","border-left","border-right","border-bottom","background-color","color","font-weight","font-family","font-size"]),i.mapElementStyles(e.component._column.contentElement,t,["padding-top","padding-left","padding-right","padding-bottom"]),e.component._column.visible?i.mapElementStyles(e.component.getElement(),t,["width"]):e.component._column.definition.width&&(t.style.width=e.component._column.definition.width+"px"),e.component._column.parent&&i.mapElementStyles(e.component._column.parent.groupElement,t,["border-top"]),n.appendChild(t)}}),n},R.prototype.genereateGroupElement=function(e,t,o){var i=document.createElement("tr"),n=document.createElement("td"),s=e.columns[0];return i.classList.add("tabulator-print-table-row"),t.groupHeader&&t.groupHeader[e.indent]?s.value=t.groupHeader[e.indent](s.value,e.component._group.getRowCount(),e.component._group.getData(),e.component):!1===t.groupHeader?s.value=s.value:s.value=e.component._group.generator(s.value,e.component._group.getRowCount(),e.component._group.getData(),e.component),n.colSpan=s.width,n.innerHTML=s.value,i.classList.add("tabulator-print-table-group"),i.classList.add("tabulator-group-level-"+e.indent),s.component.getVisibility()&&i.classList.add("tabulator-group-visible"),this.mapElementStyles(o.firstGroup,i,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),this.mapElementStyles(o.firstGroup,n,["padding-top","padding-left","padding-right","padding-bottom"]),i.appendChild(n),i},R.prototype.genereateCalcElement=function(e,t,o){var i=this.genereateRowElement(e,t,o);return i.classList.add("tabulator-print-table-calcs"),this.mapElementStyles(o.calcRow,i,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),i},R.prototype.genereateRowElement=function(e,t,o){var n=this,s=document.createElement("tr");return s.classList.add("tabulator-print-table-row"),e.columns.forEach(function(r){if(r){var a=document.createElement("td"),l=r.component._column,c=r.value,u={modules:{},getValue:function(){return c},getField:function(){return l.definition.field},getElement:function(){return a},getColumn:function(){return l.getComponent()},getData:function(){return rowData},getRow:function(){return e.getComponent()},getComponent:function(){return u},column:l};if((l.definition.cssClass?l.definition.cssClass.split(" "):[]).forEach(function(e){a.classList.add(e)}),n.table.modExists("format")&&!1!==n.config.formatCells)c=n.table.modules.format.formatExportValue(u,n.colVisProp);else switch(void 0===c?"undefined":_typeof(c)){case"object":c=JSON.stringify(c);break;case"undefined":case"null":c="";break;default:c=c}if(c instanceof Node?a.appendChild(c):a.innerHTML=c,o.firstCell&&(n.mapElementStyles(o.firstCell,a,["padding-top","padding-left","padding-right","padding-bottom","border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size"]),l.definition.align&&(a.style.textAlign=l.definition.align)),n.table.options.dataTree&&!1!==n.config.dataTree&&(t.treeElementField&&t.treeElementField==l.field||!t.treeElementField&&0==i)&&(e.component._row.modules.dataTree.controlEl&&a.insertBefore(e.component._row.modules.dataTree.controlEl.cloneNode(!0),a.firstChild),e.component._row.modules.dataTree.branchEl&&a.insertBefore(e.component._row.modules.dataTree.branchEl.cloneNode(!0),a.firstChild)),s.appendChild(a),u.modules.format&&u.modules.format.renderedCallback&&u.modules.format.renderedCallback(),t.rowFormatter&&!1!==n.config.formatCells){var d=e.getComponent();d.getElement=function(){return s},t.rowFormatter(d)}}}),s},R.prototype.genereateHTMLTable=function(e){var t=document.createElement("div");return t.appendChild(this.genereateTableElement(e)),t.innerHTML},R.prototype.getHtml=function(e,t,o,i){var n=this.generateExportList(o||this.table.options.htmlOutputConfig,t,e,i||"htmlOutput");return this.genereateHTMLTable(n)},R.prototype.mapElementStyles=function(e,t,o){if(this.cloneTableStyle&&e&&t){var i={"background-color":"backgroundColor",color:"fontColor",width:"width","font-weight":"fontWeight","font-family":"fontFamily","font-size":"fontSize","text-align":"textAlign","border-top":"borderTop","border-left":"borderLeft","border-right":"borderRight","border-bottom":"borderBottom","padding-top":"paddingTop","padding-left":"paddingLeft","padding-right":"paddingRight","padding-bottom":"paddingBottom"};if(window.getComputedStyle){var n=window.getComputedStyle(e);o.forEach(function(e){t.style[i[e]]=n.getPropertyValue(e)})}}},d.prototype.registerModule("export",R);var M=function(e){this.table=e,this.filterList=[],this.headerFilters={},this.headerFilterColumns=[],this.prevHeaderFilterChangeCheck="",this.prevHeaderFilterChangeCheck="{}",this.changed=!1};M.prototype.initializeColumn=function(e,t){function o(t){var o,r="input"==e.modules.filter.tagType&&"text"==e.modules.filter.attrType||"textarea"==e.modules.filter.tagType?"partial":"match",a="",l="";if(void 0===e.modules.filter.prevSuccess||e.modules.filter.prevSuccess!==t){if(e.modules.filter.prevSuccess=t,e.modules.filter.emptyFunc(t))delete n.headerFilters[s];else{switch(e.modules.filter.value=t,_typeof(e.definition.headerFilterFunc)){case"string":n.filters[e.definition.headerFilterFunc]?(a=e.definition.headerFilterFunc,o=function(o){var i=e.definition.headerFilterFuncParams||{},s=e.getFieldValue(o);return i="function"==typeof i?i(t,s,o):i,n.filters[e.definition.headerFilterFunc](t,s,o,i)}):console.warn("Header Filter Error - Matching filter function not found: ",e.definition.headerFilterFunc);break;case"function":o=function(o){var i=e.definition.headerFilterFuncParams||{},n=e.getFieldValue(o);return i="function"==typeof i?i(t,n,o):i,e.definition.headerFilterFunc(t,n,o,i)},a=o}if(!o)switch(r){case"partial":o=function(o){var i=e.getFieldValue(o);return void 0!==i&&null!==i&&String(i).toLowerCase().indexOf(String(t).toLowerCase())>-1},a="like";break;default:o=function(o){return e.getFieldValue(o)==t},a="="}n.headerFilters[s]={value:t,func:o,type:a,params:i||{}}}l=JSON.stringify(n.headerFilters),n.prevHeaderFilterChangeCheck!==l&&(n.prevHeaderFilterChangeCheck=l,n.changed=!0,n.table.rowManager.filterRefresh())}return!0}var i,n=this,s=e.getField();e.modules.filter={success:o,attrType:!1,tagType:!1,emptyFunc:!1},this.generateHeaderFilterElement(e)},M.prototype.generateHeaderFilterElement=function(e,t,o){function i(){}var n,s,r,a,l,c,u,d=this,h=this,p=e.modules.filter.success,m=e.getField();if(e.modules.filter.headerElement&&e.modules.filter.headerElement.parentNode&&e.contentElement.removeChild(e.modules.filter.headerElement.parentNode),m){switch(e.modules.filter.emptyFunc=e.definition.headerFilterEmptyCheck||function(e){return!e&&"0"!==e},n=document.createElement("div"),n.classList.add("tabulator-header-filter"),_typeof(e.definition.headerFilter)){case"string":h.table.modules.edit.editors[e.definition.headerFilter]?(s=h.table.modules.edit.editors[e.definition.headerFilter],"tick"!==e.definition.headerFilter&&"tickCross"!==e.definition.headerFilter||e.definition.headerFilterEmptyCheck||(e.modules.filter.emptyFunc=function(e){return!0!==e&&!1!==e})):console.warn("Filter Error - Cannot build header filter, No such editor found: ",e.definition.editor);break;case"function":s=e.definition.headerFilter;break;case"boolean":e.modules.edit&&e.modules.edit.editor?s=e.modules.edit.editor:e.definition.formatter&&h.table.modules.edit.editors[e.definition.formatter]?(s=h.table.modules.edit.editors[e.definition.formatter],"tick"!==e.definition.formatter&&"tickCross"!==e.definition.formatter||e.definition.headerFilterEmptyCheck||(e.modules.filter.emptyFunc=function(e){return!0!==e&&!1!==e})):s=h.table.modules.edit.editors.input}if(s){if(a={getValue:function(){return void 0!==t?t:""},getField:function(){return e.definition.field},getElement:function(){return n},getColumn:function(){return e.getComponent()},getRow:function(){return{normalizeHeight:function(){}}}},u=e.definition.headerFilterParams||{},u="function"==typeof u?u.call(h.table):u,!(r=s.call(this.table.modules.edit,a,function(){},p,i,u)))return void console.warn("Filter Error - Cannot add filter to "+m+" column, editor returned a value of false");if(!(r instanceof Node))return void console.warn("Filter Error - Cannot add filter to "+m+" column, editor should return an instance of Node, the editor returned:",r);m?h.table.modules.localize.bind("headerFilters|columns|"+e.definition.field,function(e){r.setAttribute("placeholder",void 0!==e&&e?e:h.table.modules.localize.getText("headerFilters|default"))}):h.table.modules.localize.bind("headerFilters|default",function(e){r.setAttribute("placeholder",void 0!==h.column.definition.headerFilterPlaceholder&&h.column.definition.headerFilterPlaceholder?h.column.definition.headerFilterPlaceholder:e)}),r.addEventListener("click",function(e){e.stopPropagation(),r.focus()}),r.addEventListener("focus",function(e){var t=d.table.columnManager.element.scrollLeft;t!==d.table.rowManager.element.scrollLeft&&(d.table.rowManager.scrollHorizontal(t),d.table.columnManager.scrollHorizontal(t))}),l=!1,c=function(e){l&&clearTimeout(l),l=setTimeout(function(){p(r.value)},h.table.options.headerFilterLiveFilterDelay)},e.modules.filter.headerElement=r,e.modules.filter.attrType=r.hasAttribute("type")?r.getAttribute("type").toLowerCase():"",e.modules.filter.tagType=r.tagName.toLowerCase(),!1!==e.definition.headerFilterLiveFilter&&("autocomplete"!==e.definition.headerFilter&&"tickCross"!==e.definition.headerFilter&&("autocomplete"!==e.definition.editor&&"tickCross"!==e.definition.editor||!0!==e.definition.headerFilter)&&(r.addEventListener("keyup",c),r.addEventListener("search",c),"number"==e.modules.filter.attrType&&r.addEventListener("change",function(e){p(r.value)}),"text"==e.modules.filter.attrType&&"ie"!==this.table.browser&&r.setAttribute("type","search")),"input"!=e.modules.filter.tagType&&"select"!=e.modules.filter.tagType&&"textarea"!=e.modules.filter.tagType||r.addEventListener("mousedown",function(e){e.stopPropagation()})),n.appendChild(r),e.contentElement.appendChild(n),o||h.headerFilterColumns.push(e)}}else console.warn("Filter Error - Cannot add header filter, column has no field set:",e.definition.title)},M.prototype.hideHeaderFilterElements=function(){this.headerFilterColumns.forEach(function(e){e.modules.filter&&e.modules.filter.headerElement&&(e.modules.filter.headerElement.style.display="none")})},M.prototype.showHeaderFilterElements=function(){this.headerFilterColumns.forEach(function(e){e.modules.filter&&e.modules.filter.headerElement&&(e.modules.filter.headerElement.style.display="")})},M.prototype.setHeaderFilterFocus=function(e){e.modules.filter&&e.modules.filter.headerElement?e.modules.filter.headerElement.focus():console.warn("Column Filter Focus Error - No header filter set on column:",e.getField())},M.prototype.getHeaderFilterValue=function(e){if(e.modules.filter&&e.modules.filter.headerElement)return e.modules.filter.headerElement.value;console.warn("Column Filter Error - No header filter set on column:",e.getField())},M.prototype.setHeaderFilterValue=function(e,t){e&&(e.modules.filter&&e.modules.filter.headerElement?(this.generateHeaderFilterElement(e,t,!0),e.modules.filter.success(t)):console.warn("Column Filter Error - No header filter set on column:",e.getField()))},M.prototype.reloadHeaderFilter=function(e){e&&(e.modules.filter&&e.modules.filter.headerElement?this.generateHeaderFilterElement(e,e.modules.filter.value,!0):console.warn("Column Filter Error - No header filter set on column:",e.getField()))},M.prototype.hasChanged=function(){var e=this.changed;return this.changed=!1,e},M.prototype.setFilter=function(e,t,o,i){var n=this;n.filterList=[],Array.isArray(e)||(e=[{field:e,type:t,value:o,params:i}]),n.addFilter(e)},M.prototype.addFilter=function(e,t,o,i){var n=this;Array.isArray(e)||(e=[{field:e,type:t,value:o,params:i}]),e.forEach(function(e){(e=n.findFilter(e))&&(n.filterList.push(e),n.changed=!0)}),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.filter&&this.table.modules.persistence.save("filter")},M.prototype.findFilter=function(e){var t,o=this;if(Array.isArray(e))return this.findSubFilters(e);var i=!1;return"function"==typeof e.field?i=function(t){return e.field(t,e.type||{})}:o.filters[e.type]?(t=o.table.columnManager.getColumnByField(e.field),i=t?function(i){return o.filters[e.type](e.value,t.getFieldValue(i),i,e.params||{})}:function(t){return o.filters[e.type](e.value,t[e.field],t,e.params||{})}):console.warn("Filter Error - No such filter type found, ignoring: ",e.type),e.func=i,!!e.func&&e},M.prototype.findSubFilters=function(e){var t=this,o=[];return e.forEach(function(e){(e=t.findFilter(e))&&o.push(e)}),!!o.length&&o},M.prototype.getFilters=function(e,t){var o=[];return e&&(o=this.getHeaderFilters()),t&&o.forEach(function(e){"function"==typeof e.type&&(e.type="function")}),o=o.concat(this.filtersToArray(this.filterList,t))},M.prototype.filtersToArray=function(e,t){var o=this,i=[];return e.forEach(function(e){var n;Array.isArray(e)?i.push(o.filtersToArray(e,t)):(n={field:e.field,type:e.type,value:e.value},t&&"function"==typeof n.type&&(n.type="function"),i.push(n))}),i},M.prototype.getHeaderFilters=function(){var e=[];for(var t in this.headerFilters)e.push({field:t,type:this.headerFilters[t].type,value:this.headerFilters[t].value});return e},M.prototype.removeFilter=function(e,t,o){var i=this;Array.isArray(e)||(e=[{field:e,type:t,value:o}]),e.forEach(function(e){var t=-1;t="object"==_typeof(e.field)?i.filterList.findIndex(function(t){return e===t}):i.filterList.findIndex(function(t){return e.field===t.field&&e.type===t.type&&e.value===t.value}),t>-1?(i.filterList.splice(t,1),i.changed=!0):console.warn("Filter Error - No matching filter type found, ignoring: ",e.type)}),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.filter&&this.table.modules.persistence.save("filter")},M.prototype.clearFilter=function(e){this.filterList=[],e&&this.clearHeaderFilter(),this.changed=!0,this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.filter&&this.table.modules.persistence.save("filter")},M.prototype.clearHeaderFilter=function(){var e=this;this.headerFilters={},e.prevHeaderFilterChangeCheck="{}",this.headerFilterColumns.forEach(function(t){t.modules.filter.value=null,t.modules.filter.prevSuccess=void 0,e.reloadHeaderFilter(t)}),this.changed=!0},M.prototype.search=function(e,t,o,i){var n=this,s=[],r=[];return Array.isArray(t)||(t=[{field:t,type:o,value:i}]),t.forEach(function(e){(e=n.findFilter(e))&&r.push(e)}),this.table.rowManager.rows.forEach(function(t){var o=!0;r.forEach(function(e){n.filterRecurse(e,t.getData())||(o=!1)}),o&&s.push("data"===e?t.getData("data"):t.getComponent())}),s},M.prototype.filter=function(e,t){var o=this,i=[],n=[];return o.table.options.dataFiltering&&o.table.options.dataFiltering.call(o.table,o.getFilters()),o.table.options.ajaxFiltering||!o.filterList.length&&!Object.keys(o.headerFilters).length?i=e.slice(0):e.forEach(function(e){o.filterRow(e)&&i.push(e)}),o.table.options.dataFiltered&&(i.forEach(function(e){n.push(e.getComponent())}),o.table.options.dataFiltered.call(o.table,o.getFilters(),n)),i},M.prototype.filterRow=function(e,t){var o=this,i=!0,n=e.getData();o.filterList.forEach(function(e){o.filterRecurse(e,n)||(i=!1)});for(var s in o.headerFilters)o.headerFilters[s].func(n)||(i=!1);return i},M.prototype.filterRecurse=function(e,t){var o=this,i=!1;return Array.isArray(e)?e.forEach(function(e){o.filterRecurse(e,t)&&(i=!0)}):i=e.func(t),i},M.prototype.filters={"=":function(e,t,o,i){return t==e},"<":function(e,t,o,i){return t":function(e,t,o,i){return t>e},">=":function(e,t,o,i){return t>=e},"!=":function(e,t,o,i){return t!=e},regex:function(e,t,o,i){return"string"==typeof e&&(e=new RegExp(e)),e.test(t)},like:function(e,t,o,i){return null===e||void 0===e?t===e:void 0!==t&&null!==t&&String(t).toLowerCase().indexOf(e.toLowerCase())>-1},keywords:function(e,t,o,i){var n=e.toLowerCase().split(void 0===i.separator?" ":i.separator),s=String(null===t||void 0===t?"":t).toLowerCase(),r=[];return n.forEach(function(e){s.includes(e)&&r.push(!0)}),i.matchAll?r.length===n.length:!!r.length},starts:function(e,t,o,i){return null===e||void 0===e?t===e:void 0!==t&&null!==t&&String(t).toLowerCase().startsWith(e.toLowerCase())},ends:function(e,t,o,i){return null===e||void 0===e?t===e:void 0!==t&&null!==t&&String(t).toLowerCase().endsWith(e.toLowerCase())},in:function(e,t,o,i){return Array.isArray(e)?e.indexOf(t)>-1:(console.warn("Filter Error - filter value is not an array:",e),!1)}},d.prototype.registerModule("filter",M);var L=function(e){this.table=e};L.prototype.initializeColumn=function(e){e.modules.format=this.lookupFormatter(e,""),void 0!==e.definition.formatterPrint&&(e.modules.format.print=this.lookupFormatter(e,"Print")),void 0!==e.definition.formatterClipboard&&(e.modules.format.clipboard=this.lookupFormatter(e,"Clipboard")),void 0!==e.definition.formatterHtmlOutput&&(e.modules.format.htmlOutput=this.lookupFormatter(e,"HtmlOutput"))},L.prototype.lookupFormatter=function(e,t){var o={params:e.definition["formatter"+t+"Params"]||{}},i=e.definition["formatter"+t];switch(void 0===i?"undefined":_typeof(i)){case"string":"tick"===i&&(i="tickCross",void 0===o.params.crossElement&&(o.params.crossElement=!1),console.warn("DEPRECATION WARNING - the tick formatter has been deprecated, please use the tickCross formatter with the crossElement param set to false")),this.formatters[i]?o.formatter=this.formatters[i]:(console.warn("Formatter Error - No such formatter found: ",i),o.formatter=this.formatters.plaintext);break;case"function":o.formatter=i;break;default:o.formatter=this.formatters.plaintext}return o},L.prototype.cellRendered=function(e){e.modules.format&&e.modules.format.renderedCallback&&e.modules.format.renderedCallback()},L.prototype.formatValue=function(e){function t(t){e.modules.format||(e.modules.format={}),e.modules.format.renderedCallback=t}var o=e.getComponent(),i="function"==typeof e.column.modules.format.params?e.column.modules.format.params(o):e.column.modules.format.params;return e.column.modules.format.formatter.call(this,o,i,t)},L.prototype.formatExportValue=function(e,t){var o,i=e.column.modules.format[t];if(i){var n=function(t){e.modules.format||(e.modules.format={}),e.modules.format.renderedCallback=t};return o="function"==typeof i.params?i.params(component):i.params,i.formatter.call(this,e.getComponent(),o,n)}return this.formatValue(e)},L.prototype.sanitizeHTML=function(e){if(e){var t={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/","`":"`","=":"="};return String(e).replace(/[&<>"'`=\/]/g,function(e){return t[e]})}return e},L.prototype.emptyToSpace=function(e){return null===e||void 0===e||""===e?" ":e},L.prototype.getFormatter=function(e){var e;switch(void 0===e?"undefined":_typeof(e)){case"string":this.formatters[e]?e=this.formatters[e]:(console.warn("Formatter Error - No such formatter found: ",e),e=this.formatters.plaintext);break;case"function":e=e;break;default:e=this.formatters.plaintext}return e},L.prototype.formatters={plaintext:function(e,t,o){return this.emptyToSpace(this.sanitizeHTML(e.getValue()))},html:function(e,t,o){return e.getValue()},textarea:function(e,t,o){return e.getElement().style.whiteSpace="pre-wrap",this.emptyToSpace(this.sanitizeHTML(e.getValue()))},money:function(e,t,o){var i,n,s,r,a=parseFloat(e.getValue()),l=t.decimal||".",c=t.thousand||",",u=t.symbol||"",d=!!t.symbolAfter,h=void 0!==t.precision?t.precision:2;if(isNaN(a))return this.emptyToSpace(this.sanitizeHTML(e.getValue()));for(i=!1!==h?a.toFixed(h):a,i=String(i).split("."),n=i[0],s=i.length>1?l+i[1]:"",r=/(\d+)(\d{3})/;r.test(n);)n=n.replace(r,"$1"+c+"$2");return d?n+s+u:u+n+s},link:function(e,t,o){var i,n=e.getValue(),s=t.urlPrefix||"",r=t.download,a=n,l=document.createElement("a");if(t.labelField&&(i=e.getData(),a=i[t.labelField]),t.label)switch(_typeof(t.label)){case"string":a=t.label;break;case"function":a=t.label(e)}if(a){if(t.urlField&&(i=e.getData(),n=i[t.urlField]),t.url)switch(_typeof(t.url)){case"string":n=t.url;break;case"function":n=t.url(e)}return l.setAttribute("href",s+n),t.target&&l.setAttribute("target",t.target),t.download&&(r="function"==typeof r?r(e):!0===r?"":r,l.setAttribute("download",r)),l.innerHTML=this.emptyToSpace(this.sanitizeHTML(a)),l}return" "},image:function(e,t,o){var i=document.createElement("img");switch(i.setAttribute("src",e.getValue()),_typeof(t.height)){case"number":i.style.height=t.height+"px";break;case"string":i.style.height=t.height}switch(_typeof(t.width)){case"number":i.style.width=t.width+"px";break;case"string":i.style.width=t.width}return i.addEventListener("load",function(){e.getRow().normalizeHeight()}),i},tickCross:function(e,t,o){var i=e.getValue(),n=e.getElement(),s=t.allowEmpty,r=t.allowTruthy,a=void 0!==t.tickElement?t.tickElement:'',l=void 0!==t.crossElement?t.crossElement:'';return r&&i||!0===i||"true"===i||"True"===i||1===i||"1"===i?(n.setAttribute("aria-checked",!0),a||""):!s||"null"!==i&&""!==i&&null!==i&&void 0!==i?(n.setAttribute("aria-checked",!1),l||""):(n.setAttribute("aria-checked","mixed"),"")},datetime:function(e,t,o){var i=t.inputFormat||"YYYY-MM-DD hh:mm:ss",n=t.outputFormat||"DD/MM/YYYY hh:mm:ss",s=void 0!==t.invalidPlaceholder?t.invalidPlaceholder:"",r=e.getValue(),a=moment(r,i);return a.isValid()?t.timezone?a.tz(t.timezone).format(n):a.format(n):!0===s?r:"function"==typeof s?s(r):s},datetimediff:function(e,t,o){ +var i=t.inputFormat||"YYYY-MM-DD hh:mm:ss",n=void 0!==t.invalidPlaceholder?t.invalidPlaceholder:"",s=void 0!==t.suffix&&t.suffix,r=void 0!==t.unit?t.unit:void 0,a=void 0!==t.humanize&&t.humanize,l=void 0!==t.date?t.date:moment(),c=e.getValue(),u=moment(c,i);return u.isValid()?a?moment.duration(u.diff(l)).humanize(s):u.diff(l,r)+(s?" "+s:""):!0===n?c:"function"==typeof n?n(c):n},lookup:function(e,t,o){var i=e.getValue();return void 0===t[i]?(console.warn("Missing display value for "+i),i):t[i]},star:function(e,t,o){var i=e.getValue(),n=e.getElement(),s=t&&t.stars?t.stars:5,r=document.createElement("span"),a=document.createElementNS("http://www.w3.org/2000/svg","svg");r.style.verticalAlign="middle",a.setAttribute("width","14"),a.setAttribute("height","14"),a.setAttribute("viewBox","0 0 512 512"),a.setAttribute("xml:space","preserve"),a.style.padding="0 1px",i=i&&!isNaN(i)?parseInt(i):0,i=Math.max(0,Math.min(i,s));for(var l=1;l<=s;l++){var c=a.cloneNode(!0);c.innerHTML=l<=i?'':'',r.appendChild(c)}return n.style.whiteSpace="nowrap",n.style.overflow="hidden",n.style.textOverflow="ellipsis",n.setAttribute("aria-label",i),r},traffic:function(e,t,o){var i,n,s=this.sanitizeHTML(e.getValue())||0,r=document.createElement("span"),a=t&&t.max?t.max:100,l=t&&t.min?t.min:0,c=t&&void 0!==t.color?t.color:["red","orange","green"],u="#666666";if(!isNaN(s)&&void 0!==e.getValue()){switch(r.classList.add("tabulator-traffic-light"),n=parseFloat(s)<=a?parseFloat(s):a,n=parseFloat(n)>=l?parseFloat(n):l,i=(a-l)/100,n=Math.round((n-l)/i),void 0===c?"undefined":_typeof(c)){case"string":u=c;break;case"function":u=c(s);break;case"object":if(Array.isArray(c)){var d=100/c.length,h=Math.floor(n/d);h=Math.min(h,c.length-1),h=Math.max(h,0),u=c[h];break}}return r.style.backgroundColor=u,r}},progress:function(e,t,o){var i,n,s,r,a,c=this.sanitizeHTML(e.getValue())||0,u=e.getElement(),d=t&&t.max?t.max:100,h=t&&t.min?t.min:0,p=t&&t.legendAlign?t.legendAlign:"center";switch(n=parseFloat(c)<=d?parseFloat(c):d,n=parseFloat(n)>=h?parseFloat(n):h,i=(d-h)/100,n=Math.round((n-h)/i),_typeof(t.color)){case"string":s=t.color;break;case"function":s=t.color(c);break;case"object":if(Array.isArray(t.color)){var m=100/t.color.length,f=Math.floor(n/m);f=Math.min(f,t.color.length-1),f=Math.max(f,0),s=t.color[f];break}default:s="#2DC214"}switch(_typeof(t.legend)){case"string":r=t.legend;break;case"function":r=t.legend(c);break;case"boolean":r=c;break;default:r=!1}switch(_typeof(t.legendColor)){case"string":a=t.legendColor;break;case"function":a=t.legendColor(c);break;case"object":if(Array.isArray(t.legendColor)){var m=100/t.legendColor.length,f=Math.floor(n/m);f=Math.min(f,t.legendColor.length-1),f=Math.max(f,0),a=t.legendColor[f]}break;default:a="#000"}u.style.minWidth="30px",u.style.position="relative",u.setAttribute("aria-label",n);var g=document.createElement("div");if(g.style.display="inline-block",g.style.position="relative",g.style.width=n+"%",g.style.backgroundColor=s,g.style.height="100%",g.setAttribute("data-max",d),g.setAttribute("data-min",h),r){var b=document.createElement("div");b.style.position="absolute",b.style.top="4px",b.style.left=0,b.style.textAlign=p,b.style.width="100%",b.style.color=a,b.innerHTML=r}return o(function(){if(!(e instanceof l)){var t=document.createElement("div");t.style.position="absolute",t.style.top="4px",t.style.bottom="4px",t.style.left="4px",t.style.right="4px",u.appendChild(t),u=t}u.appendChild(g),r&&u.appendChild(b)}),""},color:function(e,t,o){return e.getElement().style.backgroundColor=this.sanitizeHTML(e.getValue()),""},buttonTick:function(e,t,o){return''},buttonCross:function(e,t,o){return''},rownum:function(e,t,o){return this.table.rowManager.activeRows.indexOf(e.getRow()._getSelf())+1},handle:function(e,t,o){return e.getElement().classList.add("tabulator-row-handle"),"
"},responsiveCollapse:function(e,t,o){function i(e){var t=s.element;s.open=e,t&&(s.open?(n.classList.add("open"),t.style.display=""):(n.classList.remove("open"),t.style.display="none"))}var n=document.createElement("div"),s=e.getRow()._row.modules.responsiveLayout;return n.classList.add("tabulator-responsive-collapse-toggle"),n.innerHTML="+-",e.getElement().classList.add("tabulator-row-handle"),n.addEventListener("click",function(e){e.stopImmediatePropagation(),i(!s.open)}),i(s.open),n},rowSelection:function(e){var t=this,o=document.createElement("input");if(o.type="checkbox",this.table.modExists("selectRow",!0))if(o.addEventListener("click",function(e){e.stopPropagation()}),"function"==typeof e.getRow){var i=e.getRow();o.addEventListener("change",function(e){i.toggleSelect()}),o.checked=i.isSelected(),this.table.modules.selectRow.registerRowSelectCheckbox(i,o)}else o.addEventListener("change",function(e){t.table.modules.selectRow.selectedRows.length?t.table.deselectRow():t.table.selectRow()}),this.table.modules.selectRow.registerHeaderSelectCheckbox(o);return o}},d.prototype.registerModule("format",L);var T=function(e){this.table=e,this.leftColumns=[],this.rightColumns=[],this.leftMargin=0,this.rightMargin=0,this.rightPadding=0,this.initializationMode="left",this.active=!1,this.scrollEndTimer=!1};T.prototype.reset=function(){this.initializationMode="left",this.leftColumns=[],this.rightColumns=[],this.leftMargin=0,this.rightMargin=0,this.rightMargin=0,this.active=!1,this.table.columnManager.headersElement.style.marginLeft=0,this.table.columnManager.element.style.paddingRight=0},T.prototype.initializeColumn=function(e){var t={margin:0,edge:!1};e.isGroup||(this.frozenCheck(e)?(t.position=this.initializationMode,"left"==this.initializationMode?this.leftColumns.push(e):this.rightColumns.unshift(e),this.active=!0,e.modules.frozen=t):this.initializationMode="right")},T.prototype.frozenCheck=function(e){return e.parent.isGroup&&e.definition.frozen&&console.warn("Frozen Column Error - Parent column group must be frozen, not individual columns or sub column groups"),e.parent.isGroup?this.frozenCheck(e.parent):e.definition.frozen},T.prototype.scrollHorizontal=function(){var e,t=this;this.active&&(clearTimeout(this.scrollEndTimer),this.scrollEndTimer=setTimeout(function(){t.layout()},100),e=this.table.rowManager.getVisibleRows(),this.calcMargins(),this.layoutColumnPosition(),this.layoutCalcRows(),e.forEach(function(e){"row"===e.type&&t.layoutRow(e)}),this.table.rowManager.tableElement.style.marginRight=this.rightMargin)},T.prototype.calcMargins=function(){this.leftMargin=this._calcSpace(this.leftColumns,this.leftColumns.length)+"px",this.table.columnManager.headersElement.style.marginLeft=this.leftMargin,this.rightMargin=this._calcSpace(this.rightColumns,this.rightColumns.length)+"px",this.table.columnManager.element.style.paddingRight=this.rightMargin,this.rightPadding=this.table.rowManager.element.clientWidth+this.table.columnManager.scrollLeft},T.prototype.layoutCalcRows=function(){this.table.modExists("columnCalcs")&&(this.table.modules.columnCalcs.topInitialized&&this.table.modules.columnCalcs.topRow&&this.layoutRow(this.table.modules.columnCalcs.topRow),this.table.modules.columnCalcs.botInitialized&&this.table.modules.columnCalcs.botRow&&this.layoutRow(this.table.modules.columnCalcs.botRow))},T.prototype.layoutColumnPosition=function(e){var t=this,o=[];this.leftColumns.forEach(function(i,n){if(i.modules.frozen.margin=t._calcSpace(t.leftColumns,n)+t.table.columnManager.scrollLeft+"px",n==t.leftColumns.length-1?i.modules.frozen.edge=!0:i.modules.frozen.edge=!1,i.parent.isGroup){var s=t.getColGroupParentElement(i);o.includes(s)||(t.layoutElement(s,i),o.push(s)),i.modules.frozen.edge&&s.classList.add("tabulator-frozen-"+i.modules.frozen.position)}else t.layoutElement(i.getElement(),i);e&&i.cells.forEach(function(e){t.layoutElement(e.getElement(),i)})}),this.rightColumns.forEach(function(o,i){o.modules.frozen.margin=t.rightPadding-t._calcSpace(t.rightColumns,i+1)+"px",i==t.rightColumns.length-1?o.modules.frozen.edge=!0:o.modules.frozen.edge=!1,o.parent.isGroup?t.layoutElement(t.getColGroupParentElement(o),o):t.layoutElement(o.getElement(),o),e&&o.cells.forEach(function(e){t.layoutElement(e.getElement(),o)})})},T.prototype.getColGroupParentElement=function(e){return e.parent.isGroup?this.getColGroupParentElement(e.parent):e.getElement()},T.prototype.layout=function(){var e=this;e.active&&(this.calcMargins(),e.table.rowManager.getDisplayRows().forEach(function(t){"row"===t.type&&e.layoutRow(t)}),this.layoutCalcRows(),this.layoutColumnPosition(!0),this.table.rowManager.tableElement.style.marginRight=this.rightMargin)},T.prototype.layoutRow=function(e){var t=this;e.getElement().style.paddingLeft=this.leftMargin,this.leftColumns.forEach(function(o){var i=e.getCell(o);i&&t.layoutElement(i.getElement(),o)}),this.rightColumns.forEach(function(o){var i=e.getCell(o);i&&t.layoutElement(i.getElement(),o)})},T.prototype.layoutElement=function(e,t){t.modules.frozen&&(e.style.position="absolute",e.style.left=t.modules.frozen.margin,e.classList.add("tabulator-frozen"),t.modules.frozen.edge&&e.classList.add("tabulator-frozen-"+t.modules.frozen.position))},T.prototype._calcSpace=function(e,t){for(var o=0,i=0;i-1&&t.splice(o,1)}),t},D.prototype.freezeRow=function(e){e.modules.frozen?console.warn("Freeze Error - Row is already frozen"):(e.modules.frozen=!0,this.topElement.appendChild(e.getElement()),e.initialize(),e.normalizeHeight(),this.table.rowManager.adjustTableSize(),this.rows.push(e),this.table.rowManager.refreshActiveData("display"),this.styleRows())},D.prototype.unfreezeRow=function(e){var t=this.rows.indexOf(e);if(e.modules.frozen){e.modules.frozen=!1;var o=e.getElement();o.parentNode.removeChild(o),this.table.rowManager.adjustTableSize(),this.rows.splice(t,1),this.table.rowManager.refreshActiveData("display"),this.rows.length&&this.styleRows()}else console.warn("Freeze Error - Row is already unfrozen")},D.prototype.styleRows=function(e){var t=this;this.rows.forEach(function(e,o){t.table.rowManager.styleRow(e,o)})},d.prototype.registerModule("frozenRows",D);var k=function(e){this._group=e,this.type="GroupComponent"};k.prototype.getKey=function(){return this._group.key},k.prototype.getField=function(){return this._group.field},k.prototype.getElement=function(){return this._group.element},k.prototype.getRows=function(){return this._group.getRows(!0)},k.prototype.getSubGroups=function(){return this._group.getSubGroups(!0)},k.prototype.getParentGroup=function(){return!!this._group.parent&&this._group.parent.getComponent()},k.prototype.getVisibility=function(){return console.warn("getVisibility function is deprecated, you should now use the isVisible function"),this._group.visible},k.prototype.isVisible=function(){return this._group.visible},k.prototype.show=function(){this._group.show()},k.prototype.hide=function(){this._group.hide()},k.prototype.toggle=function(){this._group.toggleVisibility()},k.prototype._getSelf=function(){return this._group},k.prototype.getTable=function(){return this._group.groupManager.table};var S=function(e,t,o,i,n,s,r){this.groupManager=e,this.parent=t,this.key=i,this.level=o,this.field=n,this.hasSubGroups=o-1?o?this.rows.splice(n+1,0,e):this.rows.splice(n,0,e):o?this.rows.push(e):this.rows.unshift(e),e.modules.group=this,this.generateGroupHeaderContents(),this.groupManager.table.modExists("columnCalcs")&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modules.columnCalcs.recalcGroup(this),this.groupManager.updateGroupRows(!0)},S.prototype.scrollHeader=function(e){this.arrowElement.style.marginLeft=e,this.groupList.forEach(function(t){t.scrollHeader(e)})},S.prototype.getRowIndex=function(e){},S.prototype.conformRowData=function(e){return this.field?e[this.field]=this.key:console.warn("Data Conforming Error - Cannot conform row data to match new group as groupBy is a function"),this.parent&&(e=this.parent.conformRowData(e)),e},S.prototype.removeRow=function(e){var t=this.rows.indexOf(e),o=e.getElement();t>-1&&this.rows.splice(t,1),this.groupManager.table.options.groupValues||this.rows.length?(o.parentNode&&o.parentNode.removeChild(o),this.generateGroupHeaderContents(),this.groupManager.table.modExists("columnCalcs")&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modules.columnCalcs.recalcGroup(this)):(this.parent?this.parent.removeGroup(this):this.groupManager.removeGroup(this),this.groupManager.updateGroupRows(!0))},S.prototype.removeGroup=function(e){var t,o=e.level+"_"+e.key;this.groups[o]&&(delete this.groups[o],t=this.groupList.indexOf(e),t>-1&&this.groupList.splice(t,1),this.groupList.length||(this.parent?this.parent.removeGroup(this):this.groupManager.removeGroup(this)))},S.prototype.getHeadersAndRows=function(e){var t=[];return t.push(this),this._visSet(),this.visible?this.groupList.length?this.groupList.forEach(function(o){t=t.concat(o.getHeadersAndRows(e))}):(!e&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modExists("columnCalcs")&&this.groupManager.table.modules.columnCalcs.hasTopCalcs()&&(this.calcs.top&&(this.calcs.top.detachElement(),this.calcs.top.deleteCells()),this.calcs.top=this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows),t.push(this.calcs.top)),t=t.concat(this.rows),!e&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modExists("columnCalcs")&&this.groupManager.table.modules.columnCalcs.hasBottomCalcs()&&(this.calcs.bottom&&(this.calcs.bottom.detachElement(),this.calcs.bottom.deleteCells()),this.calcs.bottom=this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows),t.push(this.calcs.bottom))):this.groupList.length||"table"==this.groupManager.table.options.columnCalcs||this.groupManager.table.modExists("columnCalcs")&&(!e&&this.groupManager.table.modules.columnCalcs.hasTopCalcs()&&(this.calcs.top&&(this.calcs.top.detachElement(),this.calcs.top.deleteCells()),this.groupManager.table.options.groupClosedShowCalcs&&(this.calcs.top=this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows),t.push(this.calcs.top))),!e&&this.groupManager.table.modules.columnCalcs.hasBottomCalcs()&&(this.calcs.bottom&&(this.calcs.bottom.detachElement(),this.calcs.bottom.deleteCells()),this.groupManager.table.options.groupClosedShowCalcs&&(this.calcs.bottom=this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows),t.push(this.calcs.bottom)))),t},S.prototype.getData=function(e,t){var o=[];return this._visSet(),(!e||e&&this.visible)&&this.rows.forEach(function(e){o.push(e.getData(t||"data"))}),o},S.prototype.getRowCount=function(){var e=0;return this.groupList.length?this.groupList.forEach(function(t){e+=t.getRowCount()}):e=this.rows.length,e},S.prototype.toggleVisibility=function(){this.visible?this.hide():this.show()},S.prototype.hide=function(){this.visible=!1,"classic"!=this.groupManager.table.rowManager.getRenderMode()||this.groupManager.table.options.pagination?this.groupManager.updateGroupRows(!0):(this.element.classList.remove("tabulator-group-visible"),this.groupList.length?this.groupList.forEach(function(e){e.getHeadersAndRows().forEach(function(e){e.detachElement()})}):this.rows.forEach(function(e){var t=e.getElement();t.parentNode.removeChild(t)}),this.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(),this.groupManager.getDisplayIndex()),this.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth()),this.groupManager.table.options.groupVisibilityChanged.call(this.table,this.getComponent(),!1)},S.prototype.show=function(){var e=this;if(e.visible=!0,"classic"!=this.groupManager.table.rowManager.getRenderMode()||this.groupManager.table.options.pagination)this.groupManager.updateGroupRows(!0);else{this.element.classList.add("tabulator-group-visible");var t=e.getElement();this.groupList.length?this.groupList.forEach(function(e){e.getHeadersAndRows().forEach(function(e){var o=e.getElement();t.parentNode.insertBefore(o,t.nextSibling),e.initialize(),t=o})}):e.rows.forEach(function(e){var o=e.getElement();t.parentNode.insertBefore(o,t.nextSibling),e.initialize(),t=o}),this.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(),this.groupManager.getDisplayIndex()),this.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth()}this.groupManager.table.options.groupVisibilityChanged.call(this.table,this.getComponent(),!0)},S.prototype._visSet=function(){var e=[];"function"==typeof this.visible&&(this.rows.forEach(function(t){e.push(t.getData())}),this.visible=this.visible(this.key,this.getRowCount(),e,this.getComponent()))},S.prototype.getRowGroup=function(e){var t=!1;return this.groupList.length?this.groupList.forEach(function(o){var i=o.getRowGroup(e);i&&(t=i)}):this.rows.find(function(t){return t===e})&&(t=this),t},S.prototype.getSubGroups=function(e){var t=[];return this.groupList.forEach(function(o){t.push(e?o.getComponent():o)}),t},S.prototype.getRows=function(e){var t=[];return this.rows.forEach(function(o){t.push(e?o.getComponent():o)}),t},S.prototype.generateGroupHeaderContents=function(){var e=[];for(this.rows.forEach(function(t){e.push(t.getData())}),this.elementContents=this.generator(this.key,this.getRowCount(),e,this.getComponent());this.element.firstChild;)this.element.removeChild(this.element.firstChild);"string"==typeof this.elementContents?this.element.innerHTML=this.elementContents:this.element.appendChild(this.elementContents),this.element.insertBefore(this.arrowElement,this.element.firstChild)},S.prototype.getElement=function(){this.addBindingsd=!1,this._visSet(),this.visible?this.element.classList.add("tabulator-group-visible"):this.element.classList.remove("tabulator-group-visible");for(var e=0;ei.length&&console.warn("Error creating group headers, groupHeader array is shorter than groupBy array"),e.headerGenerator=[function(){return""}],this.startOpen=[function(){return!1}],e.table.modules.localize.bind("groups|item",function(t,o){e.headerGenerator[0]=function(e,i,n){return(void 0===e?"":e)+"("+i+" "+(1===i?t:o.groups.items)+")"}}),this.groupIDLookups=[],Array.isArray(t)||t)this.table.modExists("columnCalcs")&&"table"!=this.table.options.columnCalcs&&"both"!=this.table.options.columnCalcs&&this.table.modules.columnCalcs.removeCalcs();else if(this.table.modExists("columnCalcs")&&"group"!=this.table.options.columnCalcs){var n=this.table.columnManager.getRealColumns();n.forEach(function(t){t.definition.topCalc&&e.table.modules.columnCalcs.initializeTopRow(),t.definition.bottomCalc&&e.table.modules.columnCalcs.initializeBottomRow()})}Array.isArray(t)||(t=[t]),t.forEach(function(t,o){var i,n;"function"==typeof t?i=t:(n=e.table.columnManager.getColumnByField(t),i=n?function(e){return n.getFieldValue(e)}:function(e){return e[t]}),e.groupIDLookups.push({field:"function"!=typeof t&&t,func:i,values:!!e.allowedValues&&e.allowedValues[o]})}),o&&(Array.isArray(o)||(o=[o]),o.forEach(function(e){e="function"==typeof e?e:function(){return!0}}),e.startOpen=o),i&&(e.headerGenerator=Array.isArray(i)?i:[i]),this.initialized=!0},H.prototype.setDisplayIndex=function(e){this.displayIndex=e},H.prototype.getDisplayIndex=function(){return this.displayIndex},H.prototype.getRows=function(e){return this.groupIDLookups.length?(this.table.options.dataGrouping.call(this.table),this.generateGroups(e),this.table.options.dataGrouped&&this.table.options.dataGrouped.call(this.table,this.getGroups(!0)),this.updateGroupRows()):e.slice(0)},H.prototype.getGroups=function(e){var t=[];return this.groupList.forEach(function(o){t.push(e?o.getComponent():o)}),t},H.prototype.getChildGroups=function(e){var t=this,o=[];return e||(e=this),e.groupList.forEach(function(e){e.groupList.length?o=o.concat(t.getChildGroups(e)):o.push(e)}),o},H.prototype.wipe=function(){this.groupList.forEach(function(e){e.wipe()})},H.prototype.pullGroupListData=function(e){var t=this,o=[];return e.forEach(function(e){var i={};i.level=0,i.rowCount=0,i.headerContent="";var n=[];e.hasSubGroups?(n=t.pullGroupListData(e.groupList),i.level=e.level,i.rowCount=n.length-e.groupList.length,i.headerContent=e.generator(e.key,i.rowCount,e.rows,e),o.push(i),o=o.concat(n)):(i.level=e.level,i.headerContent=e.generator(e.key,e.rows.length,e.rows,e),i.rowCount=e.getRows().length,o.push(i),e.getRows().forEach(function(e){o.push(e.getData("data"))}))}),o},H.prototype.getGroupedData=function(){return this.pullGroupListData(this.groupList)},H.prototype.getRowGroup=function(e){var t=!1;return this.groupList.forEach(function(o){var i=o.getRowGroup(e);i&&(t=i)}),t},H.prototype.countGroups=function(){return this.groupList.length},H.prototype.generateGroups=function(e){var t=this,o=t.groups;t.groups={},t.groupList=[],this.allowedValues&&this.allowedValues[0]?(this.allowedValues[0].forEach(function(e){t.createGroup(e,0,o)}),e.forEach(function(e){t.assignRowToExistingGroup(e,o)})):e.forEach(function(e){t.assignRowToGroup(e,o)})},H.prototype.createGroup=function(e,t,o){var i,n=t+"_"+e;o=o||[],i=new S(this,!1,t,e,this.groupIDLookups[0].field,this.headerGenerator[0],o[n]),this.groups[n]=i,this.groupList.push(i)},H.prototype.assignRowToExistingGroup=function(e,t){var o=this.groupIDLookups[0].func(e.getData()),i="0_"+o;this.groups[i]&&this.groups[i].addRow(e)},H.prototype.assignRowToGroup=function(e,t){var o=this.groupIDLookups[0].func(e.getData()),i=!this.groups["0_"+o];return i&&this.createGroup(o,0,t),this.groups["0_"+o].addRow(e),!i},H.prototype.updateGroupRows=function(e){var t=this,o=[];if(t.groupList.forEach(function(e){o=o.concat(e.getHeadersAndRows())}),e){var i=t.table.rowManager.setDisplayRows(o,this.getDisplayIndex());!0!==i&&this.setDisplayIndex(i),t.table.rowManager.refreshActiveData("group",!0,!0)}return o},H.prototype.scrollHeaders=function(e){e+="px",this.groupList.forEach(function(t){t.scrollHeader(e)})},H.prototype.removeGroup=function(e){var t,o=e.level+"_"+e.key;this.groups[o]&&(delete this.groups[o],(t=this.groupList.indexOf(e))>-1&&this.groupList.splice(t,1))},d.prototype.registerModule("groupRows",H);var z=function(e){this.table=e,this.history=[],this.index=-1};z.prototype.clear=function(){this.history=[],this.index=-1},z.prototype.action=function(e,t,o){this.history=this.history.slice(0,this.index+1),this.history.push({type:e,component:t,data:o}),this.index++},z.prototype.getHistoryUndoSize=function(){return this.index+1},z.prototype.getHistoryRedoSize=function(){return this.history.length-(this.index+1)},z.prototype.undo=function(){if(this.index>-1){var e=this.history[this.index];return this.undoers[e.type].call(this,e),this.index--,this.table.options.historyUndo.call(this.table,e.type,e.component.getComponent(),e.data),!0}return console.warn("History Undo Error - No more history to undo"),!1},z.prototype.redo=function(){if(this.history.length-1>this.index){this.index++;var e=this.history[this.index];return this.redoers[e.type].call(this,e),this.table.options.historyRedo.call(this.table,e.type,e.component.getComponent(),e.data),!0}return console.warn("History Redo Error - No more history to redo"),!1},z.prototype.undoers={cellEdit:function(e){e.component.setValueProcessData(e.data.oldValue)},rowAdd:function(e){e.component.deleteActual()},rowDelete:function(e){var t=this.table.rowManager.addRowActual(e.data.data,e.data.pos,e.data.index);this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.updateGroupRows(!0),this._rebindRow(e.component,t)},rowMove:function(e){ +this.table.rowManager.moveRowActual(e.component,this.table.rowManager.rows[e.data.posFrom],!e.data.after),this.table.rowManager.redraw()}},z.prototype.redoers={cellEdit:function(e){e.component.setValueProcessData(e.data.newValue)},rowAdd:function(e){var t=this.table.rowManager.addRowActual(e.data.data,e.data.pos,e.data.index);this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.updateGroupRows(!0),this._rebindRow(e.component,t)},rowDelete:function(e){e.component.deleteActual()},rowMove:function(e){this.table.rowManager.moveRowActual(e.component,this.table.rowManager.rows[e.data.posTo],e.data.after),this.table.rowManager.redraw()}},z.prototype._rebindRow=function(e,t){this.history.forEach(function(o){if(o.component instanceof a)o.component===e&&(o.component=t);else if(o.component instanceof c&&o.component.row===e){var i=o.component.column.getField();i&&(o.component=t.getCell(i))}})},d.prototype.registerModule("history",z);var A=function(e){this.table=e,this.fieldIndex=[],this.hasIndex=!1};A.prototype.parseTable=function(){var e=this,t=e.table.element,o=e.table.options,i=(o.columns,t.getElementsByTagName("th")),n=t.getElementsByTagName("tbody")[0],s=[];e.hasIndex=!1,e.table.options.htmlImporting.call(this.table),n=n?n.getElementsByTagName("tr"):[],e._extractOptions(t,o),i.length?e._extractHeaders(i,n):e._generateBlankHeaders(i,n);for(var r=0;r-1&&e.pressedKeys.splice(i,1)}},this.table.element.addEventListener("keydown",this.keyupBinding),this.table.element.addEventListener("keyup",this.keydownBinding)},_.prototype.clearBindings=function(){this.keyupBinding&&this.table.element.removeEventListener("keydown",this.keyupBinding),this.keydownBinding&&this.table.element.removeEventListener("keyup",this.keydownBinding)},_.prototype.checkBinding=function(e,t){var o=this,i=!0;return e.ctrlKey==t.ctrl&&e.shiftKey==t.shift&&e.metaKey==t.meta&&(t.keys.forEach(function(e){-1==o.pressedKeys.indexOf(e)&&(i=!1)}),i&&t.action.call(o,e),!0)},_.prototype.bindings={navPrev:"shift + 9",navNext:9,navUp:38,navDown:40,scrollPageUp:33,scrollPageDown:34,scrollToStart:36,scrollToEnd:35,undo:"ctrl + 90",redo:"ctrl + 89",copyToClipboard:"ctrl + 67"},_.prototype.actions={keyBlock:function(e){e.stopPropagation(),e.preventDefault()},scrollPageUp:function(e){var t=this.table.rowManager,o=t.scrollTop-t.height;t.element.scrollHeight;e.preventDefault(),t.displayRowsCount&&(o>=0?t.element.scrollTop=o:t.scrollToRow(t.getDisplayRows()[0])),this.table.element.focus()},scrollPageDown:function(e){var t=this.table.rowManager,o=t.scrollTop+t.height,i=t.element.scrollHeight;e.preventDefault(),t.displayRowsCount&&(o<=i?t.element.scrollTop=o:t.scrollToRow(t.getDisplayRows()[t.displayRowsCount-1])),this.table.element.focus()},scrollToStart:function(e){var t=this.table.rowManager;e.preventDefault(),t.displayRowsCount&&t.scrollToRow(t.getDisplayRows()[0]),this.table.element.focus()},scrollToEnd:function(e){var t=this.table.rowManager;e.preventDefault(),t.displayRowsCount&&t.scrollToRow(t.getDisplayRows()[t.displayRowsCount-1]),this.table.element.focus()},navPrev:function(e){var t=!1;this.table.modExists("edit")&&(t=this.table.modules.edit.currentCell)&&(e.preventDefault(),t.nav().prev())},navNext:function(e){var t,o=!1,i=this.table.options.tabEndNewRow;this.table.modExists("edit")&&(o=this.table.modules.edit.currentCell)&&(e.preventDefault(),t=o.nav(),t.next()||i&&(o.getElement().firstChild.blur(),i=!0===i?this.table.addRow({}):"function"==typeof i?this.table.addRow(i(o.row.getComponent())):this.table.addRow(Object.assign({},i)),i.then(function(){setTimeout(function(){t.next()})})))},navLeft:function(e){var t=!1;this.table.modExists("edit")&&(t=this.table.modules.edit.currentCell)&&(e.preventDefault(),t.nav().left())},navRight:function(e){var t=!1;this.table.modExists("edit")&&(t=this.table.modules.edit.currentCell)&&(e.preventDefault(),t.nav().right())},navUp:function(e){var t=!1;this.table.modExists("edit")&&(t=this.table.modules.edit.currentCell)&&(e.preventDefault(),t.nav().up())},navDown:function(e){var t=!1;this.table.modExists("edit")&&(t=this.table.modules.edit.currentCell)&&(e.preventDefault(),t.nav().down())},undo:function(e){this.table.options.history&&this.table.modExists("history")&&this.table.modExists("edit")&&(this.table.modules.edit.currentCell||(e.preventDefault(),this.table.modules.history.undo()))},redo:function(e){this.table.options.history&&this.table.modExists("history")&&this.table.modExists("edit")&&(this.table.modules.edit.currentCell||(e.preventDefault(),this.table.modules.history.redo()))},copyToClipboard:function(e){this.table.modules.edit.currentCell||this.table.modExists("clipboard",!0)&&this.table.modules.clipboard.copy(!1,!0)}},d.prototype.registerModule("keybindings",_);var P=function(e){this.table=e,this.menuEl=!1,this.blurEvent=this.hideMenu.bind(this),this.escEvent=this.escMenu.bind(this),this.nestedMenuBlock=!1};P.prototype.initializeColumnHeader=function(e){var t,o=this;e.definition.headerContextMenu&&e.getElement().addEventListener("contextmenu",function(t){var i="function"==typeof e.definition.headerContextMenu?e.definition.headerContextMenu(e.getComponent()):e.definition.headerContextMenu;t.preventDefault(),o.loadMenu(t,e,i)}),e.definition.headerMenu&&(t=document.createElement("span"),t.classList.add("tabulator-header-menu-button"),t.innerHTML="⋮",t.addEventListener("click",function(t){var i="function"==typeof e.definition.headerMenu?e.definition.headerMenu(e.getComponent()):e.definition.headerMenu;t.stopPropagation(),t.preventDefault(),o.loadMenu(t,e,i)}),e.titleElement.insertBefore(t,e.titleElement.firstChild))},P.prototype.initializeCell=function(e){var t=this;e.getElement().addEventListener("contextmenu",function(o){var i="function"==typeof e.column.definition.contextMenu?e.column.definition.contextMenu(e.getComponent()):e.column.definition.contextMenu;o.stopImmediatePropagation(),t.loadMenu(o,e,i)})},P.prototype.initializeRow=function(e){var t=this;e.getElement().addEventListener("contextmenu",function(o){var i="function"==typeof t.table.options.rowContextMenu?t.table.options.rowContextMenu(e.getComponent()):t.table.options.rowContextMenu;t.loadMenu(o,e,i)})},P.prototype.initializeGroup=function(e){var t=this;e.getElement().addEventListener("contextmenu",function(o){var i="function"==typeof t.table.options.groupContextMenu?t.table.options.groupContextMenu(e.getComponent()):t.table.options.groupContextMenu;t.loadMenu(o,e,i)})},P.prototype.loadMenu=function(e,t,o){var i=this,n=Math.max(document.body.offsetHeight,window.innerHeight);if(e.preventDefault(),o&&o.length){if(this.nestedMenuBlock){if(this.isOpen())return}else this.nestedMenuBlock=setTimeout(function(){i.nestedMenuBlock=!1},100);this.hideMenu(),this.menuEl=document.createElement("div"),this.menuEl.classList.add("tabulator-menu"),o.forEach(function(e){var o=document.createElement("div"),n=e.label,s=e.disabled;e.separator?o.classList.add("tabulator-menu-separator"):(o.classList.add("tabulator-menu-item"),"function"==typeof n&&(n=n(t.getComponent())),n instanceof Node?o.appendChild(n):o.innerHTML=n,"function"==typeof s&&(s=s(t.getComponent())),s?(o.classList.add("tabulator-menu-item-disabled"),o.addEventListener("click",function(e){e.stopPropagation()})):o.addEventListener("click",function(o){i.hideMenu(),e.action(o,t.getComponent())})),i.menuEl.appendChild(o)}),this.menuEl.style.top=e.pageY+"px",this.menuEl.style.left=e.pageX+"px",document.body.addEventListener("click",this.blurEvent),this.table.rowManager.element.addEventListener("scroll",this.blurEvent),setTimeout(function(){document.body.addEventListener("contextmenu",i.blurEvent)},100),document.body.addEventListener("keydown",this.escEvent),document.body.appendChild(this.menuEl),e.pageX+this.menuEl.offsetWidth>=document.body.offsetWidth&&(this.menuEl.style.left="",this.menuEl.style.right=document.body.offsetWidth-e.pageX+"px"),e.pageY+this.menuEl.offsetHeight>=n&&(this.menuEl.style.top="",this.menuEl.style.bottom=n-e.pageY+"px")}},P.prototype.isOpen=function(){return!!this.menuEl.parentNode},P.prototype.escMenu=function(e){27==e.keyCode&&this.hideMenu()},P.prototype.hideMenu=function(){this.menuEl.parentNode&&this.menuEl.parentNode.removeChild(this.menuEl),this.escEvent&&document.body.removeEventListener("keydown",this.escEvent),this.blurEvent&&(document.body.removeEventListener("click",this.blurEvent),document.body.removeEventListener("contextmenu",this.blurEvent),this.table.rowManager.element.removeEventListener("scroll",this.blurEvent))},P.prototype.menus={},d.prototype.registerModule("menu",P);var F=function(e){this.table=e,this.placeholderElement=this.createPlaceholderElement(),this.hoverElement=!1,this.checkTimeout=!1,this.checkPeriod=250,this.moving=!1,this.toCol=!1,this.toColAfter=!1,this.startX=0,this.autoScrollMargin=40,this.autoScrollStep=5,this.autoScrollTimeout=!1,this.touchMove=!1,this.moveHover=this.moveHover.bind(this),this.endMove=this.endMove.bind(this)};F.prototype.createPlaceholderElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-col"),e.classList.add("tabulator-col-placeholder"),e},F.prototype.initializeColumn=function(e){var t,o=this,i={};e.modules.frozen||(t=e.getElement(),i.mousemove=function(i){e.parent===o.moving.parent&&((o.touchMove?i.touches[0].pageX:i.pageX)-d.prototype.helpers.elOffset(t).left+o.table.columnManager.element.scrollLeft>e.getWidth()/2?o.toCol===e&&o.toColAfter||(t.parentNode.insertBefore(o.placeholderElement,t.nextSibling),o.moveColumn(e,!0)):(o.toCol!==e||o.toColAfter)&&(t.parentNode.insertBefore(o.placeholderElement,t),o.moveColumn(e,!1)))}.bind(o),t.addEventListener("mousedown",function(t){o.touchMove=!1,1===t.which&&(o.checkTimeout=setTimeout(function(){o.startMove(t,e)},o.checkPeriod))}),t.addEventListener("mouseup",function(e){1===e.which&&o.checkTimeout&&clearTimeout(o.checkTimeout)}),o.bindTouchEvents(e)),e.modules.moveColumn=i},F.prototype.bindTouchEvents=function(e){var t,o,i,n,s,r,a,l=this,c=e.getElement(),u=!1;c.addEventListener("touchstart",function(c){l.checkTimeout=setTimeout(function(){l.touchMove=!0,t=e,o=e.nextColumn(),n=o?o.getWidth()/2:0,i=e.prevColumn(),s=i?i.getWidth()/2:0,r=0,a=0,u=!1,l.startMove(c,e)},l.checkPeriod)},{passive:!0}),c.addEventListener("touchmove",function(c){var d,h;l.moving&&(l.moveHover(c),u||(u=c.touches[0].pageX),d=c.touches[0].pageX-u,d>0?o&&d-r>n&&(h=o)!==e&&(u=c.touches[0].pageX,h.getElement().parentNode.insertBefore(l.placeholderElement,h.getElement().nextSibling),l.moveColumn(h,!0)):i&&-d-a>s&&(h=i)!==e&&(u=c.touches[0].pageX,h.getElement().parentNode.insertBefore(l.placeholderElement,h.getElement()),l.moveColumn(h,!1)),h&&(t=h,o=h.nextColumn(),r=n,n=o?o.getWidth()/2:0,i=h.prevColumn(),a=s,s=i?i.getWidth()/2:0))},{passive:!0}),c.addEventListener("touchend",function(e){l.checkTimeout&&clearTimeout(l.checkTimeout),l.moving&&l.endMove(e)})},F.prototype.startMove=function(e,t){var o=t.getElement();this.moving=t,this.startX=(this.touchMove?e.touches[0].pageX:e.pageX)-d.prototype.helpers.elOffset(o).left,this.table.element.classList.add("tabulator-block-select"),this.placeholderElement.style.width=t.getWidth()+"px",this.placeholderElement.style.height=t.getHeight()+"px",o.parentNode.insertBefore(this.placeholderElement,o),o.parentNode.removeChild(o),this.hoverElement=o.cloneNode(!0),this.hoverElement.classList.add("tabulator-moving"),this.table.columnManager.getElement().appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.bottom="0",this.touchMove||(this._bindMouseMove(),document.body.addEventListener("mousemove",this.moveHover),document.body.addEventListener("mouseup",this.endMove)),this.moveHover(e)},F.prototype._bindMouseMove=function(){this.table.columnManager.columnsByIndex.forEach(function(e){e.modules.moveColumn.mousemove&&e.getElement().addEventListener("mousemove",e.modules.moveColumn.mousemove)})},F.prototype._unbindMouseMove=function(){this.table.columnManager.columnsByIndex.forEach(function(e){e.modules.moveColumn.mousemove&&e.getElement().removeEventListener("mousemove",e.modules.moveColumn.mousemove)})},F.prototype.moveColumn=function(e,t){var o=this.moving.getCells();this.toCol=e,this.toColAfter=t,t?e.getCells().forEach(function(e,t){var i=e.getElement();i.parentNode.insertBefore(o[t].getElement(),i.nextSibling)}):e.getCells().forEach(function(e,t){var i=e.getElement();i.parentNode.insertBefore(o[t].getElement(),i)})},F.prototype.endMove=function(e){(1===e.which||this.touchMove)&&(this._unbindMouseMove(),this.placeholderElement.parentNode.insertBefore(this.moving.getElement(),this.placeholderElement.nextSibling),this.placeholderElement.parentNode.removeChild(this.placeholderElement),this.hoverElement.parentNode.removeChild(this.hoverElement),this.table.element.classList.remove("tabulator-block-select"),this.toCol&&this.table.columnManager.moveColumnActual(this.moving,this.toCol,this.toColAfter),this.moving=!1,this.toCol=!1,this.toColAfter=!1,this.touchMove||(document.body.removeEventListener("mousemove",this.moveHover),document.body.removeEventListener("mouseup",this.endMove)))},F.prototype.moveHover=function(e){var t,o=this,i=o.table.columnManager.getElement(),n=i.scrollLeft,s=(o.touchMove?e.touches[0].pageX:e.pageX)-d.prototype.helpers.elOffset(i).left+n;o.hoverElement.style.left=s-o.startX+"px",s-ne.getHeight()/2){if(t.toRow!==e||!t.toRowAfter){var i=e.getElement();i.parentNode.insertBefore(t.placeholderElement,i.nextSibling),t.moveRow(e,!0)}}else if(t.toRow!==e||t.toRowAfter){var i=e.getElement();i.previousSibling&&(i.parentNode.insertBefore(t.placeholderElement,i),t.moveRow(e,!1))}}.bind(t),e.modules.moveRow=o},N.prototype.initializeRow=function(e){var t,o=this,i={};i.mouseup=function(t){o.tableRowDrop(t,e)}.bind(o),i.mousemove=function(t){if(t.pageY-d.prototype.helpers.elOffset(e.element).top+o.table.rowManager.element.scrollTop>e.getHeight()/2){if(o.toRow!==e||!o.toRowAfter){var i=e.getElement();i.parentNode.insertBefore(o.placeholderElement,i.nextSibling),o.moveRow(e,!0)}}else if(o.toRow!==e||o.toRowAfter){var i=e.getElement();i.parentNode.insertBefore(o.placeholderElement,i),o.moveRow(e,!1)}}.bind(o),this.hasHandle||(t=e.getElement(),t.addEventListener("mousedown",function(t){1===t.which&&(o.checkTimeout=setTimeout(function(){o.startMove(t,e)},o.checkPeriod))}),t.addEventListener("mouseup",function(e){1===e.which&&o.checkTimeout&&clearTimeout(o.checkTimeout)}),this.bindTouchEvents(e,e.getElement())),e.modules.moveRow=i},N.prototype.initializeCell=function(e){var t=this,o=e.getElement();o.addEventListener("mousedown",function(o){1===o.which&&(t.checkTimeout=setTimeout(function(){t.startMove(o,e.row)},t.checkPeriod))}),o.addEventListener("mouseup",function(e){1===e.which&&t.checkTimeout&&clearTimeout(t.checkTimeout)}),this.bindTouchEvents(e.row,e.getElement())},N.prototype.bindTouchEvents=function(e,t){var o,i,n,s,r,a,l,c=this,u=!1;t.addEventListener("touchstart",function(t){c.checkTimeout=setTimeout(function(){c.touchMove=!0,o=e,i=e.nextRow(),s=i?i.getHeight()/2:0,n=e.prevRow(),r=n?n.getHeight()/2:0,a=0,l=0,u=!1,c.startMove(t,e)},c.checkPeriod)},{passive:!0}),this.moving,this.toRow,this.toRowAfter,t.addEventListener("touchmove",function(t){var d,h;c.moving&&(t.preventDefault(),c.moveHover(t),u||(u=t.touches[0].pageY),d=t.touches[0].pageY-u,d>0?i&&d-a>s&&(h=i)!==e&&(u=t.touches[0].pageY,h.getElement().parentNode.insertBefore(c.placeholderElement,h.getElement().nextSibling),c.moveRow(h,!0)):n&&-d-l>r&&(h=n)!==e&&(u=t.touches[0].pageY,h.getElement().parentNode.insertBefore(c.placeholderElement,h.getElement()),c.moveRow(h,!1)),h&&(o=h,i=h.nextRow(),a=s,s=i?i.getHeight()/2:0,n=h.prevRow(),l=r,r=n?n.getHeight()/2:0))}),t.addEventListener("touchend",function(e){c.checkTimeout&&clearTimeout(c.checkTimeout),c.moving&&(c.endMove(e),c.touchMove=!1)})},N.prototype._bindMouseMove=function(){this.table.rowManager.getDisplayRows().forEach(function(e){"row"!==e.type&&"group"!==e.type||!e.modules.moveRow.mousemove||e.getElement().addEventListener("mousemove",e.modules.moveRow.mousemove)})},N.prototype._unbindMouseMove=function(){this.table.rowManager.getDisplayRows().forEach(function(e){"row"!==e.type&&"group"!==e.type||!e.modules.moveRow.mousemove||e.getElement().removeEventListener("mousemove",e.modules.moveRow.mousemove)})},N.prototype.startMove=function(e,t){var o=t.getElement();this.setStartPosition(e,t),this.moving=t,this.table.element.classList.add("tabulator-block-select"),this.placeholderElement.style.width=t.getWidth()+"px",this.placeholderElement.style.height=t.getHeight()+"px",this.connection?(this.table.element.classList.add("tabulator-movingrow-sending"),this.connectToTables(t)):(o.parentNode.insertBefore(this.placeholderElement,o),o.parentNode.removeChild(o)),this.hoverElement=o.cloneNode(!0),this.hoverElement.classList.add("tabulator-moving"),this.connection?(document.body.appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.top="0",this.hoverElement.style.width=this.table.element.clientWidth+"px",this.hoverElement.style.whiteSpace="nowrap",this.hoverElement.style.overflow="hidden",this.hoverElement.style.pointerEvents="none"):(this.table.rowManager.getTableElement().appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.top="0",this._bindMouseMove()),document.body.addEventListener("mousemove",this.moveHover),document.body.addEventListener("mouseup",this.endMove),this.moveHover(e)},N.prototype.setStartPosition=function(e,t){var o,i,n=this.touchMove?e.touches[0].pageX:e.pageX,s=this.touchMove?e.touches[0].pageY:e.pageY;o=t.getElement(),this.connection?(i=o.getBoundingClientRect(),this.startX=i.left-n+window.pageXOffset,this.startY=i.top-s+window.pageYOffset):this.startY=s-o.getBoundingClientRect().top},N.prototype.endMove=function(e){e&&1!==e.which&&!this.touchMove||(this._unbindMouseMove(),this.connection||(this.placeholderElement.parentNode.insertBefore(this.moving.getElement(),this.placeholderElement.nextSibling),this.placeholderElement.parentNode.removeChild(this.placeholderElement)),this.hoverElement.parentNode.removeChild(this.hoverElement),this.table.element.classList.remove("tabulator-block-select"),this.toRow&&this.table.rowManager.moveRow(this.moving,this.toRow,this.toRowAfter),this.moving=!1,this.toRow=!1,this.toRowAfter=!1,document.body.removeEventListener("mousemove",this.moveHover),document.body.removeEventListener("mouseup",this.endMove),this.connection&&(this.table.element.classList.remove("tabulator-movingrow-sending"),this.disconnectFromTables()))},N.prototype.moveRow=function(e,t){this.toRow=e,this.toRowAfter=t},N.prototype.moveHover=function(e){this.connection?this.moveHoverConnections.call(this,e):this.moveHoverTable.call(this,e)},N.prototype.moveHoverTable=function(e){var t=this.table.rowManager.getElement(),o=t.scrollTop,i=(this.touchMove?e.touches[0].pageY:e.pageY)-t.getBoundingClientRect().top+o;this.hoverElement.style.top=i-this.startY+"px"},N.prototype.moveHoverConnections=function(e){this.hoverElement.style.left=this.startX+(this.touchMove?e.touches[0].pageX:e.pageX)+"px",this.hoverElement.style.top=this.startY+(this.touchMove?e.touches[0].pageY:e.pageY)+"px"},N.prototype.elementRowDrop=function(e,t,o){this.table.options.movableRowsElementDrop&&this.table.options.movableRowsElementDrop(e,t,!!o&&o.getComponent())},N.prototype.connectToTables=function(e){var t,o=this;this.connectionSelectorsTables&&(t=this.table.modules.comms.getConnections(this.connectionSelectorsTables),this.table.options.movableRowsSendingStart.call(this.table,t),this.table.modules.comms.send(this.connectionSelectorsTables,"moveRow","connect",{row:e})),this.connectionSelectorsElements&&(this.connectionElements=[],Array.isArray(this.connectionSelectorsElements)||(this.connectionSelectorsElements=[this.connectionSelectorsElements]),this.connectionSelectorsElements.forEach(function(e){"string"==typeof e?o.connectionElements=o.connectionElements.concat(Array.prototype.slice.call(document.querySelectorAll(e))):o.connectionElements.push(e)}),this.connectionElements.forEach(function(e){var t=function(t){o.elementRowDrop(t,e,o.moving)};e.addEventListener("mouseup",t),e.tabulatorElementDropEvent=t,e.classList.add("tabulator-movingrow-receiving")}))},N.prototype.disconnectFromTables=function(){var e;this.connectionSelectorsTables&&(e=this.table.modules.comms.getConnections(this.connectionSelectorsTables),this.table.options.movableRowsSendingStop.call(this.table,e),this.table.modules.comms.send(this.connectionSelectorsTables,"moveRow","disconnect")),this.connectionElements.forEach(function(e){e.classList.remove("tabulator-movingrow-receiving"),e.removeEventListener("mouseup",e.tabulatorElementDropEvent),delete e.tabulatorElementDropEvent})},N.prototype.connect=function(e,t){var o=this;return this.connectedTable?(console.warn("Move Row Error - Table cannot accept connection, already connected to table:",this.connectedTable),!1):(this.connectedTable=e,this.connectedRow=t,this.table.element.classList.add("tabulator-movingrow-receiving"),o.table.rowManager.getDisplayRows().forEach(function(e){"row"===e.type&&e.modules.moveRow&&e.modules.moveRow.mouseup&&e.getElement().addEventListener("mouseup",e.modules.moveRow.mouseup)}),o.tableRowDropEvent=o.tableRowDrop.bind(o),o.table.element.addEventListener("mouseup",o.tableRowDropEvent),this.table.options.movableRowsReceivingStart.call(this.table,t,e),!0)},N.prototype.disconnect=function(e){var t=this;e===this.connectedTable?(this.connectedTable=!1,this.connectedRow=!1,this.table.element.classList.remove("tabulator-movingrow-receiving"),t.table.rowManager.getDisplayRows().forEach(function(e){"row"===e.type&&e.modules.moveRow&&e.modules.moveRow.mouseup&&e.getElement().removeEventListener("mouseup",e.modules.moveRow.mouseup)}),t.table.element.removeEventListener("mouseup",t.tableRowDropEvent),this.table.options.movableRowsReceivingStop.call(this.table,e)):console.warn("Move Row Error - trying to disconnect from non connected table")},N.prototype.dropComplete=function(e,t,o){var i=!1;if(o){switch(_typeof(this.table.options.movableRowsSender)){case"string":i=this.senders[this.table.options.movableRowsSender];break;case"function":i=this.table.options.movableRowsSender}i?i.call(this,this.moving.getComponent(),t?t.getComponent():void 0,e):this.table.options.movableRowsSender&&console.warn("Mover Row Error - no matching sender found:",this.table.options.movableRowsSender),this.table.options.movableRowsSent.call(this.table,this.moving.getComponent(),t?t.getComponent():void 0,e)}else this.table.options.movableRowsSentFailed.call(this.table,this.moving.getComponent(),t?t.getComponent():void 0,e);this.endMove()},N.prototype.tableRowDrop=function(e,t){var o=!1,i=!1;switch(console.trace("drop"),e.stopImmediatePropagation(),_typeof(this.table.options.movableRowsReceiver)){case"string":o=this.receivers[this.table.options.movableRowsReceiver];break;case"function":o=this.table.options.movableRowsReceiver}o?i=o.call(this,this.connectedRow.getComponent(),t?t.getComponent():void 0,this.connectedTable):console.warn("Mover Row Error - no matching receiver found:",this.table.options.movableRowsReceiver),i?this.table.options.movableRowsReceived.call(this.table,this.connectedRow.getComponent(),t?t.getComponent():void 0,this.connectedTable):this.table.options.movableRowsReceivedFailed.call(this.table,this.connectedRow.getComponent(),t?t.getComponent():void 0,this.connectedTable),this.table.modules.comms.send(this.connectedTable,"moveRow","dropcomplete",{row:t,success:i})},N.prototype.receivers={insert:function(e,t,o){return this.table.addRow(e.getData(),void 0,t),!0},add:function(e,t,o){return this.table.addRow(e.getData()),!0},update:function(e,t,o){return!!t&&(t.update(e.getData()),!0)},replace:function(e,t,o){return!!t&&(this.table.addRow(e.getData(),void 0,t),t.delete(),!0)}},N.prototype.senders={delete:function(e,t,o){e.delete()}},N.prototype.commsReceived=function(e,t,o){switch(t){case"connect":return this.connect(e,o.row);case"disconnect":return this.disconnect(e);case"dropcomplete":return this.dropComplete(e,o.row,o.success)}},d.prototype.registerModule("moveRow",N);var B=function(e){this.table=e,this.allowedTypes=["","data","edit","clipboard"],this.enabled=!0};B.prototype.initializeColumn=function(e){var t=this,o=!1,i={};this.allowedTypes.forEach(function(n){var s,r="mutator"+(n.charAt(0).toUpperCase()+n.slice(1));e.definition[r]&&(s=t.lookupMutator(e.definition[r]))&&(o=!0,i[r]={mutator:s,params:e.definition[r+"Params"]||{}})}),o&&(e.modules.mutate=i)},B.prototype.lookupMutator=function(e){var t=!1;switch(void 0===e?"undefined":_typeof(e)){case"string":this.mutators[e]?t=this.mutators[e]:console.warn("Mutator Error - No such mutator found, ignoring: ",e);break;case"function":t=e}return t},B.prototype.transformRow=function(e,t,o){var i,n=this,s="mutator"+(t.charAt(0).toUpperCase()+t.slice(1));return this.enabled&&n.table.columnManager.traverse(function(n){var r,a,l;n.modules.mutate&&(r=n.modules.mutate[s]||n.modules.mutate.mutator||!1)&&(i=n.getFieldValue(void 0!==o?o:e),"data"!=t&&void 0===i||(l=n.getComponent(),a="function"==typeof r.params?r.params(i,e,t,l):r.params,n.setFieldValue(e,r.mutator(i,e,t,a,l))))}),e},B.prototype.transformCell=function(e,t){var o=e.column.modules.mutate.mutatorEdit||e.column.modules.mutate.mutator||!1,i={};return o?(i=Object.assign(i,e.row.getData()),e.column.setFieldValue(i,t),o.mutator(t,i,"edit",o.params,e.getComponent())):t},B.prototype.enable=function(){this.enabled=!0},B.prototype.disable=function(){this.enabled=!1},B.prototype.mutators={},d.prototype.registerModule("mutator",B);var O=function(e){this.table=e,this.mode="local",this.progressiveLoad=!1,this.size=0,this.page=1,this.count=5,this.max=1,this.displayIndex=0,this.initialLoad=!0,this.pageSizes=[],this.dataReceivedNames={},this.dataSentNames={},this.createElements()};O.prototype.createElements=function(){var e;this.element=document.createElement("span"),this.element.classList.add("tabulator-paginator"),this.pagesElement=document.createElement("span"),this.pagesElement.classList.add("tabulator-pages"),e=document.createElement("button"),e.classList.add("tabulator-page"),e.setAttribute("type","button"),e.setAttribute("role","button"),e.setAttribute("aria-label",""),e.setAttribute("title",""),this.firstBut=e.cloneNode(!0),this.firstBut.setAttribute("data-page","first"),this.prevBut=e.cloneNode(!0),this.prevBut.setAttribute("data-page","prev"),this.nextBut=e.cloneNode(!0),this.nextBut.setAttribute("data-page","next"),this.lastBut=e.cloneNode(!0),this.lastBut.setAttribute("data-page","last"),this.table.options.paginationSizeSelector&&(this.pageSizeSelect=document.createElement("select"),this.pageSizeSelect.classList.add("tabulator-page-size"))},O.prototype.generatePageSizeSelectList=function(){var e=this,t=[];if(this.pageSizeSelect){if(Array.isArray(this.table.options.paginationSizeSelector))t=this.table.options.paginationSizeSelector,this.pageSizes=t,-1==this.pageSizes.indexOf(this.size)&&t.unshift(this.size);else if(-1==this.pageSizes.indexOf(this.size)){t=[];for(var o=1;o<5;o++)t.push(this.size*o);this.pageSizes=t}else t=this.pageSizes +;for(;this.pageSizeSelect.firstChild;)this.pageSizeSelect.removeChild(this.pageSizeSelect.firstChild);t.forEach(function(t){var o=document.createElement("option");o.value=t,!0===t?e.table.modules.localize.bind("pagination|all",function(e){o.innerHTML=e}):o.innerHTML=t,e.pageSizeSelect.appendChild(o)}),this.pageSizeSelect.value=this.size}},O.prototype.initialize=function(e){var t,o,i,n=this;this.dataSentNames=Object.assign({},this.paginationDataSentNames),this.dataSentNames=Object.assign(this.dataSentNames,this.table.options.paginationDataSent),this.dataReceivedNames=Object.assign({},this.paginationDataReceivedNames),this.dataReceivedNames=Object.assign(this.dataReceivedNames,this.table.options.paginationDataReceived),n.table.modules.localize.bind("pagination|first",function(e){n.firstBut.innerHTML=e}),n.table.modules.localize.bind("pagination|first_title",function(e){n.firstBut.setAttribute("aria-label",e),n.firstBut.setAttribute("title",e)}),n.table.modules.localize.bind("pagination|prev",function(e){n.prevBut.innerHTML=e}),n.table.modules.localize.bind("pagination|prev_title",function(e){n.prevBut.setAttribute("aria-label",e),n.prevBut.setAttribute("title",e)}),n.table.modules.localize.bind("pagination|next",function(e){n.nextBut.innerHTML=e}),n.table.modules.localize.bind("pagination|next_title",function(e){n.nextBut.setAttribute("aria-label",e),n.nextBut.setAttribute("title",e)}),n.table.modules.localize.bind("pagination|last",function(e){n.lastBut.innerHTML=e}),n.table.modules.localize.bind("pagination|last_title",function(e){n.lastBut.setAttribute("aria-label",e),n.lastBut.setAttribute("title",e)}),n.firstBut.addEventListener("click",function(){n.setPage(1)}),n.prevBut.addEventListener("click",function(){n.previousPage()}),n.nextBut.addEventListener("click",function(){n.nextPage().then(function(){}).catch(function(){})}),n.lastBut.addEventListener("click",function(){n.setPage(n.max)}),n.table.options.paginationElement&&(n.element=n.table.options.paginationElement),this.pageSizeSelect&&(t=document.createElement("label"),n.table.modules.localize.bind("pagination|page_size",function(e){n.pageSizeSelect.setAttribute("aria-label",e),n.pageSizeSelect.setAttribute("title",e),t.innerHTML=e}),n.element.appendChild(t),n.element.appendChild(n.pageSizeSelect),n.pageSizeSelect.addEventListener("change",function(e){n.setPageSize("true"==n.pageSizeSelect.value||n.pageSizeSelect.value),n.setPage(1).then(function(){}).catch(function(){})})),n.element.appendChild(n.firstBut),n.element.appendChild(n.prevBut),n.element.appendChild(n.pagesElement),n.element.appendChild(n.nextBut),n.element.appendChild(n.lastBut),n.table.options.paginationElement||e||n.table.footerManager.append(n.element,n),n.mode=n.table.options.pagination,n.table.options.paginationSize?n.size=n.table.options.paginationSize:(o=document.createElement("div"),o.classList.add("tabulator-row"),o.style.visibility=e,i=document.createElement("div"),i.classList.add("tabulator-cell"),i.innerHTML="Page Row Test",o.appendChild(i),n.table.rowManager.getTableElement().appendChild(o),n.size=Math.floor(n.table.rowManager.getElement().clientHeight/o.offsetHeight),n.table.rowManager.getTableElement().removeChild(o)),n.count=n.table.options.paginationButtonCount,n.generatePageSizeSelectList()},O.prototype.initializeProgressive=function(e){this.initialize(!0),this.mode="progressive_"+e,this.progressiveLoad=!0},O.prototype.setDisplayIndex=function(e){this.displayIndex=e},O.prototype.getDisplayIndex=function(){return this.displayIndex},O.prototype.setMaxRows=function(e){this.max=e?!0===this.size?1:Math.ceil(e/this.size):1,this.page>this.max&&(this.page=this.max)},O.prototype.reset=function(e,t){return("local"==this.mode||e)&&(this.page=1),t&&(this.initialLoad=!0),!0},O.prototype.setMaxPage=function(e){e=parseInt(e),this.max=e||1,this.page>this.max&&(this.page=this.max,this.trigger())},O.prototype.setPage=function(e){var t=this,o=this;switch(e){case"first":return this.setPage(1);case"prev":return this.previousPage();case"next":return this.nextPage();case"last":return this.setPage(this.max)}return new Promise(function(i,n){e=parseInt(e),e>0&&e<=t.max?(t.page=e,t.trigger().then(function(){i()}).catch(function(){n()}),o.table.options.persistence&&o.table.modExists("persistence",!0)&&o.table.modules.persistence.config.page&&o.table.modules.persistence.save("page")):(console.warn("Pagination Error - Requested page is out of range of 1 - "+t.max+":",e),n())})},O.prototype.setPageToRow=function(e){var t=this;return new Promise(function(o,i){var n=t.table.rowManager.getDisplayRows(t.displayIndex-1),s=n.indexOf(e);if(s>-1){var r=!0===t.size?1:Math.ceil((s+1)/t.size);t.setPage(r).then(function(){o()}).catch(function(){i()})}else console.warn("Pagination Error - Requested row is not visible"),i()})},O.prototype.setPageSize=function(e){!0!==e&&(e=parseInt(e)),e>0&&(this.size=e),this.pageSizeSelect&&this.generatePageSizeSelectList(),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.page&&this.table.modules.persistence.save("page")},O.prototype._setPageButtons=function(){for(var e=this,t=Math.floor((this.count-1)/2),o=Math.ceil((this.count-1)/2),i=this.max-this.page+t+10&&s<=e.max&&e.pagesElement.appendChild(e._generatePageButton(s));this.footerRedraw()},O.prototype._generatePageButton=function(e){var t=this,o=document.createElement("button");return o.classList.add("tabulator-page"),e==t.page&&o.classList.add("active"),o.setAttribute("type","button"),o.setAttribute("role","button"),t.table.modules.localize.bind("pagination|page_title",function(t){o.setAttribute("aria-label",t+" "+e),o.setAttribute("title",t+" "+e)}),o.setAttribute("data-page",e),o.textContent=e,o.addEventListener("click",function(o){t.setPage(e)}),o},O.prototype.previousPage=function(){var e=this;return new Promise(function(t,o){e.page>1?(e.page--,e.trigger().then(function(){t()}).catch(function(){o()}),e.table.options.persistence&&e.table.modExists("persistence",!0)&&e.table.modules.persistence.config.page&&e.table.modules.persistence.save("page")):(console.warn("Pagination Error - Previous page would be less than page 1:",0),o())})},O.prototype.nextPage=function(){var e=this;return new Promise(function(t,o){e.pagen?i.splice(n,0,e):i.push(e))}),i},I.prototype._findColumn=function(e,t){var o=t.columns?"group":t.field?"field":"object";return e.find(function(e){switch(o){case"group":return e.title===t.title&&e.columns.length===t.columns.length;case"field":return e.field===t.field;case"object":return e===t}})},I.prototype.save=function(e){var t={};switch(e){case"columns":t=this.parseColumns(this.table.columnManager.getColumns());break;case"filter":t=this.table.modules.filter.getFilters();break;case"sort":t=this.validateSorters(this.table.modules.sort.getSort());break;case"group":t=this.getGroupConfig();break;case"page":t=this.getPageConfig()}this.writeFunc&&this.writeFunc(this.id,e,t)},I.prototype.validateSorters=function(e){return e.forEach(function(e){e.column=e.field,delete e.field}),e},I.prototype.getGroupConfig=function(){return this.config.group&&((!0===this.config.group||this.config.group.groupBy)&&(data.groupBy=this.table.options.groupBy),(!0===this.config.group||this.config.group.groupStartOpen)&&(data.groupStartOpen=this.table.options.groupStartOpen),(!0===this.config.group||this.config.group.groupHeader)&&(data.groupHeader=this.table.options.groupHeader)),data},I.prototype.getPageConfig=function(){var e={};return this.config.page&&((!0===this.config.page||this.config.page.size)&&(e.paginationSize=this.table.modules.page.getPageSize()),(!0===this.config.page||this.config.page.page)&&(e.paginationInitialPage=this.table.modules.page.getPage())),e},I.prototype.parseColumns=function(e){var t=this,o=[];return e.forEach(function(e){var i,n={},s=e.getDefinition();e.isGroup?(n.title=s.title,n.columns=t.parseColumns(e.getColumns())):(n.field=e.getField(),!0===t.config.columns||void 0==t.config.columns?(i=Object.keys(s),i.push("width")):i=t.config.columns,i.forEach(function(t){switch(t){case"width":n.width=e.getWidth();break;case"visible":n.visible=e.visible;break;default:n[t]=s[t]}})),o.push(n)}),o},I.prototype.readers={local:function(e,t){var o=localStorage.getItem(e+"-"+t);return!!o&&JSON.parse(o)},cookie:function(e,t){var o,i,n=document.cookie,s=e+"-"+t,r=n.indexOf(s+"=");return r>-1&&(n=n.substr(r),o=n.indexOf(";"),o>-1&&(n=n.substr(0,o)),i=n.replace(s+"=","")),!!i&&JSON.parse(i)}},I.prototype.writers={local:function(e,t,o){localStorage.setItem(e+"-"+t,JSON.stringify(o))},cookie:function(e,t,o){var i=new Date;i.setDate(i.getDate()+1e4),document.cookie=e+"-"+t+"="+JSON.stringify(o)+"; expires="+i.toUTCString()}},d.prototype.registerModule("persistence",I);var j=function(e){this.table=e,this.element=!1,this.manualBlock=!1};j.prototype.initialize=function(){window.addEventListener("beforeprint",this.replaceTable.bind(this)),window.addEventListener("afterprint",this.cleanup.bind(this))},j.prototype.replaceTable=function(){this.manualBlock||(this.element=document.createElement("div"),this.element.classList.add("tabulator-print-table"),this.element.appendChild(this.table.modules.export.genereateTable(this.table.options.printConfig,this.table.options.printStyled,this.table.options.printRowRange,"print")),this.table.element.style.display="none",this.table.element.parentNode.insertBefore(this.element,this.table.element))},j.prototype.cleanup=function(){document.body.classList.remove("tabulator-print-fullscreen-hide"),this.element&&this.element.parentNode&&(this.element.parentNode.removeChild(this.element),this.table.element.style.display="")},j.prototype.printFullscreen=function(e,t,o){var i,n,s=window.scrollX,r=window.scrollY,a=document.createElement("div"),l=document.createElement("div"),c=this.table.modules.export.genereateTable(void 0!==o?o:this.table.options.printConfig,void 0!==t?t:this.table.options.printStyled,e,"print");this.manualBlock=!0,this.element=document.createElement("div"),this.element.classList.add("tabulator-print-fullscreen"),this.table.options.printHeader&&(a.classList.add("tabulator-print-header"),i="function"==typeof this.table.options.printHeader?this.table.options.printHeader.call(this.table):this.table.options.printHeader,"string"==typeof i?a.innerHTML=i:a.appendChild(i),this.element.appendChild(a)),this.element.appendChild(c),this.table.options.printFooter&&(l.classList.add("tabulator-print-footer"),n="function"==typeof this.table.options.printFooter?this.table.options.printFooter.call(this.table):this.table.options.printFooter,"string"==typeof n?l.innerHTML=n:l.appendChild(n),this.element.appendChild(l)),document.body.classList.add("tabulator-print-fullscreen-hide"),document.body.appendChild(this.element),this.table.options.printFormatter&&this.table.options.printFormatter(this.element,c),window.print(),this.cleanup(),window.scrollTo(s,r),this.manualBlock=!1},d.prototype.registerModule("print",j);var V=function(e){this.table=e,this.data=!1,this.blocked=!1,this.origFuncs={},this.currentVersion=0};V.prototype.watchData=function(e){var t,o=this;this.currentVersion++,t=this.currentVersion,o.unwatchData(),o.data=e,o.origFuncs.push=e.push,Object.defineProperty(o.data,"push",{enumerable:!1,configurable:!0,value:function(){var i=Array.from(arguments);return o.blocked||t!==o.currentVersion||i.forEach(function(e){o.table.rowManager.addRowActual(e,!1)}),o.origFuncs.push.apply(e,arguments)}}),o.origFuncs.unshift=e.unshift,Object.defineProperty(o.data,"unshift",{enumerable:!1,configurable:!0,value:function(){var i=Array.from(arguments);return o.blocked||t!==o.currentVersion||i.forEach(function(e){o.table.rowManager.addRowActual(e,!0)}),o.origFuncs.unshift.apply(e,arguments)}}),o.origFuncs.shift=e.shift,Object.defineProperty(o.data,"shift",{enumerable:!1,configurable:!0,value:function(){var i;return o.blocked||t!==o.currentVersion||o.data.length&&(i=o.table.rowManager.getRowFromDataObject(o.data[0]))&&i.deleteActual(),o.origFuncs.shift.call(e)}}),o.origFuncs.pop=e.pop,Object.defineProperty(o.data,"pop",{enumerable:!1,configurable:!0,value:function(){var i;return o.blocked||t!==o.currentVersion||o.data.length&&(i=o.table.rowManager.getRowFromDataObject(o.data[o.data.length-1]))&&i.deleteActual(),o.origFuncs.pop.call(e)}}),o.origFuncs.splice=e.splice,Object.defineProperty(o.data,"splice",{enumerable:!1,configurable:!0,value:function(){var i,n=Array.from(arguments),s=n[0]<0?e.length+n[0]:n[0],r=n[1],a=!!n[2]&&n.slice(2);if(!o.blocked&&t===o.currentVersion){if(a&&(i=!!e[s]&&o.table.rowManager.getRowFromDataObject(e[s]),i?a.forEach(function(e){o.table.rowManager.addRowActual(e,!0,i,!0)}):(a=a.slice().reverse(),a.forEach(function(e){o.table.rowManager.addRowActual(e,!0,!1,!0)}))),0!==r){var l=e.slice(s,void 0===n[1]?n[1]:s+r);l.forEach(function(e,t){var i=o.table.rowManager.getRowFromDataObject(e);i&&i.deleteActual(t!==l.length-1)})}(a||0!==r)&&o.table.rowManager.reRenderInPosition()}return o.origFuncs.splice.apply(e,arguments)}})},V.prototype.unwatchData=function(){if(!1!==this.data)for(var e in this.origFuncs)Object.defineProperty(this.data,e,{enumerable:!0,configurable:!0,writable:!0,value:this.origFuncs.key})},V.prototype.watchRow=function(e){var t=e.getData();this.blocked=!0;for(var o in t)this.watchKey(e,t,o);this.blocked=!1},V.prototype.watchKey=function(e,t,o){var i=this,n=Object.getOwnPropertyDescriptor(t,o),s=t[o],r=this.currentVersion;Object.defineProperty(t,o,{set:function(t){if(s=t,!i.blocked&&r===i.currentVersion){var a={};a[o]=t,e.updateData(a)}n.set&&n.set(t)},get:function(){return n.get&&n.get(),s}})},V.prototype.unwatchRow=function(e){var t=e.getData();for(var o in t)Object.defineProperty(t,o,{value:t[o]})},V.prototype.block=function(){this.blocked=!0},V.prototype.unblock=function(){this.blocked=!1},d.prototype.registerModule("reactiveData",V);var W=function(e){this.table=e,this.startColumn=!1,this.startX=!1,this.startWidth=!1,this.handle=null,this.prevHandle=null};W.prototype.initializeColumn=function(e,t,o){var i=this,n=!1,s=this.table.options.resizableColumns;if("header"===e&&(n="textarea"==t.definition.formatter||t.definition.variableHeight,t.modules.resize={variableHeight:n}),!0===s||s==e){var r=document.createElement("div");r.className="tabulator-col-resize-handle";var a=document.createElement("div");a.className="tabulator-col-resize-handle prev",r.addEventListener("click",function(e){e.stopPropagation()});var l=function(e){var o=t.getLastColumn();o&&i._checkResizability(o)&&(i.startColumn=t,i._mouseDown(e,o,r))};r.addEventListener("mousedown",l),r.addEventListener("touchstart",l,{passive:!0}),r.addEventListener("dblclick",function(e){var o=t.getLastColumn();o&&i._checkResizability(o)&&(e.stopPropagation(),o.reinitializeWidth(!0))}),a.addEventListener("click",function(e){e.stopPropagation()});var c=function(e){var o,n,s;(o=t.getFirstColumn())&&(n=i.table.columnManager.findColumnIndex(o),(s=n>0&&i.table.columnManager.getColumnByIndex(n-1))&&i._checkResizability(s)&&(i.startColumn=t,i._mouseDown(e,s,a)))};a.addEventListener("mousedown",c),a.addEventListener("touchstart",c,{passive:!0}),a.addEventListener("dblclick",function(e){var o,n,s;(o=t.getFirstColumn())&&(n=i.table.columnManager.findColumnIndex(o),(s=n>0&&i.table.columnManager.getColumnByIndex(n-1))&&i._checkResizability(s)&&(e.stopPropagation(),s.reinitializeWidth(!0)))}),o.appendChild(r),o.appendChild(a)}},W.prototype._checkResizability=function(e){return void 0!==e.definition.resizable?e.definition.resizable:this.table.options.resizableColumns},W.prototype._mouseDown=function(e,t,o){function i(e){t.setWidth(s.startWidth+((void 0===e.screenX?e.touches[0].screenX:e.screenX)-s.startX)),!s.table.browserSlow&&t.modules.resize&&t.modules.resize.variableHeight&&t.checkCellHeights()}function n(e){s.startColumn.modules.edit&&(s.startColumn.modules.edit.blocked=!1),s.table.browserSlow&&t.modules.resize&&t.modules.resize.variableHeight&&t.checkCellHeights(),document.body.removeEventListener("mouseup",n),document.body.removeEventListener("mousemove",i),o.removeEventListener("touchmove",i),o.removeEventListener("touchend",n),s.table.element.classList.remove("tabulator-block-select"),s.table.options.persistence&&s.table.modExists("persistence",!0)&&s.table.modules.persistence.config.columns&&s.table.modules.persistence.save("columns"),s.table.options.columnResized.call(s.table,t.getComponent())}var s=this;s.table.element.classList.add("tabulator-block-select"),e.stopPropagation(),s.startColumn.modules.edit&&(s.startColumn.modules.edit.blocked=!0),s.startX=void 0===e.screenX?e.touches[0].screenX:e.screenX,s.startWidth=t.getWidth(),document.body.addEventListener("mousemove",i),document.body.addEventListener("mouseup",n),o.addEventListener("touchmove",i,{passive:!0}),o.addEventListener("touchend",n)},d.prototype.registerModule("resizeColumns",W);var G=function(e){this.table=e,this.startColumn=!1,this.startY=!1,this.startHeight=!1,this.handle=null,this.prevHandle=null};G.prototype.initializeRow=function(e){var t=this,o=e.getElement(),i=document.createElement("div");i.className="tabulator-row-resize-handle";var n=document.createElement("div");n.className="tabulator-row-resize-handle prev",i.addEventListener("click",function(e){e.stopPropagation()});var s=function(o){t.startRow=e,t._mouseDown(o,e,i)};i.addEventListener("mousedown",s),i.addEventListener("touchstart",s,{passive:!0}),n.addEventListener("click",function(e){e.stopPropagation()});var r=function(o){var i=t.table.rowManager.prevDisplayRow(e);i&&(t.startRow=i,t._mouseDown(o,i,n))};n.addEventListener("mousedown",r),n.addEventListener("touchstart",r,{passive:!0}),o.appendChild(i),o.appendChild(n)},G.prototype._mouseDown=function(e,t,o){function i(e){t.setHeight(s.startHeight+((void 0===e.screenY?e.touches[0].screenY:e.screenY)-s.startY))}function n(e){document.body.removeEventListener("mouseup",i),document.body.removeEventListener("mousemove",i),o.removeEventListener("touchmove",i),o.removeEventListener("touchend",n),s.table.element.classList.remove("tabulator-block-select"),s.table.options.rowResized.call(this.table,t.getComponent())}var s=this;s.table.element.classList.add("tabulator-block-select"),e.stopPropagation(),s.startY=void 0===e.screenY?e.touches[0].screenY:e.screenY,s.startHeight=t.getHeight(),document.body.addEventListener("mousemove",i),document.body.addEventListener("mouseup",n),o.addEventListener("touchmove",i,{passive:!0}),o.addEventListener("touchend",n)},d.prototype.registerModule("resizeRows",G);var U=function(e){this.table=e,this.binding=!1,this.observer=!1,this.containerObserver=!1,this.tableHeight=0,this.tableWidth=0,this.containerHeight=0,this.containerWidth=0,this.autoResize=!1};U.prototype.initialize=function(e){var t,o=this,i=this.table;this.tableHeight=i.element.clientHeight,this.tableWidth=i.element.clientWidth,i.element.parentNode&&(this.containerHeight=i.element.parentNode.clientHeight,this.containerWidth=i.element.parentNode.clientWidth),"undefined"!=typeof ResizeObserver&&"virtual"===i.rowManager.getRenderMode()?(this.autoResize=!0,this.observer=new ResizeObserver(function(e){if(!i.browserMobile||i.browserMobile&&!i.modules.edit.currentCell){var t=Math.floor(e[0].contentRect.height),n=Math.floor(e[0].contentRect.width);o.tableHeight==t&&o.tableWidth==n||(o.tableHeight=t,o.tableWidth=n,i.element.parentNode&&(o.containerHeight=i.element.parentNode.clientHeight,o.containerWidth=i.element.parentNode.clientWidth),i.redraw())}}),this.observer.observe(i.element),t=window.getComputedStyle(i.element),this.table.element.parentNode&&!this.table.rowManager.fixedHeight&&(t.getPropertyValue("max-height")||t.getPropertyValue("min-height"))&&(this.containerObserver=new ResizeObserver(function(e){if(!i.browserMobile||i.browserMobile&&!i.modules.edit.currentCell){var t=Math.floor(e[0].contentRect.height),n=Math.floor(e[0].contentRect.width);o.containerHeight==t&&o.containerWidth==n||(o.containerHeight=t,o.containerWidth=n,o.tableHeight=i.element.clientHeight,o.tableWidth=i.element.clientWidth,i.redraw()),i.redraw()}}),this.containerObserver.observe(this.table.element.parentNode))):(this.binding=function(){(!i.browserMobile||i.browserMobile&&!i.modules.edit.currentCell)&&i.redraw()},window.addEventListener("resize",this.binding))},U.prototype.clearBindings=function(e){this.binding&&window.removeEventListener("resize",this.binding),this.observer&&this.observer.unobserve(this.table.element),this.containerObserver&&this.containerObserver.unobserve(this.table.element.parentNode)},d.prototype.registerModule("resizeTable",U);var Y=function(e){this.table=e,this.columns=[],this.hiddenColumns=[],this.mode="",this.index=0,this.collapseFormatter=[],this.collapseStartOpen=!0,this.collapseHandleColumn=!1};Y.prototype.initialize=function(){var e=this,t=[];this.mode=this.table.options.responsiveLayout,this.collapseFormatter=this.table.options.responsiveLayoutCollapseFormatter||this.formatCollapsedData,this.collapseStartOpen=this.table.options.responsiveLayoutCollapseStartOpen,this.hiddenColumns=[],this.table.columnManager.columnsByIndex.forEach(function(o,i){o.modules.responsive&&o.modules.responsive.order&&o.modules.responsive.visible&&(o.modules.responsive.index=i,t.push(o),o.visible||"collapse"!==e.mode||e.hiddenColumns.push(o))}),t=t.reverse(),t=t.sort(function(e,t){return t.modules.responsive.order-e.modules.responsive.order||t.modules.responsive.index-e.modules.responsive.index}),this.columns=t,"collapse"===this.mode&&this.generateCollapsedContent();for(var o=this.table.columnManager.columnsByIndex,i=Array.isArray(o),n=0,o=i?o:o[Symbol.iterator]();;){var s;if(i){if(n>=o.length)break;s=o[n++]}else{if(n=o.next(),n.done)break;s=n.value}var r=s;if("responsiveCollapse"==r.definition.formatter){this.collapseHandleColumn=r;break}}this.collapseHandleColumn&&(this.hiddenColumns.length?this.collapseHandleColumn.show():this.collapseHandleColumn.hide())},Y.prototype.initializeColumn=function(e){var t=e.getDefinition();e.modules.responsive={order:void 0===t.responsive?1:t.responsive,visible:!1!==t.visible}},Y.prototype.initializeRow=function(e){var t;"calc"!==e.type&&(t=document.createElement("div"),t.classList.add("tabulator-responsive-collapse"),e.modules.responsiveLayout={element:t,open:this.collapseStartOpen},this.collapseStartOpen||(t.style.display="none"))},Y.prototype.layoutRow=function(e){var t=e.getElement();e.modules.responsiveLayout&&(t.appendChild(e.modules.responsiveLayout.element),this.generateCollapsedRowContent(e))},Y.prototype.updateColumnVisibility=function(e,t){e.modules.responsive&&(e.modules.responsive.visible=t,this.initialize())},Y.prototype.hideColumn=function(e){var t=this.hiddenColumns.length;e.hide(!1,!0),"collapse"===this.mode&&(this.hiddenColumns.unshift(e),this.generateCollapsedContent(),this.collapseHandleColumn&&!t&&this.collapseHandleColumn.show())},Y.prototype.showColumn=function(e){var t;e.show(!1,!0),e.setWidth(e.getWidth()),"collapse"===this.mode&&(t=this.hiddenColumns.indexOf(e),t>-1&&this.hiddenColumns.splice(t,1),this.generateCollapsedContent(),this.collapseHandleColumn&&!this.hiddenColumns.length&&this.collapseHandleColumn.hide())},Y.prototype.update=function(){for(var e=this,t=!0;t;){var o="fitColumns"==e.table.modules.layout.getMode()?e.table.columnManager.getFlexBaseWidth():e.table.columnManager.getWidth(),i=(e.table.options.headerVisible?e.table.columnManager.element.clientWidth:e.table.element.clientWidth)-o;if(i<0){var n=e.columns[e.index];n?(e.hideColumn(n),e.index++):t=!1}else{var s=e.columns[e.index-1] +;s&&i>0&&i>=s.getWidth()?(e.showColumn(s),e.index--):t=!1}e.table.rowManager.activeRowsCount||e.table.rowManager.renderEmptyScroll()}},Y.prototype.generateCollapsedContent=function(){var e=this;this.table.rowManager.getDisplayRows().forEach(function(t){e.generateCollapsedRowContent(t)})},Y.prototype.generateCollapsedRowContent=function(e){var t,o;if(e.modules.responsiveLayout){for(t=e.modules.responsiveLayout.element;t.firstChild;)t.removeChild(t.firstChild);o=this.collapseFormatter(this.generateCollapsedRowData(e)),o&&t.appendChild(o)}},Y.prototype.generateCollapsedRowData=function(e){var t,o=this,i=e.getData(),n=[];return this.hiddenColumns.forEach(function(s){var r=s.getFieldValue(i);s.definition.title&&s.field&&(s.modules.format&&o.table.options.responsiveLayoutCollapseUseFormatters?(t={value:!1,data:{},getValue:function(){return r},getData:function(){return i},getElement:function(){return document.createElement("div")},getRow:function(){return e.getComponent()},getColumn:function(){return s.getComponent()}},n.push({title:s.definition.title,value:s.modules.format.formatter.call(o.table.modules.format,t,s.modules.format.params)})):n.push({title:s.definition.title,value:r}))}),n},Y.prototype.formatCollapsedData=function(e){var t=document.createElement("table"),o="";return e.forEach(function(e){var t=document.createElement("div");e.value instanceof Node&&(t.appendChild(e.value),e.value=t.innerHTML),o+=""+e.title+""+e.value+""}),t.innerHTML=o,Object.keys(e).length?t:""},d.prototype.registerModule("responsiveLayout",Y);var q=function(e){this.table=e,this.selecting=!1,this.lastClickedRow=!1,this.selectPrev=[],this.selectedRows=[],this.headerCheckboxElement=null};q.prototype.clearSelectionData=function(e){this.selecting=!1,this.lastClickedRow=!1,this.selectPrev=[],this.selectedRows=[],e||this._rowSelectionChanged()},q.prototype.initializeRow=function(e){var t=this,o=e.getElement(),i=function e(){setTimeout(function(){t.selecting=!1},50),document.body.removeEventListener("mouseup",e)};e.modules.select={selected:!1},t.table.options.selectableCheck.call(this.table,e.getComponent())?(o.classList.add("tabulator-selectable"),o.classList.remove("tabulator-unselectable"),t.table.options.selectable&&"highlight"!=t.table.options.selectable&&("click"===t.table.options.selectableRangeMode?o.addEventListener("click",function(o){if(o.shiftKey){t.table._clearSelection(),t.lastClickedRow=t.lastClickedRow||e;var i=t.table.rowManager.getDisplayRowIndex(t.lastClickedRow),n=t.table.rowManager.getDisplayRowIndex(e),s=i<=n?i:n,r=i>=n?i:n,a=t.table.rowManager.getDisplayRows().slice(0),l=a.splice(s,r-s+1);o.ctrlKey||o.metaKey?(l.forEach(function(o){o!==t.lastClickedRow&&(!0===t.table.options.selectable||t.isRowSelected(e)?t.toggleRow(o):t.selectedRows.lengtht.table.options.selectable&&(l=l.slice(0,t.table.options.selectable)),t.selectRows(l)),t.table._clearSelection()}else o.ctrlKey||o.metaKey?(t.toggleRow(e),t.lastClickedRow=e):(t.deselectRows(void 0,!0),t.selectRows(e),t.lastClickedRow=e)}):(o.addEventListener("click",function(o){t.table.modExists("edit")&&t.table.modules.edit.getCurrentCell()||t.table._clearSelection(),t.selecting||t.toggleRow(e)}),o.addEventListener("mousedown",function(o){if(o.shiftKey)return t.table._clearSelection(),t.selecting=!0,t.selectPrev=[],document.body.addEventListener("mouseup",i),document.body.addEventListener("keyup",i),t.toggleRow(e),!1}),o.addEventListener("mouseenter",function(o){t.selecting&&(t.table._clearSelection(),t.toggleRow(e),t.selectPrev[1]==e&&t.toggleRow(t.selectPrev[0]))}),o.addEventListener("mouseout",function(o){t.selecting&&(t.table._clearSelection(),t.selectPrev.unshift(e))})))):(o.classList.add("tabulator-unselectable"),o.classList.remove("tabulator-selectable"))},q.prototype.toggleRow=function(e){this.table.options.selectableCheck.call(this.table,e.getComponent())&&(e.modules.select&&e.modules.select.selected?this._deselectRow(e):this._selectRow(e))},q.prototype.selectRows=function(e){var t,o=this;switch(void 0===e?"undefined":_typeof(e)){case"undefined":this.table.rowManager.rows.forEach(function(e){o._selectRow(e,!0,!0)}),this._rowSelectionChanged();break;case"string":t=this.table.rowManager.findRow(e),t?this._selectRow(t,!0,!0):this.table.rowManager.getRows(e).forEach(function(e){o._selectRow(e,!0,!0)}),this._rowSelectionChanged();break;default:Array.isArray(e)?(e.forEach(function(e){o._selectRow(e,!0,!0)}),this._rowSelectionChanged()):this._selectRow(e,!1,!0)}},q.prototype._selectRow=function(e,t,o){if(!isNaN(this.table.options.selectable)&&!0!==this.table.options.selectable&&!o&&this.selectedRows.length>=this.table.options.selectable){if(!this.table.options.selectableRollingSelection)return!1;this._deselectRow(this.selectedRows[0])}var i=this.table.rowManager.findRow(e);i?-1==this.selectedRows.indexOf(i)&&(i.modules.select||(i.modules.select={}),i.modules.select.selected=!0,i.modules.select.checkboxEl&&(i.modules.select.checkboxEl.checked=!0),i.getElement().classList.add("tabulator-selected"),this.selectedRows.push(i),this.table.options.dataTreeSelectPropagate&&this.childRowSelection(i,!0),t||this.table.options.rowSelected.call(this.table,i.getComponent()),this._rowSelectionChanged(t)):t||console.warn("Selection Error - No such row found, ignoring selection:"+e)},q.prototype.isRowSelected=function(e){return-1!==this.selectedRows.indexOf(e)},q.prototype.deselectRows=function(e,t){var o,i=this;if(void 0===e){o=i.selectedRows.length;for(var n=0;n-1&&(n.modules.select||(n.modules.select={}),n.modules.select.selected=!1,n.modules.select.checkboxEl&&(n.modules.select.checkboxEl.checked=!1),n.getElement().classList.remove("tabulator-selected"),i.selectedRows.splice(o,1),this.table.options.dataTreeSelectPropagate&&this.childRowSelection(n,!1),t||i.table.options.rowDeselected.call(this.table,n.getComponent()),i._rowSelectionChanged(t)):t||console.warn("Deselection Error - No such row found, ignoring selection:"+e)},q.prototype.getSelectedData=function(){var e=[];return this.selectedRows.forEach(function(t){e.push(t.getData())}),e},q.prototype.getSelectedRows=function(){var e=[];return this.selectedRows.forEach(function(t){e.push(t.getComponent())}),e},q.prototype._rowSelectionChanged=function(e){this.headerCheckboxElement&&(0===this.selectedRows.length?(this.headerCheckboxElement.checked=!1,this.headerCheckboxElement.indeterminate=!1):this.table.rowManager.rows.length===this.selectedRows.length?(this.headerCheckboxElement.checked=!0,this.headerCheckboxElement.indeterminate=!1):(this.headerCheckboxElement.indeterminate=!0,this.headerCheckboxElement.checked=!1)),e||this.table.options.rowSelectionChanged.call(this.table,this.getSelectedData(),this.getSelectedRows())},q.prototype.registerRowSelectCheckbox=function(e,t){e._row.modules.select||(e._row.modules.select={}),e._row.modules.select.checkboxEl=t},q.prototype.registerHeaderSelectCheckbox=function(e){this.headerCheckboxElement=e},q.prototype.childRowSelection=function(e,t){var o=this.table.modules.dataTree.getChildren(e);if(t)for(var i=o,n=Array.isArray(i),s=0,i=n?i:i[Symbol.iterator]();;){var r;if(n){if(s>=i.length)break;r=i[s++]}else{if(s=i.next(),s.done)break;r=s.value}var a=r;this._selectRow(a,!0)}else for(var l=o,c=Array.isArray(l),u=0,l=c?l:l[Symbol.iterator]();;){var d;if(c){if(u>=l.length)break;d=l[u++]}else{if(u=l.next(),u.done)break;d=u.value}var h=d;this._deselectRow(h,!0)}},d.prototype.registerModule("selectRow",q);var X=function(e){this.table=e,this.sortList=[],this.changed=!1};X.prototype.initializeColumn=function(e,t){var o,i,n=this,s=!1;switch(_typeof(e.definition.sorter)){case"string":n.sorters[e.definition.sorter]?s=n.sorters[e.definition.sorter]:console.warn("Sort Error - No such sorter found: ",e.definition.sorter);break;case"function":s=e.definition.sorter}e.modules.sort={sorter:s,dir:"none",params:e.definition.sorterParams||{},startingDir:e.definition.headerSortStartingDir||"asc",tristate:void 0!==e.definition.headerSortTristate?e.definition.headerSortTristate:this.table.options.headerSortTristate},(void 0===e.definition.headerSort?!1!==this.table.options.headerSort:!1!==e.definition.headerSort)&&(o=e.getElement(),o.classList.add("tabulator-sortable"),i=document.createElement("div"),i.classList.add("tabulator-arrow"),t.appendChild(i),o.addEventListener("click",function(t){var o="",i=[],s=!1;if(e.modules.sort){if(e.modules.sort.tristate)o="none"==e.modules.sort.dir?e.modules.sort.startingDir:e.modules.sort.dir==e.modules.sort.startingDir?"asc"==e.modules.sort.dir?"desc":"asc":"none";else switch(e.modules.sort.dir){case"asc":o="desc";break;case"desc":o="asc";break;default:o=e.modules.sort.startingDir}n.table.options.columnHeaderSortMulti&&(t.shiftKey||t.ctrlKey)?(i=n.getSort(),s=i.findIndex(function(t){return t.field===e.getField()}),s>-1?(i[s].dir=o,s!=i.length-1&&(s=i.splice(s,1)[0],"none"!=o&&i.push(s))):"none"!=o&&i.push({column:e,dir:o}),n.setSort(i)):"none"==o?n.clear():n.setSort(e,o),n.table.rowManager.sorterRefresh(!n.sortList.length)}}))},X.prototype.hasChanged=function(){var e=this.changed;return this.changed=!1,e},X.prototype.getSort=function(){var e=this,t=[];return e.sortList.forEach(function(e){e.column&&t.push({column:e.column.getComponent(),field:e.column.getField(),dir:e.dir})}),t},X.prototype.setSort=function(e,t){var o=this,i=[];Array.isArray(e)||(e=[{column:e,dir:t}]),e.forEach(function(e){var t;t=o.table.columnManager.findColumn(e.column),t?(e.column=t,i.push(e),o.changed=!0):console.warn("Sort Warning - Sort field does not exist and is being ignored: ",e.column)}),o.sortList=i,this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.sort&&this.table.modules.persistence.save("sort")},X.prototype.clear=function(){this.setSort([])},X.prototype.findSorter=function(e){var t,o=this.table.rowManager.activeRows[0],i="string";if(o&&(o=o.getData(),e.getField()))switch(t=e.getFieldValue(o),void 0===t?"undefined":_typeof(t)){case"undefined":i="string";break;case"boolean":i="boolean";break;default:isNaN(t)||""===t?t.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)&&(i="alphanum"):i="number"}return this.sorters[i]},X.prototype.sort=function(e){var t=this,o=this.table.options.sortOrderReverse?t.sortList.slice().reverse():t.sortList,i=[],n=[];t.table.options.dataSorting&&t.table.options.dataSorting.call(t.table,t.getSort()),t.clearColumnHeaders(),t.table.options.ajaxSorting?o.forEach(function(e,o){t.setColumnHeader(e.column,e.dir)}):(o.forEach(function(e,o){var n=e.column.modules.sort;e.column&&n&&(n.sorter||(n.sorter=t.findSorter(e.column)),e.params="function"==typeof n.params?n.params(e.column.getComponent(),e.dir):n.params,i.push(e)),t.setColumnHeader(e.column,e.dir)}),i.length&&t._sortItems(e,i)),t.table.options.dataSorted&&(e.forEach(function(e){n.push(e.getComponent())}),t.table.options.dataSorted.call(t.table,t.getSort(),n))},X.prototype.clearColumnHeaders=function(){this.table.columnManager.getRealColumns().forEach(function(e){e.modules.sort&&(e.modules.sort.dir="none",e.getElement().setAttribute("aria-sort","none"))})},X.prototype.setColumnHeader=function(e,t){e.modules.sort.dir=t,e.getElement().setAttribute("aria-sort",t)},X.prototype._sortItems=function(e,t){var o=this,i=t.length-1;e.sort(function(e,n){for(var s,r=i;r>=0;r--){var a=t[r];if(0!==(s=o._sortRow(e,n,a.column,a.dir,a.params)))break}return s})},X.prototype._sortRow=function(e,t,o,i,n){var s,r,a="asc"==i?e:t,l="asc"==i?t:e;return e=o.getFieldValue(a.getData()),t=o.getFieldValue(l.getData()),e=void 0!==e?e:"",t=void 0!==t?t:"",s=a.getComponent(),r=l.getComponent(),o.modules.sort.sorter.call(this,e,t,s,r,o.getComponent(),i,n)},X.prototype.sorters={number:function(e,t,o,i,n,s,r){var a=r.alignEmptyValues,l=r.decimalSeparator||".",c=r.thousandSeparator||",",u=0;if(e=parseFloat(String(e).split(c).join("").split(l).join(".")),t=parseFloat(String(t).split(c).join("").split(l).join(".")),isNaN(e))u=isNaN(t)?0:-1;else{if(!isNaN(t))return e-t;u=1}return("top"===a&&"desc"===s||"bottom"===a&&"asc"===s)&&(u*=-1),u},string:function(e,t,o,i,n,s,r){var a,l=r.alignEmptyValues,c=0;if(e){if(t){switch(_typeof(r.locale)){case"boolean":r.locale&&(a=this.table.modules.localize.getLocale());break;case"string":a=r.locale}return String(e).toLowerCase().localeCompare(String(t).toLowerCase(),a)}c=1}else c=t?-1:0;return("top"===l&&"desc"===s||"bottom"===l&&"asc"===s)&&(c*=-1),c},date:function(e,t,o,i,n,s,r){return r.format||(r.format="DD/MM/YYYY"),this.sorters.datetime.call(this,e,t,o,i,n,s,r)},time:function(e,t,o,i,n,s,r){return r.format||(r.format="HH:mm"),this.sorters.datetime.call(this,e,t,o,i,n,s,r)},datetime:function(e,t,o,i,n,s,r){var a=r.format||"DD/MM/YYYY HH:mm:ss",l=r.alignEmptyValues,c=0;if("undefined"!=typeof moment){if(e=moment(e,a),t=moment(t,a),e.isValid()){if(t.isValid())return e-t;c=1}else c=t.isValid()?-1:0;return("top"===l&&"desc"===s||"bottom"===l&&"asc"===s)&&(c*=-1),c}console.error("Sort Error - 'datetime' sorter is dependant on moment.js")},boolean:function(e,t,o,i,n,s,r){return(!0===e||"true"===e||"True"===e||1===e?1:0)-(!0===t||"true"===t||"True"===t||1===t?1:0)},array:function(e,t,o,i,n,s,r){function a(e){switch(u){case"length":return e.length;case"sum":return e.reduce(function(e,t){return e+t});case"max":return Math.max.apply(null,e);case"min":return Math.min.apply(null,e);case"avg":return e.reduce(function(e,t){return e+t})/e.length}}var l=0,c=0,u=r.type||"length",d=r.alignEmptyValues,h=0;if(Array.isArray(e)){if(Array.isArray(t))return l=e?a(e):0,c=t?a(t):0,l-c;d=1}else d=Array.isArray(t)?-1:0;return("top"===d&&"desc"===s||"bottom"===d&&"asc"===s)&&(h*=-1),h},exists:function(e,t,o,i,n,s,r){return(void 0===e?0:1)-(void 0===t?0:1)},alphanum:function(e,t,o,i,n,s,r){var a,l,c,u,d,h=0,p=/(\d+)|(\D+)/g,m=/\d/,f=r.alignEmptyValues,g=0;if(e||0===e){if(t||0===t){if(isFinite(e)&&isFinite(t))return e-t;if(a=String(e).toLowerCase(),l=String(t).toLowerCase(),a===l)return 0;if(!m.test(a)||!m.test(l))return a>l?1:-1;for(a=a.match(p),l=l.match(p),d=a.length>l.length?l.length:a.length;hu?1:-1;return a.length>l.length}g=1}else g=t||0===t?-1:0;return("top"===f&&"desc"===s||"bottom"===f&&"asc"===s)&&(g*=-1),g}},d.prototype.registerModule("sort",X);var K=function(e){this.table=e,this.invalidCells=[]};return K.prototype.initializeColumn=function(e){var t,o=this,i=[];e.definition.validator&&(Array.isArray(e.definition.validator)?e.definition.validator.forEach(function(e){(t=o._extractValidator(e))&&i.push(t)}):(t=this._extractValidator(e.definition.validator))&&i.push(t),e.modules.validate=!!i.length&&i)},K.prototype._extractValidator=function(e){var t,o,i;switch(void 0===e?"undefined":_typeof(e)){case"string":return i=e.indexOf(":"),i>-1?(t=e.substring(0,i),o=e.substring(i+1)):t=e,this._buildValidator(t,o);case"function":return this._buildValidator(e);case"object":return this._buildValidator(e.type,e.parameters)}},K.prototype._buildValidator=function(e,t){var o="function"==typeof e?e:this.validators[e];return o?{type:"function"==typeof e?"function":e,func:o,params:t}:(console.warn("Validator Setup Error - No matching validator found:",e),!1)},K.prototype.validate=function(e,t,o){var i=this,n=[],s=this.invalidCells.indexOf(t);return e&&e.forEach(function(e){e.func.call(i,t.getComponent(),o,e.params)||n.push({type:e.type,parameters:e.params})}),n=!n.length||n,t.modules.validate||(t.modules.validate={}),!0===n?(t.modules.validate.invalid=!1,t.getElement().classList.remove("tabulator-validation-fail"),s>-1&&this.invalidCells.splice(s,1)):(t.modules.validate.invalid=!0,"manual"!==this.table.options.validationMode&&t.getElement().classList.add("tabulator-validation-fail"),-1==s&&this.invalidCells.push(t)),n},K.prototype.getInvalidCells=function(){var e=[];return this.invalidCells.forEach(function(t){e.push(t.getComponent())}),e},K.prototype.clearValidation=function(e){var t;e.modules.validate&&e.modules.validate.invalid&&(e.element.classList.remove("tabulator-validation-fail"),e.modules.validate.invalid=!1,(t=this.invalidCells.indexOf(e))>-1&&this.invalidCells.splice(t,1))},K.prototype.validators={integer:function(e,t,o){return""===t||null===t||void 0===t||"number"==typeof(t=Number(t))&&isFinite(t)&&Math.floor(t)===t},float:function(e,t,o){return""===t||null===t||void 0===t||"number"==typeof(t=Number(t))&&isFinite(t)&&t%1!=0},numeric:function(e,t,o){return""===t||null===t||void 0===t||!isNaN(t)},string:function(e,t,o){return""===t||null===t||void 0===t||isNaN(t)},max:function(e,t,o){return""===t||null===t||void 0===t||parseFloat(t)<=o},min:function(e,t,o){return""===t||null===t||void 0===t||parseFloat(t)>=o},starts:function(e,t,o){return""===t||null===t||void 0===t||String(t).toLowerCase().startsWith(String(o).toLowerCase())},ends:function(e,t,o){return""===t||null===t||void 0===t||String(t).toLowerCase().endsWith(String(o).toLowerCase())},minLength:function(e,t,o){return""===t||null===t||void 0===t||String(t).length>=o},maxLength:function(e,t,o){return""===t||null===t||void 0===t||String(t).length<=o},in:function(e,t,o){return""===t||null===t||void 0===t||("string"==typeof o&&(o=o.split("|")),""===t||o.indexOf(t)>-1)},regex:function(e,t,o){return""===t||null===t||void 0===t||new RegExp(o).test(t)},unique:function(e,t,o){if(""===t||null===t||void 0===t)return!0;var i=!0,n=e.getData(),s=e.getColumn()._getSelf();return this.table.rowManager.rows.forEach(function(e){var o=e.getData();o!==n&&t==s.getFieldValue(o)&&(i=!1)}),i},required:function(e,t,o){return""!==t&&null!==t&&void 0!==t}},d.prototype.registerModule("validate",K),d}); \ No newline at end of file diff --git a/install/bin/electron/resources/app/vendor/tabulator/js/tabulator_core.js b/install/bin/electron/resources/app/vendor/tabulator/js/tabulator_core.js new file mode 100644 index 0000000..1c4797a --- /dev/null +++ b/install/bin/electron/resources/app/vendor/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/install/bin/electron/resources/app/vendor/tabulator/js/tabulator_core.min.js b/install/bin/electron/resources/app/vendor/tabulator/js/tabulator_core.min.js new file mode 100644 index 0000000..92522ab --- /dev/null +++ b/install/bin/electron/resources/app/vendor/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/tools/fp.py b/install/bin/fp.py similarity index 99% rename from tools/fp.py rename to install/bin/fp.py index d8fd32b..09797f6 100644 --- a/tools/fp.py +++ b/install/bin/fp.py @@ -266,7 +266,7 @@ def VerifyUser(): if r == ACK_TIMEOUT: return str(ACK_TIMEOUT * -1) if r == ACK_SUCCESS and IsMasterUser(g_rx_buf[4]) == TRUE: - #ACK_SUCCESS 2=> 3=> 4=> 6=> + #ACK_SUCCESS return "u["+ str(g_rx_buf[2])+',' + str(g_rx_buf[3])+',' + str(g_rx_buf[4])+',' + str(g_rx_buf[6]) +"]" else: return "-" + str(ACK_NO_USER) # The center of the fingersys.stdout.write is out of alignment with sensor diff --git a/tools/fpunload.sh b/install/bin/fpunload.sh similarity index 100% rename from tools/fpunload.sh rename to install/bin/fpunload.sh diff --git a/install/bin/savewlan.sh b/install/bin/savewlan.sh new file mode 100644 index 0000000..8c6ba01 --- /dev/null +++ b/install/bin/savewlan.sh @@ -0,0 +1,33 @@ +#!/bin/bash + +WLANFILE="/etc/wpa_supplicant/wpa_supplicant.conf" +WLANDATA='ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev +update_config=1 +country=LU + +network={ + ssid="'$1'" + psk="'$2'" + priority=1 + id_str="local" +} + +network={ \ + ssid="ksphone" \ + psk="flk2kilx" + priority=1 + id_str="support" +} + +network={ + ssid="EireLAN24" + psk="daataalt2602@" + priority=2 + id_str="install" +}' +sudo echo ${WLANDATA} > ${WLANFILE} +sudo wpa_cli -i wlan0 reconfigure +#sudo dhclient -r wlan0 +#sudo ifdown wlan0 +#sudo ifup wlan0 +#sudo dhclient -v wlan0 \ No newline at end of file diff --git a/install/bin/scanwlan.sh b/install/bin/scanwlan.sh new file mode 100644 index 0000000..cd26358 --- /dev/null +++ b/install/bin/scanwlan.sh @@ -0,0 +1,30 @@ +#!/bin/bash + +IFS=$'\n'; set -f; +WLANS=(`sudo iwlist wlan0 scan`) +OUTPUT="" +for w in "${!WLANS[@]}" +do + #echo $w + if [[ "${WLANS[$w]}" =~ "Cell " ]] + then + CELLDATA=`echo "${WLANS[$w]}" | sed 's/^[ \t]*//' | awk '{ print $2 }'` + if [[ "${OUTPUT}" != "" ]] + then + OUTPUT=${OUTPUT}"," + fi + OUTPUT=${OUTPUT}'{"id":"'${CELLDATA}'",' + fi + if [[ "${WLANS[$w]}" =~ "ESSID:" ]] + then + #echo ${WLANS[$w]} + SDATA=`echo "${WLANS[$w]}" | sed 's/^[ \t]*//' | sed 's/ESSID://g'` + OUTPUT=${OUTPUT}'"SSID":'${SDATA}'}' + fi + if [[ "${WLANS[$w]}" =~ "Quality=" ]] + then + QDATA=`echo "${WLANS[$w]}" | sed 's/^[ \t]*//' | awk '{ print $1 }' | sed 's/Quality=//g'` + OUTPUT=${OUTPUT}'"quality":"'${QDATA}'",' + fi +done +echo "["${OUTPUT}"]" \ No newline at end of file diff --git a/install/install.sh b/install/install01.sh similarity index 55% rename from install/install.sh rename to install/install01.sh index 1cc53c9..b60f610 100644 --- a/install/install.sh +++ b/install/install01.sh @@ -1,44 +1,53 @@ #!/bin/bash #BASE COMMANDLINE SYSTEM +# USERNAME="pot" +# NEWHOST="dhart-hourtrax03" sudo -i +USERNAME="pot" +NEWHOST="ldin-hourtrax" update-rc.d "ssh" enable echo 'echo -e "mai5ia7a\nmai5ia7a" | passwd' > tmp.sh && bash tmp.sh && rm tmp.sh sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config sed -i 's/#Port.*/Port 3587/' /etc/ssh/sshd_config service ssh restart cp /usr/share/zoneinfo/Europe/Luxembourg /etc/localtime -groupadd dks -useradd dks -c DKS -g dks -G adm,sudo,crontab,dialout,gpio -s /bin/bash -d /home/dks -echo 'echo -e "sai4seip\nsai4seip" | passwd dks' > tmp.sh && bash tmp.sh && rm tmp.sh -mkdir -p /home/dks -chown dks:dks /home/dks -apt-get update - +USERNAME="pot" +groupadd ${USERNAME} +useradd ${USERNAME} -c ${USERNAME} -g ${USERNAME} -G adm,sudo,crontab,dialout,gpio -s /bin/bash -d /home/${USERNAME} +echo 'echo -e "sai4seip\nsai4seip" | passwd pot' > tmp.sh && bash tmp.sh && rm tmp.sh +mkdir -p /home/${USERNAME} +chown ${USERNAME}:${USERNAME} /home/${USERNAME} +echo "lcd_rotate=2" >> /boot/config.txt +echo "enable_uart=1" >> /boot/config.txt chmod 660 /etc/sudoers sed -i 's/\%sudo.*/%sudo ALL=(ALL:ALL) NOPASSWD:ALL/' /etc/sudoers chmod 440 /etc/sudoers + systemctl stop autologin@tty1 -sed -i -e "s/autologin pi/autologin dks/" /etc/systemd/system/autologin@.service -sed -i -e 's/pi/dks/' /etc/systemd/system/getty@tty1.service.d/autologin.conf -#mv /etc/xdg/openbox/menu.xml /etc/xdg/openbox/menu.xml.orig -hostnamectl set-hostname hourtrax -sed -i -e "s/127.0.1.1.*/127.0.1.1\thourtrax/" /etc/hosts +sed -i -e "s/autologin pi/autologin ${USERNAME}/" /etc/systemd/system/autologin@.service +sed -i -e 's/pi/${USERNAME}/' /etc/systemd/system/getty@tty1.service.d/autologin.conf +NEWHOST="ldin-hourtrax" +hostnamectl set-hostname ${NEWHOST} +sed -i -e "s/127.0.1.1.*/127.0.1.1\t${NEWHOST}/" /etc/hosts +#apt-get update apt-get update -apt-get install wget curl unzip openvpn liblocal-lib-perl sqlite3 +apt-get install -y wget curl unzip openvpn sqlite3 +curl -sL https://deb.nodesource.com/setup_12.x | bash - +apt-get install -y nodejs sed -i -e 's/MinProtocol/#MinProtocol/' /etc/ssl/openssl.cnf sed -i -e 's/CipherString/#CipherString/' /etc/ssl/openssl.cnf -echo "lcd_rotate=2" >> /boot/config.txt +#echo "lcd_rotate=2" >> /boot/config.txt sed -i -e 's/#xserver-command=X/xserver-command=X -nocursor/' /etc/lightdm/lightdm.conf sed -i -e 's/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/' /etc/sysctl.conf sysctl -p echo "#!/bin/bash" > /etc/xdg/lxsession/LXDE-pi/sshpwd.sh -sed -i -e "s/^autologin-user=pi/autologin-user=dks/" /etc/lightdm/lightdm.conf +sed -i -e "s/^autologin-user=pi/autologin-user=${USERNAME}/" /etc/lightdm/lightdm.conf sed -i -e "s/@/#@/" /etc/xdg/lxsession/LXDE-pi/autostart sed -i -e "s/@/#@/" /etc/xdg/lxsession/LXDE/autostart -@xset s off >> /etc/xdg/lxsession/LXDE/autostart -@xset -dpms >> /etc/xdg/lxsession/LXDE/autostart -@xset s noblank >> /etc/xdg/lxsession/LXDE/autostart +# echo "@xset s off" >> /etc/xdg/lxsession/LXDE-pi/autostart +# echo "@xset -dpms" >> /etc/xdg/lxsession/LXDE-pi/autostart +# echo "@xset s noblank" >> /etc/xdg/lxsession/LXDE-pi/autostart echo 'country=LU' >> /etc/wpa_supplicant/wpa_supplicant.conf echo '' >> /etc/wpa_supplicant/wpa_supplicant.conf echo 'network={' >> /etc/wpa_supplicant/wpa_supplicant.conf @@ -53,42 +62,66 @@ echo '' > /etc/xdg/openbox/menu.xml echo '' >> /etc/xdg/openbox/menu.xml echo '' >> /etc/xdg/openbox/menu.xml echo '' >> /etc/xdg/openbox/menu.xml -cp /home/dks/splash.png /usr/share/plymouth/themes/pix/splash.png -echo "@/home/dks/bin/startapp.sh" > /etc/xdg/lxsession/LXDE-pi/autostart + + rm /etc/xdg/autostart/xdg-user-dirs.desktop rm /etc/xdg/autostart/pprompt.desktop rm /etc/xdg/autostart/xcompmgr.desktop rm /etc/xdg/autostart/piwiz.desktop rm /etc/xdg/autostart/lxpolkit.desktop -rm /etc/xdg/autostart/xdg-user-dirs.desktop +#rm /etc/xdg/autostart/xdg-user-dirs.desktop +sudo rfkill unblock all +shutdown -r now + + shutdown -r now -userdel pi -rm -r /home/pi -mkdir -p ${HOME}/bin/electron + + +sudo -i +export USERNAME="pot" +NEWHOST="ldin-hourtrax" +echo "@/home/${USERNAME}/bin/startapp.sh" > /etc/xdg/lxsession/LXDE-pi/autostart +cp "/home/${USERNAME}/vpn/DKS-VPN-"${NEWHOST}".ovpn" "/etc/openvpn/DKS-VPN-"${NEWHOST}.".conf" +systemctl enable openvpn@DKS-VPN-${NEWHOST}.service +cp /home/${USERNAME}/splash.png /usr/share/plymouth/themes/pix/splash.png +sudo userdel pi +sudo rm -r /home/pi + +su - ${USERNAME} + cd ${HOME}/bin/electron unzip electron-v9.3.2-linux-armv7l.zip +cd resources/app +npm install +npm audit fix +cd ${HOME}/.hourtrax +sqlite3 hourtrax.sqlite < ht.sql +chmod +x ${HOME}/bin/startapp.sh +chmod +x ${HOME}/bin/fp.py +chmod +x ${HOME}/bin/fpunload.sh -cd ${HOME} -mkdir -p .hourtrax/ + shutdown -r now # https://github.com/nodesource/distributions#debinstall #curl -sL https://deb.nodesource.com/setup_lts.x | bash - #apt-get install -y nodejs -curl -sL https://deb.nodesource.com/setup_12.x | bash - -apt-get install gcc g++ make -apt-get install -y nodejs -cpanm -cpanm Plack +sudo -i + +#apt-get update +# apt-get install gcc g++ make -cpanm Plack Plack::App::File Plack::Middleware::Auth::Basic Plack::Middleware::DirIndex Starlight Digest::SHA::PurePerl DBD::SQLite URI::Encode Text::Unidecode -cpanm -f POSIX::strftime::Compiler Apache::LogFormat::Compiler +# cpanm +# cpanm Plack + +# cpanm Plack Plack::App::File Plack::Middleware::Auth::Basic Plack::Middleware::DirIndex Starlight Digest::SHA::PurePerl DBD::SQLite URI::Encode Text::Unidecode +# cpanm -f POSIX::strftime::Compiler Apache::LogFormat::Compiler #openvpn -systemctl enable openvpn@DKS-VPN-elch-pothoutrax.service +systemctl enable openvpn@DKS-VPN-${NEWHOST}.service # for fingerprint on gpio -echo "enable_uart=1" >> /boot/config.txt + diff --git a/install/install02.sh b/install/install02.sh new file mode 100644 index 0000000..e69de29 diff --git a/install/install03.sh b/install/install03.sh new file mode 100644 index 0000000..e69de29 diff --git a/server/bin/htx_syncdown.pl b/server/bin/htx_syncdown.pl deleted file mode 100644 index b95632d..0000000 --- a/server/bin/htx_syncdown.pl +++ /dev/null @@ -1,115 +0,0 @@ -#!/usr/bin/env perl -use strict; -use Getopt::Long; -use Data::Dumper; -use File::Basename; -use FindBin qw($RealBin); -use JSON::PP; -use lib (dirname($RealBin).'/lib'); -use DB::PgSQL; -use ConfigFile; -use SSH; -use POSIX qw/strftime/; -# check if running -#print "PID:".$$."\n"; -my $cmd = 'ps ax | grep '.basename($0).' | grep -v "grep" | awk \'{ print $1 }\''; -my $cfgpath = dirname($RealBin).'/conf'; -my $logpath = dirname($RealBin).'/log'; -my $cfgdata = ConfigFile->new({logfile => $logpath.'/'.strftime('%Y-%m-%d',localtime()).'.log'}); -#print $cmd."\n"; -my $isrunning = `$cmd`; -chomp($isrunning); -#print "Result:".$isrunning."\n"; -if ($isrunning ne "$$"){ - $cfgdata->writelog("script","params","start","script already running on PID:$$!"); - print basename($0)." already runs!\n"; - exit(1); -} - - - -my $timetracker = ""; -my $system = ""; -GetOptions( "timetracker|t=s" => \$timetracker); - - -if (($timetracker eq "") || (! -e $cfgpath.'/'.$timetracker.'.conf')){ - $cfgdata->writelog("script","params","start","no timetracker in params!"); - print "no timetracker!\n"; - exit(2); -} -my $ttcfgfile = dirname($RealBin).'/conf/'.$timetracker.'.conf'; -my $ttcfg = $cfgdata->read_conf($ttcfgfile); -#print Dumper($ttcfg); -if (exists($ttcfg->{syncdb}) && exists($ttcfg->{syncschema}) && ($ttcfg->{syncdb} ne "") && ($ttcfg->{syncschema} ne "") && -f $cfgpath.'/'.$ttcfg->{syncdb}.'.conf'){ - my $ttssh = SSH->new({host => $ttcfg->{sshhost},opts => {user => $ttcfg->{sshuser}, password => $ttcfg->{sshpwd}, port => $ttcfg->{sshport}, strict_mode => 0}}); - my $syscfgfile = dirname($RealBin).'/conf/'.$ttcfg->{syncdb}.'.conf'; - my $syscfg = $cfgdata->read_conf($syscfgfile); - #print Dumper($syscfg); - my $sysdb = DB::PgSQL->new({dbname => $syscfg->{dbname},dbhost => $syscfg->{dbhost},dbuser=>$syscfg->{dbuser}, dbpasswd => $syscfg->{dbpasswd}}); - my $newts = $sysdb->query("select to_char(now(),'YYYY-MM-DD HH24:MI:SS') as newts;"); - my $staffsql = "select id,prename,surname,istimetrackenabled,isdeleted from ".$ttcfg->{syncschema}.".staff"; - if (exists($ttcfg->{lastsyncdown}) && ($ttcfg->{lastsyncdown} =~ /\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d/)){ - $staffsql .= " where modified > to_timestamp('".$ttcfg->{lastsyncdown}."','YYYY-MM-DD HH24:MI:SS')"; - } - $staffsql .= ";"; - my $st = $sysdb->querysorted($staffsql); - foreach my $s (keys(%{$st})){ - my $ttsql = "REPLACE INTO staff (id,prename,surname,isdisabled,isdeleted) VALUES (".$sysdb->value($st->{$s}->{id}).",".$sysdb->value($st->{$s}->{prename}).",".$sysdb->value($st->{$s}->{surname}).",".(($st->{$s}->{istimetrackenabled} eq "1")?'null':"'1'").",".$sysdb->value($st->{$s}->{isdeleted}).");"; - - my $cmd = 'sqlite3 "'.$ttcfg->{datapath}.'/'.$ttcfg->{dbfile}.'" "'.$ttsql.'"'; - $cfgdata->writelog("ssh","syncdown","sql",$cmd); - #print $cmd."\n"; - my $out = $ttssh->piperemote($cmd); - } - #print "New TS: ".$newts->{newts}."\n"; - my $replts = "sed -i 's/^lastsyncdown=.*/lastsyncdown=".$newts->{newts}."/' ".$ttcfgfile; - my $out = `$replts`; - if ($out ne ""){ - $cfgdata->writelog("config","sed","errror","error writing timetamp to config ".$timetracker.".conf!".$out); - } - #print "newcfg\n"; - #print $out."\n"; -} else { - $cfgdata->writelog("script","params","start","no System DB or schema found!"); - print "no System DB or schema found!\n"; - exit(2); -} -# if (($system eq "") || (! -e $cfgpath.'/'.$system.'.conf')){ -# $cfgdata->writelog("script","params","start","no system in params!"); -# print "no system\n"; -# exit(3); -# } - -#$sysdb-> -#if (! -e $cfg->{datapath}.'/'.$cfg->{dbfile}){ -# print "no database ".$cfg->{datapath}.'/'.$cfg->{dbfile}." found!\n"; -# exit(1); -#} - -#my $jdata = &readdatafile(); -#my $db = DB::SQLite->new({dbfile => $cfg->{datapath}.'/'.$cfg->{dbfile}}); -#my @k = keys(%{$jdata->{result}}); -#foreach my $fn (keys(%{$jdata->{result}})){ -# foreach my $j (keys(%{$jdata->{$fn}->{data}})){ -# my $data = $jdata->{result}->{$fn}->{$j}; - #print Dumper($user); -# if ($fn eq "getusers"){ -# my $sql = "REPLACE INTO staff (id,prename,surname,isdisabled,isdeleted) VALUES (".$db->value($data->{id}).",".$db->value($data->{prename}).",".$db->value($data->{surname}).",".(($data->{istimetrackenabled} eq "1")?'null':"'1'").",".$db->value($data->{isdeleted}).");"; -# print $sql."\n"; -# $db->exec($sql); -# } elsif ($fn eq "getpotdata"){ -# my $sql = "REPLACE INTO staffworktimes (id,id_staff,starttime1,endtime1,starttime2,endtime2) VALUES (".$db->value($data->{id}).",".$db->value($data->{id_staff}).",".$db->value($data->{timestart1}).",".$db->value($data->{timeend1}).",".$db->value($data->{timestart2}).",".$db->value($data->{timeend2}).");"; -# print $sql."\n"; -# $db->exec($sql); -# } - -# } -#} - -#unlink($datafile); - - - - - diff --git a/server/bin/htx_syncup.pl b/server/bin/htx_syncup.pl deleted file mode 100644 index e0da78f..0000000 --- a/server/bin/htx_syncup.pl +++ /dev/null @@ -1,126 +0,0 @@ -#!/usr/bin/env perl -use strict; -use Getopt::Long; -use Data::Dumper; -use File::Basename; -use FindBin qw($RealBin); -use JSON::PP; -use lib (dirname($RealBin).'/lib'); -use DB::PgSQL; -use ConfigFile; -use SSH; -use POSIX qw/strftime/; -# check if running -#print "PID:".$$."\n"; -my $cmd = 'ps ax | grep '.basename($0).' | grep -v "grep" | awk \'{ print $1 }\''; -my $cfgpath = dirname($RealBin).'/conf'; -my $logpath = dirname($RealBin).'/log'; -my $cfgdata = ConfigFile->new({logfile => $logpath.'/'.strftime('%Y-%m-%d',localtime()).'.log'}); -#print $cmd."\n"; -my $isrunning = `$cmd`; -chomp($isrunning); -#print "Result:".$isrunning."\n"; -if ($isrunning ne "$$"){ - $cfgdata->writelog("script","params","start","script already running on PID:$$!"); - print basename($0)." already runs!\n"; - exit(1); -} - - - -my $timetracker = ""; -my $system = ""; -GetOptions( "timetracker|t=s" => \$timetracker); - - -if (($timetracker eq "") || (! -e $cfgpath.'/'.$timetracker.'.conf')){ - $cfgdata->writelog("script","params","start","no timetracker in params!"); - print "no timetracker!\n"; - exit(2); -} -my $ttcfgfile = dirname($RealBin).'/conf/'.$timetracker.'.conf'; -my $ttcfg = $cfgdata->read_conf($ttcfgfile); -#print Dumper($ttcfg); -if (exists($ttcfg->{syncdb}) && exists($ttcfg->{syncschema}) && ($ttcfg->{syncdb} ne "") && ($ttcfg->{syncschema} ne "") && -f $cfgpath.'/'.$ttcfg->{syncdb}.'.conf'){ - my $ttssh = SSH->new({host => $ttcfg->{sshhost},opts => {user => $ttcfg->{sshuser}, password => $ttcfg->{sshpwd}, port => $ttcfg->{sshport}, strict_mode => 0}}); - my $syscfgfile = dirname($RealBin).'/conf/'.$ttcfg->{syncdb}.'.conf'; - my $syscfg = $cfgdata->read_conf($syscfgfile); - #print Dumper($syscfg); - my $sysdb = DB::PgSQL->new({dbname => $syscfg->{dbname},dbhost => $syscfg->{dbhost},dbuser=>$syscfg->{dbuser}, dbpasswd => $syscfg->{dbpasswd}}); - my $newts = $sysdb->query("select to_char(now(),'YYYY-MM-DD HH24:MI:SS') as newts;"); - my $ttsql = "select id,id_staff,stamp_in,stamp_out from timetracks "; - if (exists($ttcfg->{lastsyncup}) && ($ttcfg->{lastsyncup} =~ /\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d/)){ - $ttsql .= " where stamp_in >= '".$ttcfg->{lastsyncup}."' or stamp_out >= '".$ttcfg->{lastsyncup}."'"; - } - $ttsql .= ";"; - my $cmd = 'sqlite3 "'.$ttcfg->{datapath}.'/'.$ttcfg->{dbfile}.'" "'.$ttsql.'"'; - - $cfgdata->writelog("ssh","syncup","sqlite",$cmd); - my $out = $ttssh->piperemote($cmd); - #print $out; - my @ttdata = split("\n",$out); - #print Dumper(@ttdata); - foreach my $tt (@ttdata){ - #print $tt."\n"; - chomp($tt); - my @cols = split(/\|/,$tt); - #print Dumper(@cols); - my $sysrowsql = "INSERT INTO ".$ttcfg->{syncschema}.".timetracker (id,id_staff,daydate,stamp_in) VALUES ('".$cols[0]."','".$cols[1]."',date('".substr($cols[2],0,10)."'),'".$cols[2]."') on conflict on constraint timetracker_pkey do nothing;"; - if ($cols[3] ne ""){ - $sysrowsql .= "UPDATE ".$ttcfg->{syncschema}.".timetracker set stamp_out='".$cols[3]."' where stamp_out is null and id='".$cols[0]."';"; - } - #print $sysrowsql."\n--\n"; - $cfgdata->writelog("pot","syncup","sql",$sysrowsql); - my $st = $sysdb->exec($sysrowsql); - } - print "New TS: ".$newts->{newts}."\n"; - # - my $replts = "sed -i 's/^lastsyncup=.*/lastsyncup=".$newts->{newts}."/' ".$ttcfgfile; - $out = `$replts`; - if ($out ne ""){ - $cfgdata->writelog("config","sed","errror","error writing timetamp to config ".$timetracker.".conf!".$out); - } - -} else { - $cfgdata->writelog("script","params","start","no System DB or schema found!"); - print "no System DB or schema found!\n"; - exit(2); -} -# if (($system eq "") || (! -e $cfgpath.'/'.$system.'.conf')){ -# $cfgdata->writelog("script","params","start","no system in params!"); -# print "no system\n"; -# exit(3); -# } - -#$sysdb-> -#if (! -e $cfg->{datapath}.'/'.$cfg->{dbfile}){ -# print "no database ".$cfg->{datapath}.'/'.$cfg->{dbfile}." found!\n"; -# exit(1); -#} - -#my $jdata = &readdatafile(); -#my $db = DB::SQLite->new({dbfile => $cfg->{datapath}.'/'.$cfg->{dbfile}}); -#my @k = keys(%{$jdata->{result}}); -#foreach my $fn (keys(%{$jdata->{result}})){ -# foreach my $j (keys(%{$jdata->{$fn}->{data}})){ -# my $data = $jdata->{result}->{$fn}->{$j}; - #print Dumper($user); -# if ($fn eq "getusers"){ -# my $sql = "REPLACE INTO staff (id,prename,surname,isdisabled,isdeleted) VALUES (".$db->value($data->{id}).",".$db->value($data->{prename}).",".$db->value($data->{surname}).",".(($data->{istimetrackenabled} eq "1")?'null':"'1'").",".$db->value($data->{isdeleted}).");"; -# print $sql."\n"; -# $db->exec($sql); -# } elsif ($fn eq "getpotdata"){ -# my $sql = "REPLACE INTO staffworktimes (id,id_staff,starttime1,endtime1,starttime2,endtime2) VALUES (".$db->value($data->{id}).",".$db->value($data->{id_staff}).",".$db->value($data->{timestart1}).",".$db->value($data->{timeend1}).",".$db->value($data->{timestart2}).",".$db->value($data->{timeend2}).");"; -# print $sql."\n"; -# $db->exec($sql); -# } - -# } -#} - -#unlink($datafile); - - - - - diff --git a/server/bin/set_crontab.sh b/server/bin/set_crontab.sh deleted file mode 100644 index 17d333a..0000000 --- a/server/bin/set_crontab.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash -crontab -e -#>>HOME=/ho:wme/posdab -#>>LOGNAME=posdab -#>>PATH=/home/posdab/bin:/sbin:/usr/sbin:/usr/local/sbin:/usr/local/bin:/usr/bin:/bin -#>>SHELL=/bin/bash -#>>5 * * * * /home/posdab/pot/bin/syncpot.sh \ No newline at end of file diff --git a/server/bin/syncpot.sh b/server/bin/syncpot.sh deleted file mode 100644 index eb32549..0000000 --- a/server/bin/syncpot.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash -PERLBINARY="/home/posdab/perl5/perlbrew/perls/perl-5.28.2/bin/perl" -${PERLBINARY} /home/posdab/pot/bin/htx_syncup.pl -t elch -${PERLBINARY} /home/posdab/pot/bin/htx_syncdown.pl -t elch diff --git a/server/conf/elch.conf b/server/conf/elch.conf deleted file mode 100644 index 4ee6ec4..0000000 --- a/server/conf/elch.conf +++ /dev/null @@ -1,17 +0,0 @@ -datapath=/home/dks/.hourtrax -dbfile=hourtrax.sqlite -#mode=deployment -#mode=development -sshuser=dks -sshpwd=sai4seip -sshhost=172.16.10.154 -#synctype=ssh -sshport=3587 -syncschema=elch -syncdb=pot -#dbuser=potlu2_user -#dbpasswd=dMY8xGB6cBLzrDGE -#dbhost=sql12.your-server.de -#dbname=potlu2_db -lastsyncup= -lastsyncdown= diff --git a/server/conf/pot.conf b/server/conf/pot.conf deleted file mode 100644 index b90a85c..0000000 --- a/server/conf/pot.conf +++ /dev/null @@ -1,13 +0,0 @@ -#datapath=/home/dks/.hourtrax -#dbfile=hourtrax.sqlite -#pwdfile=auth.passwd -#mode=deployment -mode=development -dbuser=potlu2_user -dbpasswd=dMY8xGB6cBLzrDGE -dbhost=sql12.your-server.de -dbname=potlu2_db -#potuser=ksaffran@dks.lu -#potpwd=ntHesDUDWeQVs -#potschema=portanova -#poturl=http://app.pot.lan diff --git a/server/lib/ConfigFile.pm b/server/lib/ConfigFile.pm deleted file mode 100644 index ae7a6f7..0000000 --- a/server/lib/ConfigFile.pm +++ /dev/null @@ -1,57 +0,0 @@ -package ConfigFile; - -use strict; -use JSON::PP; -use POSIX qw/strftime/; -sub new { - my $class = shift; - my $p = shift; - my $self = bless {}, $class; - $self->{logfile} = $p->{logfile}; - return $self; -} - -sub read_conf(){ - my $self = shift; - my $cfile = shift; - my $retcfg = (); - open(CFG,$cfile); - while (my $l = ){ - chomp($l); - $l =~ s/^\s+//; - $l =~ s/\s+$//; - if (($l eq "") || ($l =~ /^#/) || ($l =~ /^;/)){next;} - my ($k,$v) = $l =~ m/(\w+)\s*=\s*(.*)$/; - $retcfg->{lc($k)} = $v; - } - close(CFG); - return $retcfg; -} - -sub read_json(){ - my $self = shift; - my $jfile = shift; - my $strdata = ""; - open(CFG,$jfile); - while (my $l = ){ - chomp($l); - $strdata .= $l; - } - close(CFG); - return JSON::PP::decode_json($strdata); -} - -sub writelog(){ - my $self = shift; - my $type = shift; - my $system = shift; - my $action = shift; - my $msg = shift; - $msg =~ s/\r//g; - $msg =~ s/\n//g; - open(LOG,">>".$self->{logfile}); - print LOG strftime('%Y-%m-%d %H:%M:%S',localtime()).";".$type.";".$system.";".$action.";".$msg."\n"; - close(LOG); -} - -1; \ No newline at end of file diff --git a/server/lib/DB/PgSQL.pm b/server/lib/DB/PgSQL.pm deleted file mode 100644 index 5971e5b..0000000 --- a/server/lib/DB/PgSQL.pm +++ /dev/null @@ -1,349 +0,0 @@ -package DB::PgSQL; - -use strict; -use DBI; -use File::Basename; -use DBD::PgPP; -use URI::Encode qw(uri_encode uri_decode); -use Encode; -use Data::Dumper; -use Text::Unidecode; - - -sub new { - my $class = shift; - my $p = shift; - my $self = bless {}, $class; - $self->{debug} = 1; - $self->{dbh} = DBI->connect("DBI:PgPP:dbname=".$p->{dbname}.":host=".$p->{dbhost},$p->{dbuser},$p->{dbpasswd},{PrintError=>1,RaiseError=>1,AutoCommit=>1}) or return "query Connection Error!".$!; - return $self; -} - -sub disconnect(){ - my $self = shift; - return $self->{dbh}->disconnect(); -} - -sub securetext(){ - my $self = shift; - my $text = shift; - $text =~ s/'/''/g; - return $text; -} - -sub value(){ - my $self = shift; - my $text = shift; - if ($text eq ""){ - return 'null'; - } - return "'".$text."'"; -} - -sub logerror(){ - my $self = shift; - my $fn = shift; - my $stat = shift; - - return (); -} - -sub newuuid(){ - my $self = shift; - my $rx = $self->query("SELECT uuid_in(md5(random()::text || clock_timestamp()::text)::cstring) as id;"); - return $rx->{id}; -} - -sub query_unenc(){ - my $self = shift; - my $stat = shift; - - my $retdata = (); - $stat = encode("utf8", $stat); - if ($self->{debug} == 1){ - print STDERR "QUERY_UNENC:\n".$stat."\n===\n"; - } - my $sth = $self->{dbh}->prepare($stat) or return $self->logerror("query_unenc",$stat); - - - $sth->execute() or return $self->logerror("query_unenc",$stat); - - my $data = $sth->fetchrow_hashref(); - foreach my $k (keys %{$data}){ - $retdata->{$k} = $data->{$k};#decode("utf-8",$data->{$k}); - } - - $sth->finish(); - - return $retdata; -} - -sub query(){ - my $self = shift; - my $stat = shift; - my $retdata = (); - $stat = encode("utf8", $stat); - if ($self->{debug} == 1){ - print STDERR "QUERY:\n".$stat."\n===\n"; - } - my $sth = $self->{dbh}->prepare($stat) or return $self->logerror("query",$stat); - - $sth->execute() or return $self->logerror("query",$stat); - - my $data = $sth->fetchrow_hashref(); - foreach my $k (keys %{$data}){ - $retdata->{$k} = decode("utf-8",$data->{$k}); - } - - $sth->finish(); - - return $retdata; -} - -sub querybykey(){ - my $self = shift; - my $key = shift; - my $stat = shift; - my $retdata =(); - if ($self->{debug} == 1){ - print STDERR "QUERYBYKEY:\n".$stat."\n===\n"; - } - my $sth = $self->{dbh}->prepare($stat) or return $self->logerror("querybykey",$stat); - $sth->execute() or return $self->logerror("querybykey",$stat); - while(my $data = $sth->fetchrow_hashref()) - { - if (exists $data->{$key}){ - foreach my $k (keys %{$data}){ - $retdata->{$data->{$key}}{$k} =decode("utf-8",$data->{$k}); - } - } - } - if (keys(%{$retdata}) == 0){ - $retdata =(); - } - $sth->finish(); - return $retdata; -} - -sub querysorted(){ - my $self = shift; - my $stat = shift; - my $retdata = (); - if ($stat !~ /sessions/){ - if ($self->{debug} == 1){ - print STDERR "QUERYSORTED:\n".$stat."\n===\n"; - } - } - my $sth = $self->{dbh}->prepare($stat) or return $self->logerror("querysorted",$stat); - $sth->execute() or return $self->logerror("querysorted",$stat); - my $count = 0; - while(my $data = $sth->fetchrow_hashref()){ - foreach my $k (keys %{$data}){ - if ($data->{$k} =~ /^{.*}$/){ - $retdata->{$count}->{$k} = JSON::PP::decode_json($data->{$k}); - } else { - $retdata->{$count}->{$k} = decode("utf-8",$data->{$k}); - } - } - $count++; - } - $sth->finish(); - return $retdata; -} - -sub exec(){ - my $self = shift; - my $stat = shift; - my $retdata; - $stat = encode("UTF-8", $stat); - if ($self->{debug} == 1){ - print STDERR "EXEC:\n".$stat."\n===\n"; - } - my $sth = $self->{dbh}->prepare($stat) or return $self->logerror("exec",$stat); - $retdata->{success} = $self->{dbh}->do($stat) or return $self->logerror("exec",$stat); - return $retdata; -} - -sub queryarray(){ - my $self = shift; - my $stat = shift; - my @retdata = (); - my $res = $self->querysorted($stat); - foreach my $r (sort {$a <=> $b} keys(%{$res})){ - push(@retdata,$res->{$r}); - } - 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_/) && ($f !~ /\_id$/)){ -# my $t = substr($f,0,index($f,"_")); -# my $c = substr($f,length($t)+1); -# $fields->{$t}->{$c} = $data->{$f}; -# } elsif ($f =~ /^ident_/){ -# my $f2 = $f; -# $f2 =~ s/^ident_//; - -# my $t = substr($f2,0,index($f2,"_")); -# my $c = substr($f2,length($t)+1); -# if ($c ne "id"){ -# $fields->{$t}->{$c} = $data->{$f}; -# } -# } - -# } -# 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 ".$tb." (".join(",",@sqlcol).") VALUES (".join(",",@sqlval).") returning id;"); -# } -# return @ddl; -# } - - -# sub create_ddl_update(){ -# my $self = shift; -# my $data = shift; -# my $fields = (); -# my @ddl = (); -# foreach my $f (keys(%{$data})){ -# if ($f =~ /^ident_/){ -# my $fx = substr($f,6); -# my $t = substr($fx,0,index($fx,"_")); -# my $c = substr($fx,length($t)+1); -# $fields->{$t}->{cond}->{$c} = $data->{$f}; -# } elsif ( ($f !~ /^ident/) && ($f =~ /.+\_.+/) ){ -# my $t = substr($f,0,index($f,"_")); -# my $c = substr($f,length($t)+1); -# $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 ".$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); -# $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).";"); -# } -# return @ddl; -# } - -# sub create_ddl_delete(){ -# my $self = shift; -# my $data = shift; -# my $fields = (); -# my @ddl = (); -# my @refcols = (); -# my $refdata = (); -# foreach my $f (keys(%{$data})){ -# if ($f =~ /^ident_/){ -# my ($t,$c) = $f =~ m/ident_(.+)\_(.+)/; - -# $fields->{$t}->{cond}->{$c} = $data->{$f}; -# push(@refcols,"'".$c.'_'.$t."'"); -# $refdata->{$c.'_'.$t} = $data->{$f}; -# } -# } -# foreach my $tb (keys(%{$fields})){ -# my @sqlcond = (); -# foreach my $c (keys(%{$fields->{$tb}->{cond}})){ -# my $v = $fields->{$tb}->{cond}->{$c}; -# $v =~ s/'/''/g; -# push (@sqlcond,$c."='".$v."'"); -# } -# push(@ddl,"DELETE FROM ".$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/server/lib/DB/SQLite.pm b/server/lib/DB/SQLite.pm deleted file mode 100644 index b76e4b7..0000000 --- a/server/lib/DB/SQLite.pm +++ /dev/null @@ -1,349 +0,0 @@ -package DB::SQLite; - -use strict; -use DBI; -use File::Basename; -use DBD::SQLite; -use URI::Encode qw(uri_encode uri_decode); -use Encode; -use Data::Dumper; -use Text::Unidecode; - - -sub new { - my $class = shift; - my $p = shift; - my $self = bless {}, $class; - $self->{debug} = 1; - $self->{dbh} = DBI->connect("DBI:SQLite:dbname=".$p->{dbfile},'','',{PrintError=>1,RaiseError=>1,AutoCommit=>1}) or return "query Connection Error!".$!; - return $self; -} - -sub disconnect(){ - my $self = shift; - return $self->{dbh}->disconnect(); -} - -sub securetext(){ - my $self = shift; - my $text = shift; - $text =~ s/'/''/g; - return $text; -} - -sub value(){ - my $self = shift; - my $text = shift; - if ($text eq ""){ - return 'null'; - } - return "'".$text."'"; -} - -sub logerror(){ - my $self = shift; - my $fn = shift; - my $stat = shift; - - return (); -} - -sub newuuid(){ - my $self = shift; - my $rx = $self->query("SELECT lower(hex( randomblob(4)) || '-' || hex( randomblob(2)) || '-' || hex( randomblob(2)) || '-' || hex( randomblob(2)) || '-' || hex(randomblob(6))) as id;"); - return $rx->{id}; -} - -sub query_unenc(){ - my $self = shift; - my $stat = shift; - - my $retdata = (); - $stat = encode("utf8", $stat); - if ($self->{debug} == 1){ - print STDERR "QUERY_UNENC:\n".$stat."\n===\n"; - } - my $sth = $self->{dbh}->prepare($stat) or return $self->logerror("query_unenc",$stat); - - - $sth->execute() or return $self->logerror("query_unenc",$stat); - - my $data = $sth->fetchrow_hashref(); - foreach my $k (keys %{$data}){ - $retdata->{$k} = $data->{$k};#decode("utf-8",$data->{$k}); - } - - $sth->finish(); - - return $retdata; -} - -sub query(){ - my $self = shift; - my $stat = shift; - my $retdata = (); - $stat = encode("utf8", $stat); - if ($self->{debug} == 1){ - print STDERR "QUERY:\n".$stat."\n===\n"; - } - my $sth = $self->{dbh}->prepare($stat) or return $self->logerror("query",$stat); - - $sth->execute() or return $self->logerror("query",$stat); - - my $data = $sth->fetchrow_hashref(); - foreach my $k (keys %{$data}){ - $retdata->{$k} = decode("utf-8",$data->{$k}); - } - - $sth->finish(); - - return $retdata; -} - -sub querybykey(){ - my $self = shift; - my $key = shift; - my $stat = shift; - my $retdata =(); - if ($self->{debug} == 1){ - print STDERR "QUERYBYKEY:\n".$stat."\n===\n"; - } - my $sth = $self->{dbh}->prepare($stat) or return $self->logerror("querybykey",$stat); - $sth->execute() or return $self->logerror("querybykey",$stat); - while(my $data = $sth->fetchrow_hashref()) - { - if (exists $data->{$key}){ - foreach my $k (keys %{$data}){ - $retdata->{$data->{$key}}{$k} =decode("utf-8",$data->{$k}); - } - } - } - if (keys(%{$retdata}) == 0){ - $retdata =(); - } - $sth->finish(); - return $retdata; -} - -sub querysorted(){ - my $self = shift; - my $stat = shift; - my $retdata = (); - if ($stat !~ /sessions/){ - if ($self->{debug} == 1){ - print STDERR "QUERYSORTED:\n".$stat."\n===\n"; - } - } - my $sth = $self->{dbh}->prepare($stat) or return $self->logerror("querysorted",$stat); - $sth->execute() or return $self->logerror("querysorted",$stat); - my $count = 0; - while(my $data = $sth->fetchrow_hashref()){ - foreach my $k (keys %{$data}){ - if ($data->{$k} =~ /^{.*}$/){ - $retdata->{$count}->{$k} = JSON::PP::decode_json($data->{$k}); - } else { - $retdata->{$count}->{$k} = decode("utf-8",$data->{$k}); - } - } - $count++; - } - $sth->finish(); - return $retdata; -} - -sub exec(){ - my $self = shift; - my $stat = shift; - my $retdata; - $stat = encode("UTF-8", $stat); - if ($self->{debug} == 1){ - print STDERR "EXEC:\n".$stat."\n===\n"; - } - my $sth = $self->{dbh}->prepare($stat) or return $self->logerror("exec",$stat); - $retdata->{success} = $self->{dbh}->do($stat) or return $self->logerror("exec",$stat); - return $retdata; -} - -sub queryarray(){ - my $self = shift; - my $stat = shift; - my @retdata = (); - my $res = $self->querysorted($stat); - foreach my $r (sort {$a <=> $b} keys(%{$res})){ - push(@retdata,$res->{$r}); - } - 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_/) && ($f !~ /\_id$/)){ - my $t = substr($f,0,index($f,"_")); - my $c = substr($f,length($t)+1); - $fields->{$t}->{$c} = $data->{$f}; - } elsif ($f =~ /^ident_/){ - my $f2 = $f; - $f2 =~ s/^ident_//; - - my $t = substr($f2,0,index($f2,"_")); - my $c = substr($f2,length($t)+1); - if ($c ne "id"){ - $fields->{$t}->{$c} = $data->{$f}; - } - } - - } - 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 ".$tb." (".join(",",@sqlcol).") VALUES (".join(",",@sqlval).") returning id;"); - } - return @ddl; -} - - -sub create_ddl_update(){ - my $self = shift; - my $data = shift; - my $fields = (); - my @ddl = (); - foreach my $f (keys(%{$data})){ - if ($f =~ /^ident_/){ - my $fx = substr($f,6); - my $t = substr($fx,0,index($fx,"_")); - my $c = substr($fx,length($t)+1); - $fields->{$t}->{cond}->{$c} = $data->{$f}; - } elsif ( ($f !~ /^ident/) && ($f =~ /.+\_.+/) ){ - my $t = substr($f,0,index($f,"_")); - my $c = substr($f,length($t)+1); - $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 ".$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); - $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).";"); - } - return @ddl; -} - -sub create_ddl_delete(){ - my $self = shift; - my $data = shift; - my $fields = (); - my @ddl = (); - my @refcols = (); - my $refdata = (); - foreach my $f (keys(%{$data})){ - if ($f =~ /^ident_/){ - my ($t,$c) = $f =~ m/ident_(.+)\_(.+)/; - - $fields->{$t}->{cond}->{$c} = $data->{$f}; - push(@refcols,"'".$c.'_'.$t."'"); - $refdata->{$c.'_'.$t} = $data->{$f}; - } - } - foreach my $tb (keys(%{$fields})){ - my @sqlcond = (); - foreach my $c (keys(%{$fields->{$tb}->{cond}})){ - my $v = $fields->{$tb}->{cond}->{$c}; - $v =~ s/'/''/g; - push (@sqlcond,$c."='".$v."'"); - } - push(@ddl,"DELETE FROM ".$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/server/lib/SSH.pm b/server/lib/SSH.pm deleted file mode 100644 index d23bedb..0000000 --- a/server/lib/SSH.pm +++ /dev/null @@ -1,61 +0,0 @@ -package SSH; - -use strict; -use Net::OpenSSH; -use Data::Dumper; -sub new { - my $class = shift; - my $p = shift; - my $self = bless {}, $class; - $self->{opts} = $p->{opts}; - $self->{host} = $p->{host}; - return $self; -} - -sub execremote(){ - my $self = shift; - my $cmd = shift; - print $cmd."\n"; - #my $stx = 0; - my $ssh = Net::OpenSSH->new($self->{host},%{$self->{opts}}); - if ($ssh->error){ - print "Couldn't establish SSH connection: ". $ssh->error; - return 1; - } - my $stx =$ssh->system($cmd); - #returns true (1) on success - if ($stx == 1){ - $stx = 0; - } - if ($ssh->error){ - print "remote cmd failed!". $ssh->error; - return 1; - } - return $stx; -} - -sub piperemote(){ - my $self = shift; - my $cmd = shift; - $cmd =~ s/"/\\\"/g; - my $sshcmd = 'ssh -p '.$self->{opts}->{port}.' '.$self->{opts}->{user}.'@'.$self->{host}.' "'.$cmd.'"'; - #print $sshcmd."\n--\n"; - #print "\n---\n".$sshcmd."\n---\n"; - my $out = `$sshcmd`; -# print "pipe cmd:".$cmd." - to:".$self->{host}."-".Dumper($self->{opts})."\n"; -# my $ssh = Net::OpenSSH->new($self->{host},%{$self->{opts}}); -# if ($ssh->error){ -# print "Couldn't establish SSH connection: ". $ssh->error; -# return 1; -# } -# #print $cmd."\n"; -# my $out = $ssh->capture($cmd); -# if ($ssh->error){ -# print "remote cmd failed!". $ssh->error; -# return $out; -# } - #print $out; - return $out; -} - -1; diff --git a/server/log/2020-10-27.log b/server/log/2020-10-27.log deleted file mode 100644 index 7af8ed6..0000000 --- a/server/log/2020-10-27.log +++ /dev/null @@ -1,250 +0,0 @@ -2020-10-27 15:14:15;ssh;syncdown;sql;sqlite3 "/home/dks/.hourtrax/hourtrax.sqlite" "REPLACE INTO staff (id,prename,surname,isdisabled,isdeleted) VALUES ('fd53d0a2-4c2b-2975-039b-4d5f969c3d81','Florian','Goffaux','1','1');" -2020-10-27 15:14:17;ssh;syncdown;sql;sqlite3 "/home/dks/.hourtrax/hourtrax.sqlite" "REPLACE INTO staff (id,prename,surname,isdisabled,isdeleted) VALUES ('89d34f7f-73d1-649e-69c9-264bdd55aaf8','Emel','Gokdag','1','1');" -2020-10-27 15:14:18;ssh;syncdown;sql;sqlite3 "/home/dks/.hourtrax/hourtrax.sqlite" "REPLACE INTO staff (id,prename,surname,isdisabled,isdeleted) VALUES ('b18d96e8-22cb-9fcd-9f29-18d1ddd0369b','Angélique','Vacossin',null,null);" -2020-10-27 15:14:20;ssh;syncdown;sql;sqlite3 "/home/dks/.hourtrax/hourtrax.sqlite" "REPLACE INTO staff (id,prename,surname,isdisabled,isdeleted) VALUES ('4a3bb07c-f2aa-7fee-db90-de10fafc2d03','Valentin','Perrot',null,null);" -2020-10-27 15:14:21;ssh;syncdown;sql;sqlite3 "/home/dks/.hourtrax/hourtrax.sqlite" "REPLACE INTO staff (id,prename,surname,isdisabled,isdeleted) VALUES ('793c634b-6c76-2fc6-6023-ef603c84ae60','Glenn','Kaufmann',null,null);" -2020-10-27 15:14:22;ssh;syncdown;sql;sqlite3 "/home/dks/.hourtrax/hourtrax.sqlite" "REPLACE INTO staff (id,prename,surname,isdisabled,isdeleted) VALUES ('fc492a95-b13b-d370-a24f-82646bf3503c','Crisanto','Da Cruz Monteiro',null,null);" -2020-10-27 15:14:24;ssh;syncdown;sql;sqlite3 "/home/dks/.hourtrax/hourtrax.sqlite" "REPLACE INTO staff (id,prename,surname,isdisabled,isdeleted) VALUES ('5636e97e-35a2-22f1-61f3-fa2ca5bef7e4','Ly Lï','Oge','1','1');" -2020-10-27 15:14:25;ssh;syncdown;sql;sqlite3 "/home/dks/.hourtrax/hourtrax.sqlite" "REPLACE INTO staff (id,prename,surname,isdisabled,isdeleted) VALUES ('898e3640-fc28-8ec7-6452-396503c43aed','Emel','Gokdag','1',null);" -2020-10-27 15:14:25;ssh;syncdown;sql;sqlite3 "/home/dks/.hourtrax/hourtrax.sqlite" "REPLACE INTO staff (id,prename,surname,isdisabled,isdeleted) VALUES ('98a436fc-e276-555e-8b19-992a16f71831','Marianne','Lambion','1',null);" -2020-10-27 15:14:26;ssh;syncdown;sql;sqlite3 "/home/dks/.hourtrax/hourtrax.sqlite" "REPLACE INTO staff (id,prename,surname,isdisabled,isdeleted) VALUES ('62603801-4585-1d21-9663-def6191e3807','Francelino','Medina',null,null);" -2020-10-27 15:14:28;ssh;syncdown;sql;sqlite3 "/home/dks/.hourtrax/hourtrax.sqlite" "REPLACE INTO staff (id,prename,surname,isdisabled,isdeleted) VALUES ('16f81139-2f79-537c-e9ab-64fc12dcb2bf','Jon','Morais','1',null);" -2020-10-27 15:14:29;ssh;syncdown;sql;sqlite3 "/home/dks/.hourtrax/hourtrax.sqlite" "REPLACE INTO staff (id,prename,surname,isdisabled,isdeleted) VALUES ('4b858c8a-eb14-931c-9178-76c8ab37acd6','Romain','Serrier',null,null);" -2020-10-27 15:14:29;ssh;syncdown;sql;sqlite3 "/home/dks/.hourtrax/hourtrax.sqlite" "REPLACE INTO staff (id,prename,surname,isdisabled,isdeleted) VALUES ('0c225221-d971-018f-5a31-86385d1a126a','Emily','BIGNONE',null,null);" -2020-10-27 15:14:30;ssh;syncdown;sql;sqlite3 "/home/dks/.hourtrax/hourtrax.sqlite" "REPLACE INTO staff (id,prename,surname,isdisabled,isdeleted) VALUES ('d801946e-fe6b-7baa-3089-7b86160071b1','Julie','Christophe','1','1');" -2020-10-27 15:14:31;ssh;syncdown;sql;sqlite3 "/home/dks/.hourtrax/hourtrax.sqlite" "REPLACE INTO staff (id,prename,surname,isdisabled,isdeleted) VALUES ('a980da32-754c-54e9-cb25-d7f8ac293e74','Kevin','Wafflart','1','1');" -2020-10-27 15:14:33;ssh;syncdown;sql;sqlite3 "/home/dks/.hourtrax/hourtrax.sqlite" "REPLACE INTO staff (id,prename,surname,isdisabled,isdeleted) VALUES ('23b3d6dc-03a6-b938-653f-8f95a6fb3254','Danièle','Laterza','1','1');" -2020-10-27 15:14:36;ssh;syncdown;sql;sqlite3 "/home/dks/.hourtrax/hourtrax.sqlite" "REPLACE INTO staff (id,prename,surname,isdisabled,isdeleted) VALUES ('0d61b86d-c380-2d2b-7668-0a28236b881e','Roni','Da Costa Lima','1','1');" -2020-10-27 15:14:37;ssh;syncdown;sql;sqlite3 "/home/dks/.hourtrax/hourtrax.sqlite" "REPLACE INTO staff (id,prename,surname,isdisabled,isdeleted) VALUES ('ab9a5d20-3f3b-e50c-9059-723fcbc774e6','Henrique','Baptista Martins',null,null);" -2020-10-27 15:14:39;ssh;syncdown;sql;sqlite3 "/home/dks/.hourtrax/hourtrax.sqlite" "REPLACE INTO staff (id,prename,surname,isdisabled,isdeleted) VALUES ('999cbbff-3e6f-6964-0a7b-ede8bbb075eb','Ly li','Oge','1',null);" -2020-10-27 15:14:40;ssh;syncdown;sql;sqlite3 "/home/dks/.hourtrax/hourtrax.sqlite" "REPLACE INTO staff (id,prename,surname,isdisabled,isdeleted) VALUES ('bb9a70e4-8f1c-88f8-498d-877b9e066fe8','Kevin','Wafflart ','1',null);" -2020-10-27 15:14:42;ssh;syncdown;sql;sqlite3 "/home/dks/.hourtrax/hourtrax.sqlite" "REPLACE INTO staff (id,prename,surname,isdisabled,isdeleted) VALUES ('9aadd185-7b1d-f8f7-5d9b-2fca4931fe5e','Humberto','Lima Texeira Neves',null,null);" -2020-10-27 15:14:43;ssh;syncdown;sql;sqlite3 "/home/dks/.hourtrax/hourtrax.sqlite" "REPLACE INTO staff (id,prename,surname,isdisabled,isdeleted) VALUES ('157c0ba9-b566-4eea-638d-72180375b764','Emre','Pinarci',null,null);" -2020-10-27 15:14:44;ssh;syncdown;sql;sqlite3 "/home/dks/.hourtrax/hourtrax.sqlite" "REPLACE INTO staff (id,prename,surname,isdisabled,isdeleted) VALUES ('c8f1907b-d98c-a78c-bf19-befa94959f3f','Kelven','Frances Santos','1',null);" -2020-10-27 16:05:03;ssh;syncup;sqlite;sqlite3 "/home/dks/.hourtrax/hourtrax.sqlite" "select id,id_staff,stamp_in,stamp_out from timetracks ;" -2020-10-27 16:05:03;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,stamp_in) VALUES ('7','4','e') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='f' where stamp_out is null and id='7'; -2020-10-27 16:05:34;ssh;syncup;sqlite;sqlite3 "/home/dks/.hourtrax/hourtrax.sqlite" "select id,id_staff,stamp_in,stamp_out from timetracks ;" -2020-10-27 16:05:35;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,stamp_in) VALUES ('7','4','e') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='f' where stamp_out is null and id='7'; -2020-10-27 16:06:26;ssh;syncup;sqlite;sqlite3 "/home/dks/.hourtrax/hourtrax.sqlite" "select id,id_staff,stamp_in,stamp_out from timetracks ;" -2020-10-27 16:07:34;ssh;syncup;sqlite;sqlite3 "/home/dks/.hourtrax/hourtrax.sqlite" "select id,id_staff,stamp_in,stamp_out from timetracks ;" -2020-10-27 16:07:53;ssh;syncup;sqlite;sqlite3 "/home/dks/.hourtrax/hourtrax.sqlite" "select id,id_staff,stamp_in,stamp_out from timetracks ;" -2020-10-27 16:20:23;ssh;syncup;sqlite;sqlite3 "/home/dks/.hourtrax/hourtrax.sqlite" "select id,id_staff,stamp_in,stamp_out from timetracks ;" -2020-10-27 16:20:49;ssh;syncup;sqlite;sqlite3 "/home/dks/.hourtrax/hourtrax.sqlite" "select id,id_staff,stamp_in,stamp_out from timetracks ;" -2020-10-27 16:21:13;ssh;syncup;sqlite;sqlite3 "/home/dks/.hourtrax/hourtrax.sqlite" "select id,id_staff,stamp_in,stamp_out from timetracks ;" -2020-10-27 16:22:01;ssh;syncup;sqlite;sqlite3 "/home/dks/.hourtrax/hourtrax.sqlite" "select id,id_staff,stamp_in,stamp_out from timetracks ;" -2020-10-27 16:22:43;ssh;syncup;sqlite;sqlite3 "/home/dks/.hourtrax/hourtrax.sqlite" "select id,id_staff,stamp_in,stamp_out from timetracks where stamp_in >= '2020-10-27 16:22:01' or stamp_out >= '2020-10-27 16:22:01';" -2020-10-27 16:23:45;ssh;syncup;sqlite;sqlite3 "/home/dks/.hourtrax/hourtrax.sqlite" "select id,id_staff,stamp_in,stamp_out from timetracks where stamp_in >= '2020-10-27 16:22:43' or stamp_out >= '2020-10-27 16:22:43';" -2020-10-27 16:25:18;ssh;syncup;sqlite;sqlite3 "/home/dks/.hourtrax/hourtrax.sqlite" "select id,id_staff,stamp_in,stamp_out from timetracks ;" -2020-10-27 16:25:19;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,stamp_in) VALUES ('74e1f011-d908-8e54-38c6-318668373c8a','98a436fc-e276-555e-8b19-992a16f71831','2020-10-20 11:39:32') on conflict on constraint timetracker_pkey do nothing; -2020-10-27 16:25:19;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,stamp_in) VALUES ('de3b9a8b-a29b-fd9a-19e2-d903c0e790c9','4a3bb07c-f2aa-7fee-db90-de10fafc2d03','2020-10-20 12:02:43') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-20 15:30:43' where stamp_out is null and id='de3b9a8b-a29b-fd9a-19e2-d903c0e790c9'; -2020-10-27 16:25:19;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,stamp_in) VALUES ('892d94fb-1922-9e2e-41ff-2a1b20cc6303','62603801-4585-1d21-9663-def6191e3807','2020-10-20 14:21:44') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-20 14:21:58' where stamp_out is null and id='892d94fb-1922-9e2e-41ff-2a1b20cc6303'; -2020-10-27 16:25:19;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,stamp_in) VALUES ('60493c50-541c-273d-d13b-3286461dc8da','793c634b-6c76-2fc6-6023-ef603c84ae60','2020-10-20 14:23:07') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-20 14:23:17' where stamp_out is null and id='60493c50-541c-273d-d13b-3286461dc8da'; -2020-10-27 16:25:19;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,stamp_in) VALUES ('fd4fe4ff-8a22-7ace-ac32-2dc82148567e','b18d96e8-22cb-9fcd-9f29-18d1ddd0369b','2020-10-20 14:24:30') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-20 14:24:40' where stamp_out is null and id='fd4fe4ff-8a22-7ace-ac32-2dc82148567e'; -2020-10-27 16:25:19;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,stamp_in) VALUES ('b3ec955e-566a-b9ab-59cd-aee9ce015317','c8f1907b-d98c-a78c-bf19-befa94959f3f','2020-10-20 14:26:27') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-20 14:27:16' where stamp_out is null and id='b3ec955e-566a-b9ab-59cd-aee9ce015317'; -2020-10-27 16:25:19;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,stamp_in) VALUES ('2b95ec76-77de-8014-0a63-c3a6c79e0927','fc492a95-b13b-d370-a24f-82646bf3503c','2020-10-20 14:40:23') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-20 14:40:36' where stamp_out is null and id='2b95ec76-77de-8014-0a63-c3a6c79e0927'; -2020-10-27 16:25:19;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,stamp_in) VALUES ('53190bec-790b-f1ec-011e-8a2c65bcd598','9aadd185-7b1d-f8f7-5d9b-2fca4931fe5e','2020-10-20 14:41:46') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-20 14:41:58' where stamp_out is null and id='53190bec-790b-f1ec-011e-8a2c65bcd598'; -2020-10-27 16:25:19;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,stamp_in) VALUES ('011c370e-b392-4155-78d6-593c32361705','4b858c8a-eb14-931c-9178-76c8ab37acd6','2020-10-20 15:52:12') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-20 23:52:24' where stamp_out is null and id='011c370e-b392-4155-78d6-593c32361705'; -2020-10-27 16:25:19;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,stamp_in) VALUES ('36f50063-e8d8-fcb5-9bfc-88780e7381b3','9aadd185-7b1d-f8f7-5d9b-2fca4931fe5e','2020-10-20 17:42:44') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-20 22:05:23' where stamp_out is null and id='36f50063-e8d8-fcb5-9bfc-88780e7381b3'; -2020-10-27 16:25:19;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,stamp_in) VALUES ('939e5e68-1574-9cb7-324a-7e718b46ac3f','62603801-4585-1d21-9663-def6191e3807','2020-10-20 17:49:48') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-20 22:03:38' where stamp_out is null and id='939e5e68-1574-9cb7-324a-7e718b46ac3f'; -2020-10-27 16:25:19;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,stamp_in) VALUES ('5fbc1d68-599d-82d6-6aad-785cefca0b44','c8f1907b-d98c-a78c-bf19-befa94959f3f','2020-10-20 17:51:20') on conflict on constraint timetracker_pkey do nothing; -2020-10-27 16:25:19;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,stamp_in) VALUES ('8028d62c-518a-34a1-da7f-3c48ad9f26f8','4a3bb07c-f2aa-7fee-db90-de10fafc2d03','2020-10-20 18:57:49') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-20 23:44:24' where stamp_out is null and id='8028d62c-518a-34a1-da7f-3c48ad9f26f8'; -2020-10-27 16:25:19;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,stamp_in) VALUES ('44491b5b-0264-911f-3e2d-f15a45ec605b','9aadd185-7b1d-f8f7-5d9b-2fca4931fe5e','2020-10-21 09:38:19') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-21 14:44:04' where stamp_out is null and id='44491b5b-0264-911f-3e2d-f15a45ec605b'; -2020-10-27 16:25:19;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,stamp_in) VALUES ('c44dcba7-ff06-99ed-9c2d-4d9e23c6cd69','62603801-4585-1d21-9663-def6191e3807','2020-10-21 09:55:04') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-21 14:16:32' where stamp_out is null and id='c44dcba7-ff06-99ed-9c2d-4d9e23c6cd69'; -2020-10-27 16:25:19;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,stamp_in) VALUES ('09a0d776-1b63-9e85-67b7-ac6e146b7085','fc492a95-b13b-d370-a24f-82646bf3503c','2020-10-21 09:57:24') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-21 14:40:39' where stamp_out is null and id='09a0d776-1b63-9e85-67b7-ac6e146b7085'; -2020-10-27 16:25:19;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,stamp_in) VALUES ('11c2216d-1301-b411-9973-efe87d09da4f','b18d96e8-22cb-9fcd-9f29-18d1ddd0369b','2020-10-21 10:20:52') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-21 14:58:04' where stamp_out is null and id='11c2216d-1301-b411-9973-efe87d09da4f'; -2020-10-27 16:25:19;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,stamp_in) VALUES ('78431a8a-424d-bcc5-5f47-fa6306c0d780','793c634b-6c76-2fc6-6023-ef603c84ae60','2020-10-21 12:00:17') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-21 14:20:37' where stamp_out is null and id='78431a8a-424d-bcc5-5f47-fa6306c0d780'; -2020-10-27 16:25:19;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,stamp_in) VALUES ('ec03d58a-464a-4320-72e5-f18492ab35fa','4a3bb07c-f2aa-7fee-db90-de10fafc2d03','2020-10-21 12:04:42') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-21 15:49:19' where stamp_out is null and id='ec03d58a-464a-4320-72e5-f18492ab35fa'; -2020-10-27 16:25:19;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,stamp_in) VALUES ('ea75b8f3-0db9-da35-da98-ea3a50b851e9','98a436fc-e276-555e-8b19-992a16f71831','2020-10-21 13:54:01') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-21 13:54:12' where stamp_out is null and id='ea75b8f3-0db9-da35-da98-ea3a50b851e9'; -2020-10-27 16:25:19;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,stamp_in) VALUES ('617eda50-477f-27d0-746f-31f11cd569e3','4b858c8a-eb14-931c-9178-76c8ab37acd6','2020-10-21 16:01:02') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-22 00:12:30' where stamp_out is null and id='617eda50-477f-27d0-746f-31f11cd569e3'; -2020-10-27 16:25:19;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,stamp_in) VALUES ('dafaff52-2d8c-769c-5f22-c6e1e1150433','9aadd185-7b1d-f8f7-5d9b-2fca4931fe5e','2020-10-21 17:43:04') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-21 22:17:17' where stamp_out is null and id='dafaff52-2d8c-769c-5f22-c6e1e1150433'; -2020-10-27 16:25:19;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,stamp_in) VALUES ('b92e2214-04bd-c7ff-f6a3-80464a1e973d','b18d96e8-22cb-9fcd-9f29-18d1ddd0369b','2020-10-21 17:53:18') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-21 23:24:25' where stamp_out is null and id='b92e2214-04bd-c7ff-f6a3-80464a1e973d'; -2020-10-27 16:25:19;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,stamp_in) VALUES ('e6dbfb03-f6f3-110e-f134-5f4c0799bcd1','fc492a95-b13b-d370-a24f-82646bf3503c','2020-10-21 17:56:23') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-21 22:38:18' where stamp_out is null and id='e6dbfb03-f6f3-110e-f134-5f4c0799bcd1'; -2020-10-27 16:25:19;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,stamp_in) VALUES ('46dc5d9d-99c9-9ac5-dabf-74f27ac6afa1','62603801-4585-1d21-9663-def6191e3807','2020-10-21 18:00:38') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-21 22:15:55' where stamp_out is null and id='46dc5d9d-99c9-9ac5-dabf-74f27ac6afa1'; -2020-10-27 16:25:19;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,stamp_in) VALUES ('0d3897fa-7977-8eff-699d-dea3f3326311','793c634b-6c76-2fc6-6023-ef603c84ae60','2020-10-21 18:58:56') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-21 22:14:53' where stamp_out is null and id='0d3897fa-7977-8eff-699d-dea3f3326311'; -2020-10-27 16:25:19;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,stamp_in) VALUES ('02852617-f3ca-db05-e5ed-fe96404cf768','4a3bb07c-f2aa-7fee-db90-de10fafc2d03','2020-10-21 18:59:04') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-22 00:16:56' where stamp_out is null and id='02852617-f3ca-db05-e5ed-fe96404cf768'; -2020-10-27 16:25:19;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,stamp_in) VALUES ('5b9bb76d-cca1-c24b-e119-4d6009dc972b','9aadd185-7b1d-f8f7-5d9b-2fca4931fe5e','2020-10-22 09:42:18') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-22 14:31:26' where stamp_out is null and id='5b9bb76d-cca1-c24b-e119-4d6009dc972b'; -2020-10-27 16:25:19;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,stamp_in) VALUES ('0948dc6b-9a54-c582-cf7f-7f73f2844f0b','fc492a95-b13b-d370-a24f-82646bf3503c','2020-10-22 09:55:35') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-22 14:36:09' where stamp_out is null and id='0948dc6b-9a54-c582-cf7f-7f73f2844f0b'; -2020-10-27 16:25:19;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,stamp_in) VALUES ('71cfb3f3-b2f8-632b-19e6-3c237c56a34f','62603801-4585-1d21-9663-def6191e3807','2020-10-22 09:59:34') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-22 14:14:02' where stamp_out is null and id='71cfb3f3-b2f8-632b-19e6-3c237c56a34f'; -2020-10-27 16:25:19;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,stamp_in) VALUES ('46d11185-411f-10d1-240a-f8137da5633c','b18d96e8-22cb-9fcd-9f29-18d1ddd0369b','2020-10-22 10:23:54') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-22 14:13:21' where stamp_out is null and id='46d11185-411f-10d1-240a-f8137da5633c'; -2020-10-27 16:25:19;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,stamp_in) VALUES ('3bceaeef-f435-3f14-5e0f-e9961403969e','4a3bb07c-f2aa-7fee-db90-de10fafc2d03','2020-10-22 12:02:26') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-22 14:48:55' where stamp_out is null and id='3bceaeef-f435-3f14-5e0f-e9961403969e'; -2020-10-27 16:25:19;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,stamp_in) VALUES ('a1af1b38-0f11-9e78-4946-b0ca91105d6b','9aadd185-7b1d-f8f7-5d9b-2fca4931fe5e','2020-10-22 17:37:57') on conflict on constraint timetracker_pkey do nothing; -2020-10-27 16:25:19;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,stamp_in) VALUES ('fc028e64-eae5-c285-b733-8f02359f2678','b18d96e8-22cb-9fcd-9f29-18d1ddd0369b','2020-10-22 17:47:53') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-22 22:15:06' where stamp_out is null and id='fc028e64-eae5-c285-b733-8f02359f2678'; -2020-10-27 16:25:19;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,stamp_in) VALUES ('01917d4b-588e-2eb4-ae9d-5ee07761a81b','fc492a95-b13b-d370-a24f-82646bf3503c','2020-10-22 18:01:25') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-22 22:11:59' where stamp_out is null and id='01917d4b-588e-2eb4-ae9d-5ee07761a81b'; -2020-10-27 16:25:19;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,stamp_in) VALUES ('7de06477-c1bb-3bb5-221e-8b83f7f9e952','62603801-4585-1d21-9663-def6191e3807','2020-10-22 18:01:36') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-22 21:53:58' where stamp_out is null and id='7de06477-c1bb-3bb5-221e-8b83f7f9e952'; -2020-10-27 16:25:19;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,stamp_in) VALUES ('6b7c1be2-4ad5-76d9-dd63-94d46eb8020c','9aadd185-7b1d-f8f7-5d9b-2fca4931fe5e','2020-10-23 09:43:03') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-23 14:50:21' where stamp_out is null and id='6b7c1be2-4ad5-76d9-dd63-94d46eb8020c'; -2020-10-27 16:25:19;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,stamp_in) VALUES ('300ac5e4-2792-f999-5f74-e0166709c2d9','62603801-4585-1d21-9663-def6191e3807','2020-10-23 09:52:32') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-23 14:26:21' where stamp_out is null and id='300ac5e4-2792-f999-5f74-e0166709c2d9'; -2020-10-27 16:25:19;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,stamp_in) VALUES ('aaee6eb7-2280-fafe-7420-2bee1e8116a9','fc492a95-b13b-d370-a24f-82646bf3503c','2020-10-23 10:02:28') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-23 14:49:18' where stamp_out is null and id='aaee6eb7-2280-fafe-7420-2bee1e8116a9'; -2020-10-27 16:25:19;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,stamp_in) VALUES ('b1593ce0-693b-52c5-ce3b-9a0282750200','b18d96e8-22cb-9fcd-9f29-18d1ddd0369b','2020-10-23 10:18:53') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-23 15:06:44' where stamp_out is null and id='b1593ce0-693b-52c5-ce3b-9a0282750200'; -2020-10-27 16:25:19;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,stamp_in) VALUES ('bf712fc4-dd46-49ec-4ceb-9c5624700794','4a3bb07c-f2aa-7fee-db90-de10fafc2d03','2020-10-23 12:03:50') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-23 15:10:36' where stamp_out is null and id='bf712fc4-dd46-49ec-4ceb-9c5624700794'; -2020-10-27 16:25:19;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,stamp_in) VALUES ('a059723d-d955-d571-4b55-83a84574da6d','4b858c8a-eb14-931c-9178-76c8ab37acd6','2020-10-23 15:48:06') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-24 00:32:19' where stamp_out is null and id='a059723d-d955-d571-4b55-83a84574da6d'; -2020-10-27 16:25:19;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,stamp_in) VALUES ('3f6abfba-e345-472e-30de-017f4b835f46','62603801-4585-1d21-9663-def6191e3807','2020-10-23 17:52:50') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-23 22:55:01' where stamp_out is null and id='3f6abfba-e345-472e-30de-017f4b835f46'; -2020-10-27 16:25:19;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,stamp_in) VALUES ('5726a991-a35d-ad25-2de1-91ff9010edef','b18d96e8-22cb-9fcd-9f29-18d1ddd0369b','2020-10-23 17:57:12') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-24 00:27:06' where stamp_out is null and id='5726a991-a35d-ad25-2de1-91ff9010edef'; -2020-10-27 16:25:19;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,stamp_in) VALUES ('a32bb7ee-5793-18f3-cae1-8ea9b1a8d8dd','fc492a95-b13b-d370-a24f-82646bf3503c','2020-10-23 17:58:46') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-23 23:38:06' where stamp_out is null and id='a32bb7ee-5793-18f3-cae1-8ea9b1a8d8dd'; -2020-10-27 16:25:19;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,stamp_in) VALUES ('c11ef676-d9cc-dfbe-8a05-420d4b16d938','793c634b-6c76-2fc6-6023-ef603c84ae60','2020-10-23 18:58:42') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-23 22:57:52' where stamp_out is null and id='c11ef676-d9cc-dfbe-8a05-420d4b16d938'; -2020-10-27 16:25:19;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,stamp_in) VALUES ('c00c99f3-212b-2f1f-dfff-93b400a55338','4a3bb07c-f2aa-7fee-db90-de10fafc2d03','2020-10-23 19:00:37') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-24 00:29:26' where stamp_out is null and id='c00c99f3-212b-2f1f-dfff-93b400a55338'; -2020-10-27 16:25:19;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,stamp_in) VALUES ('f423638b-6de9-1b42-2b32-de43ae8214df','4b858c8a-eb14-931c-9178-76c8ab37acd6','2020-10-24 15:49:03') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-25 00:14:43' where stamp_out is null and id='f423638b-6de9-1b42-2b32-de43ae8214df'; -2020-10-27 16:25:19;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,stamp_in) VALUES ('0fa80c8b-4336-67ac-7486-b4128203b9a5','62603801-4585-1d21-9663-def6191e3807','2020-10-24 16:52:50') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-24 22:48:42' where stamp_out is null and id='0fa80c8b-4336-67ac-7486-b4128203b9a5'; -2020-10-27 16:25:19;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,stamp_in) VALUES ('0018ab99-bf30-52a0-473a-373a50aea56c','b18d96e8-22cb-9fcd-9f29-18d1ddd0369b','2020-10-24 17:21:25') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-25 00:13:43' where stamp_out is null and id='0018ab99-bf30-52a0-473a-373a50aea56c'; -2020-10-27 16:25:19;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,stamp_in) VALUES ('9a4240af-a7bb-b38d-e52b-95451d3cbfb0','4a3bb07c-f2aa-7fee-db90-de10fafc2d03','2020-10-24 17:54:15') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-25 00:18:07' where stamp_out is null and id='9a4240af-a7bb-b38d-e52b-95451d3cbfb0'; -2020-10-27 16:25:19;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,stamp_in) VALUES ('a23f87bd-ee9a-c605-4f8c-2c6b5304d687','9aadd185-7b1d-f8f7-5d9b-2fca4931fe5e','2020-10-24 17:55:29') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-24 22:22:39' where stamp_out is null and id='a23f87bd-ee9a-c605-4f8c-2c6b5304d687'; -2020-10-27 16:25:19;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,stamp_in) VALUES ('8455ba8a-bf81-c3f0-3504-27c333173bfe','793c634b-6c76-2fc6-6023-ef603c84ae60','2020-10-24 18:59:53') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-24 22:55:52' where stamp_out is null and id='8455ba8a-bf81-c3f0-3504-27c333173bfe'; -2020-10-27 16:25:19;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,stamp_in) VALUES ('152b6299-7a7c-14fb-2be4-9d1c60e7b1c3','fc492a95-b13b-d370-a24f-82646bf3503c','2020-10-24 23:32:26') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-24 23:32:38' where stamp_out is null and id='152b6299-7a7c-14fb-2be4-9d1c60e7b1c3'; -2020-10-27 16:25:19;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,stamp_in) VALUES ('5e0b2732-e61e-6354-6d8c-bbc4f6fb8cd2','9aadd185-7b1d-f8f7-5d9b-2fca4931fe5e','2020-10-26 09:22:18') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-26 14:20:16' where stamp_out is null and id='5e0b2732-e61e-6354-6d8c-bbc4f6fb8cd2'; -2020-10-27 16:25:19;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,stamp_in) VALUES ('5cbfdca5-8568-f516-5241-0ea90b0f1e05','fc492a95-b13b-d370-a24f-82646bf3503c','2020-10-26 09:54:43') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-26 14:20:36' where stamp_out is null and id='5cbfdca5-8568-f516-5241-0ea90b0f1e05'; -2020-10-27 16:25:19;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,stamp_in) VALUES ('89199ca5-8884-ed18-7d4d-2aa74f6400a8','62603801-4585-1d21-9663-def6191e3807','2020-10-26 09:55:05') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-26 13:59:25' where stamp_out is null and id='89199ca5-8884-ed18-7d4d-2aa74f6400a8'; -2020-10-27 16:25:19;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,stamp_in) VALUES ('1222cede-29e5-d6b6-db3b-73eb410f1ff6','4a3bb07c-f2aa-7fee-db90-de10fafc2d03','2020-10-26 10:29:17') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-26 14:16:00' where stamp_out is null and id='1222cede-29e5-d6b6-db3b-73eb410f1ff6'; -2020-10-27 16:25:19;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,stamp_in) VALUES ('57fb855e-7006-b8e3-f602-26cf70b736ad','b18d96e8-22cb-9fcd-9f29-18d1ddd0369b','2020-10-26 11:44:41') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-26 14:56:00' where stamp_out is null and id='57fb855e-7006-b8e3-f602-26cf70b736ad'; -2020-10-27 16:25:19;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,stamp_in) VALUES ('495ef91a-07f2-76c1-b777-76fc1e27dea4','9aadd185-7b1d-f8f7-5d9b-2fca4931fe5e','2020-10-26 17:16:10') on conflict on constraint timetracker_pkey do nothing; -2020-10-27 16:25:19;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,stamp_in) VALUES ('a2352a5f-33c7-1fbb-6afd-51a0a98646bc','62603801-4585-1d21-9663-def6191e3807','2020-10-26 17:35:36') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-26 21:28:36' where stamp_out is null and id='a2352a5f-33c7-1fbb-6afd-51a0a98646bc'; -2020-10-27 16:25:19;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,stamp_in) VALUES ('fd4edbac-609b-7f31-8d27-b447eaf870fc','4a3bb07c-f2aa-7fee-db90-de10fafc2d03','2020-10-26 17:57:27') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-26 18:43:54' where stamp_out is null and id='fd4edbac-609b-7f31-8d27-b447eaf870fc'; -2020-10-27 16:25:19;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,stamp_in) VALUES ('3d5b3bcc-a50d-68ce-13f7-63b972e64966','b18d96e8-22cb-9fcd-9f29-18d1ddd0369b','2020-10-26 18:28:49') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-26 22:43:35' where stamp_out is null and id='3d5b3bcc-a50d-68ce-13f7-63b972e64966'; -2020-10-27 16:25:19;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,stamp_in) VALUES ('85cf2689-a643-7095-c685-7084e2a8c252','62603801-4585-1d21-9663-def6191e3807','2020-10-27 09:48:27') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-27 14:00:43' where stamp_out is null and id='85cf2689-a643-7095-c685-7084e2a8c252'; -2020-10-27 16:25:19;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,stamp_in) VALUES ('f8e15317-a99f-6dd9-16ee-37a3b9c4b839','fc492a95-b13b-d370-a24f-82646bf3503c','2020-10-27 09:50:23') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-27 14:17:12' where stamp_out is null and id='f8e15317-a99f-6dd9-16ee-37a3b9c4b839'; -2020-10-27 16:25:19;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,stamp_in) VALUES ('7be257e7-2905-79ab-cdd0-92b30906f814','9aadd185-7b1d-f8f7-5d9b-2fca4931fe5e','2020-10-27 09:56:49') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-27 14:17:35' where stamp_out is null and id='7be257e7-2905-79ab-cdd0-92b30906f814'; -2020-10-27 16:25:19;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,stamp_in) VALUES ('7b9999cc-16d6-7571-108b-c0ceae07afb5','4a3bb07c-f2aa-7fee-db90-de10fafc2d03','2020-10-27 10:24:18') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-27 14:43:51' where stamp_out is null and id='7b9999cc-16d6-7571-108b-c0ceae07afb5'; -2020-10-27 16:25:19;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,stamp_in) VALUES ('273448e8-b0f9-8875-79a7-86c4d4bdeb68','b18d96e8-22cb-9fcd-9f29-18d1ddd0369b','2020-10-27 11:55:55') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-27 14:13:26' where stamp_out is null and id='273448e8-b0f9-8875-79a7-86c4d4bdeb68'; -2020-10-27 16:25:19;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,stamp_in) VALUES ('e730c5ec-fab6-b79e-cffc-77377e56485f','793c634b-6c76-2fc6-6023-ef603c84ae60','2020-10-27 11:58:20') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-27 14:15:13' where stamp_out is null and id='e730c5ec-fab6-b79e-cffc-77377e56485f'; -2020-10-27 16:25:19;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,stamp_in) VALUES ('57b8b3b9-1cde-30fe-e676-c7ed1893ff24','4b858c8a-eb14-931c-9178-76c8ab37acd6','2020-10-27 14:48:00') on conflict on constraint timetracker_pkey do nothing; -2020-10-27 16:26:56;ssh;syncup;sqlite;sqlite3 "/home/dks/.hourtrax/hourtrax.sqlite" "select id,id_staff,stamp_in,stamp_out from timetracks where stamp_in >= '2020-10-27 16:25:18' or stamp_out >= '2020-10-27 16:25:18';" -2020-10-27 16:27:17;ssh;syncup;sqlite;sqlite3 "/home/dks/.hourtrax/hourtrax.sqlite" "select id,id_staff,stamp_in,stamp_out from timetracks ;" -2020-10-27 16:27:17;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('74e1f011-d908-8e54-38c6-318668373c8a','98a436fc-e276-555e-8b19-992a16f71831',date('2020-10-20'),'2020-10-20 11:39:32') on conflict on constraint timetracker_pkey do nothing; -2020-10-27 16:27:17;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('de3b9a8b-a29b-fd9a-19e2-d903c0e790c9','4a3bb07c-f2aa-7fee-db90-de10fafc2d03',date('2020-10-20'),'2020-10-20 12:02:43') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-20 15:30:43' where stamp_out is null and id='de3b9a8b-a29b-fd9a-19e2-d903c0e790c9'; -2020-10-27 16:27:17;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('892d94fb-1922-9e2e-41ff-2a1b20cc6303','62603801-4585-1d21-9663-def6191e3807',date('2020-10-20'),'2020-10-20 14:21:44') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-20 14:21:58' where stamp_out is null and id='892d94fb-1922-9e2e-41ff-2a1b20cc6303'; -2020-10-27 16:27:17;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('60493c50-541c-273d-d13b-3286461dc8da','793c634b-6c76-2fc6-6023-ef603c84ae60',date('2020-10-20'),'2020-10-20 14:23:07') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-20 14:23:17' where stamp_out is null and id='60493c50-541c-273d-d13b-3286461dc8da'; -2020-10-27 16:27:17;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('fd4fe4ff-8a22-7ace-ac32-2dc82148567e','b18d96e8-22cb-9fcd-9f29-18d1ddd0369b',date('2020-10-20'),'2020-10-20 14:24:30') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-20 14:24:40' where stamp_out is null and id='fd4fe4ff-8a22-7ace-ac32-2dc82148567e'; -2020-10-27 16:27:17;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('b3ec955e-566a-b9ab-59cd-aee9ce015317','c8f1907b-d98c-a78c-bf19-befa94959f3f',date('2020-10-20'),'2020-10-20 14:26:27') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-20 14:27:16' where stamp_out is null and id='b3ec955e-566a-b9ab-59cd-aee9ce015317'; -2020-10-27 16:27:17;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('2b95ec76-77de-8014-0a63-c3a6c79e0927','fc492a95-b13b-d370-a24f-82646bf3503c',date('2020-10-20'),'2020-10-20 14:40:23') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-20 14:40:36' where stamp_out is null and id='2b95ec76-77de-8014-0a63-c3a6c79e0927'; -2020-10-27 16:27:17;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('53190bec-790b-f1ec-011e-8a2c65bcd598','9aadd185-7b1d-f8f7-5d9b-2fca4931fe5e',date('2020-10-20'),'2020-10-20 14:41:46') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-20 14:41:58' where stamp_out is null and id='53190bec-790b-f1ec-011e-8a2c65bcd598'; -2020-10-27 16:27:17;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('011c370e-b392-4155-78d6-593c32361705','4b858c8a-eb14-931c-9178-76c8ab37acd6',date('2020-10-20'),'2020-10-20 15:52:12') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-20 23:52:24' where stamp_out is null and id='011c370e-b392-4155-78d6-593c32361705'; -2020-10-27 16:27:17;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('36f50063-e8d8-fcb5-9bfc-88780e7381b3','9aadd185-7b1d-f8f7-5d9b-2fca4931fe5e',date('2020-10-20'),'2020-10-20 17:42:44') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-20 22:05:23' where stamp_out is null and id='36f50063-e8d8-fcb5-9bfc-88780e7381b3'; -2020-10-27 16:27:17;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('939e5e68-1574-9cb7-324a-7e718b46ac3f','62603801-4585-1d21-9663-def6191e3807',date('2020-10-20'),'2020-10-20 17:49:48') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-20 22:03:38' where stamp_out is null and id='939e5e68-1574-9cb7-324a-7e718b46ac3f'; -2020-10-27 16:27:17;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('5fbc1d68-599d-82d6-6aad-785cefca0b44','c8f1907b-d98c-a78c-bf19-befa94959f3f',date('2020-10-20'),'2020-10-20 17:51:20') on conflict on constraint timetracker_pkey do nothing; -2020-10-27 16:27:17;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('8028d62c-518a-34a1-da7f-3c48ad9f26f8','4a3bb07c-f2aa-7fee-db90-de10fafc2d03',date('2020-10-20'),'2020-10-20 18:57:49') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-20 23:44:24' where stamp_out is null and id='8028d62c-518a-34a1-da7f-3c48ad9f26f8'; -2020-10-27 16:27:17;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('44491b5b-0264-911f-3e2d-f15a45ec605b','9aadd185-7b1d-f8f7-5d9b-2fca4931fe5e',date('2020-10-21'),'2020-10-21 09:38:19') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-21 14:44:04' where stamp_out is null and id='44491b5b-0264-911f-3e2d-f15a45ec605b'; -2020-10-27 16:27:17;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('c44dcba7-ff06-99ed-9c2d-4d9e23c6cd69','62603801-4585-1d21-9663-def6191e3807',date('2020-10-21'),'2020-10-21 09:55:04') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-21 14:16:32' where stamp_out is null and id='c44dcba7-ff06-99ed-9c2d-4d9e23c6cd69'; -2020-10-27 16:27:17;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('09a0d776-1b63-9e85-67b7-ac6e146b7085','fc492a95-b13b-d370-a24f-82646bf3503c',date('2020-10-21'),'2020-10-21 09:57:24') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-21 14:40:39' where stamp_out is null and id='09a0d776-1b63-9e85-67b7-ac6e146b7085'; -2020-10-27 16:27:17;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('11c2216d-1301-b411-9973-efe87d09da4f','b18d96e8-22cb-9fcd-9f29-18d1ddd0369b',date('2020-10-21'),'2020-10-21 10:20:52') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-21 14:58:04' where stamp_out is null and id='11c2216d-1301-b411-9973-efe87d09da4f'; -2020-10-27 16:27:17;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('78431a8a-424d-bcc5-5f47-fa6306c0d780','793c634b-6c76-2fc6-6023-ef603c84ae60',date('2020-10-21'),'2020-10-21 12:00:17') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-21 14:20:37' where stamp_out is null and id='78431a8a-424d-bcc5-5f47-fa6306c0d780'; -2020-10-27 16:27:17;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('ec03d58a-464a-4320-72e5-f18492ab35fa','4a3bb07c-f2aa-7fee-db90-de10fafc2d03',date('2020-10-21'),'2020-10-21 12:04:42') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-21 15:49:19' where stamp_out is null and id='ec03d58a-464a-4320-72e5-f18492ab35fa'; -2020-10-27 16:27:17;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('ea75b8f3-0db9-da35-da98-ea3a50b851e9','98a436fc-e276-555e-8b19-992a16f71831',date('2020-10-21'),'2020-10-21 13:54:01') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-21 13:54:12' where stamp_out is null and id='ea75b8f3-0db9-da35-da98-ea3a50b851e9'; -2020-10-27 16:27:17;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('617eda50-477f-27d0-746f-31f11cd569e3','4b858c8a-eb14-931c-9178-76c8ab37acd6',date('2020-10-21'),'2020-10-21 16:01:02') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-22 00:12:30' where stamp_out is null and id='617eda50-477f-27d0-746f-31f11cd569e3'; -2020-10-27 16:27:17;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('dafaff52-2d8c-769c-5f22-c6e1e1150433','9aadd185-7b1d-f8f7-5d9b-2fca4931fe5e',date('2020-10-21'),'2020-10-21 17:43:04') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-21 22:17:17' where stamp_out is null and id='dafaff52-2d8c-769c-5f22-c6e1e1150433'; -2020-10-27 16:27:17;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('b92e2214-04bd-c7ff-f6a3-80464a1e973d','b18d96e8-22cb-9fcd-9f29-18d1ddd0369b',date('2020-10-21'),'2020-10-21 17:53:18') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-21 23:24:25' where stamp_out is null and id='b92e2214-04bd-c7ff-f6a3-80464a1e973d'; -2020-10-27 16:27:17;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('e6dbfb03-f6f3-110e-f134-5f4c0799bcd1','fc492a95-b13b-d370-a24f-82646bf3503c',date('2020-10-21'),'2020-10-21 17:56:23') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-21 22:38:18' where stamp_out is null and id='e6dbfb03-f6f3-110e-f134-5f4c0799bcd1'; -2020-10-27 16:27:17;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('46dc5d9d-99c9-9ac5-dabf-74f27ac6afa1','62603801-4585-1d21-9663-def6191e3807',date('2020-10-21'),'2020-10-21 18:00:38') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-21 22:15:55' where stamp_out is null and id='46dc5d9d-99c9-9ac5-dabf-74f27ac6afa1'; -2020-10-27 16:27:17;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('0d3897fa-7977-8eff-699d-dea3f3326311','793c634b-6c76-2fc6-6023-ef603c84ae60',date('2020-10-21'),'2020-10-21 18:58:56') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-21 22:14:53' where stamp_out is null and id='0d3897fa-7977-8eff-699d-dea3f3326311'; -2020-10-27 16:27:17;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('02852617-f3ca-db05-e5ed-fe96404cf768','4a3bb07c-f2aa-7fee-db90-de10fafc2d03',date('2020-10-21'),'2020-10-21 18:59:04') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-22 00:16:56' where stamp_out is null and id='02852617-f3ca-db05-e5ed-fe96404cf768'; -2020-10-27 16:27:17;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('5b9bb76d-cca1-c24b-e119-4d6009dc972b','9aadd185-7b1d-f8f7-5d9b-2fca4931fe5e',date('2020-10-22'),'2020-10-22 09:42:18') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-22 14:31:26' where stamp_out is null and id='5b9bb76d-cca1-c24b-e119-4d6009dc972b'; -2020-10-27 16:27:17;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('0948dc6b-9a54-c582-cf7f-7f73f2844f0b','fc492a95-b13b-d370-a24f-82646bf3503c',date('2020-10-22'),'2020-10-22 09:55:35') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-22 14:36:09' where stamp_out is null and id='0948dc6b-9a54-c582-cf7f-7f73f2844f0b'; -2020-10-27 16:27:17;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('71cfb3f3-b2f8-632b-19e6-3c237c56a34f','62603801-4585-1d21-9663-def6191e3807',date('2020-10-22'),'2020-10-22 09:59:34') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-22 14:14:02' where stamp_out is null and id='71cfb3f3-b2f8-632b-19e6-3c237c56a34f'; -2020-10-27 16:27:17;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('46d11185-411f-10d1-240a-f8137da5633c','b18d96e8-22cb-9fcd-9f29-18d1ddd0369b',date('2020-10-22'),'2020-10-22 10:23:54') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-22 14:13:21' where stamp_out is null and id='46d11185-411f-10d1-240a-f8137da5633c'; -2020-10-27 16:27:17;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('3bceaeef-f435-3f14-5e0f-e9961403969e','4a3bb07c-f2aa-7fee-db90-de10fafc2d03',date('2020-10-22'),'2020-10-22 12:02:26') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-22 14:48:55' where stamp_out is null and id='3bceaeef-f435-3f14-5e0f-e9961403969e'; -2020-10-27 16:27:17;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('a1af1b38-0f11-9e78-4946-b0ca91105d6b','9aadd185-7b1d-f8f7-5d9b-2fca4931fe5e',date('2020-10-22'),'2020-10-22 17:37:57') on conflict on constraint timetracker_pkey do nothing; -2020-10-27 16:27:17;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('fc028e64-eae5-c285-b733-8f02359f2678','b18d96e8-22cb-9fcd-9f29-18d1ddd0369b',date('2020-10-22'),'2020-10-22 17:47:53') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-22 22:15:06' where stamp_out is null and id='fc028e64-eae5-c285-b733-8f02359f2678'; -2020-10-27 16:27:17;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('01917d4b-588e-2eb4-ae9d-5ee07761a81b','fc492a95-b13b-d370-a24f-82646bf3503c',date('2020-10-22'),'2020-10-22 18:01:25') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-22 22:11:59' where stamp_out is null and id='01917d4b-588e-2eb4-ae9d-5ee07761a81b'; -2020-10-27 16:27:17;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('7de06477-c1bb-3bb5-221e-8b83f7f9e952','62603801-4585-1d21-9663-def6191e3807',date('2020-10-22'),'2020-10-22 18:01:36') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-22 21:53:58' where stamp_out is null and id='7de06477-c1bb-3bb5-221e-8b83f7f9e952'; -2020-10-27 16:27:17;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('6b7c1be2-4ad5-76d9-dd63-94d46eb8020c','9aadd185-7b1d-f8f7-5d9b-2fca4931fe5e',date('2020-10-23'),'2020-10-23 09:43:03') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-23 14:50:21' where stamp_out is null and id='6b7c1be2-4ad5-76d9-dd63-94d46eb8020c'; -2020-10-27 16:27:18;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('300ac5e4-2792-f999-5f74-e0166709c2d9','62603801-4585-1d21-9663-def6191e3807',date('2020-10-23'),'2020-10-23 09:52:32') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-23 14:26:21' where stamp_out is null and id='300ac5e4-2792-f999-5f74-e0166709c2d9'; -2020-10-27 16:27:18;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('aaee6eb7-2280-fafe-7420-2bee1e8116a9','fc492a95-b13b-d370-a24f-82646bf3503c',date('2020-10-23'),'2020-10-23 10:02:28') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-23 14:49:18' where stamp_out is null and id='aaee6eb7-2280-fafe-7420-2bee1e8116a9'; -2020-10-27 16:27:18;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('b1593ce0-693b-52c5-ce3b-9a0282750200','b18d96e8-22cb-9fcd-9f29-18d1ddd0369b',date('2020-10-23'),'2020-10-23 10:18:53') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-23 15:06:44' where stamp_out is null and id='b1593ce0-693b-52c5-ce3b-9a0282750200'; -2020-10-27 16:27:18;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('bf712fc4-dd46-49ec-4ceb-9c5624700794','4a3bb07c-f2aa-7fee-db90-de10fafc2d03',date('2020-10-23'),'2020-10-23 12:03:50') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-23 15:10:36' where stamp_out is null and id='bf712fc4-dd46-49ec-4ceb-9c5624700794'; -2020-10-27 16:27:18;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('a059723d-d955-d571-4b55-83a84574da6d','4b858c8a-eb14-931c-9178-76c8ab37acd6',date('2020-10-23'),'2020-10-23 15:48:06') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-24 00:32:19' where stamp_out is null and id='a059723d-d955-d571-4b55-83a84574da6d'; -2020-10-27 16:27:18;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('3f6abfba-e345-472e-30de-017f4b835f46','62603801-4585-1d21-9663-def6191e3807',date('2020-10-23'),'2020-10-23 17:52:50') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-23 22:55:01' where stamp_out is null and id='3f6abfba-e345-472e-30de-017f4b835f46'; -2020-10-27 16:27:18;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('5726a991-a35d-ad25-2de1-91ff9010edef','b18d96e8-22cb-9fcd-9f29-18d1ddd0369b',date('2020-10-23'),'2020-10-23 17:57:12') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-24 00:27:06' where stamp_out is null and id='5726a991-a35d-ad25-2de1-91ff9010edef'; -2020-10-27 16:27:18;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('a32bb7ee-5793-18f3-cae1-8ea9b1a8d8dd','fc492a95-b13b-d370-a24f-82646bf3503c',date('2020-10-23'),'2020-10-23 17:58:46') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-23 23:38:06' where stamp_out is null and id='a32bb7ee-5793-18f3-cae1-8ea9b1a8d8dd'; -2020-10-27 16:27:18;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('c11ef676-d9cc-dfbe-8a05-420d4b16d938','793c634b-6c76-2fc6-6023-ef603c84ae60',date('2020-10-23'),'2020-10-23 18:58:42') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-23 22:57:52' where stamp_out is null and id='c11ef676-d9cc-dfbe-8a05-420d4b16d938'; -2020-10-27 16:27:18;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('c00c99f3-212b-2f1f-dfff-93b400a55338','4a3bb07c-f2aa-7fee-db90-de10fafc2d03',date('2020-10-23'),'2020-10-23 19:00:37') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-24 00:29:26' where stamp_out is null and id='c00c99f3-212b-2f1f-dfff-93b400a55338'; -2020-10-27 16:27:18;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('f423638b-6de9-1b42-2b32-de43ae8214df','4b858c8a-eb14-931c-9178-76c8ab37acd6',date('2020-10-24'),'2020-10-24 15:49:03') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-25 00:14:43' where stamp_out is null and id='f423638b-6de9-1b42-2b32-de43ae8214df'; -2020-10-27 16:27:18;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('0fa80c8b-4336-67ac-7486-b4128203b9a5','62603801-4585-1d21-9663-def6191e3807',date('2020-10-24'),'2020-10-24 16:52:50') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-24 22:48:42' where stamp_out is null and id='0fa80c8b-4336-67ac-7486-b4128203b9a5'; -2020-10-27 16:27:18;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('0018ab99-bf30-52a0-473a-373a50aea56c','b18d96e8-22cb-9fcd-9f29-18d1ddd0369b',date('2020-10-24'),'2020-10-24 17:21:25') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-25 00:13:43' where stamp_out is null and id='0018ab99-bf30-52a0-473a-373a50aea56c'; -2020-10-27 16:27:18;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('9a4240af-a7bb-b38d-e52b-95451d3cbfb0','4a3bb07c-f2aa-7fee-db90-de10fafc2d03',date('2020-10-24'),'2020-10-24 17:54:15') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-25 00:18:07' where stamp_out is null and id='9a4240af-a7bb-b38d-e52b-95451d3cbfb0'; -2020-10-27 16:27:18;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('a23f87bd-ee9a-c605-4f8c-2c6b5304d687','9aadd185-7b1d-f8f7-5d9b-2fca4931fe5e',date('2020-10-24'),'2020-10-24 17:55:29') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-24 22:22:39' where stamp_out is null and id='a23f87bd-ee9a-c605-4f8c-2c6b5304d687'; -2020-10-27 16:27:18;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('8455ba8a-bf81-c3f0-3504-27c333173bfe','793c634b-6c76-2fc6-6023-ef603c84ae60',date('2020-10-24'),'2020-10-24 18:59:53') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-24 22:55:52' where stamp_out is null and id='8455ba8a-bf81-c3f0-3504-27c333173bfe'; -2020-10-27 16:27:18;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('152b6299-7a7c-14fb-2be4-9d1c60e7b1c3','fc492a95-b13b-d370-a24f-82646bf3503c',date('2020-10-24'),'2020-10-24 23:32:26') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-24 23:32:38' where stamp_out is null and id='152b6299-7a7c-14fb-2be4-9d1c60e7b1c3'; -2020-10-27 16:27:18;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('5e0b2732-e61e-6354-6d8c-bbc4f6fb8cd2','9aadd185-7b1d-f8f7-5d9b-2fca4931fe5e',date('2020-10-26'),'2020-10-26 09:22:18') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-26 14:20:16' where stamp_out is null and id='5e0b2732-e61e-6354-6d8c-bbc4f6fb8cd2'; -2020-10-27 16:27:18;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('5cbfdca5-8568-f516-5241-0ea90b0f1e05','fc492a95-b13b-d370-a24f-82646bf3503c',date('2020-10-26'),'2020-10-26 09:54:43') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-26 14:20:36' where stamp_out is null and id='5cbfdca5-8568-f516-5241-0ea90b0f1e05'; -2020-10-27 16:27:18;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('89199ca5-8884-ed18-7d4d-2aa74f6400a8','62603801-4585-1d21-9663-def6191e3807',date('2020-10-26'),'2020-10-26 09:55:05') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-26 13:59:25' where stamp_out is null and id='89199ca5-8884-ed18-7d4d-2aa74f6400a8'; -2020-10-27 16:27:18;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('1222cede-29e5-d6b6-db3b-73eb410f1ff6','4a3bb07c-f2aa-7fee-db90-de10fafc2d03',date('2020-10-26'),'2020-10-26 10:29:17') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-26 14:16:00' where stamp_out is null and id='1222cede-29e5-d6b6-db3b-73eb410f1ff6'; -2020-10-27 16:27:18;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('57fb855e-7006-b8e3-f602-26cf70b736ad','b18d96e8-22cb-9fcd-9f29-18d1ddd0369b',date('2020-10-26'),'2020-10-26 11:44:41') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-26 14:56:00' where stamp_out is null and id='57fb855e-7006-b8e3-f602-26cf70b736ad'; -2020-10-27 16:27:18;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('495ef91a-07f2-76c1-b777-76fc1e27dea4','9aadd185-7b1d-f8f7-5d9b-2fca4931fe5e',date('2020-10-26'),'2020-10-26 17:16:10') on conflict on constraint timetracker_pkey do nothing; -2020-10-27 16:27:18;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('a2352a5f-33c7-1fbb-6afd-51a0a98646bc','62603801-4585-1d21-9663-def6191e3807',date('2020-10-26'),'2020-10-26 17:35:36') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-26 21:28:36' where stamp_out is null and id='a2352a5f-33c7-1fbb-6afd-51a0a98646bc'; -2020-10-27 16:27:18;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('fd4edbac-609b-7f31-8d27-b447eaf870fc','4a3bb07c-f2aa-7fee-db90-de10fafc2d03',date('2020-10-26'),'2020-10-26 17:57:27') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-26 18:43:54' where stamp_out is null and id='fd4edbac-609b-7f31-8d27-b447eaf870fc'; -2020-10-27 16:27:18;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('3d5b3bcc-a50d-68ce-13f7-63b972e64966','b18d96e8-22cb-9fcd-9f29-18d1ddd0369b',date('2020-10-26'),'2020-10-26 18:28:49') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-26 22:43:35' where stamp_out is null and id='3d5b3bcc-a50d-68ce-13f7-63b972e64966'; -2020-10-27 16:27:18;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('85cf2689-a643-7095-c685-7084e2a8c252','62603801-4585-1d21-9663-def6191e3807',date('2020-10-27'),'2020-10-27 09:48:27') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-27 14:00:43' where stamp_out is null and id='85cf2689-a643-7095-c685-7084e2a8c252'; -2020-10-27 16:27:18;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('f8e15317-a99f-6dd9-16ee-37a3b9c4b839','fc492a95-b13b-d370-a24f-82646bf3503c',date('2020-10-27'),'2020-10-27 09:50:23') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-27 14:17:12' where stamp_out is null and id='f8e15317-a99f-6dd9-16ee-37a3b9c4b839'; -2020-10-27 16:27:18;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('7be257e7-2905-79ab-cdd0-92b30906f814','9aadd185-7b1d-f8f7-5d9b-2fca4931fe5e',date('2020-10-27'),'2020-10-27 09:56:49') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-27 14:17:35' where stamp_out is null and id='7be257e7-2905-79ab-cdd0-92b30906f814'; -2020-10-27 16:27:18;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('7b9999cc-16d6-7571-108b-c0ceae07afb5','4a3bb07c-f2aa-7fee-db90-de10fafc2d03',date('2020-10-27'),'2020-10-27 10:24:18') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-27 14:43:51' where stamp_out is null and id='7b9999cc-16d6-7571-108b-c0ceae07afb5'; -2020-10-27 16:27:18;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('273448e8-b0f9-8875-79a7-86c4d4bdeb68','b18d96e8-22cb-9fcd-9f29-18d1ddd0369b',date('2020-10-27'),'2020-10-27 11:55:55') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-27 14:13:26' where stamp_out is null and id='273448e8-b0f9-8875-79a7-86c4d4bdeb68'; -2020-10-27 16:27:18;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('e730c5ec-fab6-b79e-cffc-77377e56485f','793c634b-6c76-2fc6-6023-ef603c84ae60',date('2020-10-27'),'2020-10-27 11:58:20') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-27 14:15:13' where stamp_out is null and id='e730c5ec-fab6-b79e-cffc-77377e56485f'; -2020-10-27 16:27:18;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('57b8b3b9-1cde-30fe-e676-c7ed1893ff24','4b858c8a-eb14-931c-9178-76c8ab37acd6',date('2020-10-27'),'2020-10-27 14:48:00') on conflict on constraint timetracker_pkey do nothing; -2020-10-27 16:27:52;ssh;syncup;sqlite;sqlite3 "/home/dks/.hourtrax/hourtrax.sqlite" "select id,id_staff,stamp_in,stamp_out from timetracks ;" -2020-10-27 16:27:53;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('74e1f011-d908-8e54-38c6-318668373c8a','98a436fc-e276-555e-8b19-992a16f71831',date('2020-10-20'),'2020-10-20 11:39:32') on conflict on constraint timetracker_pkey do nothing; -2020-10-27 16:27:53;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('de3b9a8b-a29b-fd9a-19e2-d903c0e790c9','4a3bb07c-f2aa-7fee-db90-de10fafc2d03',date('2020-10-20'),'2020-10-20 12:02:43') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-20 15:30:43' where stamp_out is null and id='de3b9a8b-a29b-fd9a-19e2-d903c0e790c9'; -2020-10-27 16:27:53;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('892d94fb-1922-9e2e-41ff-2a1b20cc6303','62603801-4585-1d21-9663-def6191e3807',date('2020-10-20'),'2020-10-20 14:21:44') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-20 14:21:58' where stamp_out is null and id='892d94fb-1922-9e2e-41ff-2a1b20cc6303'; -2020-10-27 16:27:53;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('60493c50-541c-273d-d13b-3286461dc8da','793c634b-6c76-2fc6-6023-ef603c84ae60',date('2020-10-20'),'2020-10-20 14:23:07') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-20 14:23:17' where stamp_out is null and id='60493c50-541c-273d-d13b-3286461dc8da'; -2020-10-27 16:27:53;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('fd4fe4ff-8a22-7ace-ac32-2dc82148567e','b18d96e8-22cb-9fcd-9f29-18d1ddd0369b',date('2020-10-20'),'2020-10-20 14:24:30') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-20 14:24:40' where stamp_out is null and id='fd4fe4ff-8a22-7ace-ac32-2dc82148567e'; -2020-10-27 16:27:53;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('b3ec955e-566a-b9ab-59cd-aee9ce015317','c8f1907b-d98c-a78c-bf19-befa94959f3f',date('2020-10-20'),'2020-10-20 14:26:27') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-20 14:27:16' where stamp_out is null and id='b3ec955e-566a-b9ab-59cd-aee9ce015317'; -2020-10-27 16:27:53;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('2b95ec76-77de-8014-0a63-c3a6c79e0927','fc492a95-b13b-d370-a24f-82646bf3503c',date('2020-10-20'),'2020-10-20 14:40:23') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-20 14:40:36' where stamp_out is null and id='2b95ec76-77de-8014-0a63-c3a6c79e0927'; -2020-10-27 16:27:53;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('53190bec-790b-f1ec-011e-8a2c65bcd598','9aadd185-7b1d-f8f7-5d9b-2fca4931fe5e',date('2020-10-20'),'2020-10-20 14:41:46') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-20 14:41:58' where stamp_out is null and id='53190bec-790b-f1ec-011e-8a2c65bcd598'; -2020-10-27 16:27:53;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('011c370e-b392-4155-78d6-593c32361705','4b858c8a-eb14-931c-9178-76c8ab37acd6',date('2020-10-20'),'2020-10-20 15:52:12') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-20 23:52:24' where stamp_out is null and id='011c370e-b392-4155-78d6-593c32361705'; -2020-10-27 16:27:53;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('36f50063-e8d8-fcb5-9bfc-88780e7381b3','9aadd185-7b1d-f8f7-5d9b-2fca4931fe5e',date('2020-10-20'),'2020-10-20 17:42:44') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-20 22:05:23' where stamp_out is null and id='36f50063-e8d8-fcb5-9bfc-88780e7381b3'; -2020-10-27 16:27:53;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('939e5e68-1574-9cb7-324a-7e718b46ac3f','62603801-4585-1d21-9663-def6191e3807',date('2020-10-20'),'2020-10-20 17:49:48') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-20 22:03:38' where stamp_out is null and id='939e5e68-1574-9cb7-324a-7e718b46ac3f'; -2020-10-27 16:27:53;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('5fbc1d68-599d-82d6-6aad-785cefca0b44','c8f1907b-d98c-a78c-bf19-befa94959f3f',date('2020-10-20'),'2020-10-20 17:51:20') on conflict on constraint timetracker_pkey do nothing; -2020-10-27 16:27:53;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('8028d62c-518a-34a1-da7f-3c48ad9f26f8','4a3bb07c-f2aa-7fee-db90-de10fafc2d03',date('2020-10-20'),'2020-10-20 18:57:49') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-20 23:44:24' where stamp_out is null and id='8028d62c-518a-34a1-da7f-3c48ad9f26f8'; -2020-10-27 16:27:53;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('44491b5b-0264-911f-3e2d-f15a45ec605b','9aadd185-7b1d-f8f7-5d9b-2fca4931fe5e',date('2020-10-21'),'2020-10-21 09:38:19') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-21 14:44:04' where stamp_out is null and id='44491b5b-0264-911f-3e2d-f15a45ec605b'; -2020-10-27 16:27:53;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('c44dcba7-ff06-99ed-9c2d-4d9e23c6cd69','62603801-4585-1d21-9663-def6191e3807',date('2020-10-21'),'2020-10-21 09:55:04') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-21 14:16:32' where stamp_out is null and id='c44dcba7-ff06-99ed-9c2d-4d9e23c6cd69'; -2020-10-27 16:27:53;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('09a0d776-1b63-9e85-67b7-ac6e146b7085','fc492a95-b13b-d370-a24f-82646bf3503c',date('2020-10-21'),'2020-10-21 09:57:24') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-21 14:40:39' where stamp_out is null and id='09a0d776-1b63-9e85-67b7-ac6e146b7085'; -2020-10-27 16:27:53;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('11c2216d-1301-b411-9973-efe87d09da4f','b18d96e8-22cb-9fcd-9f29-18d1ddd0369b',date('2020-10-21'),'2020-10-21 10:20:52') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-21 14:58:04' where stamp_out is null and id='11c2216d-1301-b411-9973-efe87d09da4f'; -2020-10-27 16:27:53;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('78431a8a-424d-bcc5-5f47-fa6306c0d780','793c634b-6c76-2fc6-6023-ef603c84ae60',date('2020-10-21'),'2020-10-21 12:00:17') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-21 14:20:37' where stamp_out is null and id='78431a8a-424d-bcc5-5f47-fa6306c0d780'; -2020-10-27 16:27:53;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('ec03d58a-464a-4320-72e5-f18492ab35fa','4a3bb07c-f2aa-7fee-db90-de10fafc2d03',date('2020-10-21'),'2020-10-21 12:04:42') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-21 15:49:19' where stamp_out is null and id='ec03d58a-464a-4320-72e5-f18492ab35fa'; -2020-10-27 16:27:53;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('ea75b8f3-0db9-da35-da98-ea3a50b851e9','98a436fc-e276-555e-8b19-992a16f71831',date('2020-10-21'),'2020-10-21 13:54:01') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-21 13:54:12' where stamp_out is null and id='ea75b8f3-0db9-da35-da98-ea3a50b851e9'; -2020-10-27 16:27:53;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('617eda50-477f-27d0-746f-31f11cd569e3','4b858c8a-eb14-931c-9178-76c8ab37acd6',date('2020-10-21'),'2020-10-21 16:01:02') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-22 00:12:30' where stamp_out is null and id='617eda50-477f-27d0-746f-31f11cd569e3'; -2020-10-27 16:27:53;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('dafaff52-2d8c-769c-5f22-c6e1e1150433','9aadd185-7b1d-f8f7-5d9b-2fca4931fe5e',date('2020-10-21'),'2020-10-21 17:43:04') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-21 22:17:17' where stamp_out is null and id='dafaff52-2d8c-769c-5f22-c6e1e1150433'; -2020-10-27 16:27:53;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('b92e2214-04bd-c7ff-f6a3-80464a1e973d','b18d96e8-22cb-9fcd-9f29-18d1ddd0369b',date('2020-10-21'),'2020-10-21 17:53:18') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-21 23:24:25' where stamp_out is null and id='b92e2214-04bd-c7ff-f6a3-80464a1e973d'; -2020-10-27 16:27:53;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('e6dbfb03-f6f3-110e-f134-5f4c0799bcd1','fc492a95-b13b-d370-a24f-82646bf3503c',date('2020-10-21'),'2020-10-21 17:56:23') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-21 22:38:18' where stamp_out is null and id='e6dbfb03-f6f3-110e-f134-5f4c0799bcd1'; -2020-10-27 16:27:53;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('46dc5d9d-99c9-9ac5-dabf-74f27ac6afa1','62603801-4585-1d21-9663-def6191e3807',date('2020-10-21'),'2020-10-21 18:00:38') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-21 22:15:55' where stamp_out is null and id='46dc5d9d-99c9-9ac5-dabf-74f27ac6afa1'; -2020-10-27 16:27:53;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('0d3897fa-7977-8eff-699d-dea3f3326311','793c634b-6c76-2fc6-6023-ef603c84ae60',date('2020-10-21'),'2020-10-21 18:58:56') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-21 22:14:53' where stamp_out is null and id='0d3897fa-7977-8eff-699d-dea3f3326311'; -2020-10-27 16:27:53;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('02852617-f3ca-db05-e5ed-fe96404cf768','4a3bb07c-f2aa-7fee-db90-de10fafc2d03',date('2020-10-21'),'2020-10-21 18:59:04') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-22 00:16:56' where stamp_out is null and id='02852617-f3ca-db05-e5ed-fe96404cf768'; -2020-10-27 16:27:53;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('5b9bb76d-cca1-c24b-e119-4d6009dc972b','9aadd185-7b1d-f8f7-5d9b-2fca4931fe5e',date('2020-10-22'),'2020-10-22 09:42:18') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-22 14:31:26' where stamp_out is null and id='5b9bb76d-cca1-c24b-e119-4d6009dc972b'; -2020-10-27 16:27:53;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('0948dc6b-9a54-c582-cf7f-7f73f2844f0b','fc492a95-b13b-d370-a24f-82646bf3503c',date('2020-10-22'),'2020-10-22 09:55:35') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-22 14:36:09' where stamp_out is null and id='0948dc6b-9a54-c582-cf7f-7f73f2844f0b'; -2020-10-27 16:27:53;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('71cfb3f3-b2f8-632b-19e6-3c237c56a34f','62603801-4585-1d21-9663-def6191e3807',date('2020-10-22'),'2020-10-22 09:59:34') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-22 14:14:02' where stamp_out is null and id='71cfb3f3-b2f8-632b-19e6-3c237c56a34f'; -2020-10-27 16:27:53;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('46d11185-411f-10d1-240a-f8137da5633c','b18d96e8-22cb-9fcd-9f29-18d1ddd0369b',date('2020-10-22'),'2020-10-22 10:23:54') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-22 14:13:21' where stamp_out is null and id='46d11185-411f-10d1-240a-f8137da5633c'; -2020-10-27 16:27:53;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('3bceaeef-f435-3f14-5e0f-e9961403969e','4a3bb07c-f2aa-7fee-db90-de10fafc2d03',date('2020-10-22'),'2020-10-22 12:02:26') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-22 14:48:55' where stamp_out is null and id='3bceaeef-f435-3f14-5e0f-e9961403969e'; -2020-10-27 16:27:53;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('a1af1b38-0f11-9e78-4946-b0ca91105d6b','9aadd185-7b1d-f8f7-5d9b-2fca4931fe5e',date('2020-10-22'),'2020-10-22 17:37:57') on conflict on constraint timetracker_pkey do nothing; -2020-10-27 16:27:53;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('fc028e64-eae5-c285-b733-8f02359f2678','b18d96e8-22cb-9fcd-9f29-18d1ddd0369b',date('2020-10-22'),'2020-10-22 17:47:53') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-22 22:15:06' where stamp_out is null and id='fc028e64-eae5-c285-b733-8f02359f2678'; -2020-10-27 16:27:53;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('01917d4b-588e-2eb4-ae9d-5ee07761a81b','fc492a95-b13b-d370-a24f-82646bf3503c',date('2020-10-22'),'2020-10-22 18:01:25') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-22 22:11:59' where stamp_out is null and id='01917d4b-588e-2eb4-ae9d-5ee07761a81b'; -2020-10-27 16:27:53;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('7de06477-c1bb-3bb5-221e-8b83f7f9e952','62603801-4585-1d21-9663-def6191e3807',date('2020-10-22'),'2020-10-22 18:01:36') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-22 21:53:58' where stamp_out is null and id='7de06477-c1bb-3bb5-221e-8b83f7f9e952'; -2020-10-27 16:27:53;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('6b7c1be2-4ad5-76d9-dd63-94d46eb8020c','9aadd185-7b1d-f8f7-5d9b-2fca4931fe5e',date('2020-10-23'),'2020-10-23 09:43:03') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-23 14:50:21' where stamp_out is null and id='6b7c1be2-4ad5-76d9-dd63-94d46eb8020c'; -2020-10-27 16:27:53;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('300ac5e4-2792-f999-5f74-e0166709c2d9','62603801-4585-1d21-9663-def6191e3807',date('2020-10-23'),'2020-10-23 09:52:32') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-23 14:26:21' where stamp_out is null and id='300ac5e4-2792-f999-5f74-e0166709c2d9'; -2020-10-27 16:27:53;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('aaee6eb7-2280-fafe-7420-2bee1e8116a9','fc492a95-b13b-d370-a24f-82646bf3503c',date('2020-10-23'),'2020-10-23 10:02:28') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-23 14:49:18' where stamp_out is null and id='aaee6eb7-2280-fafe-7420-2bee1e8116a9'; -2020-10-27 16:27:53;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('b1593ce0-693b-52c5-ce3b-9a0282750200','b18d96e8-22cb-9fcd-9f29-18d1ddd0369b',date('2020-10-23'),'2020-10-23 10:18:53') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-23 15:06:44' where stamp_out is null and id='b1593ce0-693b-52c5-ce3b-9a0282750200'; -2020-10-27 16:27:53;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('bf712fc4-dd46-49ec-4ceb-9c5624700794','4a3bb07c-f2aa-7fee-db90-de10fafc2d03',date('2020-10-23'),'2020-10-23 12:03:50') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-23 15:10:36' where stamp_out is null and id='bf712fc4-dd46-49ec-4ceb-9c5624700794'; -2020-10-27 16:27:53;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('a059723d-d955-d571-4b55-83a84574da6d','4b858c8a-eb14-931c-9178-76c8ab37acd6',date('2020-10-23'),'2020-10-23 15:48:06') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-24 00:32:19' where stamp_out is null and id='a059723d-d955-d571-4b55-83a84574da6d'; -2020-10-27 16:27:53;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('3f6abfba-e345-472e-30de-017f4b835f46','62603801-4585-1d21-9663-def6191e3807',date('2020-10-23'),'2020-10-23 17:52:50') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-23 22:55:01' where stamp_out is null and id='3f6abfba-e345-472e-30de-017f4b835f46'; -2020-10-27 16:27:53;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('5726a991-a35d-ad25-2de1-91ff9010edef','b18d96e8-22cb-9fcd-9f29-18d1ddd0369b',date('2020-10-23'),'2020-10-23 17:57:12') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-24 00:27:06' where stamp_out is null and id='5726a991-a35d-ad25-2de1-91ff9010edef'; -2020-10-27 16:27:53;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('a32bb7ee-5793-18f3-cae1-8ea9b1a8d8dd','fc492a95-b13b-d370-a24f-82646bf3503c',date('2020-10-23'),'2020-10-23 17:58:46') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-23 23:38:06' where stamp_out is null and id='a32bb7ee-5793-18f3-cae1-8ea9b1a8d8dd'; -2020-10-27 16:27:53;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('c11ef676-d9cc-dfbe-8a05-420d4b16d938','793c634b-6c76-2fc6-6023-ef603c84ae60',date('2020-10-23'),'2020-10-23 18:58:42') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-23 22:57:52' where stamp_out is null and id='c11ef676-d9cc-dfbe-8a05-420d4b16d938'; -2020-10-27 16:27:53;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('c00c99f3-212b-2f1f-dfff-93b400a55338','4a3bb07c-f2aa-7fee-db90-de10fafc2d03',date('2020-10-23'),'2020-10-23 19:00:37') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-24 00:29:26' where stamp_out is null and id='c00c99f3-212b-2f1f-dfff-93b400a55338'; -2020-10-27 16:27:53;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('f423638b-6de9-1b42-2b32-de43ae8214df','4b858c8a-eb14-931c-9178-76c8ab37acd6',date('2020-10-24'),'2020-10-24 15:49:03') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-25 00:14:43' where stamp_out is null and id='f423638b-6de9-1b42-2b32-de43ae8214df'; -2020-10-27 16:27:53;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('0fa80c8b-4336-67ac-7486-b4128203b9a5','62603801-4585-1d21-9663-def6191e3807',date('2020-10-24'),'2020-10-24 16:52:50') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-24 22:48:42' where stamp_out is null and id='0fa80c8b-4336-67ac-7486-b4128203b9a5'; -2020-10-27 16:27:53;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('0018ab99-bf30-52a0-473a-373a50aea56c','b18d96e8-22cb-9fcd-9f29-18d1ddd0369b',date('2020-10-24'),'2020-10-24 17:21:25') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-25 00:13:43' where stamp_out is null and id='0018ab99-bf30-52a0-473a-373a50aea56c'; -2020-10-27 16:27:53;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('9a4240af-a7bb-b38d-e52b-95451d3cbfb0','4a3bb07c-f2aa-7fee-db90-de10fafc2d03',date('2020-10-24'),'2020-10-24 17:54:15') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-25 00:18:07' where stamp_out is null and id='9a4240af-a7bb-b38d-e52b-95451d3cbfb0'; -2020-10-27 16:27:53;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('a23f87bd-ee9a-c605-4f8c-2c6b5304d687','9aadd185-7b1d-f8f7-5d9b-2fca4931fe5e',date('2020-10-24'),'2020-10-24 17:55:29') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-24 22:22:39' where stamp_out is null and id='a23f87bd-ee9a-c605-4f8c-2c6b5304d687'; -2020-10-27 16:27:53;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('8455ba8a-bf81-c3f0-3504-27c333173bfe','793c634b-6c76-2fc6-6023-ef603c84ae60',date('2020-10-24'),'2020-10-24 18:59:53') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-24 22:55:52' where stamp_out is null and id='8455ba8a-bf81-c3f0-3504-27c333173bfe'; -2020-10-27 16:27:53;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('152b6299-7a7c-14fb-2be4-9d1c60e7b1c3','fc492a95-b13b-d370-a24f-82646bf3503c',date('2020-10-24'),'2020-10-24 23:32:26') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-24 23:32:38' where stamp_out is null and id='152b6299-7a7c-14fb-2be4-9d1c60e7b1c3'; -2020-10-27 16:27:53;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('5e0b2732-e61e-6354-6d8c-bbc4f6fb8cd2','9aadd185-7b1d-f8f7-5d9b-2fca4931fe5e',date('2020-10-26'),'2020-10-26 09:22:18') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-26 14:20:16' where stamp_out is null and id='5e0b2732-e61e-6354-6d8c-bbc4f6fb8cd2'; -2020-10-27 16:27:53;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('5cbfdca5-8568-f516-5241-0ea90b0f1e05','fc492a95-b13b-d370-a24f-82646bf3503c',date('2020-10-26'),'2020-10-26 09:54:43') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-26 14:20:36' where stamp_out is null and id='5cbfdca5-8568-f516-5241-0ea90b0f1e05'; -2020-10-27 16:27:53;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('89199ca5-8884-ed18-7d4d-2aa74f6400a8','62603801-4585-1d21-9663-def6191e3807',date('2020-10-26'),'2020-10-26 09:55:05') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-26 13:59:25' where stamp_out is null and id='89199ca5-8884-ed18-7d4d-2aa74f6400a8'; -2020-10-27 16:27:53;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('1222cede-29e5-d6b6-db3b-73eb410f1ff6','4a3bb07c-f2aa-7fee-db90-de10fafc2d03',date('2020-10-26'),'2020-10-26 10:29:17') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-26 14:16:00' where stamp_out is null and id='1222cede-29e5-d6b6-db3b-73eb410f1ff6'; -2020-10-27 16:27:53;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('57fb855e-7006-b8e3-f602-26cf70b736ad','b18d96e8-22cb-9fcd-9f29-18d1ddd0369b',date('2020-10-26'),'2020-10-26 11:44:41') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-26 14:56:00' where stamp_out is null and id='57fb855e-7006-b8e3-f602-26cf70b736ad'; -2020-10-27 16:27:53;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('495ef91a-07f2-76c1-b777-76fc1e27dea4','9aadd185-7b1d-f8f7-5d9b-2fca4931fe5e',date('2020-10-26'),'2020-10-26 17:16:10') on conflict on constraint timetracker_pkey do nothing; -2020-10-27 16:27:53;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('a2352a5f-33c7-1fbb-6afd-51a0a98646bc','62603801-4585-1d21-9663-def6191e3807',date('2020-10-26'),'2020-10-26 17:35:36') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-26 21:28:36' where stamp_out is null and id='a2352a5f-33c7-1fbb-6afd-51a0a98646bc'; -2020-10-27 16:27:53;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('fd4edbac-609b-7f31-8d27-b447eaf870fc','4a3bb07c-f2aa-7fee-db90-de10fafc2d03',date('2020-10-26'),'2020-10-26 17:57:27') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-26 18:43:54' where stamp_out is null and id='fd4edbac-609b-7f31-8d27-b447eaf870fc'; -2020-10-27 16:27:53;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('3d5b3bcc-a50d-68ce-13f7-63b972e64966','b18d96e8-22cb-9fcd-9f29-18d1ddd0369b',date('2020-10-26'),'2020-10-26 18:28:49') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-26 22:43:35' where stamp_out is null and id='3d5b3bcc-a50d-68ce-13f7-63b972e64966'; -2020-10-27 16:27:53;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('85cf2689-a643-7095-c685-7084e2a8c252','62603801-4585-1d21-9663-def6191e3807',date('2020-10-27'),'2020-10-27 09:48:27') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-27 14:00:43' where stamp_out is null and id='85cf2689-a643-7095-c685-7084e2a8c252'; -2020-10-27 16:27:53;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('f8e15317-a99f-6dd9-16ee-37a3b9c4b839','fc492a95-b13b-d370-a24f-82646bf3503c',date('2020-10-27'),'2020-10-27 09:50:23') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-27 14:17:12' where stamp_out is null and id='f8e15317-a99f-6dd9-16ee-37a3b9c4b839'; -2020-10-27 16:27:54;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('7be257e7-2905-79ab-cdd0-92b30906f814','9aadd185-7b1d-f8f7-5d9b-2fca4931fe5e',date('2020-10-27'),'2020-10-27 09:56:49') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-27 14:17:35' where stamp_out is null and id='7be257e7-2905-79ab-cdd0-92b30906f814'; -2020-10-27 16:27:54;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('7b9999cc-16d6-7571-108b-c0ceae07afb5','4a3bb07c-f2aa-7fee-db90-de10fafc2d03',date('2020-10-27'),'2020-10-27 10:24:18') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-27 14:43:51' where stamp_out is null and id='7b9999cc-16d6-7571-108b-c0ceae07afb5'; -2020-10-27 16:27:54;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('273448e8-b0f9-8875-79a7-86c4d4bdeb68','b18d96e8-22cb-9fcd-9f29-18d1ddd0369b',date('2020-10-27'),'2020-10-27 11:55:55') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-27 14:13:26' where stamp_out is null and id='273448e8-b0f9-8875-79a7-86c4d4bdeb68'; -2020-10-27 16:27:54;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('e730c5ec-fab6-b79e-cffc-77377e56485f','793c634b-6c76-2fc6-6023-ef603c84ae60',date('2020-10-27'),'2020-10-27 11:58:20') on conflict on constraint timetracker_pkey do nothing;UPDATE elch.timetracker set stamp_out='2020-10-27 14:15:13' where stamp_out is null and id='e730c5ec-fab6-b79e-cffc-77377e56485f'; -2020-10-27 16:27:54;pot;syncup;sql;INSERT INTO elch.timetracker (id,id_staff,daydate,stamp_in) VALUES ('57b8b3b9-1cde-30fe-e676-c7ed1893ff24','4b858c8a-eb14-931c-9178-76c8ab37acd6',date('2020-10-27'),'2020-10-27 14:48:00') on conflict on constraint timetracker_pkey do nothing; diff --git a/vpn/DKS-VPN-dbs-hourtrax.ovpn b/vpn/DKS-VPN-dbs-hourtrax.ovpn new file mode 100644 index 0000000..f5b5d7e --- /dev/null +++ b/vpn/DKS-VPN-dbs-hourtrax.ovpn @@ -0,0 +1,153 @@ +client +dev tun +proto udp +remote vsrv01.dks.lu 1098 +remote arandks.lu 1098 + +remote-random +resolv-retry infinite +nobind +persist-key +persist-tun +mute-replay-warnings + +-----BEGIN CERTIFICATE----- +MIIDHjCCAgagAwIBAgIJAK61AhpxApOUMA0GCSqGSIb3DQEBCwUAMA8xDTALBgNV +BAMMBGFyYW4wHhcNMTcxMjE4MTM0MTIyWhcNMjcxMjE2MTM0MTIyWjAPMQ0wCwYD +VQQDDARhcmFuMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1TydPk4X +8YyPjXI0htiMsM9C5jP0iH/Hgl7w+t0NL6fvcJhwy8BntJ/FRlS/GFoszmH+0zSt +pVeymgEwSQ2SrZixSkln2XhbTIH/NUEHosdllECJgj83W0Kpbtms8Cs6/FfhvMB4 +4o/GnN/mkmA9kslguStksV2vQh98Os9rw5gEKM5qFYO5FYUZIIrcsLgyzztPpw4H +vhrAzxuuu+zg9cOGAihlWV+CSlQJDZyC9hH9xal8UsTlYn9HFqVjr39k7OJg0WC6 +gyjQ92nzqEw49Jkb3NMAarF0zPcP25WV97Aq7EDZV/G8LZbg4p+xCrkz2iUJttu1 +CZjhS9uNsvIAYQIDAQABo30wezAdBgNVHQ4EFgQUqVEvl+MVxdWqNx36igfxqjrJ +f9QwPwYDVR0jBDgwNoAUqVEvl+MVxdWqNx36igfxqjrJf9ShE6QRMA8xDTALBgNV +BAMMBGFyYW6CCQCutQIacQKTlDAMBgNVHRMEBTADAQH/MAsGA1UdDwQEAwIBBjAN +BgkqhkiG9w0BAQsFAAOCAQEAysh4aGsnv4CebGvzZ9mZlmK5o4JTj4bqRw8sFe4h +wW/bZ0ggMnnvNZF1VJJgO/UQQq2gIiOw7zLrlSmPHIhRPkQspemk6uU0m2h6K9rn +AnX3qeVP5dXbZsqr1jI1/aCzxSW5hu6WUfR3Q+u1pGm9HePhrRJj0djW8Kd7UO+s +PfpIN9gbfLoLnAfCJIc3BccBoD5IqU4s7vleekQGCJHloT5S3MefiIUg7d8leW4V +8PiCohkgHwMOZy3ACy1ZPuT92x+7JCaNV56X7iT3GZhkyQ4tSKu3UpMFkz8obYKw +8RrNsXXBRWgnuakkMY6wHJJZBPJn+qDrWbO7nxVTOqY22g== +-----END CERTIFICATE----- + + +Certificate: + Data: + Version: 3 (0x2) + Serial Number: + be:8b:8f:9b:b2:f9:6b:8b:12:b5:6e:d1:f2:a3:dc:f4 + Signature Algorithm: sha256WithRSAEncryption + Issuer: CN=aran + Validity + Not Before: Nov 7 10:59:12 2019 GMT + Not After : Nov 4 10:59:12 2029 GMT + Subject: CN=dbs-hourtrax + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + Public-Key: (2048 bit) + Modulus: + 00:c1:64:7f:84:7c:1d:b0:45:11:12:22:46:3d:9d: + 85:29:c6:8b:5b:20:7a:3c:56:92:9f:d4:02:4a:b6: + 3f:1d:08:6b:e9:cd:21:54:24:3e:c7:38:51:db:09: + 75:0a:1a:b1:d8:dd:a2:e7:1e:c3:dd:78:ee:6c:d6: + c4:cf:65:3b:0f:42:3d:d5:c0:67:ca:8c:37:55:03: + a5:32:45:58:ed:65:b4:ae:74:0f:99:9a:23:3e:1a: + f7:b4:64:52:86:8f:17:ff:98:d8:d9:b8:82:5f:ba: + 22:9b:10:ba:19:0c:36:c9:82:54:99:20:7a:c8:1b: + d6:84:db:39:79:2e:0c:ac:a1:d0:18:ac:e8:47:c3: + 41:bf:80:32:d6:2c:b5:e4:2a:bf:cf:61:56:92:90: + 6a:df:92:74:52:52:1d:3e:14:b0:fd:55:5a:41:a5: + de:7e:2d:cf:7a:04:a6:44:4a:a9:f2:fe:60:2a:89: + 0c:53:a5:69:f8:92:8c:6c:de:24:1a:6c:cc:f9:43: + 26:71:9d:cc:f0:d1:3c:75:3f:b6:bf:c5:9a:02:06: + d4:49:f8:3c:e2:58:72:5c:86:9a:dc:0a:61:ef:92: + 35:9b:ff:33:86:6b:48:fe:40:b6:e9:a6:9f:1b:25: + 12:78:dc:81:83:64:cb:ba:b9:8c:4e:90:52:cc:f9: + 80:51 + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 Basic Constraints: + CA:FALSE + X509v3 Subject Key Identifier: + A9:A4:B5:C8:AA:D9:EA:BF:59:D3:C4:6E:0C:A1:43:92:E7:DF:0E:EC + X509v3 Authority Key Identifier: + keyid:A9:51:2F:97:E3:15:C5:D5:AA:37:1D:FA:8A:07:F1:AA:3A:C9:7F:D4 + DirName:/CN=aran + serial:AE:B5:02:1A:71:02:93:94 + + X509v3 Extended Key Usage: + TLS Web Client Authentication + X509v3 Key Usage: + Digital Signature + Signature Algorithm: sha256WithRSAEncryption + 0f:e0:45:49:d3:96:90:7d:d7:8f:4d:35:b3:7e:f4:b3:4b:af: + 4c:97:68:25:d7:3b:48:cc:9b:e4:4b:d5:61:bd:a8:f0:d5:df: + 60:b0:c1:c0:cc:1a:39:b4:49:b4:dc:39:41:52:1a:10:22:2a: + 7e:04:64:83:6a:b2:af:76:69:c5:5a:74:e0:26:97:23:df:d7: + 23:a1:34:e4:35:74:4b:f8:59:47:44:91:6f:31:dc:0f:05:96: + f0:76:2d:47:b6:28:cf:f6:a6:9b:ae:32:d0:54:84:0b:d7:f0: + cf:b5:e5:ed:19:1a:72:df:db:b9:fb:82:93:e3:ee:aa:09:c0: + dd:71:82:d4:9d:c0:6b:82:63:58:fa:0f:5b:5d:c3:f7:86:44: + b5:be:21:37:cf:3e:5b:82:b5:e7:46:fe:c3:03:94:a4:49:27: + df:ab:f6:79:39:1a:4f:4c:db:0b:4d:bc:72:c8:80:36:16:b0: + c0:52:53:52:75:86:9c:04:10:04:fc:8b:be:40:91:61:81:f6: + 07:6b:a5:89:db:b1:7a:eb:50:19:ad:39:8a:a3:da:bd:f6:ed: + d7:70:e7:43:c9:df:3c:28:49:ce:ac:5c:94:1f:b1:54:c3:69: + da:f2:f7:36:a4:8e:a3:98:e8:ee:9e:59:03:90:69:08:22:1b: + bc:48:b3:b6 +-----BEGIN CERTIFICATE----- +MIIDQjCCAiqgAwIBAgIRAL6Lj5uy+WuLErVu0fKj3PQwDQYJKoZIhvcNAQELBQAw +DzENMAsGA1UEAwwEYXJhbjAeFw0xOTExMDcxMDU5MTJaFw0yOTExMDQxMDU5MTJa +MBcxFTATBgNVBAMMDGRicy1ob3VydHJheDCCASIwDQYJKoZIhvcNAQEBBQADggEP +ADCCAQoCggEBAMFkf4R8HbBFERIiRj2dhSnGi1sgejxWkp/UAkq2Px0Ia+nNIVQk +Psc4UdsJdQoasdjdoucew9147mzWxM9lOw9CPdXAZ8qMN1UDpTJFWO1ltK50D5ma +Iz4a97RkUoaPF/+Y2Nm4gl+6IpsQuhkMNsmCVJkgesgb1oTbOXkuDKyh0Bis6EfD +Qb+AMtYsteQqv89hVpKQat+SdFJSHT4UsP1VWkGl3n4tz3oEpkRKqfL+YCqJDFOl +afiSjGzeJBpszPlDJnGdzPDRPHU/tr/FmgIG1En4POJYclyGmtwKYe+SNZv/M4Zr +SP5AtummnxslEnjcgYNky7q5jE6QUsz5gFECAwEAAaOBkDCBjTAJBgNVHRMEAjAA +MB0GA1UdDgQWBBSppLXIqtnqv1nTxG4MoUOS598O7DA/BgNVHSMEODA2gBSpUS+X +4xXF1ao3HfqKB/GqOsl/1KETpBEwDzENMAsGA1UEAwwEYXJhboIJAK61AhpxApOU +MBMGA1UdJQQMMAoGCCsGAQUFBwMCMAsGA1UdDwQEAwIHgDANBgkqhkiG9w0BAQsF +AAOCAQEAD+BFSdOWkH3Xj001s370s0uvTJdoJdc7SMyb5EvVYb2o8NXfYLDBwMwa +ObRJtNw5QVIaECIqfgRkg2qyr3ZpxVp04CaXI9/XI6E05DV0S/hZR0SRbzHcDwWW +8HYtR7Yoz/amm64y0FSEC9fwz7Xl7Rkact/bufuCk+PuqgnA3XGC1J3Aa4JjWPoP +W13D94ZEtb4hN88+W4K150b+wwOUpEkn36v2eTkaT0zbC028csiANhawwFJTUnWG +nAQQBPyLvkCRYYH2B2uliduxeutQGa05iqPavfbt13DnQ8nfPChJzqxclB+xVMNp +2vL3NqSOo5jo7p5ZA5BpCCIbvEiztg== +-----END CERTIFICATE----- + + +-----BEGIN PRIVATE KEY----- +MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDBZH+EfB2wRRES +IkY9nYUpxotbIHo8VpKf1AJKtj8dCGvpzSFUJD7HOFHbCXUKGrHY3aLnHsPdeO5s +1sTPZTsPQj3VwGfKjDdVA6UyRVjtZbSudA+ZmiM+Gve0ZFKGjxf/mNjZuIJfuiKb +ELoZDDbJglSZIHrIG9aE2zl5LgysodAYrOhHw0G/gDLWLLXkKr/PYVaSkGrfknRS +Uh0+FLD9VVpBpd5+Lc96BKZESqny/mAqiQxTpWn4koxs3iQabMz5QyZxnczw0Tx1 +P7a/xZoCBtRJ+DziWHJchprcCmHvkjWb/zOGa0j+QLbppp8bJRJ43IGDZMu6uYxO +kFLM+YBRAgMBAAECggEAMBTyd1f8caTaV63Z1NvjDb3lS+TJP1Mu5Tnqz/R7wJYl +bl2n2amhShrAjzrMtJRqf0arh9boT5oPfVPwXrgGdQa9JPXPWFaAM0zSt6ryLyPI +Rk9oyYG/HWPLDjibJAVTrCKuV4M+NtqqW+9OtYeJ35PdwKyImlQBg8qVgYFneUva +SWu7SoTHxF3hT5RGOnAfkWtI+ep5sdxH7b9ptEkevRznahA0aysnFwaAcPTTQsX0 +E5hdTJzkWJ4hgEgyQCgzZMfJgCgGW/Uz2AxhnZhcPtK0lVEn8y/N0ZzTbWSaTMeu +5Wp9noVfIP7w7AWWknnVxKzrM4zSbOAysow549+OoQKBgQD8+LHVgikwZd0OTmVC +9GGaPtx5mMznNoH+DJv01EFd9UAGdg+NJfiRtC6dYAs3rFDprbk7ac5sjgepN229 +vHR7BPmWzZCMcoiMRotnVVyN9eAdZy0lYBqiQ7ZY5JSpg8sW2AQWUYE5BrLkkSI4 +YHuvKJE24SlvFJwDD5BiGN4dnQKBgQDDtTTZK5k3AgFSQj9USdZgJLnd7k2XY3au +3S3K13IuU4jcJ3kORGMVNBKwUdyGTHC1p3IBaiKj9rYXfU6sz55VNO/AOJgJmSg7 +VWHMuroWplO4jQuNFjbiVMoFCOYft4GuaZZzgjrS8ENJ3LxK81d3Ih+dtS3p1d4x +4ShHrgUJRQKBgQDm245u6nnsUQmLJMAEekEYIoXR8kAMQRIgZiFtLMb6l/X174gB +p8VQMr7Xn+6cwASXPJLuRYC8UGFta8gafwFNwxyDItXnVh6G5VoS0zPD2b7NFnt8 +wFeN/X1LYk7I5B1Sm5AfTgI/qH1ZWZmBGYvGLZ9YFeNaG9TEdk+tNkR9gQKBgCrY +pTVWgji0y61Cq7K8Z56s67RW083tDLLD4Z6jBHB4AWKRkcM53adquxy3D1ynp5Vd +j2wX3HWhMcR6vpq+6Z8l88dVnJOdYF19F+hGiS8kQvgIiRreXi22+nOXuyn+dvnE +TBgFzvMXfuPQ27hdBi0i32EbpW2oUPkCnlrzEk8xAoGAcLR9CGVUzUkJ83jpoqoB +O+hrzY9hLX3+HLnfAJjeNNk5LlSuDJbhjIRc/xAA/SAgayPMWy+7mp9gMFBV6O6n +9y8ag4sGSXasTBJuFJlQ1S80Ct5igx1aDFGQOjtBXPWGCjuLPJwgLDq0GcSrSf6W +Z+ygH5b1eq3wkGPVCvgJEqQ= +-----END PRIVATE KEY----- + +comp-lzo +verb 3 +mute 20 +cipher AES-256-CBC diff --git a/vpn/DKS-VPN-dhart-hourtrax01.ovpn b/vpn/DKS-VPN-dhart-hourtrax01.ovpn new file mode 100644 index 0000000..6c1ca36 --- /dev/null +++ b/vpn/DKS-VPN-dhart-hourtrax01.ovpn @@ -0,0 +1,153 @@ +client +dev tun +proto udp +remote vsrv01.dks.lu 1098 +remote arandks.lu 1098 + +remote-random +resolv-retry infinite +nobind +persist-key +persist-tun +mute-replay-warnings + +-----BEGIN CERTIFICATE----- +MIIDHjCCAgagAwIBAgIJAK61AhpxApOUMA0GCSqGSIb3DQEBCwUAMA8xDTALBgNV +BAMMBGFyYW4wHhcNMTcxMjE4MTM0MTIyWhcNMjcxMjE2MTM0MTIyWjAPMQ0wCwYD +VQQDDARhcmFuMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1TydPk4X +8YyPjXI0htiMsM9C5jP0iH/Hgl7w+t0NL6fvcJhwy8BntJ/FRlS/GFoszmH+0zSt +pVeymgEwSQ2SrZixSkln2XhbTIH/NUEHosdllECJgj83W0Kpbtms8Cs6/FfhvMB4 +4o/GnN/mkmA9kslguStksV2vQh98Os9rw5gEKM5qFYO5FYUZIIrcsLgyzztPpw4H +vhrAzxuuu+zg9cOGAihlWV+CSlQJDZyC9hH9xal8UsTlYn9HFqVjr39k7OJg0WC6 +gyjQ92nzqEw49Jkb3NMAarF0zPcP25WV97Aq7EDZV/G8LZbg4p+xCrkz2iUJttu1 +CZjhS9uNsvIAYQIDAQABo30wezAdBgNVHQ4EFgQUqVEvl+MVxdWqNx36igfxqjrJ +f9QwPwYDVR0jBDgwNoAUqVEvl+MVxdWqNx36igfxqjrJf9ShE6QRMA8xDTALBgNV +BAMMBGFyYW6CCQCutQIacQKTlDAMBgNVHRMEBTADAQH/MAsGA1UdDwQEAwIBBjAN +BgkqhkiG9w0BAQsFAAOCAQEAysh4aGsnv4CebGvzZ9mZlmK5o4JTj4bqRw8sFe4h +wW/bZ0ggMnnvNZF1VJJgO/UQQq2gIiOw7zLrlSmPHIhRPkQspemk6uU0m2h6K9rn +AnX3qeVP5dXbZsqr1jI1/aCzxSW5hu6WUfR3Q+u1pGm9HePhrRJj0djW8Kd7UO+s +PfpIN9gbfLoLnAfCJIc3BccBoD5IqU4s7vleekQGCJHloT5S3MefiIUg7d8leW4V +8PiCohkgHwMOZy3ACy1ZPuT92x+7JCaNV56X7iT3GZhkyQ4tSKu3UpMFkz8obYKw +8RrNsXXBRWgnuakkMY6wHJJZBPJn+qDrWbO7nxVTOqY22g== +-----END CERTIFICATE----- + + +Certificate: + Data: + Version: 3 (0x2) + Serial Number: + 77:af:a0:10:be:9e:06:bd:43:fe:d0:5f:c0:3f:79:66 + Signature Algorithm: sha256WithRSAEncryption + Issuer: CN=aran + Validity + Not Before: Jan 13 15:13:04 2021 GMT + Not After : Jan 11 15:13:04 2031 GMT + Subject: CN=dhart-hourtrax01 + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + Public-Key: (2048 bit) + Modulus: + 00:b4:38:00:8e:31:7b:f6:56:cf:5a:ec:8a:96:77: + c1:89:d2:8d:4f:d8:8f:c7:73:05:37:7e:05:81:51: + 2e:81:34:3c:5a:2a:42:87:f8:80:d6:9a:4c:6b:80: + c1:50:4a:22:a8:dd:79:89:b3:1c:a6:5f:e4:5e:b6: + 02:a0:5f:49:09:03:13:e0:bf:c8:4a:1f:88:45:f7: + 58:e9:56:5c:e1:cd:b5:5e:f8:70:24:39:cd:e4:fd: + fc:60:44:5c:68:2c:4d:76:cf:9f:9a:5a:5e:01:8c: + 55:aa:76:6c:fe:95:a6:e8:d2:b3:9b:66:25:39:4e: + 32:1a:9b:db:79:bf:92:12:06:92:b7:e9:60:cf:d6: + c8:10:f7:d0:c4:3b:7e:32:cb:91:c5:c8:b8:d5:03: + 2f:3b:a1:76:2d:3d:76:f2:3d:e9:bf:b2:91:82:6f: + bc:dc:44:a3:93:68:b5:42:a4:fc:49:cc:93:2e:52: + c7:90:5e:f0:0a:e3:f8:55:f9:4f:4f:2b:51:e7:38: + d9:49:a3:1d:a2:c5:de:76:35:24:f7:32:7f:8f:56: + 68:33:a0:8d:98:bf:2a:1e:1c:88:4f:64:8a:06:b2: + 26:c1:64:56:3b:92:40:5d:37:03:03:0e:10:b9:5e: + 2e:e3:02:32:16:c5:74:c4:40:40:4a:fd:31:e1:0d: + 9f:1b + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 Basic Constraints: + CA:FALSE + X509v3 Subject Key Identifier: + D3:05:48:E6:F9:CC:20:1B:19:A5:3E:A5:7C:18:31:AA:F5:30:23:FF + X509v3 Authority Key Identifier: + keyid:A9:51:2F:97:E3:15:C5:D5:AA:37:1D:FA:8A:07:F1:AA:3A:C9:7F:D4 + DirName:/CN=aran + serial:AE:B5:02:1A:71:02:93:94 + + X509v3 Extended Key Usage: + TLS Web Client Authentication + X509v3 Key Usage: + Digital Signature + Signature Algorithm: sha256WithRSAEncryption + 8a:6a:80:62:5c:6f:34:b4:c9:94:ff:2e:a2:b1:40:de:28:7f: + 73:0e:8f:8b:6f:6d:f3:96:30:95:7d:9d:e2:a8:f0:e9:86:2d: + 72:27:08:d6:51:ba:a7:0f:a6:a9:c8:85:b0:c3:3a:4e:62:c3: + 3d:22:f9:19:14:41:a6:e0:5d:6c:a7:a4:3a:0e:f5:91:c6:e7: + ae:a8:ac:74:ca:c8:df:08:e7:a9:a1:9c:1c:69:ef:f6:de:23: + 0a:6f:5c:62:7d:3e:30:e1:d1:dc:59:c4:54:e8:69:fc:52:51: + d5:22:d7:9e:ba:15:5d:28:a8:00:6b:3f:4c:61:3c:f8:ba:4e: + 0b:be:15:5f:7c:a0:f7:d9:c0:eb:00:15:6d:59:87:ee:d1:56: + c3:9f:3d:eb:ce:c0:aa:5e:d4:08:f1:d4:48:52:92:a5:31:25: + 1c:57:0c:f2:86:ec:d1:7a:b5:3d:d7:71:17:de:de:e6:2e:08: + 97:a3:4a:63:1b:a9:0e:00:bd:d9:1f:b8:df:84:55:e0:f1:a9: + ce:d7:8e:5b:ca:3d:a5:60:11:c0:f2:11:b8:33:6e:fb:20:57: + d2:02:ab:4b:32:61:52:29:7e:b4:fa:1e:e6:35:17:6d:9f:08: + a2:c7:f1:f7:1f:e7:fd:23:bd:e2:41:d7:a0:6a:4b:6c:05:76: + 2b:c7:9f:f1 +-----BEGIN CERTIFICATE----- +MIIDRTCCAi2gAwIBAgIQd6+gEL6eBr1D/tBfwD95ZjANBgkqhkiG9w0BAQsFADAP +MQ0wCwYDVQQDDARhcmFuMB4XDTIxMDExMzE1MTMwNFoXDTMxMDExMTE1MTMwNFow +GzEZMBcGA1UEAwwQZGhhcnQtaG91cnRyYXgwMTCCASIwDQYJKoZIhvcNAQEBBQAD +ggEPADCCAQoCggEBALQ4AI4xe/ZWz1rsipZ3wYnSjU/Yj8dzBTd+BYFRLoE0PFoq +Qof4gNaaTGuAwVBKIqjdeYmzHKZf5F62AqBfSQkDE+C/yEofiEX3WOlWXOHNtV74 +cCQ5zeT9/GBEXGgsTXbPn5paXgGMVap2bP6VpujSs5tmJTlOMhqb23m/khIGkrfp +YM/WyBD30MQ7fjLLkcXIuNUDLzuhdi09dvI96b+ykYJvvNxEo5NotUKk/EnMky5S +x5Be8Arj+FX5T08rUec42UmjHaLF3nY1JPcyf49WaDOgjZi/Kh4ciE9kigayJsFk +VjuSQF03AwMOELleLuMCMhbFdMRAQEr9MeENnxsCAwEAAaOBkDCBjTAJBgNVHRME +AjAAMB0GA1UdDgQWBBTTBUjm+cwgGxmlPqV8GDGq9TAj/zA/BgNVHSMEODA2gBSp +US+X4xXF1ao3HfqKB/GqOsl/1KETpBEwDzENMAsGA1UEAwwEYXJhboIJAK61Ahpx +ApOUMBMGA1UdJQQMMAoGCCsGAQUFBwMCMAsGA1UdDwQEAwIHgDANBgkqhkiG9w0B +AQsFAAOCAQEAimqAYlxvNLTJlP8uorFA3ih/cw6Pi29t85YwlX2d4qjw6YYtcicI +1lG6pw+mqciFsMM6TmLDPSL5GRRBpuBdbKekOg71kcbnrqisdMrI3wjnqaGcHGnv +9t4jCm9cYn0+MOHR3FnEVOhp/FJR1SLXnroVXSioAGs/TGE8+LpOC74VX3yg99nA +6wAVbVmH7tFWw589687Aql7UCPHUSFKSpTElHFcM8obs0Xq1PddxF97e5i4Il6NK +YxupDgC92R+434RV4PGpzteOW8o9pWARwPIRuDNu+yBX0gKrSzJhUil+tPoe5jUX +bZ8Iosfx9x/n/SO94kHXoGpLbAV2K8ef8Q== +-----END CERTIFICATE----- + + +-----BEGIN PRIVATE KEY----- +MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC0OACOMXv2Vs9a +7IqWd8GJ0o1P2I/HcwU3fgWBUS6BNDxaKkKH+IDWmkxrgMFQSiKo3XmJsxymX+Re +tgKgX0kJAxPgv8hKH4hF91jpVlzhzbVe+HAkOc3k/fxgRFxoLE12z5+aWl4BjFWq +dmz+labo0rObZiU5TjIam9t5v5ISBpK36WDP1sgQ99DEO34yy5HFyLjVAy87oXYt +PXbyPem/spGCb7zcRKOTaLVCpPxJzJMuUseQXvAK4/hV+U9PK1HnONlJox2ixd52 +NST3Mn+PVmgzoI2YvyoeHIhPZIoGsibBZFY7kkBdNwMDDhC5Xi7jAjIWxXTEQEBK +/THhDZ8bAgMBAAECggEADs12xjcsTmyM9ZPuQjOt8usXblKEZMZ+zDMOsrN/VV98 +AY/tDQwNURM1abMWrciZFjOy0uuiU8wWjuz2REPvVM0q6c/23JfAcrbBV9EfKfDi +j91qIJ+a2M8/1oxm5quU5UhifKQlio0DUFAP3c1e+0qrM/1s20sf9G2O1m40ykQa +k4rIdKdnzXwasYsWnjjrx96En7PmkGkE4V8dk2YUTI7/7fVrI7tKaPjHbOdzVYkH +45MDsfn6bItUwdiOxP63AY4ThPFU1g/lkfCb8f+wWRJId8Hy5BW9/pVcdMCtRjbA +4uC++W/Emadskbm2fIsfWzYURDFdhNu7fZe8iu/qoQKBgQDmdm3G8oKj5azcuEnI +ZluzmgMVQpV0y+J7gqq4Y0VgS3iVApNweLguwUDg7Fu263S2Ec6cxuh75+6w1ofe +j9gi4SvIpnzcCct+uyfnjryfA+pBtGJz35e6SmBz/YRELC97y4C0HPZAhoeDPavt +TL2DnCpsNQ/7OLqy9Y3viBR6SwKBgQDIMEwvypkHo9rB8C5ip2lyjyb3BjSNSj5G +mLEiyNEUMgNFvUms09uuBQhgEzBjI9SiKMplbOJv1OGHW87QNz2wFLHYzekPjHuz +As6QptNDSNwrWI8PNibQlyFHcDYQjBZgH4ToEUIRLUkxb/UUboA9Z2YWt0IFESUv +TD7KwcRscQKBgHtm5pkkubcxAEKfm0JnLKsayJPVt1l24qrn6Koa3ccWIlcHrhMH +UPgYGrlVVja4FSJ4nn1sNIhERJcECHSv6TekAmHKZAkeZYxSgqeG0pEC86iDAkSx +cPkbYlI5aV1nm3VaHmxTJbifUGiB2VGTSdbzA/Q05X3Lfozc10dvQifJAoGBALNq +3g2DRc4cI+bnjZsrsg1TkbeZ3yW2ocQB+9hSJVk1TcuGT+7O3jfEGPKKoDZqmZtQ +db2bbgKOyCbZuKzSpb4XfiHywmwGG6Of42Svr+7A8VsD/wvCG92dZd0yC7Ke6zrx +ZNvdA9qDPPNLBVtvgg4Giu/XBRundy1B55EvQw1xAoGANOBb6VCblKtG4XBq6Nml +98+oBZoVBI4q6DvisKAYIBFBcNgneAJyg0gaGwTAT0WwOJKn+swIBXeqoyz4iZBY +JUm5fJv8vHgPP6g/w1rtXekhQvyJC1fQxcEQskzRPmv/DGh+b5cRW1vnA/Z3PweV +YdX6gbGaYtPdhVaZbDz+2ks= +-----END PRIVATE KEY----- + +comp-lzo +verb 3 +mute 20 +cipher AES-256-CBC diff --git a/vpn/DKS-VPN-dhart-hourtrax02.ovpn b/vpn/DKS-VPN-dhart-hourtrax02.ovpn new file mode 100644 index 0000000..159dec3 --- /dev/null +++ b/vpn/DKS-VPN-dhart-hourtrax02.ovpn @@ -0,0 +1,153 @@ +client +dev tun +proto udp +remote vsrv01.dks.lu 1098 +remote arandks.lu 1098 + +remote-random +resolv-retry infinite +nobind +persist-key +persist-tun +mute-replay-warnings + +-----BEGIN CERTIFICATE----- +MIIDHjCCAgagAwIBAgIJAK61AhpxApOUMA0GCSqGSIb3DQEBCwUAMA8xDTALBgNV +BAMMBGFyYW4wHhcNMTcxMjE4MTM0MTIyWhcNMjcxMjE2MTM0MTIyWjAPMQ0wCwYD +VQQDDARhcmFuMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1TydPk4X +8YyPjXI0htiMsM9C5jP0iH/Hgl7w+t0NL6fvcJhwy8BntJ/FRlS/GFoszmH+0zSt +pVeymgEwSQ2SrZixSkln2XhbTIH/NUEHosdllECJgj83W0Kpbtms8Cs6/FfhvMB4 +4o/GnN/mkmA9kslguStksV2vQh98Os9rw5gEKM5qFYO5FYUZIIrcsLgyzztPpw4H +vhrAzxuuu+zg9cOGAihlWV+CSlQJDZyC9hH9xal8UsTlYn9HFqVjr39k7OJg0WC6 +gyjQ92nzqEw49Jkb3NMAarF0zPcP25WV97Aq7EDZV/G8LZbg4p+xCrkz2iUJttu1 +CZjhS9uNsvIAYQIDAQABo30wezAdBgNVHQ4EFgQUqVEvl+MVxdWqNx36igfxqjrJ +f9QwPwYDVR0jBDgwNoAUqVEvl+MVxdWqNx36igfxqjrJf9ShE6QRMA8xDTALBgNV +BAMMBGFyYW6CCQCutQIacQKTlDAMBgNVHRMEBTADAQH/MAsGA1UdDwQEAwIBBjAN +BgkqhkiG9w0BAQsFAAOCAQEAysh4aGsnv4CebGvzZ9mZlmK5o4JTj4bqRw8sFe4h +wW/bZ0ggMnnvNZF1VJJgO/UQQq2gIiOw7zLrlSmPHIhRPkQspemk6uU0m2h6K9rn +AnX3qeVP5dXbZsqr1jI1/aCzxSW5hu6WUfR3Q+u1pGm9HePhrRJj0djW8Kd7UO+s +PfpIN9gbfLoLnAfCJIc3BccBoD5IqU4s7vleekQGCJHloT5S3MefiIUg7d8leW4V +8PiCohkgHwMOZy3ACy1ZPuT92x+7JCaNV56X7iT3GZhkyQ4tSKu3UpMFkz8obYKw +8RrNsXXBRWgnuakkMY6wHJJZBPJn+qDrWbO7nxVTOqY22g== +-----END CERTIFICATE----- + + +Certificate: + Data: + Version: 3 (0x2) + Serial Number: + fb:8e:c6:a9:ef:9e:17:b8:3a:86:ec:04:96:91:18:0b + Signature Algorithm: sha256WithRSAEncryption + Issuer: CN=aran + Validity + Not Before: Jan 13 15:13:10 2021 GMT + Not After : Jan 11 15:13:10 2031 GMT + Subject: CN=dhart-hourtrax02 + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + Public-Key: (2048 bit) + Modulus: + 00:c1:c4:ea:b8:e1:58:6f:94:cf:6a:ca:da:b3:b4: + b0:90:1c:70:11:62:c6:ea:6c:1a:59:af:f0:e7:41: + 92:82:13:4e:51:aa:74:a9:8e:63:bb:4b:cd:f3:31: + 36:4e:f9:a1:86:10:5f:91:74:b2:fe:0b:30:bc:a7: + f3:0e:55:71:9e:a0:b6:34:e8:a1:f7:36:bf:91:86: + 35:27:f1:ba:ef:e5:09:53:19:62:6c:e1:2a:14:be: + d3:bd:cb:4c:0b:5f:3f:15:b4:9f:97:3e:bd:fe:ab: + 79:37:fa:65:1a:c5:c2:ff:31:da:39:51:ea:9f:5d: + 80:6b:a9:56:1e:40:87:38:c7:59:59:6d:06:41:d2: + 53:11:ee:82:00:e8:b0:cc:a3:7f:8a:17:61:d6:e6: + 26:92:2e:0b:2d:24:5e:c5:30:c0:19:fb:0e:b7:5a: + b6:66:93:ad:5e:54:7b:65:f5:ec:1c:1d:b0:c1:df: + f2:bb:c6:57:1f:8d:3d:d1:9e:55:a0:63:a6:09:e6: + 2b:8f:11:87:9a:67:a7:8e:7c:91:d4:57:2b:57:f8: + a9:eb:fb:73:2d:37:28:e6:90:23:0f:a8:74:53:b1: + bc:b0:66:2b:15:21:e9:f9:b5:30:62:5c:45:86:95: + 2a:17:61:e2:9e:f9:2c:ca:e5:a4:38:c0:1e:5c:da: + 10:e1 + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 Basic Constraints: + CA:FALSE + X509v3 Subject Key Identifier: + FA:D7:5E:07:2F:91:5A:E7:38:D9:2A:5D:1D:F3:67:90:E9:A5:E0:67 + X509v3 Authority Key Identifier: + keyid:A9:51:2F:97:E3:15:C5:D5:AA:37:1D:FA:8A:07:F1:AA:3A:C9:7F:D4 + DirName:/CN=aran + serial:AE:B5:02:1A:71:02:93:94 + + X509v3 Extended Key Usage: + TLS Web Client Authentication + X509v3 Key Usage: + Digital Signature + Signature Algorithm: sha256WithRSAEncryption + 29:35:2e:99:f1:8f:bd:e7:74:a9:4c:62:e4:3d:8c:98:a1:ad: + 26:0f:05:49:86:62:d0:67:e0:70:eb:e4:85:79:02:68:e6:a3: + 29:3a:50:41:f5:59:98:14:de:62:12:74:4b:13:0d:02:3b:66: + 0e:a2:17:dc:7f:95:a3:2a:76:51:49:e9:3a:c7:5a:76:ce:61: + 74:06:b1:c6:7a:50:c6:a2:46:63:7e:4e:2b:1c:49:e1:25:ec: + 65:91:2e:13:10:54:c7:f2:36:d1:ed:61:64:a8:b4:72:38:5d: + 41:3e:fa:dd:79:cc:72:b3:13:4e:bd:9b:2b:85:c3:8d:bf:ba: + 90:0e:26:61:ab:2c:5e:48:ea:27:f6:3d:5e:49:06:9d:28:68: + 96:98:46:d1:2e:c9:6d:67:27:ff:0e:a6:43:e9:a2:cc:bb:35: + 1c:fa:ed:09:f5:3d:fe:97:58:ee:b7:86:0c:38:5a:ff:54:41: + b5:39:40:4b:5e:71:c3:bf:09:e7:bb:fe:ba:a0:8b:31:d8:6e: + c9:ea:ea:fc:da:85:f7:fd:0c:12:5f:09:7f:75:2b:29:a2:ba: + 5a:82:f1:ce:93:76:fe:e1:86:a2:d7:69:3a:e4:e6:e2:37:76: + 54:e6:90:b9:b3:1a:01:77:cf:4b:1f:a1:31:76:95:a1:38:b7: + f0:5b:be:d6 +-----BEGIN CERTIFICATE----- +MIIDRjCCAi6gAwIBAgIRAPuOxqnvnhe4OobsBJaRGAswDQYJKoZIhvcNAQELBQAw +DzENMAsGA1UEAwwEYXJhbjAeFw0yMTAxMTMxNTEzMTBaFw0zMTAxMTExNTEzMTBa +MBsxGTAXBgNVBAMMEGRoYXJ0LWhvdXJ0cmF4MDIwggEiMA0GCSqGSIb3DQEBAQUA +A4IBDwAwggEKAoIBAQDBxOq44VhvlM9qytqztLCQHHARYsbqbBpZr/DnQZKCE05R +qnSpjmO7S83zMTZO+aGGEF+RdLL+CzC8p/MOVXGeoLY06KH3Nr+RhjUn8brv5QlT +GWJs4SoUvtO9y0wLXz8VtJ+XPr3+q3k3+mUaxcL/Mdo5UeqfXYBrqVYeQIc4x1lZ +bQZB0lMR7oIA6LDMo3+KF2HW5iaSLgstJF7FMMAZ+w63WrZmk61eVHtl9ewcHbDB +3/K7xlcfjT3RnlWgY6YJ5iuPEYeaZ6eOfJHUVytX+Knr+3MtNyjmkCMPqHRTsbyw +ZisVIen5tTBiXEWGlSoXYeKe+SzK5aQ4wB5c2hDhAgMBAAGjgZAwgY0wCQYDVR0T +BAIwADAdBgNVHQ4EFgQU+tdeBy+RWuc42SpdHfNnkOml4GcwPwYDVR0jBDgwNoAU +qVEvl+MVxdWqNx36igfxqjrJf9ShE6QRMA8xDTALBgNVBAMMBGFyYW6CCQCutQIa +cQKTlDATBgNVHSUEDDAKBggrBgEFBQcDAjALBgNVHQ8EBAMCB4AwDQYJKoZIhvcN +AQELBQADggEBACk1Lpnxj73ndKlMYuQ9jJihrSYPBUmGYtBn4HDr5IV5Amjmoyk6 +UEH1WZgU3mISdEsTDQI7Zg6iF9x/laMqdlFJ6TrHWnbOYXQGscZ6UMaiRmN+Tisc +SeEl7GWRLhMQVMfyNtHtYWSotHI4XUE++t15zHKzE069myuFw42/upAOJmGrLF5I +6if2PV5JBp0oaJaYRtEuyW1nJ/8OpkPposy7NRz67Qn1Pf6XWO63hgw4Wv9UQbU5 +QEteccO/Cee7/rqgizHYbsnq6vzahff9DBJfCX91KymiulqC8c6Tdv7hhqLXaTrk +5uI3dlTmkLmzGgF3z0sfoTF2laE4t/BbvtY= +-----END CERTIFICATE----- + + +-----BEGIN PRIVATE KEY----- +MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDBxOq44VhvlM9q +ytqztLCQHHARYsbqbBpZr/DnQZKCE05RqnSpjmO7S83zMTZO+aGGEF+RdLL+CzC8 +p/MOVXGeoLY06KH3Nr+RhjUn8brv5QlTGWJs4SoUvtO9y0wLXz8VtJ+XPr3+q3k3 ++mUaxcL/Mdo5UeqfXYBrqVYeQIc4x1lZbQZB0lMR7oIA6LDMo3+KF2HW5iaSLgst +JF7FMMAZ+w63WrZmk61eVHtl9ewcHbDB3/K7xlcfjT3RnlWgY6YJ5iuPEYeaZ6eO +fJHUVytX+Knr+3MtNyjmkCMPqHRTsbywZisVIen5tTBiXEWGlSoXYeKe+SzK5aQ4 +wB5c2hDhAgMBAAECggEAB4rZtB6ZaaZ6OGbzAmG7KbDhr9uPcJqKoAkYMHg98rA7 +sTQYXG09dpHpz1iQC5zt66EBh1Dqkrbuy7kh3eH3jTwmO4L+ovfPlyOJOCfRpfrd +VQ285g4RrEMNTOr3581qUDb6q1F25c3Y5xPpEZS3FWXkX6zPnCpwkEBEKONMICqY +9PSDqUkyB74StXV3InWvIEakNPeSjggEPs/+dLXA9nzoSQBEudTefDRjNp9u/2G7 +RWjaWrfezugIUqSfYUCjc+X2Zqfz1TRIdCbZXu0gQd7BaaDyzsoE1ExIsqNDnGBS +upEoHttIOSPUZnJaKGuoLrxysFvxFSrdpL1tzpDAHQKBgQDpk7VXHpWzyoZkoO9g +Cq8ii24aK2+taDoM23mhNAWV76cdmSrvClWcgOv2cNT4V3oWJ5FtrCwWMKz4o1h1 +nmcWNg6gKlpYAxy5CTJq0yZuZLpiUQ83YM2IGLE2HrAPczjE72NPU7DmvvCWjW5o +oC5R3Oy/vcxznxqQupfToCfqvwKBgQDUXuix3gH8Atr5MctLWJowCm0FEyY9MVJl +zMaclKjwieB1ZGDHP/vNHozOHRrEuJ+5mP1bqISGTJ8eRsO3E4vlLIMeJcJGqAo9 +DaODpx/CkgAIWCbla8pOYfrspekD3yywagRLcmxjbPBmn8RbRFm8/khvxOmK/3FH +g97HYDcMXwKBgA08o7A2OYGg3pDhVe95a4dno2u0PnXzTCbiYTgzfIWMuUnCHl7B +lSxzWevzZP5V5sNOpr0yXqU7SPImP6MawPjPQ3DsNYZ7VqtdzA+lu63R44Yi1dvr +jnpB+/j3MD8P5o2yi0w5j/Ljqzq89R7UxQs6m+gZ13ZN8/FzwZrqnph9AoGAdZ6P +EBveS34lWwi6CGPtGZhcowflENUlRp5wjb5EBtzGBR5v/0qvof4+i9VQww1h4UAb +ak1eAKelJPaaZOYdf/L0N5lADTP6X7ATFNJV48RK4lQ4Tq4xYNIhUDnfYTaUoKxG +7qZT44ktaBkqfkXP0b2fzs9nbYVmbu5ZT2E5e88CgYBRJGWptWUucPG2PXMr5Shr +VKLRiS5P4Y1YE503RvheKnlC0AR7At7Hc8gJSvZ+oc4Q7kTnhqkrMu1GaCsHLKA7 +mnY4VH8EQwS2IO3PpwGYISi2Sq8rv8EDAF7C42YtZ03AJhGALIxQhu2bEoOvIg/R +2GvHapt2pttoDs9yUCanVQ== +-----END PRIVATE KEY----- + +comp-lzo +verb 3 +mute 20 +cipher AES-256-CBC diff --git a/vpn/DKS-VPN-dhart-hourtrax03.ovpn b/vpn/DKS-VPN-dhart-hourtrax03.ovpn new file mode 100644 index 0000000..298ddd2 --- /dev/null +++ b/vpn/DKS-VPN-dhart-hourtrax03.ovpn @@ -0,0 +1,153 @@ +client +dev tun +proto udp +remote vsrv01.dks.lu 1098 +remote arandks.lu 1098 + +remote-random +resolv-retry infinite +nobind +persist-key +persist-tun +mute-replay-warnings + +-----BEGIN CERTIFICATE----- +MIIDHjCCAgagAwIBAgIJAK61AhpxApOUMA0GCSqGSIb3DQEBCwUAMA8xDTALBgNV +BAMMBGFyYW4wHhcNMTcxMjE4MTM0MTIyWhcNMjcxMjE2MTM0MTIyWjAPMQ0wCwYD +VQQDDARhcmFuMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1TydPk4X +8YyPjXI0htiMsM9C5jP0iH/Hgl7w+t0NL6fvcJhwy8BntJ/FRlS/GFoszmH+0zSt +pVeymgEwSQ2SrZixSkln2XhbTIH/NUEHosdllECJgj83W0Kpbtms8Cs6/FfhvMB4 +4o/GnN/mkmA9kslguStksV2vQh98Os9rw5gEKM5qFYO5FYUZIIrcsLgyzztPpw4H +vhrAzxuuu+zg9cOGAihlWV+CSlQJDZyC9hH9xal8UsTlYn9HFqVjr39k7OJg0WC6 +gyjQ92nzqEw49Jkb3NMAarF0zPcP25WV97Aq7EDZV/G8LZbg4p+xCrkz2iUJttu1 +CZjhS9uNsvIAYQIDAQABo30wezAdBgNVHQ4EFgQUqVEvl+MVxdWqNx36igfxqjrJ +f9QwPwYDVR0jBDgwNoAUqVEvl+MVxdWqNx36igfxqjrJf9ShE6QRMA8xDTALBgNV +BAMMBGFyYW6CCQCutQIacQKTlDAMBgNVHRMEBTADAQH/MAsGA1UdDwQEAwIBBjAN +BgkqhkiG9w0BAQsFAAOCAQEAysh4aGsnv4CebGvzZ9mZlmK5o4JTj4bqRw8sFe4h +wW/bZ0ggMnnvNZF1VJJgO/UQQq2gIiOw7zLrlSmPHIhRPkQspemk6uU0m2h6K9rn +AnX3qeVP5dXbZsqr1jI1/aCzxSW5hu6WUfR3Q+u1pGm9HePhrRJj0djW8Kd7UO+s +PfpIN9gbfLoLnAfCJIc3BccBoD5IqU4s7vleekQGCJHloT5S3MefiIUg7d8leW4V +8PiCohkgHwMOZy3ACy1ZPuT92x+7JCaNV56X7iT3GZhkyQ4tSKu3UpMFkz8obYKw +8RrNsXXBRWgnuakkMY6wHJJZBPJn+qDrWbO7nxVTOqY22g== +-----END CERTIFICATE----- + + +Certificate: + Data: + Version: 3 (0x2) + Serial Number: + 12:8c:b0:dc:13:cf:d4:14:63:bc:16:91:d8:1c:b4:a5 + Signature Algorithm: sha256WithRSAEncryption + Issuer: CN=aran + Validity + Not Before: Jan 13 15:13:13 2021 GMT + Not After : Jan 11 15:13:13 2031 GMT + Subject: CN=dhart-hourtrax03 + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + Public-Key: (2048 bit) + Modulus: + 00:c8:38:21:cd:97:b3:5d:e6:34:a9:35:31:17:75: + 5c:f4:77:1d:62:85:b9:60:ae:b3:35:8d:16:1c:69: + f0:53:16:0b:42:01:bb:a1:34:38:46:9c:cc:a1:e2: + f2:03:fa:8d:89:4f:58:90:d2:b2:14:ae:3e:01:4e: + cf:54:e3:dd:cf:15:1b:79:01:8c:c7:ca:43:e0:2b: + 2c:e1:dd:3e:e5:12:d0:9d:b4:00:ce:2a:e9:cb:fe: + d5:38:4b:24:6a:f8:57:61:bf:a7:0e:61:12:d0:4a: + ed:22:d5:90:e8:c0:68:53:1b:9f:82:28:20:a2:77: + 2c:ca:94:55:b8:40:8a:d1:da:43:77:0a:0c:5c:96: + 56:98:6e:cc:f7:63:0e:d3:78:41:0c:1f:b0:22:4d: + 02:5f:4b:e8:5c:37:40:4e:b7:6e:7d:4a:17:25:9a: + a8:1c:ad:1d:66:7e:36:83:88:62:98:79:fa:12:75: + 16:c7:70:9c:d1:cc:11:49:34:b4:71:92:ed:db:e5: + a2:b1:0e:32:13:74:60:56:10:82:ff:8f:98:59:a0: + 74:99:ed:3f:ad:49:b0:73:83:84:45:bb:cf:52:be: + df:f7:16:12:fa:98:21:b0:23:ef:1c:44:95:f2:19: + 87:b0:2c:35:c0:0b:3a:a3:fd:76:0d:dd:82:82:28: + 4b:a5 + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 Basic Constraints: + CA:FALSE + X509v3 Subject Key Identifier: + 50:DD:89:D0:4B:59:17:A0:8D:07:9C:8F:D7:3D:E5:01:30:3B:6A:50 + X509v3 Authority Key Identifier: + keyid:A9:51:2F:97:E3:15:C5:D5:AA:37:1D:FA:8A:07:F1:AA:3A:C9:7F:D4 + DirName:/CN=aran + serial:AE:B5:02:1A:71:02:93:94 + + X509v3 Extended Key Usage: + TLS Web Client Authentication + X509v3 Key Usage: + Digital Signature + Signature Algorithm: sha256WithRSAEncryption + 05:cd:0d:04:05:ed:db:53:97:01:ce:dc:47:37:9d:ce:e9:ad: + 1a:d4:a0:d6:58:60:a1:86:91:87:57:33:75:3f:d5:c5:12:b6: + 8e:e3:b2:74:fe:40:ab:4a:90:46:a1:77:d6:ce:75:e4:a9:0e: + e8:12:da:c6:f1:8c:0c:ea:62:1e:f0:d9:d2:e8:7d:1f:24:6f: + 2e:72:ee:ce:20:9f:9e:74:eb:be:d5:1f:7a:7d:ec:33:d1:8a: + 24:3a:89:64:97:0f:59:18:10:7c:71:84:a6:22:e3:f5:42:25: + 4c:33:76:96:56:2f:b6:63:85:c8:f1:b9:6b:9e:c1:f0:ad:6b: + a2:4d:34:7d:2b:d9:f0:d0:7a:67:0e:1c:38:7a:1d:d8:a4:04: + 09:58:24:e3:81:ad:0c:5f:6d:fe:15:57:bd:36:14:32:63:c4: + 6a:dd:dd:bb:59:4a:e4:35:b3:26:6c:ce:81:eb:cd:bd:ce:4b: + 41:4a:79:86:20:31:a5:da:f5:62:9d:52:04:9e:5d:cc:bd:16: + 43:25:e8:7c:02:fb:81:dc:7e:b2:91:46:80:97:a5:d7:2f:18: + 4d:92:4a:b0:1d:ac:c8:f1:cf:30:08:69:8a:53:0c:8d:57:0b: + 47:83:e2:d6:dd:fe:6e:82:66:d8:86:c4:3e:9d:c6:22:fd:a0: + 71:60:33:db +-----BEGIN CERTIFICATE----- +MIIDRTCCAi2gAwIBAgIQEoyw3BPP1BRjvBaR2By0pTANBgkqhkiG9w0BAQsFADAP +MQ0wCwYDVQQDDARhcmFuMB4XDTIxMDExMzE1MTMxM1oXDTMxMDExMTE1MTMxM1ow +GzEZMBcGA1UEAwwQZGhhcnQtaG91cnRyYXgwMzCCASIwDQYJKoZIhvcNAQEBBQAD +ggEPADCCAQoCggEBAMg4Ic2Xs13mNKk1MRd1XPR3HWKFuWCuszWNFhxp8FMWC0IB +u6E0OEaczKHi8gP6jYlPWJDSshSuPgFOz1Tj3c8VG3kBjMfKQ+ArLOHdPuUS0J20 +AM4q6cv+1ThLJGr4V2G/pw5hEtBK7SLVkOjAaFMbn4IoIKJ3LMqUVbhAitHaQ3cK +DFyWVphuzPdjDtN4QQwfsCJNAl9L6Fw3QE63bn1KFyWaqBytHWZ+NoOIYph5+hJ1 +FsdwnNHMEUk0tHGS7dvlorEOMhN0YFYQgv+PmFmgdJntP61JsHODhEW7z1K+3/cW +EvqYIbAj7xxElfIZh7AsNcALOqP9dg3dgoIoS6UCAwEAAaOBkDCBjTAJBgNVHRME +AjAAMB0GA1UdDgQWBBRQ3YnQS1kXoI0HnI/XPeUBMDtqUDA/BgNVHSMEODA2gBSp +US+X4xXF1ao3HfqKB/GqOsl/1KETpBEwDzENMAsGA1UEAwwEYXJhboIJAK61Ahpx +ApOUMBMGA1UdJQQMMAoGCCsGAQUFBwMCMAsGA1UdDwQEAwIHgDANBgkqhkiG9w0B +AQsFAAOCAQEABc0NBAXt21OXAc7cRzedzumtGtSg1lhgoYaRh1czdT/VxRK2juOy +dP5Aq0qQRqF31s515KkO6BLaxvGMDOpiHvDZ0uh9HyRvLnLuziCfnnTrvtUfen3s +M9GKJDqJZJcPWRgQfHGEpiLj9UIlTDN2llYvtmOFyPG5a57B8K1rok00fSvZ8NB6 +Zw4cOHod2KQECVgk44GtDF9t/hVXvTYUMmPEat3du1lK5DWzJmzOgevNvc5LQUp5 +hiAxpdr1Yp1SBJ5dzL0WQyXofAL7gdx+spFGgJel1y8YTZJKsB2syPHPMAhpilMM +jVcLR4Pi1t3+boJm2IbEPp3GIv2gcWAz2w== +-----END CERTIFICATE----- + + +-----BEGIN PRIVATE KEY----- +MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDIOCHNl7Nd5jSp +NTEXdVz0dx1ihblgrrM1jRYcafBTFgtCAbuhNDhGnMyh4vID+o2JT1iQ0rIUrj4B +Ts9U493PFRt5AYzHykPgKyzh3T7lEtCdtADOKunL/tU4SyRq+Fdhv6cOYRLQSu0i +1ZDowGhTG5+CKCCidyzKlFW4QIrR2kN3CgxcllaYbsz3Yw7TeEEMH7AiTQJfS+hc +N0BOt259ShclmqgcrR1mfjaDiGKYefoSdRbHcJzRzBFJNLRxku3b5aKxDjITdGBW +EIL/j5hZoHSZ7T+tSbBzg4RFu89Svt/3FhL6mCGwI+8cRJXyGYewLDXACzqj/XYN +3YKCKEulAgMBAAECggEAa0gIdM0QQwQSu4fQ4iz0vdkFWcElb3Sseck7S8ZIC30I +Uznye5IrhUqHK0cbPp6GMEjfv9nlqccjWjgMSARA2bEJo3D9KiBq9jasOen+xWer +eJT2yYGc/L1zKlK5FMg0qh+zN7U0C3/aSIv+tXhDbiSi927g7azFx1ZsB+otd/tz +dtG5jJOTTtvuQwjUmp4oJ0ktcGP7E1DV7ru0ifDnhNmmJqWdstkKbIUbpy2T6BUX +5psZm2q1QVWgnPpTUg/bTF0suSaazsctPqyn1ZwlOkszEYiS5XIyEaR8Ijqh4oFH +E7Mk0DKh06XRRBqcvpVxlBDOMfPLL+2ccfgNGYPMEQKBgQD9fNEl88wF63TZMLgt +MzgfWu5UTfulqM4qWHI0ocz2f/nDlKTU+Eid6XEj6u7paIsFOQ5I2ImpxTH0CR7U +6q5Fnb8/o2VQEw9kMx2AIQFysc6G038eMQ9vKhtckqMXyx5tZr+QOeJyX025pwHr +dvo4AEISgWjGArP5c5CoicG0DwKBgQDKNCfPLklAamEdKY6vj7m9ZhDPcHZBC2+0 ++mWyMvTH59fXsLe9U6RKucu5A1FlM0AcN9SfDc9aih3vRj78vi//fUdq99LJaL7U +Bv/pOIP6gmdsvA06MtoO3pLGV5IceaLE0YZNEraLfXR0x9gFEup4pYuVNoNzHZ8g +3et2UUaBCwKBgQDktsYPNFYV0Ujw3qCPR/OPdwArWOGBqzm5w2voSUUh9H5rFadT +8WGz+Xl4KvW96/HjmINm/tnXMHHN+pyzB7yOW7K/vLIg+dGdWvF3NlCUKBJsXFAJ +8cI3Twq5ECXPxhmCJH8bpt7Gy27Z3/I/fm5uMO1svQ7H+pBgtwEC0KjRyQKBgDkQ +NPfcCSIbo2J2euUCu5k+t5nDFCxRDOpXC+IZTUkpHZmqLoBInYHVIzAIRq03pG0S +OHfWjuDvP3lqKpZrGeKROVlvrNXYMJpni0sG/v/wUz21aEo3VaCCoYtF5V8R2KSQ +uMUBdfCxq+7VAxqTdwYrOdQXOUuAXYsJ9cxDLZF3AoGBAL8TZn3smo8Cw8TV17jM +oi0s+RXG6dxakUmGBldyiGAkTOX9dEVeEHArCtUUdqAeJD0fqrL4XOn/qUviCmhg +tWKxMGfgHaIEi+HCONRrMyPYlTaH/1k0MnsHF8CBrD1TuZPgpjR14xrq/Ie2Bjjm +fwFio7XUfCla6TSo9d5UXWeW +-----END PRIVATE KEY----- + +comp-lzo +verb 3 +mute 20 +cipher AES-256-CBC diff --git a/vpn/DKS-VPN-dks-hourtrax.ovpn b/vpn/DKS-VPN-dks-hourtrax.ovpn new file mode 100644 index 0000000..8cd495f --- /dev/null +++ b/vpn/DKS-VPN-dks-hourtrax.ovpn @@ -0,0 +1,153 @@ +client +dev tun +proto udp +remote aran.sysaki.com 1098 +remote aran.dks.lu 1098 + +remote-random +resolv-retry infinite +nobind +persist-key +persist-tun +mute-replay-warnings + +-----BEGIN CERTIFICATE----- +MIIDHjCCAgagAwIBAgIJAK61AhpxApOUMA0GCSqGSIb3DQEBCwUAMA8xDTALBgNV +BAMMBGFyYW4wHhcNMTcxMjE4MTM0MTIyWhcNMjcxMjE2MTM0MTIyWjAPMQ0wCwYD +VQQDDARhcmFuMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1TydPk4X +8YyPjXI0htiMsM9C5jP0iH/Hgl7w+t0NL6fvcJhwy8BntJ/FRlS/GFoszmH+0zSt +pVeymgEwSQ2SrZixSkln2XhbTIH/NUEHosdllECJgj83W0Kpbtms8Cs6/FfhvMB4 +4o/GnN/mkmA9kslguStksV2vQh98Os9rw5gEKM5qFYO5FYUZIIrcsLgyzztPpw4H +vhrAzxuuu+zg9cOGAihlWV+CSlQJDZyC9hH9xal8UsTlYn9HFqVjr39k7OJg0WC6 +gyjQ92nzqEw49Jkb3NMAarF0zPcP25WV97Aq7EDZV/G8LZbg4p+xCrkz2iUJttu1 +CZjhS9uNsvIAYQIDAQABo30wezAdBgNVHQ4EFgQUqVEvl+MVxdWqNx36igfxqjrJ +f9QwPwYDVR0jBDgwNoAUqVEvl+MVxdWqNx36igfxqjrJf9ShE6QRMA8xDTALBgNV +BAMMBGFyYW6CCQCutQIacQKTlDAMBgNVHRMEBTADAQH/MAsGA1UdDwQEAwIBBjAN +BgkqhkiG9w0BAQsFAAOCAQEAysh4aGsnv4CebGvzZ9mZlmK5o4JTj4bqRw8sFe4h +wW/bZ0ggMnnvNZF1VJJgO/UQQq2gIiOw7zLrlSmPHIhRPkQspemk6uU0m2h6K9rn +AnX3qeVP5dXbZsqr1jI1/aCzxSW5hu6WUfR3Q+u1pGm9HePhrRJj0djW8Kd7UO+s +PfpIN9gbfLoLnAfCJIc3BccBoD5IqU4s7vleekQGCJHloT5S3MefiIUg7d8leW4V +8PiCohkgHwMOZy3ACy1ZPuT92x+7JCaNV56X7iT3GZhkyQ4tSKu3UpMFkz8obYKw +8RrNsXXBRWgnuakkMY6wHJJZBPJn+qDrWbO7nxVTOqY22g== +-----END CERTIFICATE----- + + +Certificate: + Data: + Version: 3 (0x2) + Serial Number: + 76:24:55:b4:57:ee:a0:c0:7b:e2:b5:a0:5c:3d:80:3d + Signature Algorithm: sha256WithRSAEncryption + Issuer: CN=aran + Validity + Not Before: Feb 6 07:54:45 2018 GMT + Not After : Feb 4 07:54:45 2028 GMT + Subject: CN=dks-hourtrax + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + Public-Key: (2048 bit) + Modulus: + 00:b1:67:a4:6b:28:de:50:03:da:b0:48:19:5d:28: + f4:b7:43:68:2c:6d:41:bc:b8:76:ff:b7:93:2f:93: + f5:d1:fc:90:27:6b:1b:f2:84:0d:5e:dc:be:1f:77: + 77:bb:66:34:43:ac:7e:35:13:df:90:54:31:e9:67: + 44:76:a7:e1:70:61:10:bc:3d:84:0d:75:8d:2c:b3: + 06:d0:5a:c0:20:2f:0b:e2:15:5e:3f:38:61:ed:fa: + d8:8e:03:cd:c9:07:94:25:eb:ab:59:4a:7e:92:10: + 5d:1a:ee:de:31:35:14:a4:52:f2:79:5c:11:6e:e8: + ef:6c:57:69:a1:94:74:96:b7:e0:dc:ba:a5:b3:b4: + 33:65:79:b6:e7:de:aa:1a:d2:c3:9a:7f:6d:73:35: + 82:a4:fb:1e:13:2b:c7:96:5c:d9:d9:23:1b:6a:80: + 8d:17:22:69:09:88:85:03:be:6e:4b:11:d2:05:a9: + 51:7d:bf:a0:a4:e1:55:cb:27:10:4d:3b:fd:b9:cc: + a5:0c:5a:de:6e:95:5c:e9:4e:53:70:df:8f:06:1b: + 56:67:46:91:08:39:f4:bb:74:ae:18:90:39:1b:b1: + 51:64:5c:bf:58:fb:18:90:0a:ec:ac:68:98:2d:54: + cc:a1:1c:b4:9d:be:6d:ee:16:8a:ed:9a:56:2a:11: + 6e:37 + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 Basic Constraints: + CA:FALSE + X509v3 Subject Key Identifier: + FE:5D:3F:2A:41:EE:A5:C2:50:D0:9B:CF:89:EB:25:9C:61:3A:67:FF + X509v3 Authority Key Identifier: + keyid:A9:51:2F:97:E3:15:C5:D5:AA:37:1D:FA:8A:07:F1:AA:3A:C9:7F:D4 + DirName:/CN=aran + serial:AE:B5:02:1A:71:02:93:94 + + X509v3 Extended Key Usage: + TLS Web Client Authentication + X509v3 Key Usage: + Digital Signature + Signature Algorithm: sha256WithRSAEncryption + 49:3d:9c:8e:10:37:3e:ba:6d:ac:2f:6e:65:60:01:ed:01:70: + 49:b5:16:af:29:3b:68:ca:85:58:9f:88:ff:14:5e:ae:03:0d: + 65:99:9d:0e:6b:66:98:ad:f1:55:9c:75:f1:c7:fb:e6:61:68: + d6:69:03:48:4f:08:18:d5:ae:60:55:18:70:b4:ab:63:05:b5: + 54:c7:f7:d0:8b:86:4b:34:3f:50:5c:6f:be:c1:5a:1b:22:cc: + 24:59:76:e0:8c:c6:32:37:76:ab:bc:2d:63:27:be:2e:a6:5b: + 86:90:1d:a5:4d:a6:9a:17:ed:57:76:f7:c7:65:f0:2b:29:84: + a8:f3:35:5c:66:4d:f2:38:4f:79:df:b4:c1:07:66:3f:87:d0: + 13:fc:5b:3b:ea:da:db:ab:32:2e:72:f3:84:be:0d:e9:7e:c6: + 16:22:a9:b7:28:f5:cf:89:51:11:51:9d:bb:ac:fc:1e:fb:85: + 27:31:74:bd:6d:64:1b:d5:d6:d8:31:ff:ee:3f:9c:17:04:6c: + a3:3a:64:3b:22:88:78:75:3e:37:9d:b1:8b:a2:e8:7a:6f:0f: + af:9b:2c:a7:0a:dc:af:4a:f3:e5:3b:6e:97:c4:cf:2e:0e:64: + 71:2e:c8:51:32:90:9a:53:95:be:a9:d1:bd:ea:cb:9b:0a:9d: + 03:5b:04:85 +-----BEGIN CERTIFICATE----- +MIIDQTCCAimgAwIBAgIQdiRVtFfuoMB74rWgXD2APTANBgkqhkiG9w0BAQsFADAP +MQ0wCwYDVQQDDARhcmFuMB4XDTE4MDIwNjA3NTQ0NVoXDTI4MDIwNDA3NTQ0NVow +FzEVMBMGA1UEAwwMZGtzLWhvdXJ0cmF4MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEAsWekayjeUAPasEgZXSj0t0NoLG1BvLh2/7eTL5P10fyQJ2sb8oQN +Xty+H3d3u2Y0Q6x+NRPfkFQx6WdEdqfhcGEQvD2EDXWNLLMG0FrAIC8L4hVePzhh +7frYjgPNyQeUJeurWUp+khBdGu7eMTUUpFLyeVwRbujvbFdpoZR0lrfg3Lqls7Qz +ZXm2596qGtLDmn9tczWCpPseEyvHllzZ2SMbaoCNFyJpCYiFA75uSxHSBalRfb+g +pOFVyycQTTv9ucylDFrebpVc6U5TcN+PBhtWZ0aRCDn0u3SuGJA5G7FRZFy/WPsY +kArsrGiYLVTMoRy0nb5t7haK7ZpWKhFuNwIDAQABo4GQMIGNMAkGA1UdEwQCMAAw +HQYDVR0OBBYEFP5dPypB7qXCUNCbz4nrJZxhOmf/MD8GA1UdIwQ4MDaAFKlRL5fj +FcXVqjcd+ooH8ao6yX/UoROkETAPMQ0wCwYDVQQDDARhcmFuggkArrUCGnECk5Qw +EwYDVR0lBAwwCgYIKwYBBQUHAwIwCwYDVR0PBAQDAgeAMA0GCSqGSIb3DQEBCwUA +A4IBAQBJPZyOEDc+um2sL25lYAHtAXBJtRavKTtoyoVYn4j/FF6uAw1lmZ0Oa2aY +rfFVnHXxx/vmYWjWaQNITwgY1a5gVRhwtKtjBbVUx/fQi4ZLND9QXG++wVobIswk +WXbgjMYyN3arvC1jJ74upluGkB2lTaaaF+1XdvfHZfArKYSo8zVcZk3yOE9537TB +B2Y/h9AT/Fs76trbqzIucvOEvg3pfsYWIqm3KPXPiVERUZ27rPwe+4UnMXS9bWQb +1dbYMf/uP5wXBGyjOmQ7Ioh4dT43nbGLouh6bw+vmyynCtyvSvPlO26XxM8uDmRx +LshRMpCaU5W+qdG96subCp0DWwSF +-----END CERTIFICATE----- + + +-----BEGIN PRIVATE KEY----- +MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCxZ6RrKN5QA9qw +SBldKPS3Q2gsbUG8uHb/t5Mvk/XR/JAnaxvyhA1e3L4fd3e7ZjRDrH41E9+QVDHp +Z0R2p+FwYRC8PYQNdY0sswbQWsAgLwviFV4/OGHt+tiOA83JB5Ql66tZSn6SEF0a +7t4xNRSkUvJ5XBFu6O9sV2mhlHSWt+DcuqWztDNlebbn3qoa0sOaf21zNYKk+x4T +K8eWXNnZIxtqgI0XImkJiIUDvm5LEdIFqVF9v6Ck4VXLJxBNO/25zKUMWt5ulVzp +TlNw348GG1ZnRpEIOfS7dK4YkDkbsVFkXL9Y+xiQCuysaJgtVMyhHLSdvm3uFort +mlYqEW43AgMBAAECggEAdIXkwtX3H4tIitzwe/Y4tl65/+RLd0+aKeBD9s4yehhv +/tQlaSc/OP24iyaHKDm7Pm///ZDuGPiUSAAiQeWG969ptJqbL9P0RFXatePFqd38 +6iSq4M+B0zQeJTluYwptTnL6+w0pEXtaDCS1IJEC2+P3i6rjcHvjNsA7i3vdEFji +Prze6oZ/UoJIGn97V+qePCmcY1raD5SUeHz/tgB1qY3zq9TdjS953pijJKlXgXVM +pI/WhovKKYFmnbTVsY9WaMXvJz3MTrCosk9LIDdVOIei7m1GI+vQoGS9I3YhFogs +8qNweEJLLF6wi3tXrur5ZYTIqBYHtrE88RsnfWDqAQKBgQDfdOVTrzoCGVcNPLTK +nj7qpEfOgJS/1dSRgcH2MGKqPl+fPbqoCXEWKQicAbuVRWKKzvjHon+IvMn1ymgF +u31uePVtF0adHJP389d5VeeeO7Tl3t50an+k+cPTpRudmpfpUaH+SE7BpXv8V9B+ +eES92r5zhr2xEuVewBIPoyr8twKBgQDLPc3jdsjZpIYheYsP1yDyuFgi8cau7mqw +4v/KmcyuOAIHlrZB6V+XkNpL0U0gWOdrH4pgEdTKhtu/lycAKNS4AJkJLqE3dQQx +c3LAdtlQ9NuHoY/SxP2wcZlFEeQsGUpj4azg/bibGh/RNsy5vi6EW8hfrTwvtvfq +cruGN66agQKBgEwj7bxdGbv7XHEzPTtJPpD/V0RjBcx0FRFbkHbNt+Dgjf6Zrw9w +4Cq34qod4QgU82Xu7lA/64rxITPyOw2w/CV3a9E3PCVuxnCXktVSUzDUkWg+T7iF +TWcuf+6O9OD3+0lSOouFoehT9fJfDbj6TBoQ/hIpWFuM38EwWzce1xfzAoGAN9b1 +OGesa0+uoofYUzPSE53eaUtwQSO0IIFdsfZrq/orZJZd4OITp3re3zHUNOz4OBBk +XlzH0BUZTxxiVMLjHuLbKRCsrqXxzvxfLM36iymbHzqeX1RMNywe5kEyJYOVUrfw +XaiYDdUxpLOfr/C2qxrkhJT+EkX8+2cmaovl5wECgYEAmO7l3iVoEET9HrxuvinL +OC600K0iIpNNAIWSywGa4V04WBXrGNMx3SAkxEdQblrSIE1dPxsJnq+clvSyqeo5 +PLi7mSs/XpE7HffjYMhtyzv+UKUCfvbRsjIDH2/Ka6WZZalBw4I0aKcWYvvqACly +FX4rIxtOEaNSC9J07tCgN1A= +-----END PRIVATE KEY----- + +comp-lzo +verb 3 +mute 20 +cipher AES-256-CBC diff --git a/vpn/DKS-VPN-dks-hourtraxtest.ovpn b/vpn/DKS-VPN-dks-hourtraxtest.ovpn new file mode 100644 index 0000000..0793f27 --- /dev/null +++ b/vpn/DKS-VPN-dks-hourtraxtest.ovpn @@ -0,0 +1,153 @@ +client +dev tun +proto udp +remote vsrv01.dks.lu 1098 +remote arandks.lu 1098 + +remote-random +resolv-retry infinite +nobind +persist-key +persist-tun +mute-replay-warnings + +-----BEGIN CERTIFICATE----- +MIIDHjCCAgagAwIBAgIJAK61AhpxApOUMA0GCSqGSIb3DQEBCwUAMA8xDTALBgNV +BAMMBGFyYW4wHhcNMTcxMjE4MTM0MTIyWhcNMjcxMjE2MTM0MTIyWjAPMQ0wCwYD +VQQDDARhcmFuMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1TydPk4X +8YyPjXI0htiMsM9C5jP0iH/Hgl7w+t0NL6fvcJhwy8BntJ/FRlS/GFoszmH+0zSt +pVeymgEwSQ2SrZixSkln2XhbTIH/NUEHosdllECJgj83W0Kpbtms8Cs6/FfhvMB4 +4o/GnN/mkmA9kslguStksV2vQh98Os9rw5gEKM5qFYO5FYUZIIrcsLgyzztPpw4H +vhrAzxuuu+zg9cOGAihlWV+CSlQJDZyC9hH9xal8UsTlYn9HFqVjr39k7OJg0WC6 +gyjQ92nzqEw49Jkb3NMAarF0zPcP25WV97Aq7EDZV/G8LZbg4p+xCrkz2iUJttu1 +CZjhS9uNsvIAYQIDAQABo30wezAdBgNVHQ4EFgQUqVEvl+MVxdWqNx36igfxqjrJ +f9QwPwYDVR0jBDgwNoAUqVEvl+MVxdWqNx36igfxqjrJf9ShE6QRMA8xDTALBgNV +BAMMBGFyYW6CCQCutQIacQKTlDAMBgNVHRMEBTADAQH/MAsGA1UdDwQEAwIBBjAN +BgkqhkiG9w0BAQsFAAOCAQEAysh4aGsnv4CebGvzZ9mZlmK5o4JTj4bqRw8sFe4h +wW/bZ0ggMnnvNZF1VJJgO/UQQq2gIiOw7zLrlSmPHIhRPkQspemk6uU0m2h6K9rn +AnX3qeVP5dXbZsqr1jI1/aCzxSW5hu6WUfR3Q+u1pGm9HePhrRJj0djW8Kd7UO+s +PfpIN9gbfLoLnAfCJIc3BccBoD5IqU4s7vleekQGCJHloT5S3MefiIUg7d8leW4V +8PiCohkgHwMOZy3ACy1ZPuT92x+7JCaNV56X7iT3GZhkyQ4tSKu3UpMFkz8obYKw +8RrNsXXBRWgnuakkMY6wHJJZBPJn+qDrWbO7nxVTOqY22g== +-----END CERTIFICATE----- + + +Certificate: + Data: + Version: 3 (0x2) + Serial Number: + 1f:72:81:5c:11:93:98:f3:ab:da:e0:8e:19:74:cd:57 + Signature Algorithm: sha256WithRSAEncryption + Issuer: CN=aran + Validity + Not Before: Oct 27 08:51:46 2020 GMT + Not After : Oct 25 08:51:46 2030 GMT + Subject: CN=dks-hourtraxtest + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + Public-Key: (2048 bit) + Modulus: + 00:a8:62:e0:84:c5:db:87:18:f3:e1:4e:8d:45:e2: + 15:d5:36:69:71:df:fa:9b:73:6f:d8:78:6d:f9:7c: + d4:34:06:e4:af:a2:31:41:dc:ec:f0:9f:6e:ce:6c: + 33:a5:d0:b0:d2:04:c5:a7:dd:55:aa:55:79:80:2c: + 13:5b:89:75:fd:b6:a6:e4:9f:39:8d:40:59:d1:5b: + 83:e6:c6:c0:0a:42:89:70:c2:cc:67:ea:61:39:51: + 32:36:7c:77:78:4f:99:ec:f0:0e:2f:b7:c7:98:df: + 9b:9a:3e:6b:4d:ce:b4:6e:82:21:b5:23:f5:37:12: + 2c:62:f2:e1:95:56:af:cb:77:71:ec:e7:86:b6:ed: + 95:44:3c:75:c9:7b:33:0a:da:9d:2f:75:9d:9d:5c: + 01:f0:8a:99:68:1d:7f:c0:9d:e9:3f:54:50:ce:0e: + 15:b9:39:a0:a2:f4:21:ee:ec:50:9a:c2:e2:de:91: + 75:77:16:7d:32:c9:32:b8:6b:ae:81:1b:3b:69:bf: + b1:5e:d2:16:10:4b:ad:c3:43:20:96:65:59:ff:a1: + 4c:b8:0e:e6:4b:b7:88:17:cf:97:97:a6:c1:67:ff: + a9:82:44:81:06:be:57:75:22:c2:02:d8:55:8d:aa: + 85:e5:84:46:7c:a9:67:a0:3a:47:71:04:1a:83:3f: + 9a:3d + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 Basic Constraints: + CA:FALSE + X509v3 Subject Key Identifier: + AB:70:9E:30:68:BA:3B:A9:6E:4C:E3:DA:D7:48:7D:3E:F8:77:85:43 + X509v3 Authority Key Identifier: + keyid:A9:51:2F:97:E3:15:C5:D5:AA:37:1D:FA:8A:07:F1:AA:3A:C9:7F:D4 + DirName:/CN=aran + serial:AE:B5:02:1A:71:02:93:94 + + X509v3 Extended Key Usage: + TLS Web Client Authentication + X509v3 Key Usage: + Digital Signature + Signature Algorithm: sha256WithRSAEncryption + 6b:ea:b4:0d:1a:2a:4b:fc:80:3f:71:d7:e2:cf:50:23:07:bc: + 11:36:de:c2:a1:84:de:15:69:46:a1:24:ed:d0:2b:fe:9f:7e: + 12:46:69:1f:44:78:e7:e7:60:4a:19:82:6c:76:49:4b:76:31: + 46:7b:d3:6e:6e:b6:a4:93:75:9c:87:af:bf:fa:05:b1:97:d9: + c1:a0:6e:68:e3:f4:f2:21:fc:59:48:8e:d3:7e:d5:44:df:e7: + 49:04:17:6d:93:db:69:7c:90:f4:1a:d5:92:03:cf:53:c1:bf: + 8f:3b:56:8a:46:9c:03:10:0e:bf:5a:27:2a:06:9d:4e:e5:78: + 6e:87:00:46:ec:21:4d:a1:bc:fe:e9:c1:9c:f3:b2:95:18:69: + e9:61:b8:0a:6c:ee:1d:12:ff:93:b6:3d:b5:ba:ca:52:c7:88: + 90:50:2d:55:12:84:12:a7:8c:dc:4f:a7:70:51:d0:4d:cb:66: + 8e:9a:ab:b1:07:88:d8:3f:6d:1c:6b:24:97:4b:80:ee:5d:01: + c8:d9:a9:bc:ce:7a:c1:a1:b1:6f:23:28:13:42:e6:0a:2d:ed: + dc:62:e8:ad:62:54:e9:23:11:c9:fa:e9:c3:85:fd:39:a9:8b: + db:e5:91:99:35:fe:f1:78:b4:4a:a4:ab:67:fe:53:55:00:45: + cc:1b:66:ea +-----BEGIN CERTIFICATE----- +MIIDRTCCAi2gAwIBAgIQH3KBXBGTmPOr2uCOGXTNVzANBgkqhkiG9w0BAQsFADAP +MQ0wCwYDVQQDDARhcmFuMB4XDTIwMTAyNzA4NTE0NloXDTMwMTAyNTA4NTE0Nlow +GzEZMBcGA1UEAwwQZGtzLWhvdXJ0cmF4dGVzdDCCASIwDQYJKoZIhvcNAQEBBQAD +ggEPADCCAQoCggEBAKhi4ITF24cY8+FOjUXiFdU2aXHf+ptzb9h4bfl81DQG5K+i +MUHc7PCfbs5sM6XQsNIExafdVapVeYAsE1uJdf22puSfOY1AWdFbg+bGwApCiXDC +zGfqYTlRMjZ8d3hPmezwDi+3x5jfm5o+a03OtG6CIbUj9TcSLGLy4ZVWr8t3cezn +hrbtlUQ8dcl7MwranS91nZ1cAfCKmWgdf8Cd6T9UUM4OFbk5oKL0Ie7sUJrC4t6R +dXcWfTLJMrhrroEbO2m/sV7SFhBLrcNDIJZlWf+hTLgO5ku3iBfPl5emwWf/qYJE +gQa+V3UiwgLYVY2qheWERnypZ6A6R3EEGoM/mj0CAwEAAaOBkDCBjTAJBgNVHRME +AjAAMB0GA1UdDgQWBBSrcJ4waLo7qW5M49rXSH0++HeFQzA/BgNVHSMEODA2gBSp +US+X4xXF1ao3HfqKB/GqOsl/1KETpBEwDzENMAsGA1UEAwwEYXJhboIJAK61Ahpx +ApOUMBMGA1UdJQQMMAoGCCsGAQUFBwMCMAsGA1UdDwQEAwIHgDANBgkqhkiG9w0B +AQsFAAOCAQEAa+q0DRoqS/yAP3HX4s9QIwe8ETbewqGE3hVpRqEk7dAr/p9+EkZp +H0R45+dgShmCbHZJS3YxRnvTbm62pJN1nIevv/oFsZfZwaBuaOP08iH8WUiO037V +RN/nSQQXbZPbaXyQ9BrVkgPPU8G/jztWikacAxAOv1onKgadTuV4bocARuwhTaG8 +/unBnPOylRhp6WG4CmzuHRL/k7Y9tbrKUseIkFAtVRKEEqeM3E+ncFHQTctmjpqr +sQeI2D9tHGskl0uA7l0ByNmpvM56waGxbyMoE0LmCi3t3GLorWJU6SMRyfrpw4X9 +OamL2+WRmTX+8Xi0SqSrZ/5TVQBFzBtm6g== +-----END CERTIFICATE----- + + +-----BEGIN PRIVATE KEY----- +MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCoYuCExduHGPPh +To1F4hXVNmlx3/qbc2/YeG35fNQ0BuSvojFB3Ozwn27ObDOl0LDSBMWn3VWqVXmA +LBNbiXX9tqbknzmNQFnRW4PmxsAKQolwwsxn6mE5UTI2fHd4T5ns8A4vt8eY35ua +PmtNzrRugiG1I/U3Eixi8uGVVq/Ld3Hs54a27ZVEPHXJezMK2p0vdZ2dXAHwiplo +HX/Anek/VFDODhW5OaCi9CHu7FCawuLekXV3Fn0yyTK4a66BGztpv7Fe0hYQS63D +QyCWZVn/oUy4DuZLt4gXz5eXpsFn/6mCRIEGvld1IsIC2FWNqoXlhEZ8qWegOkdx +BBqDP5o9AgMBAAECggEAaTy6s2BxDiMDMNoGIxnkqUeDaT8hggwIZ9MEcHuaqBVy +0W3duRsZHl2WQ/6N3ODr0aZX3czP4E/hSsDBLGFh07pW3eXBc003lUfLzOyEUyU4 +frfQRlXOg6MCbdkmVZPyUInLY/lJDnsZ5bGDILLCQ5qi9HHPrKZ4BTNk1w/BeLhf +Z2CVRMMb3TxDTqozco31dyhz+kBjYK6qVk6mmWnLVLEOTowL3Nblv+titUZ7kqOv +zbJzPoFV562jQ181hNoF7ANb01K8Kb/Wu3V7ScT9ARrKNC6vUgvjZ61/CwLp+kSM +oheAU/CEALwHEQqESJ1C9eGuruE0XCmLIRq4CT70xQKBgQDVNstIPpNDZ6mgOK3O +bcdk+8U042tyTCElpmUMK6yaN4cvdQPy5jjUoSE0pD+4YWGhf5AtlwSDt4pdUY/W +kgFYBYqjcCa8aL75BLwM6wxR6fRCyBoMThWsX0N9Ep4jqN9J6raiSK+AmANTUucT +e+r7XIn8sG374gGrxv29Cn7yjwKBgQDKLTHPK+ejV7tmjQYn/RZelvEo6gN59Cnh +unOgGescM4GVrZoZd+1pV+Zyz0BRY/EbKVojuYQBiax0lKNfwXPvhDmbBNwxLoWL +7cvUgPOGNlDFqsYyfp2HxYRXt83NZYiSAHGCsZPPyXp1+XpiaCQCPkv+NHXaH+yS +uO6zf78ccwKBgC7QxzXnt4IXYuFxUIiBBkUgGx8PyGniWWzg6lMPy+hYxPAgq2tM +LbJSZu4eGnerujoxvkCkZjNdu53d6M1eZbkkDlrwpzC7dyNKbNgRTDU4P4/iTAXj +p1Kf4Du4OMzvqYebZ9qeRxrfReunymE21lO27/1x59RkvaUwHkrB4Tn1AoGBAK0K +46/7VyaiZ56No7BEWYoaTU0EhncyOUqfyGlG5cncd9RBozybPhPFDVRE+TrwfKQP +z7v2A/tA999MfUzvCij+FkQNc92QgPNUU/qNaGH+SUH2Oe9sGa7kqrJdeoOLnMnC +IWWIUggt3WfuYQarNe7JnUd1ZU2Nt3GZYY03EL7rAoGAfo5Wku2uopyMoXaY22dr +GsATfARJl8ElzlGZsrDiIc/IgOZ8iW9m09GYhD+rvrQ5JQnMAGp0Kwaywxvbm0iu +ica5EvlmC+YYHq9ZhVmtrhSDaEkHHcg6uK5/Y1Bde+wSepHFKYuUnNXIXF4K0fDM +FA8Wa4lSMpexLi/4loLf+gE= +-----END PRIVATE KEY----- + +comp-lzo +verb 3 +mute 20 +cipher AES-256-CBC diff --git a/vpn/DKS-VPN-elch-hourtrax.ovpn b/vpn/DKS-VPN-elch-hourtrax.ovpn new file mode 100644 index 0000000..335ac6c --- /dev/null +++ b/vpn/DKS-VPN-elch-hourtrax.ovpn @@ -0,0 +1,153 @@ +client +dev tun +proto udp +remote vsrv01.dks.lu 1098 +remote arandks.lu 1098 + +remote-random +resolv-retry infinite +nobind +persist-key +persist-tun +mute-replay-warnings + +-----BEGIN CERTIFICATE----- +MIIDHjCCAgagAwIBAgIJAK61AhpxApOUMA0GCSqGSIb3DQEBCwUAMA8xDTALBgNV +BAMMBGFyYW4wHhcNMTcxMjE4MTM0MTIyWhcNMjcxMjE2MTM0MTIyWjAPMQ0wCwYD +VQQDDARhcmFuMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1TydPk4X +8YyPjXI0htiMsM9C5jP0iH/Hgl7w+t0NL6fvcJhwy8BntJ/FRlS/GFoszmH+0zSt +pVeymgEwSQ2SrZixSkln2XhbTIH/NUEHosdllECJgj83W0Kpbtms8Cs6/FfhvMB4 +4o/GnN/mkmA9kslguStksV2vQh98Os9rw5gEKM5qFYO5FYUZIIrcsLgyzztPpw4H +vhrAzxuuu+zg9cOGAihlWV+CSlQJDZyC9hH9xal8UsTlYn9HFqVjr39k7OJg0WC6 +gyjQ92nzqEw49Jkb3NMAarF0zPcP25WV97Aq7EDZV/G8LZbg4p+xCrkz2iUJttu1 +CZjhS9uNsvIAYQIDAQABo30wezAdBgNVHQ4EFgQUqVEvl+MVxdWqNx36igfxqjrJ +f9QwPwYDVR0jBDgwNoAUqVEvl+MVxdWqNx36igfxqjrJf9ShE6QRMA8xDTALBgNV +BAMMBGFyYW6CCQCutQIacQKTlDAMBgNVHRMEBTADAQH/MAsGA1UdDwQEAwIBBjAN +BgkqhkiG9w0BAQsFAAOCAQEAysh4aGsnv4CebGvzZ9mZlmK5o4JTj4bqRw8sFe4h +wW/bZ0ggMnnvNZF1VJJgO/UQQq2gIiOw7zLrlSmPHIhRPkQspemk6uU0m2h6K9rn +AnX3qeVP5dXbZsqr1jI1/aCzxSW5hu6WUfR3Q+u1pGm9HePhrRJj0djW8Kd7UO+s +PfpIN9gbfLoLnAfCJIc3BccBoD5IqU4s7vleekQGCJHloT5S3MefiIUg7d8leW4V +8PiCohkgHwMOZy3ACy1ZPuT92x+7JCaNV56X7iT3GZhkyQ4tSKu3UpMFkz8obYKw +8RrNsXXBRWgnuakkMY6wHJJZBPJn+qDrWbO7nxVTOqY22g== +-----END CERTIFICATE----- + + +Certificate: + Data: + Version: 3 (0x2) + Serial Number: + fe:63:1c:b4:2d:96:58:d5:24:ec:f1:bf:eb:a7:2a:c8 + Signature Algorithm: sha256WithRSAEncryption + Issuer: CN=aran + Validity + Not Before: Nov 11 12:45:16 2019 GMT + Not After : Nov 8 12:45:16 2029 GMT + Subject: CN=elch-hourtrax + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + Public-Key: (2048 bit) + Modulus: + 00:a9:af:3a:46:7b:91:d2:0e:aa:4a:77:58:be:ea: + 69:31:8f:2c:8f:d3:ab:a6:b9:7f:86:f0:69:bd:84: + 03:00:e7:db:c9:19:91:12:7e:fc:67:40:a4:a0:d2: + 66:04:59:b6:89:8e:0c:e9:96:d3:ed:49:10:af:a0: + 23:9f:58:ca:ea:85:a1:4d:f0:27:15:d5:1e:32:64: + 5b:12:8f:74:7d:f4:1c:c4:20:42:14:be:7f:3b:ab: + 32:b5:2d:06:e1:38:2f:a3:a8:42:1c:89:7e:1d:81: + 62:7d:41:8c:38:8f:7e:53:68:b4:65:52:39:de:5d: + ea:cd:f6:05:37:2f:23:12:70:22:a9:af:cc:a0:14: + cf:f7:78:c1:dc:15:27:79:2f:8e:10:97:8f:65:67: + 13:4e:ff:9b:e6:7f:4c:cb:2d:08:a6:8f:62:2d:bc: + 93:07:90:c8:6b:73:53:1c:94:83:7b:bc:da:a8:dd: + 54:11:3f:6d:11:f4:08:b4:dd:47:0a:8c:7b:83:e0: + df:35:64:9e:e6:30:59:c0:c8:c5:91:66:66:90:84: + 9f:75:0c:df:24:11:c2:0a:36:ab:25:9a:6c:ce:ee: + 1c:69:f6:c3:fa:6c:a6:a8:00:47:0b:6c:90:f1:14: + e8:ae:f1:ed:5e:54:6d:52:e0:48:3b:fc:2c:f2:de: + b6:3b + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 Basic Constraints: + CA:FALSE + X509v3 Subject Key Identifier: + 8F:C0:64:75:FA:14:9A:9A:D2:76:E1:D9:E1:CC:97:3C:3E:F7:0E:1D + X509v3 Authority Key Identifier: + keyid:A9:51:2F:97:E3:15:C5:D5:AA:37:1D:FA:8A:07:F1:AA:3A:C9:7F:D4 + DirName:/CN=aran + serial:AE:B5:02:1A:71:02:93:94 + + X509v3 Extended Key Usage: + TLS Web Client Authentication + X509v3 Key Usage: + Digital Signature + Signature Algorithm: sha256WithRSAEncryption + 6d:ec:8a:be:2e:e0:a8:95:42:49:01:7a:2f:f9:af:b9:80:a7: + 73:c5:5e:06:e6:dc:37:b1:4c:46:62:0e:39:c2:cc:d2:66:3d: + 8c:49:52:bd:5d:39:a1:ad:79:8a:98:32:85:cb:fd:c3:56:a3: + 15:25:38:12:aa:f1:f1:5e:6b:84:04:2c:3d:95:ce:2a:43:8d: + 3a:57:08:b8:47:26:82:61:ab:7b:28:82:03:39:a1:cd:20:33: + 35:a6:0f:c3:1a:5d:c4:91:88:59:27:d7:29:25:c3:6b:0c:40: + 37:0d:3b:ce:4f:38:30:4d:86:e6:ba:1e:af:1f:d9:37:be:1e: + 23:e7:8e:dc:80:ba:01:4f:ad:61:c7:14:6e:e0:63:95:33:56: + 51:ca:39:b9:eb:a9:02:03:75:ec:10:f0:68:44:38:d2:cf:26: + a7:8e:25:e8:1b:c0:d8:4c:fa:29:6d:8f:05:b0:cb:b5:9a:03: + d8:4c:db:11:99:db:6b:ba:85:37:ef:c1:08:1b:b7:73:c3:ea: + 0d:4f:d0:4b:fc:ea:fe:a5:b2:c2:dd:24:3a:a5:b1:6c:f8:2c: + 91:d9:37:cb:0a:38:d2:b6:79:c1:63:be:72:f7:95:8f:80:aa: + 0c:ab:21:20:74:c2:a1:8f:ba:9e:15:d3:ba:ea:ee:4b:9b:dc: + 1f:b7:53:2f +-----BEGIN CERTIFICATE----- +MIIDQzCCAiugAwIBAgIRAP5jHLQtlljVJOzxv+unKsgwDQYJKoZIhvcNAQELBQAw +DzENMAsGA1UEAwwEYXJhbjAeFw0xOTExMTExMjQ1MTZaFw0yOTExMDgxMjQ1MTZa +MBgxFjAUBgNVBAMMDWVsY2gtaG91cnRyYXgwggEiMA0GCSqGSIb3DQEBAQUAA4IB +DwAwggEKAoIBAQCprzpGe5HSDqpKd1i+6mkxjyyP06umuX+G8Gm9hAMA59vJGZES +fvxnQKSg0mYEWbaJjgzpltPtSRCvoCOfWMrqhaFN8CcV1R4yZFsSj3R99BzEIEIU +vn87qzK1LQbhOC+jqEIciX4dgWJ9QYw4j35TaLRlUjneXerN9gU3LyMScCKpr8yg +FM/3eMHcFSd5L44Ql49lZxNO/5vmf0zLLQimj2ItvJMHkMhrc1MclIN7vNqo3VQR +P20R9Ai03UcKjHuD4N81ZJ7mMFnAyMWRZmaQhJ91DN8kEcIKNqslmmzO7hxp9sP6 +bKaoAEcLbJDxFOiu8e1eVG1S4Eg7/Czy3rY7AgMBAAGjgZAwgY0wCQYDVR0TBAIw +ADAdBgNVHQ4EFgQUj8BkdfoUmprSduHZ4cyXPD73Dh0wPwYDVR0jBDgwNoAUqVEv +l+MVxdWqNx36igfxqjrJf9ShE6QRMA8xDTALBgNVBAMMBGFyYW6CCQCutQIacQKT +lDATBgNVHSUEDDAKBggrBgEFBQcDAjALBgNVHQ8EBAMCB4AwDQYJKoZIhvcNAQEL +BQADggEBAG3sir4u4KiVQkkBei/5r7mAp3PFXgbm3DexTEZiDjnCzNJmPYxJUr1d +OaGteYqYMoXL/cNWoxUlOBKq8fFea4QELD2VzipDjTpXCLhHJoJhq3soggM5oc0g +MzWmD8MaXcSRiFkn1yklw2sMQDcNO85PODBNhua6Hq8f2Te+HiPnjtyAugFPrWHH +FG7gY5UzVlHKObnrqQIDdewQ8GhEONLPJqeOJegbwNhM+iltjwWwy7WaA9hM2xGZ +22u6hTfvwQgbt3PD6g1P0Ev86v6lssLdJDqlsWz4LJHZN8sKONK2ecFjvnL3lY+A +qgyrISB0wqGPup4V07rq7kub3B+3Uy8= +-----END CERTIFICATE----- + + +-----BEGIN PRIVATE KEY----- +MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCprzpGe5HSDqpK +d1i+6mkxjyyP06umuX+G8Gm9hAMA59vJGZESfvxnQKSg0mYEWbaJjgzpltPtSRCv +oCOfWMrqhaFN8CcV1R4yZFsSj3R99BzEIEIUvn87qzK1LQbhOC+jqEIciX4dgWJ9 +QYw4j35TaLRlUjneXerN9gU3LyMScCKpr8ygFM/3eMHcFSd5L44Ql49lZxNO/5vm +f0zLLQimj2ItvJMHkMhrc1MclIN7vNqo3VQRP20R9Ai03UcKjHuD4N81ZJ7mMFnA +yMWRZmaQhJ91DN8kEcIKNqslmmzO7hxp9sP6bKaoAEcLbJDxFOiu8e1eVG1S4Eg7 +/Czy3rY7AgMBAAECggEBAIiLIgjPrQLsnCn6KebPeMDRpplCSrGKOc3bLiu7zDLx +YNJNiYjpuLBZu2BSjpdXneTI8ykRHw6lqhC5e5DhgcAAslGmO7181qTUTtj7qVEl +m/RSxPouZPIeDFrwlcWsUeGPJ0wRc/PIRvnmQjDNf2kdK3URGtIOn0EHhSDoBH/z +fisgOgbe96+/isEPPSDAHwXIy63uAg0+Vv/a2pJ37NkZlACD2kIkNJiXNHN/S1Qk +Q4GDXoq7HeEmiT3jCxeuI+w4bEncIvlhsMUIWNtfhM3a3n9V9qnUT8nURSjJNRKs +TbdUXh6rv9e7G757xuMLzfkHCwFzT4lBX1V+aljPL+ECgYEA3xqQj7LEkOo9yXI2 +8D47lh1Pq6Fbm71mHUYzsR9BvJXR+lYo2XO5/UbUU2sqRbG1iDNi3F0JE1Yum9ak +h91ektFGUi1+dcc+UG6auRGO/u49op66yjCZWr5jr+Ta6f7XGc/aMxU2+0Zv3saR +Og+qR+IFrA5cBpIEvRGgtV05kisCgYEAwrRCmwMatet0A/CFVn8qAeloeWZ0srtA +kqOvMQbBOnps1DkcIZXTuNfqLn/ZZnnBYiYlQpy73A4Rjs6eXwT63QL9JgRRxCUB +Vht4u39W8Lx8tA+VlJ/Yh52C+mmxL8ursJ6xkNs4Xa5kmZmhHYmui1I06K96B7Gz +9r3ihMv7NDECgYBu0zhaWXgxcFqO9fB6eL+Kuza3UCk8fOH7ysKkyp0R++5Zh3E1 +S7ppKUURxxsxkaxWYwhJ5OE8PMRcX0xNvVZcYh6ndbfq87VtqPOs2R8KXfg6DtVE +2M1k+Ux1tJ5WPGRHiyud0n0EZyHtLQA5Mkzo9krRBDUMgn5eGSKW1R9jDwKBgEHw +cHo08+/WXMUUyOOBT4W0OZibtTvupLDE1IkjA3+9hGvfJ4LMThbUsM+spsDIzVBj +IM1NbWXaMeIOYZ5GfnspDvi4D8UAz1INHbdKKfR/sS/98yeRdvB+zKPn9YT9UhkP +tY0cYRuA+zr1x5XMUhuG7Lo863P9n7gZmMRmnJ2RAoGAelEGMi5Vb3bcOAJHf2nm +macOP9YCy/gOeaRxyGDSczP4LMZEOmgBrhzbJKFeJHqNnhni4cJZLWj3/ITNdYB6 +97qmmRdCZaT6MWPMSIK6kxsIKROixI4nGyAGQAuz/9x1NDj/nxdBvob3qnocJ3M8 +r5ZtvNbbLxCU4POk2hgBLec= +-----END PRIVATE KEY----- + +comp-lzo +verb 3 +mute 20 +cipher AES-256-CBC diff --git a/install/vpn/DKS-VPN-elch-pothourtrax.ovpn b/vpn/DKS-VPN-elch-pothourtrax.ovpn similarity index 100% rename from install/vpn/DKS-VPN-elch-pothourtrax.ovpn rename to vpn/DKS-VPN-elch-pothourtrax.ovpn -- 2.39.5