From fc57b5e778c41fbd0a6bf6ff2a8b11532d33fe44 Mon Sep 17 00:00:00 2001 From: Ghislain B Date: Thu, 13 Jul 2023 00:59:00 -0400 Subject: [PATCH] feat!: major folder restructuring with esbuild to support `iife`, `cjs` and `esm` and soon TypeScript (#804) --- .eslintrc | 3 +- .github/workflows/main.yml | 11 +- .gitignore | 3 +- .npmignore | 3 + LICENSE | 2 +- css/bootstrap.css | 6566 -------------- .../images/ui-bg_flat_0_aaaaaa_40x100.png | Bin 212 -> 0 bytes .../images/ui-bg_flat_75_ffffff_40x100.png | Bin 208 -> 0 bytes .../images/ui-bg_glass_55_fbf9ee_1x400.png | Bin 335 -> 0 bytes .../images/ui-bg_glass_65_ffffff_1x400.png | Bin 207 -> 0 bytes .../images/ui-bg_glass_75_dadada_1x400.png | Bin 262 -> 0 bytes .../images/ui-bg_glass_75_e6e6e6_1x400.png | Bin 262 -> 0 bytes .../images/ui-bg_glass_95_fef1ec_1x400.png | Bin 332 -> 0 bytes .../ui-bg_highlight-soft_75_cccccc_1x100.png | Bin 280 -> 0 bytes .../images/ui-icons_222222_256x240.png | Bin 6922 -> 0 bytes .../images/ui-icons_2e83ff_256x240.png | Bin 4549 -> 0 bytes .../images/ui-icons_454545_256x240.png | Bin 6992 -> 0 bytes .../images/ui-icons_888888_256x240.png | Bin 6999 -> 0 bytes .../images/ui-icons_cd0a0a_256x240.png | Bin 4549 -> 0 bytes css/smoothness/jquery-ui-1.11.3.custom.css | 1225 --- .../jquery-ui-1.11.3.custom.min.css | 7 - css/smoothness/jquery-ui.css | 1311 --- cypress.json | 2 +- .../example-auto-scroll-when-dragging.spec.js | 8 +- .../example-checkbox-header-row.spec.js | 14 +- ...mple-composite-editor-modal-dialog.spec.js | 30 +- .../example-draggable-grouping.spec.js | 8 +- .../integration/example-grouping-esm.spec.js | 82 + cypress/integration/example-grouping.spec.js | 6 - .../example-optimizing-updates.spec.js | 38 +- .../example-plugin-contextmenu.spec.js | 7 +- .../example-plugin-custom-tooltip.spec.js | 3 +- .../example-plugin-headerbuttons.spec.js | 12 +- .../integration/example15-auto-resize.spec.js | 6 +- cypress/integration/example3-editing.spec.js | 2 +- .../integration/example4-model-esm.spec.js | 121 + cypress/integration/example4-model.spec.js | 10 +- dist/browser/controls/slick.columnmenu.js | 143 + dist/browser/controls/slick.columnpicker.js | 141 + dist/browser/controls/slick.gridmenu.js | 232 + dist/browser/controls/slick.pager.js | 118 + dist/browser/plugins/slick.autotooltips.js | 42 + dist/browser/plugins/slick.cellcopymanager.js | 44 + .../plugins/slick.cellexternalcopymanager.js | 251 + dist/browser/plugins/slick.cellmenu.js | 204 + .../plugins/slick.cellrangedecorator.js | 44 + .../plugins/slick.cellrangeselector.js | 165 + .../plugins/slick.cellselectionmodel.js | 95 + .../plugins/slick.checkboxselectcolumn.js | 223 + dist/browser/plugins/slick.contextmenu.js | 204 + .../plugins/slick.crossgridrowmovemanager.js | 125 + dist/browser/plugins/slick.customtooltip.js | 184 + .../plugins/slick.draggablegrouping.js | 191 + dist/browser/plugins/slick.headerbuttons.js | 59 + dist/browser/plugins/slick.headermenu.js | 121 + dist/browser/plugins/slick.resizer.js | 95 + dist/browser/plugins/slick.rowdetailview.js | 286 + dist/browser/plugins/slick.rowmovemanager.js | 121 + .../plugins/slick.rowselectionmodel.js | 151 + dist/browser/plugins/slick.state.js | 140 + dist/browser/slick.compositeeditor.js | 112 + dist/browser/slick.core.js | 450 + dist/browser/slick.dataview.js | 754 ++ dist/browser/slick.editors.js | 354 + dist/browser/slick.formatters.js | 33 + dist/browser/slick.grid.js | 2529 ++++++ .../slick.groupitemmetadataprovider.js | 110 + dist/browser/slick.interactions.js | 92 + dist/browser/slick.remotemodel-yahoo.js | 93 + dist/browser/slick.remotemodel.js | 96 + dist/browser/sortable-shim.js | 29 + dist/cjs/index.js | 7528 +++++++++++++++++ dist/controls/slick.columnmenu.min.js | 9 - dist/controls/slick.columnmenu.min.js.map | 1 - dist/controls/slick.columnpicker.min.css | 1 - dist/controls/slick.columnpicker.min.js | 9 - dist/controls/slick.columnpicker.min.js.map | 1 - dist/controls/slick.gridmenu.min.css | 1 - dist/controls/slick.gridmenu.min.js | 9 - dist/controls/slick.gridmenu.min.js.map | 1 - dist/controls/slick.pager.min.css | 1 - dist/controls/slick.pager.min.js | 9 - dist/controls/slick.pager.min.js.map | 1 - dist/esm/index.js | 7508 ++++++++++++++++ dist/examples/examples-unicode-icons.min.css | 2 - dist/examples/examples.min.css | 1 - dist/images/CheckboxN.png | Bin 257 -> 0 bytes dist/images/CheckboxY.png | Bin 361 -> 0 bytes dist/images/GrpCheckboxN.png | Bin 282 -> 0 bytes dist/images/GrpCheckboxY.png | Bin 415 -> 0 bytes dist/images/actions.gif | Bin 170 -> 0 bytes dist/images/ajax-loader-small.gif | Bin 1849 -> 0 bytes dist/images/arrow-right.gif | Bin 63 -> 0 bytes dist/images/arrow_redo.png | Bin 572 -> 0 bytes dist/images/arrow_right_peppermint.png | Bin 128 -> 0 bytes dist/images/arrow_right_spearmint.png | Bin 128 -> 0 bytes dist/images/arrow_undo.png | Bin 578 -> 0 bytes dist/images/bullet_blue.png | Bin 241 -> 0 bytes dist/images/bullet_star.png | Bin 279 -> 0 bytes dist/images/bullet_toggle_minus.png | Bin 154 -> 0 bytes dist/images/bullet_toggle_plus.png | Bin 156 -> 0 bytes dist/images/calendar.gif | Bin 1035 -> 0 bytes dist/images/collapse.gif | Bin 846 -> 0 bytes dist/images/column-grouping.png | Bin 217 -> 0 bytes dist/images/comment_yellow.gif | Bin 257 -> 0 bytes dist/images/delete.png | Bin 682 -> 0 bytes dist/images/down.gif | Bin 59 -> 0 bytes dist/images/drag-handle.png | Bin 1130 -> 0 bytes dist/images/editor-helper-bg.gif | Bin 1164 -> 0 bytes dist/images/expand.gif | Bin 851 -> 0 bytes dist/images/header-bg.gif | Bin 872 -> 0 bytes dist/images/header-columns-bg.gif | Bin 836 -> 0 bytes dist/images/header-columns-over-bg.gif | Bin 823 -> 0 bytes dist/images/help.png | Bin 345 -> 0 bytes dist/images/info.gif | Bin 80 -> 0 bytes dist/images/listview.gif | Bin 2380 -> 0 bytes dist/images/pencil.gif | Bin 914 -> 0 bytes dist/images/row-over-bg.gif | Bin 823 -> 0 bytes dist/images/sort-asc.gif | Bin 830 -> 0 bytes dist/images/sort-asc.png | Bin 105 -> 0 bytes dist/images/sort-desc.gif | Bin 833 -> 0 bytes dist/images/sort-desc.png | Bin 107 -> 0 bytes dist/images/stripes.png | Bin 1125 -> 0 bytes dist/images/tag_red.png | Bin 537 -> 0 bytes dist/images/tick.png | Bin 484 -> 0 bytes dist/images/user_identity.gif | Bin 905 -> 0 bytes dist/images/user_identity_plus.gif | Bin 546 -> 0 bytes dist/plugins/slick.autotooltips.min.js | 9 - dist/plugins/slick.autotooltips.min.js.map | 1 - dist/plugins/slick.cellcopymanager.min.js | 9 - dist/plugins/slick.cellcopymanager.min.js.map | 1 - .../slick.cellexternalcopymanager.min.js | 9 - .../slick.cellexternalcopymanager.min.js.map | 1 - dist/plugins/slick.cellmenu.min.css | 1 - dist/plugins/slick.cellmenu.min.js | 9 - dist/plugins/slick.cellmenu.min.js.map | 1 - dist/plugins/slick.cellrangedecorator.min.js | 9 - .../slick.cellrangedecorator.min.js.map | 1 - dist/plugins/slick.cellrangeselector.min.js | 9 - .../slick.cellrangeselector.min.js.map | 1 - dist/plugins/slick.cellselectionmodel.min.js | 9 - .../slick.cellselectionmodel.min.js.map | 1 - .../plugins/slick.checkboxselectcolumn.min.js | 9 - .../slick.checkboxselectcolumn.min.js.map | 1 - dist/plugins/slick.contextmenu.min.css | 1 - dist/plugins/slick.contextmenu.min.js | 9 - dist/plugins/slick.contextmenu.min.js.map | 1 - .../slick.crossgridrowmovemanager.min.js | 9 - .../slick.crossgridrowmovemanager.min.js.map | 1 - dist/plugins/slick.customtooltip.min.css | 1 - dist/plugins/slick.customtooltip.min.js | 9 - dist/plugins/slick.customtooltip.min.js.map | 1 - dist/plugins/slick.draggablegrouping.min.css | 1 - dist/plugins/slick.draggablegrouping.min.js | 9 - .../slick.draggablegrouping.min.js.map | 1 - dist/plugins/slick.headerbuttons.min.css | 2 - dist/plugins/slick.headerbuttons.min.js | 9 - dist/plugins/slick.headerbuttons.min.js.map | 1 - dist/plugins/slick.headermenu.min.css | 2 - dist/plugins/slick.headermenu.min.js | 9 - dist/plugins/slick.headermenu.min.js.map | 1 - dist/plugins/slick.resizer.min.js | 9 - dist/plugins/slick.resizer.min.js.map | 1 - dist/plugins/slick.rowdetailview.min.css | 1 - dist/plugins/slick.rowdetailview.min.js | 9 - dist/plugins/slick.rowdetailview.min.js.map | 1 - dist/plugins/slick.rowmovemanager.min.js | 9 - dist/plugins/slick.rowmovemanager.min.js.map | 1 - dist/plugins/slick.rowselectionmodel.min.js | 9 - .../slick.rowselectionmodel.min.js.map | 1 - dist/plugins/slick.state.min.js | 9 - dist/plugins/slick.state.min.js.map | 1 - dist/slick-default-theme.min.css | 1 - dist/slick.compositeeditor.min.js | 9 - dist/slick.compositeeditor.min.js.map | 1 - dist/slick.core.min.js | 9 - dist/slick.core.min.js.map | 1 - dist/slick.dataview.min.js | 9 - dist/slick.dataview.min.js.map | 1 - dist/slick.editors.min.js | 9 - dist/slick.editors.min.js.map | 1 - dist/slick.formatters.min.js | 9 - dist/slick.formatters.min.js.map | 1 - dist/slick.grid.min.css | 1 - dist/slick.grid.min.js | 9 - dist/slick.grid.min.js.map | 1 - dist/slick.groupitemmetadataprovider.min.js | 9 - ...slick.groupitemmetadataprovider.min.js.map | 1 - dist/slick.interactions.min.js | 9 - dist/slick.interactions.min.js.map | 1 - dist/slick.remotemodel-yahoo.min.js | 9 - dist/slick.remotemodel-yahoo.min.js.map | 1 - dist/slick.remotemodel.min.js | 9 - dist/slick.remotemodel.min.js.map | 1 - dist/styles/css/example-demo.css | 1 + dist/styles/css/slick-alpine-theme.css | 10 + dist/styles/css/slick-default-theme.css | 1 + dist/styles/css/slick-icons.css | 1 + dist/styles/css/slick.cellmenu.css | 1 + dist/styles/css/slick.columnpicker.css | 1 + dist/styles/css/slick.contextmenu.css | 1 + dist/styles/css/slick.customtooltip.css | 1 + dist/styles/css/slick.draggablegrouping.css | 1 + dist/styles/css/slick.grid.css | 1 + dist/styles/css/slick.gridmenu.css | 1 + dist/styles/css/slick.headerbuttons.css | 1 + dist/styles/css/slick.headermenu.css | 1 + dist/styles/css/slick.pager.css | 1 + dist/styles/css/slick.rowdetailview.css | 1 + examples/example-0070-plugin-state.html | 46 +- .../example-auto-scroll-when-dragging.html | 46 +- examples/example-autocomplete-editor.html | 27 +- examples/example-autotooltips.html | 21 +- examples/example-bootstrap-3-header.html | 19 +- examples/example-checkbox-header-row.html | 49 +- examples/example-checkbox-row-select.html | 55 +- examples/example-colspan.html | 26 +- examples/example-column-group.html | 25 +- examples/example-column-hidden.html | 40 +- ...example-composite-editor-item-details.html | 52 +- ...example-composite-editor-modal-dialog.html | 77 +- ...example-custom-column-value-extractor.html | 17 +- examples/example-drag-row-between-grids.html | 42 +- examples/example-draggable-grouping.html | 173 +- ...ple-dynamic-filtered-with-jquery-tabs.html | 98 +- .../example-dynamic-with-jquery-tabs.html | 13 +- ...excel-compatible-spreadsheet-dataview.html | 59 +- .../example-excel-compatible-spreadsheet.html | 54 +- examples/example-explicit-initialization.html | 26 +- examples/example-external-headersort.html | 35 +- examples/example-footer-totals.html | 28 +- ...n-columns-and-column-group-hidden-col.html | 33 +- ...ample-frozen-columns-and-column-group.html | 30 +- ...e-frozen-columns-and-rows-spreadsheet.html | 37 +- examples/example-frozen-columns-and-rows.html | 98 +- .../example-frozen-columns-autoheight.html | 18 +- examples/example-frozen-columns-large.html | 67 +- examples/example-frozen-columns-tabs.html | 66 +- examples/example-frozen-columns.html | 85 +- examples/example-frozen-row-reordering.html | 50 +- examples/example-frozen-rows.html | 111 +- examples/example-grid-menu.html | 85 +- .../example-grouping-checkbox-row-select.html | 79 +- examples/example-grouping-esm.html | 410 + examples/example-grouping-groupcolumn.html | 75 +- examples/example-grouping.html | 85 +- examples/example-header-row.html | 44 +- examples/example-html-sanitizer.html | 12 +- examples/example-icons.html | 152 + examples/example-jquery-accordion.html | 15 +- examples/example-multi-column-sort.html | 22 +- ...e-multi-column-tristate-numbered-sort.html | 46 +- examples/example-multi-grid-basic.html | 37 +- examples/example-multiselect-editor.html | 26 +- examples/example-optimizing-dataview.html | 34 +- examples/example-optimizing-updates.html | 37 +- examples/example-plugin-contextmenu.html | 84 +- examples/example-plugin-custom-tooltip.html | 71 +- examples/example-plugin-headerbuttons.html | 57 +- examples/example-plugin-headermenu.html | 73 +- ...example-row-detail-selection-and-move.html | 56 +- examples/example-select2-editor.html | 29 +- .../example-select2-multiselect-editor.html | 27 +- examples/example-size-to-content.html | 51 +- examples/example-spreadsheet.html | 47 +- .../example-totals-via-data-provider.html | 29 +- examples/example1-simple.html | 24 +- examples/example10-async-post-render.html | 21 +- .../example10a-async-post-render-cleanup.html | 29 +- examples/example11-autoheight.html | 21 +- examples/example12-fillbrowser.html | 25 +- examples/example13-getItem-sorting.html | 17 +- examples/example14-highlighting.html | 32 +- examples/example15-auto-resize.html | 20 +- examples/example16-row-detail.html | 59 +- .../example17-row-detail-many-columns.html | 99 +- examples/example2-formatters-event.html | 37 +- examples/example2-formatters.html | 37 +- examples/example3-editing.html | 46 +- examples/example3a-compound-editors.html | 47 +- examples/example3b-editing-with-undo.html | 41 +- examples/example4-model-esm.html | 404 + examples/example4-model.html | 102 +- .../example5-collapsing-treeGrid-sort.html | 67 +- examples/example5-collapsing.html | 78 +- examples/example6-ajax-loading-yahoo.html | 26 +- examples/example6-ajax-loading.html | 26 +- examples/example7-events.html | 63 +- examples/example8-alternative-display.html | 26 +- examples/example9-row-reordering-simple.html | 40 +- examples/example9-row-reordering.html | 44 +- examples/examples-unicode-icons.css | 18 +- examples/examples.css | 47 +- examples/index.html | 158 +- examples/sortable-cdn-fallback.js | 12 + images/CheckboxN.png | Bin 257 -> 0 bytes images/CheckboxY.png | Bin 361 -> 0 bytes images/GrpCheckboxN.png | Bin 282 -> 0 bytes images/GrpCheckboxY.png | Bin 415 -> 0 bytes images/actions.gif | Bin 170 -> 0 bytes images/ajax-loader-small.gif | Bin 1849 -> 0 bytes images/arrow-right.gif | Bin 63 -> 0 bytes images/arrow_redo.png | Bin 572 -> 0 bytes images/arrow_right_peppermint.png | Bin 128 -> 0 bytes images/arrow_right_spearmint.png | Bin 128 -> 0 bytes images/arrow_undo.png | Bin 578 -> 0 bytes images/bullet_blue.png | Bin 241 -> 0 bytes images/bullet_star.png | Bin 279 -> 0 bytes images/bullet_toggle_minus.png | Bin 154 -> 0 bytes images/bullet_toggle_plus.png | Bin 156 -> 0 bytes images/calendar.gif | Bin 1035 -> 0 bytes images/collapse.gif | Bin 846 -> 0 bytes images/column-grouping.png | Bin 217 -> 0 bytes images/comment_yellow.gif | Bin 257 -> 0 bytes images/delete.png | Bin 682 -> 0 bytes images/down.gif | Bin 59 -> 0 bytes images/drag-handle.png | Bin 1130 -> 0 bytes images/editor-helper-bg.gif | Bin 1164 -> 0 bytes images/expand.gif | Bin 851 -> 0 bytes images/header-bg.gif | Bin 872 -> 0 bytes images/header-columns-bg.gif | Bin 836 -> 0 bytes images/header-columns-over-bg.gif | Bin 823 -> 0 bytes images/help.png | Bin 345 -> 0 bytes images/info.gif | Bin 80 -> 0 bytes images/listview.gif | Bin 2380 -> 0 bytes images/pencil.gif | Bin 914 -> 0 bytes images/row-over-bg.gif | Bin 823 -> 0 bytes images/sort-asc.gif | Bin 830 -> 0 bytes images/sort-asc.png | Bin 105 -> 0 bytes images/sort-desc.gif | Bin 833 -> 0 bytes images/sort-desc.png | Bin 107 -> 0 bytes images/stripes.png | Bin 1125 -> 0 bytes images/tag_red.png | Bin 537 -> 0 bytes images/tick.png | Bin 484 -> 0 bytes images/user_identity.gif | Bin 905 -> 0 bytes images/user_identity_plus.gif | Bin 546 -> 0 bytes index.js | 1 - lib/firebugx.js | 9 - lib/select2-license.txt | 21 + {css => lib}/select2.css | 0 package-lock.json | 4922 ++++++++++- package.json | 74 +- plugins/slick.autotooltips.js | 93 - plugins/slick.cellcopymanager.js | 90 - plugins/slick.draggablegrouping.css | 73 - scripts/builds.mjs | 222 + scripts/child-process.js | 64 +- scripts/dev-watch.mjs | 111 + scripts/esbuild-plugins.mjs | 15 + slick-default-theme.css | 136 - slick.compositeeditor.js | 249 - slick.core.js | 1010 --- slick.dataview.js | 1703 ---- slick.editors.js | 839 -- slick.formatters.js | 63 - slick.grid.js | 6340 -------------- slick.groupitemmetadataprovider.js | 180 - slick.interactions.js | 261 - .../controls}/slick.columnmenu.js | 0 .../controls}/slick.columnpicker.js | 31 +- {controls => src/controls}/slick.gridmenu.js | 64 +- {controls => src/controls}/slick.pager.js | 65 +- src/global.d.ts | 66 + src/index.ts | 30 + src/models/aggregator.interface.ts | 16 + src/models/autoTooltipOption.interface.ts | 13 + src/models/column.interface.ts | 186 + src/models/columnReorderFunction.type.ts | 4 + src/models/columnSort.interface.ts | 12 + src/models/compositeEditorOption.interface.ts | 39 + src/models/core.interface.ts | 15 + src/models/customTooltipOption.interface.ts | 96 + src/models/dataViewEvents.interface.ts | 10 + src/models/drag.interface.ts | 41 + src/models/editCommand.interface.ts | 24 + src/models/editor.interface.ts | 88 + src/models/editorArguments.interface.ts | 45 + .../editorValidationResult.interface.ts | 11 + src/models/editorValidator.interface.ts | 4 + src/models/elementPosition.interface.ts | 9 + src/models/fieldType.enum.ts | 109 + src/models/formatter.interface.ts | 6 + src/models/formatterResultObject.interface.ts | 13 + src/models/gridEvents.interface.ts | 45 + src/models/gridOption.interface.ts | 281 + ...oupItemMetadataProviderOption.interface.ts | 51 + src/models/groupTotalsFormatter.interface.ts | 4 + src/models/grouping.interface.ts | 44 + src/models/groupingComparerItem.interface.ts | 7 + src/models/groupingFormatterItem.interface.ts | 13 + src/models/index.ts | 35 + src/models/infer.type.ts | 7 + src/models/interactions.interface.ts | 50 + src/models/itemMetadata.interface.ts | 44 + src/models/multiColumnSort.interface.ts | 16 + src/models/pagingInfo.interface.ts | 17 + src/models/plugin.interface.ts | 7 + src/models/positionMethod.type.ts | 3 + src/models/singleColumnSort.interface.ts | 13 + src/models/sortDirectionNumber.enum.ts | 5 + src/plugins/slick.autotooltips.ts | 109 + src/plugins/slick.cellcopymanager.ts | 91 + .../plugins}/slick.cellexternalcopymanager.js | 141 +- {plugins => src/plugins}/slick.cellmenu.js | 73 +- .../plugins}/slick.cellrangedecorator.js | 29 +- .../plugins}/slick.cellrangeselector.js | 58 +- .../plugins}/slick.cellselectionmodel.js | 52 +- .../plugins}/slick.checkboxselectcolumn.js | 38 +- {plugins => src/plugins}/slick.contextmenu.js | 68 +- .../plugins}/slick.crossgridrowmovemanager.js | 45 +- .../plugins}/slick.customtooltip.js | 55 +- .../plugins}/slick.draggablegrouping.js | 122 +- .../plugins}/slick.headerbuttons.js | 42 +- {plugins => src/plugins}/slick.headermenu.js | 72 +- {plugins => src/plugins}/slick.resizer.js | 53 +- .../plugins}/slick.rowdetailview.js | 54 +- .../plugins}/slick.rowmovemanager.js | 51 +- .../plugins}/slick.rowselectionmodel.js | 75 +- {plugins => src/plugins}/slick.state.js | 36 +- src/slick.compositeeditor.ts | 259 + src/slick.core.ts | 1016 +++ src/slick.dataview.ts | 1764 ++++ src/slick.editors.ts | 916 ++ src/slick.formatters.ts | 71 + src/slick.grid.ts | 6582 ++++++++++++++ src/slick.groupitemmetadataprovider.ts | 186 + src/slick.interactions.ts | 264 + .../slick.remotemodel-yahoo.js | 0 .../slick.remotemodel.js | 0 src/sortable-shim.js | 3 + src/styles/_mixins.scss | 17 + src/styles/_variables.scss | 138 + src/styles/example-demo.scss | 52 + src/styles/slick-alpine-theme.scss | 837 ++ src/styles/slick-default-theme.scss | 166 + src/styles/slick-icons.scss | 88 + .../styles/slick.cellmenu.scss | 0 .../styles/slick.columnpicker.scss | 0 .../styles/slick.contextmenu.scss | 0 .../styles/slick.customtooltip.scss | 0 src/styles/slick.draggablegrouping.scss | 83 + slick.grid.css => src/styles/slick.grid.scss | 40 +- .../styles/slick.gridmenu.scss | 2 + .../styles/slick.headerbuttons.scss | 0 .../styles/slick.headermenu.scss | 16 +- .../styles/slick.pager.scss | 2 +- .../styles/slick.rowdetailview.scss | 22 +- tests/40 grids on a page test.html | 10 +- tests/dataview/dataview.js | 3 +- tests/dataview/index.html | 4 +- tests/grid/index.html | 8 +- tests/init benchmark.html | 12 +- tests/model benchmarks.html | 6 +- tests/plugins/autotooltips.html | 10 +- tests/plugins/cellrangedecorator.html | 10 +- tests/plugins/cellrangeselector.html | 10 +- tests/plugins/cellselectionmodel.html | 10 +- tests/scrolling benchmark raf.html | 15 +- tests/scrolling benchmarks.html | 13 +- tests/test-4-rows-paging.html | 61 +- tsconfig.json | 36 + 461 files changed, 46529 insertions(+), 23472 deletions(-) delete mode 100644 css/bootstrap.css delete mode 100644 css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png delete mode 100644 css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png delete mode 100644 css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png delete mode 100644 css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png delete mode 100644 css/smoothness/images/ui-bg_glass_75_dadada_1x400.png delete mode 100644 css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png delete mode 100644 css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png delete mode 100644 css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png delete mode 100644 css/smoothness/images/ui-icons_222222_256x240.png delete mode 100644 css/smoothness/images/ui-icons_2e83ff_256x240.png delete mode 100644 css/smoothness/images/ui-icons_454545_256x240.png delete mode 100644 css/smoothness/images/ui-icons_888888_256x240.png delete mode 100644 css/smoothness/images/ui-icons_cd0a0a_256x240.png delete mode 100644 css/smoothness/jquery-ui-1.11.3.custom.css delete mode 100644 css/smoothness/jquery-ui-1.11.3.custom.min.css delete mode 100644 css/smoothness/jquery-ui.css create mode 100644 cypress/integration/example-grouping-esm.spec.js create mode 100644 cypress/integration/example4-model-esm.spec.js create mode 100644 dist/browser/controls/slick.columnmenu.js create mode 100644 dist/browser/controls/slick.columnpicker.js create mode 100644 dist/browser/controls/slick.gridmenu.js create mode 100644 dist/browser/controls/slick.pager.js create mode 100644 dist/browser/plugins/slick.autotooltips.js create mode 100644 dist/browser/plugins/slick.cellcopymanager.js create mode 100644 dist/browser/plugins/slick.cellexternalcopymanager.js create mode 100644 dist/browser/plugins/slick.cellmenu.js create mode 100644 dist/browser/plugins/slick.cellrangedecorator.js create mode 100644 dist/browser/plugins/slick.cellrangeselector.js create mode 100644 dist/browser/plugins/slick.cellselectionmodel.js create mode 100644 dist/browser/plugins/slick.checkboxselectcolumn.js create mode 100644 dist/browser/plugins/slick.contextmenu.js create mode 100644 dist/browser/plugins/slick.crossgridrowmovemanager.js create mode 100644 dist/browser/plugins/slick.customtooltip.js create mode 100644 dist/browser/plugins/slick.draggablegrouping.js create mode 100644 dist/browser/plugins/slick.headerbuttons.js create mode 100644 dist/browser/plugins/slick.headermenu.js create mode 100644 dist/browser/plugins/slick.resizer.js create mode 100644 dist/browser/plugins/slick.rowdetailview.js create mode 100644 dist/browser/plugins/slick.rowmovemanager.js create mode 100644 dist/browser/plugins/slick.rowselectionmodel.js create mode 100644 dist/browser/plugins/slick.state.js create mode 100644 dist/browser/slick.compositeeditor.js create mode 100644 dist/browser/slick.core.js create mode 100644 dist/browser/slick.dataview.js create mode 100644 dist/browser/slick.editors.js create mode 100644 dist/browser/slick.formatters.js create mode 100644 dist/browser/slick.grid.js create mode 100644 dist/browser/slick.groupitemmetadataprovider.js create mode 100644 dist/browser/slick.interactions.js create mode 100644 dist/browser/slick.remotemodel-yahoo.js create mode 100644 dist/browser/slick.remotemodel.js create mode 100644 dist/browser/sortable-shim.js create mode 100644 dist/cjs/index.js delete mode 100644 dist/controls/slick.columnmenu.min.js delete mode 100644 dist/controls/slick.columnmenu.min.js.map delete mode 100644 dist/controls/slick.columnpicker.min.css delete mode 100644 dist/controls/slick.columnpicker.min.js delete mode 100644 dist/controls/slick.columnpicker.min.js.map delete mode 100644 dist/controls/slick.gridmenu.min.css delete mode 100644 dist/controls/slick.gridmenu.min.js delete mode 100644 dist/controls/slick.gridmenu.min.js.map delete mode 100644 dist/controls/slick.pager.min.css delete mode 100644 dist/controls/slick.pager.min.js delete mode 100644 dist/controls/slick.pager.min.js.map create mode 100644 dist/esm/index.js delete mode 100644 dist/examples/examples-unicode-icons.min.css delete mode 100644 dist/examples/examples.min.css delete mode 100644 dist/images/CheckboxN.png delete mode 100644 dist/images/CheckboxY.png delete mode 100644 dist/images/GrpCheckboxN.png delete mode 100644 dist/images/GrpCheckboxY.png delete mode 100644 dist/images/actions.gif delete mode 100644 dist/images/ajax-loader-small.gif delete mode 100644 dist/images/arrow-right.gif delete mode 100644 dist/images/arrow_redo.png delete mode 100644 dist/images/arrow_right_peppermint.png delete mode 100644 dist/images/arrow_right_spearmint.png delete mode 100644 dist/images/arrow_undo.png delete mode 100644 dist/images/bullet_blue.png delete mode 100644 dist/images/bullet_star.png delete mode 100644 dist/images/bullet_toggle_minus.png delete mode 100644 dist/images/bullet_toggle_plus.png delete mode 100644 dist/images/calendar.gif delete mode 100644 dist/images/collapse.gif delete mode 100644 dist/images/column-grouping.png delete mode 100644 dist/images/comment_yellow.gif delete mode 100644 dist/images/delete.png delete mode 100644 dist/images/down.gif delete mode 100644 dist/images/drag-handle.png delete mode 100644 dist/images/editor-helper-bg.gif delete mode 100644 dist/images/expand.gif delete mode 100644 dist/images/header-bg.gif delete mode 100644 dist/images/header-columns-bg.gif delete mode 100644 dist/images/header-columns-over-bg.gif delete mode 100644 dist/images/help.png delete mode 100644 dist/images/info.gif delete mode 100644 dist/images/listview.gif delete mode 100644 dist/images/pencil.gif delete mode 100644 dist/images/row-over-bg.gif delete mode 100644 dist/images/sort-asc.gif delete mode 100644 dist/images/sort-asc.png delete mode 100644 dist/images/sort-desc.gif delete mode 100644 dist/images/sort-desc.png delete mode 100644 dist/images/stripes.png delete mode 100644 dist/images/tag_red.png delete mode 100644 dist/images/tick.png delete mode 100644 dist/images/user_identity.gif delete mode 100644 dist/images/user_identity_plus.gif delete mode 100644 dist/plugins/slick.autotooltips.min.js delete mode 100644 dist/plugins/slick.autotooltips.min.js.map delete mode 100644 dist/plugins/slick.cellcopymanager.min.js delete mode 100644 dist/plugins/slick.cellcopymanager.min.js.map delete mode 100644 dist/plugins/slick.cellexternalcopymanager.min.js delete mode 100644 dist/plugins/slick.cellexternalcopymanager.min.js.map delete mode 100644 dist/plugins/slick.cellmenu.min.css delete mode 100644 dist/plugins/slick.cellmenu.min.js delete mode 100644 dist/plugins/slick.cellmenu.min.js.map delete mode 100644 dist/plugins/slick.cellrangedecorator.min.js delete mode 100644 dist/plugins/slick.cellrangedecorator.min.js.map delete mode 100644 dist/plugins/slick.cellrangeselector.min.js delete mode 100644 dist/plugins/slick.cellrangeselector.min.js.map delete mode 100644 dist/plugins/slick.cellselectionmodel.min.js delete mode 100644 dist/plugins/slick.cellselectionmodel.min.js.map delete mode 100644 dist/plugins/slick.checkboxselectcolumn.min.js delete mode 100644 dist/plugins/slick.checkboxselectcolumn.min.js.map delete mode 100644 dist/plugins/slick.contextmenu.min.css delete mode 100644 dist/plugins/slick.contextmenu.min.js delete mode 100644 dist/plugins/slick.contextmenu.min.js.map delete mode 100644 dist/plugins/slick.crossgridrowmovemanager.min.js delete mode 100644 dist/plugins/slick.crossgridrowmovemanager.min.js.map delete mode 100644 dist/plugins/slick.customtooltip.min.css delete mode 100644 dist/plugins/slick.customtooltip.min.js delete mode 100644 dist/plugins/slick.customtooltip.min.js.map delete mode 100644 dist/plugins/slick.draggablegrouping.min.css delete mode 100644 dist/plugins/slick.draggablegrouping.min.js delete mode 100644 dist/plugins/slick.draggablegrouping.min.js.map delete mode 100644 dist/plugins/slick.headerbuttons.min.css delete mode 100644 dist/plugins/slick.headerbuttons.min.js delete mode 100644 dist/plugins/slick.headerbuttons.min.js.map delete mode 100644 dist/plugins/slick.headermenu.min.css delete mode 100644 dist/plugins/slick.headermenu.min.js delete mode 100644 dist/plugins/slick.headermenu.min.js.map delete mode 100644 dist/plugins/slick.resizer.min.js delete mode 100644 dist/plugins/slick.resizer.min.js.map delete mode 100644 dist/plugins/slick.rowdetailview.min.css delete mode 100644 dist/plugins/slick.rowdetailview.min.js delete mode 100644 dist/plugins/slick.rowdetailview.min.js.map delete mode 100644 dist/plugins/slick.rowmovemanager.min.js delete mode 100644 dist/plugins/slick.rowmovemanager.min.js.map delete mode 100644 dist/plugins/slick.rowselectionmodel.min.js delete mode 100644 dist/plugins/slick.rowselectionmodel.min.js.map delete mode 100644 dist/plugins/slick.state.min.js delete mode 100644 dist/plugins/slick.state.min.js.map delete mode 100644 dist/slick-default-theme.min.css delete mode 100644 dist/slick.compositeeditor.min.js delete mode 100644 dist/slick.compositeeditor.min.js.map delete mode 100644 dist/slick.core.min.js delete mode 100644 dist/slick.core.min.js.map delete mode 100644 dist/slick.dataview.min.js delete mode 100644 dist/slick.dataview.min.js.map delete mode 100644 dist/slick.editors.min.js delete mode 100644 dist/slick.editors.min.js.map delete mode 100644 dist/slick.formatters.min.js delete mode 100644 dist/slick.formatters.min.js.map delete mode 100644 dist/slick.grid.min.css delete mode 100644 dist/slick.grid.min.js delete mode 100644 dist/slick.grid.min.js.map delete mode 100644 dist/slick.groupitemmetadataprovider.min.js delete mode 100644 dist/slick.groupitemmetadataprovider.min.js.map delete mode 100644 dist/slick.interactions.min.js delete mode 100644 dist/slick.interactions.min.js.map delete mode 100644 dist/slick.remotemodel-yahoo.min.js delete mode 100644 dist/slick.remotemodel-yahoo.min.js.map delete mode 100644 dist/slick.remotemodel.min.js delete mode 100644 dist/slick.remotemodel.min.js.map create mode 100644 dist/styles/css/example-demo.css create mode 100644 dist/styles/css/slick-alpine-theme.css create mode 100644 dist/styles/css/slick-default-theme.css create mode 100644 dist/styles/css/slick-icons.css create mode 100644 dist/styles/css/slick.cellmenu.css create mode 100644 dist/styles/css/slick.columnpicker.css create mode 100644 dist/styles/css/slick.contextmenu.css create mode 100644 dist/styles/css/slick.customtooltip.css create mode 100644 dist/styles/css/slick.draggablegrouping.css create mode 100644 dist/styles/css/slick.grid.css create mode 100644 dist/styles/css/slick.gridmenu.css create mode 100644 dist/styles/css/slick.headerbuttons.css create mode 100644 dist/styles/css/slick.headermenu.css create mode 100644 dist/styles/css/slick.pager.css create mode 100644 dist/styles/css/slick.rowdetailview.css create mode 100644 examples/example-grouping-esm.html create mode 100644 examples/example-icons.html create mode 100644 examples/example4-model-esm.html create mode 100644 examples/sortable-cdn-fallback.js delete mode 100644 images/CheckboxN.png delete mode 100644 images/CheckboxY.png delete mode 100644 images/GrpCheckboxN.png delete mode 100644 images/GrpCheckboxY.png delete mode 100644 images/actions.gif delete mode 100644 images/ajax-loader-small.gif delete mode 100644 images/arrow-right.gif delete mode 100644 images/arrow_redo.png delete mode 100644 images/arrow_right_peppermint.png delete mode 100644 images/arrow_right_spearmint.png delete mode 100644 images/arrow_undo.png delete mode 100644 images/bullet_blue.png delete mode 100644 images/bullet_star.png delete mode 100644 images/bullet_toggle_minus.png delete mode 100644 images/bullet_toggle_plus.png delete mode 100644 images/calendar.gif delete mode 100644 images/collapse.gif delete mode 100644 images/column-grouping.png delete mode 100644 images/comment_yellow.gif delete mode 100644 images/delete.png delete mode 100644 images/down.gif delete mode 100644 images/drag-handle.png delete mode 100644 images/editor-helper-bg.gif delete mode 100644 images/expand.gif delete mode 100644 images/header-bg.gif delete mode 100644 images/header-columns-bg.gif delete mode 100644 images/header-columns-over-bg.gif delete mode 100644 images/help.png delete mode 100644 images/info.gif delete mode 100644 images/listview.gif delete mode 100644 images/pencil.gif delete mode 100644 images/row-over-bg.gif delete mode 100644 images/sort-asc.gif delete mode 100644 images/sort-asc.png delete mode 100644 images/sort-desc.gif delete mode 100644 images/sort-desc.png delete mode 100644 images/stripes.png delete mode 100644 images/tag_red.png delete mode 100644 images/tick.png delete mode 100644 images/user_identity.gif delete mode 100644 images/user_identity_plus.gif delete mode 100644 index.js delete mode 100644 lib/firebugx.js create mode 100644 lib/select2-license.txt rename {css => lib}/select2.css (100%) delete mode 100644 plugins/slick.autotooltips.js delete mode 100644 plugins/slick.cellcopymanager.js delete mode 100644 plugins/slick.draggablegrouping.css create mode 100644 scripts/builds.mjs create mode 100644 scripts/dev-watch.mjs create mode 100644 scripts/esbuild-plugins.mjs delete mode 100644 slick-default-theme.css delete mode 100644 slick.compositeeditor.js delete mode 100644 slick.core.js delete mode 100644 slick.dataview.js delete mode 100644 slick.editors.js delete mode 100644 slick.formatters.js delete mode 100644 slick.grid.js delete mode 100644 slick.groupitemmetadataprovider.js delete mode 100644 slick.interactions.js rename {controls => src/controls}/slick.columnmenu.js (100%) rename {controls => src/controls}/slick.columnpicker.js (93%) rename {controls => src/controls}/slick.gridmenu.js (95%) rename {controls => src/controls}/slick.pager.js (79%) create mode 100644 src/global.d.ts create mode 100644 src/index.ts create mode 100644 src/models/aggregator.interface.ts create mode 100644 src/models/autoTooltipOption.interface.ts create mode 100644 src/models/column.interface.ts create mode 100644 src/models/columnReorderFunction.type.ts create mode 100644 src/models/columnSort.interface.ts create mode 100644 src/models/compositeEditorOption.interface.ts create mode 100644 src/models/core.interface.ts create mode 100644 src/models/customTooltipOption.interface.ts create mode 100644 src/models/dataViewEvents.interface.ts create mode 100644 src/models/drag.interface.ts create mode 100644 src/models/editCommand.interface.ts create mode 100644 src/models/editor.interface.ts create mode 100644 src/models/editorArguments.interface.ts create mode 100644 src/models/editorValidationResult.interface.ts create mode 100644 src/models/editorValidator.interface.ts create mode 100644 src/models/elementPosition.interface.ts create mode 100644 src/models/fieldType.enum.ts create mode 100644 src/models/formatter.interface.ts create mode 100644 src/models/formatterResultObject.interface.ts create mode 100644 src/models/gridEvents.interface.ts create mode 100644 src/models/gridOption.interface.ts create mode 100644 src/models/groupItemMetadataProviderOption.interface.ts create mode 100644 src/models/groupTotalsFormatter.interface.ts create mode 100644 src/models/grouping.interface.ts create mode 100644 src/models/groupingComparerItem.interface.ts create mode 100644 src/models/groupingFormatterItem.interface.ts create mode 100644 src/models/index.ts create mode 100644 src/models/infer.type.ts create mode 100644 src/models/interactions.interface.ts create mode 100644 src/models/itemMetadata.interface.ts create mode 100644 src/models/multiColumnSort.interface.ts create mode 100644 src/models/pagingInfo.interface.ts create mode 100644 src/models/plugin.interface.ts create mode 100644 src/models/positionMethod.type.ts create mode 100644 src/models/singleColumnSort.interface.ts create mode 100644 src/models/sortDirectionNumber.enum.ts create mode 100644 src/plugins/slick.autotooltips.ts create mode 100644 src/plugins/slick.cellcopymanager.ts rename {plugins => src/plugins}/slick.cellexternalcopymanager.js (85%) rename {plugins => src/plugins}/slick.cellmenu.js (94%) rename {plugins => src/plugins}/slick.cellrangedecorator.js (79%) rename {plugins => src/plugins}/slick.cellrangeselector.js (87%) rename {plugins => src/plugins}/slick.cellselectionmodel.js (80%) rename {plugins => src/plugins}/slick.checkboxselectcolumn.js (94%) rename {plugins => src/plugins}/slick.contextmenu.js (94%) rename {plugins => src/plugins}/slick.crossgridrowmovemanager.js (91%) rename {plugins => src/plugins}/slick.customtooltip.js (96%) rename {plugins => src/plugins}/slick.draggablegrouping.js (84%) rename {plugins => src/plugins}/slick.headerbuttons.js (88%) rename {plugins => src/plugins}/slick.headermenu.js (88%) rename {plugins => src/plugins}/slick.resizer.js (91%) rename {plugins => src/plugins}/slick.rowdetailview.js (96%) rename {plugins => src/plugins}/slick.rowmovemanager.js (89%) rename {plugins => src/plugins}/slick.rowselectionmodel.js (75%) rename {plugins => src/plugins}/slick.state.js (88%) create mode 100644 src/slick.compositeeditor.ts create mode 100644 src/slick.core.ts create mode 100644 src/slick.dataview.ts create mode 100644 src/slick.editors.ts create mode 100644 src/slick.formatters.ts create mode 100644 src/slick.grid.ts create mode 100644 src/slick.groupitemmetadataprovider.ts create mode 100644 src/slick.interactions.ts rename slick.remotemodel-yahoo.js => src/slick.remotemodel-yahoo.js (100%) rename slick.remotemodel.js => src/slick.remotemodel.js (100%) create mode 100644 src/sortable-shim.js create mode 100644 src/styles/_mixins.scss create mode 100644 src/styles/_variables.scss create mode 100644 src/styles/example-demo.scss create mode 100644 src/styles/slick-alpine-theme.scss create mode 100644 src/styles/slick-default-theme.scss create mode 100644 src/styles/slick-icons.scss rename plugins/slick.cellmenu.css => src/styles/slick.cellmenu.scss (100%) rename controls/slick.columnpicker.css => src/styles/slick.columnpicker.scss (100%) rename plugins/slick.contextmenu.css => src/styles/slick.contextmenu.scss (100%) rename plugins/slick.customtooltip.css => src/styles/slick.customtooltip.scss (100%) create mode 100644 src/styles/slick.draggablegrouping.scss rename slick.grid.css => src/styles/slick.grid.scss (86%) rename controls/slick.gridmenu.css => src/styles/slick.gridmenu.scss (98%) rename plugins/slick.headerbuttons.css => src/styles/slick.headerbuttons.scss (100%) rename plugins/slick.headermenu.css => src/styles/slick.headermenu.scss (82%) rename controls/slick.pager.css => src/styles/slick.pager.scss (89%) rename plugins/slick.rowdetailview.css => src/styles/slick.rowdetailview.scss (61%) create mode 100644 tsconfig.json diff --git a/.eslintrc b/.eslintrc index 0f2940f2..2dbf04ce 100644 --- a/.eslintrc +++ b/.eslintrc @@ -11,7 +11,8 @@ "globals": { "flatpickr": true, "Slick": true, - "Sortable": true + "Sortable": true, + "IIFE_ONLY": true }, "rules": { "cypress/no-unnecessary-waiting": "off", diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 90d51dd2..89e52a0f 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -47,9 +47,14 @@ jobs: - name: Install npm dependencies run: npm install + - name: Prod Build + run: npm run build:prod + + - name: Start HTTP Server + run: npm run serve:demo & + - name: Run Cypress E2E tests - uses: cypress-io/github-action@v4 + uses: cypress-io/github-action@v5 with: - start: npm run serve - wait-on: 'http://localhost:8080' + # wait-on: 'http://localhost:8080' browser: chrome diff --git a/.gitignore b/.gitignore index 504bc200..617c74bb 100644 --- a/.gitignore +++ b/.gitignore @@ -10,4 +10,5 @@ SlickgridRelease* nuget* testresult.xml yarn-error.log -yarn.lock \ No newline at end of file +yarn.lock +tsconfig.tsbuildinfo \ No newline at end of file diff --git a/.npmignore b/.npmignore index 0350c63d..17aa9135 100644 --- a/.npmignore +++ b/.npmignore @@ -14,8 +14,11 @@ CODE_OF_CONDUCT.md nuget* cypress.json cypress/* +lib +node_modules examples SlickgridRelease* +scripts tests testresult.xml package-lock.json diff --git a/LICENSE b/LICENSE index be71f9eb..95b19673 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2009-2019 Michael Leibman and Ben McIntyre, http://github.com/6pac/slickgrid +Copyright (c) 2009-present Michael Leibman and Ben McIntyre, http://github.com/6pac/slickgrid Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the diff --git a/css/bootstrap.css b/css/bootstrap.css deleted file mode 100644 index 16df19dc..00000000 --- a/css/bootstrap.css +++ /dev/null @@ -1,6566 +0,0 @@ -/*! - * Bootstrap v3.3.2 (http://getbootstrap.com) - * Copyright 2011-2015 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */ - -/*! normalize.css v3.0.2 | MIT License | git.io/normalize */ -html { - font-family: sans-serif; - -webkit-text-size-adjust: 100%; - -ms-text-size-adjust: 100%; -} -body { - margin: 0; -} -article, -aside, -details, -figcaption, -figure, -footer, -header, -hgroup, -main, -menu, -nav, -section, -summary { - display: block; -} -audio, -canvas, -progress, -video { - display: inline-block; - vertical-align: baseline; -} -audio:not([controls]) { - display: none; - height: 0; -} -[hidden], -template { - display: none; -} -a { - background-color: transparent; -} -a:active, -a:hover { - outline: 0; -} -abbr[title] { - border-bottom: 1px dotted; -} -b, -strong { - font-weight: bold; -} -dfn { - font-style: italic; -} -h1 { - margin: .67em 0; - font-size: 2em; -} -mark { - color: #000; - background: #ff0; -} -small { - font-size: 80%; -} -sub, -sup { - position: relative; - font-size: 75%; - line-height: 0; - vertical-align: baseline; -} -sup { - top: -.5em; -} -sub { - bottom: -.25em; -} -img { - border: 0; -} -svg:not(:root) { - overflow: hidden; -} -figure { - margin: 1em 40px; -} -hr { - height: 0; - -webkit-box-sizing: content-box; - -moz-box-sizing: content-box; - box-sizing: content-box; -} -pre { - overflow: auto; -} -code, -kbd, -pre, -samp { - font-family: monospace, monospace; - font-size: 1em; -} -button, -input, -optgroup, -select, -textarea { - margin: 0; - font: inherit; - color: inherit; -} -button { - overflow: visible; -} -button, -select { - text-transform: none; -} -button, -html input[type="button"], -input[type="reset"], -input[type="submit"] { - -webkit-appearance: button; - cursor: pointer; -} -button[disabled], -html input[disabled] { - cursor: default; -} -button::-moz-focus-inner, -input::-moz-focus-inner { - padding: 0; - border: 0; -} -input { - line-height: normal; -} -input[type="checkbox"], -input[type="radio"] { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - padding: 0; -} -input[type="number"]::-webkit-inner-spin-button, -input[type="number"]::-webkit-outer-spin-button { - height: auto; -} -input[type="search"] { - -webkit-box-sizing: content-box; - -moz-box-sizing: content-box; - box-sizing: content-box; - -webkit-appearance: textfield; -} -input[type="search"]::-webkit-search-cancel-button, -input[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; -} -fieldset { - padding: .35em .625em .75em; - margin: 0 2px; - border: 1px solid #c0c0c0; -} -legend { - padding: 0; - border: 0; -} -textarea { - overflow: auto; -} -optgroup { - font-weight: bold; -} -table { - border-spacing: 0; - border-collapse: collapse; -} -td, -th { - padding: 0; -} -/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */ -@media print { - *, - *:before, - *:after { - color: #000 !important; - text-shadow: none !important; - background: transparent !important; - -webkit-box-shadow: none !important; - box-shadow: none !important; - } - a, - a:visited { - text-decoration: underline; - } - a[href]:after { - content: " (" attr(href) ")"; - } - abbr[title]:after { - content: " (" attr(title) ")"; - } - a[href^="#"]:after, - a[href^="javascript:"]:after { - content: ""; - } - pre, - blockquote { - border: 1px solid #999; - - page-break-inside: avoid; - } - thead { - display: table-header-group; - } - tr, - img { - page-break-inside: avoid; - } - img { - max-width: 100% !important; - } - p, - h2, - h3 { - orphans: 3; - widows: 3; - } - h2, - h3 { - page-break-after: avoid; - } - select { - background: #fff !important; - } - .navbar { - display: none; - } - .btn > .caret, - .dropup > .btn > .caret { - border-top-color: #000 !important; - } - .label { - border: 1px solid #000; - } - .table { - border-collapse: collapse !important; - } - .table td, - .table th { - background-color: #fff !important; - } - .table-bordered th, - .table-bordered td { - border: 1px solid #ddd !important; - } -} -@font-face { - font-family: 'Glyphicons Halflings'; - - src: url('../fonts/glyphicons-halflings-regular.eot'); - src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg'); -} -.glyphicon { - position: relative; - top: 1px; - display: inline-block; - font-family: 'Glyphicons Halflings'; - font-style: normal; - font-weight: normal; - line-height: 1; - - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} -.glyphicon-asterisk:before { - content: "\2a"; -} -.glyphicon-plus:before { - content: "\2b"; -} -.glyphicon-euro:before, -.glyphicon-eur:before { - content: "\20ac"; -} -.glyphicon-minus:before { - content: "\2212"; -} -.glyphicon-cloud:before { - content: "\2601"; -} -.glyphicon-envelope:before { - content: "\2709"; -} -.glyphicon-pencil:before { - content: "\270f"; -} -.glyphicon-glass:before { - content: "\e001"; -} -.glyphicon-music:before { - content: "\e002"; -} -.glyphicon-search:before { - content: "\e003"; -} -.glyphicon-heart:before { - content: "\e005"; -} -.glyphicon-star:before { - content: "\e006"; -} -.glyphicon-star-empty:before { - content: "\e007"; -} -.glyphicon-user:before { - content: "\e008"; -} -.glyphicon-film:before { - content: "\e009"; -} -.glyphicon-th-large:before { - content: "\e010"; -} -.glyphicon-th:before { - content: "\e011"; -} -.glyphicon-th-list:before { - content: "\e012"; -} -.glyphicon-ok:before { - content: "\e013"; -} -.glyphicon-remove:before { - content: "\e014"; -} -.glyphicon-zoom-in:before { - content: "\e015"; -} -.glyphicon-zoom-out:before { - content: "\e016"; -} -.glyphicon-off:before { - content: "\e017"; -} -.glyphicon-signal:before { - content: "\e018"; -} -.glyphicon-cog:before { - content: "\e019"; -} -.glyphicon-trash:before { - content: "\e020"; -} -.glyphicon-home:before { - content: "\e021"; -} -.glyphicon-file:before { - content: "\e022"; -} -.glyphicon-time:before { - content: "\e023"; -} -.glyphicon-road:before { - content: "\e024"; -} -.glyphicon-download-alt:before { - content: "\e025"; -} -.glyphicon-download:before { - content: "\e026"; -} -.glyphicon-upload:before { - content: "\e027"; -} -.glyphicon-inbox:before { - content: "\e028"; -} -.glyphicon-play-circle:before { - content: "\e029"; -} -.glyphicon-repeat:before { - content: "\e030"; -} -.glyphicon-refresh:before { - content: "\e031"; -} -.glyphicon-list-alt:before { - content: "\e032"; -} -.glyphicon-lock:before { - content: "\e033"; -} -.glyphicon-flag:before { - content: "\e034"; -} -.glyphicon-headphones:before { - content: "\e035"; -} -.glyphicon-volume-off:before { - content: "\e036"; -} -.glyphicon-volume-down:before { - content: "\e037"; -} -.glyphicon-volume-up:before { - content: "\e038"; -} -.glyphicon-qrcode:before { - content: "\e039"; -} -.glyphicon-barcode:before { - content: "\e040"; -} -.glyphicon-tag:before { - content: "\e041"; -} -.glyphicon-tags:before { - content: "\e042"; -} -.glyphicon-book:before { - content: "\e043"; -} -.glyphicon-bookmark:before { - content: "\e044"; -} -.glyphicon-print:before { - content: "\e045"; -} -.glyphicon-camera:before { - content: "\e046"; -} -.glyphicon-font:before { - content: "\e047"; -} -.glyphicon-bold:before { - content: "\e048"; -} -.glyphicon-italic:before { - content: "\e049"; -} -.glyphicon-text-height:before { - content: "\e050"; -} -.glyphicon-text-width:before { - content: "\e051"; -} -.glyphicon-align-left:before { - content: "\e052"; -} -.glyphicon-align-center:before { - content: "\e053"; -} -.glyphicon-align-right:before { - content: "\e054"; -} -.glyphicon-align-justify:before { - content: "\e055"; -} -.glyphicon-list:before { - content: "\e056"; -} -.glyphicon-indent-left:before { - content: "\e057"; -} -.glyphicon-indent-right:before { - content: "\e058"; -} -.glyphicon-facetime-video:before { - content: "\e059"; -} -.glyphicon-picture:before { - content: "\e060"; -} -.glyphicon-map-marker:before { - content: "\e062"; -} -.glyphicon-adjust:before { - content: "\e063"; -} -.glyphicon-tint:before { - content: "\e064"; -} -.glyphicon-edit:before { - content: "\e065"; -} -.glyphicon-share:before { - content: "\e066"; -} -.glyphicon-check:before { - content: "\e067"; -} -.glyphicon-move:before { - content: "\e068"; -} -.glyphicon-step-backward:before { - content: "\e069"; -} -.glyphicon-fast-backward:before { - content: "\e070"; -} -.glyphicon-backward:before { - content: "\e071"; -} -.glyphicon-play:before { - content: "\e072"; -} -.glyphicon-pause:before { - content: "\e073"; -} -.glyphicon-stop:before { - content: "\e074"; -} -.glyphicon-forward:before { - content: "\e075"; -} -.glyphicon-fast-forward:before { - content: "\e076"; -} -.glyphicon-step-forward:before { - content: "\e077"; -} -.glyphicon-eject:before { - content: "\e078"; -} -.glyphicon-chevron-left:before { - content: "\e079"; -} -.glyphicon-chevron-right:before { - content: "\e080"; -} -.glyphicon-plus-sign:before { - content: "\e081"; -} -.glyphicon-minus-sign:before { - content: "\e082"; -} -.glyphicon-remove-sign:before { - content: "\e083"; -} -.glyphicon-ok-sign:before { - content: "\e084"; -} -.glyphicon-question-sign:before { - content: "\e085"; -} -.glyphicon-info-sign:before { - content: "\e086"; -} -.glyphicon-screenshot:before { - content: "\e087"; -} -.glyphicon-remove-circle:before { - content: "\e088"; -} -.glyphicon-ok-circle:before { - content: "\e089"; -} -.glyphicon-ban-circle:before { - content: "\e090"; -} -.glyphicon-arrow-left:before { - content: "\e091"; -} -.glyphicon-arrow-right:before { - content: "\e092"; -} -.glyphicon-arrow-up:before { - content: "\e093"; -} -.glyphicon-arrow-down:before { - content: "\e094"; -} -.glyphicon-share-alt:before { - content: "\e095"; -} -.glyphicon-resize-full:before { - content: "\e096"; -} -.glyphicon-resize-small:before { - content: "\e097"; -} -.glyphicon-exclamation-sign:before { - content: "\e101"; -} -.glyphicon-gift:before { - content: "\e102"; -} -.glyphicon-leaf:before { - content: "\e103"; -} -.glyphicon-fire:before { - content: "\e104"; -} -.glyphicon-eye-open:before { - content: "\e105"; -} -.glyphicon-eye-close:before { - content: "\e106"; -} -.glyphicon-warning-sign:before { - content: "\e107"; -} -.glyphicon-plane:before { - content: "\e108"; -} -.glyphicon-calendar:before { - content: "\e109"; -} -.glyphicon-random:before { - content: "\e110"; -} -.glyphicon-comment:before { - content: "\e111"; -} -.glyphicon-magnet:before { - content: "\e112"; -} -.glyphicon-chevron-up:before { - content: "\e113"; -} -.glyphicon-chevron-down:before { - content: "\e114"; -} -.glyphicon-retweet:before { - content: "\e115"; -} -.glyphicon-shopping-cart:before { - content: "\e116"; -} -.glyphicon-folder-close:before { - content: "\e117"; -} -.glyphicon-folder-open:before { - content: "\e118"; -} -.glyphicon-resize-vertical:before { - content: "\e119"; -} -.glyphicon-resize-horizontal:before { - content: "\e120"; -} -.glyphicon-hdd:before { - content: "\e121"; -} -.glyphicon-bullhorn:before { - content: "\e122"; -} -.glyphicon-bell:before { - content: "\e123"; -} -.glyphicon-certificate:before { - content: "\e124"; -} -.glyphicon-thumbs-up:before { - content: "\e125"; -} -.glyphicon-thumbs-down:before { - content: "\e126"; -} -.glyphicon-hand-right:before { - content: "\e127"; -} -.glyphicon-hand-left:before { - content: "\e128"; -} -.glyphicon-hand-up:before { - content: "\e129"; -} -.glyphicon-hand-down:before { - content: "\e130"; -} -.glyphicon-circle-arrow-right:before { - content: "\e131"; -} -.glyphicon-circle-arrow-left:before { - content: "\e132"; -} -.glyphicon-circle-arrow-up:before { - content: "\e133"; -} -.glyphicon-circle-arrow-down:before { - content: "\e134"; -} -.glyphicon-globe:before { - content: "\e135"; -} -.glyphicon-wrench:before { - content: "\e136"; -} -.glyphicon-tasks:before { - content: "\e137"; -} -.glyphicon-filter:before { - content: "\e138"; -} -.glyphicon-briefcase:before { - content: "\e139"; -} -.glyphicon-fullscreen:before { - content: "\e140"; -} -.glyphicon-dashboard:before { - content: "\e141"; -} -.glyphicon-paperclip:before { - content: "\e142"; -} -.glyphicon-heart-empty:before { - content: "\e143"; -} -.glyphicon-link:before { - content: "\e144"; -} -.glyphicon-phone:before { - content: "\e145"; -} -.glyphicon-pushpin:before { - content: "\e146"; -} -.glyphicon-usd:before { - content: "\e148"; -} -.glyphicon-gbp:before { - content: "\e149"; -} -.glyphicon-sort:before { - content: "\e150"; -} -.glyphicon-sort-by-alphabet:before { - content: "\e151"; -} -.glyphicon-sort-by-alphabet-alt:before { - content: "\e152"; -} -.glyphicon-sort-by-order:before { - content: "\e153"; -} -.glyphicon-sort-by-order-alt:before { - content: "\e154"; -} -.glyphicon-sort-by-attributes:before { - content: "\e155"; -} -.glyphicon-sort-by-attributes-alt:before { - content: "\e156"; -} -.glyphicon-unchecked:before { - content: "\e157"; -} -.glyphicon-expand:before { - content: "\e158"; -} -.glyphicon-collapse-down:before { - content: "\e159"; -} -.glyphicon-collapse-up:before { - content: "\e160"; -} -.glyphicon-log-in:before { - content: "\e161"; -} -.glyphicon-flash:before { - content: "\e162"; -} -.glyphicon-log-out:before { - content: "\e163"; -} -.glyphicon-new-window:before { - content: "\e164"; -} -.glyphicon-record:before { - content: "\e165"; -} -.glyphicon-save:before { - content: "\e166"; -} -.glyphicon-open:before { - content: "\e167"; -} -.glyphicon-saved:before { - content: "\e168"; -} -.glyphicon-import:before { - content: "\e169"; -} -.glyphicon-export:before { - content: "\e170"; -} -.glyphicon-send:before { - content: "\e171"; -} -.glyphicon-floppy-disk:before { - content: "\e172"; -} -.glyphicon-floppy-saved:before { - content: "\e173"; -} -.glyphicon-floppy-remove:before { - content: "\e174"; -} -.glyphicon-floppy-save:before { - content: "\e175"; -} -.glyphicon-floppy-open:before { - content: "\e176"; -} -.glyphicon-credit-card:before { - content: "\e177"; -} -.glyphicon-transfer:before { - content: "\e178"; -} -.glyphicon-cutlery:before { - content: "\e179"; -} -.glyphicon-header:before { - content: "\e180"; -} -.glyphicon-compressed:before { - content: "\e181"; -} -.glyphicon-earphone:before { - content: "\e182"; -} -.glyphicon-phone-alt:before { - content: "\e183"; -} -.glyphicon-tower:before { - content: "\e184"; -} -.glyphicon-stats:before { - content: "\e185"; -} -.glyphicon-sd-video:before { - content: "\e186"; -} -.glyphicon-hd-video:before { - content: "\e187"; -} -.glyphicon-subtitles:before { - content: "\e188"; -} -.glyphicon-sound-stereo:before { - content: "\e189"; -} -.glyphicon-sound-dolby:before { - content: "\e190"; -} -.glyphicon-sound-5-1:before { - content: "\e191"; -} -.glyphicon-sound-6-1:before { - content: "\e192"; -} -.glyphicon-sound-7-1:before { - content: "\e193"; -} -.glyphicon-copyright-mark:before { - content: "\e194"; -} -.glyphicon-registration-mark:before { - content: "\e195"; -} -.glyphicon-cloud-download:before { - content: "\e197"; -} -.glyphicon-cloud-upload:before { - content: "\e198"; -} -.glyphicon-tree-conifer:before { - content: "\e199"; -} -.glyphicon-tree-deciduous:before { - content: "\e200"; -} -.glyphicon-cd:before { - content: "\e201"; -} -.glyphicon-save-file:before { - content: "\e202"; -} -.glyphicon-open-file:before { - content: "\e203"; -} -.glyphicon-level-up:before { - content: "\e204"; -} -.glyphicon-copy:before { - content: "\e205"; -} -.glyphicon-paste:before { - content: "\e206"; -} -.glyphicon-alert:before { - content: "\e209"; -} -.glyphicon-equalizer:before { - content: "\e210"; -} -.glyphicon-king:before { - content: "\e211"; -} -.glyphicon-queen:before { - content: "\e212"; -} -.glyphicon-pawn:before { - content: "\e213"; -} -.glyphicon-bishop:before { - content: "\e214"; -} -.glyphicon-knight:before { - content: "\e215"; -} -.glyphicon-baby-formula:before { - content: "\e216"; -} -.glyphicon-tent:before { - content: "\26fa"; -} -.glyphicon-blackboard:before { - content: "\e218"; -} -.glyphicon-bed:before { - content: "\e219"; -} -.glyphicon-apple:before { - content: "\f8ff"; -} -.glyphicon-erase:before { - content: "\e221"; -} -.glyphicon-hourglass:before { - content: "\231b"; -} -.glyphicon-lamp:before { - content: "\e223"; -} -.glyphicon-duplicate:before { - content: "\e224"; -} -.glyphicon-piggy-bank:before { - content: "\e225"; -} -.glyphicon-scissors:before { - content: "\e226"; -} -.glyphicon-bitcoin:before { - content: "\e227"; -} -.glyphicon-yen:before { - content: "\00a5"; -} -.glyphicon-ruble:before { - content: "\20bd"; -} -.glyphicon-scale:before { - content: "\e230"; -} -.glyphicon-ice-lolly:before { - content: "\e231"; -} -.glyphicon-ice-lolly-tasted:before { - content: "\e232"; -} -.glyphicon-education:before { - content: "\e233"; -} -.glyphicon-option-horizontal:before { - content: "\e234"; -} -.glyphicon-option-vertical:before { - content: "\e235"; -} -.glyphicon-menu-hamburger:before { - content: "\e236"; -} -.glyphicon-modal-window:before { - content: "\e237"; -} -.glyphicon-oil:before { - content: "\e238"; -} -.glyphicon-grain:before { - content: "\e239"; -} -.glyphicon-sunglasses:before { - content: "\e240"; -} -.glyphicon-text-size:before { - content: "\e241"; -} -.glyphicon-text-color:before { - content: "\e242"; -} -.glyphicon-text-background:before { - content: "\e243"; -} -.glyphicon-object-align-top:before { - content: "\e244"; -} -.glyphicon-object-align-bottom:before { - content: "\e245"; -} -.glyphicon-object-align-horizontal:before { - content: "\e246"; -} -.glyphicon-object-align-left:before { - content: "\e247"; -} -.glyphicon-object-align-vertical:before { - content: "\e248"; -} -.glyphicon-object-align-right:before { - content: "\e249"; -} -.glyphicon-triangle-right:before { - content: "\e250"; -} -.glyphicon-triangle-left:before { - content: "\e251"; -} -.glyphicon-triangle-bottom:before { - content: "\e252"; -} -.glyphicon-triangle-top:before { - content: "\e253"; -} -.glyphicon-console:before { - content: "\e254"; -} -.glyphicon-superscript:before { - content: "\e255"; -} -.glyphicon-subscript:before { - content: "\e256"; -} -.glyphicon-menu-left:before { - content: "\e257"; -} -.glyphicon-menu-right:before { - content: "\e258"; -} -.glyphicon-menu-down:before { - content: "\e259"; -} -.glyphicon-menu-up:before { - content: "\e260"; -} -* { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -*:before, -*:after { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -html { - font-size: 10px; - - -webkit-tap-highlight-color: rgba(0, 0, 0, 0); -} -body { - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 14px; - line-height: 1.42857143; - color: #333; - background-color: #fff; -} -input, -button, -select, -textarea { - font-family: inherit; - font-size: inherit; - line-height: inherit; -} -a { - color: #337ab7; - text-decoration: none; -} -a:hover, -a:focus { - color: #23527c; - text-decoration: underline; -} -a:focus { - outline: thin dotted; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -figure { - margin: 0; -} -img { - vertical-align: middle; -} -.img-responsive, -.thumbnail > img, -.thumbnail a > img, -.carousel-inner > .item > img, -.carousel-inner > .item > a > img { - display: block; - max-width: 100%; - height: auto; -} -.img-rounded { - border-radius: 6px; -} -.img-thumbnail { - display: inline-block; - max-width: 100%; - height: auto; - padding: 4px; - line-height: 1.42857143; - background-color: #fff; - border: 1px solid #ddd; - border-radius: 4px; - -webkit-transition: all .2s ease-in-out; - -o-transition: all .2s ease-in-out; - transition: all .2s ease-in-out; -} -.img-circle { - border-radius: 50%; -} -hr { - margin-top: 20px; - margin-bottom: 2px; - border: 0; - border-top: 1px solid #eee; -} -.sr-only { - position: absolute; - width: 1px; - height: 1px; - padding: 0; - margin: -1px; - overflow: hidden; - clip: rect(0, 0, 0, 0); - border: 0; -} -.sr-only-focusable:active, -.sr-only-focusable:focus { - position: static; - width: auto; - height: auto; - margin: 0; - overflow: visible; - clip: auto; -} -h1, -h2, -h3, -h4, -h5, -h6, -.h1, -.h2, -.h3, -.h4, -.h5, -.h6 { - font-family: inherit; - font-weight: 500; - line-height: 1.1; - color: inherit; -} -h1 small, -h2 small, -h3 small, -h4 small, -h5 small, -h6 small, -.h1 small, -.h2 small, -.h3 small, -.h4 small, -.h5 small, -.h6 small, -h1 .small, -h2 .small, -h3 .small, -h4 .small, -h5 .small, -h6 .small, -.h1 .small, -.h2 .small, -.h3 .small, -.h4 .small, -.h5 .small, -.h6 .small { - font-weight: normal; - line-height: 1; - color: #777; -} -h1, -.h1, -h2, -.h2, -h3, -.h3 { - margin-top: 20px; - margin-bottom: 10px; -} -h1 small, -.h1 small, -h2 small, -.h2 small, -h3 small, -.h3 small, -h1 .small, -.h1 .small, -h2 .small, -.h2 .small, -h3 .small, -.h3 .small { - font-size: 65%; -} -h4, -.h4, -h5, -.h5, -h6, -.h6 { - margin-top: 10px; - margin-bottom: 10px; -} -h4 small, -.h4 small, -h5 small, -.h5 small, -h6 small, -.h6 small, -h4 .small, -.h4 .small, -h5 .small, -.h5 .small, -h6 .small, -.h6 .small { - font-size: 75%; -} -h1, -.h1 { - font-size: 36px; -} -h2, -.h2 { - font-size: 30px; -} -h3, -.h3 { - font-size: 24px; -} -h4, -.h4 { - font-size: 18px; -} -h5, -.h5 { - font-size: 14px; -} -h6, -.h6 { - font-size: 12px; -} -p { - margin: 0 0 10px; -} -.lead { - margin-bottom: 20px; - font-size: 16px; - font-weight: 300; - line-height: 1.4; -} -@media (min-width: 768px) { - .lead { - font-size: 21px; - } -} -small, -.small { - font-size: 85%; -} -mark, -.mark { - padding: .2em; - background-color: #fcf8e3; -} -.text-left { - text-align: left; -} -.text-right { - text-align: right; -} -.text-center { - text-align: center; -} -.text-justify { - text-align: justify; -} -.text-nowrap { - white-space: nowrap; -} -.text-lowercase { - text-transform: lowercase; -} -.text-uppercase { - text-transform: uppercase; -} -.text-capitalize { - text-transform: capitalize; -} -.text-muted { - color: #777; -} -.text-primary { - color: #337ab7; -} -a.text-primary:hover { - color: #286090; -} -.text-success { - color: #3c763d; -} -a.text-success:hover { - color: #2b542c; -} -.text-info { - color: #31708f; -} -a.text-info:hover { - color: #245269; -} -.text-warning { - color: #8a6d3b; -} -a.text-warning:hover { - color: #66512c; -} -.text-danger { - color: #a94442; -} -a.text-danger:hover { - color: #843534; -} -.bg-primary { - color: #fff; - background-color: #337ab7; -} -a.bg-primary:hover { - background-color: #286090; -} -.bg-success { - background-color: #dff0d8; -} -a.bg-success:hover { - background-color: #c1e2b3; -} -.bg-info { - background-color: #d9edf7; -} -a.bg-info:hover { - background-color: #afd9ee; -} -.bg-warning { - background-color: #fcf8e3; -} -a.bg-warning:hover { - background-color: #f7ecb5; -} -.bg-danger { - background-color: #f2dede; -} -a.bg-danger:hover { - background-color: #e4b9b9; -} -.page-header { - padding-bottom: 9px; - margin: 40px 0 20px; - border-bottom: 1px solid #eee; -} -ul, -ol { - margin-top: 0; - margin-bottom: 10px; -} -ul ul, -ol ul, -ul ol, -ol ol { - margin-bottom: 0; -} -.list-unstyled { - padding-left: 0; - list-style: none; -} -.list-inline { - padding-left: 0; - margin-left: -5px; - list-style: none; -} -.list-inline > li { - display: inline-block; - padding-right: 5px; - padding-left: 5px; -} -dl { - margin-top: 0; - margin-bottom: 20px; -} -dt, -dd { - line-height: 1.42857143; -} -dt { - font-weight: bold; -} -dd { - margin-left: 0; -} -@media (min-width: 768px) { - .dl-horizontal dt { - float: left; - width: 160px; - overflow: hidden; - clear: left; - text-align: right; - text-overflow: ellipsis; - white-space: nowrap; - } - .dl-horizontal dd { - margin-left: 180px; - } -} -abbr[title], -abbr[data-original-title] { - cursor: help; - border-bottom: 1px dotted #777; -} -.initialism { - font-size: 90%; - text-transform: uppercase; -} -blockquote { - padding: 10px 20px; - margin: 0 0 20px; - font-size: 17.5px; - border-left: 5px solid #eee; -} -blockquote p:last-child, -blockquote ul:last-child, -blockquote ol:last-child { - margin-bottom: 0; -} -blockquote footer, -blockquote small, -blockquote .small { - display: block; - font-size: 80%; - line-height: 1.42857143; - color: #777; -} -blockquote footer:before, -blockquote small:before, -blockquote .small:before { - content: '\2014 \00A0'; -} -.blockquote-reverse, -blockquote.pull-right { - padding-right: 15px; - padding-left: 0; - text-align: right; - border-right: 5px solid #eee; - border-left: 0; -} -.blockquote-reverse footer:before, -blockquote.pull-right footer:before, -.blockquote-reverse small:before, -blockquote.pull-right small:before, -.blockquote-reverse .small:before, -blockquote.pull-right .small:before { - content: ''; -} -.blockquote-reverse footer:after, -blockquote.pull-right footer:after, -.blockquote-reverse small:after, -blockquote.pull-right small:after, -.blockquote-reverse .small:after, -blockquote.pull-right .small:after { - content: '\00A0 \2014'; -} -address { - margin-bottom: 20px; - font-style: normal; - line-height: 1.42857143; -} -code, -kbd, -pre, -samp { - font-family: Menlo, Monaco, Consolas, "Courier New", monospace; -} -code { - padding: 2px 4px; - font-size: 90%; - color: #c7254e; - background-color: #f9f2f4; - border-radius: 4px; -} -kbd { - padding: 2px 4px; - font-size: 90%; - color: #fff; - background-color: #333; - border-radius: 3px; - -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25); - box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25); -} -kbd kbd { - padding: 0; - font-size: 100%; - font-weight: bold; - -webkit-box-shadow: none; - box-shadow: none; -} -pre { - display: block; - padding: 9.5px; - margin: 0 0 10px; - font-size: 13px; - line-height: 1.42857143; - color: #333; - word-break: break-all; - word-wrap: break-word; - background-color: #f5f5f5; - border: 1px solid #ccc; - border-radius: 4px; -} -pre code { - padding: 0; - font-size: inherit; - color: inherit; - white-space: pre-wrap; - background-color: transparent; - border-radius: 0; -} -.pre-scrollable { - max-height: 340px; - overflow-y: scroll; -} -.container { - padding-right: 15px; - padding-left: 15px; - margin-right: auto; - margin-left: auto; -} -@media (min-width: 768px) { - .container { - width: 750px; - } -} -@media (min-width: 992px) { - .container { - width: 970px; - } -} -@media (min-width: 1200px) { - .container { - width: 1170px; - } -} -.container-fluid { - padding-right: 15px; - padding-left: 5px; - margin-right: auto; - margin-left: auto; -} -.row { - margin-right: -15px; - margin-left: -15px; -} -.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 { - position: relative; - min-height: 1px; - padding-right: 15px; - padding-left: 15px; -} -.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 { - float: left; -} -.col-xs-12 { - width: 100%; -} -.col-xs-11 { - width: 91.66666667%; -} -.col-xs-10 { - width: 83.33333333%; -} -.col-xs-9 { - width: 75%; -} -.col-xs-8 { - width: 66.66666667%; -} -.col-xs-7 { - width: 58.33333333%; -} -.col-xs-6 { - width: 50%; -} -.col-xs-5 { - width: 41.66666667%; -} -.col-xs-4 { - width: 33.33333333%; -} -.col-xs-3 { - width: 25%; -} -.col-xs-2 { - width: 16.66666667%; -} -.col-xs-1 { - width: 8.33333333%; -} -.col-xs-pull-12 { - right: 100%; -} -.col-xs-pull-11 { - right: 91.66666667%; -} -.col-xs-pull-10 { - right: 83.33333333%; -} -.col-xs-pull-9 { - right: 75%; -} -.col-xs-pull-8 { - right: 66.66666667%; -} -.col-xs-pull-7 { - right: 58.33333333%; -} -.col-xs-pull-6 { - right: 50%; -} -.col-xs-pull-5 { - right: 41.66666667%; -} -.col-xs-pull-4 { - right: 33.33333333%; -} -.col-xs-pull-3 { - right: 25%; -} -.col-xs-pull-2 { - right: 16.66666667%; -} -.col-xs-pull-1 { - right: 8.33333333%; -} -.col-xs-pull-0 { - right: auto; -} -.col-xs-push-12 { - left: 100%; -} -.col-xs-push-11 { - left: 91.66666667%; -} -.col-xs-push-10 { - left: 83.33333333%; -} -.col-xs-push-9 { - left: 75%; -} -.col-xs-push-8 { - left: 66.66666667%; -} -.col-xs-push-7 { - left: 58.33333333%; -} -.col-xs-push-6 { - left: 50%; -} -.col-xs-push-5 { - left: 41.66666667%; -} -.col-xs-push-4 { - left: 33.33333333%; -} -.col-xs-push-3 { - left: 25%; -} -.col-xs-push-2 { - left: 16.66666667%; -} -.col-xs-push-1 { - left: 8.33333333%; -} -.col-xs-push-0 { - left: auto; -} -.col-xs-offset-12 { - margin-left: 100%; -} -.col-xs-offset-11 { - margin-left: 91.66666667%; -} -.col-xs-offset-10 { - margin-left: 83.33333333%; -} -.col-xs-offset-9 { - margin-left: 75%; -} -.col-xs-offset-8 { - margin-left: 66.66666667%; -} -.col-xs-offset-7 { - margin-left: 58.33333333%; -} -.col-xs-offset-6 { - margin-left: 50%; -} -.col-xs-offset-5 { - margin-left: 41.66666667%; -} -.col-xs-offset-4 { - margin-left: 33.33333333%; -} -.col-xs-offset-3 { - margin-left: 25%; -} -.col-xs-offset-2 { - margin-left: 16.66666667%; -} -.col-xs-offset-1 { - margin-left: 8.33333333%; -} -.col-xs-offset-0 { - margin-left: 0; -} -@media (min-width: 768px) { - .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 { - float: left; - } - .col-sm-12 { - width: 100%; - } - .col-sm-11 { - width: 91.66666667%; - } - .col-sm-10 { - width: 83.33333333%; - } - .col-sm-9 { - width: 75%; - } - .col-sm-8 { - width: 66.66666667%; - } - .col-sm-7 { - width: 58.33333333%; - } - .col-sm-6 { - width: 50%; - } - .col-sm-5 { - width: 41.66666667%; - } - .col-sm-4 { - width: 33.33333333%; - } - .col-sm-3 { - width: 25%; - } - .col-sm-2 { - width: 16.66666667%; - } - .col-sm-1 { - width: 8.33333333%; - } - .col-sm-pull-12 { - right: 100%; - } - .col-sm-pull-11 { - right: 91.66666667%; - } - .col-sm-pull-10 { - right: 83.33333333%; - } - .col-sm-pull-9 { - right: 75%; - } - .col-sm-pull-8 { - right: 66.66666667%; - } - .col-sm-pull-7 { - right: 58.33333333%; - } - .col-sm-pull-6 { - right: 50%; - } - .col-sm-pull-5 { - right: 41.66666667%; - } - .col-sm-pull-4 { - right: 33.33333333%; - } - .col-sm-pull-3 { - right: 25%; - } - .col-sm-pull-2 { - right: 16.66666667%; - } - .col-sm-pull-1 { - right: 8.33333333%; - } - .col-sm-pull-0 { - right: auto; - } - .col-sm-push-12 { - left: 100%; - } - .col-sm-push-11 { - left: 91.66666667%; - } - .col-sm-push-10 { - left: 83.33333333%; - } - .col-sm-push-9 { - left: 75%; - } - .col-sm-push-8 { - left: 66.66666667%; - } - .col-sm-push-7 { - left: 58.33333333%; - } - .col-sm-push-6 { - left: 50%; - } - .col-sm-push-5 { - left: 41.66666667%; - } - .col-sm-push-4 { - left: 33.33333333%; - } - .col-sm-push-3 { - left: 25%; - } - .col-sm-push-2 { - left: 16.66666667%; - } - .col-sm-push-1 { - left: 8.33333333%; - } - .col-sm-push-0 { - left: auto; - } - .col-sm-offset-12 { - margin-left: 100%; - } - .col-sm-offset-11 { - margin-left: 91.66666667%; - } - .col-sm-offset-10 { - margin-left: 83.33333333%; - } - .col-sm-offset-9 { - margin-left: 75%; - } - .col-sm-offset-8 { - margin-left: 66.66666667%; - } - .col-sm-offset-7 { - margin-left: 58.33333333%; - } - .col-sm-offset-6 { - margin-left: 50%; - } - .col-sm-offset-5 { - margin-left: 41.66666667%; - } - .col-sm-offset-4 { - margin-left: 33.33333333%; - } - .col-sm-offset-3 { - margin-left: 25%; - } - .col-sm-offset-2 { - margin-left: 16.66666667%; - } - .col-sm-offset-1 { - margin-left: 8.33333333%; - } - .col-sm-offset-0 { - margin-left: 0; - } -} -@media (min-width: 992px) { - .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 { - float: left; - } - .col-md-12 { - width: 100%; - } - .col-md-11 { - width: 91.66666667%; - } - .col-md-10 { - width: 83.33333333%; - } - .col-md-9 { - width: 75%; - } - .col-md-8 { - width: 66.66666667%; - } - .col-md-7 { - width: 58.33333333%; - } - .col-md-6 { - width: 50%; - } - .col-md-5 { - width: 41.66666667%; - } - .col-md-4 { - width: 33.33333333%; - } - .col-md-3 { - width: 25%; - } - .col-md-2 { - width: 16.66666667%; - } - .col-md-1 { - width: 8.33333333%; - } - .col-md-pull-12 { - right: 100%; - } - .col-md-pull-11 { - right: 91.66666667%; - } - .col-md-pull-10 { - right: 83.33333333%; - } - .col-md-pull-9 { - right: 75%; - } - .col-md-pull-8 { - right: 66.66666667%; - } - .col-md-pull-7 { - right: 58.33333333%; - } - .col-md-pull-6 { - right: 50%; - } - .col-md-pull-5 { - right: 41.66666667%; - } - .col-md-pull-4 { - right: 33.33333333%; - } - .col-md-pull-3 { - right: 25%; - } - .col-md-pull-2 { - right: 16.66666667%; - } - .col-md-pull-1 { - right: 8.33333333%; - } - .col-md-pull-0 { - right: auto; - } - .col-md-push-12 { - left: 100%; - } - .col-md-push-11 { - left: 91.66666667%; - } - .col-md-push-10 { - left: 83.33333333%; - } - .col-md-push-9 { - left: 75%; - } - .col-md-push-8 { - left: 66.66666667%; - } - .col-md-push-7 { - left: 58.33333333%; - } - .col-md-push-6 { - left: 50%; - } - .col-md-push-5 { - left: 41.66666667%; - } - .col-md-push-4 { - left: 33.33333333%; - } - .col-md-push-3 { - left: 25%; - } - .col-md-push-2 { - left: 16.66666667%; - } - .col-md-push-1 { - left: 8.33333333%; - } - .col-md-push-0 { - left: auto; - } - .col-md-offset-12 { - margin-left: 100%; - } - .col-md-offset-11 { - margin-left: 91.66666667%; - } - .col-md-offset-10 { - margin-left: 83.33333333%; - } - .col-md-offset-9 { - margin-left: 75%; - } - .col-md-offset-8 { - margin-left: 66.66666667%; - } - .col-md-offset-7 { - margin-left: 58.33333333%; - } - .col-md-offset-6 { - margin-left: 50%; - } - .col-md-offset-5 { - margin-left: 41.66666667%; - } - .col-md-offset-4 { - margin-left: 33.33333333%; - } - .col-md-offset-3 { - margin-left: 25%; - } - .col-md-offset-2 { - margin-left: 16.66666667%; - } - .col-md-offset-1 { - margin-left: 8.33333333%; - } - .col-md-offset-0 { - margin-left: 0; - } -} -@media (min-width: 1200px) { - .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 { - float: left; - } - .col-lg-12 { - width: 100%; - } - .col-lg-11 { - width: 91.66666667%; - } - .col-lg-10 { - width: 83.33333333%; - } - .col-lg-9 { - width: 75%; - } - .col-lg-8 { - width: 66.66666667%; - } - .col-lg-7 { - width: 58.33333333%; - } - .col-lg-6 { - width: 50%; - } - .col-lg-5 { - width: 41.66666667%; - } - .col-lg-4 { - width: 33.33333333%; - } - .col-lg-3 { - width: 25%; - } - .col-lg-2 { - width: 16.66666667%; - } - .col-lg-1 { - width: 8.33333333%; - } - .col-lg-pull-12 { - right: 100%; - } - .col-lg-pull-11 { - right: 91.66666667%; - } - .col-lg-pull-10 { - right: 83.33333333%; - } - .col-lg-pull-9 { - right: 75%; - } - .col-lg-pull-8 { - right: 66.66666667%; - } - .col-lg-pull-7 { - right: 58.33333333%; - } - .col-lg-pull-6 { - right: 50%; - } - .col-lg-pull-5 { - right: 41.66666667%; - } - .col-lg-pull-4 { - right: 33.33333333%; - } - .col-lg-pull-3 { - right: 25%; - } - .col-lg-pull-2 { - right: 16.66666667%; - } - .col-lg-pull-1 { - right: 8.33333333%; - } - .col-lg-pull-0 { - right: auto; - } - .col-lg-push-12 { - left: 100%; - } - .col-lg-push-11 { - left: 91.66666667%; - } - .col-lg-push-10 { - left: 83.33333333%; - } - .col-lg-push-9 { - left: 75%; - } - .col-lg-push-8 { - left: 66.66666667%; - } - .col-lg-push-7 { - left: 58.33333333%; - } - .col-lg-push-6 { - left: 50%; - } - .col-lg-push-5 { - left: 41.66666667%; - } - .col-lg-push-4 { - left: 33.33333333%; - } - .col-lg-push-3 { - left: 25%; - } - .col-lg-push-2 { - left: 16.66666667%; - } - .col-lg-push-1 { - left: 8.33333333%; - } - .col-lg-push-0 { - left: auto; - } - .col-lg-offset-12 { - margin-left: 100%; - } - .col-lg-offset-11 { - margin-left: 91.66666667%; - } - .col-lg-offset-10 { - margin-left: 83.33333333%; - } - .col-lg-offset-9 { - margin-left: 75%; - } - .col-lg-offset-8 { - margin-left: 66.66666667%; - } - .col-lg-offset-7 { - margin-left: 58.33333333%; - } - .col-lg-offset-6 { - margin-left: 50%; - } - .col-lg-offset-5 { - margin-left: 41.66666667%; - } - .col-lg-offset-4 { - margin-left: 33.33333333%; - } - .col-lg-offset-3 { - margin-left: 25%; - } - .col-lg-offset-2 { - margin-left: 16.66666667%; - } - .col-lg-offset-1 { - margin-left: 8.33333333%; - } - .col-lg-offset-0 { - margin-left: 0; - } -} -table { - background-color: transparent; -} -caption { - padding-top: 8px; - padding-bottom: 8px; - color: #777; - text-align: left; -} -th { - text-align: left; -} -.table { - width: 100%; - max-width: 100%; - margin-bottom: 20px; -} -.table > thead > tr > th, -.table > tbody > tr > th, -.table > tfoot > tr > th, -.table > thead > tr > td, -.table > tbody > tr > td, -.table > tfoot > tr > td { - padding: 8px; - line-height: 1.42857143; - vertical-align: top; - border-top: 1px solid #ddd; -} -.table > thead > tr > th { - vertical-align: bottom; - border-bottom: 2px solid #ddd; -} -.table > caption + thead > tr:first-child > th, -.table > colgroup + thead > tr:first-child > th, -.table > thead:first-child > tr:first-child > th, -.table > caption + thead > tr:first-child > td, -.table > colgroup + thead > tr:first-child > td, -.table > thead:first-child > tr:first-child > td { - border-top: 0; -} -.table > tbody + tbody { - border-top: 2px solid #ddd; -} -.table .table { - background-color: #fff; -} -.table-condensed > thead > tr > th, -.table-condensed > tbody > tr > th, -.table-condensed > tfoot > tr > th, -.table-condensed > thead > tr > td, -.table-condensed > tbody > tr > td, -.table-condensed > tfoot > tr > td { - padding: 5px; -} -.table-bordered { - border: 1px solid #ddd; -} -.table-bordered > thead > tr > th, -.table-bordered > tbody > tr > th, -.table-bordered > tfoot > tr > th, -.table-bordered > thead > tr > td, -.table-bordered > tbody > tr > td, -.table-bordered > tfoot > tr > td { - border: 1px solid #ddd; -} -.table-bordered > thead > tr > th, -.table-bordered > thead > tr > td { - border-bottom-width: 2px; -} -.table-striped > tbody > tr:nth-of-type(odd) { - background-color: #f9f9f9; -} -.table-hover > tbody > tr:hover { - background-color: #f5f5f5; -} -table col[class*="col-"] { - position: static; - display: table-column; - float: none; -} -table td[class*="col-"], -table th[class*="col-"] { - position: static; - display: table-cell; - float: none; -} -.table > thead > tr > td.active, -.table > tbody > tr > td.active, -.table > tfoot > tr > td.active, -.table > thead > tr > th.active, -.table > tbody > tr > th.active, -.table > tfoot > tr > th.active, -.table > thead > tr.active > td, -.table > tbody > tr.active > td, -.table > tfoot > tr.active > td, -.table > thead > tr.active > th, -.table > tbody > tr.active > th, -.table > tfoot > tr.active > th { - background-color: #f5f5f5; -} -.table-hover > tbody > tr > td.active:hover, -.table-hover > tbody > tr > th.active:hover, -.table-hover > tbody > tr.active:hover > td, -.table-hover > tbody > tr:hover > .active, -.table-hover > tbody > tr.active:hover > th { - background-color: #e8e8e8; -} -.table > thead > tr > td.success, -.table > tbody > tr > td.success, -.table > tfoot > tr > td.success, -.table > thead > tr > th.success, -.table > tbody > tr > th.success, -.table > tfoot > tr > th.success, -.table > thead > tr.success > td, -.table > tbody > tr.success > td, -.table > tfoot > tr.success > td, -.table > thead > tr.success > th, -.table > tbody > tr.success > th, -.table > tfoot > tr.success > th { - background-color: #dff0d8; -} -.table-hover > tbody > tr > td.success:hover, -.table-hover > tbody > tr > th.success:hover, -.table-hover > tbody > tr.success:hover > td, -.table-hover > tbody > tr:hover > .success, -.table-hover > tbody > tr.success:hover > th { - background-color: #d0e9c6; -} -.table > thead > tr > td.info, -.table > tbody > tr > td.info, -.table > tfoot > tr > td.info, -.table > thead > tr > th.info, -.table > tbody > tr > th.info, -.table > tfoot > tr > th.info, -.table > thead > tr.info > td, -.table > tbody > tr.info > td, -.table > tfoot > tr.info > td, -.table > thead > tr.info > th, -.table > tbody > tr.info > th, -.table > tfoot > tr.info > th { - background-color: #d9edf7; -} -.table-hover > tbody > tr > td.info:hover, -.table-hover > tbody > tr > th.info:hover, -.table-hover > tbody > tr.info:hover > td, -.table-hover > tbody > tr:hover > .info, -.table-hover > tbody > tr.info:hover > th { - background-color: #c4e3f3; -} -.table > thead > tr > td.warning, -.table > tbody > tr > td.warning, -.table > tfoot > tr > td.warning, -.table > thead > tr > th.warning, -.table > tbody > tr > th.warning, -.table > tfoot > tr > th.warning, -.table > thead > tr.warning > td, -.table > tbody > tr.warning > td, -.table > tfoot > tr.warning > td, -.table > thead > tr.warning > th, -.table > tbody > tr.warning > th, -.table > tfoot > tr.warning > th { - background-color: #fcf8e3; -} -.table-hover > tbody > tr > td.warning:hover, -.table-hover > tbody > tr > th.warning:hover, -.table-hover > tbody > tr.warning:hover > td, -.table-hover > tbody > tr:hover > .warning, -.table-hover > tbody > tr.warning:hover > th { - background-color: #faf2cc; -} -.table > thead > tr > td.danger, -.table > tbody > tr > td.danger, -.table > tfoot > tr > td.danger, -.table > thead > tr > th.danger, -.table > tbody > tr > th.danger, -.table > tfoot > tr > th.danger, -.table > thead > tr.danger > td, -.table > tbody > tr.danger > td, -.table > tfoot > tr.danger > td, -.table > thead > tr.danger > th, -.table > tbody > tr.danger > th, -.table > tfoot > tr.danger > th { - background-color: #f2dede; -} -.table-hover > tbody > tr > td.danger:hover, -.table-hover > tbody > tr > th.danger:hover, -.table-hover > tbody > tr.danger:hover > td, -.table-hover > tbody > tr:hover > .danger, -.table-hover > tbody > tr.danger:hover > th { - background-color: #ebcccc; -} -.table-responsive { - min-height: .01%; - overflow-x: auto; -} -@media screen and (max-width: 767px) { - .table-responsive { - width: 100%; - margin-bottom: 15px; - overflow-y: hidden; - -ms-overflow-style: -ms-autohiding-scrollbar; - border: 1px solid #ddd; - } - .table-responsive > .table { - margin-bottom: 0; - } - .table-responsive > .table > thead > tr > th, - .table-responsive > .table > tbody > tr > th, - .table-responsive > .table > tfoot > tr > th, - .table-responsive > .table > thead > tr > td, - .table-responsive > .table > tbody > tr > td, - .table-responsive > .table > tfoot > tr > td { - white-space: nowrap; - } - .table-responsive > .table-bordered { - border: 0; - } - .table-responsive > .table-bordered > thead > tr > th:first-child, - .table-responsive > .table-bordered > tbody > tr > th:first-child, - .table-responsive > .table-bordered > tfoot > tr > th:first-child, - .table-responsive > .table-bordered > thead > tr > td:first-child, - .table-responsive > .table-bordered > tbody > tr > td:first-child, - .table-responsive > .table-bordered > tfoot > tr > td:first-child { - border-left: 0; - } - .table-responsive > .table-bordered > thead > tr > th:last-child, - .table-responsive > .table-bordered > tbody > tr > th:last-child, - .table-responsive > .table-bordered > tfoot > tr > th:last-child, - .table-responsive > .table-bordered > thead > tr > td:last-child, - .table-responsive > .table-bordered > tbody > tr > td:last-child, - .table-responsive > .table-bordered > tfoot > tr > td:last-child { - border-right: 0; - } - .table-responsive > .table-bordered > tbody > tr:last-child > th, - .table-responsive > .table-bordered > tfoot > tr:last-child > th, - .table-responsive > .table-bordered > tbody > tr:last-child > td, - .table-responsive > .table-bordered > tfoot > tr:last-child > td { - border-bottom: 0; - } -} -fieldset { - min-width: 0; - padding: 0; - margin: 0; - border: 0; -} -legend { - display: block; - width: 100%; - padding: 0; - margin-bottom: 20px; - font-size: 21px; - line-height: inherit; - color: #333; - border: 0; - border-bottom: 1px solid #e5e5e5; -} -label { - display: inline-block; - max-width: 100%; - margin-bottom: 5px; - font-weight: bold; -} -input[type="search"] { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -input[type="radio"], -input[type="checkbox"] { - margin: 4px 0 0; - margin-top: 1px \9; - line-height: normal; -} -input[type="file"] { - display: block; -} -input[type="range"] { - display: block; - width: 100%; -} -select[multiple], -select[size] { - height: auto; -} -input[type="file"]:focus, -input[type="radio"]:focus, -input[type="checkbox"]:focus { - outline: thin dotted; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -output { - display: block; - padding-top: 7px; - font-size: 14px; - line-height: 1.42857143; - color: #555; -} -.form-control { - display: block; - width: 100%; - /* height: 34px; */ - padding: 1px 12px; /* mod */ - font-size: 14px; - line-height: 1.42857143; - color: #555; - background-color: #fff; - background-image: none; - border: 1px solid #ccc; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); - -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s; - -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; - transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; -} -.form-control:focus { - border-color: #66afe9; - outline: 0; - -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6); - box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6); -} -.form-control::-moz-placeholder { - color: #999; - opacity: 1; -} -.form-control:-ms-input-placeholder { - color: #999; -} -.form-control::-webkit-input-placeholder { - color: #999; -} -.form-control[disabled], -.form-control[readonly], -fieldset[disabled] .form-control { - cursor: not-allowed; - background-color: #eee; - opacity: 1; -} -textarea.form-control { - height: auto; -} -input[type="search"] { - -webkit-appearance: none; -} -@media screen and (-webkit-min-device-pixel-ratio: 0) { - input[type="date"], - input[type="time"], - input[type="datetime-local"], - input[type="month"] { - line-height: 34px; - } - input[type="date"].input-sm, - input[type="time"].input-sm, - input[type="datetime-local"].input-sm, - input[type="month"].input-sm, - .input-group-sm input[type="date"], - .input-group-sm input[type="time"], - .input-group-sm input[type="datetime-local"], - .input-group-sm input[type="month"] { - line-height: 30px; - } - input[type="date"].input-lg, - input[type="time"].input-lg, - input[type="datetime-local"].input-lg, - input[type="month"].input-lg, - .input-group-lg input[type="date"], - .input-group-lg input[type="time"], - .input-group-lg input[type="datetime-local"], - .input-group-lg input[type="month"] { - line-height: 46px; - } -} -.form-group { - margin-bottom: 15px; -} -.radio, -.checkbox { - position: relative; - display: block; - margin-top: 10px; - margin-bottom: 10px; -} -.radio label, -.checkbox label { - min-height: 20px; - padding-left: 20px; - margin-bottom: 0; - font-weight: normal; - cursor: pointer; -} -.radio input[type="radio"], -.radio-inline input[type="radio"], -.checkbox input[type="checkbox"], -.checkbox-inline input[type="checkbox"] { - position: absolute; - margin-top: 4px \9; - margin-left: -20px; -} -.radio + .radio, -.checkbox + .checkbox { - margin-top: -5px; -} -.radio-inline, -.checkbox-inline { - display: inline-block; - padding-left: 20px; - margin-bottom: 0; - font-weight: normal; - vertical-align: middle; - cursor: pointer; -} -.radio-inline + .radio-inline, -.checkbox-inline + .checkbox-inline { - margin-top: 0; - margin-left: 10px; -} -input[type="radio"][disabled], -input[type="checkbox"][disabled], -input[type="radio"].disabled, -input[type="checkbox"].disabled, -fieldset[disabled] input[type="radio"], -fieldset[disabled] input[type="checkbox"] { - cursor: not-allowed; -} -.radio-inline.disabled, -.checkbox-inline.disabled, -fieldset[disabled] .radio-inline, -fieldset[disabled] .checkbox-inline { - cursor: not-allowed; -} -.radio.disabled label, -.checkbox.disabled label, -fieldset[disabled] .radio label, -fieldset[disabled] .checkbox label { - cursor: not-allowed; -} -.form-control-static { - padding-top: 7px; - padding-bottom: 7px; - margin-bottom: 0; -} -.form-control-static.input-lg, -.form-control-static.input-sm { - padding-right: 0; - padding-left: 0; -} -.input-sm { - height: 30px; - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; -} -select.input-sm { - height: 30px; - line-height: 30px; -} -textarea.input-sm, -select[multiple].input-sm { - height: auto; -} -.form-group-sm .form-control { - height: 30px; - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; -} -select.form-group-sm .form-control { - height: 30px; - line-height: 30px; -} -textarea.form-group-sm .form-control, -select[multiple].form-group-sm .form-control { - height: auto; -} -.form-group-sm .form-control-static { - height: 30px; - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; -} -.input-lg { - height: 46px; - padding: 10px 16px; - font-size: 18px; - line-height: 1.3333333; - border-radius: 6px; -} -select.input-lg { - height: 46px; - line-height: 46px; -} -textarea.input-lg, -select[multiple].input-lg { - height: auto; -} -.form-group-lg .form-control { - height: 46px; - padding: 10px 16px; - font-size: 18px; - line-height: 1.3333333; - border-radius: 6px; -} -select.form-group-lg .form-control { - height: 46px; - line-height: 46px; -} -textarea.form-group-lg .form-control, -select[multiple].form-group-lg .form-control { - height: auto; -} -.form-group-lg .form-control-static { - height: 46px; - padding: 10px 16px; - font-size: 18px; - line-height: 1.3333333; -} -.has-feedback { - position: relative; -} -.has-feedback .form-control { - padding-right: 42.5px; -} -.form-control-feedback { - position: absolute; - top: 0; - right: 0; - z-index: 2; - display: block; - width: 34px; - height: 34px; - line-height: 34px; - text-align: center; - pointer-events: none; -} -.input-lg + .form-control-feedback { - width: 46px; - height: 46px; - line-height: 46px; -} -.input-sm + .form-control-feedback { - width: 30px; - height: 30px; - line-height: 30px; -} -.has-success .help-block, -.has-success .control-label, -.has-success .radio, -.has-success .checkbox, -.has-success .radio-inline, -.has-success .checkbox-inline, -.has-success.radio label, -.has-success.checkbox label, -.has-success.radio-inline label, -.has-success.checkbox-inline label { - color: #3c763d; -} -.has-success .form-control { - border-color: #3c763d; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); -} -.has-success .form-control:focus { - border-color: #2b542c; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168; -} -.has-success .input-group-addon { - color: #3c763d; - background-color: #dff0d8; - border-color: #3c763d; -} -.has-success .form-control-feedback { - color: #3c763d; -} -.has-warning .help-block, -.has-warning .control-label, -.has-warning .radio, -.has-warning .checkbox, -.has-warning .radio-inline, -.has-warning .checkbox-inline, -.has-warning.radio label, -.has-warning.checkbox label, -.has-warning.radio-inline label, -.has-warning.checkbox-inline label { - color: #8a6d3b; -} -.has-warning .form-control { - border-color: #8a6d3b; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); -} -.has-warning .form-control:focus { - border-color: #66512c; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b; -} -.has-warning .input-group-addon { - color: #8a6d3b; - background-color: #fcf8e3; - border-color: #8a6d3b; -} -.has-warning .form-control-feedback { - color: #8a6d3b; -} -.has-error .help-block, -.has-error .control-label, -.has-error .radio, -.has-error .checkbox, -.has-error .radio-inline, -.has-error .checkbox-inline, -.has-error.radio label, -.has-error.checkbox label, -.has-error.radio-inline label, -.has-error.checkbox-inline label { - color: #a94442; -} -.has-error .form-control { - border-color: #a94442; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); -} -.has-error .form-control:focus { - border-color: #843534; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483; -} -.has-error .input-group-addon { - color: #a94442; - background-color: #f2dede; - border-color: #a94442; -} -.has-error .form-control-feedback { - color: #a94442; -} -.has-feedback label ~ .form-control-feedback { - top: 25px; -} -.has-feedback label.sr-only ~ .form-control-feedback { - top: 0; -} -.help-block { - display: block; - margin-top: 5px; - margin-bottom: 10px; - color: #737373; -} -@media (min-width: 768px) { - .form-inline .form-group { - display: inline-block; - margin-bottom: 0; - vertical-align: middle; - } - .form-inline .form-control { - display: inline-block; - width: auto; - vertical-align: middle; - } - .form-inline .form-control-static { - display: inline-block; - } - .form-inline .input-group { - display: inline-table; - vertical-align: middle; - } - .form-inline .input-group .input-group-addon, - .form-inline .input-group .input-group-btn, - .form-inline .input-group .form-control { - width: auto; - } - .form-inline .input-group > .form-control { - width: 100%; - } - .form-inline .control-label { - margin-bottom: 0; - vertical-align: middle; - } - .form-inline .radio, - .form-inline .checkbox { - display: inline-block; - margin-top: 0; - margin-bottom: 0; - vertical-align: middle; - } - .form-inline .radio label, - .form-inline .checkbox label { - padding-left: 0; - } - .form-inline .radio input[type="radio"], - .form-inline .checkbox input[type="checkbox"] { - position: relative; - margin-left: 0; - } - .form-inline .has-feedback .form-control-feedback { - top: 0; - } -} -.form-horizontal .radio, -.form-horizontal .checkbox, -.form-horizontal .radio-inline, -.form-horizontal .checkbox-inline { - padding-top: 7px; - margin-top: 0; - margin-bottom: 0; -} -.form-horizontal .radio, -.form-horizontal .checkbox { - min-height: 27px; -} -.form-horizontal .form-group { - margin-right: -15px; - margin-left: -15px; -} -@media (min-width: 768px) { - .form-horizontal .control-label { - padding-top: 7px; - margin-bottom: 0; - text-align: right; - } -} -.form-horizontal .has-feedback .form-control-feedback { - right: 15px; -} -@media (min-width: 768px) { - .form-horizontal .form-group-lg .control-label { - padding-top: 14.333333px; - } -} -@media (min-width: 768px) { - .form-horizontal .form-group-sm .control-label { - padding-top: 6px; - } -} -.btn { - display: inline-block; - padding: 1px 12px; /* mod */ - margin-bottom: 0; - font-size: 14px; - font-weight: normal; - line-height: 1.42857143; - text-align: center; - white-space: nowrap; - vertical-align: middle; - -ms-touch-action: manipulation; - touch-action: manipulation; - cursor: pointer; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - background-image: none; - border: 1px solid transparent; - border-radius: 4px; -} -.btn:focus, -.btn:active:focus, -.btn.active:focus, -.btn.focus, -.btn:active.focus, -.btn.active.focus { - outline: thin dotted; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -.btn:hover, -.btn:focus, -.btn.focus { - color: #333; - text-decoration: none; -} -.btn:active, -.btn.active { - background-image: none; - outline: 0; - -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); - box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); -} -.btn.disabled, -.btn[disabled], -fieldset[disabled] .btn { - pointer-events: none; - cursor: not-allowed; - filter: alpha(opacity=65); - -webkit-box-shadow: none; - box-shadow: none; - opacity: .65; -} -.btn-default { - color: #333; - background-color: #fff; - border-color: #ccc; -} -.btn-default:hover, -.btn-default:focus, -.btn-default.focus, -.btn-default:active, -.btn-default.active, -.open > .dropdown-toggle.btn-default { - color: #333; - background-color: #e6e6e6; - border-color: #adadad; -} -.btn-default:active, -.btn-default.active, -.open > .dropdown-toggle.btn-default { - background-image: none; -} -.btn-default.disabled, -.btn-default[disabled], -fieldset[disabled] .btn-default, -.btn-default.disabled:hover, -.btn-default[disabled]:hover, -fieldset[disabled] .btn-default:hover, -.btn-default.disabled:focus, -.btn-default[disabled]:focus, -fieldset[disabled] .btn-default:focus, -.btn-default.disabled.focus, -.btn-default[disabled].focus, -fieldset[disabled] .btn-default.focus, -.btn-default.disabled:active, -.btn-default[disabled]:active, -fieldset[disabled] .btn-default:active, -.btn-default.disabled.active, -.btn-default[disabled].active, -fieldset[disabled] .btn-default.active { - background-color: #fff; - border-color: #ccc; -} -.btn-default .badge { - color: #fff; - background-color: #333; -} -.btn-primary { - color: #fff; - background-color: #337ab7; - border-color: #2e6da4; -} -.btn-primary:hover, -.btn-primary:focus, -.btn-primary.focus, -.btn-primary:active, -.btn-primary.active, -.open > .dropdown-toggle.btn-primary { - color: #fff; - background-color: #286090; - border-color: #204d74; -} -.btn-primary:active, -.btn-primary.active, -.open > .dropdown-toggle.btn-primary { - background-image: none; -} -.btn-primary.disabled, -.btn-primary[disabled], -fieldset[disabled] .btn-primary, -.btn-primary.disabled:hover, -.btn-primary[disabled]:hover, -fieldset[disabled] .btn-primary:hover, -.btn-primary.disabled:focus, -.btn-primary[disabled]:focus, -fieldset[disabled] .btn-primary:focus, -.btn-primary.disabled.focus, -.btn-primary[disabled].focus, -fieldset[disabled] .btn-primary.focus, -.btn-primary.disabled:active, -.btn-primary[disabled]:active, -fieldset[disabled] .btn-primary:active, -.btn-primary.disabled.active, -.btn-primary[disabled].active, -fieldset[disabled] .btn-primary.active { - background-color: #337ab7; - border-color: #2e6da4; -} -.btn-primary .badge { - color: #337ab7; - background-color: #fff; -} -.btn-success { - color: #fff; - background-color: #5cb85c; - border-color: #4cae4c; -} -.btn-success:hover, -.btn-success:focus, -.btn-success.focus, -.btn-success:active, -.btn-success.active, -.open > .dropdown-toggle.btn-success { - color: #fff; - background-color: #449d44; - border-color: #398439; -} -.btn-success:active, -.btn-success.active, -.open > .dropdown-toggle.btn-success { - background-image: none; -} -.btn-success.disabled, -.btn-success[disabled], -fieldset[disabled] .btn-success, -.btn-success.disabled:hover, -.btn-success[disabled]:hover, -fieldset[disabled] .btn-success:hover, -.btn-success.disabled:focus, -.btn-success[disabled]:focus, -fieldset[disabled] .btn-success:focus, -.btn-success.disabled.focus, -.btn-success[disabled].focus, -fieldset[disabled] .btn-success.focus, -.btn-success.disabled:active, -.btn-success[disabled]:active, -fieldset[disabled] .btn-success:active, -.btn-success.disabled.active, -.btn-success[disabled].active, -fieldset[disabled] .btn-success.active { - background-color: #5cb85c; - border-color: #4cae4c; -} -.btn-success .badge { - color: #5cb85c; - background-color: #fff; -} -.btn-info { - color: #fff; - background-color: #5bc0de; - border-color: #46b8da; -} -.btn-info:hover, -.btn-info:focus, -.btn-info.focus, -.btn-info:active, -.btn-info.active, -.open > .dropdown-toggle.btn-info { - color: #fff; - background-color: #31b0d5; - border-color: #269abc; -} -.btn-info:active, -.btn-info.active, -.open > .dropdown-toggle.btn-info { - background-image: none; -} -.btn-info.disabled, -.btn-info[disabled], -fieldset[disabled] .btn-info, -.btn-info.disabled:hover, -.btn-info[disabled]:hover, -fieldset[disabled] .btn-info:hover, -.btn-info.disabled:focus, -.btn-info[disabled]:focus, -fieldset[disabled] .btn-info:focus, -.btn-info.disabled.focus, -.btn-info[disabled].focus, -fieldset[disabled] .btn-info.focus, -.btn-info.disabled:active, -.btn-info[disabled]:active, -fieldset[disabled] .btn-info:active, -.btn-info.disabled.active, -.btn-info[disabled].active, -fieldset[disabled] .btn-info.active { - background-color: #5bc0de; - border-color: #46b8da; -} -.btn-info .badge { - color: #5bc0de; - background-color: #fff; -} -.btn-warning { - color: #fff; - background-color: #f0ad4e; - border-color: #eea236; -} -.btn-warning:hover, -.btn-warning:focus, -.btn-warning.focus, -.btn-warning:active, -.btn-warning.active, -.open > .dropdown-toggle.btn-warning { - color: #fff; - background-color: #ec971f; - border-color: #d58512; -} -.btn-warning:active, -.btn-warning.active, -.open > .dropdown-toggle.btn-warning { - background-image: none; -} -.btn-warning.disabled, -.btn-warning[disabled], -fieldset[disabled] .btn-warning, -.btn-warning.disabled:hover, -.btn-warning[disabled]:hover, -fieldset[disabled] .btn-warning:hover, -.btn-warning.disabled:focus, -.btn-warning[disabled]:focus, -fieldset[disabled] .btn-warning:focus, -.btn-warning.disabled.focus, -.btn-warning[disabled].focus, -fieldset[disabled] .btn-warning.focus, -.btn-warning.disabled:active, -.btn-warning[disabled]:active, -fieldset[disabled] .btn-warning:active, -.btn-warning.disabled.active, -.btn-warning[disabled].active, -fieldset[disabled] .btn-warning.active { - background-color: #f0ad4e; - border-color: #eea236; -} -.btn-warning .badge { - color: #f0ad4e; - background-color: #fff; -} -.btn-danger { - color: #fff; - background-color: #d9534f; - border-color: #d43f3a; -} -.btn-danger:hover, -.btn-danger:focus, -.btn-danger.focus, -.btn-danger:active, -.btn-danger.active, -.open > .dropdown-toggle.btn-danger { - color: #fff; - background-color: #c9302c; - border-color: #ac2925; -} -.btn-danger:active, -.btn-danger.active, -.open > .dropdown-toggle.btn-danger { - background-image: none; -} -.btn-danger.disabled, -.btn-danger[disabled], -fieldset[disabled] .btn-danger, -.btn-danger.disabled:hover, -.btn-danger[disabled]:hover, -fieldset[disabled] .btn-danger:hover, -.btn-danger.disabled:focus, -.btn-danger[disabled]:focus, -fieldset[disabled] .btn-danger:focus, -.btn-danger.disabled.focus, -.btn-danger[disabled].focus, -fieldset[disabled] .btn-danger.focus, -.btn-danger.disabled:active, -.btn-danger[disabled]:active, -fieldset[disabled] .btn-danger:active, -.btn-danger.disabled.active, -.btn-danger[disabled].active, -fieldset[disabled] .btn-danger.active { - background-color: #d9534f; - border-color: #d43f3a; -} -.btn-danger .badge { - color: #d9534f; - background-color: #fff; -} -.btn-link { - font-weight: normal; - color: #337ab7; - border-radius: 0; -} -.btn-link, -.btn-link:active, -.btn-link.active, -.btn-link[disabled], -fieldset[disabled] .btn-link { - background-color: transparent; - -webkit-box-shadow: none; - box-shadow: none; -} -.btn-link, -.btn-link:hover, -.btn-link:focus, -.btn-link:active { - border-color: transparent; -} -.btn-link:hover, -.btn-link:focus { - color: #23527c; - text-decoration: underline; - background-color: transparent; -} -.btn-link[disabled]:hover, -fieldset[disabled] .btn-link:hover, -.btn-link[disabled]:focus, -fieldset[disabled] .btn-link:focus { - color: #777; - text-decoration: none; -} -.btn-lg, -.btn-group-lg > .btn { - padding: 10px 16px; - font-size: 18px; - line-height: 1.3333333; - border-radius: 6px; -} -.btn-sm, -.btn-group-sm > .btn { - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; -} -.btn-xs, -.btn-group-xs > .btn { - padding: 1px 5px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; -} -.btn-block { - display: block; - width: 100%; -} -.btn-block + .btn-block { - margin-top: 5px; -} -input[type="submit"].btn-block, -input[type="reset"].btn-block, -input[type="button"].btn-block { - width: 100%; -} -.fade { - opacity: 0; - -webkit-transition: opacity .15s linear; - -o-transition: opacity .15s linear; - transition: opacity .15s linear; -} -.fade.in { - opacity: 1; -} -.collapse { - display: none; - visibility: hidden; -} -.collapse.in { - display: block; - visibility: visible; -} -tr.collapse.in { - display: table-row; -} -tbody.collapse.in { - display: table-row-group; -} -.collapsing { - position: relative; - height: 0; - overflow: hidden; - -webkit-transition-timing-function: ease; - -o-transition-timing-function: ease; - transition-timing-function: ease; - -webkit-transition-duration: .35s; - -o-transition-duration: .35s; - transition-duration: .35s; - -webkit-transition-property: height, visibility; - -o-transition-property: height, visibility; - transition-property: height, visibility; -} -.caret { - display: inline-block; - width: 0; - height: 0; - margin-left: 2px; - vertical-align: middle; - border-top: 4px solid; - border-right: 4px solid transparent; - border-left: 4px solid transparent; -} -.dropup, -.dropdown { - position: relative; -} -.dropdown-toggle:focus { - outline: 0; -} -.dropdown-menu { - position: absolute; - top: 100%; - left: 0; - z-index: 1000; - display: none; - float: left; - min-width: 160px; - padding: 5px 0; - margin: 2px 0 0; - font-size: 14px; - text-align: left; - list-style: none; - background-color: #fff; - -webkit-background-clip: padding-box; - background-clip: padding-box; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, .15); - border-radius: 4px; - -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175); - box-shadow: 0 6px 12px rgba(0, 0, 0, .175); -} -.dropdown-menu.pull-right { - right: 0; - left: auto; -} -.dropdown-menu .divider { - height: 1px; - margin: 9px 0; - overflow: hidden; - background-color: #e5e5e5; -} -.dropdown-menu > li > a { - display: block; - padding: 3px 20px; - clear: both; - font-weight: normal; - line-height: 1.42857143; - color: #333; - white-space: nowrap; -} -.dropdown-menu > li > a:hover, -.dropdown-menu > li > a:focus { - color: #262626; - text-decoration: none; - background-color: #f5f5f5; -} -.dropdown-menu > .active > a, -.dropdown-menu > .active > a:hover, -.dropdown-menu > .active > a:focus { - color: #fff; - text-decoration: none; - background-color: #337ab7; - outline: 0; -} -.dropdown-menu > .disabled > a, -.dropdown-menu > .disabled > a:hover, -.dropdown-menu > .disabled > a:focus { - color: #777; -} -.dropdown-menu > .disabled > a:hover, -.dropdown-menu > .disabled > a:focus { - text-decoration: none; - cursor: not-allowed; - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); -} -.open > .dropdown-menu { - display: block; -} -.open > a { - outline: 0; -} -.dropdown-menu-right { - right: 0; - left: auto; -} -.dropdown-menu-left { - right: auto; - left: 0; -} -.dropdown-header { - display: block; - padding: 3px 20px; - font-size: 12px; - line-height: 1.42857143; - color: #777; - white-space: nowrap; -} -.dropdown-backdrop { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 990; -} -.pull-right > .dropdown-menu { - right: 0; - left: auto; -} -.dropup .caret, -.navbar-fixed-bottom .dropdown .caret { - content: ""; - border-top: 0; - border-bottom: 4px solid; -} -.dropup .dropdown-menu, -.navbar-fixed-bottom .dropdown .dropdown-menu { - top: auto; - bottom: 100%; - margin-bottom: 2px; -} -@media (min-width: 768px) { - .navbar-right .dropdown-menu { - right: 0; - left: auto; - } - .navbar-right .dropdown-menu-left { - right: auto; - left: 0; - } -} -.btn-group, -.btn-group-vertical { - position: relative; - display: inline-block; - vertical-align: middle; -} -.btn-group > .btn, -.btn-group-vertical > .btn { - position: relative; - float: left; -} -.btn-group > .btn:hover, -.btn-group-vertical > .btn:hover, -.btn-group > .btn:focus, -.btn-group-vertical > .btn:focus, -.btn-group > .btn:active, -.btn-group-vertical > .btn:active, -.btn-group > .btn.active, -.btn-group-vertical > .btn.active { - z-index: 2; -} -.btn-group .btn + .btn, -.btn-group .btn + .btn-group, -.btn-group .btn-group + .btn, -.btn-group .btn-group + .btn-group { - margin-left: -1px; -} -.btn-toolbar { - margin-left: -5px; -} -.btn-toolbar .btn-group, -.btn-toolbar .input-group { - float: left; -} -.btn-toolbar > .btn, -.btn-toolbar > .btn-group, -.btn-toolbar > .input-group { - margin-left: 5px; -} -.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { - border-radius: 0; -} -.btn-group > .btn:first-child { - margin-left: 0; -} -.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { - border-top-right-radius: 0; - border-bottom-right-radius: 0; -} -.btn-group > .btn:last-child:not(:first-child), -.btn-group > .dropdown-toggle:not(:first-child) { - border-top-left-radius: 0; - border-bottom-left-radius: 0; -} -.btn-group > .btn-group { - float: left; -} -.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { - border-radius: 0; -} -.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child, -.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle { - border-top-right-radius: 0; - border-bottom-right-radius: 0; -} -.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child { - border-top-left-radius: 0; - border-bottom-left-radius: 0; -} -.btn-group .dropdown-toggle:active, -.btn-group.open .dropdown-toggle { - outline: 0; -} -.btn-group > .btn + .dropdown-toggle { - padding-right: 8px; - padding-left: 8px; -} -.btn-group > .btn-lg + .dropdown-toggle { - padding-right: 12px; - padding-left: 12px; -} -.btn-group.open .dropdown-toggle { - -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); - box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); -} -.btn-group.open .dropdown-toggle.btn-link { - -webkit-box-shadow: none; - box-shadow: none; -} -.btn .caret { - margin-left: 0; -} -.btn-lg .caret { - border-width: 5px 5px 0; - border-bottom-width: 0; -} -.dropup .btn-lg .caret { - border-width: 0 5px 5px; -} -.btn-group-vertical > .btn, -.btn-group-vertical > .btn-group, -.btn-group-vertical > .btn-group > .btn { - display: block; - float: none; - width: 100%; - max-width: 100%; -} -.btn-group-vertical > .btn-group > .btn { - float: none; -} -.btn-group-vertical > .btn + .btn, -.btn-group-vertical > .btn + .btn-group, -.btn-group-vertical > .btn-group + .btn, -.btn-group-vertical > .btn-group + .btn-group { - margin-top: -1px; - margin-left: 0; -} -.btn-group-vertical > .btn:not(:first-child):not(:last-child) { - border-radius: 0; -} -.btn-group-vertical > .btn:first-child:not(:last-child) { - border-top-right-radius: 4px; - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; -} -.btn-group-vertical > .btn:last-child:not(:first-child) { - border-top-left-radius: 0; - border-top-right-radius: 0; - border-bottom-left-radius: 4px; -} -.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { - border-radius: 0; -} -.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child, -.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle { - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; -} -.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { - border-top-left-radius: 0; - border-top-right-radius: 0; -} -.btn-group-justified { - display: table; - width: 100%; - table-layout: fixed; - border-collapse: separate; -} -.btn-group-justified > .btn, -.btn-group-justified > .btn-group { - display: table-cell; - float: none; - width: 1%; -} -.btn-group-justified > .btn-group .btn { - width: 100%; -} -.btn-group-justified > .btn-group .dropdown-menu { - left: auto; -} -[data-toggle="buttons"] > .btn input[type="radio"], -[data-toggle="buttons"] > .btn-group > .btn input[type="radio"], -[data-toggle="buttons"] > .btn input[type="checkbox"], -[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] { - position: absolute; - clip: rect(0, 0, 0, 0); - pointer-events: none; -} -.input-group { - position: relative; - display: table; - border-collapse: separate; -} -.input-group[class*="col-"] { - float: none; - padding-right: 0; - padding-left: 0; -} -.input-group .form-control { - position: relative; - z-index: 2; - float: left; - width: 100%; - margin-bottom: 0; -} -.input-group-lg > .form-control, -.input-group-lg > .input-group-addon, -.input-group-lg > .input-group-btn > .btn { - height: 46px; - padding: 10px 16px; - font-size: 18px; - line-height: 1.3333333; - border-radius: 6px; -} -select.input-group-lg > .form-control, -select.input-group-lg > .input-group-addon, -select.input-group-lg > .input-group-btn > .btn { - height: 46px; - line-height: 46px; -} -textarea.input-group-lg > .form-control, -textarea.input-group-lg > .input-group-addon, -textarea.input-group-lg > .input-group-btn > .btn, -select[multiple].input-group-lg > .form-control, -select[multiple].input-group-lg > .input-group-addon, -select[multiple].input-group-lg > .input-group-btn > .btn { - height: auto; -} -.input-group-sm > .form-control, -.input-group-sm > .input-group-addon, -.input-group-sm > .input-group-btn > .btn { - height: 30px; - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; -} -select.input-group-sm > .form-control, -select.input-group-sm > .input-group-addon, -select.input-group-sm > .input-group-btn > .btn { - height: 30px; - line-height: 30px; -} -textarea.input-group-sm > .form-control, -textarea.input-group-sm > .input-group-addon, -textarea.input-group-sm > .input-group-btn > .btn, -select[multiple].input-group-sm > .form-control, -select[multiple].input-group-sm > .input-group-addon, -select[multiple].input-group-sm > .input-group-btn > .btn { - height: auto; -} -.input-group-addon, -.input-group-btn, -.input-group .form-control { - display: table-cell; -} -.input-group-addon:not(:first-child):not(:last-child), -.input-group-btn:not(:first-child):not(:last-child), -.input-group .form-control:not(:first-child):not(:last-child) { - border-radius: 0; -} -.input-group-addon, -.input-group-btn { - width: 1%; - white-space: nowrap; - vertical-align: middle; -} -.input-group-addon { - padding: 6px 12px; - font-size: 14px; - font-weight: normal; - line-height: 1; - color: #555; - text-align: center; - background-color: #eee; - border: 1px solid #ccc; - border-radius: 4px; -} -.input-group-addon.input-sm { - padding: 5px 10px; - font-size: 12px; - border-radius: 3px; -} -.input-group-addon.input-lg { - padding: 10px 16px; - font-size: 18px; - border-radius: 6px; -} -.input-group-addon input[type="radio"], -.input-group-addon input[type="checkbox"] { - margin-top: 0; -} -.input-group .form-control:first-child, -.input-group-addon:first-child, -.input-group-btn:first-child > .btn, -.input-group-btn:first-child > .btn-group > .btn, -.input-group-btn:first-child > .dropdown-toggle, -.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle), -.input-group-btn:last-child > .btn-group:not(:last-child) > .btn { - border-top-right-radius: 0; - border-bottom-right-radius: 0; -} -.input-group-addon:first-child { - border-right: 0; -} -.input-group .form-control:last-child, -.input-group-addon:last-child, -.input-group-btn:last-child > .btn, -.input-group-btn:last-child > .btn-group > .btn, -.input-group-btn:last-child > .dropdown-toggle, -.input-group-btn:first-child > .btn:not(:first-child), -.input-group-btn:first-child > .btn-group:not(:first-child) > .btn { - border-top-left-radius: 0; - border-bottom-left-radius: 0; -} -.input-group-addon:last-child { - border-left: 0; -} -.input-group-btn { - position: relative; - font-size: 0; - white-space: nowrap; -} -.input-group-btn > .btn { - position: relative; -} -.input-group-btn > .btn + .btn { - margin-left: -1px; -} -.input-group-btn > .btn:hover, -.input-group-btn > .btn:focus, -.input-group-btn > .btn:active { - z-index: 2; -} -.input-group-btn:first-child > .btn, -.input-group-btn:first-child > .btn-group { - margin-right: -1px; -} -.input-group-btn:last-child > .btn, -.input-group-btn:last-child > .btn-group { - margin-left: -1px; -} -.nav { - padding-left: 0; - margin-bottom: 0; - list-style: none; -} -.nav > li { - position: relative; - display: block; -} -.nav > li > a { - position: relative; - display: block; - padding: 10px 15px; -} -.nav > li > a:hover, -.nav > li > a:focus { - text-decoration: none; - background-color: #eee; -} -.nav > li.disabled > a { - color: #777; -} -.nav > li.disabled > a:hover, -.nav > li.disabled > a:focus { - color: #777; - text-decoration: none; - cursor: not-allowed; - background-color: transparent; -} -.nav .open > a, -.nav .open > a:hover, -.nav .open > a:focus { - background-color: #eee; - border-color: #337ab7; -} -.nav .nav-divider { - height: 1px; - margin: 9px 0; - overflow: hidden; - background-color: #e5e5e5; -} -.nav > li > a > img { - max-width: none; -} -.nav-tabs { - border-bottom: 1px solid #ddd; -} -.nav-tabs > li { - float: left; - margin-bottom: -1px; -} -.nav-tabs > li > a { - margin-right: 2px; - line-height: 1.42857143; - border: 1px solid transparent; - border-radius: 4px 4px 0 0; -} -.nav-tabs > li > a:hover { - border-color: #eee #eee #ddd; -} -.nav-tabs > li.active > a, -.nav-tabs > li.active > a:hover, -.nav-tabs > li.active > a:focus { - color: #555; - cursor: default; - background-color: #fff; - border: 1px solid #ddd; - border-bottom-color: transparent; -} -.nav-tabs.nav-justified { - width: 100%; - border-bottom: 0; -} -.nav-tabs.nav-justified > li { - float: none; -} -.nav-tabs.nav-justified > li > a { - margin-bottom: 5px; - text-align: center; -} -.nav-tabs.nav-justified > .dropdown .dropdown-menu { - top: auto; - left: auto; -} -@media (min-width: 768px) { - .nav-tabs.nav-justified > li { - display: table-cell; - width: 1%; - } - .nav-tabs.nav-justified > li > a { - margin-bottom: 0; - } -} -.nav-tabs.nav-justified > li > a { - margin-right: 0; - border-radius: 4px; -} -.nav-tabs.nav-justified > .active > a, -.nav-tabs.nav-justified > .active > a:hover, -.nav-tabs.nav-justified > .active > a:focus { - border: 1px solid #ddd; -} -@media (min-width: 768px) { - .nav-tabs.nav-justified > li > a { - border-bottom: 1px solid #ddd; - border-radius: 4px 4px 0 0; - } - .nav-tabs.nav-justified > .active > a, - .nav-tabs.nav-justified > .active > a:hover, - .nav-tabs.nav-justified > .active > a:focus { - border-bottom-color: #fff; - } -} -.nav-pills > li { - float: left; -} -.nav-pills > li > a { - border-radius: 4px; -} -.nav-pills > li + li { - margin-left: 2px; -} -.nav-pills > li.active > a, -.nav-pills > li.active > a:hover, -.nav-pills > li.active > a:focus { - color: #fff; - background-color: #337ab7; -} -.nav-stacked > li { - float: none; -} -.nav-stacked > li + li { - margin-top: 2px; - margin-left: 0; -} -.nav-justified { - width: 100%; -} -.nav-justified > li { - float: none; -} -.nav-justified > li > a { - margin-bottom: 5px; - text-align: center; -} -.nav-justified > .dropdown .dropdown-menu { - top: auto; - left: auto; -} -@media (min-width: 768px) { - .nav-justified > li { - display: table-cell; - width: 1%; - } - .nav-justified > li > a { - margin-bottom: 0; - } -} -.nav-tabs-justified { - border-bottom: 0; -} -.nav-tabs-justified > li > a { - margin-right: 0; - border-radius: 4px; -} -.nav-tabs-justified > .active > a, -.nav-tabs-justified > .active > a:hover, -.nav-tabs-justified > .active > a:focus { - border: 1px solid #ddd; -} -@media (min-width: 768px) { - .nav-tabs-justified > li > a { - border-bottom: 1px solid #ddd; - border-radius: 4px 4px 0 0; - } - .nav-tabs-justified > .active > a, - .nav-tabs-justified > .active > a:hover, - .nav-tabs-justified > .active > a:focus { - border-bottom-color: #fff; - } -} -.tab-content > .tab-pane { - display: none; - visibility: hidden; -} -.tab-content > .active { - display: block; - visibility: visible; -} -.nav-tabs .dropdown-menu { - margin-top: -1px; - border-top-left-radius: 0; - border-top-right-radius: 0; -} -.navbar { - position: relative; - min-height: 30px; /* mod */ - margin-bottom: 0px; /* mod */ - border: 1px solid transparent; -} -@media (min-width: 768px) { - .navbar { - border-radius: 4px; - } -} -@media (min-width: 768px) { - .navbar-header { - float: left; - } -} -.navbar-collapse { - padding-right: 15px; - padding-left: 15px; - overflow-x: visible; - -webkit-overflow-scrolling: touch; - border-top: 1px solid transparent; - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1); -} -.navbar-collapse.in { - overflow-y: auto; -} -@media (min-width: 768px) { - .navbar-collapse { - width: auto; - border-top: 0; - -webkit-box-shadow: none; - box-shadow: none; - } - .navbar-collapse.collapse { - display: block !important; - height: auto !important; - padding-bottom: 0; - overflow: visible !important; - visibility: visible !important; - } - .navbar-collapse.in { - overflow-y: visible; - } - .navbar-fixed-top .navbar-collapse, - .navbar-static-top .navbar-collapse, - .navbar-fixed-bottom .navbar-collapse { - padding-right: 0; - padding-left: 0; - } -} -.navbar-fixed-top .navbar-collapse, -.navbar-fixed-bottom .navbar-collapse { - max-height: 340px; -} -@media (max-device-width: 480px) and (orientation: landscape) { - .navbar-fixed-top .navbar-collapse, - .navbar-fixed-bottom .navbar-collapse { - max-height: 200px; - } -} -.container > .navbar-header, -.container-fluid > .navbar-header, -.container > .navbar-collapse, -.container-fluid > .navbar-collapse { - margin-right: -15px; - margin-left: -15px; -} -@media (min-width: 768px) { - .container > .navbar-header, - .container-fluid > .navbar-header, - .container > .navbar-collapse, - .container-fluid > .navbar-collapse { - margin-right: 0; - margin-left: 0; - } -} -.navbar-static-top { - z-index: 1000; - border-width: 0 0 1px; -} -@media (min-width: 768px) { - .navbar-static-top { - border-radius: 0; - } -} -.navbar-fixed-top, -.navbar-fixed-bottom { - position: fixed; - right: 0; - left: 0; - z-index: 1030; -} -@media (min-width: 768px) { - .navbar-fixed-top, - .navbar-fixed-bottom { - border-radius: 0; - } -} -.navbar-fixed-top { - top: 0; - border-width: 0 0 1px; -} -.navbar-fixed-bottom { - bottom: 0; - margin-bottom: 0; - border-width: 1px 0 0; -} -.navbar-brand { - float: left; - height: 30px; /* mod */ - padding: 3px 5px 2px 0; - font-size: 18px; - line-height: 20px; -} -.navbar-brand:hover, -.navbar-brand:focus { - text-decoration: none; -} -.navbar-brand > img { - display: block; -} -@media (min-width: 768px) { - .navbar > .container .navbar-brand, - .navbar > .container-fluid .navbar-brand { - margin-left: -15px; - } -} -.navbar-toggle { - position: relative; - float: right; - padding: 9px 10px; - margin-top: 8px; - margin-right: 15px; - margin-bottom: 8px; - background-color: transparent; - background-image: none; - border: 1px solid transparent; - border-radius: 4px; -} -.navbar-toggle:focus { - outline: 0; -} -.navbar-toggle .icon-bar { - display: block; - width: 22px; - height: 2px; - border-radius: 1px; -} -.navbar-toggle .icon-bar + .icon-bar { - margin-top: 4px; -} -@media (min-width: 768px) { - .navbar-toggle { - display: none; - } -} -.navbar-nav { - margin: 7.5px -15px; -} -.navbar-nav > li > a { - padding-top: 10px; - padding-bottom: 10px; - line-height: 20px; -} -@media (max-width: 767px) { - .navbar-nav .open .dropdown-menu { - position: static; - float: none; - width: auto; - margin-top: 0; - background-color: transparent; - border: 0; - -webkit-box-shadow: none; - box-shadow: none; - } - .navbar-nav .open .dropdown-menu > li > a, - .navbar-nav .open .dropdown-menu .dropdown-header { - padding: 5px 15px 5px 25px; - } - .navbar-nav .open .dropdown-menu > li > a { - line-height: 20px; - } - .navbar-nav .open .dropdown-menu > li > a:hover, - .navbar-nav .open .dropdown-menu > li > a:focus { - background-image: none; - } -} -@media (min-width: 768px) { - .navbar-nav { - float: left; - margin: 0; - } - .navbar-nav > li { - float: left; - } - .navbar-nav > li > a { - padding-top: 5px; /* mod */ - padding-bottom: 5px; /* mod */ - } -} -.navbar-form { - padding: 10px 15px; - margin-top: 3px; /* mod */ - margin-right: -15px; - margin-bottom: 3px; /* mod */ - margin-left: -15px; - border-top: 1px solid transparent; - border-bottom: 1px solid transparent; - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1); -} -@media (min-width: 768px) { - .navbar-form .form-group { - display: inline-block; - margin-bottom: 0; - vertical-align: middle; - } - .navbar-form .form-control { - display: inline-block; - width: auto; - vertical-align: middle; - } - .navbar-form .form-control-static { - display: inline-block; - } - .navbar-form .input-group { - display: inline-table; - vertical-align: middle; - } - .navbar-form .input-group .input-group-addon, - .navbar-form .input-group .input-group-btn, - .navbar-form .input-group .form-control { - width: auto; - } - .navbar-form .input-group > .form-control { - width: 100%; - } - .navbar-form .control-label { - margin-bottom: 0; - vertical-align: middle; - } - .navbar-form .radio, - .navbar-form .checkbox { - display: inline-block; - margin-top: 0; - margin-bottom: 0; - vertical-align: middle; - } - .navbar-form .radio label, - .navbar-form .checkbox label { - padding-left: 0; - } - .navbar-form .radio input[type="radio"], - .navbar-form .checkbox input[type="checkbox"] { - position: relative; - margin-left: 0; - } - .navbar-form .has-feedback .form-control-feedback { - top: 0; - } -} -@media (max-width: 767px) { - .navbar-form .form-group { - margin-bottom: 5px; - } - .navbar-form .form-group:last-child { - margin-bottom: 0; - } -} -@media (min-width: 768px) { - .navbar-form { - width: auto; - padding-top: 0; - padding-bottom: 0; - margin-right: 0; - margin-left: 0; - border: 0; - -webkit-box-shadow: none; - box-shadow: none; - } -} -.navbar-nav > li > .dropdown-menu { - margin-top: 0; - border-top-left-radius: 0; - border-top-right-radius: 0; -} -.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { - margin-bottom: 0; - border-top-left-radius: 4px; - border-top-right-radius: 4px; - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; -} -.navbar-btn { - margin-top: 8px; - margin-bottom: 8px; -} -.navbar-btn.btn-sm { - margin-top: 10px; - margin-bottom: 10px; -} -.navbar-btn.btn-xs { - margin-top: 14px; - margin-bottom: 14px; -} -.navbar-text { - margin-top: 15px; - margin-bottom: 15px; -} -@media (min-width: 768px) { - .navbar-text { - float: left; - margin-right: 15px; - margin-left: 15px; - } -} -@media (min-width: 768px) { - .navbar-left { - float: left !important; - } - .navbar-right { - float: right !important; - margin-right: -15px; - } - .navbar-right ~ .navbar-right { - margin-right: 0; - } -} -.navbar-default { - background-color: #f8f8f8; - border-color: #e7e7e7; -} -.navbar-default .navbar-brand { - color: #777; -} -.navbar-default .navbar-brand:hover, -.navbar-default .navbar-brand:focus { - color: #5e5e5e; - background-color: transparent; -} -.navbar-default .navbar-text { - color: #777; -} -.navbar-default .navbar-nav > li > a { - color: #777; -} -.navbar-default .navbar-nav > li > a:hover, -.navbar-default .navbar-nav > li > a:focus { - color: #333; - background-color: transparent; -} -.navbar-default .navbar-nav > .active > a, -.navbar-default .navbar-nav > .active > a:hover, -.navbar-default .navbar-nav > .active > a:focus { - color: #555; - background-color: #e7e7e7; -} -.navbar-default .navbar-nav > .disabled > a, -.navbar-default .navbar-nav > .disabled > a:hover, -.navbar-default .navbar-nav > .disabled > a:focus { - color: #ccc; - background-color: transparent; -} -.navbar-default .navbar-toggle { - border-color: #ddd; -} -.navbar-default .navbar-toggle:hover, -.navbar-default .navbar-toggle:focus { - background-color: #ddd; -} -.navbar-default .navbar-toggle .icon-bar { - background-color: #888; -} -.navbar-default .navbar-collapse, -.navbar-default .navbar-form { - border-color: #e7e7e7; -} -.navbar-default .navbar-nav > .open > a, -.navbar-default .navbar-nav > .open > a:hover, -.navbar-default .navbar-nav > .open > a:focus { - color: #555; - background-color: #e7e7e7; -} -@media (max-width: 767px) { - .navbar-default .navbar-nav .open .dropdown-menu > li > a { - color: #777; - } - .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, - .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { - color: #333; - background-color: transparent; - } - .navbar-default .navbar-nav .open .dropdown-menu > .active > a, - .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, - .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { - color: #555; - background-color: #e7e7e7; - } - .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, - .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, - .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { - color: #ccc; - background-color: transparent; - } -} -.navbar-default .navbar-link { - color: #777; -} -.navbar-default .navbar-link:hover { - color: #333; -} -.navbar-default .btn-link { - color: #777; -} -.navbar-default .btn-link:hover, -.navbar-default .btn-link:focus { - color: #333; -} -.navbar-default .btn-link[disabled]:hover, -fieldset[disabled] .navbar-default .btn-link:hover, -.navbar-default .btn-link[disabled]:focus, -fieldset[disabled] .navbar-default .btn-link:focus { - color: #ccc; -} -.navbar-inverse { - background-color: #222; - border-color: #080808; -} -.navbar-inverse .navbar-brand { - color: #9d9d9d; -} -.navbar-inverse .navbar-brand:hover, -.navbar-inverse .navbar-brand:focus { - color: #fff; - background-color: transparent; -} -.navbar-inverse .navbar-text { - color: #9d9d9d; -} -.navbar-inverse .navbar-nav > li > a { - color: #9d9d9d; -} -.navbar-inverse .navbar-nav > li > a:hover, -.navbar-inverse .navbar-nav > li > a:focus { - color: #fff; - background-color: transparent; -} -.navbar-inverse .navbar-nav > .active > a, -.navbar-inverse .navbar-nav > .active > a:hover, -.navbar-inverse .navbar-nav > .active > a:focus { - color: #fff; - background-color: #080808; -} -.navbar-inverse .navbar-nav > .disabled > a, -.navbar-inverse .navbar-nav > .disabled > a:hover, -.navbar-inverse .navbar-nav > .disabled > a:focus { - color: #444; - background-color: transparent; -} -.navbar-inverse .navbar-toggle { - border-color: #333; -} -.navbar-inverse .navbar-toggle:hover, -.navbar-inverse .navbar-toggle:focus { - background-color: #333; -} -.navbar-inverse .navbar-toggle .icon-bar { - background-color: #fff; -} -.navbar-inverse .navbar-collapse, -.navbar-inverse .navbar-form { - border-color: #101010; -} -.navbar-inverse .navbar-nav > .open > a, -.navbar-inverse .navbar-nav > .open > a:hover, -.navbar-inverse .navbar-nav > .open > a:focus { - color: #fff; - background-color: #080808; -} -@media (max-width: 767px) { - .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { - border-color: #080808; - } - .navbar-inverse .navbar-nav .open .dropdown-menu .divider { - background-color: #080808; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { - color: #9d9d9d; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, - .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { - color: #fff; - background-color: transparent; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, - .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, - .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { - color: #fff; - background-color: #080808; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, - .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, - .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { - color: #444; - background-color: transparent; - } -} -.navbar-inverse .navbar-link { - color: #9d9d9d; -} -.navbar-inverse .navbar-link:hover { - color: #fff; -} -.navbar-inverse .btn-link { - color: #9d9d9d; -} -.navbar-inverse .btn-link:hover, -.navbar-inverse .btn-link:focus { - color: #fff; -} -.navbar-inverse .btn-link[disabled]:hover, -fieldset[disabled] .navbar-inverse .btn-link:hover, -.navbar-inverse .btn-link[disabled]:focus, -fieldset[disabled] .navbar-inverse .btn-link:focus { - color: #444; -} -.breadcrumb { - padding: 8px 15px; - margin-bottom: 20px; - list-style: none; - background-color: #f5f5f5; - border-radius: 4px; -} -.breadcrumb > li { - display: inline-block; -} -.breadcrumb > li + li:before { - padding: 0 5px; - color: #ccc; - content: "/\00a0"; -} -.breadcrumb > .active { - color: #777; -} -.pagination { - display: inline-block; - padding-left: 0; - margin: 20px 0; - border-radius: 4px; -} -.pagination > li { - display: inline; -} -.pagination > li > a, -.pagination > li > span { - position: relative; - float: left; - padding: 6px 12px; - margin-left: -1px; - line-height: 1.42857143; - color: #337ab7; - text-decoration: none; - background-color: #fff; - border: 1px solid #ddd; -} -.pagination > li:first-child > a, -.pagination > li:first-child > span { - margin-left: 0; - border-top-left-radius: 4px; - border-bottom-left-radius: 4px; -} -.pagination > li:last-child > a, -.pagination > li:last-child > span { - border-top-right-radius: 4px; - border-bottom-right-radius: 4px; -} -.pagination > li > a:hover, -.pagination > li > span:hover, -.pagination > li > a:focus, -.pagination > li > span:focus { - color: #23527c; - background-color: #eee; - border-color: #ddd; -} -.pagination > .active > a, -.pagination > .active > span, -.pagination > .active > a:hover, -.pagination > .active > span:hover, -.pagination > .active > a:focus, -.pagination > .active > span:focus { - z-index: 2; - color: #fff; - cursor: default; - background-color: #337ab7; - border-color: #337ab7; -} -.pagination > .disabled > span, -.pagination > .disabled > span:hover, -.pagination > .disabled > span:focus, -.pagination > .disabled > a, -.pagination > .disabled > a:hover, -.pagination > .disabled > a:focus { - color: #777; - cursor: not-allowed; - background-color: #fff; - border-color: #ddd; -} -.pagination-lg > li > a, -.pagination-lg > li > span { - padding: 10px 16px; - font-size: 18px; -} -.pagination-lg > li:first-child > a, -.pagination-lg > li:first-child > span { - border-top-left-radius: 6px; - border-bottom-left-radius: 6px; -} -.pagination-lg > li:last-child > a, -.pagination-lg > li:last-child > span { - border-top-right-radius: 6px; - border-bottom-right-radius: 6px; -} -.pagination-sm > li > a, -.pagination-sm > li > span { - padding: 5px 10px; - font-size: 12px; -} -.pagination-sm > li:first-child > a, -.pagination-sm > li:first-child > span { - border-top-left-radius: 3px; - border-bottom-left-radius: 3px; -} -.pagination-sm > li:last-child > a, -.pagination-sm > li:last-child > span { - border-top-right-radius: 3px; - border-bottom-right-radius: 3px; -} -.pager { - padding-left: 0; - margin: 20px 0; - text-align: center; - list-style: none; -} -.pager li { - display: inline; -} -.pager li > a, -.pager li > span { - display: inline-block; - padding: 5px 14px; - background-color: #fff; - border: 1px solid #ddd; - border-radius: 15px; -} -.pager li > a:hover, -.pager li > a:focus { - text-decoration: none; - background-color: #eee; -} -.pager .next > a, -.pager .next > span { - float: right; -} -.pager .previous > a, -.pager .previous > span { - float: left; -} -.pager .disabled > a, -.pager .disabled > a:hover, -.pager .disabled > a:focus, -.pager .disabled > span { - color: #777; - cursor: not-allowed; - background-color: #fff; -} -.label { - display: inline; - padding: .2em .6em .3em; - font-size: 75%; - font-weight: bold; - line-height: 1; - color: #fff; - text-align: center; - white-space: nowrap; - vertical-align: baseline; - border-radius: .25em; -} -a.label:hover, -a.label:focus { - color: #fff; - text-decoration: none; - cursor: pointer; -} -.label:empty { - display: none; -} -.btn .label { - position: relative; - top: -1px; -} -.label-default { - background-color: #777; -} -.label-default[href]:hover, -.label-default[href]:focus { - background-color: #5e5e5e; -} -.label-primary { - background-color: #337ab7; -} -.label-primary[href]:hover, -.label-primary[href]:focus { - background-color: #286090; -} -.label-success { - background-color: #5cb85c; -} -.label-success[href]:hover, -.label-success[href]:focus { - background-color: #449d44; -} -.label-info { - background-color: #5bc0de; -} -.label-info[href]:hover, -.label-info[href]:focus { - background-color: #31b0d5; -} -.label-warning { - background-color: #f0ad4e; -} -.label-warning[href]:hover, -.label-warning[href]:focus { - background-color: #ec971f; -} -.label-danger { - background-color: #d9534f; -} -.label-danger[href]:hover, -.label-danger[href]:focus { - background-color: #c9302c; -} -.badge { - display: inline-block; - min-width: 10px; - padding: 3px 7px; - font-size: 12px; - font-weight: bold; - line-height: 1; - color: #fff; - text-align: center; - white-space: nowrap; - vertical-align: baseline; - background-color: #777; - border-radius: 10px; -} -.badge:empty { - display: none; -} -.btn .badge { - position: relative; - top: -1px; -} -.btn-xs .badge { - top: 0; - padding: 1px 5px; -} -a.badge:hover, -a.badge:focus { - color: #fff; - text-decoration: none; - cursor: pointer; -} -.list-group-item.active > .badge, -.nav-pills > .active > a > .badge { - color: #337ab7; - background-color: #fff; -} -.list-group-item > .badge { - float: right; -} -.list-group-item > .badge + .badge { - margin-right: 5px; -} -.nav-pills > li > a > .badge { - margin-left: 3px; -} -.jumbotron { - padding: 30px 15px; - margin-bottom: 30px; - color: inherit; - background-color: #eee; -} -.jumbotron h1, -.jumbotron .h1 { - color: inherit; -} -.jumbotron p { - margin-bottom: 15px; - font-size: 21px; - font-weight: 200; -} -.jumbotron > hr { - border-top-color: #d5d5d5; -} -.container .jumbotron, -.container-fluid .jumbotron { - border-radius: 6px; -} -.jumbotron .container { - max-width: 100%; -} -@media screen and (min-width: 768px) { - .jumbotron { - padding: 48px 0; - } - .container .jumbotron, - .container-fluid .jumbotron { - padding-right: 60px; - padding-left: 60px; - } - .jumbotron h1, - .jumbotron .h1 { - font-size: 63px; - } -} -.thumbnail { - display: block; - padding: 4px; - margin-bottom: 20px; - line-height: 1.42857143; - background-color: #fff; - border: 1px solid #ddd; - border-radius: 4px; - -webkit-transition: border .2s ease-in-out; - -o-transition: border .2s ease-in-out; - transition: border .2s ease-in-out; -} -.thumbnail > img, -.thumbnail a > img { - margin-right: auto; - margin-left: auto; -} -a.thumbnail:hover, -a.thumbnail:focus, -a.thumbnail.active { - border-color: #337ab7; -} -.thumbnail .caption { - padding: 9px; - color: #333; -} -.alert { - padding: 15px; - margin-bottom: 20px; - border: 1px solid transparent; - border-radius: 4px; -} -.alert h4 { - margin-top: 0; - color: inherit; -} -.alert .alert-link { - font-weight: bold; -} -.alert > p, -.alert > ul { - margin-bottom: 0; -} -.alert > p + p { - margin-top: 5px; -} -.alert-dismissable, -.alert-dismissible { - padding-right: 35px; -} -.alert-dismissable .close, -.alert-dismissible .close { - position: relative; - top: -2px; - right: -21px; - color: inherit; -} -.alert-success { - color: #3c763d; - background-color: #dff0d8; - border-color: #d6e9c6; -} -.alert-success hr { - border-top-color: #c9e2b3; -} -.alert-success .alert-link { - color: #2b542c; -} -.alert-info { - color: #31708f; - background-color: #d9edf7; - border-color: #bce8f1; -} -.alert-info hr { - border-top-color: #a6e1ec; -} -.alert-info .alert-link { - color: #245269; -} -.alert-warning { - color: #8a6d3b; - background-color: #fcf8e3; - border-color: #faebcc; -} -.alert-warning hr { - border-top-color: #f7e1b5; -} -.alert-warning .alert-link { - color: #66512c; -} -.alert-danger { - color: #a94442; - background-color: #f2dede; - border-color: #ebccd1; -} -.alert-danger hr { - border-top-color: #e4b9c0; -} -.alert-danger .alert-link { - color: #843534; -} -@-webkit-keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} -@-o-keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} -@keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} -.progress { - height: 20px; - margin-bottom: 20px; - overflow: hidden; - background-color: #f5f5f5; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1); - box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1); -} -.progress-bar { - float: left; - width: 0; - height: 100%; - font-size: 12px; - line-height: 20px; - color: #fff; - text-align: center; - background-color: #337ab7; - -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15); - box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15); - -webkit-transition: width .6s ease; - -o-transition: width .6s ease; - transition: width .6s ease; -} -.progress-striped .progress-bar, -.progress-bar-striped { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - -webkit-background-size: 40px 40px; - background-size: 40px 40px; -} -.progress.active .progress-bar, -.progress-bar.active { - -webkit-animation: progress-bar-stripes 2s linear infinite; - -o-animation: progress-bar-stripes 2s linear infinite; - animation: progress-bar-stripes 2s linear infinite; -} -.progress-bar-success { - background-color: #5cb85c; -} -.progress-striped .progress-bar-success { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); -} -.progress-bar-info { - background-color: #5bc0de; -} -.progress-striped .progress-bar-info { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); -} -.progress-bar-warning { - background-color: #f0ad4e; -} -.progress-striped .progress-bar-warning { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); -} -.progress-bar-danger { - background-color: #d9534f; -} -.progress-striped .progress-bar-danger { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); -} -.media { - margin-top: 15px; -} -.media:first-child { - margin-top: 0; -} -.media, -.media-body { - overflow: hidden; - zoom: 1; -} -.media-body { - width: 10000px; -} -.media-object { - display: block; -} -.media-right, -.media > .pull-right { - padding-left: 10px; -} -.media-left, -.media > .pull-left { - padding-right: 10px; -} -.media-left, -.media-right, -.media-body { - display: table-cell; - vertical-align: top; -} -.media-middle { - vertical-align: middle; -} -.media-bottom { - vertical-align: bottom; -} -.media-heading { - margin-top: 0; - margin-bottom: 5px; -} -.media-list { - padding-left: 0; - list-style: none; -} -.list-group { - padding-left: 0; - margin-bottom: 20px; -} -.list-group-item { - position: relative; - display: block; - padding: 10px 15px; - margin-bottom: -1px; - background-color: #fff; - border: 1px solid #ddd; -} -.list-group-item:first-child { - border-top-left-radius: 4px; - border-top-right-radius: 4px; -} -.list-group-item:last-child { - margin-bottom: 0; - border-bottom-right-radius: 4px; - border-bottom-left-radius: 4px; -} -a.list-group-item { - color: #555; -} -a.list-group-item .list-group-item-heading { - color: #333; -} -a.list-group-item:hover, -a.list-group-item:focus { - color: #555; - text-decoration: none; - background-color: #f5f5f5; -} -.list-group-item.disabled, -.list-group-item.disabled:hover, -.list-group-item.disabled:focus { - color: #777; - cursor: not-allowed; - background-color: #eee; -} -.list-group-item.disabled .list-group-item-heading, -.list-group-item.disabled:hover .list-group-item-heading, -.list-group-item.disabled:focus .list-group-item-heading { - color: inherit; -} -.list-group-item.disabled .list-group-item-text, -.list-group-item.disabled:hover .list-group-item-text, -.list-group-item.disabled:focus .list-group-item-text { - color: #777; -} -.list-group-item.active, -.list-group-item.active:hover, -.list-group-item.active:focus { - z-index: 2; - color: #fff; - background-color: #337ab7; - border-color: #337ab7; -} -.list-group-item.active .list-group-item-heading, -.list-group-item.active:hover .list-group-item-heading, -.list-group-item.active:focus .list-group-item-heading, -.list-group-item.active .list-group-item-heading > small, -.list-group-item.active:hover .list-group-item-heading > small, -.list-group-item.active:focus .list-group-item-heading > small, -.list-group-item.active .list-group-item-heading > .small, -.list-group-item.active:hover .list-group-item-heading > .small, -.list-group-item.active:focus .list-group-item-heading > .small { - color: inherit; -} -.list-group-item.active .list-group-item-text, -.list-group-item.active:hover .list-group-item-text, -.list-group-item.active:focus .list-group-item-text { - color: #c7ddef; -} -.list-group-item-success { - color: #3c763d; - background-color: #dff0d8; -} -a.list-group-item-success { - color: #3c763d; -} -a.list-group-item-success .list-group-item-heading { - color: inherit; -} -a.list-group-item-success:hover, -a.list-group-item-success:focus { - color: #3c763d; - background-color: #d0e9c6; -} -a.list-group-item-success.active, -a.list-group-item-success.active:hover, -a.list-group-item-success.active:focus { - color: #fff; - background-color: #3c763d; - border-color: #3c763d; -} -.list-group-item-info { - color: #31708f; - background-color: #d9edf7; -} -a.list-group-item-info { - color: #31708f; -} -a.list-group-item-info .list-group-item-heading { - color: inherit; -} -a.list-group-item-info:hover, -a.list-group-item-info:focus { - color: #31708f; - background-color: #c4e3f3; -} -a.list-group-item-info.active, -a.list-group-item-info.active:hover, -a.list-group-item-info.active:focus { - color: #fff; - background-color: #31708f; - border-color: #31708f; -} -.list-group-item-warning { - color: #8a6d3b; - background-color: #fcf8e3; -} -a.list-group-item-warning { - color: #8a6d3b; -} -a.list-group-item-warning .list-group-item-heading { - color: inherit; -} -a.list-group-item-warning:hover, -a.list-group-item-warning:focus { - color: #8a6d3b; - background-color: #faf2cc; -} -a.list-group-item-warning.active, -a.list-group-item-warning.active:hover, -a.list-group-item-warning.active:focus { - color: #fff; - background-color: #8a6d3b; - border-color: #8a6d3b; -} -.list-group-item-danger { - color: #a94442; - background-color: #f2dede; -} -a.list-group-item-danger { - color: #a94442; -} -a.list-group-item-danger .list-group-item-heading { - color: inherit; -} -a.list-group-item-danger:hover, -a.list-group-item-danger:focus { - color: #a94442; - background-color: #ebcccc; -} -a.list-group-item-danger.active, -a.list-group-item-danger.active:hover, -a.list-group-item-danger.active:focus { - color: #fff; - background-color: #a94442; - border-color: #a94442; -} -.list-group-item-heading { - margin-top: 0; - margin-bottom: 5px; -} -.list-group-item-text { - margin-bottom: 0; - line-height: 1.3; -} -.panel { - margin-bottom: 20px; - background-color: #fff; - border: 1px solid transparent; - border-radius: 4px; - -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05); - box-shadow: 0 1px 1px rgba(0, 0, 0, .05); -} -.panel-body { - padding: 15px; -} -.panel-heading { - padding: 10px 15px; - border-bottom: 1px solid transparent; - border-top-left-radius: 3px; - border-top-right-radius: 3px; -} -.panel-heading > .dropdown .dropdown-toggle { - color: inherit; -} -.panel-title { - margin-top: 0; - margin-bottom: 0; - font-size: 16px; - color: inherit; -} -.panel-title > a, -.panel-title > small, -.panel-title > .small, -.panel-title > small > a, -.panel-title > .small > a { - color: inherit; -} -.panel-footer { - padding: 10px 15px; - background-color: #f5f5f5; - border-top: 1px solid #ddd; - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; -} -.panel > .list-group, -.panel > .panel-collapse > .list-group { - margin-bottom: 0; -} -.panel > .list-group .list-group-item, -.panel > .panel-collapse > .list-group .list-group-item { - border-width: 1px 0; - border-radius: 0; -} -.panel > .list-group:first-child .list-group-item:first-child, -.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child { - border-top: 0; - border-top-left-radius: 3px; - border-top-right-radius: 3px; -} -.panel > .list-group:last-child .list-group-item:last-child, -.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child { - border-bottom: 0; - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; -} -.panel-heading + .list-group .list-group-item:first-child { - border-top-width: 0; -} -.list-group + .panel-footer { - border-top-width: 0; -} -.panel > .table, -.panel > .table-responsive > .table, -.panel > .panel-collapse > .table { - margin-bottom: 0; -} -.panel > .table caption, -.panel > .table-responsive > .table caption, -.panel > .panel-collapse > .table caption { - padding-right: 15px; - padding-left: 15px; -} -.panel > .table:first-child, -.panel > .table-responsive:first-child > .table:first-child { - border-top-left-radius: 3px; - border-top-right-radius: 3px; -} -.panel > .table:first-child > thead:first-child > tr:first-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child, -.panel > .table:first-child > tbody:first-child > tr:first-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child { - border-top-left-radius: 3px; - border-top-right-radius: 3px; -} -.panel > .table:first-child > thead:first-child > tr:first-child td:first-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child, -.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child, -.panel > .table:first-child > thead:first-child > tr:first-child th:first-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child, -.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child { - border-top-left-radius: 3px; -} -.panel > .table:first-child > thead:first-child > tr:first-child td:last-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child, -.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child, -.panel > .table:first-child > thead:first-child > tr:first-child th:last-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child, -.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child { - border-top-right-radius: 3px; -} -.panel > .table:last-child, -.panel > .table-responsive:last-child > .table:last-child { - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; -} -.panel > .table:last-child > tbody:last-child > tr:last-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child { - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; -} -.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child, -.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child { - border-bottom-left-radius: 3px; -} -.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child, -.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child { - border-bottom-right-radius: 3px; -} -.panel > .panel-body + .table, -.panel > .panel-body + .table-responsive, -.panel > .table + .panel-body, -.panel > .table-responsive + .panel-body { - border-top: 1px solid #ddd; -} -.panel > .table > tbody:first-child > tr:first-child th, -.panel > .table > tbody:first-child > tr:first-child td { - border-top: 0; -} -.panel > .table-bordered, -.panel > .table-responsive > .table-bordered { - border: 0; -} -.panel > .table-bordered > thead > tr > th:first-child, -.panel > .table-responsive > .table-bordered > thead > tr > th:first-child, -.panel > .table-bordered > tbody > tr > th:first-child, -.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child, -.panel > .table-bordered > tfoot > tr > th:first-child, -.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child, -.panel > .table-bordered > thead > tr > td:first-child, -.panel > .table-responsive > .table-bordered > thead > tr > td:first-child, -.panel > .table-bordered > tbody > tr > td:first-child, -.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child, -.panel > .table-bordered > tfoot > tr > td:first-child, -.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child { - border-left: 0; -} -.panel > .table-bordered > thead > tr > th:last-child, -.panel > .table-responsive > .table-bordered > thead > tr > th:last-child, -.panel > .table-bordered > tbody > tr > th:last-child, -.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child, -.panel > .table-bordered > tfoot > tr > th:last-child, -.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child, -.panel > .table-bordered > thead > tr > td:last-child, -.panel > .table-responsive > .table-bordered > thead > tr > td:last-child, -.panel > .table-bordered > tbody > tr > td:last-child, -.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child, -.panel > .table-bordered > tfoot > tr > td:last-child, -.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child { - border-right: 0; -} -.panel > .table-bordered > thead > tr:first-child > td, -.panel > .table-responsive > .table-bordered > thead > tr:first-child > td, -.panel > .table-bordered > tbody > tr:first-child > td, -.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td, -.panel > .table-bordered > thead > tr:first-child > th, -.panel > .table-responsive > .table-bordered > thead > tr:first-child > th, -.panel > .table-bordered > tbody > tr:first-child > th, -.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th { - border-bottom: 0; -} -.panel > .table-bordered > tbody > tr:last-child > td, -.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td, -.panel > .table-bordered > tfoot > tr:last-child > td, -.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td, -.panel > .table-bordered > tbody > tr:last-child > th, -.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th, -.panel > .table-bordered > tfoot > tr:last-child > th, -.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th { - border-bottom: 0; -} -.panel > .table-responsive { - margin-bottom: 0; - border: 0; -} -.panel-group { - margin-bottom: 20px; -} -.panel-group .panel { - margin-bottom: 0; - border-radius: 4px; -} -.panel-group .panel + .panel { - margin-top: 5px; -} -.panel-group .panel-heading { - border-bottom: 0; -} -.panel-group .panel-heading + .panel-collapse > .panel-body, -.panel-group .panel-heading + .panel-collapse > .list-group { - border-top: 1px solid #ddd; -} -.panel-group .panel-footer { - border-top: 0; -} -.panel-group .panel-footer + .panel-collapse .panel-body { - border-bottom: 1px solid #ddd; -} -.panel-default { - border-color: #ddd; -} -.panel-default > .panel-heading { - color: #333; - background-color: #f5f5f5; - border-color: #ddd; -} -.panel-default > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #ddd; -} -.panel-default > .panel-heading .badge { - color: #f5f5f5; - background-color: #333; -} -.panel-default > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #ddd; -} -.panel-primary { - border-color: #337ab7; -} -.panel-primary > .panel-heading { - color: #fff; - background-color: #337ab7; - border-color: #337ab7; -} -.panel-primary > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #337ab7; -} -.panel-primary > .panel-heading .badge { - color: #337ab7; - background-color: #fff; -} -.panel-primary > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #337ab7; -} -.panel-success { - border-color: #d6e9c6; -} -.panel-success > .panel-heading { - color: #3c763d; - background-color: #dff0d8; - border-color: #d6e9c6; -} -.panel-success > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #d6e9c6; -} -.panel-success > .panel-heading .badge { - color: #dff0d8; - background-color: #3c763d; -} -.panel-success > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #d6e9c6; -} -.panel-info { - border-color: #bce8f1; -} -.panel-info > .panel-heading { - color: #31708f; - background-color: #d9edf7; - border-color: #bce8f1; -} -.panel-info > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #bce8f1; -} -.panel-info > .panel-heading .badge { - color: #d9edf7; - background-color: #31708f; -} -.panel-info > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #bce8f1; -} -.panel-warning { - border-color: #faebcc; -} -.panel-warning > .panel-heading { - color: #8a6d3b; - background-color: #fcf8e3; - border-color: #faebcc; -} -.panel-warning > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #faebcc; -} -.panel-warning > .panel-heading .badge { - color: #fcf8e3; - background-color: #8a6d3b; -} -.panel-warning > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #faebcc; -} -.panel-danger { - border-color: #ebccd1; -} -.panel-danger > .panel-heading { - color: #a94442; - background-color: #f2dede; - border-color: #ebccd1; -} -.panel-danger > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #ebccd1; -} -.panel-danger > .panel-heading .badge { - color: #f2dede; - background-color: #a94442; -} -.panel-danger > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #ebccd1; -} -.embed-responsive { - position: relative; - display: block; - height: 0; - padding: 0; - overflow: hidden; -} -.embed-responsive .embed-responsive-item, -.embed-responsive iframe, -.embed-responsive embed, -.embed-responsive object, -.embed-responsive video { - position: absolute; - top: 0; - bottom: 0; - left: 0; - width: 100%; - height: 100%; - border: 0; -} -.embed-responsive.embed-responsive-16by9 { - padding-bottom: 56.25%; -} -.embed-responsive.embed-responsive-4by3 { - padding-bottom: 75%; -} -.well { - min-height: 20px; - padding: 19px; - margin-bottom: 20px; - background-color: #f5f5f5; - border: 1px solid #e3e3e3; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); -} -.well blockquote { - border-color: #ddd; - border-color: rgba(0, 0, 0, .15); -} -.well-lg { - padding: 24px; - border-radius: 6px; -} -.well-sm { - padding: 9px; - border-radius: 3px; -} -.close { - float: right; - font-size: 21px; - font-weight: bold; - line-height: 1; - color: #000; - text-shadow: 0 1px 0 #fff; - filter: alpha(opacity=20); - opacity: .2; -} -.close:hover, -.close:focus { - color: #000; - text-decoration: none; - cursor: pointer; - filter: alpha(opacity=50); - opacity: .5; -} -button.close { - -webkit-appearance: none; - padding: 0; - cursor: pointer; - background: transparent; - border: 0; -} -.modal-open { - overflow: hidden; -} -.modal { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1040; - display: none; - overflow: hidden; - -webkit-overflow-scrolling: touch; - outline: 0; -} -.modal.fade .modal-dialog { - -webkit-transition: -webkit-transform .3s ease-out; - -o-transition: -o-transform .3s ease-out; - transition: transform .3s ease-out; - -webkit-transform: translate(0, -25%); - -ms-transform: translate(0, -25%); - -o-transform: translate(0, -25%); - transform: translate(0, -25%); -} -.modal.in .modal-dialog { - -webkit-transform: translate(0, 0); - -ms-transform: translate(0, 0); - -o-transform: translate(0, 0); - transform: translate(0, 0); -} -.modal-open .modal { - overflow-x: hidden; - overflow-y: auto; -} -.modal-dialog { - position: relative; - width: auto; - margin: 10px; -} -.modal-content { - position: relative; - background-color: #fff; - -webkit-background-clip: padding-box; - background-clip: padding-box; - border: 1px solid #999; - border: 1px solid rgba(0, 0, 0, .2); - border-radius: 6px; - outline: 0; - -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5); - box-shadow: 0 3px 9px rgba(0, 0, 0, .5); -} -.modal-backdrop { - position: absolute; - top: 0; - right: 0; - left: 0; - background-color: #000; -} -.modal-backdrop.fade { - filter: alpha(opacity=0); - opacity: 0; -} -.modal-backdrop.in { - filter: alpha(opacity=50); - opacity: .5; -} -.modal-header { - min-height: 16.42857143px; - padding: 15px; - border-bottom: 1px solid #e5e5e5; -} -.modal-header .close { - margin-top: -2px; -} -.modal-title { - margin: 0; - line-height: 1.42857143; -} -.modal-body { - position: relative; - padding: 15px; -} -.modal-footer { - padding: 15px; - text-align: right; - border-top: 1px solid #e5e5e5; -} -.modal-footer .btn + .btn { - margin-bottom: 0; - margin-left: 5px; -} -.modal-footer .btn-group .btn + .btn { - margin-left: -1px; -} -.modal-footer .btn-block + .btn-block { - margin-left: 0; -} -.modal-scrollbar-measure { - position: absolute; - top: -9999px; - width: 50px; - height: 50px; - overflow: scroll; -} -@media (min-width: 768px) { - .modal-dialog { - width: 600px; - margin: 30px auto; - } - .modal-content { - -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5); - box-shadow: 0 5px 15px rgba(0, 0, 0, .5); - } - .modal-sm { - width: 300px; - } -} -@media (min-width: 992px) { - .modal-lg { - width: 900px; - } -} -.tooltip { - position: absolute; - z-index: 1070; - display: block; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 12px; - font-weight: normal; - line-height: 1.4; - visibility: visible; - filter: alpha(opacity=0); - opacity: 0; -} -.tooltip.in { - filter: alpha(opacity=90); - opacity: .9; -} -.tooltip.top { - padding: 5px 0; - margin-top: -3px; -} -.tooltip.right { - padding: 0 5px; - margin-left: 3px; -} -.tooltip.bottom { - padding: 5px 0; - margin-top: 3px; -} -.tooltip.left { - padding: 0 5px; - margin-left: -3px; -} -.tooltip-inner { - max-width: 200px; - padding: 3px 8px; - color: #fff; - text-align: center; - text-decoration: none; - background-color: #000; - border-radius: 4px; -} -.tooltip-arrow { - position: absolute; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; -} -.tooltip.top .tooltip-arrow { - bottom: 0; - left: 50%; - margin-left: -5px; - border-width: 5px 5px 0; - border-top-color: #000; -} -.tooltip.top-left .tooltip-arrow { - right: 5px; - bottom: 0; - margin-bottom: -5px; - border-width: 5px 5px 0; - border-top-color: #000; -} -.tooltip.top-right .tooltip-arrow { - bottom: 0; - left: 5px; - margin-bottom: -5px; - border-width: 5px 5px 0; - border-top-color: #000; -} -.tooltip.right .tooltip-arrow { - top: 50%; - left: 0; - margin-top: -5px; - border-width: 5px 5px 5px 0; - border-right-color: #000; -} -.tooltip.left .tooltip-arrow { - top: 50%; - right: 0; - margin-top: -5px; - border-width: 5px 0 5px 5px; - border-left-color: #000; -} -.tooltip.bottom .tooltip-arrow { - top: 0; - left: 50%; - margin-left: -5px; - border-width: 0 5px 5px; - border-bottom-color: #000; -} -.tooltip.bottom-left .tooltip-arrow { - top: 0; - right: 5px; - margin-top: -5px; - border-width: 0 5px 5px; - border-bottom-color: #000; -} -.tooltip.bottom-right .tooltip-arrow { - top: 0; - left: 5px; - margin-top: -5px; - border-width: 0 5px 5px; - border-bottom-color: #000; -} -.popover { - position: absolute; - top: 0; - left: 0; - z-index: 1060; - display: none; - max-width: 276px; - padding: 1px; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 14px; - font-weight: normal; - line-height: 1.42857143; - text-align: left; - white-space: normal; - background-color: #fff; - -webkit-background-clip: padding-box; - background-clip: padding-box; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, .2); - border-radius: 6px; - -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2); - box-shadow: 0 5px 10px rgba(0, 0, 0, .2); -} -.popover.top { - margin-top: -10px; -} -.popover.right { - margin-left: 10px; -} -.popover.bottom { - margin-top: 10px; -} -.popover.left { - margin-left: -10px; -} -.popover-title { - padding: 8px 14px; - margin: 0; - font-size: 14px; - background-color: #f7f7f7; - border-bottom: 1px solid #ebebeb; - border-radius: 5px 5px 0 0; -} -.popover-content { - padding: 9px 14px; -} -.popover > .arrow, -.popover > .arrow:after { - position: absolute; - display: block; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; -} -.popover > .arrow { - border-width: 11px; -} -.popover > .arrow:after { - content: ""; - border-width: 10px; -} -.popover.top > .arrow { - bottom: -11px; - left: 50%; - margin-left: -11px; - border-top-color: #999; - border-top-color: rgba(0, 0, 0, .25); - border-bottom-width: 0; -} -.popover.top > .arrow:after { - bottom: 1px; - margin-left: -10px; - content: " "; - border-top-color: #fff; - border-bottom-width: 0; -} -.popover.right > .arrow { - top: 50%; - left: -11px; - margin-top: -11px; - border-right-color: #999; - border-right-color: rgba(0, 0, 0, .25); - border-left-width: 0; -} -.popover.right > .arrow:after { - bottom: -10px; - left: 1px; - content: " "; - border-right-color: #fff; - border-left-width: 0; -} -.popover.bottom > .arrow { - top: -11px; - left: 50%; - margin-left: -11px; - border-top-width: 0; - border-bottom-color: #999; - border-bottom-color: rgba(0, 0, 0, .25); -} -.popover.bottom > .arrow:after { - top: 1px; - margin-left: -10px; - content: " "; - border-top-width: 0; - border-bottom-color: #fff; -} -.popover.left > .arrow { - top: 50%; - right: -11px; - margin-top: -11px; - border-right-width: 0; - border-left-color: #999; - border-left-color: rgba(0, 0, 0, .25); -} -.popover.left > .arrow:after { - right: 1px; - bottom: -10px; - content: " "; - border-right-width: 0; - border-left-color: #fff; -} -.carousel { - position: relative; -} -.carousel-inner { - position: relative; - width: 100%; - overflow: hidden; -} -.carousel-inner > .item { - position: relative; - display: none; - -webkit-transition: .6s ease-in-out left; - -o-transition: .6s ease-in-out left; - transition: .6s ease-in-out left; -} -.carousel-inner > .item > img, -.carousel-inner > .item > a > img { - line-height: 1; -} -@media all and (transform-3d), (-webkit-transform-3d) { - .carousel-inner > .item { - -webkit-transition: -webkit-transform .6s ease-in-out; - -o-transition: -o-transform .6s ease-in-out; - transition: transform .6s ease-in-out; - - -webkit-backface-visibility: hidden; - backface-visibility: hidden; - -webkit-perspective: 1000; - perspective: 1000; - } - .carousel-inner > .item.next, - .carousel-inner > .item.active.right { - left: 0; - -webkit-transform: translate3d(100%, 0, 0); - transform: translate3d(100%, 0, 0); - } - .carousel-inner > .item.prev, - .carousel-inner > .item.active.left { - left: 0; - -webkit-transform: translate3d(-100%, 0, 0); - transform: translate3d(-100%, 0, 0); - } - .carousel-inner > .item.next.left, - .carousel-inner > .item.prev.right, - .carousel-inner > .item.active { - left: 0; - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} -.carousel-inner > .active, -.carousel-inner > .next, -.carousel-inner > .prev { - display: block; -} -.carousel-inner > .active { - left: 0; -} -.carousel-inner > .next, -.carousel-inner > .prev { - position: absolute; - top: 0; - width: 100%; -} -.carousel-inner > .next { - left: 100%; -} -.carousel-inner > .prev { - left: -100%; -} -.carousel-inner > .next.left, -.carousel-inner > .prev.right { - left: 0; -} -.carousel-inner > .active.left { - left: -100%; -} -.carousel-inner > .active.right { - left: 100%; -} -.carousel-control { - position: absolute; - top: 0; - bottom: 0; - left: 0; - width: 15%; - font-size: 20px; - color: #fff; - text-align: center; - text-shadow: 0 1px 2px rgba(0, 0, 0, .6); - filter: alpha(opacity=50); - opacity: .5; -} -.carousel-control.left { - background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); - background-image: -o-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); - background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, .0001))); - background-image: linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); - background-repeat: repeat-x; -} -.carousel-control.right { - right: 0; - left: auto; - background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); - background-image: -o-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); - background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .0001)), to(rgba(0, 0, 0, .5))); - background-image: linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); - background-repeat: repeat-x; -} -.carousel-control:hover, -.carousel-control:focus { - color: #fff; - text-decoration: none; - filter: alpha(opacity=90); - outline: 0; - opacity: .9; -} -.carousel-control .icon-prev, -.carousel-control .icon-next, -.carousel-control .glyphicon-chevron-left, -.carousel-control .glyphicon-chevron-right { - position: absolute; - top: 50%; - z-index: 5; - display: inline-block; -} -.carousel-control .icon-prev, -.carousel-control .glyphicon-chevron-left { - left: 50%; - margin-left: -10px; -} -.carousel-control .icon-next, -.carousel-control .glyphicon-chevron-right { - right: 50%; - margin-right: -10px; -} -.carousel-control .icon-prev, -.carousel-control .icon-next { - width: 20px; - height: 20px; - margin-top: -10px; - font-family: serif; - line-height: 1; -} -.carousel-control .icon-prev:before { - content: '\2039'; -} -.carousel-control .icon-next:before { - content: '\203a'; -} -.carousel-indicators { - position: absolute; - bottom: 10px; - left: 50%; - z-index: 15; - width: 60%; - padding-left: 0; - margin-left: -30%; - text-align: center; - list-style: none; -} -.carousel-indicators li { - display: inline-block; - width: 10px; - height: 10px; - margin: 1px; - text-indent: -999px; - cursor: pointer; - background-color: #000 \9; - background-color: rgba(0, 0, 0, 0); - border: 1px solid #fff; - border-radius: 10px; -} -.carousel-indicators .active { - width: 12px; - height: 12px; - margin: 0; - background-color: #fff; -} -.carousel-caption { - position: absolute; - right: 15%; - bottom: 20px; - left: 15%; - z-index: 10; - padding-top: 20px; - padding-bottom: 20px; - color: #fff; - text-align: center; - text-shadow: 0 1px 2px rgba(0, 0, 0, .6); -} -.carousel-caption .btn { - text-shadow: none; -} -@media screen and (min-width: 768px) { - .carousel-control .glyphicon-chevron-left, - .carousel-control .glyphicon-chevron-right, - .carousel-control .icon-prev, - .carousel-control .icon-next { - width: 30px; - height: 30px; - margin-top: -15px; - font-size: 30px; - } - .carousel-control .glyphicon-chevron-left, - .carousel-control .icon-prev { - margin-left: -15px; - } - .carousel-control .glyphicon-chevron-right, - .carousel-control .icon-next { - margin-right: -15px; - } - .carousel-caption { - right: 20%; - left: 20%; - padding-bottom: 30px; - } - .carousel-indicators { - bottom: 20px; - } -} -.clearfix:before, -.clearfix:after, -.dl-horizontal dd:before, -.dl-horizontal dd:after, -.container:before, -.container:after, -.container-fluid:before, -.container-fluid:after, -.row:before, -.row:after, -.form-horizontal .form-group:before, -.form-horizontal .form-group:after, -.btn-toolbar:before, -.btn-toolbar:after, -.btn-group-vertical > .btn-group:before, -.btn-group-vertical > .btn-group:after, -.nav:before, -.nav:after, -.navbar:before, -.navbar:after, -.navbar-header:before, -.navbar-header:after, -.navbar-collapse:before, -.navbar-collapse:after, -.pager:before, -.pager:after, -.panel-body:before, -.panel-body:after, -.modal-footer:before, -.modal-footer:after { - display: table; - content: " "; -} -.clearfix:after, -.dl-horizontal dd:after, -.container:after, -.container-fluid:after, -.row:after, -.form-horizontal .form-group:after, -.btn-toolbar:after, -.btn-group-vertical > .btn-group:after, -.nav:after, -.navbar:after, -.navbar-header:after, -.navbar-collapse:after, -.pager:after, -.panel-body:after, -.modal-footer:after { - clear: both; -} -.center-block { - display: block; - margin-right: auto; - margin-left: auto; -} -.pull-right { - float: right !important; -} -.pull-left { - float: left !important; -} -.hide { - display: none !important; -} -.show { - display: block !important; -} -.invisible { - visibility: hidden; -} -.text-hide { - font: 0/0 a; - color: transparent; - text-shadow: none; - background-color: transparent; - border: 0; -} -.hidden { - display: none !important; - visibility: hidden !important; -} -.affix { - position: fixed; -} -@-ms-viewport { - width: device-width; -} -.visible-xs, -.visible-sm, -.visible-md, -.visible-lg { - display: none !important; -} -.visible-xs-block, -.visible-xs-inline, -.visible-xs-inline-block, -.visible-sm-block, -.visible-sm-inline, -.visible-sm-inline-block, -.visible-md-block, -.visible-md-inline, -.visible-md-inline-block, -.visible-lg-block, -.visible-lg-inline, -.visible-lg-inline-block { - display: none !important; -} -@media (max-width: 767px) { - .visible-xs { - display: block !important; - } - table.visible-xs { - display: table; - } - tr.visible-xs { - display: table-row !important; - } - th.visible-xs, - td.visible-xs { - display: table-cell !important; - } -} -@media (max-width: 767px) { - .visible-xs-block { - display: block !important; - } -} -@media (max-width: 767px) { - .visible-xs-inline { - display: inline !important; - } -} -@media (max-width: 767px) { - .visible-xs-inline-block { - display: inline-block !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm { - display: block !important; - } - table.visible-sm { - display: table; - } - tr.visible-sm { - display: table-row !important; - } - th.visible-sm, - td.visible-sm { - display: table-cell !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm-block { - display: block !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm-inline { - display: inline !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm-inline-block { - display: inline-block !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md { - display: block !important; - } - table.visible-md { - display: table; - } - tr.visible-md { - display: table-row !important; - } - th.visible-md, - td.visible-md { - display: table-cell !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md-block { - display: block !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md-inline { - display: inline !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md-inline-block { - display: inline-block !important; - } -} -@media (min-width: 1200px) { - .visible-lg { - display: block !important; - } - table.visible-lg { - display: table; - } - tr.visible-lg { - display: table-row !important; - } - th.visible-lg, - td.visible-lg { - display: table-cell !important; - } -} -@media (min-width: 1200px) { - .visible-lg-block { - display: block !important; - } -} -@media (min-width: 1200px) { - .visible-lg-inline { - display: inline !important; - } -} -@media (min-width: 1200px) { - .visible-lg-inline-block { - display: inline-block !important; - } -} -@media (max-width: 767px) { - .hidden-xs { - display: none !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .hidden-sm { - display: none !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .hidden-md { - display: none !important; - } -} -@media (min-width: 1200px) { - .hidden-lg { - display: none !important; - } -} -.visible-print { - display: none !important; -} -@media print { - .visible-print { - display: block !important; - } - table.visible-print { - display: table; - } - tr.visible-print { - display: table-row !important; - } - th.visible-print, - td.visible-print { - display: table-cell !important; - } -} -.visible-print-block { - display: none !important; -} -@media print { - .visible-print-block { - display: block !important; - } -} -.visible-print-inline { - display: none !important; -} -@media print { - .visible-print-inline { - display: inline !important; - } -} -.visible-print-inline-block { - display: none !important; -} -@media print { - .visible-print-inline-block { - display: inline-block !important; - } -} -@media print { - .hidden-print { - display: none !important; - } -} -/*# sourceMappingURL=bootstrap.css.map */ diff --git a/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png b/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png deleted file mode 100644 index 3613910b7770d4a8deb4a095fbc90b75dae86b7f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 212 zcmeAS@N?(olHy`uVBq!ia0vp^8bF-F1SA+{?>A)!QcOwS?k)_>#w|r1Kptm-M`SUO z_5fqIli7AahM1>|V~EA+ zRdP`(kYX@0Ff`RQFw!+N4KXmcGB&j`FxECOure^{e$A OVDNPHb6Mw<&;$U55i}kE diff --git a/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png b/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png deleted file mode 100644 index ad8c5ea1ec8b6789e3bff1807ad74a66bc7f5442..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 208 zcmeAS@N?(olHy`uVBq!ia0vp^8bF-F2qYNp$opRhQcOwS?k)_Bce{j_0C}7R9+AaB z+5?Q;PG;Ky8A6^ejv*T7lYj6t@hpC#;TbB#aBAWwna#KLs)4eqC9V-ADTyViR>?)F zK#IZ0z|d6Jz)087G{nH%%GlJ(z*yVBz{nc6a#?2AmP!?*K(O3p^r= zfwTu0yPeFo12TF&T^vI^j=w#x$i?I+((tf;UXnmgbH|3oY>pC!)f}(GR!16S-u+#{ ze6YEqRkW=8vGl=5qArKM<9}TC-}iEvB{zdaTcX5$wyRTK&ALYGq)oZD3$! kV9@=VQyWD?ZhlH;S|x4`zqW0h4%EQl>FVdQ&MBb@06KRXUCGx5b?-VBQkUm|IuXOmYJrBRJgj{Vx zMbNnqUkncy+qa2-mWYc>swkcIuvGK#>(0d)B7)5f`@$Ei28nH~0h*~=;u=wsl30>z zm0Xkxq!^403{7M?Ujnjb| O7(8A5T-G@yGywoj!A}JM diff --git a/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png b/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png deleted file mode 100644 index 80dc68f7e4a960212ad482dac9aa94ad82c22df4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 262 zcmeAS@N?(olHy`uVBq!ia0vp^j6gI&0LWmFTHNUZq?nSt-Ch3w7g=q17Rci)@Q5r1 z(jH*!b~4)z#PD=+46!(!TrvH)L6@80)r*_cdCvDr%)6ghVL16=s@mbz7H!uRdGeDa z?kzLg)16i!f8fKx84s0>4nc6a#?2AmP!?*K(O3p^r= zfwTu0yPeFo12VciT^vI^j=w#>k(V)1qW$CZ|6)SVV-&*#dav<$DMuV&n0Dbpw@afkei>9nO2Eg!>?@{rvo)Gc)I$ztaD0e0syM4bNT=P diff --git a/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png b/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png deleted file mode 100644 index a5d9c30e3150e7bec7b2025c029d8c2b38d4a645..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 280 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 oFmD$4S&0RXheCg2zs^YN~b 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 diff --git a/css/smoothness/images/ui-icons_cd0a0a_256x240.png b/css/smoothness/images/ui-icons_cd0a0a_256x240.png deleted file mode 100644 index 7af13a6004008f4d683852d9098f23751ee6c293..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4549 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 RqI`A;po22hs?@+d{tuTKDi;6% diff --git a/css/smoothness/jquery-ui-1.11.3.custom.css b/css/smoothness/jquery-ui-1.11.3.custom.css deleted file mode 100644 index 06cd80c6..00000000 --- a/css/smoothness/jquery-ui-1.11.3.custom.css +++ /dev/null @@ -1,1225 +0,0 @@ -/*! jQuery UI - v1.11.3 - 2015-02-27 -* http://jqueryui.com -* Includes: core.css, draggable.css, resizable.css, selectable.css, sortable.css, accordion.css, autocomplete.css, button.css, datepicker.css, dialog.css, menu.css, progressbar.css, selectmenu.css, slider.css, spinner.css, tabs.css, tooltip.css, theme.css -* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana%2CArial%2Csans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=highlight_soft&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=flat&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=glass&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=glass&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=glass&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=glass&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px -* Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */ - -/* Layout helpers -----------------------------------*/ -.ui-helper-hidden { - display: none; -} -.ui-helper-hidden-accessible { - border: 0; - clip: rect(0 0 0 0); - height: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - width: 1px; -} -.ui-helper-reset { - margin: 0; - padding: 0; - border: 0; - outline: 0; - line-height: 1.3; - text-decoration: none; - font-size: 100%; - list-style: none; -} -.ui-helper-clearfix:before, -.ui-helper-clearfix:after { - content: ""; - display: table; - border-collapse: collapse; -} -.ui-helper-clearfix:after { - clear: both; -} -.ui-helper-clearfix { - min-height: 0; /* support: IE7 */ -} -.ui-helper-zfix { - width: 100%; - height: 100%; - top: 0; - left: 0; - position: absolute; - opacity: 0; - filter:Alpha(Opacity=0); /* support: IE8 */ -} - -.ui-front { - z-index: 100; -} - - -/* Interaction Cues -----------------------------------*/ -.ui-state-disabled { - cursor: default !important; -} - - -/* Icons -----------------------------------*/ - -/* states and images */ -.ui-icon { - display: block; - text-indent: -99999px; - overflow: hidden; - background-repeat: no-repeat; -} - - -/* Misc visuals -----------------------------------*/ - -/* Overlays */ -.ui-widget-overlay { - position: fixed; - top: 0; - left: 0; - width: 100%; - height: 100%; -} -.ui-draggable-handle { - -ms-touch-action: none; - touch-action: none; -} -.ui-resizable { - position: relative; -} -.ui-resizable-handle { - position: absolute; - font-size: 0.1px; - display: block; - -ms-touch-action: none; - touch-action: none; -} -.ui-resizable-disabled .ui-resizable-handle, -.ui-resizable-autohide .ui-resizable-handle { - display: none; -} -.ui-resizable-n { - cursor: n-resize; - height: 7px; - width: 100%; - top: -5px; - left: 0; -} -.ui-resizable-s { - cursor: s-resize; - height: 7px; - width: 100%; - bottom: -5px; - left: 0; -} -.ui-resizable-e { - cursor: e-resize; - width: 7px; - right: -5px; - top: 0; - height: 100%; -} -.ui-resizable-w { - cursor: w-resize; - width: 7px; - left: -5px; - top: 0; - height: 100%; -} -.ui-resizable-se { - cursor: se-resize; - width: 12px; - height: 12px; - right: 1px; - bottom: 1px; -} -.ui-resizable-sw { - cursor: sw-resize; - width: 9px; - height: 9px; - left: -5px; - bottom: -5px; -} -.ui-resizable-nw { - cursor: nw-resize; - width: 9px; - height: 9px; - left: -5px; - top: -5px; -} -.ui-resizable-ne { - cursor: ne-resize; - width: 9px; - height: 9px; - right: -5px; - top: -5px; -} -.ui-selectable { - -ms-touch-action: none; - touch-action: none; -} -.ui-selectable-helper { - position: absolute; - z-index: 100; - border: 1px dotted black; -} -.ui-sortable-handle { - -ms-touch-action: none; - touch-action: none; -} -.ui-accordion .ui-accordion-header { - display: block; - cursor: pointer; - position: relative; - margin: 2px 0 0 0; - padding: .5em .5em .5em .7em; - min-height: 0; /* support: IE7 */ - font-size: 100%; -} -.ui-accordion .ui-accordion-icons { - padding-left: 2.2em; -} -.ui-accordion .ui-accordion-icons .ui-accordion-icons { - padding-left: 2.2em; -} -.ui-accordion .ui-accordion-header .ui-accordion-header-icon { - position: absolute; - left: .5em; - top: 50%; - margin-top: -8px; -} -.ui-accordion .ui-accordion-content { - padding: 1em 2.2em; - border-top: 0; - overflow: auto; -} -.ui-autocomplete { - position: absolute; - top: 0; - left: 0; - cursor: default; -} -.ui-button { - display: inline-block; - position: relative; - padding: 0; - line-height: normal; - margin-right: .1em; - cursor: pointer; - vertical-align: middle; - text-align: center; - overflow: visible; /* removes extra width in IE */ -} -.ui-button, -.ui-button:link, -.ui-button:visited, -.ui-button:hover, -.ui-button:active { - text-decoration: none; -} -/* to make room for the icon, a width needs to be set here */ -.ui-button-icon-only { - width: 2.2em; -} -/* button elements seem to need a little more width */ -button.ui-button-icon-only { - width: 2.4em; -} -.ui-button-icons-only { - width: 3.4em; -} -button.ui-button-icons-only { - width: 3.7em; -} - -/* button text element */ -.ui-button .ui-button-text { - display: block; - line-height: normal; -} -.ui-button-text-only .ui-button-text { - padding: .4em 1em; -} -.ui-button-icon-only .ui-button-text, -.ui-button-icons-only .ui-button-text { - padding: .4em; - text-indent: -9999999px; -} -.ui-button-text-icon-primary .ui-button-text, -.ui-button-text-icons .ui-button-text { - padding: .4em 1em .4em 2.1em; -} -.ui-button-text-icon-secondary .ui-button-text, -.ui-button-text-icons .ui-button-text { - padding: .4em 2.1em .4em 1em; -} -.ui-button-text-icons .ui-button-text { - padding-left: 2.1em; - padding-right: 2.1em; -} -/* no icon support for input elements, provide padding by default */ -input.ui-button { - padding: .4em 1em; -} - -/* button icon element(s) */ -.ui-button-icon-only .ui-icon, -.ui-button-text-icon-primary .ui-icon, -.ui-button-text-icon-secondary .ui-icon, -.ui-button-text-icons .ui-icon, -.ui-button-icons-only .ui-icon { - position: absolute; - top: 50%; - margin-top: -8px; -} -.ui-button-icon-only .ui-icon { - left: 50%; - margin-left: -8px; -} -.ui-button-text-icon-primary .ui-button-icon-primary, -.ui-button-text-icons .ui-button-icon-primary, -.ui-button-icons-only .ui-button-icon-primary { - left: .5em; -} -.ui-button-text-icon-secondary .ui-button-icon-secondary, -.ui-button-text-icons .ui-button-icon-secondary, -.ui-button-icons-only .ui-button-icon-secondary { - right: .5em; -} - -/* button sets */ -.ui-buttonset { - margin-right: 7px; -} -.ui-buttonset .ui-button { - margin-left: 0; - margin-right: -.3em; -} - -/* workarounds */ -/* reset extra padding in Firefox, see h5bp.com/l */ -input.ui-button::-moz-focus-inner, -button.ui-button::-moz-focus-inner { - border: 0; - padding: 0; -} -.ui-datepicker { - width: 17em; - padding: .2em .2em 0; - display: none; -} -.ui-datepicker .ui-datepicker-header { - position: relative; - padding: .2em 0; -} -.ui-datepicker .ui-datepicker-prev, -.ui-datepicker .ui-datepicker-next { - position: absolute; - top: 2px; - width: 1.8em; - height: 1.8em; -} -.ui-datepicker .ui-datepicker-prev-hover, -.ui-datepicker .ui-datepicker-next-hover { - top: 1px; -} -.ui-datepicker .ui-datepicker-prev { - left: 2px; -} -.ui-datepicker .ui-datepicker-next { - right: 2px; -} -.ui-datepicker .ui-datepicker-prev-hover { - left: 1px; -} -.ui-datepicker .ui-datepicker-next-hover { - right: 1px; -} -.ui-datepicker .ui-datepicker-prev span, -.ui-datepicker .ui-datepicker-next span { - display: block; - position: absolute; - left: 50%; - margin-left: -8px; - top: 50%; - margin-top: -8px; -} -.ui-datepicker .ui-datepicker-title { - margin: 0 2.3em; - line-height: 1.8em; - text-align: center; -} -.ui-datepicker .ui-datepicker-title select { - font-size: 1em; - margin: 1px 0; -} -.ui-datepicker select.ui-datepicker-month, -.ui-datepicker select.ui-datepicker-year { - width: 45%; -} -.ui-datepicker table { - width: 100%; - font-size: .9em; - border-collapse: collapse; - margin: 0 0 .4em; -} -.ui-datepicker th { - padding: .7em .3em; - text-align: center; - font-weight: bold; - border: 0; -} -.ui-datepicker td { - border: 0; - padding: 1px; -} -.ui-datepicker td span, -.ui-datepicker td a { - display: block; - padding: .2em; - text-align: right; - text-decoration: none; -} -.ui-datepicker .ui-datepicker-buttonpane { - background-image: none; - margin: .7em 0 0 0; - padding: 0 .2em; - border-left: 0; - border-right: 0; - border-bottom: 0; -} -.ui-datepicker .ui-datepicker-buttonpane button { - float: right; - margin: .5em .2em .4em; - cursor: pointer; - padding: .2em .6em .3em .6em; - width: auto; - overflow: visible; -} -.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { - float: left; -} - -/* with multiple calendars */ -.ui-datepicker.ui-datepicker-multi { - width: auto; -} -.ui-datepicker-multi .ui-datepicker-group { - float: left; -} -.ui-datepicker-multi .ui-datepicker-group table { - width: 95%; - margin: 0 auto .4em; -} -.ui-datepicker-multi-2 .ui-datepicker-group { - width: 50%; -} -.ui-datepicker-multi-3 .ui-datepicker-group { - width: 33.3%; -} -.ui-datepicker-multi-4 .ui-datepicker-group { - width: 25%; -} -.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header, -.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { - border-left-width: 0; -} -.ui-datepicker-multi .ui-datepicker-buttonpane { - clear: left; -} -.ui-datepicker-row-break { - clear: both; - width: 100%; - font-size: 0; -} - -/* RTL support */ -.ui-datepicker-rtl { - direction: rtl; -} -.ui-datepicker-rtl .ui-datepicker-prev { - right: 2px; - left: auto; -} -.ui-datepicker-rtl .ui-datepicker-next { - left: 2px; - right: auto; -} -.ui-datepicker-rtl .ui-datepicker-prev:hover { - right: 1px; - left: auto; -} -.ui-datepicker-rtl .ui-datepicker-next:hover { - left: 1px; - right: auto; -} -.ui-datepicker-rtl .ui-datepicker-buttonpane { - clear: right; -} -.ui-datepicker-rtl .ui-datepicker-buttonpane button { - float: left; -} -.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current, -.ui-datepicker-rtl .ui-datepicker-group { - float: right; -} -.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header, -.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { - border-right-width: 0; - border-left-width: 1px; -} -.ui-dialog { - overflow: hidden; - position: absolute; - top: 0; - left: 0; - padding: .2em; - outline: 0; -} -.ui-dialog .ui-dialog-titlebar { - padding: .4em 1em; - position: relative; -} -.ui-dialog .ui-dialog-title { - float: left; - margin: .1em 0; - white-space: nowrap; - width: 90%; - overflow: hidden; - text-overflow: ellipsis; -} -.ui-dialog .ui-dialog-titlebar-close { - position: absolute; - right: .3em; - top: 50%; - width: 20px; - margin: -10px 0 0 0; - padding: 1px; - height: 20px; -} -.ui-dialog .ui-dialog-content { - position: relative; - border: 0; - padding: .5em 1em; - background: none; - overflow: auto; -} -.ui-dialog .ui-dialog-buttonpane { - text-align: left; - border-width: 1px 0 0 0; - background-image: none; - margin-top: .5em; - padding: .3em 1em .5em .4em; -} -.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { - float: right; -} -.ui-dialog .ui-dialog-buttonpane button { - margin: .5em .4em .5em 0; - cursor: pointer; -} -.ui-dialog .ui-resizable-se { - width: 12px; - height: 12px; - right: -5px; - bottom: -5px; - background-position: 16px 16px; -} -.ui-draggable .ui-dialog-titlebar { - cursor: move; -} -.ui-menu { - list-style: none; - padding: 0; - margin: 0; - display: block; - outline: none; -} -.ui-menu .ui-menu { - position: absolute; -} -.ui-menu .ui-menu-item { - position: relative; - margin: 0; - padding: 3px 1em 3px .4em; - cursor: pointer; - min-height: 0; /* support: IE7 */ - /* support: IE10, see #8844 */ - list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"); -} -.ui-menu .ui-menu-divider { - margin: 5px 0; - height: 0; - font-size: 0; - line-height: 0; - border-width: 1px 0 0 0; -} -.ui-menu .ui-state-focus, -.ui-menu .ui-state-active { - margin: -1px; -} - -/* icon support */ -.ui-menu-icons { - position: relative; -} -.ui-menu-icons .ui-menu-item { - padding-left: 2em; -} - -/* left-aligned */ -.ui-menu .ui-icon { - position: absolute; - top: 0; - bottom: 0; - left: .2em; - margin: auto 0; -} - -/* right-aligned */ -.ui-menu .ui-menu-icon { - left: auto; - right: 0; -} -.ui-progressbar { - height: 2em; - text-align: left; - overflow: hidden; -} -.ui-progressbar .ui-progressbar-value { - margin: -1px; - height: 100%; -} -.ui-progressbar .ui-progressbar-overlay { - background: url("data:image/gif;base64,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"); - height: 100%; - filter: alpha(opacity=25); /* support: IE8 */ - opacity: 0.25; -} -.ui-progressbar-indeterminate .ui-progressbar-value { - background-image: none; -} -.ui-selectmenu-menu { - padding: 0; - margin: 0; - position: absolute; - top: 0; - left: 0; - display: none; -} -.ui-selectmenu-menu .ui-menu { - overflow: auto; - /* Support: IE7 */ - overflow-x: hidden; - padding-bottom: 1px; -} -.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup { - font-size: 1em; - font-weight: bold; - line-height: 1.5; - padding: 2px 0.4em; - margin: 0.5em 0 0 0; - height: auto; - border: 0; -} -.ui-selectmenu-open { - display: block; -} -.ui-selectmenu-button { - display: inline-block; - overflow: hidden; - position: relative; - text-decoration: none; - cursor: pointer; -} -.ui-selectmenu-button span.ui-icon { - right: 0.5em; - left: auto; - margin-top: -8px; - position: absolute; - top: 50%; -} -.ui-selectmenu-button span.ui-selectmenu-text { - text-align: left; - padding: 0.4em 2.1em 0.4em 1em; - display: block; - line-height: 1.4; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} -.ui-slider { - position: relative; - text-align: left; -} -.ui-slider .ui-slider-handle { - position: absolute; - z-index: 2; - width: 1.2em; - height: 1.2em; - cursor: default; - -ms-touch-action: none; - touch-action: none; -} -.ui-slider .ui-slider-range { - position: absolute; - z-index: 1; - font-size: .7em; - display: block; - border: 0; - background-position: 0 0; -} - -/* support: IE8 - See #6727 */ -.ui-slider.ui-state-disabled .ui-slider-handle, -.ui-slider.ui-state-disabled .ui-slider-range { - filter: inherit; -} - -.ui-slider-horizontal { - height: .8em; -} -.ui-slider-horizontal .ui-slider-handle { - top: -.3em; - margin-left: -.6em; -} -.ui-slider-horizontal .ui-slider-range { - top: 0; - height: 100%; -} -.ui-slider-horizontal .ui-slider-range-min { - left: 0; -} -.ui-slider-horizontal .ui-slider-range-max { - right: 0; -} - -.ui-slider-vertical { - width: .8em; - height: 100px; -} -.ui-slider-vertical .ui-slider-handle { - left: -.3em; - margin-left: 0; - margin-bottom: -.6em; -} -.ui-slider-vertical .ui-slider-range { - left: 0; - width: 100%; -} -.ui-slider-vertical .ui-slider-range-min { - bottom: 0; -} -.ui-slider-vertical .ui-slider-range-max { - top: 0; -} -.ui-spinner { - position: relative; - display: inline-block; - overflow: hidden; - padding: 0; - vertical-align: middle; -} -.ui-spinner-input { - border: none; - background: none; - color: inherit; - padding: 0; - margin: .2em 0; - vertical-align: middle; - margin-left: .4em; - margin-right: 22px; -} -.ui-spinner-button { - width: 16px; - height: 50%; - font-size: .5em; - padding: 0; - margin: 0; - text-align: center; - position: absolute; - cursor: default; - display: block; - overflow: hidden; - right: 0; -} -/* more specificity required here to override default borders */ -.ui-spinner a.ui-spinner-button { - border-top: none; - border-bottom: none; - border-right: none; -} -/* vertically center icon */ -.ui-spinner .ui-icon { - position: absolute; - margin-top: -8px; - top: 50%; - left: 0; -} -.ui-spinner-up { - top: 0; -} -.ui-spinner-down { - bottom: 0; -} - -/* TR overrides */ -.ui-spinner .ui-icon-triangle-1-s { - /* need to fix icons sprite */ - background-position: -65px -16px; -} -.ui-tabs { - position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ - padding: .2em; -} -.ui-tabs .ui-tabs-nav { - margin: 0; - padding: .2em .2em 0; -} -.ui-tabs .ui-tabs-nav li { - list-style: none; - float: left; - position: relative; - top: 0; - margin: 1px .2em 0 0; - border-bottom-width: 0; - padding: 0; - white-space: nowrap; -} -.ui-tabs .ui-tabs-nav .ui-tabs-anchor { - float: left; - padding: .5em 1em; - text-decoration: none; -} -.ui-tabs .ui-tabs-nav li.ui-tabs-active { - margin-bottom: -1px; - padding-bottom: 1px; -} -.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor, -.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor, -.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor { - cursor: text; -} -.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor { - cursor: pointer; -} -.ui-tabs .ui-tabs-panel { - display: block; - border-width: 0; - padding: 1em 1.4em; - background: none; -} -.ui-tooltip { - padding: 8px; - position: absolute; - z-index: 9999; - max-width: 300px; - -webkit-box-shadow: 0 0 5px #aaa; - box-shadow: 0 0 5px #aaa; -} -body .ui-tooltip { - border-width: 2px; -} - -/* Component containers -----------------------------------*/ -.ui-widget { - font-family: Verdana,Arial,sans-serif; - font-size: 1.1em; -} -.ui-widget .ui-widget { - font-size: 1em; -} -.ui-widget input, -.ui-widget select, -.ui-widget textarea, -.ui-widget button { - font-family: Verdana,Arial,sans-serif; - font-size: 1em; -} -.ui-widget-content { - border: 1px solid #aaaaaa; - background: #ffffff url("images/ui-bg_flat_75_ffffff_40x100.png") 50% 50% repeat-x; - color: #222222; -} -.ui-widget-content a { - color: #222222; -} -.ui-widget-header { - border: 1px solid #aaaaaa; - background: #cccccc url("images/ui-bg_highlight-soft_75_cccccc_1x100.png") 50% 50% repeat-x; - color: #222222; - font-weight: bold; -} -.ui-widget-header a { - color: #222222; -} - -/* Interaction states -----------------------------------*/ -.ui-state-default, -.ui-widget-content .ui-state-default, -.ui-widget-header .ui-state-default { - border: 1px solid #d3d3d3; - background: #e6e6e6 url("images/ui-bg_glass_75_e6e6e6_1x400.png") 50% 50% repeat-x; - font-weight: normal; - color: #555555; -} -.ui-state-default a, -.ui-state-default a:link, -.ui-state-default a:visited { - color: #555555; - text-decoration: none; -} -.ui-state-hover, -.ui-widget-content .ui-state-hover, -.ui-widget-header .ui-state-hover, -.ui-state-focus, -.ui-widget-content .ui-state-focus, -.ui-widget-header .ui-state-focus { - border: 1px solid #999999; - background: #dadada url("images/ui-bg_glass_75_dadada_1x400.png") 50% 50% repeat-x; - font-weight: normal; - color: #212121; -} -.ui-state-hover a, -.ui-state-hover a:hover, -.ui-state-hover a:link, -.ui-state-hover a:visited, -.ui-state-focus a, -.ui-state-focus a:hover, -.ui-state-focus a:link, -.ui-state-focus a:visited { - color: #212121; - text-decoration: none; -} -.ui-state-active, -.ui-widget-content .ui-state-active, -.ui-widget-header .ui-state-active { - border: 1px solid #aaaaaa; - background: #ffffff url("images/ui-bg_glass_65_ffffff_1x400.png") 50% 50% repeat-x; - font-weight: normal; - color: #212121; -} -.ui-state-active a, -.ui-state-active a:link, -.ui-state-active a:visited { - color: #212121; - text-decoration: none; -} - -/* Interaction Cues -----------------------------------*/ -.ui-state-highlight, -.ui-widget-content .ui-state-highlight, -.ui-widget-header .ui-state-highlight { - border: 1px solid #fcefa1; - background: #fbf9ee url("images/ui-bg_glass_55_fbf9ee_1x400.png") 50% 50% repeat-x; - color: #363636; -} -.ui-state-highlight a, -.ui-widget-content .ui-state-highlight a, -.ui-widget-header .ui-state-highlight a { - color: #363636; -} -.ui-state-error, -.ui-widget-content .ui-state-error, -.ui-widget-header .ui-state-error { - border: 1px solid #cd0a0a; - background: #fef1ec url("images/ui-bg_glass_95_fef1ec_1x400.png") 50% 50% repeat-x; - color: #cd0a0a; -} -.ui-state-error a, -.ui-widget-content .ui-state-error a, -.ui-widget-header .ui-state-error a { - color: #cd0a0a; -} -.ui-state-error-text, -.ui-widget-content .ui-state-error-text, -.ui-widget-header .ui-state-error-text { - color: #cd0a0a; -} -.ui-priority-primary, -.ui-widget-content .ui-priority-primary, -.ui-widget-header .ui-priority-primary { - font-weight: bold; -} -.ui-priority-secondary, -.ui-widget-content .ui-priority-secondary, -.ui-widget-header .ui-priority-secondary { - opacity: .7; - filter:Alpha(Opacity=70); /* support: IE8 */ - font-weight: normal; -} -.ui-state-disabled, -.ui-widget-content .ui-state-disabled, -.ui-widget-header .ui-state-disabled { - opacity: .35; - filter:Alpha(Opacity=35); /* support: IE8 */ - background-image: none; -} -.ui-state-disabled .ui-icon { - filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */ -} - -/* Icons -----------------------------------*/ - -/* states and images */ -.ui-icon { - width: 16px; - height: 16px; -} -.ui-icon, -.ui-widget-content .ui-icon { - background-image: url("images/ui-icons_222222_256x240.png"); -} -.ui-widget-header .ui-icon { - background-image: url("images/ui-icons_222222_256x240.png"); -} -.ui-state-default .ui-icon { - background-image: url("images/ui-icons_888888_256x240.png"); -} -.ui-state-hover .ui-icon, -.ui-state-focus .ui-icon { - background-image: url("images/ui-icons_454545_256x240.png"); -} -.ui-state-active .ui-icon { - background-image: url("images/ui-icons_454545_256x240.png"); -} -.ui-state-highlight .ui-icon { - background-image: url("images/ui-icons_2e83ff_256x240.png"); -} -.ui-state-error .ui-icon, -.ui-state-error-text .ui-icon { - background-image: url("images/ui-icons_cd0a0a_256x240.png"); -} - -/* positioning */ -.ui-icon-blank { background-position: 16px 16px; } -.ui-icon-carat-1-n { background-position: 0 0; } -.ui-icon-carat-1-ne { background-position: -16px 0; } -.ui-icon-carat-1-e { background-position: -32px 0; } -.ui-icon-carat-1-se { background-position: -48px 0; } -.ui-icon-carat-1-s { background-position: -64px 0; } -.ui-icon-carat-1-sw { background-position: -80px 0; } -.ui-icon-carat-1-w { background-position: -96px 0; } -.ui-icon-carat-1-nw { background-position: -112px 0; } -.ui-icon-carat-2-n-s { background-position: -128px 0; } -.ui-icon-carat-2-e-w { background-position: -144px 0; } -.ui-icon-triangle-1-n { background-position: 0 -16px; } -.ui-icon-triangle-1-ne { background-position: -16px -16px; } -.ui-icon-triangle-1-e { background-position: -32px -16px; } -.ui-icon-triangle-1-se { background-position: -48px -16px; } -.ui-icon-triangle-1-s { background-position: -64px -16px; } -.ui-icon-triangle-1-sw { background-position: -80px -16px; } -.ui-icon-triangle-1-w { background-position: -96px -16px; } -.ui-icon-triangle-1-nw { background-position: -112px -16px; } -.ui-icon-triangle-2-n-s { background-position: -128px -16px; } -.ui-icon-triangle-2-e-w { background-position: -144px -16px; } -.ui-icon-arrow-1-n { background-position: 0 -32px; } -.ui-icon-arrow-1-ne { background-position: -16px -32px; } -.ui-icon-arrow-1-e { background-position: -32px -32px; } -.ui-icon-arrow-1-se { background-position: -48px -32px; } -.ui-icon-arrow-1-s { background-position: -64px -32px; } -.ui-icon-arrow-1-sw { background-position: -80px -32px; } -.ui-icon-arrow-1-w { background-position: -96px -32px; } -.ui-icon-arrow-1-nw { background-position: -112px -32px; } -.ui-icon-arrow-2-n-s { background-position: -128px -32px; } -.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } -.ui-icon-arrow-2-e-w { background-position: -160px -32px; } -.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } -.ui-icon-arrowstop-1-n { background-position: -192px -32px; } -.ui-icon-arrowstop-1-e { background-position: -208px -32px; } -.ui-icon-arrowstop-1-s { background-position: -224px -32px; } -.ui-icon-arrowstop-1-w { background-position: -240px -32px; } -.ui-icon-arrowthick-1-n { background-position: 0 -48px; } -.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } -.ui-icon-arrowthick-1-e { background-position: -32px -48px; } -.ui-icon-arrowthick-1-se { background-position: -48px -48px; } -.ui-icon-arrowthick-1-s { background-position: -64px -48px; } -.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } -.ui-icon-arrowthick-1-w { background-position: -96px -48px; } -.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } -.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } -.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } -.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } -.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } -.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } -.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } -.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } -.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } -.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } -.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } -.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } -.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } -.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } -.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } -.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } -.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } -.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } -.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } -.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } -.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } -.ui-icon-arrow-4 { background-position: 0 -80px; } -.ui-icon-arrow-4-diag { background-position: -16px -80px; } -.ui-icon-extlink { background-position: -32px -80px; } -.ui-icon-newwin { background-position: -48px -80px; } -.ui-icon-refresh { background-position: -64px -80px; } -.ui-icon-shuffle { background-position: -80px -80px; } -.ui-icon-transfer-e-w { background-position: -96px -80px; } -.ui-icon-transferthick-e-w { background-position: -112px -80px; } -.ui-icon-folder-collapsed { background-position: 0 -96px; } -.ui-icon-folder-open { background-position: -16px -96px; } -.ui-icon-document { background-position: -32px -96px; } -.ui-icon-document-b { background-position: -48px -96px; } -.ui-icon-note { background-position: -64px -96px; } -.ui-icon-mail-closed { background-position: -80px -96px; } -.ui-icon-mail-open { background-position: -96px -96px; } -.ui-icon-suitcase { background-position: -112px -96px; } -.ui-icon-comment { background-position: -128px -96px; } -.ui-icon-person { background-position: -144px -96px; } -.ui-icon-print { background-position: -160px -96px; } -.ui-icon-trash { background-position: -176px -96px; } -.ui-icon-locked { background-position: -192px -96px; } -.ui-icon-unlocked { background-position: -208px -96px; } -.ui-icon-bookmark { background-position: -224px -96px; } -.ui-icon-tag { background-position: -240px -96px; } -.ui-icon-home { background-position: 0 -112px; } -.ui-icon-flag { background-position: -16px -112px; } -.ui-icon-calendar { background-position: -32px -112px; } -.ui-icon-cart { background-position: -48px -112px; } -.ui-icon-pencil { background-position: -64px -112px; } -.ui-icon-clock { background-position: -80px -112px; } -.ui-icon-disk { background-position: -96px -112px; } -.ui-icon-calculator { background-position: -112px -112px; } -.ui-icon-zoomin { background-position: -128px -112px; } -.ui-icon-zoomout { background-position: -144px -112px; } -.ui-icon-search { background-position: -160px -112px; } -.ui-icon-wrench { background-position: -176px -112px; } -.ui-icon-gear { background-position: -192px -112px; } -.ui-icon-heart { background-position: -208px -112px; } -.ui-icon-star { background-position: -224px -112px; } -.ui-icon-link { background-position: -240px -112px; } -.ui-icon-cancel { background-position: 0 -128px; } -.ui-icon-plus { background-position: -16px -128px; } -.ui-icon-plusthick { background-position: -32px -128px; } -.ui-icon-minus { background-position: -48px -128px; } -.ui-icon-minusthick { background-position: -64px -128px; } -.ui-icon-close { background-position: -80px -128px; } -.ui-icon-closethick { background-position: -96px -128px; } -.ui-icon-key { background-position: -112px -128px; } -.ui-icon-lightbulb { background-position: -128px -128px; } -.ui-icon-scissors { background-position: -144px -128px; } -.ui-icon-clipboard { background-position: -160px -128px; } -.ui-icon-copy { background-position: -176px -128px; } -.ui-icon-contact { background-position: -192px -128px; } -.ui-icon-image { background-position: -208px -128px; } -.ui-icon-video { background-position: -224px -128px; } -.ui-icon-script { background-position: -240px -128px; } -.ui-icon-alert { background-position: 0 -144px; } -.ui-icon-info { background-position: -16px -144px; } -.ui-icon-notice { background-position: -32px -144px; } -.ui-icon-help { background-position: -48px -144px; } -.ui-icon-check { background-position: -64px -144px; } -.ui-icon-bullet { background-position: -80px -144px; } -.ui-icon-radio-on { background-position: -96px -144px; } -.ui-icon-radio-off { background-position: -112px -144px; } -.ui-icon-pin-w { background-position: -128px -144px; } -.ui-icon-pin-s { background-position: -144px -144px; } -.ui-icon-play { background-position: 0 -160px; } -.ui-icon-pause { background-position: -16px -160px; } -.ui-icon-seek-next { background-position: -32px -160px; } -.ui-icon-seek-prev { background-position: -48px -160px; } -.ui-icon-seek-end { background-position: -64px -160px; } -.ui-icon-seek-start { background-position: -80px -160px; } -/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ -.ui-icon-seek-first { background-position: -80px -160px; } -.ui-icon-stop { background-position: -96px -160px; } -.ui-icon-eject { background-position: -112px -160px; } -.ui-icon-volume-off { background-position: -128px -160px; } -.ui-icon-volume-on { background-position: -144px -160px; } -.ui-icon-power { background-position: 0 -176px; } -.ui-icon-signal-diag { background-position: -16px -176px; } -.ui-icon-signal { background-position: -32px -176px; } -.ui-icon-battery-0 { background-position: -48px -176px; } -.ui-icon-battery-1 { background-position: -64px -176px; } -.ui-icon-battery-2 { background-position: -80px -176px; } -.ui-icon-battery-3 { background-position: -96px -176px; } -.ui-icon-circle-plus { background-position: 0 -192px; } -.ui-icon-circle-minus { background-position: -16px -192px; } -.ui-icon-circle-close { background-position: -32px -192px; } -.ui-icon-circle-triangle-e { background-position: -48px -192px; } -.ui-icon-circle-triangle-s { background-position: -64px -192px; } -.ui-icon-circle-triangle-w { background-position: -80px -192px; } -.ui-icon-circle-triangle-n { background-position: -96px -192px; } -.ui-icon-circle-arrow-e { background-position: -112px -192px; } -.ui-icon-circle-arrow-s { background-position: -128px -192px; } -.ui-icon-circle-arrow-w { background-position: -144px -192px; } -.ui-icon-circle-arrow-n { background-position: -160px -192px; } -.ui-icon-circle-zoomin { background-position: -176px -192px; } -.ui-icon-circle-zoomout { background-position: -192px -192px; } -.ui-icon-circle-check { background-position: -208px -192px; } -.ui-icon-circlesmall-plus { background-position: 0 -208px; } -.ui-icon-circlesmall-minus { background-position: -16px -208px; } -.ui-icon-circlesmall-close { background-position: -32px -208px; } -.ui-icon-squaresmall-plus { background-position: -48px -208px; } -.ui-icon-squaresmall-minus { background-position: -64px -208px; } -.ui-icon-squaresmall-close { background-position: -80px -208px; } -.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } -.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } -.ui-icon-grip-solid-vertical { background-position: -32px -224px; } -.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } -.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } -.ui-icon-grip-diagonal-se { background-position: -80px -224px; } - - -/* Misc visuals -----------------------------------*/ - -/* Corner radius */ -.ui-corner-all, -.ui-corner-top, -.ui-corner-left, -.ui-corner-tl { - border-top-left-radius: 4px; -} -.ui-corner-all, -.ui-corner-top, -.ui-corner-right, -.ui-corner-tr { - border-top-right-radius: 4px; -} -.ui-corner-all, -.ui-corner-bottom, -.ui-corner-left, -.ui-corner-bl { - border-bottom-left-radius: 4px; -} -.ui-corner-all, -.ui-corner-bottom, -.ui-corner-right, -.ui-corner-br { - border-bottom-right-radius: 4px; -} - -/* Overlays */ -.ui-widget-overlay { - background: #aaaaaa url("images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x; - opacity: .3; - filter: Alpha(Opacity=30); /* support: IE8 */ -} -.ui-widget-shadow { - margin: -8px 0 0 -8px; - padding: 8px; - background: #aaaaaa url("images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x; - opacity: .3; - filter: Alpha(Opacity=30); /* support: IE8 */ - border-radius: 8px; -} diff --git a/css/smoothness/jquery-ui-1.11.3.custom.min.css b/css/smoothness/jquery-ui-1.11.3.custom.min.css deleted file mode 100644 index 208ac779..00000000 --- a/css/smoothness/jquery-ui-1.11.3.custom.min.css +++ /dev/null @@ -1,7 +0,0 @@ -/*! jQuery UI - v1.11.3 - 2015-02-27 -* http://jqueryui.com -* Includes: core.css, draggable.css, resizable.css, selectable.css, sortable.css, accordion.css, autocomplete.css, button.css, datepicker.css, dialog.css, menu.css, progressbar.css, selectmenu.css, slider.css, spinner.css, tabs.css, tooltip.css, theme.css -* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana%2CArial%2Csans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=highlight_soft&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=flat&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=glass&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=glass&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=glass&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=glass&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px -* Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */ - -.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-draggable-handle{-ms-touch-action:none;touch-action:none}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:0.1px;display:block;-ms-touch-action:none;touch-action:none}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-selectable{-ms-touch-action:none;touch-action:none}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted black}.ui-sortable-handle{-ms-touch-action:none;touch-action:none}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin:2px 0 0 0;padding:.5em .5em .5em .7em;min-height:0;font-size:100%}.ui-accordion .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-icons .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-header .ui-accordion-header-icon{position:absolute;left:.5em;top:50%;margin-top:-8px}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-button{display:inline-block;position:relative;padding:0;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;overflow:visible}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:2.2em}button.ui-button-icon-only{width:2.4em}.ui-button-icons-only{width:3.4em}button.ui-button-icons-only{width:3.7em}.ui-button .ui-button-text{display:block;line-height:normal}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text{padding:.4em;text-indent:-9999999px}.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 1em .4em 2.1em}.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 2.1em .4em 1em}.ui-button-text-icons .ui-button-text{padding-left:2.1em;padding-right:2.1em}input.ui-button{padding:.4em 1em}.ui-button-icon-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-text-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon,.ui-button-icons-only .ui-icon{position:absolute;top:50%;margin-top:-8px}.ui-button-icon-only .ui-icon{left:50%;margin-left:-8px}.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary,.ui-button-icons-only .ui-button-icon-primary{left:.5em}.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em}.ui-buttonset{margin-right:7px}.ui-buttonset .ui-button{margin-left:0;margin-right:-.3em}input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:45%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:bold;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-dialog{overflow:hidden;position:absolute;top:0;left:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:20px;margin:-10px 0 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:none;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-se{width:12px;height:12px;right:-5px;bottom:-5px;background-position:16px 16px}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-menu{list-style:none;padding:0;margin:0;display:block;outline:none}.ui-menu .ui-menu{position:absolute}.ui-menu .ui-menu-item{position:relative;margin:0;padding:3px 1em 3px .4em;cursor:pointer;min-height:0;list-style-image:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7")}.ui-menu .ui-menu-divider{margin:5px 0;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-state-focus,.ui-menu .ui-state-active{margin:-1px}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item{padding-left:2em}.ui-menu .ui-icon{position:absolute;top:0;bottom:0;left:.2em;margin:auto 0}.ui-menu .ui-menu-icon{left:auto;right:0}.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-progressbar-overlay{background:url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");height:100%;filter:alpha(opacity=25);opacity:0.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none}.ui-selectmenu-menu{padding:0;margin:0;position:absolute;top:0;left:0;display:none}.ui-selectmenu-menu .ui-menu{overflow:auto;overflow-x:hidden;padding-bottom:1px}.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup{font-size:1em;font-weight:bold;line-height:1.5;padding:2px 0.4em;margin:0.5em 0 0 0;height:auto;border:0}.ui-selectmenu-open{display:block}.ui-selectmenu-button{display:inline-block;overflow:hidden;position:relative;text-decoration:none;cursor:pointer}.ui-selectmenu-button span.ui-icon{right:0.5em;left:auto;margin-top:-8px;position:absolute;top:50%}.ui-selectmenu-button span.ui-selectmenu-text{text-align:left;padding:0.4em 2.1em 0.4em 1em;display:block;line-height:1.4;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default;-ms-touch-action:none;touch-action:none}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:none;background:none;color:inherit;padding:0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:22px}.ui-spinner-button{width:16px;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top:none;border-bottom:none;border-right:none}.ui-spinner .ui-icon{position:absolute;margin-top:-8px;top:50%;left:0}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-spinner .ui-icon-triangle-1-s{background-position:-65px -16px}.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav .ui-tabs-anchor{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor{cursor:text}.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none}.ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px;-webkit-box-shadow:0 0 5px #aaa;box-shadow:0 0 5px #aaa}body .ui-tooltip{border-width:2px}.ui-widget{font-family:Verdana,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Verdana,Arial,sans-serif;font-size:1em}.ui-widget-content{border:1px solid #aaa;background:#fff url("images/ui-bg_flat_75_ffffff_40x100.png") 50% 50% repeat-x;color:#222}.ui-widget-content a{color:#222}.ui-widget-header{border:1px solid #aaa;background:#ccc url("images/ui-bg_highlight-soft_75_cccccc_1x100.png") 50% 50% repeat-x;color:#222;font-weight:bold}.ui-widget-header a{color:#222}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #d3d3d3;background:#e6e6e6 url("images/ui-bg_glass_75_e6e6e6_1x400.png") 50% 50% repeat-x;font-weight:normal;color:#555}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#555;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #999;background:#dadada url("images/ui-bg_glass_75_dadada_1x400.png") 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited,.ui-state-focus a,.ui-state-focus a:hover,.ui-state-focus a:link,.ui-state-focus a:visited{color:#212121;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #aaa;background:#fff url("images/ui-bg_glass_65_ffffff_1x400.png") 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#212121;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fcefa1;background:#fbf9ee url("images/ui-bg_glass_55_fbf9ee_1x400.png") 50% 50% repeat-x;color:#363636}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#fef1ec url("images/ui-bg_glass_95_fef1ec_1x400.png") 50% 50% repeat-x;color:#cd0a0a}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#cd0a0a}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#cd0a0a}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url("images/ui-icons_222222_256x240.png")}.ui-widget-header .ui-icon{background-image:url("images/ui-icons_222222_256x240.png")}.ui-state-default .ui-icon{background-image:url("images/ui-icons_888888_256x240.png")}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url("images/ui-icons_454545_256x240.png")}.ui-state-active .ui-icon{background-image:url("images/ui-icons_454545_256x240.png")}.ui-state-highlight .ui-icon{background-image:url("images/ui-icons_2e83ff_256x240.png")}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url("images/ui-icons_cd0a0a_256x240.png")}.ui-icon-blank{background-position:16px 16px}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:4px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:4px}.ui-widget-overlay{background:#aaa url("images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30)}.ui-widget-shadow{margin:-8px 0 0 -8px;padding:8px;background:#aaa url("images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30);border-radius:8px} \ No newline at end of file diff --git a/css/smoothness/jquery-ui.css b/css/smoothness/jquery-ui.css deleted file mode 100644 index 294452f1..00000000 --- a/css/smoothness/jquery-ui.css +++ /dev/null @@ -1,1311 +0,0 @@ -/*! jQuery UI - v1.12.1 - 2016-09-14 -* http://jqueryui.com -* Includes: core.css, accordion.css, autocomplete.css, menu.css, button.css, controlgroup.css, checkboxradio.css, datepicker.css, dialog.css, draggable.css, resizable.css, progressbar.css, selectable.css, selectmenu.css, slider.css, sortable.css, spinner.css, tabs.css, tooltip.css, theme.css -* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana%2CArial%2Csans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=highlight_soft&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=flat&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=glass&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=glass&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=glass&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=glass&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px -* Copyright jQuery Foundation and other contributors; Licensed MIT */ - -/* Layout helpers -----------------------------------*/ -.ui-helper-hidden { - display: none; -} -.ui-helper-hidden-accessible { - border: 0; - clip: rect(0 0 0 0); - height: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - width: 1px; -} -.ui-helper-reset { - margin: 0; - padding: 0; - border: 0; - outline: 0; - line-height: 1.3; - text-decoration: none; - font-size: 100%; - list-style: none; -} -.ui-helper-clearfix:before, -.ui-helper-clearfix:after { - content: ""; - display: table; - border-collapse: collapse; -} -.ui-helper-clearfix:after { - clear: both; -} -.ui-helper-zfix { - width: 100%; - height: 100%; - top: 0; - left: 0; - position: absolute; - opacity: 0; - filter:Alpha(Opacity=0); /* support: IE8 */ -} - -.ui-front { - z-index: 100; -} - - -/* Interaction Cues -----------------------------------*/ -.ui-state-disabled { - cursor: default !important; - pointer-events: none; -} - - -/* Icons -----------------------------------*/ -.ui-icon { - display: inline-block; - vertical-align: middle; - margin-top: -.25em; - position: relative; - text-indent: -99999px; - overflow: hidden; - background-repeat: no-repeat; -} - -.ui-widget-icon-block { - left: 50%; - margin-left: -8px; - display: block; -} - -/* Misc visuals -----------------------------------*/ - -/* Overlays */ -.ui-widget-overlay { - position: fixed; - top: 0; - left: 0; - width: 100%; - height: 100%; -} -.ui-accordion .ui-accordion-header { - display: block; - cursor: pointer; - position: relative; - margin: 2px 0 0 0; - padding: .5em .5em .5em .7em; - font-size: 100%; -} -.ui-accordion .ui-accordion-content { - padding: 1em 2.2em; - border-top: 0; - overflow: auto; -} -.ui-autocomplete { - position: absolute; - top: 0; - left: 0; - cursor: default; -} -.ui-menu { - list-style: none; - padding: 0; - margin: 0; - display: block; - outline: 0; -} -.ui-menu .ui-menu { - position: absolute; -} -.ui-menu .ui-menu-item { - margin: 0; - cursor: pointer; - /* support: IE10, see #8844 */ - list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"); -} -.ui-menu .ui-menu-item-wrapper { - position: relative; - padding: 3px 1em 3px .4em; -} -.ui-menu .ui-menu-divider { - margin: 5px 0; - height: 0; - font-size: 0; - line-height: 0; - border-width: 1px 0 0 0; -} -.ui-menu .ui-state-focus, -.ui-menu .ui-state-active { - margin: -1px; -} - -/* icon support */ -.ui-menu-icons { - position: relative; -} -.ui-menu-icons .ui-menu-item-wrapper { - padding-left: 2em; -} - -/* left-aligned */ -.ui-menu .ui-icon { - position: absolute; - top: 0; - bottom: 0; - left: .2em; - margin: auto 0; -} - -/* right-aligned */ -.ui-menu .ui-menu-icon { - left: auto; - right: 0; -} -.ui-button { - padding: .4em 1em; - display: inline-block; - position: relative; - line-height: normal; - margin-right: .1em; - cursor: pointer; - vertical-align: middle; - text-align: center; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - - /* Support: IE <= 11 */ - overflow: visible; -} - -.ui-button, -.ui-button:link, -.ui-button:visited, -.ui-button:hover, -.ui-button:active { - text-decoration: none; -} - -/* to make room for the icon, a width needs to be set here */ -.ui-button-icon-only { - width: 2em; - box-sizing: border-box; - text-indent: -9999px; - white-space: nowrap; -} - -/* no icon support for input elements */ -input.ui-button.ui-button-icon-only { - text-indent: 0; -} - -/* button icon element(s) */ -.ui-button-icon-only .ui-icon { - position: absolute; - top: 50%; - left: 50%; - margin-top: -8px; - margin-left: -8px; -} - -.ui-button.ui-icon-notext .ui-icon { - padding: 0; - width: 2.1em; - height: 2.1em; - text-indent: -9999px; - white-space: nowrap; - -} - -input.ui-button.ui-icon-notext .ui-icon { - width: auto; - height: auto; - text-indent: 0; - white-space: normal; - padding: .4em 1em; -} - -/* workarounds */ -/* Support: Firefox 5 - 40 */ -input.ui-button::-moz-focus-inner, -button.ui-button::-moz-focus-inner { - border: 0; - padding: 0; -} -.ui-controlgroup { - vertical-align: middle; - display: inline-block; -} -.ui-controlgroup > .ui-controlgroup-item { - float: left; - margin-left: 0; - margin-right: 0; -} -.ui-controlgroup > .ui-controlgroup-item:focus, -.ui-controlgroup > .ui-controlgroup-item.ui-visual-focus { - z-index: 9999; -} -.ui-controlgroup-vertical > .ui-controlgroup-item { - display: block; - float: none; - width: 100%; - margin-top: 0; - margin-bottom: 0; - text-align: left; -} -.ui-controlgroup-vertical .ui-controlgroup-item { - box-sizing: border-box; -} -.ui-controlgroup .ui-controlgroup-label { - padding: .4em 1em; -} -.ui-controlgroup .ui-controlgroup-label span { - font-size: 80%; -} -.ui-controlgroup-horizontal .ui-controlgroup-label + .ui-controlgroup-item { - border-left: none; -} -.ui-controlgroup-vertical .ui-controlgroup-label + .ui-controlgroup-item { - border-top: none; -} -.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content { - border-right: none; -} -.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content { - border-bottom: none; -} - -/* Spinner specific style fixes */ -.ui-controlgroup-vertical .ui-spinner-input { - - /* Support: IE8 only, Android < 4.4 only */ - width: 75%; - width: calc( 100% - 2.4em ); -} -.ui-controlgroup-vertical .ui-spinner .ui-spinner-up { - border-top-style: solid; -} - -.ui-checkboxradio-label .ui-icon-background { - box-shadow: inset 1px 1px 1px #ccc; - border-radius: .12em; - border: none; -} -.ui-checkboxradio-radio-label .ui-icon-background { - width: 16px; - height: 16px; - border-radius: 1em; - overflow: visible; - border: none; -} -.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon, -.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon { - background-image: none; - width: 8px; - height: 8px; - border-width: 4px; - border-style: solid; -} -.ui-checkboxradio-disabled { - pointer-events: none; -} -.ui-datepicker { - width: 17em; - padding: .2em .2em 0; - display: none; -} -.ui-datepicker .ui-datepicker-header { - position: relative; - padding: .2em 0; -} -.ui-datepicker .ui-datepicker-prev, -.ui-datepicker .ui-datepicker-next { - position: absolute; - top: 2px; - width: 1.8em; - height: 1.8em; -} -.ui-datepicker .ui-datepicker-prev-hover, -.ui-datepicker .ui-datepicker-next-hover { - top: 1px; -} -.ui-datepicker .ui-datepicker-prev { - left: 2px; -} -.ui-datepicker .ui-datepicker-next { - right: 2px; -} -.ui-datepicker .ui-datepicker-prev-hover { - left: 1px; -} -.ui-datepicker .ui-datepicker-next-hover { - right: 1px; -} -.ui-datepicker .ui-datepicker-prev span, -.ui-datepicker .ui-datepicker-next span { - display: block; - position: absolute; - left: 50%; - margin-left: -8px; - top: 50%; - margin-top: -8px; -} -.ui-datepicker .ui-datepicker-title { - margin: 0 2.3em; - line-height: 1.8em; - text-align: center; -} -.ui-datepicker .ui-datepicker-title select { - font-size: 1em; - margin: 1px 0; -} -.ui-datepicker select.ui-datepicker-month, -.ui-datepicker select.ui-datepicker-year { - width: 45%; -} -.ui-datepicker table { - width: 100%; - font-size: .9em; - border-collapse: collapse; - margin: 0 0 .4em; -} -.ui-datepicker th { - padding: .7em .3em; - text-align: center; - font-weight: bold; - border: 0; -} -.ui-datepicker td { - border: 0; - padding: 1px; -} -.ui-datepicker td span, -.ui-datepicker td a { - display: block; - padding: .2em; - text-align: right; - text-decoration: none; -} -.ui-datepicker .ui-datepicker-buttonpane { - background-image: none; - margin: .7em 0 0 0; - padding: 0 .2em; - border-left: 0; - border-right: 0; - border-bottom: 0; -} -.ui-datepicker .ui-datepicker-buttonpane button { - float: right; - margin: .5em .2em .4em; - cursor: pointer; - padding: .2em .6em .3em .6em; - width: auto; - overflow: visible; -} -.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { - float: left; -} - -/* with multiple calendars */ -.ui-datepicker.ui-datepicker-multi { - width: auto; -} -.ui-datepicker-multi .ui-datepicker-group { - float: left; -} -.ui-datepicker-multi .ui-datepicker-group table { - width: 95%; - margin: 0 auto .4em; -} -.ui-datepicker-multi-2 .ui-datepicker-group { - width: 50%; -} -.ui-datepicker-multi-3 .ui-datepicker-group { - width: 33.3%; -} -.ui-datepicker-multi-4 .ui-datepicker-group { - width: 25%; -} -.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header, -.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { - border-left-width: 0; -} -.ui-datepicker-multi .ui-datepicker-buttonpane { - clear: left; -} -.ui-datepicker-row-break { - clear: both; - width: 100%; - font-size: 0; -} - -/* RTL support */ -.ui-datepicker-rtl { - direction: rtl; -} -.ui-datepicker-rtl .ui-datepicker-prev { - right: 2px; - left: auto; -} -.ui-datepicker-rtl .ui-datepicker-next { - left: 2px; - right: auto; -} -.ui-datepicker-rtl .ui-datepicker-prev:hover { - right: 1px; - left: auto; -} -.ui-datepicker-rtl .ui-datepicker-next:hover { - left: 1px; - right: auto; -} -.ui-datepicker-rtl .ui-datepicker-buttonpane { - clear: right; -} -.ui-datepicker-rtl .ui-datepicker-buttonpane button { - float: left; -} -.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current, -.ui-datepicker-rtl .ui-datepicker-group { - float: right; -} -.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header, -.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { - border-right-width: 0; - border-left-width: 1px; -} - -/* Icons */ -.ui-datepicker .ui-icon { - display: block; - text-indent: -99999px; - overflow: hidden; - background-repeat: no-repeat; - left: .5em; - top: .3em; -} -.ui-dialog { - position: absolute; - top: 0; - left: 0; - padding: .2em; - outline: 0; -} -.ui-dialog .ui-dialog-titlebar { - padding: .4em 1em; - position: relative; -} -.ui-dialog .ui-dialog-title { - float: left; - margin: .1em 0; - white-space: nowrap; - width: 90%; - overflow: hidden; - text-overflow: ellipsis; -} -.ui-dialog .ui-dialog-titlebar-close { - position: absolute; - right: .3em; - top: 50%; - width: 20px; - margin: -10px 0 0 0; - padding: 1px; - height: 20px; -} -.ui-dialog .ui-dialog-content { - position: relative; - border: 0; - padding: .5em 1em; - background: none; - overflow: auto; -} -.ui-dialog .ui-dialog-buttonpane { - text-align: left; - border-width: 1px 0 0 0; - background-image: none; - margin-top: .5em; - padding: .3em 1em .5em .4em; -} -.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { - float: right; -} -.ui-dialog .ui-dialog-buttonpane button { - margin: .5em .4em .5em 0; - cursor: pointer; -} -.ui-dialog .ui-resizable-n { - height: 2px; - top: 0; -} -.ui-dialog .ui-resizable-e { - width: 2px; - right: 0; -} -.ui-dialog .ui-resizable-s { - height: 2px; - bottom: 0; -} -.ui-dialog .ui-resizable-w { - width: 2px; - left: 0; -} -.ui-dialog .ui-resizable-se, -.ui-dialog .ui-resizable-sw, -.ui-dialog .ui-resizable-ne, -.ui-dialog .ui-resizable-nw { - width: 7px; - height: 7px; -} -.ui-dialog .ui-resizable-se { - right: 0; - bottom: 0; -} -.ui-dialog .ui-resizable-sw { - left: 0; - bottom: 0; -} -.ui-dialog .ui-resizable-ne { - right: 0; - top: 0; -} -.ui-dialog .ui-resizable-nw { - left: 0; - top: 0; -} -.ui-draggable .ui-dialog-titlebar { - cursor: move; -} -.ui-draggable-handle { - -ms-touch-action: none; - touch-action: none; -} -.ui-resizable { - position: relative; -} -.ui-resizable-handle { - position: absolute; - font-size: 0.1px; - display: block; - -ms-touch-action: none; - touch-action: none; -} -.ui-resizable-disabled .ui-resizable-handle, -.ui-resizable-autohide .ui-resizable-handle { - display: none; -} -.ui-resizable-n { - cursor: n-resize; - height: 7px; - width: 100%; - top: -5px; - left: 0; -} -.ui-resizable-s { - cursor: s-resize; - height: 7px; - width: 100%; - bottom: -5px; - left: 0; -} -.ui-resizable-e { - cursor: e-resize; - width: 7px; - right: -5px; - top: 0; - height: 100%; -} -.ui-resizable-w { - cursor: w-resize; - width: 7px; - left: -5px; - top: 0; - height: 100%; -} -.ui-resizable-se { - cursor: se-resize; - width: 12px; - height: 12px; - right: 1px; - bottom: 1px; -} -.ui-resizable-sw { - cursor: sw-resize; - width: 9px; - height: 9px; - left: -5px; - bottom: -5px; -} -.ui-resizable-nw { - cursor: nw-resize; - width: 9px; - height: 9px; - left: -5px; - top: -5px; -} -.ui-resizable-ne { - cursor: ne-resize; - width: 9px; - height: 9px; - right: -5px; - top: -5px; -} -.ui-progressbar { - height: 2em; - text-align: left; - overflow: hidden; -} -.ui-progressbar .ui-progressbar-value { - margin: -1px; - height: 100%; -} -.ui-progressbar .ui-progressbar-overlay { - background: url("data:image/gif;base64,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"); - height: 100%; - filter: alpha(opacity=25); /* support: IE8 */ - opacity: 0.25; -} -.ui-progressbar-indeterminate .ui-progressbar-value { - background-image: none; -} -.ui-selectable { - -ms-touch-action: none; - touch-action: none; -} -.ui-selectable-helper { - position: absolute; - z-index: 100; - border: 1px dotted black; -} -.ui-selectmenu-menu { - padding: 0; - margin: 0; - position: absolute; - top: 0; - left: 0; - display: none; -} -.ui-selectmenu-menu .ui-menu { - overflow: auto; - overflow-x: hidden; - padding-bottom: 1px; -} -.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup { - font-size: 1em; - font-weight: bold; - line-height: 1.5; - padding: 2px 0.4em; - margin: 0.5em 0 0 0; - height: auto; - border: 0; -} -.ui-selectmenu-open { - display: block; -} -.ui-selectmenu-text { - display: block; - margin-right: 20px; - overflow: hidden; - text-overflow: ellipsis; -} -.ui-selectmenu-button.ui-button { - text-align: left; - white-space: nowrap; - width: 14em; -} -.ui-selectmenu-icon.ui-icon { - float: right; - margin-top: 0; -} -.ui-slider { - position: relative; - text-align: left; -} -.ui-slider .ui-slider-handle { - position: absolute; - z-index: 2; - width: 1.2em; - height: 1.2em; - cursor: default; - -ms-touch-action: none; - touch-action: none; -} -.ui-slider .ui-slider-range { - position: absolute; - z-index: 1; - font-size: .7em; - display: block; - border: 0; - background-position: 0 0; -} - -/* support: IE8 - See #6727 */ -.ui-slider.ui-state-disabled .ui-slider-handle, -.ui-slider.ui-state-disabled .ui-slider-range { - filter: inherit; -} - -.ui-slider-horizontal { - height: .8em; -} -.ui-slider-horizontal .ui-slider-handle { - top: -.3em; - margin-left: -.6em; -} -.ui-slider-horizontal .ui-slider-range { - top: 0; - height: 100%; -} -.ui-slider-horizontal .ui-slider-range-min { - left: 0; -} -.ui-slider-horizontal .ui-slider-range-max { - right: 0; -} - -.ui-slider-vertical { - width: .8em; - height: 100px; -} -.ui-slider-vertical .ui-slider-handle { - left: -.3em; - margin-left: 0; - margin-bottom: -.6em; -} -.ui-slider-vertical .ui-slider-range { - left: 0; - width: 100%; -} -.ui-slider-vertical .ui-slider-range-min { - bottom: 0; -} -.ui-slider-vertical .ui-slider-range-max { - top: 0; -} -.ui-sortable-handle { - -ms-touch-action: none; - touch-action: none; -} -.ui-spinner { - position: relative; - display: inline-block; - overflow: hidden; - padding: 0; - vertical-align: middle; -} -.ui-spinner-input { - border: none; - background: none; - color: inherit; - padding: .222em 0; - margin: .2em 0; - vertical-align: middle; - margin-left: .4em; - margin-right: 2em; -} -.ui-spinner-button { - width: 1.6em; - height: 50%; - font-size: .5em; - padding: 0; - margin: 0; - text-align: center; - position: absolute; - cursor: default; - display: block; - overflow: hidden; - right: 0; -} -/* more specificity required here to override default borders */ -.ui-spinner a.ui-spinner-button { - border-top-style: none; - border-bottom-style: none; - border-right-style: none; -} -.ui-spinner-up { - top: 0; -} -.ui-spinner-down { - bottom: 0; -} -.ui-tabs { - position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ - padding: .2em; -} -.ui-tabs .ui-tabs-nav { - margin: 0; - padding: .2em .2em 0; -} -.ui-tabs .ui-tabs-nav li { - list-style: none; - float: left; - position: relative; - top: 0; - margin: 1px .2em 0 0; - border-bottom-width: 0; - padding: 0; - white-space: nowrap; -} -.ui-tabs .ui-tabs-nav .ui-tabs-anchor { - float: left; - padding: .5em 1em; - text-decoration: none; -} -.ui-tabs .ui-tabs-nav li.ui-tabs-active { - margin-bottom: -1px; - padding-bottom: 1px; -} -.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor, -.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor, -.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor { - cursor: text; -} -.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor { - cursor: pointer; -} -.ui-tabs .ui-tabs-panel { - display: block; - border-width: 0; - padding: 1em 1.4em; - background: none; -} -.ui-tooltip { - padding: 8px; - position: absolute; - z-index: 9999; - max-width: 300px; -} -body .ui-tooltip { - border-width: 2px; -} -/* Component containers -----------------------------------*/ -.ui-widget { - font-family: Verdana,Arial,sans-serif; - font-size: 1.1em; -} -.ui-widget .ui-widget { - font-size: 1em; -} -.ui-widget input, -.ui-widget select, -.ui-widget textarea, -.ui-widget button { - font-family: Verdana,Arial,sans-serif; - font-size: 1em; -} -.ui-widget.ui-widget-content { - border: 1px solid #d3d3d3; -} -.ui-widget-content { - border: 1px solid #aaaaaa; - background: #ffffff; - color: #222222; -} -.ui-widget-content a { - color: #222222; -} -.ui-widget-header { - border: 1px solid #aaaaaa; - background: #cccccc url("images/ui-bg_highlight-soft_75_cccccc_1x100.png") 50% 50% repeat-x; - color: #222222; - font-weight: bold; -} -.ui-widget-header a { - color: #222222; -} - -/* Interaction states -----------------------------------*/ -.ui-state-default, -.ui-widget-content .ui-state-default, -.ui-widget-header .ui-state-default, -.ui-button, - -/* We use html here because we need a greater specificity to make sure disabled -works properly when clicked or hovered */ -html .ui-button.ui-state-disabled:hover, -html .ui-button.ui-state-disabled:active { - border: 1px solid #d3d3d3; - background: #e6e6e6 url("images/ui-bg_glass_75_e6e6e6_1x400.png") 50% 50% repeat-x; - font-weight: normal; - color: #555555; -} -.ui-state-default a, -.ui-state-default a:link, -.ui-state-default a:visited, -a.ui-button, -a:link.ui-button, -a:visited.ui-button, -.ui-button { - color: #555555; - text-decoration: none; -} -.ui-state-hover, -.ui-widget-content .ui-state-hover, -.ui-widget-header .ui-state-hover, -.ui-state-focus, -.ui-widget-content .ui-state-focus, -.ui-widget-header .ui-state-focus, -.ui-button:hover, -.ui-button:focus { - border: 1px solid #999999; - background: #dadada url("images/ui-bg_glass_75_dadada_1x400.png") 50% 50% repeat-x; - font-weight: normal; - color: #212121; -} -.ui-state-hover a, -.ui-state-hover a:hover, -.ui-state-hover a:link, -.ui-state-hover a:visited, -.ui-state-focus a, -.ui-state-focus a:hover, -.ui-state-focus a:link, -.ui-state-focus a:visited, -a.ui-button:hover, -a.ui-button:focus { - color: #212121; - text-decoration: none; -} - -.ui-visual-focus { - box-shadow: 0 0 3px 1px rgb(94, 158, 214); -} -.ui-state-active, -.ui-widget-content .ui-state-active, -.ui-widget-header .ui-state-active, -a.ui-button:active, -.ui-button:active, -.ui-button.ui-state-active:hover { - border: 1px solid #aaaaaa; - background: #ffffff url("images/ui-bg_glass_65_ffffff_1x400.png") 50% 50% repeat-x; - font-weight: normal; - color: #212121; -} -.ui-icon-background, -.ui-state-active .ui-icon-background { - border: #aaaaaa; - background-color: #212121; -} -.ui-state-active a, -.ui-state-active a:link, -.ui-state-active a:visited { - color: #212121; - text-decoration: none; -} - -/* Interaction Cues -----------------------------------*/ -.ui-state-highlight, -.ui-widget-content .ui-state-highlight, -.ui-widget-header .ui-state-highlight { - border: 1px solid #fcefa1; - background: #fbf9ee url("images/ui-bg_glass_55_fbf9ee_1x400.png") 50% 50% repeat-x; - color: #363636; -} -.ui-state-checked { - border: 1px solid #fcefa1; - background: #fbf9ee; -} -.ui-state-highlight a, -.ui-widget-content .ui-state-highlight a, -.ui-widget-header .ui-state-highlight a { - color: #363636; -} -.ui-state-error, -.ui-widget-content .ui-state-error, -.ui-widget-header .ui-state-error { - border: 1px solid #cd0a0a; - background: #fef1ec url("images/ui-bg_glass_95_fef1ec_1x400.png") 50% 50% repeat-x; - color: #cd0a0a; -} -.ui-state-error a, -.ui-widget-content .ui-state-error a, -.ui-widget-header .ui-state-error a { - color: #cd0a0a; -} -.ui-state-error-text, -.ui-widget-content .ui-state-error-text, -.ui-widget-header .ui-state-error-text { - color: #cd0a0a; -} -.ui-priority-primary, -.ui-widget-content .ui-priority-primary, -.ui-widget-header .ui-priority-primary { - font-weight: bold; -} -.ui-priority-secondary, -.ui-widget-content .ui-priority-secondary, -.ui-widget-header .ui-priority-secondary { - opacity: .7; - filter:Alpha(Opacity=70); /* support: IE8 */ - font-weight: normal; -} -.ui-state-disabled, -.ui-widget-content .ui-state-disabled, -.ui-widget-header .ui-state-disabled { - opacity: .35; - filter:Alpha(Opacity=35); /* support: IE8 */ - background-image: none; -} -.ui-state-disabled .ui-icon { - filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */ -} - -/* Icons -----------------------------------*/ - -/* states and images */ -.ui-icon { - width: 16px; - height: 16px; -} -.ui-icon, -.ui-widget-content .ui-icon { - background-image: url("images/ui-icons_222222_256x240.png"); -} -.ui-widget-header .ui-icon { - background-image: url("images/ui-icons_222222_256x240.png"); -} -.ui-state-hover .ui-icon, -.ui-state-focus .ui-icon, -.ui-button:hover .ui-icon, -.ui-button:focus .ui-icon { - background-image: url("images/ui-icons_454545_256x240.png"); -} -.ui-state-active .ui-icon, -.ui-button:active .ui-icon { - background-image: url("images/ui-icons_454545_256x240.png"); -} -.ui-state-highlight .ui-icon, -.ui-button .ui-state-highlight.ui-icon { - background-image: url("images/ui-icons_2e83ff_256x240.png"); -} -.ui-state-error .ui-icon, -.ui-state-error-text .ui-icon { - background-image: url("images/ui-icons_cd0a0a_256x240.png"); -} -.ui-button .ui-icon { - background-image: url("images/ui-icons_888888_256x240.png"); -} - -/* positioning */ -.ui-icon-blank { background-position: 16px 16px; } -.ui-icon-caret-1-n { background-position: 0 0; } -.ui-icon-caret-1-ne { background-position: -16px 0; } -.ui-icon-caret-1-e { background-position: -32px 0; } -.ui-icon-caret-1-se { background-position: -48px 0; } -.ui-icon-caret-1-s { background-position: -65px 0; } -.ui-icon-caret-1-sw { background-position: -80px 0; } -.ui-icon-caret-1-w { background-position: -96px 0; } -.ui-icon-caret-1-nw { background-position: -112px 0; } -.ui-icon-caret-2-n-s { background-position: -128px 0; } -.ui-icon-caret-2-e-w { background-position: -144px 0; } -.ui-icon-triangle-1-n { background-position: 0 -16px; } -.ui-icon-triangle-1-ne { background-position: -16px -16px; } -.ui-icon-triangle-1-e { background-position: -32px -16px; } -.ui-icon-triangle-1-se { background-position: -48px -16px; } -.ui-icon-triangle-1-s { background-position: -65px -16px; } -.ui-icon-triangle-1-sw { background-position: -80px -16px; } -.ui-icon-triangle-1-w { background-position: -96px -16px; } -.ui-icon-triangle-1-nw { background-position: -112px -16px; } -.ui-icon-triangle-2-n-s { background-position: -128px -16px; } -.ui-icon-triangle-2-e-w { background-position: -144px -16px; } -.ui-icon-arrow-1-n { background-position: 0 -32px; } -.ui-icon-arrow-1-ne { background-position: -16px -32px; } -.ui-icon-arrow-1-e { background-position: -32px -32px; } -.ui-icon-arrow-1-se { background-position: -48px -32px; } -.ui-icon-arrow-1-s { background-position: -65px -32px; } -.ui-icon-arrow-1-sw { background-position: -80px -32px; } -.ui-icon-arrow-1-w { background-position: -96px -32px; } -.ui-icon-arrow-1-nw { background-position: -112px -32px; } -.ui-icon-arrow-2-n-s { background-position: -128px -32px; } -.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } -.ui-icon-arrow-2-e-w { background-position: -160px -32px; } -.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } -.ui-icon-arrowstop-1-n { background-position: -192px -32px; } -.ui-icon-arrowstop-1-e { background-position: -208px -32px; } -.ui-icon-arrowstop-1-s { background-position: -224px -32px; } -.ui-icon-arrowstop-1-w { background-position: -240px -32px; } -.ui-icon-arrowthick-1-n { background-position: 1px -48px; } -.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } -.ui-icon-arrowthick-1-e { background-position: -32px -48px; } -.ui-icon-arrowthick-1-se { background-position: -48px -48px; } -.ui-icon-arrowthick-1-s { background-position: -64px -48px; } -.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } -.ui-icon-arrowthick-1-w { background-position: -96px -48px; } -.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } -.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } -.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } -.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } -.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } -.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } -.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } -.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } -.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } -.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } -.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } -.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } -.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } -.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } -.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } -.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } -.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } -.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } -.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } -.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } -.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } -.ui-icon-arrow-4 { background-position: 0 -80px; } -.ui-icon-arrow-4-diag { background-position: -16px -80px; } -.ui-icon-extlink { background-position: -32px -80px; } -.ui-icon-newwin { background-position: -48px -80px; } -.ui-icon-refresh { background-position: -64px -80px; } -.ui-icon-shuffle { background-position: -80px -80px; } -.ui-icon-transfer-e-w { background-position: -96px -80px; } -.ui-icon-transferthick-e-w { background-position: -112px -80px; } -.ui-icon-folder-collapsed { background-position: 0 -96px; } -.ui-icon-folder-open { background-position: -16px -96px; } -.ui-icon-document { background-position: -32px -96px; } -.ui-icon-document-b { background-position: -48px -96px; } -.ui-icon-note { background-position: -64px -96px; } -.ui-icon-mail-closed { background-position: -80px -96px; } -.ui-icon-mail-open { background-position: -96px -96px; } -.ui-icon-suitcase { background-position: -112px -96px; } -.ui-icon-comment { background-position: -128px -96px; } -.ui-icon-person { background-position: -144px -96px; } -.ui-icon-print { background-position: -160px -96px; } -.ui-icon-trash { background-position: -176px -96px; } -.ui-icon-locked { background-position: -192px -96px; } -.ui-icon-unlocked { background-position: -208px -96px; } -.ui-icon-bookmark { background-position: -224px -96px; } -.ui-icon-tag { background-position: -240px -96px; } -.ui-icon-home { background-position: 0 -112px; } -.ui-icon-flag { background-position: -16px -112px; } -.ui-icon-calendar { background-position: -32px -112px; } -.ui-icon-cart { background-position: -48px -112px; } -.ui-icon-pencil { background-position: -64px -112px; } -.ui-icon-clock { background-position: -80px -112px; } -.ui-icon-disk { background-position: -96px -112px; } -.ui-icon-calculator { background-position: -112px -112px; } -.ui-icon-zoomin { background-position: -128px -112px; } -.ui-icon-zoomout { background-position: -144px -112px; } -.ui-icon-search { background-position: -160px -112px; } -.ui-icon-wrench { background-position: -176px -112px; } -.ui-icon-gear { background-position: -192px -112px; } -.ui-icon-heart { background-position: -208px -112px; } -.ui-icon-star { background-position: -224px -112px; } -.ui-icon-link { background-position: -240px -112px; } -.ui-icon-cancel { background-position: 0 -128px; } -.ui-icon-plus { background-position: -16px -128px; } -.ui-icon-plusthick { background-position: -32px -128px; } -.ui-icon-minus { background-position: -48px -128px; } -.ui-icon-minusthick { background-position: -64px -128px; } -.ui-icon-close { background-position: -80px -128px; } -.ui-icon-closethick { background-position: -96px -128px; } -.ui-icon-key { background-position: -112px -128px; } -.ui-icon-lightbulb { background-position: -128px -128px; } -.ui-icon-scissors { background-position: -144px -128px; } -.ui-icon-clipboard { background-position: -160px -128px; } -.ui-icon-copy { background-position: -176px -128px; } -.ui-icon-contact { background-position: -192px -128px; } -.ui-icon-image { background-position: -208px -128px; } -.ui-icon-video { background-position: -224px -128px; } -.ui-icon-script { background-position: -240px -128px; } -.ui-icon-alert { background-position: 0 -144px; } -.ui-icon-info { background-position: -16px -144px; } -.ui-icon-notice { background-position: -32px -144px; } -.ui-icon-help { background-position: -48px -144px; } -.ui-icon-check { background-position: -64px -144px; } -.ui-icon-bullet { background-position: -80px -144px; } -.ui-icon-radio-on { background-position: -96px -144px; } -.ui-icon-radio-off { background-position: -112px -144px; } -.ui-icon-pin-w { background-position: -128px -144px; } -.ui-icon-pin-s { background-position: -144px -144px; } -.ui-icon-play { background-position: 0 -160px; } -.ui-icon-pause { background-position: -16px -160px; } -.ui-icon-seek-next { background-position: -32px -160px; } -.ui-icon-seek-prev { background-position: -48px -160px; } -.ui-icon-seek-end { background-position: -64px -160px; } -.ui-icon-seek-start { background-position: -80px -160px; } -/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ -.ui-icon-seek-first { background-position: -80px -160px; } -.ui-icon-stop { background-position: -96px -160px; } -.ui-icon-eject { background-position: -112px -160px; } -.ui-icon-volume-off { background-position: -128px -160px; } -.ui-icon-volume-on { background-position: -144px -160px; } -.ui-icon-power { background-position: 0 -176px; } -.ui-icon-signal-diag { background-position: -16px -176px; } -.ui-icon-signal { background-position: -32px -176px; } -.ui-icon-battery-0 { background-position: -48px -176px; } -.ui-icon-battery-1 { background-position: -64px -176px; } -.ui-icon-battery-2 { background-position: -80px -176px; } -.ui-icon-battery-3 { background-position: -96px -176px; } -.ui-icon-circle-plus { background-position: 0 -192px; } -.ui-icon-circle-minus { background-position: -16px -192px; } -.ui-icon-circle-close { background-position: -32px -192px; } -.ui-icon-circle-triangle-e { background-position: -48px -192px; } -.ui-icon-circle-triangle-s { background-position: -64px -192px; } -.ui-icon-circle-triangle-w { background-position: -80px -192px; } -.ui-icon-circle-triangle-n { background-position: -96px -192px; } -.ui-icon-circle-arrow-e { background-position: -112px -192px; } -.ui-icon-circle-arrow-s { background-position: -128px -192px; } -.ui-icon-circle-arrow-w { background-position: -144px -192px; } -.ui-icon-circle-arrow-n { background-position: -160px -192px; } -.ui-icon-circle-zoomin { background-position: -176px -192px; } -.ui-icon-circle-zoomout { background-position: -192px -192px; } -.ui-icon-circle-check { background-position: -208px -192px; } -.ui-icon-circlesmall-plus { background-position: 0 -208px; } -.ui-icon-circlesmall-minus { background-position: -16px -208px; } -.ui-icon-circlesmall-close { background-position: -32px -208px; } -.ui-icon-squaresmall-plus { background-position: -48px -208px; } -.ui-icon-squaresmall-minus { background-position: -64px -208px; } -.ui-icon-squaresmall-close { background-position: -80px -208px; } -.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } -.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } -.ui-icon-grip-solid-vertical { background-position: -32px -224px; } -.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } -.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } -.ui-icon-grip-diagonal-se { background-position: -80px -224px; } - - -/* Misc visuals -----------------------------------*/ - -/* Corner radius */ -.ui-corner-all, -.ui-corner-top, -.ui-corner-left, -.ui-corner-tl { - border-top-left-radius: 4px; -} -.ui-corner-all, -.ui-corner-top, -.ui-corner-right, -.ui-corner-tr { - border-top-right-radius: 4px; -} -.ui-corner-all, -.ui-corner-bottom, -.ui-corner-left, -.ui-corner-bl { - border-bottom-left-radius: 4px; -} -.ui-corner-all, -.ui-corner-bottom, -.ui-corner-right, -.ui-corner-br { - border-bottom-right-radius: 4px; -} - -/* Overlays */ -.ui-widget-overlay { - background: #aaaaaa; - opacity: .3; - filter: Alpha(Opacity=30); /* support: IE8 */ -} -.ui-widget-shadow { - -webkit-box-shadow: -8px -8px 8px #aaaaaa; - box-shadow: -8px -8px 8px #aaaaaa; -} diff --git a/cypress.json b/cypress.json index b43b0166..31bed083 100644 --- a/cypress.json +++ b/cypress.json @@ -3,5 +3,5 @@ "baseExampleUrl": "http://localhost:8080/examples", "video": false, "viewportWidth": 1200, - "viewportHeight": 800 + "viewportHeight": 900 } \ No newline at end of file diff --git a/cypress/integration/example-auto-scroll-when-dragging.spec.js b/cypress/integration/example-auto-scroll-when-dragging.spec.js index d62c0f0b..f3e9def4 100644 --- a/cypress/integration/example-auto-scroll-when-dragging.spec.js +++ b/cypress/integration/example-auto-scroll-when-dragging.spec.js @@ -144,7 +144,7 @@ describe('Example - Auto scroll when dragging', { retries: 1 }, () => { }) }) - it('should MAX interval take effect when auto scroll: 600ms -> 200ms', { scrollBehavior: false }, function () { + it.skip('should MAX interval take effect when auto scroll: 600ms -> 200ms', { scrollBehavior: false }, function () { // By default the MAX interval to show next cell is 600ms. testInterval(0).then(defaultInterval => { @@ -167,6 +167,8 @@ describe('Example - Auto scroll when dragging', { retries: 1 }, () => { }) it('should Delay per Px take effect when auto scroll: 5ms/px -> 50ms/px', { scrollBehavior: false }, function () { + const allowedDiff = 0.5; + // By default the Delay per Px is 5ms/px. testInterval(scrollbarDimension).then(defaultInterval => { @@ -180,8 +182,8 @@ describe('Example - Auto scroll when dragging', { retries: 1 }, () => { testInterval(scrollbarDimension).then(newInterval => { // scrolling speed is quicker than before - expect(5 * newInterval.cell).to.be.lessThan(defaultInterval.cell); - expect(5 * newInterval.row).to.be.lessThan(defaultInterval.row); + expect((5 - allowedDiff) * newInterval.cell).to.be.lessThan(defaultInterval.cell); + expect((5 - allowedDiff) * newInterval.row).to.be.lessThan(defaultInterval.row); cy.get('#setDefaultOption').click(); cy.get('#accelerateInterval').should('have.value', '5'); diff --git a/cypress/integration/example-checkbox-header-row.spec.js b/cypress/integration/example-checkbox-header-row.spec.js index 00d95ca0..08f9d666 100644 --- a/cypress/integration/example-checkbox-header-row.spec.js +++ b/cypress/integration/example-checkbox-header-row.spec.js @@ -101,7 +101,7 @@ describe('Example - Checkbox Header Row', () => { }); it('should display "Showing page 1 of 6" text after changing Pagination to 25 items per page', () => { - cy.get('.ui-icon-lightbulb') + cy.get('.sgi-lightbulb') .click(); cy.get('.slick-pager-settings-expanded') @@ -125,7 +125,7 @@ describe('Example - Checkbox Header Row', () => { }); it('should go to next page and expect 1 row selected in that second page', () => { - cy.get('.ui-icon-seek-next') + cy.get('.sgi-chevron-right') .click(); cy.get('input[type="checkbox"]:checked').should('have.length', 1); // only 1x row in page 2 @@ -136,7 +136,7 @@ describe('Example - Checkbox Header Row', () => { const expectedRows = '1,3,5,7,9,11,13,15,17,19,21,23'; // go back to 1st page - cy.get('.ui-icon-seek-prev') + cy.get('.sgi-chevron-left') .click(); cy.get('#filter-checkbox-selectall-container input[type=checkbox]') @@ -153,7 +153,7 @@ describe('Example - Checkbox Header Row', () => { }); it('should go to next page and still expect all rows selected in current page', () => { - cy.get('.ui-icon-seek-next') + cy.get('.sgi-chevron-right') .click(); cy.get('.slick-cell-checkboxsel input:checked') @@ -161,7 +161,7 @@ describe('Example - Checkbox Header Row', () => { }); it('should go to last page and still expect all rows selected in current page', () => { - cy.get('.ui-icon-seek-end') + cy.get('.sgi-chevron-end') .click(); cy.get('.slick-cell-checkboxsel input:checked') @@ -198,7 +198,7 @@ describe('Example - Checkbox Header Row', () => { }); it('should go back to first page and still expect all rows selected in current page', () => { - cy.get('.ui-icon-seek-first') + cy.get('.sgi-chevron-start') .click(); cy.get('#filter-checkbox-selectall-container input[type=checkbox]') @@ -218,7 +218,7 @@ describe('Example - Checkbox Header Row', () => { }); it('should go back to last page then re-select the first row and expect "Select All" to be checked', () => { - cy.get('.ui-icon-seek-end') + cy.get('.sgi-chevron-end') .click(); cy.get('.slick-row:nth(0) .slick-cell:nth(0) input[type=checkbox]') diff --git a/cypress/integration/example-composite-editor-modal-dialog.spec.js b/cypress/integration/example-composite-editor-modal-dialog.spec.js index 345acfc1..9d08d2ae 100644 --- a/cypress/integration/example-composite-editor-modal-dialog.spec.js +++ b/cypress/integration/example-composite-editor-modal-dialog.spec.js @@ -29,7 +29,7 @@ describe('Example - Composite Editor Modal with Create/Edit/Mass-Update/Mass-Sel cy.get(`[style="top:${GRID_ROW_HEIGHT * 0}px"] > .slick-cell:nth(3)`).should('contain', '5 days'); cy.get(`[style="top:${GRID_ROW_HEIGHT * 0}px"] > .slick-cell:nth(5)`).should('contain', '01/01/2009'); cy.get(`[style="top:${GRID_ROW_HEIGHT * 0}px"] > .slick-cell:nth(6)`).should('contain', '01/05/2009'); - cy.get(`[style="top:${GRID_ROW_HEIGHT * 0}px"] > .slick-cell:nth(7)`).find('img'); + cy.get(`[style="top:${GRID_ROW_HEIGHT * 0}px"] > .slick-cell:nth(7)`).find('.sgi-check').should('exist'); }); it('should open the Edit Modal and expect same data to include "Task 0" and other specific properties', () => { @@ -116,7 +116,7 @@ describe('Example - Composite Editor Modal with Create/Edit/Mass-Update/Mass-Sel cy.get(`[style="top:${GRID_ROW_HEIGHT * 0}px"] > .slick-cell:nth(3)`).should('contain', '27 days'); cy.get(`[style="top:${GRID_ROW_HEIGHT * 0}px"] > .slick-cell:nth(5)`).should('contain', '01/01/2009'); cy.get(`[style="top:${GRID_ROW_HEIGHT * 0}px"] > .slick-cell:nth(6)`).should('contain', '01/05/2009'); - cy.get(`[style="top:${GRID_ROW_HEIGHT * 0}px"] > .slick-cell:nth(7)`).find('img').should('have.length', 0); + cy.get(`[style="top:${GRID_ROW_HEIGHT * 0}px"] > .slick-cell:nth(7)`).find('.sgi-check').should('have.length', 0); }); it('should open the Mass Update try to change "Duration" below 5 and expect it to become invalid', () => { @@ -165,27 +165,27 @@ describe('Example - Composite Editor Modal with Create/Edit/Mass-Update/Mass-Sel it('Should expect to see "Duration" of "27 days" and "Effort-Driven" to be enabled accross the entire grid', () => { cy.get(`[style="top:${GRID_ROW_HEIGHT * 0}px"] > .slick-cell:nth(1)`).should('contain', 'Task 0000'); cy.get(`[style="top:${GRID_ROW_HEIGHT * 0}px"] > .slick-cell:nth(3)`).should('contain', '27 days'); - cy.get(`[style="top:${GRID_ROW_HEIGHT * 0}px"] > .slick-cell:nth(7)`).find('img').should('have.length', 1); + cy.get(`[style="top:${GRID_ROW_HEIGHT * 0}px"] > .slick-cell:nth(7)`).find('.sgi-check').should('have.length', 1); cy.get(`[style="top:${GRID_ROW_HEIGHT * 1}px"] > .slick-cell:nth(1)`).should('contain', 'Task 1'); cy.get(`[style="top:${GRID_ROW_HEIGHT * 1}px"] > .slick-cell:nth(3)`).should('contain', '27 days'); - cy.get(`[style="top:${GRID_ROW_HEIGHT * 1}px"] > .slick-cell:nth(7)`).find('img').should('have.length', 1); + cy.get(`[style="top:${GRID_ROW_HEIGHT * 1}px"] > .slick-cell:nth(7)`).find('.sgi-check').should('have.length', 1); cy.get(`[style="top:${GRID_ROW_HEIGHT * 2}px"] > .slick-cell:nth(1)`).should('contain', 'Task 2'); cy.get(`[style="top:${GRID_ROW_HEIGHT * 2}px"] > .slick-cell:nth(3)`).should('contain', '27 days'); - cy.get(`[style="top:${GRID_ROW_HEIGHT * 2}px"] > .slick-cell:nth(7)`).find('img').should('have.length', 1); + cy.get(`[style="top:${GRID_ROW_HEIGHT * 2}px"] > .slick-cell:nth(7)`).find('.sgi-check').should('have.length', 1); cy.get(`[style="top:${GRID_ROW_HEIGHT * 3}px"] > .slick-cell:nth(1)`).should('contain', 'Task 3'); cy.get(`[style="top:${GRID_ROW_HEIGHT * 3}px"] > .slick-cell:nth(3)`).should('contain', '27 days'); - cy.get(`[style="top:${GRID_ROW_HEIGHT * 3}px"] > .slick-cell:nth(7)`).find('img').should('have.length', 1); + cy.get(`[style="top:${GRID_ROW_HEIGHT * 3}px"] > .slick-cell:nth(7)`).find('.sgi-check').should('have.length', 1); cy.get(`[style="top:${GRID_ROW_HEIGHT * 4}px"] > .slick-cell:nth(1)`).should('contain', 'Task 4'); cy.get(`[style="top:${GRID_ROW_HEIGHT * 4}px"] > .slick-cell:nth(3)`).should('contain', '27 days'); - cy.get(`[style="top:${GRID_ROW_HEIGHT * 4}px"] > .slick-cell:nth(7)`).find('img').should('have.length', 1); + cy.get(`[style="top:${GRID_ROW_HEIGHT * 4}px"] > .slick-cell:nth(7)`).find('.sgi-check').should('have.length', 1); cy.get(`[style="top:${GRID_ROW_HEIGHT * 5}px"] > .slick-cell:nth(1)`).should('contain', 'Task 5'); cy.get(`[style="top:${GRID_ROW_HEIGHT * 5}px"] > .slick-cell:nth(3)`).should('contain', '27 days'); - cy.get(`[style="top:${GRID_ROW_HEIGHT * 5}px"] > .slick-cell:nth(7)`).find('img').should('have.length', 1); + cy.get(`[style="top:${GRID_ROW_HEIGHT * 5}px"] > .slick-cell:nth(7)`).find('.sgi-check').should('have.length', 1); }); it('Should expect an Alert about missing row selection before executing Mass Selection', () => { @@ -227,29 +227,29 @@ describe('Example - Composite Editor Modal with Create/Edit/Mass-Update/Mass-Sel it('Should expect to see "Duration" of "27 days" and "Effort-Driven" to be enabled accross the entire grid', () => { cy.get(`[style="top:${GRID_ROW_HEIGHT * 0}px"] > .slick-cell:nth(1)`).should('contain', 'Task 0000'); cy.get(`[style="top:${GRID_ROW_HEIGHT * 0}px"] > .slick-cell:nth(3)`).should('contain', '27 days'); - cy.get(`[style="top:${GRID_ROW_HEIGHT * 0}px"] > .slick-cell:nth(7)`).find('img').should('have.length', 1); + cy.get(`[style="top:${GRID_ROW_HEIGHT * 0}px"] > .slick-cell:nth(7)`).find('.sgi-check').should('have.length', 1); cy.get(`[style="top:${GRID_ROW_HEIGHT * 1}px"] > .slick-cell:nth(1)`).should('contain', 'Task 1'); cy.get(`[style="top:${GRID_ROW_HEIGHT * 1}px"] > .slick-cell:nth(3)`).should('contain', '7 days'); cy.get(`[style="top:${GRID_ROW_HEIGHT * 1}px"] > .slick-cell:nth(5)`).should('contain', '02/02/2020'); - cy.get(`[style="top:${GRID_ROW_HEIGHT * 1}px"] > .slick-cell:nth(7)`).find('img').should('have.length', 1); + cy.get(`[style="top:${GRID_ROW_HEIGHT * 1}px"] > .slick-cell:nth(7)`).find('.sgi-check').should('have.length', 1); cy.get(`[style="top:${GRID_ROW_HEIGHT * 2}px"] > .slick-cell:nth(1)`).should('contain', 'Task 2'); cy.get(`[style="top:${GRID_ROW_HEIGHT * 2}px"] > .slick-cell:nth(3)`).should('contain', '7 days'); cy.get(`[style="top:${GRID_ROW_HEIGHT * 2}px"] > .slick-cell:nth(5)`).should('contain', '02/02/2020'); - cy.get(`[style="top:${GRID_ROW_HEIGHT * 2}px"] > .slick-cell:nth(7)`).find('img').should('have.length', 1); + cy.get(`[style="top:${GRID_ROW_HEIGHT * 2}px"] > .slick-cell:nth(7)`).find('.sgi-check').should('have.length', 1); cy.get(`[style="top:${GRID_ROW_HEIGHT * 3}px"] > .slick-cell:nth(1)`).should('contain', 'Task 3'); cy.get(`[style="top:${GRID_ROW_HEIGHT * 3}px"] > .slick-cell:nth(3)`).should('contain', '27 days'); - cy.get(`[style="top:${GRID_ROW_HEIGHT * 3}px"] > .slick-cell:nth(7)`).find('img').should('have.length', 1); + cy.get(`[style="top:${GRID_ROW_HEIGHT * 3}px"] > .slick-cell:nth(7)`).find('.sgi-check').should('have.length', 1); cy.get(`[style="top:${GRID_ROW_HEIGHT * 4}px"] > .slick-cell:nth(1)`).should('contain', 'Task 4'); cy.get(`[style="top:${GRID_ROW_HEIGHT * 4}px"] > .slick-cell:nth(3)`).should('contain', '27 days'); - cy.get(`[style="top:${GRID_ROW_HEIGHT * 4}px"] > .slick-cell:nth(7)`).find('img').should('have.length', 1); + cy.get(`[style="top:${GRID_ROW_HEIGHT * 4}px"] > .slick-cell:nth(7)`).find('.sgi-check').should('have.length', 1); cy.get(`[style="top:${GRID_ROW_HEIGHT * 5}px"] > .slick-cell:nth(1)`).should('contain', 'Task 5'); cy.get(`[style="top:${GRID_ROW_HEIGHT * 5}px"] > .slick-cell:nth(3)`).should('contain', '27 days'); - cy.get(`[style="top:${GRID_ROW_HEIGHT * 5}px"] > .slick-cell:nth(7)`).find('img').should('have.length', 1); + cy.get(`[style="top:${GRID_ROW_HEIGHT * 5}px"] > .slick-cell:nth(7)`).find('.sgi-check').should('have.length', 1); }); it('Should open a Create Modal window and click on Effort-Driven then expect 3 validation errors', () => { @@ -327,6 +327,6 @@ describe('Example - Composite Editor Modal with Create/Edit/Mass-Update/Mass-Sel }); cy.get(`[style="top:12500px"] > .slick-cell:nth(5)`).should('contain', '02/02/2020'); cy.get(`[style="top:12500px"] > .slick-cell:nth(6)`).should('contain', ''); - cy.get(`[style="top:12500px"] > .slick-cell:nth(7)`).find('img').should('have.length', 1); + cy.get(`[style="top:12500px"] > .slick-cell:nth(7)`).find('.sgi-check').should('have.length', 1); }); }); diff --git a/cypress/integration/example-draggable-grouping.spec.js b/cypress/integration/example-draggable-grouping.spec.js index 18061420..3f4d9125 100644 --- a/cypress/integration/example-draggable-grouping.spec.js +++ b/cypress/integration/example-draggable-grouping.spec.js @@ -29,12 +29,8 @@ describe('Example - Draggable Grouping', { retries: 1 }, () => { cy.get('.slick-column-groupable') .should('have.length', 6); - cy.get('.slick-column-groupable') - .each(($elm) => { - if ($elm[0]) { - expect($elm[0].style.background).to.eq('url("../images/column-grouping.png") center center no-repeat'); - } - }); + cy.get('.slick-column-groupable.sgi-drag-vertical') + .should('have.length', 6); }); describe('Grouping Tests', () => { diff --git a/cypress/integration/example-grouping-esm.spec.js b/cypress/integration/example-grouping-esm.spec.js new file mode 100644 index 00000000..ce190ca9 --- /dev/null +++ b/cypress/integration/example-grouping-esm.spec.js @@ -0,0 +1,82 @@ +/// +describe('Example - Grouping & Aggregators (ESM)', { retries: 1 }, () => { + // NOTE: everywhere there's a * 2 is because we have a top+bottom (frozen rows) containers even after Unfreeze Columns/Rows + const GRID_ROW_HEIGHT = 28; + const fullTitles = ['#', 'Title', 'Duration', '% Complete', 'Start', 'Finish', 'Cost', 'Effort-Driven']; + for (let i = 0; i < 30; i++) { + fullTitles.push(`Mock${i}`); + } + + it('should display Example title', () => { + cy.visit(`${Cypress.config('baseExampleUrl')}/example-grouping-esm.html`); + cy.get('h2').contains('Demonstrates'); + cy.get('h2 + ul > li').first().contains('Grouping & Aggregator features'); + }); + + it('should have exact column titles on 1st grid', () => { + cy.get('#myGrid') + .find('.slick-header-columns') + .children() + .each(($child, index) => expect($child.text()).to.eq(fullTitles[index])); + }); + + describe('Grouping Tests', () => { + it('should "Group by Duration & sort groups by value" then Collapse All and expect only group titles', () => { + cy.get('[data-test="add-50k-rows-btn"]').click(); + cy.get('[data-test="group-duration-sort-value-btn"]').click(); + cy.get('[data-test="collapse-all-btn"]').click(); + + cy.get(`[style="top:${GRID_ROW_HEIGHT * 0}px"] > .slick-cell:nth(0) .slick-group-toggle.collapsed`).should('have.length', 1); + cy.get(`[style="top:${GRID_ROW_HEIGHT * 0}px"] > .slick-cell:nth(0) .slick-group-title`).should('contain', 'Duration: 0'); + + cy.get(`[style="top:${GRID_ROW_HEIGHT * 1}px"] > .slick-cell:nth(0) .slick-group-title`).should('contain', 'Duration: 1'); + cy.get(`[style="top:${GRID_ROW_HEIGHT * 2}px"] > .slick-cell:nth(0) .slick-group-title`).should('contain', 'Duration: 2'); + cy.get(`[style="top:${GRID_ROW_HEIGHT * 3}px"] > .slick-cell:nth(0) .slick-group-title`).should('contain', 'Duration: 3'); + cy.get(`[style="top:${GRID_ROW_HEIGHT * 4}px"] > .slick-cell:nth(0) .slick-group-title`).should('contain', 'Duration: 4'); + }); + + it('should click on Expand All columns and expect 1st row as grouping title and 2nd row as a regular row', () => { + cy.get('[data-test="add-50k-rows-btn"]').click(); + cy.get('[data-test="group-duration-sort-value-btn"]').click(); + cy.get('[data-test="expand-all-btn"]').click(); + + cy.get(`[style="top:${GRID_ROW_HEIGHT * 0}px"] > .slick-cell:nth(0) .slick-group-toggle.expanded`).should('have.length', 1); + cy.get(`[style="top:${GRID_ROW_HEIGHT * 0}px"] > .slick-cell:nth(0) .slick-group-title`).should('contain', 'Duration: 0'); + + cy.get(`[style="top:${GRID_ROW_HEIGHT * 1}px"] > .slick-cell:nth(1)`).should('contain', 'Task'); + cy.get(`[style="top:${GRID_ROW_HEIGHT * 1}px"] > .slick-cell:nth(2)`).should('contain', '0'); + }); + + it('should "Group by Duration then Effort-Driven" and expect 1st row to be expanded, 2nd row to be collapsed and 3rd row to have group totals', () => { + cy.get('[data-test="group-duration-effort-btn"]').click(); + + cy.get(`[style="top:${GRID_ROW_HEIGHT * 0}px"].slick-group-level-0 > .slick-cell:nth(0) .slick-group-toggle.expanded`).should('have.length', 1); + cy.get(`[style="top:${GRID_ROW_HEIGHT * 0}px"].slick-group-level-0 > .slick-cell:nth(0) .slick-group-title`).should('contain', 'Duration: 0'); + + cy.get(`[style="top:${GRID_ROW_HEIGHT * 1}px"].slick-group-level-1 .slick-group-toggle.collapsed`).should('have.length', 1); + cy.get(`[style="top:${GRID_ROW_HEIGHT * 1}px"].slick-group-level-1 .slick-group-title`).should('contain', 'Effort-Driven: False'); + + cy.get(`[style="top:${GRID_ROW_HEIGHT * 2}px"].slick-group-level-1 .slick-group-toggle.collapsed`).should('have.length', 1); + cy.get(`[style="top:${GRID_ROW_HEIGHT * 2}px"].slick-group-level-1 .slick-group-title`).should('contain', 'Effort-Driven: True'); + + cy.get(`[style="top:${GRID_ROW_HEIGHT * 3}px"].slick-group-totals.slick-group-level-0 .slick-cell:nth(2)`).should('contain', 'total: 0'); + }); + + it('should "Group by Duration then Effort-Driven then Percent" and expect fist 2 rows to be expanded, 3rd row to be collapsed then 4th row to have group total', () => { + cy.get('[data-test="group-duration-effort-percent-btn"]').click(); + + cy.get(`[style="top:${GRID_ROW_HEIGHT * 0}px"].slick-group-level-0 > .slick-cell:nth(0) .slick-group-toggle.expanded`).should('have.length', 1); + cy.get(`[style="top:${GRID_ROW_HEIGHT * 0}px"].slick-group-level-0 > .slick-cell:nth(0) .slick-group-title`).should('contain', 'Duration: 0'); + + cy.get(`[style="top:${GRID_ROW_HEIGHT * 1}px"].slick-group-level-1 .slick-group-toggle.expanded`).should('have.length', 1); + cy.get(`[style="top:${GRID_ROW_HEIGHT * 1}px"].slick-group-level-1 .slick-group-title`).should('contain', 'Effort-Driven: False'); + + cy.get(`[style="top:${GRID_ROW_HEIGHT * 2}px"].slick-group-level-2 .slick-group-toggle.collapsed`).should('have.length', 1); + cy.get(`[style="top:${GRID_ROW_HEIGHT * 2}px"].slick-group-level-2 .slick-group-title`).contains(/^% Complete: [0-9]/); + + cy.get(`[style="top:${GRID_ROW_HEIGHT * 3}px"].slick-group-totals.slick-group-level-2 .slick-cell:nth(3)`).contains(/^avg: [0-9]\%$/); + cy.get(`[style="top:${GRID_ROW_HEIGHT * 3}px"].slick-group-totals.slick-group-level-2`) + .find('.slick-cell:nth(3)').contains('avg: '); + }); + }); +}); diff --git a/cypress/integration/example-grouping.spec.js b/cypress/integration/example-grouping.spec.js index fd85b7b3..a566ce66 100644 --- a/cypress/integration/example-grouping.spec.js +++ b/cypress/integration/example-grouping.spec.js @@ -20,12 +20,6 @@ describe('Example - Grouping & Aggregators', { retries: 1 }, () => { .each(($child, index) => expect($child.text()).to.eq(fullTitles[index])); }); - it('should show a custom text in the grid footer left portion', () => { - cy.get('#pager') - .find('.slick-pager-status') - .contains('Showing all 50 rows'); - }); - describe('Grouping Tests', () => { it('should "Group by Duration & sort groups by value" then Collapse All and expect only group titles', () => { cy.get('[data-test="add-50k-rows-btn"]').click(); diff --git a/cypress/integration/example-optimizing-updates.spec.js b/cypress/integration/example-optimizing-updates.spec.js index 1d22d275..2fdfb03e 100644 --- a/cypress/integration/example-optimizing-updates.spec.js +++ b/cypress/integration/example-optimizing-updates.spec.js @@ -12,7 +12,7 @@ describe('Example - Optimizing Updates', () => { it('should display Example Multi-grid Basic', () => { cy.visit(`${Cypress.config('baseExampleUrl')}/example-optimizing-updates.html`); - cy.get('.options-panel > b').should('contain', 'Description:'); + cy.get('h2').should('contain', 'Demonstrates:'); cy.contains('This page demonstrates how the bulk update operations '); }); @@ -24,27 +24,27 @@ describe('Example - Optimizing Updates', () => { }); it('should show initial rows', () => { - cy.get('#pager') + cy.get('#pager') .find('.slick-pager-status') - .should('contain', 'Showing all 300 rows'); + .should('contain', 'Showing all 300 rows'); }); it('should update the rows on inefficient click', () => { cy.visit(`${Cypress.config('baseExampleUrl')}/example-optimizing-updates.html`); - - cy.get('#myGrid') + + cy.get('#myGrid') .find('.slick-row') .each(($child, index) => { const message = $child.find('.cell-message').text(); const number = parseInt(message.substring("Log Entry ".length)); expect(number).to.be.lessThan(1000) }); - - cy.get('.options-panel button') + + cy.get('.options-panel button') .contains('inefficient') .click(); - - cy.get('#myGrid') + + cy.get('#myGrid') .find('.slick-row') .each(($child, index) => { const message = $child.find('.cell-message').text(); @@ -52,23 +52,23 @@ describe('Example - Optimizing Updates', () => { expect(number).to.be.greaterThan(90000) }); }); - + it('should update the rows on efficient click', () => { cy.visit(`${Cypress.config('baseExampleUrl')}/example-optimizing-updates.html`); - - cy.get('#myGrid') + + cy.get('#myGrid') .find('.slick-row') .each(($child, index) => { const message = $child.find('.cell-message').text(); const number = parseInt(message.substring("Log Entry ".length)); expect(number).to.be.lessThan(1000) }); - - cy.get('.options-panel button') + + cy.get('.options-panel button') .contains('efficient') .click(); - cy.get('#myGrid') + cy.get('#myGrid') .find('.slick-row') .each(($child, index) => { const message = $child.find('.cell-message').text(); @@ -76,19 +76,19 @@ describe('Example - Optimizing Updates', () => { expect(number).to.be.greaterThan(90000) }); }); - + it('should need less time on efficient than inefficient', () => { cy.visit(`${Cypress.config('baseExampleUrl')}/example-optimizing-updates.html`); cy.get('#duration').invoke('text', '').should('be.empty'); - cy.get('.options-panel button') + cy.get('.options-panel button') .contains('(inefficient)') .click(); cy.get('#duration').should('not.be.empty').then($duration => { let inEfficientTime = parseInt($duration.text()); - + cy.get('#duration').invoke('text', '').should('be.empty'); - cy.get('.options-panel button') + cy.get('.options-panel button') .contains('(efficient)') .click(); cy.get('#duration').should('not.be.empty').then($duration2 => { diff --git a/cypress/integration/example-plugin-contextmenu.spec.js b/cypress/integration/example-plugin-contextmenu.spec.js index a99eeded..a1e9c16a 100644 --- a/cypress/integration/example-plugin-contextmenu.spec.js +++ b/cypress/integration/example-plugin-contextmenu.spec.js @@ -33,11 +33,8 @@ describe('Example - Context Menu & Cell Menu', () => { .contains('Low'); cy.get('#myGrid') - .find('.slick-row .slick-cell:nth(6) img') - .invoke('attr', 'src') - .then(src => { - expect(src).to.contain('tick.png') - }); + .find('.slick-row .slick-cell:nth(6) .sgi-check') + .should('exist'); cy.get('#myGrid') .find('.slick-row .slick-cell:nth(7) .disabled') diff --git a/cypress/integration/example-plugin-custom-tooltip.spec.js b/cypress/integration/example-plugin-custom-tooltip.spec.js index 202bc931..23289f24 100644 --- a/cypress/integration/example-plugin-custom-tooltip.spec.js +++ b/cypress/integration/example-plugin-custom-tooltip.spec.js @@ -115,8 +115,7 @@ describe('Example - Custom Tooltip', () => { cy.get('.tooltip-2cols-row:nth(2)').find('div:nth(1)').find('.percent-complete-bar').should('exist'); cy.get('.tooltip-2cols-row:nth(3)').find('div:nth(0)').contains('Effort Driven:'); - cy.get('.tooltip-2cols-row:nth(3)').find('div:nth(1)') - .find('img').invoke('attr', 'src').then(src => expect(src).to.contain('tick.png')); + cy.get('.tooltip-2cols-row:nth(3)').find('div:nth(1)').find('.sgi-check').should('exist'); cy.get('@duration5-cell').trigger('mouseout'); }); diff --git a/cypress/integration/example-plugin-headerbuttons.spec.js b/cypress/integration/example-plugin-headerbuttons.spec.js index f23a383a..45603941 100644 --- a/cypress/integration/example-plugin-headerbuttons.spec.js +++ b/cypress/integration/example-plugin-headerbuttons.spec.js @@ -22,14 +22,14 @@ describe('Example - Header Button', () => { .each(($child, index) => expect($child.text()).to.eq(titles[index])); }); - it('should go over the 3rd column "C" and expect to see negative number in red after clicking on the blue header button', () => { + it('should go over the 3rd column "C" and expect to see negative number in red after clicking on the orange header button', () => { cy.get('.slick-header-columns') .children('.slick-header-column:nth(2)') .should('contain', 'C'); cy.get('.slick-header-columns') .children('.slick-header-column:nth(2)') - .find('.slick-header-button.icon-highlight-off') + .find('.slick-header-button.sgi-lightbulb.color-orange') .should('exist') .click(); @@ -57,7 +57,7 @@ describe('Example - Header Button', () => { }); }); - it('should go over the 5th column "E" and not find the blue header button', () => { + it('should go over the 5th column "E" and not find the orange header button', () => { cy.get('.slick-header-columns') .children('.slick-header-column:nth(4)') .should('contain', 'E'); @@ -69,7 +69,7 @@ describe('Example - Header Button', () => { .should('not.exist'); }); - it('should go over the last column "J" and expect to find the blue header button, however it should be usable and number should not display as red', () => { + it('should go over the last column "J" and expect to find the orange header button, however it should be unusable and number should not display as red', () => { cy.get('.slick-viewport-top.slick-viewport-left') .scrollTo('right') .wait(50); @@ -80,7 +80,7 @@ describe('Example - Header Button', () => { cy.get('.slick-header-columns') .children('.slick-header-column:nth(9)') - .find('.slick-header-button.icon-highlight-off') + .find('.slick-header-button.sgi-lightbulb.color-orange') .should('exist') .click(); @@ -139,7 +139,7 @@ describe('Example - Header Button', () => { done(); }); - // header buttons are displayed in inverse mode by default, + // header buttons are displayed in inverse mode by default, // so we need to start at the end cy.get('.slick-header-columns') .children('.slick-header-column:nth(0)') diff --git a/cypress/integration/example15-auto-resize.spec.js b/cypress/integration/example15-auto-resize.spec.js index 8b1795c0..d35b84f1 100644 --- a/cypress/integration/example15-auto-resize.spec.js +++ b/cypress/integration/example15-auto-resize.spec.js @@ -28,8 +28,10 @@ describe('Example 0070 - Grid State using Local Storage', () => { cy.get('#myGrid') .should($el => { - expect(parseInt(`${$el.width()}`, 10)).to.eq(800); - expect(parseInt(`${$el.height()}`, 10)).to.eq(600); + expect(parseInt(`${$el.width()}`, 10)).to.gte(797); + expect(parseInt(`${$el.width()}`, 10)).to.lte(802); + expect(parseInt(`${$el.height()}`, 10)).to.gte(598); + expect(parseInt(`${$el.height()}`, 10)).to.lte(602); }); }); diff --git a/cypress/integration/example3-editing.spec.js b/cypress/integration/example3-editing.spec.js index 5a862e58..d07c6f3d 100644 --- a/cypress/integration/example3-editing.spec.js +++ b/cypress/integration/example3-editing.spec.js @@ -2,7 +2,7 @@ describe('Example3 Editing', () => { const titles = ['Title', 'Description', 'Duration', '% Complete', 'Start', 'Finish', 'Effort Driven']; - const GRID_ROW_HEIGHT = 25; + const GRID_ROW_HEIGHT = 28; beforeEach(() => { // create a console.log spy for later use diff --git a/cypress/integration/example4-model-esm.spec.js b/cypress/integration/example4-model-esm.spec.js new file mode 100644 index 00000000..69c1112c --- /dev/null +++ b/cypress/integration/example4-model-esm.spec.js @@ -0,0 +1,121 @@ +/// + +describe('Example 4 - Model (ESM)', () => { + const titles = ['#', 'Title', 'Duration', '% Complete', 'Start', 'Finish', 'Effort Driven']; + + beforeEach(() => { + // create a console.log spy for later use + cy.window().then((win) => { + cy.spy(win.console, "log"); + }); + }); + + it('should display Example title', () => { + cy.visit(`${Cypress.config('baseExampleUrl')}/example4-model-esm.html`); + cy.get('h2').contains('Demonstrates'); + cy.get('h2 + ul > li').first().contains('a filtered Model (DataView) as a data source instead of a simple array'); + }); + + it('should have exact Column Titles in the grid', () => { + cy.get('#myGrid') + .find('.slick-header-columns') + .children() + .each(($child, index) => expect($child.text()).to.eq(titles[index])); + }); + + it('should display the text "Showing all 50000 rows" without Pagination', () => { + const expectedRows = ['Task 0', 'Task 1', 'Task 2', 'Task 3', 'Task 4']; + + cy.get('.slick-pager-status') + .contains('Showing all 50000 rows'); + + cy.get('#myGrid') + .find('.slick-row') + .each(($row, index) => { + if (index > expectedRows.length - 1) { + return; + } + cy.wrap($row).children('.slick-cell:nth(1)') + .first() + .should('contain', expectedRows[index]); + }); + }); + + it('Should display "Showing page 1 of 1000" text after changing Pagination to 50 items per page', () => { + cy.get('.sgi-lightbulb') + .click(); + + cy.get('.slick-pager-settings-expanded') + .should('be.visible'); + + cy.get('.slick-pager-settings-expanded') + .contains('50') + .click(); + + cy.get('.slick-pager-status') + .contains('Showing page 1 of 1000'); + + cy.window().then((win) => { + expect(win.console.log).to.have.callCount(2); + expect(win.console.log).to.be.calledWith('on Before Paging Info Changed - Previous Paging:: ', { pageSize: 0, pageNum: 0, totalRows: 50000, totalPages: 1 }); + expect(win.console.log).to.be.calledWith('on After Paging Info Changed - New Paging:: ', { pageSize: 50, pageNum: 0, totalRows: 50000, totalPages: 1000 }); + }); + }); + + it('Should display "Showing page 2 of 1000" text after clicking on next page', () => { + const expectedRows = ['Task 50', 'Task 51', 'Task 52', 'Task 53', 'Task 54']; + + cy.get('.sgi-chevron-start.sgi-state-disabled'); + cy.get('.sgi-chevron-left.sgi-state-disabled'); + + cy.get('.sgi-chevron-right') + .click(); + + cy.get('.slick-pager-status') + .contains('Showing page 2 of 1000'); + + cy.get('#myGrid') + .find('.slick-row') + .each(($row, index) => { + if (index > expectedRows.length - 1) { + return; + } + cy.wrap($row).children('.slick-cell:nth(1)') + .first() + .should('contain', expectedRows[index]); + }); + + cy.window().then((win) => { + expect(win.console.log).to.have.callCount(2); + expect(win.console.log).to.be.calledWith('on Before Paging Info Changed - Previous Paging:: ', { pageSize: 50, pageNum: 0, totalRows: 50000, totalPages: 1000 }); + expect(win.console.log).to.be.calledWith('on After Paging Info Changed - New Paging:: ', { pageSize: 50, pageNum: 1, totalRows: 50000, totalPages: 1000 }); + }); + }); + + it('Should display "Showing page 1000 of 1000" text after clicking on last page', () => { + const expectedRows = ['Task 49950', 'Task 49951', 'Task 49952', 'Task 49953', 'Task 49954']; + + cy.get('.sgi-chevron-end') + .click(); + + cy.get('.slick-pager-status') + .contains('Showing page 1000 of 1000'); + + cy.get('#myGrid') + .find('.slick-row') + .each(($row, index) => { + if (index > expectedRows.length - 1) { + return; + } + cy.wrap($row).children('.slick-cell:nth(1)') + .first() + .should('contain', expectedRows[index]); + }); + + cy.window().then((win) => { + expect(win.console.log).to.have.callCount(2); + expect(win.console.log).to.be.calledWith('on Before Paging Info Changed - Previous Paging:: ', { pageSize: 50, pageNum: 1, totalRows: 50000, totalPages: 1000 }); + expect(win.console.log).to.be.calledWith('on After Paging Info Changed - New Paging:: ', { pageSize: 50, pageNum: 999, totalRows: 50000, totalPages: 1000 }); + }); + }); +}); diff --git a/cypress/integration/example4-model.spec.js b/cypress/integration/example4-model.spec.js index 277abd9e..c01e6a83 100644 --- a/cypress/integration/example4-model.spec.js +++ b/cypress/integration/example4-model.spec.js @@ -42,7 +42,7 @@ describe('Example 4 - Model', () => { }); it('Should display "Showing page 1 of 1000" text after changing Pagination to 50 items per page', () => { - cy.get('.slick-icon-lightbulb') + cy.get('.sgi-lightbulb') .click(); cy.get('.slick-pager-settings-expanded') @@ -65,10 +65,10 @@ describe('Example 4 - Model', () => { it('Should display "Showing page 2 of 1000" text after clicking on next page', () => { const expectedRows = ['Task 50', 'Task 51', 'Task 52', 'Task 53', 'Task 54']; - cy.get('.slick-icon-seek-first.ui-state-disabled'); - cy.get('.slick-icon-seek-prev.ui-state-disabled'); + cy.get('.sgi-chevron-start.sgi-state-disabled'); + cy.get('.sgi-chevron-left.sgi-state-disabled'); - cy.get('.slick-icon-seek-next') + cy.get('.sgi-chevron-right') .click(); cy.get('.slick-pager-status') @@ -95,7 +95,7 @@ describe('Example 4 - Model', () => { it('Should display "Showing page 1000 of 1000" text after clicking on last page', () => { const expectedRows = ['Task 49950', 'Task 49951', 'Task 49952', 'Task 49953', 'Task 49954']; - cy.get('.slick-icon-seek-end') + cy.get('.sgi-chevron-end') .click(); cy.get('.slick-pager-status') diff --git a/dist/browser/controls/slick.columnmenu.js b/dist/browser/controls/slick.columnmenu.js new file mode 100644 index 00000000..8a85e43c --- /dev/null +++ b/dist/browser/controls/slick.columnmenu.js @@ -0,0 +1,143 @@ +"use strict"; +(() => { + // src/controls/slick.columnmenu.js + (function(window2) { + "use strict"; + function SlickColumnPicker(columns, grid, options) { + var _grid = grid, _options = options, _gridUid = grid && grid.getUID ? grid.getUID() : "", _columnTitleElm, _listElm, _menuElm, columnCheckboxes, onColumnsChanged = new Slick.Event(), _bindingEventService = new Slick.BindingEventService(), defaults = { + fadeSpeed: 250, + // the last 2 checkboxes titles + hideForceFitButton: !1, + hideSyncResizeButton: !1, + forceFitTitle: "Force fit columns", + syncResizeTitle: "Synchronous resize", + headerColumnValueExtractor: function(columnDef) { + return columnDef.name; + } + }; + function init(grid2) { + grid2.onHeaderContextMenu.subscribe(handleHeaderContextMenu), grid2.onColumnsReordered.subscribe(updateColumnOrder), _options = Slick.Utils.extend({}, defaults, options), _menuElm = document.createElement("div"), _menuElm.className = `slick-columnpicker ${_gridUid}`, _menuElm.style.display = "none", document.body.appendChild(_menuElm); + let buttonElm = document.createElement("button"); + buttonElm.type = "button", buttonElm.className = "close", buttonElm.dataset.dismiss = "slick-columnpicker", buttonElm.ariaLabel = "Close"; + let spanCloseElm = document.createElement("span"); + if (spanCloseElm.className = "close", spanCloseElm.ariaHidden = "true", spanCloseElm.innerHTML = "×", buttonElm.appendChild(spanCloseElm), _menuElm.appendChild(buttonElm), _options.columnPickerTitle || _options.columnPicker && _options.columnPicker.columnTitle) { + var columnTitle = _options.columnPickerTitle || _options.columnPicker.columnTitle; + _columnTitleElm = document.createElement("div"), _columnTitleElm.className = "slick-gridmenu-custom", _columnTitleElm.textContent = columnTitle, _menuElm.appendChild(_columnTitleElm); + } + _bindingEventService.bind(_menuElm, "click", updateColumn), _listElm = document.createElement("span"), _listElm.className = "slick-columnpicker-list", _bindingEventService.bind(document.body, "mousedown", handleBodyMouseDown), _bindingEventService.bind(document.body, "beforeunload", destroy); + } + function destroy() { + _grid.onHeaderContextMenu.unsubscribe(handleHeaderContextMenu), _grid.onColumnsReordered.unsubscribe(updateColumnOrder), _bindingEventService.unbindAll(), _listElm && _listElm.remove(), _menuElm && _menuElm.remove(); + } + function handleBodyMouseDown(e) { + (_menuElm !== e.target && !(_menuElm && _menuElm.contains(e.target)) || e.target.className === "close") && (_menuElm.setAttribute("aria-expanded", "false"), _menuElm.style.display = "none"); + } + function handleHeaderContextMenu(e) { + e.preventDefault(), Slick.Utils.emptyElement(_listElm), updateColumnOrder(), columnCheckboxes = []; + let columnId, columnLabel, excludeCssClass; + for (var i = 0; i < columns.length; i++) { + columnId = columns[i].id, excludeCssClass = columns[i].excludeFromColumnPicker ? "hidden" : ""; + let liElm = document.createElement("li"); + liElm.className = excludeCssClass, liElm.ariaLabel = columns[i] && columns[i].name; + let checkboxElm = document.createElement("input"); + checkboxElm.type = "checkbox", checkboxElm.id = `${_gridUid}colpicker-${columnId}`, checkboxElm.dataset.columnid = columns[i].id, liElm.appendChild(checkboxElm), columnCheckboxes.push(checkboxElm), _grid.getColumnIndex(columnId) != null && !columns[i].hidden && (checkboxElm.checked = !0), _options && _options.columnPicker && _options.columnPicker.headerColumnValueExtractor ? columnLabel = _options.columnPicker.headerColumnValueExtractor(columns[i], _options) : columnLabel = defaults.headerColumnValueExtractor(columns[i], _options); + let labelElm = document.createElement("label"); + labelElm.htmlFor = `${_gridUid}colpicker-${columnId}`, labelElm.innerHTML = columnLabel, liElm.appendChild(labelElm), _listElm.appendChild(liElm); + } + if (_options.columnPicker && (!_options.columnPicker.hideForceFitButton || !_options.columnPicker.hideSyncResizeButton) && _listElm.appendChild(document.createElement("hr")), !(_options.columnPicker && _options.columnPicker.hideForceFitButton)) { + let forceFitTitle = _options.columnPicker && _options.columnPicker.forceFitTitle || _options.forceFitTitle, liElm = document.createElement("li"); + liElm.ariaLabel = forceFitTitle, _listElm.appendChild(liElm); + let forceFitCheckboxElm = document.createElement("input"); + forceFitCheckboxElm.type = "checkbox", forceFitCheckboxElm.id = `${_gridUid}colpicker-forcefit`, forceFitCheckboxElm.dataset.option = "autoresize", liElm.appendChild(forceFitCheckboxElm); + let labelElm = document.createElement("label"); + labelElm.htmlFor = `${_gridUid}colpicker-forcefit`, labelElm.textContent = forceFitTitle, liElm.appendChild(labelElm), _grid.getOptions().forceFitColumns && (forceFitCheckboxElm.checked = !0); + } + if (!(_options.columnPicker && _options.columnPicker.hideSyncResizeButton)) { + let syncResizeTitle = _options.columnPicker && _options.columnPicker.syncResizeTitle || _options.syncResizeTitle, liElm = document.createElement("li"); + liElm.ariaLabel = syncResizeTitle, _listElm.appendChild(liElm); + let syncResizeCheckboxElm = document.createElement("input"); + syncResizeCheckboxElm.type = "checkbox", syncResizeCheckboxElm.id = `${_gridUid}colpicker-syncresize`, syncResizeCheckboxElm.dataset.option = "syncresize", liElm.appendChild(syncResizeCheckboxElm); + let labelElm = document.createElement("label"); + labelElm.htmlFor = `${_gridUid}colpicker-syncresize`, labelElm.textContent = syncResizeTitle, liElm.appendChild(labelElm), _grid.getOptions().syncColumnCellResize && (syncResizeCheckboxElm.checked = !0); + } + repositionMenu(e); + } + function repositionMenu(event) { + let targetEvent = event && event.touches && event.touches[0] || event; + _menuElm.style.top = `${targetEvent.pageY - 10}px`, _menuElm.style.left = `${targetEvent.pageX - 10}px`, _menuElm.style.maxHeight = `${window2.innerHeight - targetEvent.clientY}px`, _menuElm.style.display = "block", _menuElm.setAttribute("aria-expanded", "true"), _menuElm.appendChild(_listElm); + } + function updateColumnOrder() { + let current = _grid.getColumns().slice(0), ordered = new Array(columns.length); + for (let i = 0; i < ordered.length; i++) + _grid.getColumnIndex(columns[i].id) === void 0 ? ordered[i] = columns[i] : ordered[i] = current.shift(); + columns = ordered; + } + function updateAllTitles(gridMenuOptions) { + _columnTitleElm && _columnTitleElm.innerHTML && (_columnTitleElm.innerHTML = gridMenuOptions.columnTitle); + } + function updateColumn(e) { + if (e.target.dataset.option === "autoresize") { + var previousVisibleColumns = getVisibleColumns(), isChecked = e.target.checked; + _grid.setOptions({ forceFitColumns: isChecked }), _grid.setColumns(previousVisibleColumns); + return; + } + if (e.target.dataset.option === "syncresize") { + e.target.checked ? _grid.setOptions({ syncColumnCellResize: !0 }) : _grid.setOptions({ syncColumnCellResize: !1 }); + return; + } + if (e.target.type === "checkbox") { + let isChecked2 = e.target.checked, columnId = e.target.dataset.columnid || "", visibleColumns = []; + if (columnCheckboxes.forEach((columnCheckbox, idx) => { + columns[idx].hidden !== void 0 && (columns[idx].hidden = !columnCheckbox.checked), columnCheckbox.checked && visibleColumns.push(columns[idx]); + }), !visibleColumns.length) { + e.target.checked = !0; + return; + } + _grid.setColumns(visibleColumns), onColumnsChanged.notify({ columnId, showing: isChecked2, allColumns: columns, columns: visibleColumns, grid: _grid }); + } + } + function setColumnVisibiliy(idxOrId, show) { + var idx = typeof idxOrId == "number" ? idxOrId : getColumnIndexbyId(idxOrId), sVisible = !!_grid.getColumnIndex(columns[idx].id), visibleColumns = getVisibleColumns(), col = columns[idx]; + if (show) + col.hidden = !1, visibleColumns.splice(idx, 0, col); + else { + let newVisibleColumns = []; + for (let i = 0; i < visibleColumns.length; i++) + visibleColumns[i].id !== col.id && newVisibleColumns.push(visibleColumns[i]); + visibleColumns = newVisibleColumns; + } + _grid.setColumns(visibleColumns), onColumnsChanged.notify({ columnId: col.id, showing: show, allColumns: columns, columns: visibleColumns, grid: _grid }); + } + function getAllColumns() { + return columns; + } + function getColumnbyId(id) { + for (let i = 0; i < columns.length; i++) + if (columns[i].id === id) + return columns[i]; + return null; + } + function getColumnIndexbyId(id) { + for (let i = 0; i < columns.length; i++) + if (columns[i].id === id) + return i; + return -1; + } + function getVisibleColumns() { + return _grid.getColumns(); + } + return init(_grid), { + init, + getAllColumns, + getColumnbyId, + getColumnIndexbyId, + getVisibleColumns, + destroy, + updateAllTitles, + onColumnsChanged, + setColumnVisibiliy + }; + } + Slick.Utils.extend(!0, window2, { Slick: { Controls: { ColumnPicker: SlickColumnPicker } } }); + })(window); +})(); diff --git a/dist/browser/controls/slick.columnpicker.js b/dist/browser/controls/slick.columnpicker.js new file mode 100644 index 00000000..555faa5c --- /dev/null +++ b/dist/browser/controls/slick.columnpicker.js @@ -0,0 +1,141 @@ +"use strict"; +(() => { + // src/controls/slick.columnpicker.js + var BindingEventService = Slick.BindingEventService, SlickEvent = Slick.Event, Utils = Slick.Utils; + function SlickColumnPicker(columns, grid, options) { + var _grid = grid, _options = options, _gridUid = grid && grid.getUID ? grid.getUID() : "", _columnTitleElm, _listElm, _menuElm, columnCheckboxes, onColumnsChanged = new SlickEvent(), _bindingEventService = new BindingEventService(), defaults = { + fadeSpeed: 250, + // the last 2 checkboxes titles + hideForceFitButton: !1, + hideSyncResizeButton: !1, + forceFitTitle: "Force fit columns", + syncResizeTitle: "Synchronous resize", + headerColumnValueExtractor: function(columnDef) { + return columnDef.name; + } + }; + function init(grid2) { + grid2.onHeaderContextMenu.subscribe(handleHeaderContextMenu), grid2.onColumnsReordered.subscribe(updateColumnOrder), _options = Utils.extend({}, defaults, options), _menuElm = document.createElement("div"), _menuElm.className = `slick-columnpicker ${_gridUid}`, _menuElm.style.display = "none", document.body.appendChild(_menuElm); + let buttonElm = document.createElement("button"); + buttonElm.type = "button", buttonElm.className = "close", buttonElm.dataset.dismiss = "slick-columnpicker", buttonElm.ariaLabel = "Close"; + let spanCloseElm = document.createElement("span"); + if (spanCloseElm.className = "close", spanCloseElm.ariaHidden = "true", spanCloseElm.innerHTML = "×", buttonElm.appendChild(spanCloseElm), _menuElm.appendChild(buttonElm), _options.columnPickerTitle || _options.columnPicker && _options.columnPicker.columnTitle) { + var columnTitle = _options.columnPickerTitle || _options.columnPicker.columnTitle; + _columnTitleElm = document.createElement("div"), _columnTitleElm.className = "slick-gridmenu-custom", _columnTitleElm.textContent = columnTitle, _menuElm.appendChild(_columnTitleElm); + } + _bindingEventService.bind(_menuElm, "click", updateColumn), _listElm = document.createElement("span"), _listElm.className = "slick-columnpicker-list", _bindingEventService.bind(document.body, "mousedown", handleBodyMouseDown), _bindingEventService.bind(document.body, "beforeunload", destroy); + } + function destroy() { + _grid.onHeaderContextMenu.unsubscribe(handleHeaderContextMenu), _grid.onColumnsReordered.unsubscribe(updateColumnOrder), _bindingEventService.unbindAll(), _listElm && _listElm.remove(), _menuElm && _menuElm.remove(); + } + function handleBodyMouseDown(e) { + (_menuElm !== e.target && !(_menuElm && _menuElm.contains(e.target)) || e.target.className === "close") && (_menuElm.setAttribute("aria-expanded", "false"), _menuElm.style.display = "none"); + } + function handleHeaderContextMenu(e) { + e.preventDefault(), Utils.emptyElement(_listElm), updateColumnOrder(), columnCheckboxes = []; + let columnId, columnLabel, excludeCssClass; + for (var i = 0; i < columns.length; i++) { + columnId = columns[i].id, excludeCssClass = columns[i].excludeFromColumnPicker ? "hidden" : ""; + let liElm = document.createElement("li"); + liElm.className = excludeCssClass, liElm.ariaLabel = columns[i] && columns[i].name; + let checkboxElm = document.createElement("input"); + checkboxElm.type = "checkbox", checkboxElm.id = `${_gridUid}colpicker-${columnId}`, checkboxElm.dataset.columnid = columns[i].id, liElm.appendChild(checkboxElm), columnCheckboxes.push(checkboxElm), _grid.getColumnIndex(columnId) != null && !columns[i].hidden && (checkboxElm.checked = !0), _options && _options.columnPicker && _options.columnPicker.headerColumnValueExtractor ? columnLabel = _options.columnPicker.headerColumnValueExtractor(columns[i], _options) : columnLabel = defaults.headerColumnValueExtractor(columns[i], _options); + let labelElm = document.createElement("label"); + labelElm.htmlFor = `${_gridUid}colpicker-${columnId}`, labelElm.innerHTML = columnLabel, liElm.appendChild(labelElm), _listElm.appendChild(liElm); + } + if (_options.columnPicker && (!_options.columnPicker.hideForceFitButton || !_options.columnPicker.hideSyncResizeButton) && _listElm.appendChild(document.createElement("hr")), !(_options.columnPicker && _options.columnPicker.hideForceFitButton)) { + let forceFitTitle = _options.columnPicker && _options.columnPicker.forceFitTitle || _options.forceFitTitle, liElm = document.createElement("li"); + liElm.ariaLabel = forceFitTitle, _listElm.appendChild(liElm); + let forceFitCheckboxElm = document.createElement("input"); + forceFitCheckboxElm.type = "checkbox", forceFitCheckboxElm.id = `${_gridUid}colpicker-forcefit`, forceFitCheckboxElm.dataset.option = "autoresize", liElm.appendChild(forceFitCheckboxElm); + let labelElm = document.createElement("label"); + labelElm.htmlFor = `${_gridUid}colpicker-forcefit`, labelElm.textContent = forceFitTitle, liElm.appendChild(labelElm), _grid.getOptions().forceFitColumns && (forceFitCheckboxElm.checked = !0); + } + if (!(_options.columnPicker && _options.columnPicker.hideSyncResizeButton)) { + let syncResizeTitle = _options.columnPicker && _options.columnPicker.syncResizeTitle || _options.syncResizeTitle, liElm = document.createElement("li"); + liElm.ariaLabel = syncResizeTitle, _listElm.appendChild(liElm); + let syncResizeCheckboxElm = document.createElement("input"); + syncResizeCheckboxElm.type = "checkbox", syncResizeCheckboxElm.id = `${_gridUid}colpicker-syncresize`, syncResizeCheckboxElm.dataset.option = "syncresize", liElm.appendChild(syncResizeCheckboxElm); + let labelElm = document.createElement("label"); + labelElm.htmlFor = `${_gridUid}colpicker-syncresize`, labelElm.textContent = syncResizeTitle, liElm.appendChild(labelElm), _grid.getOptions().syncColumnCellResize && (syncResizeCheckboxElm.checked = !0); + } + repositionMenu(e); + } + function repositionMenu(event) { + let targetEvent = event && event.touches && event.touches[0] || event; + _menuElm.style.top = `${targetEvent.pageY - 10}px`, _menuElm.style.left = `${targetEvent.pageX - 10}px`, _menuElm.style.maxHeight = `${window.innerHeight - targetEvent.clientY}px`, _menuElm.style.display = "block", _menuElm.setAttribute("aria-expanded", "true"), _menuElm.appendChild(_listElm); + } + function updateColumnOrder() { + let current = _grid.getColumns().slice(0), ordered = new Array(columns.length); + for (let i = 0; i < ordered.length; i++) + _grid.getColumnIndex(columns[i].id) === void 0 ? ordered[i] = columns[i] : ordered[i] = current.shift(); + columns = ordered; + } + function updateAllTitles(gridMenuOptions) { + _columnTitleElm && _columnTitleElm.innerHTML && (_columnTitleElm.innerHTML = gridMenuOptions.columnTitle); + } + function updateColumn(e) { + if (e.target.dataset.option === "autoresize") { + var previousVisibleColumns = getVisibleColumns(), isChecked = e.target.checked; + _grid.setOptions({ forceFitColumns: isChecked }), _grid.setColumns(previousVisibleColumns); + return; + } + if (e.target.dataset.option === "syncresize") { + e.target.checked ? _grid.setOptions({ syncColumnCellResize: !0 }) : _grid.setOptions({ syncColumnCellResize: !1 }); + return; + } + if (e.target.type === "checkbox") { + let isChecked2 = e.target.checked, columnId = e.target.dataset.columnid || "", visibleColumns = []; + if (columnCheckboxes.forEach((columnCheckbox, idx) => { + columns[idx].hidden !== void 0 && (columns[idx].hidden = !columnCheckbox.checked), columnCheckbox.checked && visibleColumns.push(columns[idx]); + }), !visibleColumns.length) { + e.target.checked = !0; + return; + } + _grid.setColumns(visibleColumns), onColumnsChanged.notify({ columnId, showing: isChecked2, allColumns: columns, columns: visibleColumns, grid: _grid }); + } + } + function setColumnVisibiliy(idxOrId, show) { + var idx = typeof idxOrId == "number" ? idxOrId : getColumnIndexbyId(idxOrId), sVisible = !!_grid.getColumnIndex(columns[idx].id), visibleColumns = getVisibleColumns(), col = columns[idx]; + if (show) + col.hidden = !1, visibleColumns.splice(idx, 0, col); + else { + let newVisibleColumns = []; + for (let i = 0; i < visibleColumns.length; i++) + visibleColumns[i].id !== col.id && newVisibleColumns.push(visibleColumns[i]); + visibleColumns = newVisibleColumns; + } + _grid.setColumns(visibleColumns), onColumnsChanged.notify({ columnId: col.id, showing: show, allColumns: columns, columns: visibleColumns, grid: _grid }); + } + function getAllColumns() { + return columns; + } + function getColumnbyId(id) { + for (let i = 0; i < columns.length; i++) + if (columns[i].id === id) + return columns[i]; + return null; + } + function getColumnIndexbyId(id) { + for (let i = 0; i < columns.length; i++) + if (columns[i].id === id) + return i; + return -1; + } + function getVisibleColumns() { + return _grid.getColumns(); + } + return init(_grid), { + init, + getAllColumns, + getColumnbyId, + getColumnIndexbyId, + getVisibleColumns, + destroy, + updateAllTitles, + onColumnsChanged, + setColumnVisibiliy + }; + } + window.Slick && (window.Slick.Controls = window.Slick.Controls || {}, window.Slick.Controls.ColumnPicker = SlickColumnPicker); +})(); diff --git a/dist/browser/controls/slick.gridmenu.js b/dist/browser/controls/slick.gridmenu.js new file mode 100644 index 00000000..b6585c16 --- /dev/null +++ b/dist/browser/controls/slick.gridmenu.js @@ -0,0 +1,232 @@ +"use strict"; +(() => { + // src/controls/slick.gridmenu.js + var BindingEventService = Slick.BindingEventService, SlickEvent = Slick.Event, Utils = Slick.Utils; + function SlickGridMenu(columns, grid, options) { + var _grid = grid, _gridOptions, _gridUid = grid && grid.getUID ? grid.getUID() : "", _isMenuOpen = !1, _options = options, _self = this, _columnTitleElm, _customTitleElm, _customMenuElm, _headerElm, _listElm, _buttonElm, _menuElm, columnCheckboxes, _defaults = { + showButton: !0, + hideForceFitButton: !1, + hideSyncResizeButton: !1, + forceFitTitle: "Force fit columns", + marginBottom: 15, + menuWidth: 18, + contentMinWidth: 0, + resizeOnShowHeaderRow: !1, + syncResizeTitle: "Synchronous resize", + useClickToRepositionMenu: !0, + headerColumnValueExtractor: function(columnDef) { + return columnDef.name; + } + }, _bindingEventService = new BindingEventService(); + grid.onSetOptions.subscribe(function(e, args) { + if (args && args.optionsBefore && args.optionsAfter) { + var switchedFromRegularToFrozen = args.optionsBefore.frozenColumn >= 0 && args.optionsAfter.frozenColumn === -1, switchedFromFrozenToRegular = args.optionsBefore.frozenColumn === -1 && args.optionsAfter.frozenColumn >= 0; + (switchedFromRegularToFrozen || switchedFromFrozenToRegular) && recreateGridMenu(); + } + }); + function init(grid2) { + _gridOptions = grid2.getOptions(), createGridMenu(), grid2.onBeforeDestroy.subscribe(destroy); + } + function setOptions(newOptions) { + options = Utils.extend({}, options, newOptions); + } + function createGridMenu() { + var gridMenuWidth = _options.gridMenu && _options.gridMenu.menuWidth || _defaults.menuWidth; + _gridOptions && _gridOptions.hasOwnProperty("frozenColumn") && _gridOptions.frozenColumn >= 0 ? _headerElm = document.querySelector(`.${_gridUid} .slick-header-right`) : _headerElm = document.querySelector(`.${_gridUid} .slick-header-left`), _headerElm.style.width = `calc(100% - ${gridMenuWidth}px)`; + var enableResizeHeaderRow = _options.gridMenu && _options.gridMenu.resizeOnShowHeaderRow != null ? _options.gridMenu.resizeOnShowHeaderRow : _defaults.resizeOnShowHeaderRow; + if (enableResizeHeaderRow && _options.showHeaderRow) { + let headerRow = document.querySelector(`.${_gridUid}.slick-headerrow`); + headerRow && (headerRow.style.width = `calc(100% - ${gridMenuWidth}px)`); + } + var showButton = _options.gridMenu && _options.gridMenu.showButton !== void 0 ? _options.gridMenu.showButton : _defaults.showButton; + if (showButton) { + if (_buttonElm = document.createElement("button"), _buttonElm.className = "slick-gridmenu-button", _buttonElm.ariaLabel = "Grid Menu", _options.gridMenu && _options.gridMenu.iconImage) { + let iconImageElm = document.createElement("img"); + iconImageElm.src = _options.gridMenu.iconImage, _buttonElm.appendChild(iconImageElm); + } else + _options.gridMenu && _options.gridMenu.iconCssClass ? _buttonElm.classList.add(..._options.gridMenu.iconCssClass.split(" ")) : _buttonElm.classList.add("sgi", "sgi-menu"); + options.iconCssClass && _buttonElm.classList.add(...options.iconCssClass.split(" ")), _headerElm.parentElement.insertBefore(_buttonElm, _headerElm.parentElement.firstChild), _bindingEventService.bind(_buttonElm, "click", showGridMenu); + } + _menuElm = document.createElement("div"), _menuElm.className = `slick-gridmenu ${_gridUid}`, _menuElm.style.display = "none", document.body.appendChild(_menuElm); + let buttonElm = document.createElement("button"); + buttonElm.type = "button", buttonElm.className = "close", buttonElm.dataset.dismiss = "slick-gridmenu", buttonElm.ariaLabel = "Close"; + let spanCloseElm = document.createElement("span"); + spanCloseElm.className = "close", spanCloseElm.ariaHidden = "true", spanCloseElm.innerHTML = "×", buttonElm.appendChild(spanCloseElm), _menuElm.appendChild(buttonElm), _customMenuElm = document.createElement("div"), _customMenuElm.className = "slick-gridmenu-custom", _customMenuElm.role = "menu", _menuElm.appendChild(_customMenuElm), populateCustomMenus(_options, _customMenuElm), populateColumnPicker(), _bindingEventService.bind(document.body, "mousedown", handleBodyMouseDown), _bindingEventService.bind(document.body, "beforeunload", destroy); + } + function destroy() { + _self.onAfterMenuShow.unsubscribe(), _self.onBeforeMenuShow.unsubscribe(), _self.onMenuClose.unsubscribe(), _self.onCommand.unsubscribe(), _self.onColumnsChanged.unsubscribe(), _grid.onColumnsReordered.unsubscribe(updateColumnOrder), _grid.onBeforeDestroy.unsubscribe(), _grid.onSetOptions.unsubscribe(), _bindingEventService.unbindAll(), _menuElm && _menuElm.remove && _menuElm.remove(), deleteMenu(); + } + function deleteMenu() { + _bindingEventService.unbindAll(); + let gridMenuElm = document.querySelector(`div.slick-gridmenu.${_gridUid}`); + gridMenuElm && (gridMenuElm.style.display = "none"), _headerElm && (_headerElm.style.width = "100%"), _buttonElm && _buttonElm.remove(), _menuElm && _menuElm.remove(); + } + function populateCustomMenus(options2, customMenuElm) { + if (!(!options2.gridMenu || !options2.gridMenu.customItems)) { + _options.gridMenu && _options.gridMenu.customTitle && (_customTitleElm = document.createElement("div"), _customTitleElm.className = "title", _customTitleElm.innerHTML = _options.gridMenu.customTitle, customMenuElm.appendChild(_customTitleElm)); + for (let i = 0, ln = options2.gridMenu.customItems.length; i < ln; i++) { + let addClickListener = !0, item = options2.gridMenu.customItems[i], callbackArgs = { + grid: _grid, + menu: _menuElm, + columns, + visibleColumns: getVisibleColumns() + }, isItemVisible = runOverrideFunctionWhenExists(item.itemVisibilityOverride, callbackArgs), isItemUsable = runOverrideFunctionWhenExists(item.itemUsabilityOverride, callbackArgs); + if (!isItemVisible) + continue; + Object.prototype.hasOwnProperty.call(item, "itemUsabilityOverride") && (item.disabled = !isItemUsable); + let liElm = document.createElement("div"); + liElm.className = "slick-gridmenu-item", liElm.role = "menuitem", (item.divider || item === "divider") && (liElm.classList.add("slick-gridmenu-item-divider"), addClickListener = !1), item.disabled && liElm.classList.add("slick-gridmenu-item-disabled"), item.hidden && liElm.classList.add("slick-gridmenu-item-hidden"), item.cssClass && liElm.classList.add(...item.cssClass.split(" ")), item.tooltip && (liElm.title = item.tooltip); + let iconElm = document.createElement("div"); + iconElm.className = "slick-gridmenu-icon", liElm.appendChild(iconElm), item.iconCssClass && iconElm.classList.add(...item.iconCssClass.split(" ")), item.iconImage && (iconElm.style.backgroundImage = "url(" + item.iconImage + ")"); + let textElm = document.createElement("span"); + textElm.className = "slick-gridmenu-content", textElm.innerHTML = item.title, liElm.appendChild(textElm), item.textCssClass && textElm.classList.add(...item.textCssClass.split(" ")), customMenuElm.appendChild(liElm), addClickListener && _bindingEventService.bind(liElm, "click", handleMenuItemClick.bind(this, item)); + } + } + } + function populateColumnPicker() { + _grid.onColumnsReordered.subscribe(updateColumnOrder), _options = Utils.extend({}, _defaults, _options), _options.gridMenu && _options.gridMenu.columnTitle && (_columnTitleElm = document.createElement("div"), _columnTitleElm.className = "title", _columnTitleElm.innerHTML = _options.gridMenu.columnTitle, _menuElm.appendChild(_columnTitleElm)), _bindingEventService.bind(_menuElm, "click", updateColumn), _listElm = document.createElement("span"), _listElm.className = "slick-gridmenu-list", _listElm.role = "menu"; + } + function recreateGridMenu() { + deleteMenu(), init(_grid); + } + function showGridMenu(e) { + var targetEvent = e.touches ? e.touches[0] : e; + e.preventDefault(), Utils.emptyElement(_listElm), Utils.emptyElement(_customMenuElm), populateCustomMenus(_options, _customMenuElm), updateColumnOrder(), columnCheckboxes = []; + var callbackArgs = { + grid: _grid, + menu: _menuElm, + allColumns: columns, + visibleColumns: getVisibleColumns() + }; + if (_options && _options.gridMenu && !runOverrideFunctionWhenExists(_options.gridMenu.menuUsabilityOverride, callbackArgs) || typeof e.stopPropagation == "function" && _self.onBeforeMenuShow.notify(callbackArgs, e, _self).getReturnValue() == !1) + return; + let columnId, columnLabel, excludeCssClass; + for (let i = 0; i < columns.length; i++) { + columnId = columns[i].id, excludeCssClass = columns[i].excludeFromGridMenu ? "hidden" : ""; + let liElm = document.createElement("li"); + liElm.className = excludeCssClass, liElm.ariaLabel = columns[i] && columns[i].name; + let checkboxElm = document.createElement("input"); + checkboxElm.type = "checkbox", checkboxElm.id = `${_gridUid}-gridmenu-colpicker-${columnId}`, checkboxElm.dataset.columnid = columns[i].id, liElm.appendChild(checkboxElm), _grid.getColumnIndex(columns[i].id) != null && !columns[i].hidden && (checkboxElm.checked = !0), columnCheckboxes.push(checkboxElm), _options && _options.gridMenu && _options.gridMenu.headerColumnValueExtractor ? columnLabel = _options.gridMenu.headerColumnValueExtractor(columns[i], _gridOptions) : columnLabel = _defaults.headerColumnValueExtractor(columns[i], _gridOptions); + let labelElm = document.createElement("label"); + labelElm.htmlFor = `${_gridUid}-gridmenu-colpicker-${columnId}`, labelElm.innerHTML = columnLabel, liElm.appendChild(labelElm), _listElm.appendChild(liElm); + } + if (_options.gridMenu && (!_options.gridMenu.hideForceFitButton || !_options.gridMenu.hideSyncResizeButton) && _listElm.appendChild(document.createElement("hr")), !(_options.gridMenu && _options.gridMenu.hideForceFitButton)) { + let forceFitTitle = _options.gridMenu && _options.gridMenu.forceFitTitle || _defaults.forceFitTitle, liElm = document.createElement("li"); + liElm.ariaLabel = forceFitTitle, liElm.role = "menuitem", _listElm.appendChild(liElm); + let forceFitCheckboxElm = document.createElement("input"); + forceFitCheckboxElm.type = "checkbox", forceFitCheckboxElm.id = `${_gridUid}-gridmenu-colpicker-forcefit`, forceFitCheckboxElm.dataset.option = "autoresize", liElm.appendChild(forceFitCheckboxElm); + let labelElm = document.createElement("label"); + labelElm.htmlFor = `${_gridUid}-gridmenu-colpicker-forcefit`, labelElm.textContent = forceFitTitle, liElm.appendChild(labelElm), _grid.getOptions().forceFitColumns && (forceFitCheckboxElm.checked = !0); + } + if (!(_options.gridMenu && _options.gridMenu.hideSyncResizeButton)) { + let syncResizeTitle = _options.gridMenu && _options.gridMenu.syncResizeTitle || _defaults.syncResizeTitle, liElm = document.createElement("li"); + liElm.ariaLabel = syncResizeTitle, _listElm.appendChild(liElm); + let syncResizeCheckboxElm = document.createElement("input"); + syncResizeCheckboxElm.type = "checkbox", syncResizeCheckboxElm.id = `${_gridUid}-gridmenu-colpicker-syncresize`, syncResizeCheckboxElm.dataset.option = "syncresize", liElm.appendChild(syncResizeCheckboxElm); + let labelElm = document.createElement("label"); + labelElm.htmlFor = `${_gridUid}-gridmenu-colpicker-syncresize`, labelElm.textContent = syncResizeTitle, liElm.appendChild(labelElm), _grid.getOptions().syncColumnCellResize && (syncResizeCheckboxElm.checked = !0); + } + let buttonElm = e.target.nodeName === "BUTTON" ? e.target : e.target.querySelector("button"); + buttonElm || (buttonElm = e.target.parentElement), _menuElm.style.display = "block", _menuElm.style.opacity = "0"; + let menuIconOffset = Utils.offset(buttonElm), menuWidth = _menuElm.offsetWidth, useClickToRepositionMenu = _options.gridMenu && _options.gridMenu.useClickToRepositionMenu !== void 0 ? _options.gridMenu.useClickToRepositionMenu : _defaults.useClickToRepositionMenu, contentMinWidth = _options.gridMenu && _options.gridMenu.contentMinWidth ? _options.gridMenu.contentMinWidth : _defaults.contentMinWidth, currentMenuWidth = contentMinWidth > menuWidth ? contentMinWidth : menuWidth + 5, nextPositionTop = useClickToRepositionMenu && targetEvent.pageY > 0 ? targetEvent.pageY : menuIconOffset.top + 10, nextPositionLeft = useClickToRepositionMenu && targetEvent.pageX > 0 ? targetEvent.pageX : menuIconOffset.left + 10, menuMarginBottom = _options.gridMenu && _options.gridMenu.marginBottom !== void 0 ? _options.gridMenu.marginBottom : _defaults.marginBottom; + _menuElm.style.top = `${nextPositionTop + 10}px`, _menuElm.style.left = `${nextPositionLeft - currentMenuWidth + 10}px`, contentMinWidth > 0 && (_menuElm.style.minWidth = `${contentMinWidth}px`), _options.gridMenu && _options.gridMenu.height !== void 0 ? _menuElm.style.height = `${_options.gridMenu.height}px` : _menuElm.style.maxHeight = `${window.innerHeight - targetEvent.clientY - menuMarginBottom}px`, _menuElm.style.display = "block", _menuElm.style.opacity = "1", _menuElm.appendChild(_listElm), _isMenuOpen = !0, typeof e.stopPropagation == "function" && _self.onAfterMenuShow.notify(callbackArgs, e, _self).getReturnValue() == !1; + } + function handleBodyMouseDown(event) { + (_menuElm !== event.target && !(_menuElm && _menuElm.contains(event.target)) && _isMenuOpen || event.target.className === "close") && hideMenu(event); + } + function handleMenuItemClick(item, e) { + let command = item.command || ""; + if (!(item.disabled || item.divider || item === "divider")) { + if (command != null && command != "") { + var callbackArgs = { + grid: _grid, + command, + item, + allColumns: columns, + visibleColumns: getVisibleColumns() + }; + _self.onCommand.notify(callbackArgs, e, _self), typeof item.action == "function" && item.action.call(this, e, callbackArgs); + } + var leaveOpen = !!(_options.gridMenu && _options.gridMenu.leaveOpen); + !leaveOpen && !e.defaultPrevented && hideMenu(e), e.preventDefault(), e.stopPropagation(); + } + } + function hideMenu(e) { + if (_menuElm) { + Utils.hide(_menuElm), _isMenuOpen = !1; + var callbackArgs = { + grid: _grid, + menu: _menuElm, + allColumns: columns, + visibleColumns: getVisibleColumns() + }; + if (_self.onMenuClose.notify(callbackArgs, e, _self).getReturnValue() == !1) + return; + } + } + function updateAllTitles(gridMenuOptions) { + _customTitleElm && _customTitleElm.innerHTML && (_customTitleElm.innerHTML = gridMenuOptions.customTitle), _columnTitleElm && _columnTitleElm.innerHTML && (_columnTitleElm.innerHTML = gridMenuOptions.columnTitle); + } + function updateColumnOrder() { + for (var current = _grid.getColumns().slice(0), ordered = new Array(columns.length), i = 0; i < ordered.length; i++) + _grid.getColumnIndex(columns[i].id) === void 0 ? ordered[i] = columns[i] : ordered[i] = current.shift(); + columns = ordered; + } + function updateColumn(e) { + if (e.target.dataset.option === "autoresize") { + var previousVisibleColumns = getVisibleColumns(), isChecked = e.target.checked; + _grid.setOptions({ forceFitColumns: isChecked }), _grid.setColumns(previousVisibleColumns); + return; + } + if (e.target.dataset.option === "syncresize") { + _grid.setOptions({ syncColumnCellResize: !!e.target.checked }); + return; + } + if (e.target.type === "checkbox") { + let isChecked2 = e.target.checked, columnId = e.target.dataset.columnid || "", visibleColumns = []; + if (columnCheckboxes.forEach((columnCheckbox, idx) => { + columnCheckbox.checked && (columns[idx].hidden && (columns[idx].hidden = !1), visibleColumns.push(columns[idx])); + }), !visibleColumns.length) { + e.target.checked = !0; + return; + } + let callbackArgs = { + columnId, + showing: isChecked2, + grid: _grid, + allColumns: columns, + columns: visibleColumns + }; + _grid.setColumns(visibleColumns), _self.onColumnsChanged.notify(callbackArgs, e, _self); + } + } + init(_grid); + function getAllColumns() { + return columns; + } + function getVisibleColumns() { + return _grid.getColumns(); + } + function runOverrideFunctionWhenExists(overrideFn, args) { + return typeof overrideFn == "function" ? overrideFn.call(this, args) : !0; + } + Utils.extend(this, { + init, + getAllColumns, + getVisibleColumns, + destroy, + deleteMenu, + recreateGridMenu, + showGridMenu, + setOptions, + updateAllTitles, + hideMenu, + onAfterMenuShow: new SlickEvent(), + onBeforeMenuShow: new SlickEvent(), + onMenuClose: new SlickEvent(), + onCommand: new SlickEvent(), + onColumnsChanged: new SlickEvent() + }); + } + window.Slick && (window.Slick.Controls = window.Slick.Controls || {}, window.Slick.Controls.GridMenu = SlickGridMenu); +})(); diff --git a/dist/browser/controls/slick.pager.js b/dist/browser/controls/slick.pager.js new file mode 100644 index 00000000..8a554655 --- /dev/null +++ b/dist/browser/controls/slick.pager.js @@ -0,0 +1,118 @@ +"use strict"; +(() => { + // src/controls/slick.pager.js + var BindingEventService = Slick.BindingEventService, GlobalEditorLock = Slick.GlobalEditorLock, Utils = Slick.Utils; + function SlickGridPager(dataView, grid, selectorOrElm, options) { + let container = getContainerElement(selectorOrElm), statusElm, _options, _defaults = { + showAllText: "Showing all {rowCount} rows", + showPageText: "Showing page {pageNum} of {pageCount}", + showCountText: "From {countBegin} to {countEnd} of {rowCount} rows", + showCount: !1, + pagingOptions: [ + { data: 0, name: "All", ariaLabel: "Show All Pages" }, + { data: -1, name: "Auto", ariaLabel: "Auto Page Size" }, + { data: 25, name: "25", ariaLabel: "Show 25 rows per page" }, + { data: 50, name: "50", ariaLabel: "Show 50 rows per page" }, + { data: 100, name: "100", ariaLabel: "Show 100 rows per page" } + ], + showPageSizes: !1 + }; + var _bindingEventService = new BindingEventService(); + function init() { + _options = Utils.extend(!0, {}, _defaults, options), dataView.onPagingInfoChanged.subscribe(function(e, pagingInfo) { + updatePager(pagingInfo); + }), constructPagerUI(), updatePager(dataView.getPagingInfo()); + } + function destroy() { + setPageSize(0), _bindingEventService.unbindAll(), container.innerHTML = ""; + } + function getNavState() { + let cannotLeaveEditMode = !GlobalEditorLock.commitCurrentEdit(), pagingInfo = dataView.getPagingInfo(), lastPage = pagingInfo.totalPages - 1; + return { + canGotoFirst: !cannotLeaveEditMode && pagingInfo.pageSize !== 0 && pagingInfo.pageNum > 0, + canGotoLast: !cannotLeaveEditMode && pagingInfo.pageSize !== 0 && pagingInfo.pageNum !== lastPage, + canGotoPrev: !cannotLeaveEditMode && pagingInfo.pageSize !== 0 && pagingInfo.pageNum > 0, + canGotoNext: !cannotLeaveEditMode && pagingInfo.pageSize !== 0 && pagingInfo.pageNum < lastPage, + pagingInfo + }; + } + function setPageSize(n) { + dataView.setRefreshHints({ + isFilterUnchanged: !0 + }), dataView.setPagingOptions({ pageSize: n }); + } + function gotoFirst() { + getNavState().canGotoFirst && dataView.setPagingOptions({ pageNum: 0 }); + } + function gotoLast() { + let state = getNavState(); + state.canGotoLast && dataView.setPagingOptions({ pageNum: state.pagingInfo.totalPages - 1 }); + } + function gotoPrev() { + let state = getNavState(); + state.canGotoPrev && dataView.setPagingOptions({ pageNum: state.pagingInfo.pageNum - 1 }); + } + function gotoNext() { + let state = getNavState(); + state.canGotoNext && dataView.setPagingOptions({ pageNum: state.pagingInfo.pageNum + 1 }); + } + function getContainerElement(selectorOrElm2) { + return typeof selectorOrElm2 == "string" ? document.querySelector(selectorOrElm2) : typeof selectorOrElm2 == "object" && selectorOrElm2[0] ? selectorOrElm2[0] : selectorOrElm2; + } + function constructPagerUI() { + let container2 = getContainerElement(selectorOrElm); + if (!container2 || container2.jquery && !container2[0]) + return; + let navElm = document.createElement("span"); + navElm.className = "slick-pager-nav"; + let settingsElm = document.createElement("span"); + settingsElm.className = "slick-pager-settings", statusElm = document.createElement("span"), statusElm.className = "slick-pager-status"; + let pagerSettingsElm = document.createElement("span"); + pagerSettingsElm.className = "slick-pager-settings-expanded", pagerSettingsElm.textContent = "Show: "; + for (let o = 0; o < _options.pagingOptions.length; o++) { + let p = _options.pagingOptions[o], anchorElm = document.createElement("a"); + anchorElm.textContent = p.name, anchorElm.ariaLabel = p.ariaLabel, anchorElm.dataset.val = p.data, pagerSettingsElm.appendChild(anchorElm), _bindingEventService.bind(anchorElm, "click", function(e) { + let pagesize = e.target.dataset.val; + if (pagesize !== void 0) + if (Number(pagesize) === -1) { + let vp = grid.getViewport(); + setPageSize(vp.bottom - vp.top); + } else + setPageSize(parseInt(pagesize)); + }); + } + pagerSettingsElm.style.display = _options.showPageSizes ? "block" : "none", settingsElm.appendChild(pagerSettingsElm); + let displayPaginationContainer = document.createElement("span"), displayIconElm = document.createElement("span"); + displayPaginationContainer.className = "sgi-container", displayIconElm.ariaLabel = "Show Pagination Options", displayIconElm.role = "button", displayIconElm.className = "sgi sgi-lightbulb", displayPaginationContainer.appendChild(displayIconElm), _bindingEventService.bind(displayIconElm, "click", () => { + let styleDisplay = pagerSettingsElm.style.display; + pagerSettingsElm.style.display = styleDisplay === "none" ? "inline-flex" : "none"; + }), settingsElm.appendChild(displayPaginationContainer), [ + { key: "start", ariaLabel: "First Page", callback: gotoFirst }, + { key: "left", ariaLabel: "Previous Page", callback: gotoPrev }, + { key: "right", ariaLabel: "Next Page", callback: gotoNext }, + { key: "end", ariaLabel: "Last Page", callback: gotoLast } + ].forEach((pageBtn) => { + let iconElm = document.createElement("span"); + iconElm.className = "sgi-container"; + let innerIconElm = document.createElement("span"); + innerIconElm.role = "button", innerIconElm.ariaLabel = pageBtn.ariaLabel, innerIconElm.className = `sgi sgi-chevron-${pageBtn.key}`, _bindingEventService.bind(innerIconElm, "click", pageBtn.callback), iconElm.appendChild(innerIconElm), navElm.appendChild(iconElm); + }); + let slickPagerElm = document.createElement("div"); + slickPagerElm.className = "slick-pager", slickPagerElm.appendChild(navElm), slickPagerElm.appendChild(statusElm), slickPagerElm.appendChild(settingsElm), container2.appendChild(slickPagerElm); + } + function updatePager(pagingInfo) { + if (!container || container.jquery && !container[0]) + return; + let state = getNavState(); + if (container.querySelectorAll(".slick-pager-nav span").forEach((pagerIcon) => pagerIcon.classList.remove("sgi-state-disabled")), state.canGotoFirst || container.querySelector(".sgi-chevron-start").classList.add("sgi-state-disabled"), state.canGotoLast || container.querySelector(".sgi-chevron-end").classList.add("sgi-state-disabled"), state.canGotoNext || container.querySelector(".sgi-chevron-right").classList.add("sgi-state-disabled"), state.canGotoPrev || container.querySelector(".sgi-chevron-left").classList.add("sgi-state-disabled"), pagingInfo.pageSize === 0 ? statusElm.textContent = _options.showAllText.replace("{rowCount}", pagingInfo.totalRows + "").replace("{pageCount}", pagingInfo.totalPages + "") : statusElm.textContent = _options.showPageText.replace("{pageNum}", pagingInfo.pageNum + 1 + "").replace("{pageCount}", pagingInfo.totalPages + ""), _options.showCount && pagingInfo.pageSize !== 0) { + let pageBegin = pagingInfo.pageNum * pagingInfo.pageSize, currentText = statusElm.textContent; + currentText && (currentText += " - "), statusElm.textContent = currentText + _options.showCountText.replace("{rowCount}", pagingInfo.totalRows + "").replace("{countBegin}", pageBegin + 1).replace("{countEnd}", Math.min(pageBegin + pagingInfo.pageSize, pagingInfo.totalRows)); + } + } + init(), Utils.extend(this, { + init, + destroy + }); + } + window.Slick && (window.Slick.Controls = window.Slick.Controls || {}, window.Slick.Controls.Pager = SlickGridPager); +})(); diff --git a/dist/browser/plugins/slick.autotooltips.js b/dist/browser/plugins/slick.autotooltips.js new file mode 100644 index 00000000..a8f68067 --- /dev/null +++ b/dist/browser/plugins/slick.autotooltips.js @@ -0,0 +1,42 @@ +"use strict"; +(() => { + // src/plugins/slick.autotooltips.ts + var Utils = Slick.Utils; + function SlickAutoTooltips(options) { + let _grid, _defaults = { + enableForCells: !0, + enableForHeaderCells: !1, + maxToolTipLength: void 0, + replaceExisting: !0 + }; + function init(grid) { + options = Utils.extend(!0, {}, _defaults, options), _grid = grid, options.enableForCells && _grid.onMouseEnter.subscribe(handleMouseEnter), options.enableForHeaderCells && _grid.onHeaderMouseEnter.subscribe(handleHeaderMouseEnter); + } + function destroy() { + options.enableForCells && _grid.onMouseEnter.unsubscribe(handleMouseEnter), options.enableForHeaderCells && _grid.onHeaderMouseEnter.unsubscribe(handleHeaderMouseEnter); + } + function handleMouseEnter(event) { + var _a, _b; + let cell = _grid.getCellFromEvent(event); + if (cell) { + let node = _grid.getCellNode(cell.row, cell.cell), text; + options && node && (!node.title || options != null && options.replaceExisting) && (node.clientWidth < node.scrollWidth ? (text = (_b = (_a = node.textContent) == null ? void 0 : _a.trim()) != null ? _b : "", options && options.maxToolTipLength && text.length > options.maxToolTipLength && (text = text.substring(0, options.maxToolTipLength - 3) + "...")) : text = "", node.title = text), node = null; + } + } + function handleHeaderMouseEnter(event, args) { + var _a; + let column = args.column, node, targetElm = event.target; + targetElm && (node = targetElm.closest(".slick-header-column"), node && !(column && column.toolTip) && (node.title = targetElm.clientWidth < node.clientWidth && (_a = column == null ? void 0 : column.name) != null ? _a : "")), node = null; + } + return { + init, + destroy, + pluginName: "AutoTooltips" + }; + } + window.Slick && Utils.extend(!0, window, { + Slick: { + AutoTooltips: SlickAutoTooltips + } + }); +})(); diff --git a/dist/browser/plugins/slick.cellcopymanager.js b/dist/browser/plugins/slick.cellcopymanager.js new file mode 100644 index 00000000..dc278e30 --- /dev/null +++ b/dist/browser/plugins/slick.cellcopymanager.js @@ -0,0 +1,44 @@ +"use strict"; +(() => { + // src/plugins/slick.cellcopymanager.js + var keyCode = Slick.keyCode, SlickEvent = Slick.Event, Utils = Slick.Utils; + function CellCopyManager() { + var _grid, _self = this, _copiedRanges; + function init(grid) { + _grid = grid, _grid.onKeyDown.subscribe(handleKeyDown); + } + function destroy() { + _grid.onKeyDown.unsubscribe(handleKeyDown); + } + function handleKeyDown(e) { + var ranges; + _grid.getEditorLock().isActive() || (e.which == keyCode.ESCAPE && _copiedRanges && (e.preventDefault(), clearCopySelection(), _self.onCopyCancelled.notify({ ranges: _copiedRanges }), _copiedRanges = null), e.which == 67 && (e.ctrlKey || e.metaKey) && (ranges = _grid.getSelectionModel().getSelectedRanges(), ranges.length !== 0 && (e.preventDefault(), _copiedRanges = ranges, markCopySelection(ranges), _self.onCopyCells.notify({ ranges }))), e.which == 86 && (e.ctrlKey || e.metaKey) && _copiedRanges && (e.preventDefault(), ranges = _grid.getSelectionModel().getSelectedRanges(), _self.onPasteCells.notify({ from: _copiedRanges, to: ranges }), _grid.getOptions().preserveCopiedSelectionOnPaste || (clearCopySelection(), _copiedRanges = null))); + } + function markCopySelection(ranges) { + for (var columns = _grid.getColumns(), hash = {}, i = 0; i < ranges.length; i++) + for (var j = ranges[i].fromRow; j <= ranges[i].toRow; j++) { + hash[j] = {}; + for (var k = ranges[i].fromCell; k <= ranges[i].toCell; k++) + hash[j][columns[k].id] = "copied"; + } + _grid.setCellCssStyles("copy-manager", hash); + } + function clearCopySelection() { + _grid.removeCellCssStyles("copy-manager"); + } + Utils.extend(this, { + init, + destroy, + pluginName: "CellCopyManager", + clearCopySelection, + onCopyCells: new SlickEvent(), + onCopyCancelled: new SlickEvent(), + onPasteCells: new SlickEvent() + }); + } + window.Slick && Utils.extend(!0, window, { + Slick: { + CellCopyManager + } + }); +})(); diff --git a/dist/browser/plugins/slick.cellexternalcopymanager.js b/dist/browser/plugins/slick.cellexternalcopymanager.js new file mode 100644 index 00000000..1d40f1f6 --- /dev/null +++ b/dist/browser/plugins/slick.cellexternalcopymanager.js @@ -0,0 +1,251 @@ +"use strict"; +(() => { + // src/plugins/slick.cellexternalcopymanager.js + var SlickEvent = Slick.Event, Utils = Slick.Utils; + function CellExternalCopyManager(options) { + var _grid, _self = this, _copiedRanges, _options = options || {}, _copiedCellStyleLayerKey = _options.copiedCellStyleLayerKey || "copy-manager", _copiedCellStyle = _options.copiedCellStyle || "copied", _clearCopyTI = 0, _bodyElement = _options.bodyElement || document.body, _onCopyInit = _options.onCopyInit || null, _onCopySuccess = _options.onCopySuccess || null, keyCodes = { + C: 67, + V: 86, + ESC: 27, + INSERT: 45 + }; + function init(grid) { + _grid = grid, _grid.onKeyDown.subscribe(handleKeyDown); + var cellSelectionModel = grid.getSelectionModel(); + if (!cellSelectionModel) + throw new Error("Selection model is mandatory for this plugin. Please set a selection model on the grid before adding this plugin: grid.setSelectionModel(new Slick.CellSelectionModel())"); + cellSelectionModel.onSelectedRangesChanged.subscribe(() => { + _grid.getEditorLock().isActive() || _grid.focus(); + }); + } + function destroy() { + _grid.onKeyDown.unsubscribe(handleKeyDown); + } + function getHeaderValueForColumn(columnDef) { + if (_options.headerColumnValueExtractor) { + var val = _options.headerColumnValueExtractor(columnDef); + if (val) + return val; + } + return columnDef.name; + } + function getDataItemValueForColumn(item, columnDef, event) { + if (typeof _options.dataItemColumnValueExtractor == "function") { + let val = _options.dataItemColumnValueExtractor(item, columnDef); + if (val) + return val; + } + let retVal = ""; + if (columnDef && columnDef.editor) { + let tmpP = document.createElement("p"), editor = new columnDef.editor({ + container: tmpP, + // a dummy container + column: columnDef, + event, + position: { top: 0, left: 0 }, + // a dummy position required by some editors + grid: _grid + }); + editor.loadValue(item), retVal = editor.serializeValue(), editor.destroy(), tmpP.remove(); + } else + retVal = item[columnDef.field || ""]; + return retVal; + } + function setDataItemValueForColumn(item, columnDef, value) { + if (columnDef.denyPaste) + return null; + if (_options.dataItemColumnValueSetter) + return _options.dataItemColumnValueSetter(item, columnDef, value); + if (columnDef.editor) { + let tmpDiv = document.createElement("div"), editor = new columnDef.editor({ + container: tmpDiv, + // a dummy container + column: columnDef, + position: { top: 0, left: 0 }, + // a dummy position required by some editors + grid: _grid + }); + editor.loadValue(item), editor.applyValue(item, value), editor.destroy(), tmpDiv.remove(); + } else + item[columnDef.field] = value; + } + function _createTextBox(innerText) { + var ta = document.createElement("textarea"); + return ta.style.position = "absolute", ta.style.left = "-1000px", ta.style.top = document.body.scrollTop + "px", ta.value = innerText, _bodyElement.appendChild(ta), ta.select(), ta; + } + function _decodeTabularData(_grid2, ta) { + var columns = _grid2.getColumns(), clipText = ta.value, clipRows = clipText.split(/[\n\f\r]/); + clipRows[clipRows.length - 1] === "" && clipRows.pop(); + var clippedRange = [], j = 0; + _bodyElement.removeChild(ta); + for (var i = 0; i < clipRows.length; i++) + clipRows[i] !== "" ? clippedRange[j++] = clipRows[i].split(" ") : clippedRange[j++] = [""]; + var selectedCell = _grid2.getActiveCell(), ranges = _grid2.getSelectionModel().getSelectedRanges(), selectedRange = ranges && ranges.length ? ranges[0] : null, activeRow = null, activeCell = null; + if (selectedRange) + activeRow = selectedRange.fromRow, activeCell = selectedRange.fromCell; + else if (selectedCell) + activeRow = selectedCell.row, activeCell = selectedCell.cell; + else + return; + var oneCellToMultiple = !1, destH = clippedRange.length, destW = clippedRange.length ? clippedRange[0].length : 0; + clippedRange.length == 1 && clippedRange[0].length == 1 && selectedRange && (oneCellToMultiple = !0, destH = selectedRange.toRow - selectedRange.fromRow + 1, destW = selectedRange.toCell - selectedRange.fromCell + 1); + var availableRows = _grid2.getData().length - activeRow, addRows = 0; + if (availableRows < destH && _options.newRowCreator) { + var d = _grid2.getData(); + for (addRows = 1; addRows <= destH - availableRows; addRows++) + d.push({}); + _grid2.setData(d), _grid2.render(); + } + var overflowsBottomOfGrid = activeRow + destH > _grid2.getDataLength(); + if (_options.newRowCreator && overflowsBottomOfGrid) { + var newRowsNeeded = activeRow + destH - _grid2.getDataLength(); + _options.newRowCreator(newRowsNeeded); + } + var clipCommand = { + isClipboardCommand: !0, + clippedRange, + oldValues: [], + cellExternalCopyManager: _self, + _options, + setDataItemValueForColumn, + markCopySelection, + oneCellToMultiple, + activeRow, + activeCell, + destH, + destW, + maxDestY: _grid2.getDataLength(), + maxDestX: _grid2.getColumns().length, + h: 0, + w: 0, + execute: function() { + this.h = 0; + for (var y = 0; y < this.destH; y++) { + this.oldValues[y] = [], this.w = 0, this.h++; + for (var x = 0; x < this.destW; x++) { + this.w++; + var desty = activeRow + y, destx = activeCell + x; + if (desty < this.maxDestY && destx < this.maxDestX) { + var nd = _grid2.getCellNode(desty, destx), dt = _grid2.getDataItem(desty); + this.oldValues[y][x] = dt[columns[destx].field], oneCellToMultiple ? this.setDataItemValueForColumn(dt, columns[destx], clippedRange[0][0]) : this.setDataItemValueForColumn(dt, columns[destx], clippedRange[y] ? clippedRange[y][x] : ""), _grid2.updateCell(desty, destx), _grid2.onCellChange.notify({ + row: desty, + cell: destx, + item: dt, + grid: _grid2 + }); + } + } + } + var bRange = { + fromCell: activeCell, + fromRow: activeRow, + toCell: activeCell + this.w - 1, + toRow: activeRow + this.h - 1 + }; + this.markCopySelection([bRange]), _grid2.getSelectionModel().setSelectedRanges([bRange]), this.cellExternalCopyManager.onPasteCells.notify({ ranges: [bRange] }); + }, + undo: function() { + for (var y = 0; y < this.destH; y++) + for (var x = 0; x < this.destW; x++) { + var desty = activeRow + y, destx = activeCell + x; + if (desty < this.maxDestY && destx < this.maxDestX) { + var nd = _grid2.getCellNode(desty, destx), dt = _grid2.getDataItem(desty); + oneCellToMultiple ? this.setDataItemValueForColumn(dt, columns[destx], this.oldValues[0][0]) : this.setDataItemValueForColumn(dt, columns[destx], this.oldValues[y][x]), _grid2.updateCell(desty, destx), _grid2.onCellChange.notify({ + row: desty, + cell: destx, + item: dt, + grid: _grid2 + }); + } + } + var bRange = { + fromCell: activeCell, + fromRow: activeRow, + toCell: activeCell + this.w - 1, + toRow: activeRow + this.h - 1 + }; + if (this.markCopySelection([bRange]), _grid2.getSelectionModel().setSelectedRanges([bRange]), this.cellExternalCopyManager.onPasteCells.notify({ ranges: [bRange] }), addRows > 1) { + for (var d2 = _grid2.getData(); addRows > 1; addRows--) + d2.splice(d2.length - 1, 1); + _grid2.setData(d2), _grid2.render(); + } + } + }; + _options.clipboardCommandHandler ? _options.clipboardCommandHandler(clipCommand) : clipCommand.execute(); + } + function handleKeyDown(e, args) { + var ranges; + if (!_grid.getEditorLock().isActive() || _grid.getOptions().autoEdit) { + if (e.which == keyCodes.ESC && _copiedRanges && (e.preventDefault(), clearCopySelection(), _self.onCopyCancelled.notify({ ranges: _copiedRanges }), _copiedRanges = null), (e.which === keyCodes.C || e.which === keyCodes.INSERT) && (e.ctrlKey || e.metaKey) && !e.shiftKey && (_onCopyInit && _onCopyInit.call(), ranges = _grid.getSelectionModel().getSelectedRanges(), ranges.length !== 0)) { + _copiedRanges = ranges, markCopySelection(ranges), _self.onCopyCells.notify({ ranges }); + for (var columns = _grid.getColumns(), clipText = "", rg = 0; rg < ranges.length; rg++) { + for (var range = ranges[rg], clipTextRows = [], i = range.fromRow; i < range.toRow + 1; i++) { + var clipTextCells = [], dt = _grid.getDataItem(i); + if (clipTextRows.length === 0 && _options.includeHeaderWhenCopying) { + for (var clipTextHeaders = [], j = range.fromCell; j < range.toCell + 1; j++) + columns[j].name.length > 0 && !columns[j].hidden && clipTextHeaders.push(getHeaderValueForColumn(columns[j])); + clipTextRows.push(clipTextHeaders.join(" ")); + } + for (var j = range.fromCell; j < range.toCell + 1; j++) + columns[j].name.length > 0 && !columns[j].hidden && clipTextCells.push(getDataItemValueForColumn(dt, columns[j], e)); + clipTextRows.push(clipTextCells.join(" ")); + } + clipText += clipTextRows.join(`\r +`) + `\r +`; + } + if (window.clipboardData) + return window.clipboardData.setData("Text", clipText), !0; + var focusEl = document.activeElement, ta = _createTextBox(clipText); + if (ta.focus(), setTimeout(function() { + _bodyElement.removeChild(ta), focusEl ? focusEl.focus() : console.log("Not element to restore focus to after copy?"); + }, 100), _onCopySuccess) { + var rowCount = 0; + ranges.length === 1 ? rowCount = ranges[0].toRow + 1 - ranges[0].fromRow : rowCount = ranges.length, _onCopySuccess.call(this, rowCount); + } + return !1; + } + if (!_options.readOnlyMode && (e.which === keyCodes.V && (e.ctrlKey || e.metaKey) && !e.shiftKey || e.which === keyCodes.INSERT && e.shiftKey && !e.ctrlKey)) { + var ta = _createTextBox(""); + return setTimeout(function() { + _decodeTabularData(_grid, ta); + }, 100), !1; + } + } + } + function markCopySelection(ranges) { + clearCopySelection(); + for (var columns = _grid.getColumns(), hash = {}, i = 0; i < ranges.length; i++) + for (var j = ranges[i].fromRow; j <= ranges[i].toRow; j++) { + hash[j] = {}; + for (var k = ranges[i].fromCell; k <= ranges[i].toCell && k < columns.length; k++) + hash[j][columns[k].id] = _copiedCellStyle; + } + _grid.setCellCssStyles(_copiedCellStyleLayerKey, hash), clearTimeout(_clearCopyTI), _clearCopyTI = setTimeout(function() { + _self.clearCopySelection(); + }, 2e3); + } + function clearCopySelection() { + _grid.removeCellCssStyles(_copiedCellStyleLayerKey); + } + function setIncludeHeaderWhenCopying(includeHeaderWhenCopying) { + _options.includeHeaderWhenCopying = includeHeaderWhenCopying; + } + Utils.extend(this, { + init, + destroy, + pluginName: "CellExternalCopyManager", + clearCopySelection, + handleKeyDown, + onCopyCells: new SlickEvent(), + onCopyCancelled: new SlickEvent(), + onPasteCells: new SlickEvent(), + setIncludeHeaderWhenCopying + }); + } + window.Slick && Utils.extend(!0, window, { + Slick: { + CellExternalCopyManager + } + }); +})(); diff --git a/dist/browser/plugins/slick.cellmenu.js b/dist/browser/plugins/slick.cellmenu.js new file mode 100644 index 00000000..5bf501e9 --- /dev/null +++ b/dist/browser/plugins/slick.cellmenu.js @@ -0,0 +1,204 @@ +"use strict"; +(() => { + // src/plugins/slick.cellmenu.js + var BindingEventService = Slick.BindingEventService, SlickEvent = Slick.Event, EventData = Slick.EventData, EventHandler = Slick.EventHandler, Utils = Slick.Utils; + function CellMenu(optionProperties) { + let _cellMenuProperties, _currentCell = -1, _currentRow = -1, _grid, _gridOptions, _gridUid = "", _handler = new EventHandler(), _self = this, _commandTitleElm, _optionTitleElm, _menuElm, _bindingEventService = new BindingEventService(), _defaults = { + autoAdjustDrop: !0, + // dropup/dropdown + autoAlignSide: !0, + // left/right + autoAdjustDropOffset: 0, + autoAlignSideOffset: 0, + hideMenuOnScroll: !0, + maxHeight: "none", + width: "auto" + }; + function init(grid) { + _grid = grid, _gridOptions = grid.getOptions(), _cellMenuProperties = Utils.extend({}, _defaults, optionProperties), _gridUid = grid && grid.getUID ? grid.getUID() : "", _handler.subscribe(_grid.onClick, handleCellClick), _cellMenuProperties.hideMenuOnScroll && _handler.subscribe(_grid.onScroll, destroyMenu); + } + function setOptions(newOptions) { + _cellMenuProperties = Utils.extend({}, _cellMenuProperties, newOptions); + } + function destroy() { + _self.onAfterMenuShow.unsubscribe(), _self.onBeforeMenuShow.unsubscribe(), _self.onBeforeMenuClose.unsubscribe(), _self.onCommand.unsubscribe(), _self.onOptionSelected.unsubscribe(), _handler.unsubscribeAll(), _bindingEventService.unbindAll(), _menuElm && _menuElm.remove && _menuElm.remove(), _commandTitleElm = null, _optionTitleElm = null, _menuElm = null; + } + function createMenu(e) { + let cell = _grid.getCellFromEvent(e); + _currentCell = cell && cell.cell, _currentRow = cell && cell.row; + let columnDef = _grid.getColumns()[_currentCell], dataContext = _grid.getDataItem(_currentRow), commandItems = _cellMenuProperties.commandItems || [], optionItems = _cellMenuProperties.optionItems || []; + if (!columnDef || !columnDef.cellMenu || !commandItems.length && !optionItems.length || (destroyMenu(), _self.onBeforeMenuShow.notify({ + cell: _currentCell, + row: _currentRow, + grid: _grid + }, e, _self).getReturnValue() == !1)) + return; + let maxHeight = isNaN(_cellMenuProperties.maxHeight) ? _cellMenuProperties.maxHeight : _cellMenuProperties.maxHeight + "px", width = isNaN(_cellMenuProperties.width) ? _cellMenuProperties.width : _cellMenuProperties.width + "px"; + _menuElm = document.createElement("div"), _menuElm.className = `slick-cell-menu ${_gridUid}`, _menuElm.role = "menu", _menuElm.style.width = width, _menuElm.style.maxHeight = maxHeight, _menuElm.style.top = `${e.pageY + 5}px`, _menuElm.style.left = `${e.pageX}px`, _menuElm.style.display = "none"; + let closeButtonElm = document.createElement("button"); + closeButtonElm.type = "button", closeButtonElm.className = "close", closeButtonElm.dataset.dismiss = "slick-cell-menu", closeButtonElm.ariaLabel = "Close"; + let spanCloseElm = document.createElement("span"); + if (spanCloseElm.className = "close", spanCloseElm.ariaHidden = "true", spanCloseElm.innerHTML = "×", closeButtonElm.appendChild(spanCloseElm), !_cellMenuProperties.hideOptionSection && optionItems.length > 0) { + let optionMenuElm = document.createElement("div"); + optionMenuElm.className = "slick-cell-menu-option-list", optionMenuElm.role = "menu", _cellMenuProperties.hideCloseButton || (_bindingEventService.bind(closeButtonElm, "click", handleCloseButtonClicked), _menuElm.appendChild(closeButtonElm)), _menuElm.appendChild(optionMenuElm), populateOptionItems( + _cellMenuProperties, + optionMenuElm, + optionItems, + { cell: _currentCell, row: _currentRow, column: columnDef, dataContext, grid: _grid } + ); + } + if (!_cellMenuProperties.hideCommandSection && commandItems.length > 0) { + let commandMenuElm = document.createElement("div"); + commandMenuElm.className = "slick-cell-menu-command-list", commandMenuElm.role = "menu", !_cellMenuProperties.hideCloseButton && (optionItems.length === 0 || _cellMenuProperties.hideOptionSection) && (_bindingEventService.bind(closeButtonElm, "click", handleCloseButtonClicked), _menuElm.appendChild(closeButtonElm)), _menuElm.appendChild(commandMenuElm), populateCommandItems( + _cellMenuProperties, + commandMenuElm, + commandItems, + { cell: _currentCell, row: _currentRow, column: columnDef, dataContext, grid: _grid } + ); + } + if (_menuElm.style.display = "block", document.body.appendChild(_menuElm), _self.onAfterMenuShow.notify({ + cell: _currentCell, + row: _currentRow, + grid: _grid + }, e, _self).getReturnValue() != !1) + return _menuElm; + } + function handleCloseButtonClicked(e) { + e.defaultPrevented || destroyMenu(e); + } + function destroyMenu(e, args) { + if (_menuElm = _menuElm || document.querySelector(".slick-cell-menu." + _gridUid), _menuElm && _menuElm.remove) { + if (_self.onBeforeMenuClose.notify({ + cell: args && args.cell, + row: args && args.row, + grid: _grid, + menu: _menuElm + }, e, _self).getReturnValue() == !1) + return; + _menuElm.remove(), _menuElm = null; + } + } + function repositionMenu(e) { + let parentElm = e.target.closest(".slick-cell"), parentOffset = parentElm && Utils.offset(parentElm), menuOffsetLeft = parentElm ? parentOffset.left : e.pageX, menuOffsetTop = parentElm ? parentOffset.top : e.pageY, parentCellWidth = parentElm.offsetWidth || 0, menuHeight = _menuElm && _menuElm.offsetHeight || 0, menuWidth = _menuElm && _menuElm.offsetWidth || _cellMenuProperties.width || 0, rowHeight = _gridOptions.rowHeight, dropOffset = _cellMenuProperties.autoAdjustDropOffset, sideOffset = _cellMenuProperties.autoAlignSideOffset; + if (_cellMenuProperties.autoAdjustDrop) { + let spaceBottom = Utils.calculateAvailableSpace(parentElm).bottom, spaceTop = Utils.calculateAvailableSpace(parentElm).top, spaceBottomRemaining = spaceBottom + dropOffset - rowHeight, spaceTopRemaining = spaceTop - dropOffset + rowHeight; + (spaceBottomRemaining < menuHeight && spaceTopRemaining > spaceBottomRemaining ? "top" : "bottom") === "top" ? (_menuElm.classList.remove("dropdown"), _menuElm.classList.add("dropup"), menuOffsetTop = menuOffsetTop - menuHeight - dropOffset) : (_menuElm.classList.remove("dropup"), _menuElm.classList.add("dropdown"), menuOffsetTop = menuOffsetTop + rowHeight + dropOffset); + } + if (_cellMenuProperties.autoAlignSide) { + let gridPos = _grid.getGridPosition(); + (menuOffsetLeft + menuWidth >= gridPos.width ? "left" : "right") === "left" ? (_menuElm.classList.remove("dropright"), _menuElm.classList.add("dropleft"), menuOffsetLeft = menuOffsetLeft - (menuWidth - parentCellWidth) - sideOffset) : (_menuElm.classList.remove("dropleft"), _menuElm.classList.add("dropright"), menuOffsetLeft = menuOffsetLeft + sideOffset); + } + _menuElm.style.top = `${menuOffsetTop}px`, _menuElm.style.left = `${menuOffsetLeft}px`; + } + function handleCellClick(e, args) { + e instanceof EventData && (e = e.getNativeEvent()); + let cell = _grid.getCellFromEvent(e), dataContext = _grid.getDataItem(cell.row), columnDef = _grid.getColumns()[cell.cell]; + columnDef && columnDef.cellMenu && e.preventDefault(), _cellMenuProperties = Utils.extend({}, _cellMenuProperties, columnDef.cellMenu), args || (args = {}), args.columnDef = columnDef, args.dataContext = dataContext, args.grid = _grid, runOverrideFunctionWhenExists(_cellMenuProperties.menuUsabilityOverride, args) && (_menuElm = createMenu(e, args), _menuElm && (repositionMenu(e), _menuElm.setAttribute("aria-expanded", "true"), _menuElm.style.display = "block"), _bindingEventService.bind(document.body, "mousedown", handleBodyMouseDown.bind(this))); + } + function handleBodyMouseDown(e) { + _menuElm != e.target && !(_menuElm && _menuElm.contains(e.target)) && (e.defaultPrevented || closeMenu(e, { cell: _currentCell, row: _currentRow })); + } + function closeMenu(e, args) { + if (_menuElm) { + if (_self.onBeforeMenuClose.notify({ + cell: args && args.cell, + row: args && args.row, + grid: _grid, + menu: _menuElm + }, e, _self).getReturnValue() == !1) + return; + _menuElm && _menuElm.remove && (_menuElm.remove(), _menuElm = null); + } + } + function populateOptionItems(cellMenu, optionMenuElm, optionItems, args) { + if (!(!args || !optionItems || !cellMenu)) { + cellMenu && cellMenu.optionTitle && (_optionTitleElm = document.createElement("div"), _optionTitleElm.className = "title", _optionTitleElm.textContent = cellMenu.optionTitle, optionMenuElm.appendChild(_optionTitleElm)); + for (let i = 0, ln = optionItems.length; i < ln; i++) { + let addClickListener = !0, item = optionItems[i], isItemVisible = runOverrideFunctionWhenExists(item.itemVisibilityOverride, args), isItemUsable = runOverrideFunctionWhenExists(item.itemUsabilityOverride, args); + if (!isItemVisible) + continue; + Object.prototype.hasOwnProperty.call(item, "itemUsabilityOverride") && (item.disabled = !isItemUsable); + let liElm = document.createElement("div"); + liElm.className = "slick-cell-menu-item", liElm.role = "menuitem", (item.divider || item === "divider") && (liElm.classList.add("slick-cell-menu-item-divider"), addClickListener = !1), (item.disabled || !isItemUsable) && liElm.classList.add("slick-cell-menu-item-disabled"), item.hidden && liElm.classList.add("slick-cell-menu-item-hidden"), item.cssClass && liElm.classList.add(...item.cssClass.split(" ")), item.tooltip && (liElm.title = item.tooltip); + let iconElm = document.createElement("div"); + iconElm.className = "slick-cell-menu-icon", liElm.appendChild(iconElm), item.iconCssClass && iconElm.classList.add(...item.iconCssClass.split(" ")), item.iconImage && (iconElm.style.backgroundImage = "url(" + item.iconImage + ")"); + let textElm = document.createElement("span"); + textElm.className = "slick-cell-menu-content", textElm.textContent = item.title, liElm.appendChild(textElm), item.textCssClass && textElm.classList.add(...item.textCssClass.split(" ")), optionMenuElm.appendChild(liElm), addClickListener && _bindingEventService.bind(liElm, "click", handleMenuItemOptionClick.bind(this, item)); + } + } + } + function populateCommandItems(cellMenu, commandMenuElm, commandItems, args) { + if (!(!args || !commandItems || !cellMenu)) { + cellMenu && cellMenu.commandTitle && (_commandTitleElm = document.createElement("div"), _commandTitleElm.className = "title", _commandTitleElm.textContent = cellMenu.commandTitle, commandMenuElm.appendChild(_commandTitleElm)); + for (let i = 0, ln = commandItems.length; i < ln; i++) { + let addClickListener = !0, item = commandItems[i], isItemVisible = runOverrideFunctionWhenExists(item.itemVisibilityOverride, args), isItemUsable = runOverrideFunctionWhenExists(item.itemUsabilityOverride, args); + if (!isItemVisible) + continue; + Object.prototype.hasOwnProperty.call(item, "itemUsabilityOverride") && (item.disabled = !isItemUsable); + let liElm = document.createElement("div"); + liElm.className = "slick-cell-menu-item", liElm.role = "menuitem", (item.divider || item === "divider") && (liElm.classList.add("slick-cell-menu-item-divider"), addClickListener = !1), (item.disabled || !isItemUsable) && liElm.classList.add("slick-cell-menu-item-disabled"), item.hidden && liElm.classList.add("slick-cell-menu-item-hidden"), item.cssClass && liElm.classList.add(...item.cssClass.split(" ")), item.tooltip && (liElm.title = item.tooltip); + let iconElm = document.createElement("div"); + iconElm.className = "slick-cell-menu-icon", liElm.appendChild(iconElm), item.iconCssClass && iconElm.classList.add(...item.iconCssClass.split(" ")), item.iconImage && (iconElm.style.backgroundImage = "url(" + item.iconImage + ")"); + let textElm = document.createElement("span"); + textElm.className = "slick-cell-menu-content", textElm.textContent = item.title, liElm.appendChild(textElm), item.textCssClass && textElm.classList.add(...item.textCssClass.split(" ")), commandMenuElm.appendChild(liElm), addClickListener && _bindingEventService.bind(liElm, "click", handleMenuItemCommandClick.bind(this, item)); + } + } + } + function handleMenuItemCommandClick(item, e) { + if (!item || item.disabled || item.divider || item === "divider") + return; + let command = item.command || "", row = _currentRow, cell = _currentCell, columnDef = _grid.getColumns()[cell], dataContext = _grid.getDataItem(row); + if (command !== null && command !== "") { + let callbackArgs = { + cell, + row, + grid: _grid, + command, + item, + column: columnDef, + dataContext + }; + _self.onCommand.notify(callbackArgs, e, _self), typeof item.action == "function" && item.action.call(this, e, callbackArgs), e.defaultPrevented || closeMenu(e, { cell, row }); + } + } + function handleMenuItemOptionClick(item, e) { + if (!item || item.disabled || item.divider || item === "divider" || !_grid.getEditorLock().commitCurrentEdit()) + return; + let option = item.option !== void 0 ? item.option : "", row = _currentRow, cell = _currentCell, columnDef = _grid.getColumns()[cell], dataContext = _grid.getDataItem(row); + if (option !== void 0) { + let callbackArgs = { + cell, + row, + grid: _grid, + option, + item, + column: columnDef, + dataContext + }; + _self.onOptionSelected.notify(callbackArgs, e, _self), typeof item.action == "function" && item.action.call(this, e, callbackArgs), e.defaultPrevented || closeMenu(e, { cell, row }); + } + } + function runOverrideFunctionWhenExists(overrideFn, args) { + return typeof overrideFn == "function" ? overrideFn.call(this, args) : !0; + } + Utils.extend(this, { + init, + closeMenu: destroyMenu, + destroy, + pluginName: "CellMenu", + setOptions, + onAfterMenuShow: new SlickEvent(), + onBeforeMenuShow: new SlickEvent(), + onBeforeMenuClose: new SlickEvent(), + onCommand: new SlickEvent(), + onOptionSelected: new SlickEvent() + }); + } + window.Slick && Utils.extend(!0, window, { + Slick: { + Plugins: { + CellMenu + } + } + }); +})(); diff --git a/dist/browser/plugins/slick.cellrangedecorator.js b/dist/browser/plugins/slick.cellrangedecorator.js new file mode 100644 index 00000000..258baec5 --- /dev/null +++ b/dist/browser/plugins/slick.cellrangedecorator.js @@ -0,0 +1,44 @@ +"use strict"; +(() => { + // src/plugins/slick.cellrangedecorator.js + var Utils = Slick.Utils; + function CellRangeDecorator(grid, options) { + var _elem, _defaults = { + selectionCssClass: "slick-range-decorator", + selectionCss: { + zIndex: "9999", + border: "2px dashed red" + }, + offset: { top: -1, left: -1, height: -2, width: -2 } + }; + options = Utils.extend(!0, {}, _defaults, options); + function show(range) { + if (!_elem) { + _elem = document.createElement("div"), _elem.className = options.selectionCssClass, Object.keys(options.selectionCss).forEach((cssStyleKey) => { + _elem.style[cssStyleKey] = options.selectionCss[cssStyleKey]; + }), _elem.style.position = "absolute"; + let canvasNode = grid.getActiveCanvasNode(); + canvasNode && canvasNode.appendChild(_elem); + } + var from = grid.getCellNodeBox(range.fromRow, range.fromCell), to = grid.getCellNodeBox(range.toRow, range.toCell); + return from && to && options && options.offset && (_elem.style.top = `${from.top + options.offset.top}px`, _elem.style.left = `${from.left + options.offset.left}px`, _elem.style.height = `${to.bottom - from.top + options.offset.height}px`, _elem.style.width = `${to.right - from.left + options.offset.width}px`), _elem; + } + function destroy() { + hide(); + } + function hide() { + _elem && (_elem.remove(), _elem = null); + } + Utils.extend(this, { + pluginName: "CellRangeDecorator", + show, + hide, + destroy + }); + } + window.Slick && Utils.extend(!0, window, { + Slick: { + CellRangeDecorator + } + }); +})(); diff --git a/dist/browser/plugins/slick.cellrangeselector.js b/dist/browser/plugins/slick.cellrangeselector.js new file mode 100644 index 00000000..8f3d9666 --- /dev/null +++ b/dist/browser/plugins/slick.cellrangeselector.js @@ -0,0 +1,165 @@ +"use strict"; +(() => { + // src/plugins/slick.cellrangeselector.js + var SlickEvent = Slick.Event, EventHandler = Slick.EventHandler, SlickRange = Slick.Range, Draggable = Slick.Draggable, CellRangeDecorator = Slick.CellRangeDecorator, Utils = Slick.Utils; + function CellRangeSelector(options) { + var _grid, _currentlySelectedRange, _canvas, _gridOptions, _activeCanvas, _dragging, _decorator, _self = this, _handler = new EventHandler(), _defaults = { + autoScroll: !0, + minIntervalToShowNextCell: 30, + maxIntervalToShowNextCell: 600, + // better to a multiple of minIntervalToShowNextCell + accelerateInterval: 5, + // increase 5ms when cursor 1px outside the viewport. + selectionCss: { + border: "2px dashed blue" + } + }, _rowOffset, _columnOffset, _isRightCanvas, _isBottomCanvas, _activeViewport, _viewportWidth, _viewportHeight, _draggingMouseOffset, _moveDistanceForOneCell, _autoScrollTimerId, _xDelayForNextCell, _yDelayForNextCell, _isRowMoveRegistered = !1, _scrollTop = 0, _scrollLeft = 0; + function init(grid) { + if (typeof Draggable == "undefined") + throw new Error('Slick.Draggable is undefined, make sure to import "slick.interactions.js"'); + options = Utils.extend(!0, {}, _defaults, options), _decorator = options.cellDecorator || new CellRangeDecorator(grid, options), _grid = grid, _canvas = _grid.getCanvasNode(), _gridOptions = _grid.getOptions(), _handler.subscribe(_grid.onScroll, handleScroll).subscribe(_grid.onDragInit, handleDragInit).subscribe(_grid.onDragStart, handleDragStart).subscribe(_grid.onDrag, handleDrag).subscribe(_grid.onDragEnd, handleDragEnd); + } + function destroy() { + _handler.unsubscribeAll(), _activeCanvas = null, _activeViewport = null, _canvas = null, _decorator && _decorator.destroy && _decorator.destroy(); + } + function getCellDecorator() { + return _decorator; + } + function handleScroll(e, args) { + _scrollTop = args.scrollTop, _scrollLeft = args.scrollLeft; + } + function handleDragInit(e) { + _activeCanvas = _grid.getActiveCanvasNode(e), _activeViewport = _grid.getActiveViewportNode(e); + var scrollbarDimensions = _grid.getDisplayedScrollbarDimensions(); + if (_viewportWidth = _activeViewport.offsetWidth - scrollbarDimensions.width, _viewportHeight = _activeViewport.offsetHeight - scrollbarDimensions.height, _moveDistanceForOneCell = { + x: _grid.getAbsoluteColumnMinWidth() / 2, + y: _grid.getOptions().rowHeight / 2 + }, _isRowMoveRegistered = hasRowMoveManager(), _rowOffset = 0, _columnOffset = 0, _isBottomCanvas = _activeCanvas.classList.contains("grid-canvas-bottom"), _gridOptions.frozenRow > -1 && _isBottomCanvas) { + let canvasSelector = `.${_grid.getUID()} .grid-canvas-${_gridOptions.frozenBottom ? "bottom" : "top"}`, canvasElm = document.querySelector(canvasSelector); + canvasElm && (_rowOffset = canvasElm.clientHeight || 0); + } + if (_isRightCanvas = _activeCanvas.classList.contains("grid-canvas-right"), _gridOptions.frozenColumn > -1 && _isRightCanvas) { + let canvasLeftElm = document.querySelector(`.${_grid.getUID()} .grid-canvas-left`); + canvasLeftElm && (_columnOffset = canvasLeftElm.clientWidth || 0); + } + e.stopImmediatePropagation(), e.preventDefault(); + } + function handleDragStart(e, dd) { + var cell = _grid.getCellFromEvent(e); + if (_self.onBeforeCellRangeSelected.notify(cell) !== !1 && _grid.canCellBeSelected(cell.row, cell.cell) && (_dragging = !0, e.stopImmediatePropagation()), !_dragging) + return; + _grid.focus(); + let canvasOffset = Utils.offset(_canvas), startX = dd.startX - (canvasOffset.left || 0); + _gridOptions.frozenColumn >= 0 && _isRightCanvas && (startX += _scrollLeft); + let startY = dd.startY - (canvasOffset.top || 0); + _gridOptions.frozenRow >= 0 && _isBottomCanvas && (startY += _scrollTop); + var start = _grid.getCellFromPoint(startX, startY); + return dd.range = { start, end: {} }, _currentlySelectedRange = dd.range, _decorator.show(new SlickRange(start.row, start.cell)); + } + function handleDrag(evt, dd) { + if (!_dragging && !_isRowMoveRegistered) + return; + _isRowMoveRegistered || evt.stopImmediatePropagation(); + let e = evt.getNativeEvent(); + if (options.autoScroll && (_draggingMouseOffset = getMouseOffsetViewport(e, dd), _draggingMouseOffset.isOutsideViewport)) + return handleDragOutsideViewport(); + stopIntervalTimer(), handleDragTo(e, dd); + } + function getMouseOffsetViewport(e, dd) { + var targetEvent = e.touches ? e.touches[0] : e, viewportLeft = _activeViewport.scrollLeft, viewportTop = _activeViewport.scrollTop, viewportRight = viewportLeft + _viewportWidth, viewportBottom = viewportTop + _viewportHeight, viewportOffset = Utils.offset(_activeViewport), viewportOffsetLeft = viewportOffset.left || 0, viewportOffsetTop = viewportOffset.top || 0, viewportOffsetRight = viewportOffsetLeft + _viewportWidth, viewportOffsetBottom = viewportOffsetTop + _viewportHeight, result = { + e, + dd, + viewport: { + left: viewportLeft, + top: viewportTop, + right: viewportRight, + bottom: viewportBottom, + offset: { + left: viewportOffsetLeft, + top: viewportOffsetTop, + right: viewportOffsetRight, + bottom: viewportOffsetBottom + } + }, + // Consider the viewport as the origin, the `offset` is based on the coordinate system: + // the cursor is on the viewport's left/bottom when it is less than 0, and on the right/top when greater than 0. + offset: { + x: 0, + y: 0 + }, + isOutsideViewport: !1 + }; + return targetEvent.pageX < viewportOffsetLeft ? result.offset.x = targetEvent.pageX - viewportOffsetLeft : targetEvent.pageX > viewportOffsetRight && (result.offset.x = targetEvent.pageX - viewportOffsetRight), targetEvent.pageY < viewportOffsetTop ? result.offset.y = viewportOffsetTop - targetEvent.pageY : targetEvent.pageY > viewportOffsetBottom && (result.offset.y = viewportOffsetBottom - targetEvent.pageY), result.isOutsideViewport = !!result.offset.x || !!result.offset.y, result; + } + function handleDragOutsideViewport() { + if (_xDelayForNextCell = options.maxIntervalToShowNextCell - Math.abs(_draggingMouseOffset.offset.x) * options.accelerateInterval, _yDelayForNextCell = options.maxIntervalToShowNextCell - Math.abs(_draggingMouseOffset.offset.y) * options.accelerateInterval, !_autoScrollTimerId) { + var xTotalDelay = 0, yTotalDelay = 0; + _autoScrollTimerId = setInterval(function() { + var xNeedUpdate = !1, yNeedUpdate = !1; + _draggingMouseOffset.offset.x ? (xTotalDelay += options.minIntervalToShowNextCell, xNeedUpdate = xTotalDelay >= _xDelayForNextCell) : xTotalDelay = 0, _draggingMouseOffset.offset.y ? (yTotalDelay += options.minIntervalToShowNextCell, yNeedUpdate = yTotalDelay >= _yDelayForNextCell) : yTotalDelay = 0, (xNeedUpdate || yNeedUpdate) && (xNeedUpdate && (xTotalDelay = 0), yNeedUpdate && (yTotalDelay = 0), handleDragToNewPosition(xNeedUpdate, yNeedUpdate)); + }, options.minIntervalToShowNextCell); + } + } + function handleDragToNewPosition(xNeedUpdate, yNeedUpdate) { + var pageX = _draggingMouseOffset.e.pageX, pageY = _draggingMouseOffset.e.pageY, mouseOffsetX = _draggingMouseOffset.offset.x, mouseOffsetY = _draggingMouseOffset.offset.y, viewportOffset = _draggingMouseOffset.viewport.offset; + xNeedUpdate && mouseOffsetX && (mouseOffsetX > 0 ? pageX = viewportOffset.right + _moveDistanceForOneCell.x : pageX = viewportOffset.left - _moveDistanceForOneCell.x), yNeedUpdate && mouseOffsetY && (mouseOffsetY > 0 ? pageY = viewportOffset.top - _moveDistanceForOneCell.y : pageY = viewportOffset.bottom + _moveDistanceForOneCell.y), handleDragTo({ + pageX, + pageY + }, _draggingMouseOffset.dd); + } + function stopIntervalTimer() { + clearInterval(_autoScrollTimerId), _autoScrollTimerId = null; + } + function handleDragTo(e, dd) { + let targetEvent = e.touches ? e.touches[0] : e, canvasOffset = Utils.offset(_activeCanvas), end = _grid.getCellFromPoint( + targetEvent.pageX - (canvasOffset && canvasOffset.left || 0) + _columnOffset, + targetEvent.pageY - (canvasOffset && canvasOffset.top || 0) + _rowOffset + ); + if (!(_gridOptions.frozenColumn >= 0 && !_isRightCanvas && end.cell > _gridOptions.frozenColumn || _isRightCanvas && end.cell <= _gridOptions.frozenColumn) && !(_gridOptions.frozenRow >= 0 && !_isBottomCanvas && end.row >= _gridOptions.frozenRow || _isBottomCanvas && end.row < _gridOptions.frozenRow)) { + if (options.autoScroll && _draggingMouseOffset) { + var endCellBox = _grid.getCellNodeBox(end.row, end.cell); + if (!endCellBox) + return; + var viewport = _draggingMouseOffset.viewport; + (endCellBox.left < viewport.left || endCellBox.right > viewport.right || endCellBox.top < viewport.top || endCellBox.bottom > viewport.bottom) && _grid.scrollCellIntoView(end.row, end.cell); + } + if (_grid.canCellBeSelected(end.row, end.cell) && dd && dd.range) { + dd.range.end = end; + var range = new SlickRange(dd.range.start.row, dd.range.start.cell, end.row, end.cell); + _decorator.show(range), _self.onCellRangeSelecting.notify({ + range + }); + } + } + } + function hasRowMoveManager() { + return !!(_grid.getPluginByName("RowMoveManager") || _grid.getPluginByName("CrossGridRowMoveManager")); + } + function handleDragEnd(e, dd) { + _dragging && (_dragging = !1, e.stopImmediatePropagation(), stopIntervalTimer(), _decorator.hide(), _self.onCellRangeSelected.notify({ + range: new SlickRange( + dd.range.start.row, + dd.range.start.cell, + dd.range.end.row, + dd.range.end.cell + ) + })); + } + function getCurrentRange() { + return _currentlySelectedRange; + } + Utils.extend(this, { + init, + destroy, + pluginName: "CellRangeSelector", + getCellDecorator, + getCurrentRange, + onBeforeCellRangeSelected: new SlickEvent(), + onCellRangeSelected: new SlickEvent(), + onCellRangeSelecting: new SlickEvent() + }); + } + window.Slick && Utils.extend(Slick, { + CellRangeSelector + }); +})(); diff --git a/dist/browser/plugins/slick.cellselectionmodel.js b/dist/browser/plugins/slick.cellselectionmodel.js new file mode 100644 index 00000000..41d7b8e5 --- /dev/null +++ b/dist/browser/plugins/slick.cellselectionmodel.js @@ -0,0 +1,95 @@ +"use strict"; +(() => { + // src/plugins/slick.cellselectionmodel.js + var SlickEvent = Slick.Event, EventData = Slick.EventData, SlickRange = Slick.Range, CellRangeSelector = Slick.CellRangeSelector, Utils = Slick.Utils; + function CellSelectionModel(options) { + var _grid, _ranges = [], _self = this, _selector; + typeof options == "undefined" || typeof options.cellRangeSelector == "undefined" ? _selector = new CellRangeSelector({ + selectionCss: { + border: "2px solid black" + } + }) : _selector = options.cellRangeSelector; + var _options, _defaults = { + selectActiveCell: !0 + }; + function init(grid) { + _options = Utils.extend(!0, {}, _defaults, options), _grid = grid, _grid.onActiveCellChanged.subscribe(handleActiveCellChange), _grid.onKeyDown.subscribe(handleKeyDown), grid.registerPlugin(_selector), _selector.onCellRangeSelected.subscribe(handleCellRangeSelected), _selector.onBeforeCellRangeSelected.subscribe(handleBeforeCellRangeSelected); + } + function destroy() { + _grid.onActiveCellChanged.unsubscribe(handleActiveCellChange), _grid.onKeyDown.unsubscribe(handleKeyDown), _selector.onCellRangeSelected.unsubscribe(handleCellRangeSelected), _selector.onBeforeCellRangeSelected.unsubscribe(handleBeforeCellRangeSelected), _grid.unregisterPlugin(_selector), _selector && _selector.destroy && _selector.destroy(); + } + function removeInvalidRanges(ranges) { + for (var result = [], i = 0; i < ranges.length; i++) { + var r = ranges[i]; + _grid.canCellBeSelected(r.fromRow, r.fromCell) && _grid.canCellBeSelected(r.toRow, r.toCell) && result.push(r); + } + return result; + } + function rangesAreEqual(range1, range2) { + var areDifferent = range1.length !== range2.length; + if (!areDifferent) { + for (var i = 0; i < range1.length; i++) + if (range1[i].fromCell !== range2[i].fromCell || range1[i].fromRow !== range2[i].fromRow || range1[i].toCell !== range2[i].toCell || range1[i].toRow !== range2[i].toRow) { + areDifferent = !0; + break; + } + } + return !areDifferent; + } + function setSelectedRanges(ranges, caller) { + if (!((!_ranges || _ranges.length === 0) && (!ranges || ranges.length === 0))) { + var rangeHasChanged = !rangesAreEqual(_ranges, ranges); + if (_ranges = removeInvalidRanges(ranges), rangeHasChanged) { + var eventData = new EventData(null, _ranges); + Object.defineProperty(eventData, "detail", { writable: !0, configurable: !0, value: { caller: caller || "SlickCellSelectionModel.setSelectedRanges" } }), _self.onSelectedRangesChanged.notify(_ranges, eventData); + } + } + } + function getSelectedRanges() { + return _ranges; + } + function refreshSelections() { + setSelectedRanges(getSelectedRanges()); + } + function handleBeforeCellRangeSelected(e) { + if (_grid.getEditorLock().isActive()) + return e.stopPropagation(), !1; + } + function handleCellRangeSelected(e, args) { + _grid.setActiveCell(args.range.fromRow, args.range.fromCell, !1, !1, !0), setSelectedRanges([args.range]); + } + function handleActiveCellChange(e, args) { + _options.selectActiveCell && args.row != null && args.cell != null ? setSelectedRanges([new SlickRange(args.row, args.cell)]) : _options.selectActiveCell || setSelectedRanges([]); + } + function handleKeyDown(e) { + var ranges, last, active = _grid.getActiveCell(), metaKey = e.ctrlKey || e.metaKey; + if (active && e.shiftKey && !metaKey && !e.altKey && (e.which == 37 || e.which == 39 || e.which == 38 || e.which == 40)) { + ranges = getSelectedRanges().slice(), ranges.length || ranges.push(new SlickRange(active.row, active.cell)), last = ranges.pop(), last.contains(active.row, active.cell) || (last = new SlickRange(active.row, active.cell)); + var dRow = last.toRow - last.fromRow, dCell = last.toCell - last.fromCell, dirRow = active.row == last.fromRow ? 1 : -1, dirCell = active.cell == last.fromCell ? 1 : -1; + e.which == 37 ? dCell -= dirCell : e.which == 39 ? dCell += dirCell : e.which == 38 ? dRow -= dirRow : e.which == 40 && (dRow += dirRow); + var new_last = new SlickRange(active.row, active.cell, active.row + dirRow * dRow, active.cell + dirCell * dCell); + if (removeInvalidRanges([new_last]).length) { + ranges.push(new_last); + var viewRow = dirRow > 0 ? new_last.toRow : new_last.fromRow, viewCell = dirCell > 0 ? new_last.toCell : new_last.fromCell; + _grid.scrollRowIntoView(viewRow), _grid.scrollCellIntoView(viewRow, viewCell); + } else + ranges.push(last); + setSelectedRanges(ranges), e.preventDefault(), e.stopPropagation(); + } + } + Utils.extend(this, { + getSelectedRanges, + setSelectedRanges, + refreshSelections, + init, + destroy, + pluginName: "CellSelectionModel", + onSelectedRangesChanged: new SlickEvent() + }); + } + window.Slick && Utils.extend(!0, window, { + Slick: { + CellSelectionModel + } + }); +})(); diff --git a/dist/browser/plugins/slick.checkboxselectcolumn.js b/dist/browser/plugins/slick.checkboxselectcolumn.js new file mode 100644 index 00000000..7f9f7752 --- /dev/null +++ b/dist/browser/plugins/slick.checkboxselectcolumn.js @@ -0,0 +1,223 @@ +"use strict"; +(() => { + // src/plugins/slick.checkboxselectcolumn.js + var BindingEventService = Slick.BindingEventService, EventHandler = Slick.EventHandler, Utils = Slick.Utils; + function CheckboxSelectColumn(options) { + let _dataView, _grid, _isUsingDataView = !1, _selectableOverride = null, _headerRowNode, _selectAll_UID = createUID(), _handler = new EventHandler(), _selectedRowsLookup = {}, _defaults = { + columnId: "_checkbox_selector", + cssClass: null, + hideSelectAllCheckbox: !1, + toolTip: "Select/Deselect All", + width: 30, + applySelectOnAllPages: !1, + // defaults to false, when that is enabled the "Select All" will be applied to all pages (when using Pagination) + hideInColumnTitleRow: !1, + hideInFilterHeaderRow: !0 + }, _isSelectAllChecked = !1, _bindingEventService = new BindingEventService(), _options = Utils.extend(!0, {}, _defaults, options); + typeof _options.selectableOverride == "function" && selectableOverride(_options.selectableOverride); + function init(grid) { + _grid = grid, _isUsingDataView = !Array.isArray(grid.getData()), _isUsingDataView && (_dataView = grid.getData()), _handler.subscribe(_grid.onSelectedRowsChanged, handleSelectedRowsChanged).subscribe(_grid.onClick, handleClick).subscribe(_grid.onKeyDown, handleKeyDown), _isUsingDataView && _dataView && _options.applySelectOnAllPages && _handler.subscribe(_dataView.onSelectedRowIdsChanged, handleDataViewSelectedIdsChanged).subscribe(_dataView.onPagingInfoChanged, handleDataViewSelectedIdsChanged), _options.hideInFilterHeaderRow || addCheckboxToFilterHeaderRow(grid), _options.hideInColumnTitleRow || _handler.subscribe(_grid.onHeaderClick, handleHeaderClick); + } + function destroy() { + _handler.unsubscribeAll(), _bindingEventService.unbindAll(); + } + function getOptions() { + return _options; + } + function setOptions(options2) { + if (_options = Utils.extend(!0, {}, _options, options2), _options.hideSelectAllCheckbox) + hideSelectAllFromColumnHeaderTitleRow(), hideSelectAllFromColumnHeaderFilterRow(); + else if (_options.hideInColumnTitleRow ? hideSelectAllFromColumnHeaderTitleRow() : (renderSelectAllCheckbox(_isSelectAllChecked), _handler.subscribe(_grid.onHeaderClick, handleHeaderClick)), _options.hideInFilterHeaderRow) + hideSelectAllFromColumnHeaderFilterRow(); + else { + let selectAllContainerElm = _headerRowNode.querySelector("#filter-checkbox-selectall-container"); + if (selectAllContainerElm) { + selectAllContainerElm.style.display = "flex"; + let selectAllInputElm = selectAllContainerElm.querySelector('input[type="checkbox"]'); + selectAllInputElm && (selectAllInputElm.checked = _isSelectAllChecked); + } + } + } + function hideSelectAllFromColumnHeaderTitleRow() { + _grid.updateColumnHeader(_options.columnId, "", ""); + } + function hideSelectAllFromColumnHeaderFilterRow() { + let selectAllContainerElm = _headerRowNode && _headerRowNode.querySelector("#filter-checkbox-selectall-container"); + selectAllContainerElm && (selectAllContainerElm.style.display = "none"); + } + function handleSelectedRowsChanged() { + let selectedRows = _grid.getSelectedRows(), lookup = {}, row, i, k, disabledCount = 0; + if (typeof _selectableOverride == "function") + for (k = 0; k < _grid.getDataLength(); k++) { + let dataItem = _grid.getDataItem(k); + checkSelectableOverride(i, dataItem, _grid) || disabledCount++; + } + let removeList = []; + for (i = 0; i < selectedRows.length; i++) { + row = selectedRows[i]; + let rowItem = _grid.getDataItem(row); + checkSelectableOverride(i, rowItem, _grid) ? (lookup[row] = !0, lookup[row] !== _selectedRowsLookup[row] && (_grid.invalidateRow(row), delete _selectedRowsLookup[row])) : removeList.push(row); + } + for (i in _selectedRowsLookup) + _grid.invalidateRow(i); + if (_selectedRowsLookup = lookup, _grid.render(), _isSelectAllChecked = selectedRows && selectedRows.length + disabledCount >= _grid.getDataLength(), (!_isUsingDataView || !_options.applySelectOnAllPages) && (!_options.hideInColumnTitleRow && !_options.hideSelectAllCheckbox && renderSelectAllCheckbox(_isSelectAllChecked), !_options.hideInFilterHeaderRow)) { + let selectAllElm = _headerRowNode && _headerRowNode.querySelector(`#header-filter-selector${_selectAll_UID}`); + selectAllElm && (selectAllElm.checked = _isSelectAllChecked); + } + if (removeList.length > 0) { + for (i = 0; i < removeList.length; i++) { + let remIdx = selectedRows.indexOf(removeList[i]); + selectedRows.splice(remIdx, 1); + } + _grid.setSelectedRows(selectedRows, "click.cleanup"); + } + } + function handleDataViewSelectedIdsChanged() { + let selectedIds = _dataView.getAllSelectedFilteredIds(), filteredItems = _dataView.getFilteredItems(), disabledCount = 0; + if (typeof _selectableOverride == "function" && selectedIds.length > 0) + for (let k = 0; k < _dataView.getItemCount(); k++) { + let dataItem = _dataView.getItemByIdx(k), idProperty = _dataView.getIdPropertyName(), dataItemId = dataItem[idProperty]; + filteredItems.findIndex(function(item) { + return item[idProperty] === dataItemId; + }) >= 0 && !checkSelectableOverride(k, dataItem, _grid) && disabledCount++; + } + if (_isSelectAllChecked = (selectedIds && selectedIds.length) + disabledCount >= filteredItems.length, !_options.hideInColumnTitleRow && !_options.hideSelectAllCheckbox && renderSelectAllCheckbox(_isSelectAllChecked), !_options.hideInFilterHeaderRow) { + let selectAllElm = _headerRowNode && _headerRowNode.querySelector(`#header-filter-selector${_selectAll_UID}`); + selectAllElm && (selectAllElm.checked = _isSelectAllChecked); + } + } + function handleKeyDown(e, args) { + e.which == 32 && _grid.getColumns()[args.cell].id === _options.columnId && ((!_grid.getEditorLock().isActive() || _grid.getEditorLock().commitCurrentEdit()) && toggleRowSelection(args.row), e.preventDefault(), e.stopImmediatePropagation()); + } + function handleClick(e, args) { + if (_grid.getColumns()[args.cell].id === _options.columnId && e.target.type === "checkbox") { + if (_grid.getEditorLock().isActive() && !_grid.getEditorLock().commitCurrentEdit()) { + e.preventDefault(), e.stopImmediatePropagation(); + return; + } + toggleRowSelection(args.row), e.stopPropagation(), e.stopImmediatePropagation(); + } + } + function toggleRowSelection(row) { + let dataContext = _grid.getDataItem(row); + if (checkSelectableOverride(row, dataContext, _grid)) { + if (_selectedRowsLookup[row]) { + let newSelectedRows = _grid.getSelectedRows().filter((n) => n !== row); + _grid.setSelectedRows(newSelectedRows, "click.toggle"); + } else + _grid.setSelectedRows(_grid.getSelectedRows().concat(row), "click.toggle"); + _grid.setActiveCell(row, getCheckboxColumnCellIndex()); + } + } + function selectRows(rowArray) { + let i, l = rowArray.length, addRows = []; + for (i = 0; i < l; i++) + _selectedRowsLookup[rowArray[i]] || (addRows[addRows.length] = rowArray[i]); + _grid.setSelectedRows(_grid.getSelectedRows().concat(addRows), "SlickCheckboxSelectColumn.selectRows"); + } + function deSelectRows(rowArray) { + let i, l = rowArray.length, removeRows = []; + for (i = 0; i < l; i++) + _selectedRowsLookup[rowArray[i]] && (removeRows[removeRows.length] = rowArray[i]); + _grid.setSelectedRows(_grid.getSelectedRows().filter((n) => removeRows.indexOf(n) < 0), "SlickCheckboxSelectColumn.deSelectRows"); + } + function handleHeaderClick(e, args) { + if (args.column.id == _options.columnId && e.target.type === "checkbox") { + if (_grid.getEditorLock().isActive() && !_grid.getEditorLock().commitCurrentEdit()) { + e.preventDefault(), e.stopImmediatePropagation(); + return; + } + let isAllSelected = e.target.checked, caller = isAllSelected ? "click.selectAll" : "click.unselectAll", rows = []; + if (isAllSelected) { + for (let i = 0; i < _grid.getDataLength(); i++) { + let rowItem = _grid.getDataItem(i); + !rowItem.__group && !rowItem.__groupTotals && checkSelectableOverride(i, rowItem, _grid) && rows.push(i); + } + isAllSelected = !0; + } + if (_isUsingDataView && _dataView && _options.applySelectOnAllPages) { + let ids = [], filteredItems = _dataView.getFilteredItems(); + for (let j = 0; j < filteredItems.length; j++) { + let dataviewRowItem = filteredItems[j]; + checkSelectableOverride(j, dataviewRowItem, _grid) && ids.push(dataviewRowItem[_dataView.getIdPropertyName()]); + } + _dataView.setSelectedIds(ids, { isRowBeingAdded: isAllSelected }); + } + _grid.setSelectedRows(rows, caller), e.stopPropagation(), e.stopImmediatePropagation(); + } + } + let _checkboxColumnCellIndex = null; + function getCheckboxColumnCellIndex() { + if (_checkboxColumnCellIndex === null) { + _checkboxColumnCellIndex = 0; + let colArr = _grid.getColumns(); + for (let i = 0; i < colArr.length; i++) + colArr[i].id == _options.columnId && (_checkboxColumnCellIndex = i); + } + return _checkboxColumnCellIndex; + } + function getColumnDefinition() { + return { + id: _options.columnId, + name: _options.hideSelectAllCheckbox || _options.hideInColumnTitleRow ? "" : "", + toolTip: _options.hideSelectAllCheckbox || _options.hideInColumnTitleRow ? "" : _options.toolTip, + field: "sel", + width: _options.width, + resizable: !1, + sortable: !1, + cssClass: _options.cssClass, + hideSelectAllCheckbox: _options.hideSelectAllCheckbox, + formatter: checkboxSelectionFormatter, + // exclude from all menus, defaults to true unless the option is provided differently by the user + excludeFromColumnPicker: typeof _options.excludeFromColumnPicker != "undefined" ? _options.excludeFromColumnPicker : !0, + excludeFromGridMenu: typeof _options.excludeFromGridMenu != "undefined" ? _options.excludeFromGridMenu : !0, + excludeFromHeaderMenu: typeof _options.excludeFromHeaderMenu != "undefined" ? _options.excludeFromHeaderMenu : !0 + }; + } + function addCheckboxToFilterHeaderRow(grid) { + _handler.subscribe(grid.onHeaderRowCellRendered, function(e, args) { + if (args.column.field === "sel") { + Utils.emptyElement(args.node); + let spanElm = document.createElement("span"); + spanElm.id = "filter-checkbox-selectall-container"; + let inputElm = document.createElement("input"); + inputElm.type = "checkbox", inputElm.id = `header-filter-selector${_selectAll_UID}`; + let labelElm = document.createElement("label"); + labelElm.htmlFor = `header-filter-selector${_selectAll_UID}`, spanElm.appendChild(inputElm), spanElm.appendChild(labelElm), args.node.appendChild(spanElm), _headerRowNode = args.node, _bindingEventService.bind(spanElm, "click", (e2) => handleHeaderClick(e2, args)); + } + }); + } + function createUID() { + return Math.round(1e7 * Math.random()); + } + function checkboxSelectionFormatter(row, cell, value, columnDef, dataContext, grid) { + let UID = createUID() + row; + return dataContext && checkSelectableOverride(row, dataContext, grid) ? _selectedRowsLookup[row] ? "" : "" : null; + } + function checkSelectableOverride(row, dataContext, grid) { + return typeof _selectableOverride == "function" ? _selectableOverride(row, dataContext, grid) : !0; + } + function renderSelectAllCheckbox(isSelectAllChecked) { + isSelectAllChecked ? _grid.updateColumnHeader(_options.columnId, "", _options.toolTip) : _grid.updateColumnHeader(_options.columnId, "", _options.toolTip); + } + function selectableOverride(overrideFn) { + _selectableOverride = overrideFn; + } + Utils.extend(this, { + init, + destroy, + pluginName: "CheckboxSelectColumn", + deSelectRows, + selectRows, + getColumnDefinition, + getOptions, + selectableOverride, + setOptions + }); + } + window.Slick && Utils.extend(!0, window, { + Slick: { + CheckboxSelectColumn + } + }); +})(); diff --git a/dist/browser/plugins/slick.contextmenu.js b/dist/browser/plugins/slick.contextmenu.js new file mode 100644 index 00000000..c88a61be --- /dev/null +++ b/dist/browser/plugins/slick.contextmenu.js @@ -0,0 +1,204 @@ +"use strict"; +(() => { + // src/plugins/slick.contextmenu.js + var BindingEventService = Slick.BindingEventService, SlickEvent = Slick.Event, EventData = Slick.EventData, EventHandler = Slick.EventHandler, Utils = Slick.Utils; + function ContextMenu(optionProperties) { + let _contextMenuProperties, _currentCell = -1, _currentRow = -1, _grid, _gridOptions, _gridUid = "", _handler = new EventHandler(), _self = this, _optionTitleElm, _commandTitleElm, _menuElm, _bindingEventService = new BindingEventService(), _defaults = { + autoAdjustDrop: !0, + // dropup/dropdown + autoAlignSide: !0, + // left/right + autoAdjustDropOffset: -4, + autoAlignSideOffset: 0, + hideMenuOnScroll: !1, + maxHeight: "none", + width: "auto", + optionShownOverColumnIds: [], + commandShownOverColumnIds: [] + }; + function init(grid) { + _grid = grid, _gridOptions = grid.getOptions(), _contextMenuProperties = Utils.extend({}, _defaults, optionProperties), _gridUid = grid && grid.getUID ? grid.getUID() : "", _handler.subscribe(_grid.onContextMenu, handleOnContextMenu), _contextMenuProperties.hideMenuOnScroll && _handler.subscribe(_grid.onScroll, destroyMenu); + } + function setOptions(newOptions) { + _contextMenuProperties = Utils.extend({}, _contextMenuProperties, newOptions), newOptions.commandShownOverColumnIds && (_contextMenuProperties.commandShownOverColumnIds = newOptions.commandShownOverColumnIds), newOptions.optionShownOverColumnIds && (_contextMenuProperties.optionShownOverColumnIds = newOptions.optionShownOverColumnIds); + } + function destroy() { + _self.onAfterMenuShow.unsubscribe(), _self.onBeforeMenuShow.unsubscribe(), _self.onBeforeMenuClose.unsubscribe(), _self.onCommand.unsubscribe(), _self.onOptionSelected.unsubscribe(), _handler.unsubscribeAll(), _bindingEventService.unbindAll(), _menuElm && _menuElm.remove && _menuElm.remove(), _commandTitleElm = null, _optionTitleElm = null, _menuElm = null; + } + function createMenu(e) { + e instanceof EventData && (e = e.getNativeEvent()); + let targetEvent = e.touches ? e.touches[0] : e, cell = _grid.getCellFromEvent(e); + _currentCell = cell && cell.cell, _currentRow = cell && cell.row; + let columnDef = _grid.getColumns()[_currentCell], dataContext = _grid.getDataItem(_currentRow), isColumnOptionAllowed = checkIsColumnAllowed(_contextMenuProperties.optionShownOverColumnIds, columnDef.id), isColumnCommandAllowed = checkIsColumnAllowed(_contextMenuProperties.commandShownOverColumnIds, columnDef.id), commandItems = _contextMenuProperties.commandItems || [], optionItems = _contextMenuProperties.optionItems || []; + if (!columnDef || !isColumnCommandAllowed && !isColumnOptionAllowed || !commandItems.length && !optionItems.length || (destroyMenu(e), _self.onBeforeMenuShow.notify({ + cell: _currentCell, + row: _currentRow, + grid: _grid + }, e, _self).getReturnValue() == !1)) + return; + let maxHeight = isNaN(_contextMenuProperties.maxHeight) ? _contextMenuProperties.maxHeight : _contextMenuProperties.maxHeight + "px", width = isNaN(_contextMenuProperties.width) ? _contextMenuProperties.width : _contextMenuProperties.width + "px"; + _menuElm = document.createElement("div"), _menuElm.className = `slick-context-menu ${_gridUid}`, _menuElm.role = "menu", _menuElm.style.width = width, _menuElm.style.maxHeight = maxHeight, _menuElm.style.top = `${targetEvent.pageY}px`, _menuElm.style.left = `${targetEvent.pageX}px`, _menuElm.style.display = "none"; + let closeButtonElm = document.createElement("button"); + closeButtonElm.type = "button", closeButtonElm.className = "close", closeButtonElm.dataset.dismiss = "slick-context-menu", closeButtonElm.ariaLabel = "Close"; + let spanCloseElm = document.createElement("span"); + if (spanCloseElm.className = "close", spanCloseElm.ariaHidden = "true", spanCloseElm.innerHTML = "×", closeButtonElm.appendChild(spanCloseElm), !_contextMenuProperties.hideOptionSection && isColumnOptionAllowed && optionItems.length > 0) { + let optionMenuElm = document.createElement("div"); + optionMenuElm.className = "slick-context-menu-option-list", optionMenuElm.role = "menu", _contextMenuProperties.hideCloseButton || (_bindingEventService.bind(closeButtonElm, "click", handleCloseButtonClicked), _menuElm.appendChild(closeButtonElm)), _menuElm.appendChild(optionMenuElm), populateOptionItems( + _contextMenuProperties, + optionMenuElm, + optionItems, + { cell: _currentCell, row: _currentRow, column: columnDef, dataContext, grid: _grid } + ); + } + if (!_contextMenuProperties.hideCommandSection && isColumnCommandAllowed && commandItems.length > 0) { + let commandMenuElm = document.createElement("div"); + commandMenuElm.className = "slick-context-menu-command-list", commandMenuElm.role = "menu", !_contextMenuProperties.hideCloseButton && (!isColumnOptionAllowed || optionItems.length === 0 || _contextMenuProperties.hideOptionSection) && (_bindingEventService.bind(closeButtonElm, "click", handleCloseButtonClicked), _menuElm.appendChild(closeButtonElm)), _menuElm.appendChild(commandMenuElm), populateCommandItems( + _contextMenuProperties, + commandMenuElm, + commandItems, + { cell: _currentCell, row: _currentRow, column: columnDef, dataContext, grid: _grid } + ); + } + if (_menuElm.style.display = "block", document.body.appendChild(_menuElm), _self.onAfterMenuShow.notify({ + cell: _currentCell, + row: _currentRow, + grid: _grid + }, e, _self).getReturnValue() != !1) + return _menuElm; + } + function handleCloseButtonClicked(e) { + e.defaultPrevented || destroyMenu(e); + } + function destroyMenu(e, args) { + if (_menuElm = _menuElm || document.querySelector(".slick-context-menu." + _gridUid), _menuElm && _menuElm.remove) { + if (_self.onBeforeMenuClose.notify({ + cell: args && args.cell, + row: args && args.row, + grid: _grid, + menu: _menuElm + }, e, _self).getReturnValue() == !1) + return; + _menuElm.remove(), _menuElm = null; + } + } + function checkIsColumnAllowed(columnIds, columnId) { + let isAllowedColumn = !1; + if (columnIds && columnIds.length > 0) + for (let o = 0, ln = columnIds.length; o < ln; o++) + columnIds[o] === columnId && (isAllowedColumn = !0); + else + isAllowedColumn = !0; + return isAllowedColumn; + } + function handleOnContextMenu(e, args) { + e instanceof EventData && (e = e.getNativeEvent()), e.preventDefault(); + let cell = _grid.getCellFromEvent(e), columnDef = _grid.getColumns()[cell.cell], dataContext = _grid.getDataItem(cell.row); + args || (args = {}), args.cell = cell.cell, args.row = cell.row, args.columnDef = columnDef, args.dataContext = dataContext, args.grid = _grid, runOverrideFunctionWhenExists(_contextMenuProperties.menuUsabilityOverride, args) && (_menuElm = createMenu(e, args), _menuElm && (repositionMenu(e), _menuElm.style.display = "block"), _bindingEventService.bind(document.body, "click", (e2) => { + e2.defaultPrevented || destroyMenu(e2, { cell: _currentCell, row: _currentRow }); + })); + } + function populateOptionItems(contextMenu, optionMenuElm, optionItems, args) { + if (!(!args || !optionItems || !contextMenu)) { + contextMenu && contextMenu.optionTitle && (_optionTitleElm = document.createElement("div"), _optionTitleElm.className = "title", _optionTitleElm.textContent = contextMenu.optionTitle, optionMenuElm.appendChild(_optionTitleElm)); + for (let i = 0, ln = optionItems.length; i < ln; i++) { + let addClickListener = !0, item = optionItems[i], isItemVisible = runOverrideFunctionWhenExists(item.itemVisibilityOverride, args), isItemUsable = runOverrideFunctionWhenExists(item.itemUsabilityOverride, args); + if (!isItemVisible) + continue; + Object.prototype.hasOwnProperty.call(item, "itemUsabilityOverride") && (item.disabled = !isItemUsable); + let liElm = document.createElement("div"); + liElm.className = "slick-context-menu-item", liElm.role = "menuitem", (item.divider || item === "divider") && (liElm.classList.add("slick-context-menu-item-divider"), addClickListener = !1), (item.disabled || !isItemUsable) && liElm.classList.add("slick-context-menu-item-disabled"), item.hidden && liElm.classList.add("slick-context-menu-item-hidden"), item.cssClass && liElm.classList.add(...item.cssClass.split(" ")), item.tooltip && (liElm.title = item.tooltip); + let iconElm = document.createElement("div"); + iconElm.role = "button", iconElm.className = "slick-context-menu-icon", liElm.appendChild(iconElm), item.iconCssClass && iconElm.classList.add(...item.iconCssClass.split(" ")), item.iconImage && (iconElm.style.backgroundImage = "url(" + item.iconImage + ")"); + let textElm = document.createElement("span"); + textElm.className = "slick-context-menu-content", textElm.textContent = item.title, liElm.appendChild(textElm), item.textCssClass && textElm.classList.add(...item.textCssClass.split(" ")), optionMenuElm.appendChild(liElm), addClickListener && _bindingEventService.bind(liElm, "click", handleMenuItemOptionClick.bind(this, item)); + } + } + } + function populateCommandItems(contextMenu, commandMenuElm, commandItems, args) { + if (!(!args || !commandItems || !contextMenu)) { + contextMenu && contextMenu.commandTitle && (_commandTitleElm = document.createElement("div"), _commandTitleElm.className = "title", _commandTitleElm.textContent = contextMenu.commandTitle, commandMenuElm.appendChild(_commandTitleElm)); + for (let i = 0, ln = commandItems.length; i < ln; i++) { + let addClickListener = !0, item = commandItems[i], isItemVisible = runOverrideFunctionWhenExists(item.itemVisibilityOverride, args), isItemUsable = runOverrideFunctionWhenExists(item.itemUsabilityOverride, args); + if (!isItemVisible) + continue; + Object.prototype.hasOwnProperty.call(item, "itemUsabilityOverride") && (item.disabled = !isItemUsable); + let liElm = document.createElement("div"); + liElm.className = "slick-context-menu-item", liElm.role = "menuitem", (item.divider || item === "divider") && (liElm.classList.add("slick-context-menu-item-divider"), addClickListener = !1), (item.disabled || !isItemUsable) && liElm.classList.add("slick-context-menu-item-disabled"), item.hidden && liElm.classList.add("slick-context-menu-item-hidden"), item.cssClass && liElm.classList.add(...item.cssClass.split(" ")), item.tooltip && (liElm.title = item.tooltip); + let iconElm = document.createElement("div"); + iconElm.className = "slick-context-menu-icon", liElm.appendChild(iconElm), item.iconCssClass && iconElm.classList.add(...item.iconCssClass.split(" ")), item.iconImage && (iconElm.style.backgroundImage = "url(" + item.iconImage + ")"); + let textElm = document.createElement("span"); + textElm.className = "slick-context-menu-content", textElm.textContent = item.title, liElm.appendChild(textElm), item.textCssClass && textElm.classList.add(...item.textCssClass.split(" ")), commandMenuElm.appendChild(liElm), addClickListener && _bindingEventService.bind(liElm, "click", handleMenuItemCommandClick.bind(this, item)); + } + } + } + function handleMenuItemCommandClick(item, e) { + if (!item || item.disabled || item.divider) + return; + let command = item.command || "", row = _currentRow, cell = _currentCell, columnDef = _grid.getColumns()[cell], dataContext = _grid.getDataItem(row), cellValue; + if (Object.prototype.hasOwnProperty.call(dataContext, columnDef && columnDef.field) && (cellValue = dataContext[columnDef.field]), command != null && command !== "") { + let callbackArgs = { + cell, + row, + grid: _grid, + command, + item, + column: columnDef, + dataContext, + value: cellValue + }; + _self.onCommand.notify(callbackArgs, e, _self), typeof item.action == "function" && item.action.call(this, e, callbackArgs); + } + } + function handleMenuItemOptionClick(item, e) { + if (item.disabled || item.divider || !_grid.getEditorLock().commitCurrentEdit()) + return; + let option = item.option !== void 0 ? item.option : "", row = _currentRow, cell = _currentCell, columnDef = _grid.getColumns()[cell], dataContext = _grid.getDataItem(row); + if (option !== void 0) { + let callbackArgs = { + cell, + row, + grid: _grid, + option, + item, + column: columnDef, + dataContext + }; + _self.onOptionSelected.notify(callbackArgs, e, _self), typeof item.action == "function" && item.action.call(this, e, callbackArgs); + } + } + function repositionMenu(e) { + let targetEvent = e.touches ? e.touches[0] : e, parentElm = e.target.closest(".slick-cell"), menuOffsetLeft = targetEvent.pageX, menuOffsetTop = parentElm ? Utils.offset(parentElm).top : targetEvent.pageY, menuHeight = _menuElm && _menuElm.offsetHeight || 0, menuWidth = _menuElm && _menuElm.offsetWidth || _contextMenuProperties.width || 0, rowHeight = _gridOptions.rowHeight, dropOffset = _contextMenuProperties.autoAdjustDropOffset, sideOffset = _contextMenuProperties.autoAlignSideOffset; + if (_contextMenuProperties.autoAdjustDrop) { + let spaceBottom = Utils.calculateAvailableSpace(parentElm).bottom, spaceTop = Utils.calculateAvailableSpace(parentElm).top, spaceBottomRemaining = spaceBottom + dropOffset - rowHeight, spaceTopRemaining = spaceTop - dropOffset + rowHeight; + (spaceBottomRemaining < menuHeight && spaceTopRemaining > spaceBottomRemaining ? "top" : "bottom") === "top" ? (_menuElm.classList.remove("dropdown"), _menuElm.classList.add("dropup"), menuOffsetTop = menuOffsetTop - menuHeight - dropOffset) : (_menuElm.classList.remove("dropup"), _menuElm.classList.add("dropdown"), menuOffsetTop = menuOffsetTop + rowHeight + dropOffset); + } + if (_contextMenuProperties.autoAlignSide) { + let gridPos = _grid.getGridPosition(); + (menuOffsetLeft + menuWidth >= gridPos.width ? "left" : "right") === "left" ? (_menuElm.classList.remove("dropright"), _menuElm.classList.add("dropleft"), menuOffsetLeft = menuOffsetLeft - menuWidth - sideOffset) : (_menuElm.classList.remove("dropleft"), _menuElm.classList.add("dropright"), menuOffsetLeft = menuOffsetLeft + sideOffset); + } + _menuElm.style.top = `${menuOffsetTop}px`, _menuElm.style.left = `${menuOffsetLeft}px`; + } + function runOverrideFunctionWhenExists(overrideFn, args) { + return typeof overrideFn == "function" ? overrideFn.call(this, args) : !0; + } + Utils.extend(this, { + init, + closeMenu: destroyMenu, + destroy, + pluginName: "ContextMenu", + setOptions, + onAfterMenuShow: new SlickEvent(), + onBeforeMenuShow: new SlickEvent(), + onBeforeMenuClose: new SlickEvent(), + onCommand: new SlickEvent(), + onOptionSelected: new SlickEvent() + }); + } + window.Slick && Utils.extend(!0, window, { + Slick: { + Plugins: { + ContextMenu + } + } + }); +})(); diff --git a/dist/browser/plugins/slick.crossgridrowmovemanager.js b/dist/browser/plugins/slick.crossgridrowmovemanager.js new file mode 100644 index 00000000..0fcbec0b --- /dev/null +++ b/dist/browser/plugins/slick.crossgridrowmovemanager.js @@ -0,0 +1,125 @@ +"use strict"; +(() => { + // src/plugins/slick.crossgridrowmovemanager.js + var SlickEvent = Slick.Event, EventHandler = Slick.EventHandler, Utils = Slick.Utils; + function CrossGridRowMoveManager(options) { + var _grid, _canvas, _toGrid, _toCanvas, _dragging, _self = this, _usabilityOverride = null, _handler = new EventHandler(), _defaults = { + columnId: "_move", + cssClass: null, + cancelEditOnDrag: !1, + disableRowSelection: !1, + hideRowMoveShadow: !0, + rowMoveShadowMarginTop: 0, + rowMoveShadowMarginLeft: 0, + rowMoveShadowOpacity: 0.95, + rowMoveShadowScale: 0.75, + singleRowMove: !1, + width: 40 + }; + options && typeof options.usabilityOverride == "function" && usabilityOverride(options.usabilityOverride); + function init(grid) { + options = Utils.extend(!0, {}, _defaults, options), _grid = grid, _canvas = _grid.getCanvasNode(), _toGrid = options.toGrid, _toCanvas = _toGrid.getCanvasNode(), _handler.subscribe(_grid.onDragInit, handleDragInit).subscribe(_grid.onDragStart, handleDragStart).subscribe(_grid.onDrag, handleDrag).subscribe(_grid.onDragEnd, handleDragEnd); + } + function destroy() { + _handler.unsubscribeAll(); + } + function setOptions(newOptions) { + options = Utils.extend({}, options, newOptions); + } + function handleDragInit(e) { + e.stopImmediatePropagation(); + } + function handleDragStart(e, dd) { + var cell = _grid.getCellFromEvent(e), currentRow = cell && cell.row, dataContext = _grid.getDataItem(currentRow); + if (checkUsabilityOverride(currentRow, dataContext, _grid)) { + if (options.cancelEditOnDrag && _grid.getEditorLock().isActive() && _grid.getEditorLock().cancelCurrentEdit(), _grid.getEditorLock().isActive() || !isHandlerColumn(cell.cell)) + return !1; + if (_dragging = !0, e.stopImmediatePropagation(), !options.hideRowMoveShadow) { + let cellNodeElm = _grid.getCellNode(cell.row, cell.cell), slickRowElm = cellNodeElm && cellNodeElm.closest(".slick-row"); + slickRowElm && (dd.clonedSlickRow = slickRowElm.cloneNode(!0), dd.clonedSlickRow.classList.add("slick-reorder-shadow-row"), dd.clonedSlickRow.style.display = "none", dd.clonedSlickRow.style.marginLeft = Number(options.rowMoveShadowMarginLeft || 0) + "px", dd.clonedSlickRow.style.marginTop = Number(options.rowMoveShadowMarginTop || 0) + "px", dd.clonedSlickRow.style.opacity = `${options.rowMoveShadowOpacity || 0.95}`, dd.clonedSlickRow.style.transform = `scale(${options.rowMoveShadowScale || 0.75})`, _canvas.appendChild(dd.clonedSlickRow)); + } + var selectedRows = options.singleRowMove ? [cell.row] : _grid.getSelectedRows(); + (selectedRows.length === 0 || !selectedRows.some((selectedRow) => selectedRow === cell.row)) && (selectedRows = [cell.row], options.disableRowSelection || _grid.setSelectedRows(selectedRows)), selectedRows.sort(function(a, b) { + return a - b; + }); + var rowHeight = _grid.getOptions().rowHeight; + dd.fromGrid = _grid, dd.toGrid = _toGrid, dd.selectedRows = selectedRows, dd.selectionProxy = document.createElement("div"), dd.selectionProxy.className = "slick-reorder-proxy", dd.selectionProxy.style.display = "none", dd.selectionProxy.style.position = "absolute", dd.selectionProxy.style.zIndex = "99999", dd.selectionProxy.style.width = `${_toCanvas.clientWidth}px`, dd.selectionProxy.style.height = `${rowHeight * selectedRows.length}px`, _toCanvas.appendChild(dd.selectionProxy), dd.guide = document.createElement("div"), dd.guide.className = "slick-reorder-guide", dd.guide.style.position = "absolute", dd.guide.style.zIndex = "99999", dd.guide.style.width = `${_toCanvas.clientWidth}px`, dd.guide.style.top = "-1000px", _toCanvas.appendChild(dd.guide), dd.insertBefore = -1; + } + } + function handleDrag(evt, dd) { + if (!_dragging) + return; + evt.stopImmediatePropagation(); + let e = evt.getNativeEvent(); + var targetEvent = e.touches ? e.touches[0] : e; + let top = targetEvent.pageY - (Utils.offset(_toCanvas).top || 0); + dd.selectionProxy.style.top = `${top - 5}px`, dd.selectionProxy.style.display = "block", dd.clonedSlickRow && (dd.clonedSlickRow.style.top = `${top - 6}px`, dd.clonedSlickRow.style.display = "block"); + var insertBefore = Math.max(0, Math.min(Math.round(top / _toGrid.getOptions().rowHeight), _toGrid.getDataLength())); + if (insertBefore !== dd.insertBefore) { + var eventData = { + fromGrid: _grid, + toGrid: _toGrid, + rows: dd.selectedRows, + insertBefore + }; + if (_self.onBeforeMoveRows.notify(eventData).getReturnValue() === !1 ? dd.canMove = !1 : dd.canMove = !0, _usabilityOverride && dd.canMove) { + var insertBeforeDataContext = _toGrid.getDataItem(insertBefore); + dd.canMove = checkUsabilityOverride(insertBefore, insertBeforeDataContext, _toGrid); + } + dd.canMove ? dd.guide.style.top = `${insertBefore * (_toGrid.getOptions().rowHeight || 0)}px` : dd.guide.style.top = "-1000px", dd.insertBefore = insertBefore; + } + } + function handleDragEnd(e, dd) { + if (_dragging && (_dragging = !1, e.stopImmediatePropagation(), dd.guide.remove(), dd.selectionProxy.remove(), dd.clonedSlickRow && (dd.clonedSlickRow.remove(), dd.clonedSlickRow = null), dd.canMove)) { + var eventData = { + fromGrid: _grid, + toGrid: _toGrid, + rows: dd.selectedRows, + insertBefore: dd.insertBefore + }; + _self.onMoveRows.notify(eventData); + } + } + function getColumnDefinition() { + return { + id: options.columnId || "_move", + name: "", + field: "move", + width: options.width || 40, + behavior: "selectAndMove", + selectable: !1, + resizable: !1, + cssClass: options.cssClass, + formatter: moveIconFormatter + }; + } + function moveIconFormatter(row, cell, value, columnDef, dataContext, grid) { + return checkUsabilityOverride(row, dataContext, grid) ? { addClasses: "cell-reorder dnd", text: "" } : null; + } + function checkUsabilityOverride(row, dataContext, grid) { + return typeof _usabilityOverride == "function" ? _usabilityOverride(row, dataContext, grid) : !0; + } + function usabilityOverride(overrideFn) { + _usabilityOverride = overrideFn; + } + function isHandlerColumn(columnIndex) { + return /move|selectAndMove/.test(_grid.getColumns()[columnIndex].behavior); + } + Utils.extend(this, { + onBeforeMoveRows: new SlickEvent(), + onMoveRows: new SlickEvent(), + init, + destroy, + getColumnDefinition, + setOptions, + usabilityOverride, + isHandlerColumn, + pluginName: "CrossGridRowMoveManager" + }); + } + window.Slick && Utils.extend(!0, window, { + Slick: { + CrossGridRowMoveManager + } + }); +})(); diff --git a/dist/browser/plugins/slick.customtooltip.js b/dist/browser/plugins/slick.customtooltip.js new file mode 100644 index 00000000..5298b20d --- /dev/null +++ b/dist/browser/plugins/slick.customtooltip.js @@ -0,0 +1,184 @@ +"use strict"; +(() => { + // src/plugins/slick.customtooltip.js + var EventHandler = Slick.EventHandler, Utils = Slick.Utils; + function CustomTooltip(options) { + var _cancellablePromise, _cellNodeElm, _dataView, _grid, _gridOptions, _tooltipElm, _defaults = { + className: "slick-custom-tooltip", + offsetLeft: 0, + offsetRight: 0, + offsetTopBottom: 4, + hideArrow: !1, + tooltipTextMaxLength: 700, + regularTooltipWhiteSpace: "pre-line", + whiteSpace: "normal" + }, _eventHandler = new EventHandler(), _cellTooltipOptions = {}, _options; + function init(grid) { + _grid = grid; + var _data = grid && grid.getData() || []; + _dataView = Array.isArray(_data) ? null : _data, _gridOptions = grid.getOptions() || {}, _options = Utils.extend(!0, {}, _defaults, _gridOptions.customTooltip, options), _eventHandler.subscribe(grid.onMouseEnter, handleOnMouseEnter).subscribe(grid.onHeaderMouseEnter, handleOnHeaderMouseEnter).subscribe(grid.onHeaderRowMouseEnter, handleOnHeaderRowMouseEnter).subscribe(grid.onMouseLeave, hideTooltip).subscribe(grid.onHeaderMouseLeave, hideTooltip).subscribe(grid.onHeaderRowMouseLeave, hideTooltip); + } + function destroy() { + hideTooltip(), _eventHandler.unsubscribeAll(); + } + function handleOnHeaderMouseEnter(e, args) { + handleOnHeaderMouseEnterByType(e, args, "slick-header-column"); + } + function handleOnHeaderRowMouseEnter(e, args) { + handleOnHeaderMouseEnterByType(e, args, "slick-headerrow-column"); + } + function handleOnHeaderMouseEnterByType(e, args, selector) { + hideTooltip(); + var cell = { + row: -1, + // negative row to avoid pulling any dataContext while rendering + cell: _grid.getColumns().findIndex(function(col) { + return args && args.column && args.column.id === col.id; + }) + }, columnDef = args.column, item = {}, isHeaderRowType = selector === "slick-headerrow-column"; + if (args || (args = {}), args.cell = cell.cell, args.row = cell.row, args.columnDef = columnDef, args.dataContext = item, args.grid = _grid, args.type = isHeaderRowType ? "header-row" : "header", _cellTooltipOptions = Utils.extend(!0, {}, _options, columnDef.customTooltip), !(columnDef && columnDef.disableTooltip || !runOverrideFunctionWhenExists(_cellTooltipOptions.usabilityOverride, args)) && columnDef && e.target) { + _cellNodeElm = findClosestHeaderNode(e.target, selector); + var formatter = isHeaderRowType ? _cellTooltipOptions.headerRowFormatter : _cellTooltipOptions.headerFormatter; + if (_cellTooltipOptions.useRegularTooltip || !formatter) { + var formatterOrText = isHeaderRowType ? _cellTooltipOptions.useRegularTooltip ? null : formatter : columnDef.name; + renderRegularTooltip(formatterOrText, cell, null, columnDef, item); + } else + _cellNodeElm && typeof formatter == "function" && renderTooltipFormatter(formatter, cell, null, columnDef, item); + } + } + function findClosestHeaderNode(elm, selector) { + return typeof elm.closest == "function" ? elm.closest("." + selector) : elm.classList.contains(selector) ? elm : elm.parentElement.classList.contains(selector) ? elm.parentElement : null; + } + function handleOnMouseEnter(e, args) { + if (hideTooltip(), _grid && e) { + var cell = _grid.getCellFromEvent(e); + if (cell) { + var item = _dataView ? _dataView.getItem(cell.row) : _grid.getDataItem(cell.row), columnDef = _grid.getColumns()[cell.cell]; + if (_cellNodeElm = _grid.getCellNode(cell.row, cell.cell), _cellTooltipOptions = Utils.extend(!0, {}, _options, columnDef.customTooltip), item && columnDef) { + if (args || (args = {}), args.cell = cell.cell, args.row = cell.row, args.columnDef = columnDef, args.dataContext = item, args.grid = _grid, args.type = "cell", columnDef && columnDef.disableTooltip || !runOverrideFunctionWhenExists(_cellTooltipOptions.usabilityOverride, args)) + return; + var value = item.hasOwnProperty(columnDef.field) ? item[columnDef.field] : null; + if (_cellTooltipOptions.useRegularTooltip || !_cellTooltipOptions.formatter) + renderRegularTooltip(columnDef.formatter, cell, value, columnDef, item); + else if (typeof _cellTooltipOptions.formatter == "function" && renderTooltipFormatter(_cellTooltipOptions.formatter, cell, value, columnDef, item), typeof _cellTooltipOptions.asyncProcess == "function") { + var asyncProcess = _cellTooltipOptions.asyncProcess(cell.row, cell.cell, value, columnDef, item, _grid); + if (!_cellTooltipOptions.asyncPostFormatter) + throw new Error('[SlickGrid] when using "asyncProcess", you must also provide an "asyncPostFormatter" formatter'); + asyncProcess instanceof Promise && (_cancellablePromise = cancellablePromise(asyncProcess), _cancellablePromise.promise.then(function(asyncResult) { + asyncProcessCallback(asyncResult, cell, value, columnDef, item); + }).catch(function(error) { + if (!error.isPromiseCancelled) + throw error; + })); + } + } + } + } + } + function findFirstElementAttribute(inputElm, attributes) { + if (inputElm) { + var outputAttrData; + return attributes.forEach(function(attribute) { + var attrData = inputElm.getAttribute(attribute); + attrData && (outputAttrData = attrData); + }), outputAttrData; + } + return null; + } + function renderRegularTooltip(formatterOrText, cell, value, columnDef, item) { + var tmpDiv = document.createElement("div"); + tmpDiv.innerHTML = parseFormatterAndSanitize(formatterOrText, cell, value, columnDef, item); + var tooltipText = columnDef.toolTip || "", tmpTitleElm; + tooltipText || (_cellNodeElm && _cellNodeElm.clientWidth < _cellNodeElm.scrollWidth && !_cellTooltipOptions.useRegularTooltipFromFormatterOnly ? (tooltipText = (_cellNodeElm.textContent || "").trim() || "", _cellTooltipOptions.tooltipTextMaxLength && tooltipText.length > _cellTooltipOptions.tooltipTextMaxLength && (tooltipText = tooltipText.substring(0, _cellTooltipOptions.tooltipTextMaxLength - 3) + "..."), tmpTitleElm = _cellNodeElm) : (_cellTooltipOptions.useRegularTooltipFromFormatterOnly ? tmpTitleElm = tmpDiv.querySelector("[title], [data-slick-tooltip]") : (tmpTitleElm = findFirstElementAttribute(_cellNodeElm, ["title", "data-slick-tooltip"]) ? _cellNodeElm : tmpDiv.querySelector("[title], [data-slick-tooltip]"), (!tmpTitleElm || !findFirstElementAttribute(tmpTitleElm, ["title", "data-slick-tooltip"])) && _cellNodeElm && (tmpTitleElm = _cellNodeElm.querySelector("[title], [data-slick-tooltip]"))), (!tooltipText || typeof formatterOrText == "function" && _cellTooltipOptions.useRegularTooltipFromFormatterOnly) && (tooltipText = findFirstElementAttribute(tmpTitleElm, ["title", "data-slick-tooltip"]) || ""))), tooltipText !== "" && renderTooltipFormatter(formatterOrText, cell, value, columnDef, item, tooltipText), swapAndClearTitleAttribute(tmpTitleElm, tooltipText); + } + function swapAndClearTitleAttribute(inputTitleElm, tooltipText) { + var titleElm = inputTitleElm || _cellNodeElm && (_cellNodeElm.hasAttribute("title") && _cellNodeElm.getAttribute("title") ? _cellNodeElm : _cellNodeElm.querySelector("[title]")); + titleElm && (titleElm.setAttribute("data-slick-tooltip", tooltipText || ""), titleElm.hasAttribute("title") && titleElm.setAttribute("title", "")); + } + function asyncProcessCallback(asyncResult, cell, value, columnDef, dataContext) { + hideTooltip(); + var itemWithAsyncData = Utils.extend(!0, {}, dataContext, { [_cellTooltipOptions.asyncParamsPropName || "__params"]: asyncResult }); + renderTooltipFormatter(_cellTooltipOptions.asyncPostFormatter, cell, value, columnDef, itemWithAsyncData); + } + function calculateAvailableSpaceTop(element) { + var availableSpace = 0, pageScrollTop = windowScrollPosition().top, elmOffset = getHtmlElementOffset(element); + if (elmOffset) { + var elementOffsetTop = elmOffset.top; + availableSpace = elementOffsetTop - pageScrollTop; + } + return availableSpace; + } + function cancellablePromise(inputPromise) { + var hasCancelled = !1; + return inputPromise instanceof Promise ? { + promise: inputPromise.then(function(result) { + if (hasCancelled) + throw { isPromiseCancelled: !0 }; + return result; + }), + cancel: function() { + hasCancelled = !0; + } + } : inputPromise; + } + function windowScrollPosition() { + return { + left: window.pageXOffset || document.documentElement.scrollLeft || 0, + top: window.pageYOffset || document.documentElement.scrollTop || 0 + }; + } + function getHtmlElementOffset(element) { + if (element) { + var rect = element.getBoundingClientRect(), top = 0, left = 0, bottom = 0, right = 0; + return rect.top !== void 0 && rect.left !== void 0 && (top = rect.top + window.pageYOffset, left = rect.left + window.pageXOffset, right = rect.right, bottom = rect.bottom), { top, left, bottom, right }; + } + } + function hideTooltip() { + _cancellablePromise && _cancellablePromise.cancel && _cancellablePromise.cancel(); + var prevTooltip = document.body.querySelector("." + _cellTooltipOptions.className + "." + _grid.getUID()); + prevTooltip && prevTooltip.remove && prevTooltip.remove(); + } + function reposition(cell) { + if (_tooltipElm) { + _cellNodeElm = _cellNodeElm || _grid.getCellNode(cell.row, cell.cell); + var cellPosition = getHtmlElementOffset(_cellNodeElm), cellContainerWidth = _cellNodeElm.offsetWidth, calculatedTooltipHeight = _tooltipElm.getBoundingClientRect().height, calculatedTooltipWidth = _tooltipElm.getBoundingClientRect().width, calculatedBodyWidth = document.body.offsetWidth || window.innerWidth, newPositionTop = cellPosition.top - _tooltipElm.offsetHeight - (_cellTooltipOptions.offsetTopBottom || 0), newPositionLeft = (cellPosition && cellPosition.left || 0) - (_cellTooltipOptions.offsetRight || 0), position = _cellTooltipOptions.position || "auto"; + position === "center" ? (newPositionLeft += cellContainerWidth / 2 - calculatedTooltipWidth / 2 + (_cellTooltipOptions.offsetRight || 0), _tooltipElm.classList.remove("arrow-left-align"), _tooltipElm.classList.remove("arrow-right-align"), _tooltipElm.classList.add("arrow-center-align")) : position === "right-align" || (position === "auto" || position !== "left-align") && newPositionLeft + calculatedTooltipWidth > calculatedBodyWidth ? (newPositionLeft -= calculatedTooltipWidth - cellContainerWidth - (_cellTooltipOptions.offsetLeft || 0), _tooltipElm.classList.remove("arrow-center-align"), _tooltipElm.classList.remove("arrow-left-align"), _tooltipElm.classList.add("arrow-right-align")) : (_tooltipElm.classList.remove("arrow-center-align"), _tooltipElm.classList.remove("arrow-right-align"), _tooltipElm.classList.add("arrow-left-align")), position === "bottom" || position === "auto" && calculatedTooltipHeight > calculateAvailableSpaceTop(_cellNodeElm) ? (newPositionTop = cellPosition.top + (_gridOptions.rowHeight || 0) + (_cellTooltipOptions.offsetTopBottom || 0), _tooltipElm.classList.remove("arrow-down"), _tooltipElm.classList.add("arrow-up")) : (_tooltipElm.classList.add("arrow-down"), _tooltipElm.classList.remove("arrow-up")), _tooltipElm.style.top = newPositionTop + "px", _tooltipElm.style.left = newPositionLeft + "px"; + } + } + function parseFormatterAndSanitize(formatterOrText, cell, value, columnDef, item) { + if (typeof formatterOrText == "function") { + var tooltipText = formatterOrText(cell.row, cell.cell, value, columnDef, item, _grid), formatterText = typeof tooltipText == "object" && tooltipText && tooltipText.text ? tooltipText.text : typeof tooltipText == "string" ? tooltipText : ""; + return _grid.sanitizeHtmlString(formatterText); + } else if (typeof formatterOrText == "string") + return _grid.sanitizeHtmlString(formatterOrText); + return ""; + } + function renderTooltipFormatter(formatter, cell, value, columnDef, item, tooltipText, inputTitleElm) { + _tooltipElm = document.createElement("div"), _tooltipElm.className = _cellTooltipOptions.className, _tooltipElm.classList.add(_grid.getUID()), _tooltipElm.classList.add("l" + cell.cell), _tooltipElm.classList.add("r" + cell.cell); + var outputText = tooltipText || parseFormatterAndSanitize(formatter, cell, value, columnDef, item) || ""; + outputText = _cellTooltipOptions.tooltipTextMaxLength && outputText.length > _cellTooltipOptions.tooltipTextMaxLength ? outputText.substring(0, _cellTooltipOptions.tooltipTextMaxLength - 3) + "..." : outputText; + let finalOutputText = ""; + !tooltipText || _cellTooltipOptions && _cellTooltipOptions.renderRegularTooltipAsHtml ? (finalOutputText = _grid.sanitizeHtmlString(outputText), _tooltipElm.innerHTML = finalOutputText, _tooltipElm.style.whiteSpace = _cellTooltipOptions && _cellTooltipOptions.whiteSpace || _defaults.whiteSpace) : (finalOutputText = outputText || "", _tooltipElm.textContent = finalOutputText, _tooltipElm.style.whiteSpace = _cellTooltipOptions && _cellTooltipOptions.regularTooltipWhiteSpace || _defaults.regularTooltipWhiteSpace), _cellTooltipOptions.maxHeight && (_tooltipElm.style.maxHeight = _cellTooltipOptions.maxHeight + "px"), _cellTooltipOptions.maxWidth && (_tooltipElm.style.maxWidth = _cellTooltipOptions.maxWidth + "px"), finalOutputText && (document.body.appendChild(_tooltipElm), reposition(cell), _cellTooltipOptions.hideArrow || _tooltipElm.classList.add("tooltip-arrow"), swapAndClearTitleAttribute(inputTitleElm, outputText)); + } + function runOverrideFunctionWhenExists(overrideFn, args) { + return typeof overrideFn == "function" ? overrideFn.call(this, args) : !0; + } + function setOptions(newOptions) { + _options = Utils.extend({}, _options, newOptions); + } + Utils.extend(this, { + init, + destroy, + hide: hideTooltip, + setOptions, + pluginName: "CustomTooltip" + }); + } + window.Slick && Utils.extend(!0, window, { + Slick: { + Plugins: { + CustomTooltip + } + } + }); +})(); diff --git a/dist/browser/plugins/slick.draggablegrouping.js b/dist/browser/plugins/slick.draggablegrouping.js new file mode 100644 index 00000000..ea6370cc --- /dev/null +++ b/dist/browser/plugins/slick.draggablegrouping.js @@ -0,0 +1,191 @@ +"use strict"; +(() => { + // src/plugins/slick.draggablegrouping.js + var BindingEventService = Slick.BindingEventService, SlickEvent = Slick.Event, EventHandler = Slick.EventHandler, Utils = Slick.Utils; + function DraggableGrouping(options) { + var _grid, _gridUid, _gridColumns, _dataView, _dropzoneElm, _droppableInstance, dropzonePlaceholder, groupToggler, _defaults = {}, onGroupChanged = new SlickEvent(), _bindingEventService = new BindingEventService(), _handler = new EventHandler(), _sortableLeftInstance, _sortableRightInstance; + function init(grid) { + options = Utils.extend(!0, {}, _defaults, options), _grid = grid, _gridUid = _grid.getUID(), _gridColumns = _grid.getColumns(), _dataView = _grid.getData(), _dropzoneElm = grid.getPreHeaderPanel(), _dropzoneElm.classList.add("slick-dropzone"); + var dropPlaceHolderText = options.dropPlaceHolderText || "Drop a column header here to group by the column"; + dropzonePlaceholder = document.createElement("div"), dropzonePlaceholder.className = "slick-placeholder", dropzonePlaceholder.textContent = dropPlaceHolderText, groupToggler = document.createElement("div"), groupToggler.className = "slick-group-toggle-all expanded", groupToggler.style.display = "none", _dropzoneElm.appendChild(dropzonePlaceholder), _dropzoneElm.appendChild(groupToggler), setupColumnDropbox(), _handler.subscribe(_grid.onHeaderCellRendered, function(e, args) { + var column = args.column, node = args.node; + if (!Utils.isEmptyObject(column.grouping) && node && (node.style.cursor = "pointer", options.groupIconCssClass || options.groupIconImage)) { + let groupableIconElm = document.createElement("span"); + groupableIconElm.className = "slick-column-groupable", options.groupIconCssClass && groupableIconElm.classList.add(...options.groupIconCssClass.split(" ")), options.groupIconImage && (groupableIconElm.style.background = "url(" + options.groupIconImage + ") no-repeat center center"), node.appendChild(groupableIconElm); + } + }); + for (var i = 0; i < _gridColumns.length; i++) { + var columnId = _gridColumns[i].field; + _grid.updateColumnHeader(columnId); + } + } + function setupColumnReorder(grid, headers, _headerColumnWidthDiff, setColumns, setupColumnResize, _columns, getColumnIndex, _uid, trigger) { + let dropzoneElm = grid.getPreHeaderPanel(); + var sortableOptions = { + animation: 50, + // chosenClass: 'slick-header-column-active', + ghostClass: "slick-sortable-placeholder", + draggable: ".slick-header-column", + dataIdAttr: "data-id", + group: { + name: "shared", + pull: "clone", + put: !1 + }, + revertClone: !0, + // filter: function (_e, target) { + // // block column from being able to be dragged if it's already a grouped column + // // NOTE: need to disable for now since it also blocks the column reordering + // return columnsGroupBy.some(c => c.id === target.getAttribute('data-id')); + // }, + onStart: function() { + dropzoneElm.classList.add("slick-dropzone-hover"), dropzoneElm.classList.add("slick-dropzone-placeholder-hover"); + let draggablePlaceholderElm = dropzoneElm.querySelector(".slick-placeholder"); + draggablePlaceholderElm.style.display = "inline-block", groupToggler.style.display = "none", dropzoneElm.querySelectorAll(".slick-dropped-grouping").forEach((droppedGroupingElm) => droppedGroupingElm.style.display = "none"); + }, + onEnd: function(e) { + let draggablePlaceholderElm = dropzoneElm.querySelector(".slick-placeholder"); + dropzoneElm.classList.remove("slick-dropzone-hover"), draggablePlaceholderElm.classList.remove("slick-dropzone-placeholder-hover"), dropzonePlaceholder && (dropzonePlaceholder.style.display = "none"), draggablePlaceholderElm && draggablePlaceholderElm.parentElement && draggablePlaceholderElm.parentElement.classList.remove("slick-dropzone-placeholder-hover"); + let droppedGroupingElms = dropzoneElm.querySelectorAll(".slick-dropped-grouping"); + if (droppedGroupingElms.forEach((droppedGroupingElm) => droppedGroupingElm.style.display = "inline-flex"), droppedGroupingElms.length && (draggablePlaceholderElm && (draggablePlaceholderElm.style.display = "none"), groupToggler.style.display = "inline-block"), !grid.getEditorLock().commitCurrentEdit()) + return; + let reorderedIds = _sortableLeftInstance && _sortableLeftInstance.toArray() || []; + if (headers.length > 1) { + let ids = _sortableRightInstance && _sortableRightInstance.toArray() || []; + for (let id of ids) + reorderedIds.push(id); + } + let finalReorderedColumns = [], reorderedColumns = grid.getColumns(); + for (let reorderedId of reorderedIds) + finalReorderedColumns.push(reorderedColumns[getColumnIndex(reorderedId)]); + setColumns(finalReorderedColumns), trigger(grid.onColumnsReordered, { grid }), e.stopPropagation(), setupColumnResize(); + } + }; + return _sortableLeftInstance = Sortable.create(document.querySelector(`.${grid.getUID()} .slick-header-columns.slick-header-columns-left`), sortableOptions), _sortableRightInstance = Sortable.create(document.querySelector(`.${grid.getUID()} .slick-header-columns.slick-header-columns-right`), sortableOptions), { + sortableLeftInstance: _sortableLeftInstance, + sortableRightInstance: _sortableRightInstance + }; + } + function destroy() { + _sortableLeftInstance && _sortableLeftInstance.el && _sortableLeftInstance.destroy(), _sortableRightInstance && _sortableRightInstance.el && _sortableRightInstance.destroy(), onGroupChanged.unsubscribe(), _handler.unsubscribeAll(), _bindingEventService.unbindAll(), Utils.emptyElement(document.querySelector(`.${_gridUid} .slick-preheader-panel`)); + } + function addDragOverDropzoneListeners() { + let draggablePlaceholderElm = _dropzoneElm.querySelector(".slick-placeholder"); + draggablePlaceholderElm && (_bindingEventService.bind(draggablePlaceholderElm, "dragover", (e) => e.preventDefault), _bindingEventService.bind(draggablePlaceholderElm, "dragenter", () => _dropzoneElm.classList.add("slick-dropzone-hover")), _bindingEventService.bind(draggablePlaceholderElm, "dragleave", () => _dropzoneElm.classList.remove("slick-dropzone-hover"))); + } + function setupColumnDropbox() { + let dropzoneElm = _dropzoneElm; + _droppableInstance = Sortable.create(dropzoneElm, { + group: "shared", + // chosenClass: 'slick-header-column-active', + ghostClass: "slick-droppable-sortitem-hover", + draggable: ".slick-dropped-grouping", + dragoverBubble: !0, + onAdd: (evt) => { + let el = evt.item, elId = el.getAttribute("id"); + elId && elId.replace(_gridUid, "") && handleGroupByDrop(dropzoneElm, Sortable.utils.clone(evt.item)), evt.clone.style.opacity = ".5", el.parentNode && el.parentNode.removeChild(el); + }, + onUpdate: () => { + let sortArray = _droppableInstance && _droppableInstance.toArray() || [], newGroupingOrder = []; + for (var i = 0, l = sortArray.length; i < l; i++) + for (var a = 0, b = columnsGroupBy.length; a < b; a++) + if (columnsGroupBy[a].id == sortArray[i]) { + newGroupingOrder.push(columnsGroupBy[a]); + break; + } + columnsGroupBy = newGroupingOrder, updateGroupBy("sort-group"); + } + }), addDragOverDropzoneListeners(), groupToggler && _bindingEventService.bind(groupToggler, "click", (event) => { + let target = event.target; + toggleGroupToggler(target, target && target.classList.contains("expanded")); + }); + } + var columnsGroupBy = []; + function handleGroupByDrop(containerElm, headerColumnElm) { + let headerColDataId = headerColumnElm.getAttribute("data-id"), columnId = headerColDataId && headerColDataId.replace(_gridUid, ""), columnAllowed = !0; + for (let colGroupBy of columnsGroupBy) + colGroupBy.id === columnId && (columnAllowed = !1); + if (columnAllowed) { + for (let col of _gridColumns) + if (col.id === columnId && col.grouping && !Utils.isEmptyObject(col.grouping)) { + let columnNameElm = headerColumnElm.querySelector(".slick-column-name"), entryElm = document.createElement("div"); + entryElm.id = `${_gridUid}_${col.id}_entry`, entryElm.className = "slick-dropped-grouping", entryElm.dataset.id = `${col.id}`; + let groupTextElm = document.createElement("div"); + groupTextElm.className = "slick-dropped-grouping-title", groupTextElm.style.display = "inline-flex", groupTextElm.textContent = columnNameElm ? columnNameElm.textContent : headerColumnElm.textContent, entryElm.appendChild(groupTextElm); + let groupRemoveIconElm = document.createElement("div"); + groupRemoveIconElm.className = "slick-groupby-remove", options.deleteIconCssClass && groupRemoveIconElm.classList.add(...options.deleteIconCssClass.split(" ")), options.deleteIconImage && groupRemoveIconElm.classList.add(...options.deleteIconImage.split(" ")), options.deleteIconCssClass || groupRemoveIconElm.classList.add("slick-groupby-remove-icon"), !options.deleteIconCssClass && !options.deleteIconImage && groupRemoveIconElm.classList.add("slick-groupby-remove-image"), options && options.hideGroupSortIcons !== !0 && col.sortable && col.grouping && col.grouping.sortAsc === void 0 && (col.grouping.sortAsc = !0), entryElm.appendChild(groupRemoveIconElm), entryElm.appendChild(document.createElement("div")), containerElm.appendChild(entryElm), addColumnGroupBy(col), addGroupByRemoveClickHandler(col.id, groupRemoveIconElm, headerColumnElm, entryElm); + } + groupToggler.style.display = "inline-block"; + } + } + function addColumnGroupBy(column) { + columnsGroupBy.push(column), updateGroupBy("add-group"); + } + function addGroupByRemoveClickHandler(id, groupRemoveIconElm, headerColumnElm, entry) { + _bindingEventService.bind(groupRemoveIconElm, "click", () => { + let boundedElms = _bindingEventService.boundedEvents.filter((boundedEvent) => boundedEvent.element === groupRemoveIconElm); + for (let boundedEvent of boundedElms) + _bindingEventService.unbind(boundedEvent.element, "click", boundedEvent.listener); + removeGroupBy(id, headerColumnElm, entry); + }); + } + function setDroppedGroups(groupingInfo) { + let groupingInfos = Array.isArray(groupingInfo) ? groupingInfo : [groupingInfo]; + dropzonePlaceholder.style.display = "none"; + for (let groupInfo of groupingInfos) { + let columnElm = _grid.getHeaderColumn(groupInfo); + handleGroupByDrop(_dropzoneElm, columnElm); + } + } + function clearDroppedGroups() { + columnsGroupBy = [], updateGroupBy("clear-all"); + let allDroppedGroupingElms = _dropzoneElm.querySelectorAll(".slick-dropped-grouping"); + groupToggler.style.display = "none"; + for (let groupElm of Array.from(allDroppedGroupingElms)) { + let groupRemoveBtnElm = _dropzoneElm.querySelector(".slick-groupby-remove"); + groupRemoveBtnElm && groupRemoveBtnElm.remove(), groupElm && groupElm.remove(); + } + dropzonePlaceholder.style.display = "inline-block"; + } + function removeFromArray(arr) { + for (var what, a = arguments, L = a.length, ax; L > 1 && arr.length; ) + for (what = a[--L]; (ax = arr.indexOf(what)) != -1; ) + arr.splice(ax, 1); + return arr; + } + function removeGroupBy(id, _column, entry) { + entry.remove(); + var groupby = []; + _gridColumns.forEach(function(e) { + groupby[e.id] = e; + }), removeFromArray(columnsGroupBy, groupby[id]), columnsGroupBy.length === 0 && (dropzonePlaceholder.style = "block", groupToggler.style.display = "none"), updateGroupBy("remove-group"); + } + function toggleGroupToggler(targetElm, collapsing = !0, shouldExecuteDataViewCommand = !0) { + targetElm && (collapsing === !0 ? (targetElm.classList.add("collapsed"), targetElm.classList.remove("expanded"), shouldExecuteDataViewCommand && _dataView.collapseAllGroups()) : (targetElm.classList.remove("collapsed"), targetElm.classList.add("expanded"), shouldExecuteDataViewCommand && _dataView.expandAllGroups())); + } + function updateGroupBy(originator) { + if (columnsGroupBy.length === 0) { + _dataView.setGrouping([]), onGroupChanged.notify({ caller: originator, groupColumns: [] }); + return; + } + var groupingArray = []; + columnsGroupBy.forEach(function(element) { + groupingArray.push(element.grouping); + }), _dataView.setGrouping(groupingArray), onGroupChanged.notify({ caller: originator, groupColumns: groupingArray }); + } + Utils.extend(this, { + init, + destroy, + pluginName: "DraggableGrouping", + onGroupChanged, + setDroppedGroups, + clearDroppedGroups, + getSetupColumnReorder: setupColumnReorder + }); + } + window.Slick && Utils.extend(!0, window, { + Slick: { + DraggableGrouping + } + }); +})(); diff --git a/dist/browser/plugins/slick.headerbuttons.js b/dist/browser/plugins/slick.headerbuttons.js new file mode 100644 index 00000000..a6467eed --- /dev/null +++ b/dist/browser/plugins/slick.headerbuttons.js @@ -0,0 +1,59 @@ +"use strict"; +(() => { + // src/plugins/slick.headerbuttons.js + var BindingEventService = Slick.BindingEventService, SlickEvent = Slick.Event, EventHandler = Slick.EventHandler, Utils = Slick.Utils; + function HeaderButtons(options) { + var _grid, _self = this, _handler = new EventHandler(), _bindingEventService = new BindingEventService(), _defaults = { + buttonCssClass: "slick-header-button" + }; + function init(grid) { + options = Utils.extend(!0, {}, _defaults, options), _grid = grid, _handler.subscribe(_grid.onHeaderCellRendered, handleHeaderCellRendered).subscribe(_grid.onBeforeHeaderCellDestroy, handleBeforeHeaderCellDestroy), _grid.setColumns(_grid.getColumns()); + } + function destroy() { + _handler.unsubscribeAll(), _bindingEventService.unbindAll(); + } + function handleHeaderCellRendered(e, args) { + var column = args.column; + if (column.header && column.header.buttons) + for (var i = column.header.buttons.length; i--; ) { + var button = column.header.buttons[i], isItemVisible = runOverrideFunctionWhenExists(button.itemVisibilityOverride, args), isItemUsable = runOverrideFunctionWhenExists(button.itemUsabilityOverride, args); + if (!isItemVisible) + continue; + Object.prototype.hasOwnProperty.call(button, "itemUsabilityOverride") && (button.disabled = !isItemUsable); + let btn = document.createElement("div"); + btn.className = options.buttonCssClass, btn.ariaLabel = "Header Button", btn.role = "button", button.disabled && btn.classList.add("slick-header-button-disabled"), button.showOnHover && btn.classList.add("slick-header-button-hidden"), button.image && (btn.style.backgroundImage = "url(" + button.image + ")"), button.cssClass && btn.classList.add(...button.cssClass.split(" ")), button.tooltip && (btn.title = button.tooltip), button.handler && _bindingEventService.bind(btn, "click", button.handler), _bindingEventService.bind(btn, "click", handleButtonClick.bind(this, button, args.column)), args.node.appendChild(btn); + } + } + function handleBeforeHeaderCellDestroy(e, args) { + var column = args.column; + if (column.header && column.header.buttons) { + let buttonCssClass = (options.buttonCssClass || "").replace(/(\s+)/g, "."); + buttonCssClass && args.node.querySelectorAll(`.${buttonCssClass}`).forEach((elm) => elm.remove()); + } + } + function handleButtonClick(button, columnDef, e) { + let command = button.command || "", callbackArgs = { + grid: _grid, + column: columnDef, + button + }; + command != null && (callbackArgs.command = command), typeof button.action == "function" && button.action.call(this, e, callbackArgs), command != null && !button.disabled && (_self.onCommand.notify(callbackArgs, e, _self), _grid.updateColumnHeader(columnDef.id)), e.preventDefault(), e.stopPropagation(); + } + function runOverrideFunctionWhenExists(overrideFn, args) { + return typeof overrideFn == "function" ? overrideFn.call(this, args) : !0; + } + Utils.extend(this, { + init, + destroy, + pluginName: "HeaderButtons", + onCommand: new SlickEvent() + }); + } + window.Slick && Utils.extend(!0, window, { + Slick: { + Plugins: { + HeaderButtons + } + } + }); +})(); diff --git a/dist/browser/plugins/slick.headermenu.js b/dist/browser/plugins/slick.headermenu.js new file mode 100644 index 00000000..c3e01c07 --- /dev/null +++ b/dist/browser/plugins/slick.headermenu.js @@ -0,0 +1,121 @@ +"use strict"; +(() => { + // src/plugins/slick.headermenu.js + var BindingEventService = Slick.BindingEventService, SlickEvent = Slick.Event, EventHandler = Slick.EventHandler, Utils = Slick.Utils; + function HeaderMenu(options) { + var _grid, _self = this, _handler = new EventHandler(), _bindingEventService = new BindingEventService(), _defaults = { + buttonCssClass: null, + buttonImage: null, + minWidth: 100, + autoAlign: !0, + autoAlignOffset: 0 + }, _activeHeaderColumnElm, _menuElm; + function init(grid) { + options = Utils.extend(!0, {}, _defaults, options), _grid = grid, _handler.subscribe(_grid.onHeaderCellRendered, handleHeaderCellRendered).subscribe(_grid.onBeforeHeaderCellDestroy, handleBeforeHeaderCellDestroy), _grid.setColumns(_grid.getColumns()), _bindingEventService.bind(document.body, "mousedown", handleBodyMouseDown.bind(this)); + } + function setOptions(newOptions) { + options = Utils.extend(!0, {}, options, newOptions); + } + function getGridUidSelector() { + let gridUid = _grid.getUID() || ""; + return gridUid ? `.${gridUid}` : ""; + } + function destroy() { + _handler.unsubscribeAll(), _bindingEventService.unbindAll(), _menuElm = _menuElm || document.body.querySelector(`.slick-header-menu${getGridUidSelector()}`), _menuElm && _menuElm.remove(), _activeHeaderColumnElm = void 0; + } + function handleBodyMouseDown(e) { + (_menuElm !== e.target && !(_menuElm && _menuElm.contains(e.target)) || e.target.className === "close") && hideMenu(); + } + function hideMenu() { + _menuElm && (_menuElm.remove(), _menuElm = void 0), _activeHeaderColumnElm && _activeHeaderColumnElm.classList.remove("slick-header-column-active"); + } + function handleHeaderCellRendered(e, args) { + var column = args.column, menu = column.header && column.header.menu; + if (menu) { + if (!runOverrideFunctionWhenExists(options.menuUsabilityOverride, args)) + return; + let elm = document.createElement("div"); + if (elm.className = "slick-header-menubutton", elm.ariaLabel = "Header Menu", elm.role = "button", !options.buttonCssClass && !options.buttonImage && (options.buttonCssClass = "caret"), options.buttonCssClass) { + let icon = document.createElement("span"); + icon.classList.add(...options.buttonCssClass.split(" ")), elm.appendChild(icon); + } + options.buttonImage && (elm.style.backgroundImage = "url(" + options.buttonImage + ")"), options.tooltip && (elm.title = options.tooltip), _bindingEventService.bind(elm, "click", (e2) => showMenu(e2, menu, args.column)), args.node.appendChild(elm); + } + } + function handleBeforeHeaderCellDestroy(e, args) { + var column = args.column; + column.header && column.header.menu && args.node.querySelectorAll(".slick-header-menubutton").forEach((elm) => elm.remove()); + } + function showMenu(event, menu, columnDef) { + var callbackArgs = { + grid: _grid, + column: columnDef, + menu + }; + if (_self.onBeforeMenuShow.notify(callbackArgs, event, _self).getReturnValue() == !1) + return; + if (!_menuElm) { + _menuElm = document.createElement("div"), _menuElm.className = "slick-header-menu", _menuElm.role = "menu", _menuElm.style.minWidth = `${options.minWidth}px`, _menuElm.setAttribute("aria-expanded", "true"); + let containerNode = _grid.getContainerNode(); + containerNode && containerNode.appendChild(_menuElm); + } + Utils.emptyElement(_menuElm); + for (var i = 0; i < menu.items.length; i++) { + var item = menu.items[i], isItemVisible = runOverrideFunctionWhenExists(item.itemVisibilityOverride, callbackArgs), isItemUsable = runOverrideFunctionWhenExists(item.itemUsabilityOverride, callbackArgs); + if (!isItemVisible) + continue; + Object.prototype.hasOwnProperty.call(item, "itemUsabilityOverride") && (item.disabled = !isItemUsable); + let menuItem = document.createElement("div"); + if (menuItem.className = "slick-header-menuitem", menuItem.role = "menuitem", item.divider || item === "divider") { + menuItem.classList.add("slick-header-menuitem-divider"); + continue; + } + item.disabled && menuItem.classList.add("slick-header-menuitem-disabled"), item.hidden && menuItem.classList.add("slick-header-menuitem-hidden"), item.cssClass && menuItem.classList.add(...item.cssClass.split(" ")), item.tooltip && (menuItem.title = item.tooltip); + let iconElm = document.createElement("div"); + iconElm.className = "slick-header-menuicon", menuItem.appendChild(iconElm), item.iconCssClass && iconElm.classList.add(...item.iconCssClass.split(" ")), item.iconImage && (iconElm.style.backgroundImage = "url(" + item.iconImage + ")"); + let textElm = document.createElement("span"); + textElm.className = "slick-header-menucontent", textElm.textContent = item.title, menuItem.appendChild(textElm), item.textCssClass && textElm.classList.add(...item.textCssClass.split(" ")), _menuElm.appendChild(menuItem), _bindingEventService.bind(menuItem, "click", handleMenuItemClick.bind(this, item, columnDef)); + } + let buttonElm = event.target, btnOffset = Utils.offset(buttonElm), menuOffset = Utils.offset(_menuElm), leftPos = btnOffset && btnOffset.left || 0; + if (options.autoAlign) { + let gridPos = _grid.getGridPosition(); + leftPos + _menuElm.offsetWidth >= gridPos.width && (leftPos = leftPos + buttonElm.clientWidth - _menuElm.clientWidth + (options.autoAlignOffset || 0)); + } + _menuElm.style.top = `${(buttonElm.clientHeight || btnOffset && btnOffset.top || 0) + (options && options.menuOffsetTop || 0)}px`, _menuElm.style.left = `${leftPos - menuOffset.left}px`, _activeHeaderColumnElm = _menuElm.closest(".slick-header-column"), _activeHeaderColumnElm && _activeHeaderColumnElm.classList.add("slick-header-column-active"), _self.onAfterMenuShow.notify(callbackArgs, event, _self).getReturnValue() != !1 && (event.preventDefault(), event.stopPropagation()); + } + function handleMenuItemClick(item, columnDef, e) { + let command = item.command || ""; + if (item.disabled || item.divider || item === "divider") + return !1; + if (command != null && command !== "") { + var callbackArgs = { + grid: _grid, + column: columnDef, + command, + item + }; + _self.onCommand.notify(callbackArgs, e, _self), typeof item.action == "function" && item.action.call(this, e, callbackArgs); + } + e.defaultPrevented || hideMenu(), e.preventDefault(), e.stopPropagation(); + } + function runOverrideFunctionWhenExists(overrideFn, args) { + return typeof overrideFn == "function" ? overrideFn.call(this, args) : !0; + } + Utils.extend(this, { + init, + destroy, + pluginName: "HeaderMenu", + setOptions, + onAfterMenuShow: new SlickEvent(), + onBeforeMenuShow: new SlickEvent(), + onCommand: new SlickEvent() + }); + } + window.Slick && Utils.extend(!0, window, { + Slick: { + Plugins: { + HeaderMenu + } + } + }); +})(); diff --git a/dist/browser/plugins/slick.resizer.js b/dist/browser/plugins/slick.resizer.js new file mode 100644 index 00000000..b39e0093 --- /dev/null +++ b/dist/browser/plugins/slick.resizer.js @@ -0,0 +1,95 @@ +"use strict"; +(() => { + // src/plugins/slick.resizer.js + var BindingEventService = Slick.BindingEventService, SlickEvent = Slick.Event, Utils = Slick.Utils; + function Resizer(_options, fixedDimensions) { + let DATAGRID_MIN_HEIGHT = 180, DATAGRID_MIN_WIDTH = 300, DATAGRID_BOTTOM_PADDING = 20, _self = this, _fixedHeight, _fixedWidth, _grid, _gridOptions, _gridUid, _lastDimensions, _timer, _resizePaused = !1, _gridDomElm, _pageContainerElm, _gridContainerElm, _defaults = { + bottomPadding: 20, + applyResizeToContainer: !1, + minHeight: 180, + minWidth: 300, + rightPadding: 0 + }, options = {}, _bindingEventService = new BindingEventService(); + function setOptions(_newOptions) { + options = Utils.extend(!0, {}, _defaults, options, _newOptions); + } + function init(grid) { + setOptions(_options), _grid = grid, _gridOptions = _grid.getOptions(), _gridUid = _grid.getUID(), _gridDomElm = _grid.getContainerNode(), typeof _options.container == "string" ? _pageContainerElm = typeof _options.container == "string" ? document.querySelector(_options.container) : _options.container : _pageContainerElm = _options.container, options.gridContainer && (_gridContainerElm = options.gridContainer), fixedDimensions && (_fixedHeight = fixedDimensions.height, _fixedWidth = fixedDimensions.width), _gridOptions && bindAutoResizeDataGrid(); + } + function bindAutoResizeDataGrid(newSizes) { + let gridElmOffset = Utils.offset(_gridDomElm); + (_gridDomElm !== void 0 || gridElmOffset !== void 0) && (resizeGrid(0, newSizes, null), _bindingEventService.bind(window, "resize", function(event) { + _self.onGridBeforeResize.notify({ grid: _grid }, event, _self), _resizePaused || (resizeGrid(0, newSizes, event), resizeGrid(0, newSizes, event)); + })); + } + function calculateGridNewDimensions() { + let gridElmOffset = Utils.offset(_gridDomElm); + if (!window || _pageContainerElm === void 0 || _gridDomElm === void 0 || gridElmOffset === void 0) + return null; + let bottomPadding = options && options.bottomPadding !== void 0 ? options.bottomPadding : DATAGRID_BOTTOM_PADDING, gridHeight = 0, gridOffsetTop = 0; + options.calculateAvailableSizeBy === "container" ? gridHeight = Utils.innerSize(_pageContainerElm, "height") || 0 : (gridHeight = window.innerHeight || 0, gridOffsetTop = gridElmOffset !== void 0 ? gridElmOffset.top : 0); + let availableHeight = gridHeight - gridOffsetTop - bottomPadding, availableWidth = Utils.innerSize(_pageContainerElm, "width") || window.innerWidth || 0, maxHeight = options && options.maxHeight || void 0, minHeight = options && options.minHeight !== void 0 ? options.minHeight : DATAGRID_MIN_HEIGHT, maxWidth = options && options.maxWidth || void 0, minWidth = options && options.minWidth !== void 0 ? options.minWidth : DATAGRID_MIN_WIDTH, newHeight = availableHeight, newWidth = options && options.rightPadding ? availableWidth - options.rightPadding : availableWidth; + return newHeight < minHeight && (newHeight = minHeight), maxHeight && newHeight > maxHeight && (newHeight = maxHeight), newWidth < minWidth && (newWidth = minWidth), maxWidth && newWidth > maxWidth && (newWidth = maxWidth), { + height: _fixedHeight || newHeight, + width: _fixedWidth || newWidth + }; + } + function destroy() { + _self.onGridBeforeResize.unsubscribe(), _self.onGridAfterResize.unsubscribe(), _bindingEventService.unbindAll(); + } + function getLastResizeDimensions() { + return _lastDimensions; + } + function pauseResizer(isResizePaused) { + _resizePaused = isResizePaused; + } + function resizeGrid(delay, newSizes, event) { + if (delay = delay || 0, typeof Promise == "function") + return new Promise(function(resolve) { + delay > 0 ? (clearTimeout(_timer), _timer = setTimeout(function() { + resolve(resizeGridCallback(newSizes, event)); + }, delay)) : resolve(resizeGridCallback(newSizes, event)); + }); + delay > 0 ? (clearTimeout(_timer), _timer = setTimeout(function() { + resizeGridCallback(newSizes, event); + }, delay)) : resizeGridCallback(newSizes, event); + } + function resizeGridCallback(newSizes, event) { + let lastDimensions = resizeGridWithDimensions(newSizes); + return _self.onGridAfterResize.notify({ grid: _grid, dimensions: lastDimensions }, event, _self), lastDimensions; + } + function resizeGridWithDimensions(newSizes) { + let availableDimensions = calculateGridNewDimensions(); + if ((newSizes || availableDimensions) && _gridDomElm) + try { + let newHeight = newSizes && newSizes.height ? newSizes.height : availableDimensions.height, newWidth = newSizes && newSizes.width ? newSizes.width : availableDimensions.width; + _gridOptions.autoHeight || (_gridDomElm.style.height = `${newHeight}px`), _gridDomElm.style.width = `${newWidth}px`, _gridContainerElm && (_gridContainerElm.style.width = `${newWidth}px`), new RegExp("MSIE [6-8]").exec(navigator.userAgent) === null && _grid && _grid.resizeCanvas && _grid.resizeCanvas(), _gridOptions && _gridOptions.enableAutoSizeColumns && _grid.autosizeColumns && _gridUid && document.querySelector(`.${_gridUid}`) && _grid.autosizeColumns(), _lastDimensions = { + height: newHeight, + width: newWidth + }; + } catch (e) { + destroy(); + } + return _lastDimensions; + } + Utils.extend(this, { + init, + destroy, + pluginName: "Resizer", + bindAutoResizeDataGrid, + getLastResizeDimensions, + pauseResizer, + resizeGrid, + setOptions, + onGridAfterResize: new SlickEvent(), + onGridBeforeResize: new SlickEvent() + }); + } + window.Slick && Utils.extend(!0, window, { + Slick: { + Plugins: { + Resizer + } + } + }); +})(); diff --git a/dist/browser/plugins/slick.rowdetailview.js b/dist/browser/plugins/slick.rowdetailview.js new file mode 100644 index 00000000..7658e1c4 --- /dev/null +++ b/dist/browser/plugins/slick.rowdetailview.js @@ -0,0 +1,286 @@ +"use strict"; +(() => { + // src/plugins/slick.rowdetailview.js + var SlickEvent = Slick.Event, EventHandler = Slick.EventHandler, Utils = Slick.Utils; + function RowDetailView(options) { + var _grid, _gridOptions, _gridUid, _dataView, _dataViewIdProperty = "id", _expandableOverride = null, _self = this, _lastRange = null, _expandedRows = [], _handler = new EventHandler(), _outsideRange = 5, _visibleRenderedCellCount = 0, _defaults = { + columnId: "_detail_selector", + cssClass: "detailView-toggle", + expandedClass: null, + collapsedClass: null, + keyPrefix: "_", + loadOnce: !1, + collapseAllOnSort: !0, + saveDetailViewOnScroll: !0, + singleRowExpand: !1, + useSimpleViewportCalc: !1, + alwaysRenderColumn: !0, + toolTip: "", + width: 30, + maxRows: null + }, _keyPrefix = _defaults.keyPrefix, _gridRowBuffer = 0, _rowIdsOutOfViewport = [], _options = Utils.extend(!0, {}, _defaults, options); + typeof _options.expandableOverride == "function" && expandableOverride(_options.expandableOverride); + function init(grid) { + if (!grid) + throw new Error('RowDetailView Plugin requires the Grid instance to be passed as argument to the "init()" method'); + _grid = grid, _gridUid = grid.getUID(), _gridOptions = grid.getOptions() || {}, _dataView = _grid.getData(), _keyPrefix = _options && _options.keyPrefix || "_", _gridRowBuffer = _grid.getOptions().minRowBuffer, _grid.getOptions().minRowBuffer = _options.panelRows + 3, _handler.subscribe(_grid.onClick, handleClick).subscribe(_grid.onScroll, handleScroll), _options.collapseAllOnSort && (_handler.subscribe(_grid.onSort, collapseAll), _expandedRows = [], _rowIdsOutOfViewport = []), _handler.subscribe(_grid.getData().onRowCountChanged, function() { + _grid.updateRowCount(), _grid.render(); + }), _handler.subscribe(_grid.getData().onRowsChanged, function(e, a) { + _grid.invalidateRows(a.rows), _grid.render(); + }), subscribeToOnAsyncResponse(), _handler.subscribe(_dataView.onSetItemsCalled, function() { + _dataViewIdProperty = _dataView && _dataView.getIdPropertyName() || "id"; + }), _options.useSimpleViewportCalc && _handler.subscribe(_grid.onRendered, function(e, args) { + args && args.endRow && (_visibleRenderedCellCount = args.endRow - args.startRow); + }); + } + function destroy() { + _handler.unsubscribeAll(), _self.onAsyncResponse.unsubscribe(), _self.onAsyncEndUpdate.unsubscribe(), _self.onAfterRowDetailToggle.unsubscribe(), _self.onBeforeRowDetailToggle.unsubscribe(), _self.onRowOutOfViewportRange.unsubscribe(), _self.onRowBackToViewportRange.unsubscribe(); + } + function getOptions() { + return _options; + } + function setOptions(options2) { + _options = Utils.extend(!0, {}, _options, options2), _options && _options.singleRowExpand && collapseAll(); + } + function arrayFindIndex(sourceArray, value) { + if (sourceArray) { + for (var i = 0; i < sourceArray.length; i++) + if (sourceArray[i] === value) + return i; + } + return -1; + } + function handleClick(e, args) { + var dataContext = _grid.getDataItem(args.row); + if (checkExpandableOverride(args.row, dataContext, _grid) && (_options.useRowClick || _grid.getColumns()[args.cell].id === _options.columnId && e.target.classList.contains(_options.cssClass || ""))) { + if (_grid.getEditorLock().isActive() && !_grid.getEditorLock().commitCurrentEdit()) { + e.preventDefault(), e.stopImmediatePropagation(); + return; + } + _self.onBeforeRowDetailToggle.notify({ + grid: _grid, + item: dataContext + }, e, _self), toggleRowSelection(args.row, dataContext), _self.onAfterRowDetailToggle.notify({ + grid: _grid, + item: dataContext, + expandedRows: _expandedRows + }, e, _self), e.stopPropagation(), e.stopImmediatePropagation(); + } + } + function handleScroll() { + _options.useSimpleViewportCalc ? calculateOutOfRangeViewsSimplerVersion() : calculateOutOfRangeViews(); + } + function calculateOutOfRangeViews() { + if (_grid) { + var renderedRange = _grid.getRenderedRange(); + if (_expandedRows.length > 0) { + var scrollDir = "DOWN"; + if (_lastRange) { + if (_lastRange.top === renderedRange.top && _lastRange.bottom === renderedRange.bottom) + return; + (_lastRange.top > renderedRange.top || // Or we are at very top but our bottom is increasing + _lastRange.top === 0 && renderedRange.top === 0 && _lastRange.bottom > renderedRange.bottom) && (scrollDir = "UP"); + } + } + _expandedRows.forEach(function(row) { + var rowIndex = _dataView.getRowById(row[_dataViewIdProperty]), rowPadding = row[_keyPrefix + "sizePadding"], rowOutOfRange = arrayFindIndex(_rowIdsOutOfViewport, row[_dataViewIdProperty]) >= 0; + scrollDir === "UP" ? (_options.saveDetailViewOnScroll && rowIndex >= renderedRange.bottom - _gridRowBuffer && saveDetailView(row), rowOutOfRange && rowIndex - _outsideRange < renderedRange.top && rowIndex >= renderedRange.top ? notifyBackToViewportWhenDomExist(row, row[_dataViewIdProperty]) : !rowOutOfRange && rowIndex + rowPadding > renderedRange.bottom && notifyOutOfViewport(row, row[_dataViewIdProperty])) : scrollDir === "DOWN" && (_options.saveDetailViewOnScroll && rowIndex <= renderedRange.top + _gridRowBuffer && saveDetailView(row), rowOutOfRange && rowIndex + rowPadding + _outsideRange > renderedRange.bottom && rowIndex < rowIndex + rowPadding ? notifyBackToViewportWhenDomExist(row, row[_dataViewIdProperty]) : !rowOutOfRange && rowIndex < renderedRange.top && notifyOutOfViewport(row, row[_dataViewIdProperty])); + }), _lastRange = renderedRange; + } + } + function calculateOutOfRangeViewsSimplerVersion() { + if (_grid) { + var renderedRange = _grid.getRenderedRange(); + _expandedRows.forEach(function(row) { + var rowIndex = _dataView.getRowById(row[_dataViewIdProperty]), isOutOfVisibility = checkIsRowOutOfViewportRange(rowIndex, renderedRange); + !isOutOfVisibility && arrayFindIndex(_rowIdsOutOfViewport, row[_dataViewIdProperty]) >= 0 ? notifyBackToViewportWhenDomExist(row, row[_dataViewIdProperty]) : isOutOfVisibility && notifyOutOfViewport(row, row[_dataViewIdProperty]); + }); + } + } + function checkIsRowOutOfViewportRange(rowIndex, renderedRange) { + return Math.abs(renderedRange.bottom - _gridRowBuffer - rowIndex) > _visibleRenderedCellCount * 2; + } + function notifyOutOfViewport(item, rowId) { + var rowIndex = item.rowIndex || _dataView.getRowById(item[_dataViewIdProperty]); + _self.onRowOutOfViewportRange.notify({ + grid: _grid, + item, + rowId, + rowIndex, + expandedRows: _expandedRows, + rowIdsOutOfViewport: syncOutOfViewportArray(rowId, !0) + }, null, _self); + } + function notifyBackToViewportWhenDomExist(item, rowId) { + var rowIndex = item.rowIndex || _dataView.getRowById(item[_dataViewIdProperty]); + setTimeout(function() { + document.querySelector(`.${_gridUid} .cellDetailView_${item[_dataViewIdProperty]}`) && _self.onRowBackToViewportRange.notify({ + grid: _grid, + item, + rowId, + rowIndex, + expandedRows: _expandedRows, + rowIdsOutOfViewport: syncOutOfViewportArray(rowId, !1) + }, null, _self); + }, 100); + } + function syncOutOfViewportArray(rowId, isAdding) { + var arrayRowIndex = arrayFindIndex(_rowIdsOutOfViewport, rowId); + return isAdding && arrayRowIndex < 0 ? _rowIdsOutOfViewport.push(rowId) : !isAdding && arrayRowIndex >= 0 && _rowIdsOutOfViewport.splice(arrayRowIndex, 1), _rowIdsOutOfViewport; + } + function toggleRowSelection(rowNumber, dataContext) { + checkExpandableOverride(rowNumber, dataContext, _grid) && (_dataView.beginUpdate(), handleAccordionShowHide(dataContext), _dataView.endUpdate()); + } + function collapseAll() { + _dataView.beginUpdate(); + for (var i = _expandedRows.length - 1; i >= 0; i--) + collapseDetailView(_expandedRows[i], !0); + _dataView.endUpdate(); + } + function collapseDetailView(item, isMultipleCollapsing) { + isMultipleCollapsing || _dataView.beginUpdate(), _options.loadOnce && saveDetailView(item), item[_keyPrefix + "collapsed"] = !0; + for (var idx = 1; idx <= item[_keyPrefix + "sizePadding"]; idx++) + _dataView.deleteItem(item[_dataViewIdProperty] + "." + idx); + item[_keyPrefix + "sizePadding"] = 0, _dataView.updateItem(item[_dataViewIdProperty], item), _expandedRows = _expandedRows.filter(function(r) { + return r[_dataViewIdProperty] !== item[_dataViewIdProperty]; + }), isMultipleCollapsing || _dataView.endUpdate(); + } + function expandDetailView(item) { + if (_options && _options.singleRowExpand && collapseAll(), item[_keyPrefix + "collapsed"] = !1, _expandedRows.push(item), item[_keyPrefix + "detailContent"] || (item[_keyPrefix + "detailViewLoaded"] = !1), !item[_keyPrefix + "detailViewLoaded"] || _options.loadOnce !== !0) + item[_keyPrefix + "detailContent"] = _options.preTemplate(item); + else { + _self.onAsyncResponse.notify({ + item, + itemDetail: item, + detailView: item[_keyPrefix + "detailContent"] + }, void 0, this), applyTemplateNewLineHeight(item), _dataView.updateItem(item[_dataViewIdProperty], item); + return; + } + applyTemplateNewLineHeight(item), _dataView.updateItem(item[_dataViewIdProperty], item), _options.process(item); + } + function saveDetailView(item) { + let view = document.querySelector(`.${_gridUid} .innerDetailView_${item[_dataViewIdProperty]}`); + if (view) { + let html = view.innerHTML; + html !== void 0 && (item[`${_keyPrefix}detailContent`] = html); + } + } + function subscribeToOnAsyncResponse() { + _self.onAsyncResponse.subscribe(function(e, args) { + if (!args || !args.item && !args.itemDetail) + throw 'Slick.RowDetailView plugin requires the onAsyncResponse() to supply "args.item" property.'; + var itemDetail = args.item || args.itemDetail; + args.detailView ? itemDetail[_keyPrefix + "detailContent"] = args.detailView : itemDetail[_keyPrefix + "detailContent"] = _options.postTemplate(itemDetail), itemDetail[_keyPrefix + "detailViewLoaded"] = !0, _dataView.updateItem(itemDetail[_dataViewIdProperty], itemDetail), _self.onAsyncEndUpdate.notify({ + grid: _grid, + item: itemDetail, + itemDetail + }, e, _self); + }); + } + function handleAccordionShowHide(item) { + item && (item[_keyPrefix + "collapsed"] ? expandDetailView(item) : collapseDetailView(item)); + } + var getPaddingItem = function(parent, offset) { + var item = {}; + for (var prop in _grid.getData()) + item[prop] = null; + return item[_dataViewIdProperty] = parent[_dataViewIdProperty] + "." + offset, item[_keyPrefix + "collapsed"] = !0, item[_keyPrefix + "isPadding"] = !0, item[_keyPrefix + "parent"] = parent, item[_keyPrefix + "offset"] = offset, item; + }; + function applyTemplateNewLineHeight(item) { + var rowCount = _options.panelRows, lineHeight = 13; + item[_keyPrefix + "sizePadding"] = Math.ceil(rowCount * 2 * lineHeight / _gridOptions.rowHeight), item[_keyPrefix + "height"] = item[_keyPrefix + "sizePadding"] * _gridOptions.rowHeight; + for (var idxParent = _dataView.getIdxById(item[_dataViewIdProperty]), idx = 1; idx <= item[_keyPrefix + "sizePadding"]; idx++) + _dataView.insertItem(idxParent + idx, getPaddingItem(item, idx)); + } + function getColumnDefinition() { + return { + id: _options.columnId, + name: "", + toolTip: _options.toolTip, + field: "sel", + width: _options.width, + resizable: !1, + sortable: !1, + alwaysRenderColumn: _options.alwaysRenderColumn, + cssClass: _options.cssClass, + formatter: detailSelectionFormatter + }; + } + function getExpandedRows() { + return _expandedRows; + } + function detailSelectionFormatter(row, cell, value, columnDef, dataContext, grid) { + if (checkExpandableOverride(row, dataContext, grid)) { + if (dataContext[_keyPrefix + "collapsed"] == null && (dataContext[_keyPrefix + "collapsed"] = !0, dataContext[_keyPrefix + "sizePadding"] = 0, dataContext[_keyPrefix + "height"] = 0, dataContext[_keyPrefix + "isPadding"] = !1, dataContext[_keyPrefix + "parent"] = void 0, dataContext[_keyPrefix + "offset"] = 0), !dataContext[_keyPrefix + "isPadding"]) + if (dataContext[_keyPrefix + "collapsed"]) { + var collapsedClasses = _options.cssClass + " expand "; + return _options.collapsedClass && (collapsedClasses += _options.collapsedClass), '
'; + } else { + var html = [], rowHeight = _gridOptions.rowHeight, outterHeight = dataContext[_keyPrefix + "sizePadding"] * _gridOptions.rowHeight; + _options.maxRows !== null && dataContext[_keyPrefix + "sizePadding"] > _options.maxRows && (outterHeight = _options.maxRows * rowHeight, dataContext[_keyPrefix + "sizePadding"] = _options.maxRows); + var expandedClasses = _options.cssClass + " collapse "; + return _options.expandedClass && (expandedClasses += _options.expandedClass), html.push('
'), html.push('
'), html.push('
'), html.push('
', dataContext[_keyPrefix + "detailContent"], "
"), html.join(""); + } + } else + return null; + return null; + } + function resizeDetailView(item) { + if (item) { + var mainContainer = document.querySelector("." + _gridUid + " .detailViewContainer_" + item[_dataViewIdProperty]), cellItem = document.querySelector("." + _gridUid + " .cellDetailView_" + item[_dataViewIdProperty]), inner = document.querySelector("." + _gridUid + " .innerDetailView_" + item[_dataViewIdProperty]); + if (!(!mainContainer || !cellItem || !inner)) { + for (var idx = 1; idx <= item[_keyPrefix + "sizePadding"]; idx++) + _dataView.deleteItem(item[_dataViewIdProperty] + "." + idx); + var rowHeight = _gridOptions.rowHeight, lineHeight = 13; + mainContainer.style.minHeight = null; + var itemHeight = mainContainer.scrollHeight, rowCount = Math.ceil(itemHeight / rowHeight); + item[_keyPrefix + "sizePadding"] = Math.ceil(rowCount * 2 * lineHeight / rowHeight), item[_keyPrefix + "height"] = itemHeight; + var outterHeight = item[_keyPrefix + "sizePadding"] * rowHeight; + _options.maxRows !== null && item[_keyPrefix + "sizePadding"] > _options.maxRows && (outterHeight = _options.maxRows * rowHeight, item[_keyPrefix + "sizePadding"] = _options.maxRows), _grid.getOptions().minRowBuffer < item[_keyPrefix + "sizePadding"] && (_grid.getOptions().minRowBuffer = item[_keyPrefix + "sizePadding"] + 3), mainContainer.setAttribute("style", "min-height: " + item[_keyPrefix + "height"] + "px"), cellItem && cellItem.setAttribute("style", "height: " + outterHeight + "px; top:" + rowHeight + "px"); + for (var idxParent = _dataView.getIdxById(item[_dataViewIdProperty]), idx = 1; idx <= item[_keyPrefix + "sizePadding"]; idx++) + _dataView.insertItem(idxParent + idx, getPaddingItem(item, idx)); + saveDetailView(item); + } + } + } + function getFilterItem(item) { + return item[_keyPrefix + "isPadding"] && item[_keyPrefix + "parent"] && (item = item[_keyPrefix + "parent"]), item; + } + function checkExpandableOverride(row, dataContext, grid) { + return typeof _expandableOverride == "function" ? _expandableOverride(row, dataContext, grid) : !0; + } + function expandableOverride(overrideFn) { + _expandableOverride = overrideFn; + } + Utils.extend(this, { + init, + destroy, + pluginName: "RowDetailView", + collapseAll, + collapseDetailView, + expandDetailView, + expandableOverride, + getColumnDefinition, + getExpandedRows, + getFilterItem, + getOptions, + resizeDetailView, + saveDetailView, + setOptions, + // events + onAsyncResponse: new SlickEvent(), + onAsyncEndUpdate: new SlickEvent(), + onAfterRowDetailToggle: new SlickEvent(), + onBeforeRowDetailToggle: new SlickEvent(), + onRowOutOfViewportRange: new SlickEvent(), + onRowBackToViewportRange: new SlickEvent() + }); + } + window.Slick && Utils.extend(!0, window, { + Slick: { + Plugins: { + RowDetailView + } + } + }); +})(); diff --git a/dist/browser/plugins/slick.rowmovemanager.js b/dist/browser/plugins/slick.rowmovemanager.js new file mode 100644 index 00000000..a3f570dc --- /dev/null +++ b/dist/browser/plugins/slick.rowmovemanager.js @@ -0,0 +1,121 @@ +"use strict"; +(() => { + // src/plugins/slick.rowmovemanager.js + var SlickEvent = Slick.Event, EventHandler = Slick.EventHandler, Utils = Slick.Utils; + function RowMoveManager(options) { + var _grid, _canvas, _dragging, _self = this, _usabilityOverride = null, _handler = new EventHandler(), _defaults = { + columnId: "_move", + cssClass: null, + cancelEditOnDrag: !1, + disableRowSelection: !1, + hideRowMoveShadow: !0, + rowMoveShadowMarginTop: 0, + rowMoveShadowMarginLeft: 0, + rowMoveShadowOpacity: 0.95, + rowMoveShadowScale: 0.75, + singleRowMove: !1, + width: 40 + }; + options && typeof options.usabilityOverride == "function" && usabilityOverride(options.usabilityOverride); + function init(grid) { + options = Utils.extend(!0, {}, _defaults, options), _grid = grid, _canvas = _grid.getCanvasNode(), _handler.subscribe(_grid.onDragInit, handleDragInit).subscribe(_grid.onDragStart, handleDragStart).subscribe(_grid.onDrag, handleDrag).subscribe(_grid.onDragEnd, handleDragEnd); + } + function destroy() { + _handler.unsubscribeAll(); + } + function setOptions(newOptions) { + options = Utils.extend({}, options, newOptions); + } + function handleDragInit(e) { + e.stopImmediatePropagation(); + } + function handleDragStart(e, dd) { + var cell = _grid.getCellFromEvent(e), currentRow = cell && cell.row, dataContext = _grid.getDataItem(currentRow); + if (checkUsabilityOverride(currentRow, dataContext, _grid)) { + if (options.cancelEditOnDrag && _grid.getEditorLock().isActive() && _grid.getEditorLock().cancelCurrentEdit(), _grid.getEditorLock().isActive() || !isHandlerColumn(cell.cell)) + return !1; + if (_dragging = !0, e.stopImmediatePropagation(), !options.hideRowMoveShadow) { + let cellNodeElm = _grid.getCellNode(cell.row, cell.cell), slickRowElm = cellNodeElm && cellNodeElm.closest(".slick-row"); + slickRowElm && (dd.clonedSlickRow = slickRowElm.cloneNode(!0), dd.clonedSlickRow.classList.add("slick-reorder-shadow-row"), dd.clonedSlickRow.style.display = "none", dd.clonedSlickRow.style.marginLeft = Number(options.rowMoveShadowMarginLeft || 0) + "px", dd.clonedSlickRow.style.marginTop = Number(options.rowMoveShadowMarginTop || 0) + "px", dd.clonedSlickRow.style.opacity = `${options.rowMoveShadowOpacity || 0.95}`, dd.clonedSlickRow.style.transform = `scale(${options.rowMoveShadowScale || 0.75})`, _canvas.appendChild(dd.clonedSlickRow)); + } + var selectedRows = options.singleRowMove ? [cell.row] : _grid.getSelectedRows(); + (selectedRows.length === 0 || !selectedRows.some((selectedRow) => selectedRow === cell.row)) && (selectedRows = [cell.row], options.disableRowSelection || _grid.setSelectedRows(selectedRows)); + var rowHeight = _grid.getOptions().rowHeight; + dd.selectedRows = selectedRows, dd.selectionProxy = document.createElement("div"), dd.selectionProxy.className = "slick-reorder-proxy", dd.selectionProxy.style.display = "none", dd.selectionProxy.style.position = "absolute", dd.selectionProxy.style.zIndex = "99999", dd.selectionProxy.style.width = `${_canvas.clientWidth}px`, dd.selectionProxy.style.height = `${rowHeight * selectedRows.length}px`, _canvas.appendChild(dd.selectionProxy), dd.guide = document.createElement("div"), dd.guide.className = "slick-reorder-guide", dd.guide.style.position = "absolute", dd.guide.style.zIndex = "99999", dd.guide.style.width = `${_canvas.clientWidth}px`, dd.guide.style.top = "-1000px", _canvas.appendChild(dd.guide), dd.insertBefore = -1; + } + } + function handleDrag(evt, dd) { + if (!_dragging) + return; + evt.stopImmediatePropagation(); + let e = evt.getNativeEvent(); + var targetEvent = e.touches ? e.touches[0] : e; + let top = targetEvent.pageY - (Utils.offset(_canvas).top || 0); + dd.selectionProxy.style.top = `${top - 5}px`, dd.selectionProxy.style.display = "block", dd.clonedSlickRow && (dd.clonedSlickRow.style.top = `${top - 6}px`, dd.clonedSlickRow.style.display = "block"); + var insertBefore = Math.max(0, Math.min(Math.round(top / _grid.getOptions().rowHeight), _grid.getDataLength())); + if (insertBefore !== dd.insertBefore) { + var eventData = { + grid: _grid, + rows: dd.selectedRows, + insertBefore + }; + if (_self.onBeforeMoveRows.notify(eventData).getReturnValue() === !1 ? dd.canMove = !1 : dd.canMove = !0, _usabilityOverride && dd.canMove) { + var insertBeforeDataContext = _grid.getDataItem(insertBefore); + dd.canMove = checkUsabilityOverride(insertBefore, insertBeforeDataContext, _grid); + } + dd.canMove ? dd.guide.style.top = `${insertBefore * (_grid.getOptions().rowHeight || 0)}px` : dd.guide.style.top = "-1000px", dd.insertBefore = insertBefore; + } + } + function handleDragEnd(e, dd) { + if (_dragging && (_dragging = !1, e.stopImmediatePropagation(), dd.guide.remove(), dd.selectionProxy.remove(), dd.clonedSlickRow && (dd.clonedSlickRow.remove(), dd.clonedSlickRow = null), dd.canMove)) { + var eventData = { + grid: _grid, + rows: dd.selectedRows, + insertBefore: dd.insertBefore + }; + _self.onMoveRows.notify(eventData); + } + } + function getColumnDefinition() { + return { + id: options.columnId || "_move", + name: "", + field: "move", + width: options.width || 40, + behavior: "selectAndMove", + selectable: !1, + resizable: !1, + // cssClass: options.cssClass, + formatter: moveIconFormatter + }; + } + function moveIconFormatter(row, cell, value, columnDef, dataContext, grid) { + return checkUsabilityOverride(row, dataContext, grid) ? { addClasses: "cell-reorder dnd " + options.cssClass || "", text: "" } : null; + } + function checkUsabilityOverride(row, dataContext, grid) { + return typeof _usabilityOverride == "function" ? _usabilityOverride(row, dataContext, grid) : !0; + } + function usabilityOverride(overrideFn) { + _usabilityOverride = overrideFn; + } + function isHandlerColumn(columnIndex) { + return /move|selectAndMove/.test(_grid.getColumns()[columnIndex].behavior); + } + Utils.extend(this, { + onBeforeMoveRows: new SlickEvent(), + onMoveRows: new SlickEvent(), + init, + destroy, + getColumnDefinition, + setOptions, + usabilityOverride, + isHandlerColumn, + pluginName: "RowMoveManager" + }); + } + window.Slick && Utils.extend(!0, window, { + Slick: { + RowMoveManager + } + }); +})(); diff --git a/dist/browser/plugins/slick.rowselectionmodel.js b/dist/browser/plugins/slick.rowselectionmodel.js new file mode 100644 index 00000000..083c21ea --- /dev/null +++ b/dist/browser/plugins/slick.rowselectionmodel.js @@ -0,0 +1,151 @@ +"use strict"; +(() => { + // src/plugins/slick.rowselectionmodel.js + var EventData = Slick.EventData, EventHandler = Slick.EventHandler, keyCode = Slick.keyCode, SlickEvent = Slick.Event, SlickRange = Slick.Range, Draggable = Slick.Draggable, CellRangeDecorator = Slick.CellRangeDecorator, CellRangeSelector = Slick.CellRangeSelector, Utils = Slick.Utils; + function RowSelectionModel(options) { + var _grid, _ranges = [], _self = this, _handler = new EventHandler(), _inHandler, _options, _selector, _isRowMoveManagerHandler, _defaults = { + selectActiveRow: !0, + dragToSelect: !1, + autoScrollWhenDrag: !0, + cellRangeSelector: void 0 + }; + function init(grid) { + if (typeof Draggable == "undefined") + throw new Error('Slick.Draggable is undefined, make sure to import "slick.interactions.js"'); + if (_options = Utils.extend(!0, {}, _defaults, options), _selector = _options.cellRangeSelector, _grid = grid, !_selector && _options.dragToSelect) { + if (!CellRangeDecorator) + throw new Error("Slick.CellRangeDecorator is required when option dragToSelect set to true"); + _selector = new CellRangeSelector({ + selectionCss: { + border: "none" + }, + autoScroll: _options.autoScrollWhenDrag + }); + } + _handler.subscribe( + _grid.onActiveCellChanged, + wrapHandler(handleActiveCellChange) + ), _handler.subscribe( + _grid.onKeyDown, + wrapHandler(handleKeyDown) + ), _handler.subscribe( + _grid.onClick, + wrapHandler(handleClick) + ), _selector && (grid.registerPlugin(_selector), _selector.onCellRangeSelecting.subscribe(handleCellRangeSelected), _selector.onCellRangeSelected.subscribe(handleCellRangeSelected), _selector.onBeforeCellRangeSelected.subscribe(handleBeforeCellRangeSelected)); + } + function destroy() { + _handler.unsubscribeAll(), _selector && (_selector.onCellRangeSelecting.unsubscribe(handleCellRangeSelected), _selector.onCellRangeSelected.unsubscribe(handleCellRangeSelected), _selector.onBeforeCellRangeSelected.unsubscribe(handleBeforeCellRangeSelected), _grid.unregisterPlugin(_selector), _selector.destroy && _selector.destroy()); + } + function wrapHandler(handler) { + return function() { + _inHandler || (_inHandler = !0, handler.apply(this, arguments), _inHandler = !1); + }; + } + function rangesToRows(ranges) { + for (var rows = [], i = 0; i < ranges.length; i++) + for (var j = ranges[i].fromRow; j <= ranges[i].toRow; j++) + rows.push(j); + return rows; + } + function rowsToRanges(rows) { + for (var ranges = [], lastCell = _grid.getColumns().length - 1, i = 0; i < rows.length; i++) + ranges.push(new SlickRange(rows[i], 0, rows[i], lastCell)); + return ranges; + } + function getRowsRange(from, to) { + var i, rows = []; + for (i = from; i <= to; i++) + rows.push(i); + for (i = to; i < from; i++) + rows.push(i); + return rows; + } + function getSelectedRows() { + return rangesToRows(_ranges); + } + function setSelectedRows(rows) { + setSelectedRanges(rowsToRanges(rows), "SlickRowSelectionModel.setSelectedRows"); + } + function setSelectedRanges(ranges, caller) { + if (!((!_ranges || _ranges.length === 0) && (!ranges || ranges.length === 0))) { + _ranges = ranges; + var eventData = new EventData(null, _ranges); + Object.defineProperty(eventData, "detail", { writable: !0, configurable: !0, value: { caller: caller || "SlickRowSelectionModel.setSelectedRanges" } }), _self.onSelectedRangesChanged.notify(_ranges, eventData); + } + } + function getSelectedRanges() { + return _ranges; + } + function refreshSelections() { + setSelectedRows(getSelectedRows()); + } + function handleActiveCellChange(e, data) { + _options.selectActiveRow && data.row != null && setSelectedRanges([new SlickRange(data.row, 0, data.row, _grid.getColumns().length - 1)]); + } + function handleKeyDown(e) { + var activeRow = _grid.getActiveCell(); + if (_grid.getOptions().multiSelect && activeRow && e.shiftKey && !e.ctrlKey && !e.altKey && !e.metaKey && (e.which == keyCode.UP || e.which == keyCode.DOWN)) { + var selectedRows = getSelectedRows(); + selectedRows.sort(function(x, y) { + return x - y; + }), selectedRows.length || (selectedRows = [activeRow.row]); + var top = selectedRows[0], bottom = selectedRows[selectedRows.length - 1], active; + if (e.which == keyCode.DOWN ? active = activeRow.row < bottom || top == bottom ? ++bottom : ++top : active = activeRow.row < bottom ? --bottom : --top, active >= 0 && active < _grid.getDataLength()) { + _grid.scrollRowIntoView(active); + var tempRanges = rowsToRanges(getRowsRange(top, bottom)); + setSelectedRanges(tempRanges); + } + e.preventDefault(), e.stopPropagation(); + } + } + function handleClick(e) { + var cell = _grid.getCellFromEvent(e); + if (!cell || !_grid.canCellBeActive(cell.row, cell.cell) || !_grid.getOptions().multiSelect || !e.ctrlKey && !e.shiftKey && !e.metaKey) + return !1; + var selection = rangesToRows(_ranges), idx = selection.indexOf(cell.row); + if (idx === -1 && (e.ctrlKey || e.metaKey)) + selection.push(cell.row), _grid.setActiveCell(cell.row, cell.cell); + else if (idx !== -1 && (e.ctrlKey || e.metaKey)) + selection = selection.filter((o) => o !== cell.row), _grid.setActiveCell(cell.row, cell.cell); + else if (selection.length && e.shiftKey) { + var last = selection.pop(), from = Math.min(cell.row, last), to = Math.max(cell.row, last); + selection = []; + for (var i = from; i <= to; i++) + i !== last && selection.push(i); + selection.push(last), _grid.setActiveCell(cell.row, cell.cell); + } + var tempRanges = rowsToRanges(selection); + return setSelectedRanges(tempRanges), e.stopImmediatePropagation(), !0; + } + function handleBeforeCellRangeSelected(e, cell) { + if (!_isRowMoveManagerHandler) { + var rowMoveManager = _grid.getPluginByName("RowMoveManager") || _grid.getPluginByName("CrossGridRowMoveManager"); + _isRowMoveManagerHandler = rowMoveManager ? rowMoveManager.isHandlerColumn : Utils.noop; + } + if (_grid.getEditorLock().isActive() || _isRowMoveManagerHandler(cell.cell)) + return e.stopPropagation(), !1; + _grid.setActiveCell(cell.row, cell.cell); + } + function handleCellRangeSelected(e, args) { + if (!_grid.getOptions().multiSelect || !_options.selectActiveRow) + return !1; + setSelectedRanges([new SlickRange(args.range.fromRow, 0, args.range.toRow, _grid.getColumns().length - 1)]); + } + Utils.extend(this, { + getSelectedRows, + setSelectedRows, + getSelectedRanges, + setSelectedRanges, + refreshSelections, + init, + destroy, + pluginName: "RowSelectionModel", + onSelectedRangesChanged: new SlickEvent() + }); + } + window.Slick && Utils.extend(!0, window, { + Slick: { + RowSelectionModel + } + }); +})(); diff --git a/dist/browser/plugins/slick.state.js b/dist/browser/plugins/slick.state.js new file mode 100644 index 00000000..2ce4bebb --- /dev/null +++ b/dist/browser/plugins/slick.state.js @@ -0,0 +1,140 @@ +"use strict"; +(() => { + // src/plugins/slick.state.js + var SlickEvent = Slick.Event, Utils = Slick.Utils, localStorageWrapper = function() { + var localStorage = window.localStorage; + return typeof localStorage == "undefined" && console.error("localStorage is not available. slickgrid statepersistor disabled."), { + get: function(key) { + return new Promise((resolve, reject) => { + if (!localStorage) { + reject("missing localStorage"); + return; + } + try { + var d = localStorage.getItem(key); + if (d) + return resolve(JSON.parse(d)); + resolve({}); + } catch (exc) { + reject(exc); + } + }); + }, + set: function(key, obj) { + localStorage && (typeof obj != "undefined" && (obj = JSON.stringify(obj)), localStorage.setItem(key, obj)); + } + }; + }, defaults = { + key_prefix: "slickgrid:", + storage: new localStorageWrapper(), + scrollRowIntoView: !0 + }; + function State(options) { + options = Utils.extend(!0, {}, defaults, options); + var _grid, _cid, _store = options.storage, onStateChanged = new SlickEvent(), userData = { + state: null, + current: null + }; + function init(grid) { + _grid = grid, _cid = grid.cid || options.cid, _cid ? (_grid.onColumnsResized.subscribe(save), _grid.onColumnsReordered.subscribe(save), _grid.onSort.subscribe(save)) : console.warn("grid has no client id. state persisting is disabled."); + } + function destroy() { + _grid.onSort.unsubscribe(save), _grid.onColumnsReordered.unsubscribe(save), _grid.onColumnsResized.unsubscribe(save), save(); + } + function save() { + if (_cid && _store) { + var state = { + sortcols: getSortColumns(), + viewport: _grid.getViewport(), + columns: getColumns(), + userData: null + }; + return state.userData = userData.current, setUserDataFromState(state.userData), onStateChanged.notify(state), _store.set(options.key_prefix + _cid, state); + } + } + function restore() { + return new Promise((resolve, reject) => { + if (!_cid) { + reject("missing client id"); + return; + } + if (!_store) { + reject("missing store"); + return; + } + _store.get(options.key_prefix + _cid).then(function(state) { + if (state) { + if (state.sortcols && _grid.setSortColumns(state.sortcols || []), state.viewport && options.scrollRowIntoView && _grid.scrollRowIntoView(state.viewport.top, !0), state.columns) { + var defaultColumns = options.defaultColumns; + if (defaultColumns) { + var defaultColumnsLookup = {}; + defaultColumns.forEach(function(colDef) { + defaultColumnsLookup[colDef.id] = colDef; + }); + var cols = []; + (state.columns || []).forEach(function(columnDef) { + defaultColumnsLookup[columnDef.id] && cols.push(Utils.extend(!0, {}, defaultColumnsLookup[columnDef.id], { + width: columnDef.width, + headerCssClass: columnDef.headerCssClass + })); + }), state.columns = cols; + } + _grid.setColumns(state.columns); + } + setUserDataFromState(state.userData); + } + resolve(state); + }).catch(function(e) { + reject(e); + }); + }); + } + function setUserData(data) { + return userData.current = data, this; + } + function setUserDataFromState(data) { + return userData.state = data, setUserData(data); + } + function getUserData() { + return userData.current; + } + function getStateUserData() { + return userData.state; + } + function resetUserData() { + return userData.current = userData.state, this; + } + function getColumns() { + return _grid.getColumns().map(function(col) { + return { + id: col.id, + width: col.width + }; + }); + } + function getSortColumns() { + var sortCols = _grid.getSortColumns(); + return sortCols; + } + function reset() { + _store.set(options.key_prefix + _cid, {}), setUserDataFromState(null); + } + Utils.extend(this, { + init, + destroy, + save, + setUserData, + resetUserData, + getUserData, + getStateUserData, + restore, + onStateChanged, + reset + }); + } + window.Slick && Utils.extend(!0, window, { + Slick: { + State + } + }); +})(); diff --git a/dist/browser/slick.compositeeditor.js b/dist/browser/slick.compositeeditor.js new file mode 100644 index 00000000..4d782738 --- /dev/null +++ b/dist/browser/slick.compositeeditor.js @@ -0,0 +1,112 @@ +"use strict"; +(() => { + // src/slick.compositeeditor.js + var Utils = Slick.Utils; + function CompositeEditor(columns, containers, options) { + var defaultOptions = { + modalType: "edit", + // available type (create, edit, mass) + validationFailedMsg: "Some of the fields have failed validation", + validationMsgPrefix: null, + show: null, + hide: null, + position: null, + destroy: null, + formValues: {}, + editors: {} + }, noop = function() { + }, firstInvalidEditor; + options = Slick.Utils.extend({}, defaultOptions, options); + function getContainerBox(i) { + var c = containers[i], offset = Slick.Utils.offset(c), w = Slick.Utils.width(c), h = Slick.Utils.height(c); + return { + top: offset && offset.top, + left: offset && offset.left, + bottom: offset && offset.top + h, + right: offset && offset.left + w, + width: w, + height: h, + visible: !0 + }; + } + function editor(args) { + var editors = []; + function init() { + for (var newArgs = {}, idx = 0; idx < columns.length; ) { + if (columns[idx].editor) { + var column = columns[idx]; + newArgs = Slick.Utils.extend(!1, {}, args), newArgs.container = containers[idx], newArgs.column = column, newArgs.position = getContainerBox(idx), newArgs.commitChanges = noop, newArgs.cancelChanges = noop, newArgs.compositeEditorOptions = options, newArgs.formValues = {}; + var currentEditor = new column.editor(newArgs); + options.editors[column.id] = currentEditor, editors.push(currentEditor); + } + idx++; + } + setTimeout(function() { + Array.isArray(editors) && editors.length > 0 && editors[0].focus && editors[0].focus(); + }, 0); + } + this.destroy = function() { + for (var idx = 0; idx < editors.length; ) + editors[idx].destroy(), idx++; + options.destroy && options.destroy(), editors = []; + }, this.focus = function() { + (firstInvalidEditor || editors[0]).focus(); + }, this.isValueChanged = function() { + for (var idx = 0; idx < editors.length; ) { + if (editors[idx].isValueChanged()) + return !0; + idx++; + } + return !1; + }, this.serializeValue = function() { + for (var serializedValue = [], idx = 0; idx < editors.length; ) + serializedValue[idx] = editors[idx].serializeValue(), idx++; + return serializedValue; + }, this.applyValue = function(item, state) { + for (var idx = 0; idx < editors.length; ) + editors[idx].applyValue(item, state[idx]), idx++; + }, this.loadValue = function(item) { + for (var idx = 0; idx < editors.length; ) + editors[idx].loadValue(item), idx++; + }, this.validate = function(target) { + var validationResults, errors = [], targetElm = target || null; + firstInvalidEditor = null; + for (var idx = 0; idx < editors.length; ) { + var columnDef = editors[idx].args && editors[idx].args.column || {}; + if (columnDef) { + var validationElm = document.querySelector(".item-details-validation.editor-" + columnDef.id), labelElm = document.querySelector(".item-details-label.editor-" + columnDef.id), editorElm = document.querySelector("[data-editorid=" + columnDef.id + "]"), validationMsgPrefix = options && options.validationMsgPrefix || ""; + (!targetElm || Slick.Utils.contains(editorElm, targetElm)) && (validationResults = editors[idx].validate(), validationResults.valid ? validationElm && (validationElm.textContent = "", editorElm.classList.remove("invalid"), labelElm.classList.remove("invalid")) : (firstInvalidEditor = editors[idx], errors.push({ + index: idx, + editor: editors[idx], + container: containers[idx], + msg: validationResults.msg + }), validationElm && (validationElm.textContent = validationMsgPrefix + validationResults.msg, labelElm.classList.add("invalid"), editorElm.classList.add("invalid")))), validationElm = null, labelElm = null, editorElm = null; + } + idx++; + } + return targetElm = null, errors.length ? { + valid: !1, + msg: options.validationFailedMsg, + errors + } : { + valid: !0, + msg: "" + }; + }, this.hide = function() { + for (var idx = 0; idx < editors.length; ) + editors[idx].hide && editors[idx].hide(), idx++; + options.hide && options.hide(); + }, this.show = function() { + for (var idx = 0; idx < editors.length; ) + editors[idx].show && editors[idx].show(), idx++; + options.show && options.show(); + }, this.position = function(box) { + options.position && options.position(box); + }, init(); + } + return editor.prototype = this, editor; + } + window.Slick && Utils.extend(Slick, { + CompositeEditor + }); +})(); diff --git a/dist/browser/slick.core.js b/dist/browser/slick.core.js new file mode 100644 index 00000000..00884b8a --- /dev/null +++ b/dist/browser/slick.core.js @@ -0,0 +1,450 @@ +"use strict"; +var Slick = (() => { + var __defProp = Object.defineProperty; + var __getOwnPropDesc = Object.getOwnPropertyDescriptor; + var __getOwnPropNames = Object.getOwnPropertyNames; + var __hasOwnProp = Object.prototype.hasOwnProperty; + var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: !0 }); + }, __copyProps = (to, from, except, desc) => { + if (from && typeof from == "object" || typeof from == "function") + for (let key of __getOwnPropNames(from)) + !__hasOwnProp.call(to, key) && key !== except && __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + return to; + }; + var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: !0 }), mod); + + // src/slick.core.js + var slick_core_exports = {}; + __export(slick_core_exports, { + BindingEventService: () => BindingEventService, + ColAutosizeMode: () => ColAutosizeMode, + EditorLock: () => EditorLock, + Event: () => Event, + EventData: () => EventData, + EventHandler: () => EventHandler, + GlobalEditorLock: () => GlobalEditorLock, + GridAutosizeColsMode: () => GridAutosizeColsMode, + Group: () => Group, + GroupTotals: () => GroupTotals, + NonDataItem: () => NonDataItem, + Range: () => Range, + RowSelectionMode: () => RowSelectionMode, + Utils: () => Utils, + ValueFilterMode: () => ValueFilterMode, + WidthEvalMode: () => WidthEvalMode, + keyCode: () => keyCode, + preClickClassName: () => preClickClassName + }); + function EventData(event, args) { + this.event = event; + let nativeEvent = event, arguments_ = args, isPropagationStopped = !1, isImmediatePropagationStopped = !1, isDefaultPrevented = !1, returnValues = [], returnValue; + if (event) { + let eventProps = [ + "altKey", + "ctrlKey", + "metaKey", + "shiftKey", + "key", + "keyCode", + "clientX", + "clientY", + "offsetX", + "offsetY", + "pageX", + "pageY", + "bubbles", + "type", + "which", + "x", + "y" + ]; + for (let key of eventProps) + this[key] = event[key]; + } + this.target = nativeEvent ? nativeEvent.target : void 0, this.stopPropagation = function() { + isPropagationStopped = !0, nativeEvent && nativeEvent.stopPropagation(); + }, this.isPropagationStopped = function() { + return isPropagationStopped; + }, this.stopImmediatePropagation = function() { + isImmediatePropagationStopped = !0, nativeEvent && nativeEvent.stopImmediatePropagation(); + }, this.isImmediatePropagationStopped = function() { + return isImmediatePropagationStopped; + }, this.getNativeEvent = function() { + return nativeEvent; + }, this.preventDefault = function() { + nativeEvent && nativeEvent.preventDefault(), isDefaultPrevented = !0; + }, this.isDefaultPrevented = function() { + return nativeEvent ? nativeEvent.defaultPrevented : isDefaultPrevented; + }, this.addReturnValue = function(value) { + returnValues.push(value), returnValue === void 0 && value !== void 0 && (returnValue = value); + }, this.getReturnValue = function() { + return returnValue; + }, this.getArguments = function() { + return arguments_; + }; + } + function Event() { + var handlers = []; + this.subscribe = function(fn) { + handlers.push(fn); + }, this.unsubscribe = function(fn) { + for (var i = handlers.length - 1; i >= 0; i--) + handlers[i] === fn && handlers.splice(i, 1); + }, this.notify = function(args, e, scope) { + e instanceof EventData || (e = new EventData(e, args)), scope = scope || this; + for (var i = 0; i < handlers.length && !(e.isPropagationStopped() || e.isImmediatePropagationStopped()); i++) { + let returnValue = handlers[i].call(scope, e, args); + e.addReturnValue(returnValue); + } + return e; + }; + } + function EventHandler() { + var handlers = []; + this.subscribe = function(event, handler) { + return handlers.push({ + event, + handler + }), event.subscribe(handler), this; + }, this.unsubscribe = function(event, handler) { + for (var i = handlers.length; i--; ) + if (handlers[i].event === event && handlers[i].handler === handler) { + handlers.splice(i, 1), event.unsubscribe(handler); + return; + } + return this; + }, this.unsubscribeAll = function() { + for (var i = handlers.length; i--; ) + handlers[i].event.unsubscribe(handlers[i].handler); + return handlers = [], this; + }; + } + function Range(fromRow, fromCell, toRow, toCell) { + toRow === void 0 && toCell === void 0 && (toRow = fromRow, toCell = fromCell), this.fromRow = Math.min(fromRow, toRow), this.fromCell = Math.min(fromCell, toCell), this.toRow = Math.max(fromRow, toRow), this.toCell = Math.max(fromCell, toCell), this.isSingleRow = function() { + return this.fromRow == this.toRow; + }, this.isSingleCell = function() { + return this.fromRow == this.toRow && this.fromCell == this.toCell; + }, this.contains = function(row, cell) { + return row >= this.fromRow && row <= this.toRow && cell >= this.fromCell && cell <= this.toCell; + }, this.toString = function() { + return this.isSingleCell() ? "(" + this.fromRow + ":" + this.fromCell + ")" : "(" + this.fromRow + ":" + this.fromCell + " - " + this.toRow + ":" + this.toCell + ")"; + }; + } + function NonDataItem() { + this.__nonDataRow = !0; + } + function Group() { + this.__group = !0, this.level = 0, this.count = 0, this.value = null, this.title = null, this.collapsed = !1, this.selectChecked = !1, this.totals = null, this.rows = [], this.groups = null, this.groupingKey = null; + } + Group.prototype = new NonDataItem(); + Group.prototype.equals = function(group) { + return this.value === group.value && this.count === group.count && this.collapsed === group.collapsed && this.title === group.title; + }; + function GroupTotals() { + this.__groupTotals = !0, this.group = null, this.initialized = !1; + } + GroupTotals.prototype = new NonDataItem(); + function EditorLock() { + var activeEditController = null; + this.isActive = function(editController) { + return editController ? activeEditController === editController : activeEditController !== null; + }, this.activate = function(editController) { + if (editController !== activeEditController) { + if (activeEditController !== null) + throw new Error("SlickGrid.EditorLock.activate: an editController is still active, can't activate another editController"); + if (!editController.commitCurrentEdit) + throw new Error("SlickGrid.EditorLock.activate: editController must implement .commitCurrentEdit()"); + if (!editController.cancelCurrentEdit) + throw new Error("SlickGrid.EditorLock.activate: editController must implement .cancelCurrentEdit()"); + activeEditController = editController; + } + }, this.deactivate = function(editController) { + if (activeEditController) { + if (activeEditController !== editController) + throw new Error("SlickGrid.EditorLock.deactivate: specified editController is not the currently active one"); + activeEditController = null; + } + }, this.commitCurrentEdit = function() { + return activeEditController ? activeEditController.commitCurrentEdit() : !0; + }, this.cancelCurrentEdit = function() { + return activeEditController ? activeEditController.cancelCurrentEdit() : !0; + }; + } + function regexSanitizer(dirtyHtml) { + return dirtyHtml.replace(/(\b)(on[a-z]+)(\s*)=|javascript:([^>]*)[^>]*|(<\s*)(\/*)script([<>]*).*(<\s*)(\/*)script(>*)|(<)(\/*)(script|script defer)(.*)(>|>">)/gi, ""); + } + function calculateAvailableSpace(element) { + let bottom = 0, top = 0, left = 0, right = 0, windowHeight = window.innerHeight || 0, windowWidth = window.innerWidth || 0, scrollPosition = windowScrollPosition(), pageScrollTop = scrollPosition.top, pageScrollLeft = scrollPosition.left, elmOffset = offset(element); + if (elmOffset) { + let elementOffsetTop = elmOffset.top || 0, elementOffsetLeft = elmOffset.left || 0; + top = elementOffsetTop - pageScrollTop, bottom = windowHeight - (elementOffsetTop - pageScrollTop), left = elementOffsetLeft - pageScrollLeft, right = windowWidth - (elementOffsetLeft - pageScrollLeft); + } + return { top, bottom, left, right }; + } + function createDomElement(tagName, elementOptions, appendToParent) { + let elm = document.createElement(tagName); + return elementOptions && Object.keys(elementOptions).forEach((elmOptionKey) => { + let elmValue = elementOptions[elmOptionKey]; + typeof elmValue == "object" ? Object.assign(elm[elmOptionKey], elmValue) : elm[elmOptionKey] = elementOptions[elmOptionKey]; + }), appendToParent && appendToParent.appendChild && appendToParent.appendChild(elm), elm; + } + function debounce(callback, wait) { + let timeoutId = null; + return (...args) => { + wait >= 0 ? (clearTimeout(timeoutId), timeoutId = setTimeout(() => callback.apply(null, args), wait)) : callback.apply(null); + }; + } + function emptyElement(element) { + if (element && element.firstChild) + for (; element.firstChild; ) + element.lastChild && element.removeChild(element.lastChild); + return element; + } + function innerSize(elm, type) { + let size = 0; + if (elm) { + let clientSize = type === "height" ? "clientHeight" : "clientWidth", sides = type === "height" ? ["top", "bottom"] : ["left", "right"]; + size = elm[clientSize]; + for (let side of sides) { + let sideSize = parseFloat(getElementProp(elm, `padding-${side}`)) || 0; + size -= sideSize; + } + } + return size; + } + function getElementProp(elm, property) { + return elm && elm.getComputedStyle ? window.getComputedStyle(elm, null).getPropertyValue(property) : null; + } + function isEmptyObject(obj) { + return obj == null ? !0 : Object.entries(obj).length === 0; + } + function noop() { + } + function offset(el) { + if (!el || !el.getBoundingClientRect) + return; + let box = el.getBoundingClientRect(), docElem = document.documentElement; + return { + top: box.top + window.pageYOffset - docElem.clientTop, + left: box.left + window.pageXOffset - docElem.clientLeft + }; + } + function windowScrollPosition() { + return { + left: window.pageXOffset || document.documentElement.scrollLeft || 0, + top: window.pageYOffset || document.documentElement.scrollTop || 0 + }; + } + function width(el, value) { + if (!(!el || !el.getBoundingClientRect)) { + if (value === void 0) + return el.getBoundingClientRect().width; + setStyleSize(el, "width", value); + } + } + function height(el, value) { + if (el) { + if (value === void 0) + return el.getBoundingClientRect().height; + setStyleSize(el, "height", value); + } + } + function setStyleSize(el, style, val) { + typeof val == "function" ? val = val() : typeof val == "string" ? el.style[style] = val : el.style[style] = val + "px"; + } + function contains(parent, child) { + return !parent || !child ? !1 : !parents(child).every(function(p) { + return parent != p; + }); + } + function isHidden(el) { + return el.offsetWidth === 0 && el.offsetHeight === 0; + } + function parents(el, selector) { + let parents2 = [], visible = selector == ":visible", hidden = selector == ":hidden"; + for (; (el = el.parentNode) && el !== document && !(!el || !el.parentNode); ) + hidden ? isHidden(el) && parents2.push(el) : visible ? isHidden(el) || parents2.push(el) : (!selector || el.matches(selector)) && parents2.push(el); + return parents2; + } + function toFloat(value) { + var x = parseFloat(value); + return isNaN(x) ? 0 : x; + } + function show(el, type) { + type = type || "", Array.isArray(el) ? el.forEach(function(e) { + e.style.display = type; + }) : el.style.display = type; + } + function hide(el) { + Array.isArray(el) ? el.forEach(function(e) { + e.style.display = "none"; + }) : el.style.display = "none"; + } + function slideUp(el, callback) { + return slideAnimation(el, "slideUp", callback); + } + function slideDown(el, callback) { + return slideAnimation(el, "slideDown", callback); + } + function slideAnimation(el, slideDirection, callback) { + if (window.jQuery !== void 0) { + window.jQuery(el)[slideDirection]("fast", callback); + return; + } + slideDirection === "slideUp" ? hide(el) : show(el), callback(); + } + var getProto = Object.getPrototypeOf, class2type = {}, toString = class2type.toString, hasOwn = class2type.hasOwnProperty, fnToString = hasOwn.toString, ObjectFunctionString = fnToString.call(Object); + function isFunction(obj) { + return typeof obj == "function" && typeof obj.nodeType != "number" && typeof obj.item != "function"; + } + function isPlainObject(obj) { + var proto, Ctor; + return !obj || toString.call(obj) !== "[object Object]" ? !1 : (proto = getProto(obj), proto ? (Ctor = hasOwn.call(proto, "constructor") && proto.constructor, typeof Ctor == "function" && fnToString.call(Ctor) === ObjectFunctionString) : !0); + } + function extend() { + var options, name, src, copy, copyIsArray, clone, target = arguments[0], i = 1, length = arguments.length, deep = !1; + for (typeof target == "boolean" ? (deep = target, target = arguments[i] || {}, i++) : target = target || {}, typeof target != "object" && !isFunction(target) && (target = {}), i === length && (target = this, i--); i < length; i++) + if ((options = arguments[i]) != null) + for (name in options) + copy = options[name], !(name === "__proto__" || target === copy) && (deep && copy && (isPlainObject(copy) || (copyIsArray = Array.isArray(copy))) ? (src = target[name], copyIsArray && !Array.isArray(src) ? clone = [] : !copyIsArray && !isPlainObject(src) ? clone = {} : clone = src, copyIsArray = !1, target[name] = extend(deep, clone, copy)) : copy !== void 0 && (target[name] = copy)); + return target; + } + function BindingEventService() { + this.boundedEvents = [], this.destroy = function() { + this.unbindAll(), this.boundedEvents = []; + }, this.bind = function(element, eventName, listener, options) { + element.addEventListener(eventName, listener, options), this.boundedEvents.push({ element, eventName, listener }); + }, this.unbind = function(element, eventName, listener) { + element && element.removeEventListener && element.removeEventListener(eventName, listener); + }, this.unbindByEventName = function(element, eventName) { + let boundedEvent = this.boundedEvents.find((e) => e.element === element && e.eventName === eventName); + boundedEvent && this.unbind(boundedEvent.element, boundedEvent.eventName, boundedEvent.listener); + }, this.unbindAll = function() { + for (; this.boundedEvents.length > 0; ) { + let boundedEvent = this.boundedEvents.pop(), { element, eventName, listener } = boundedEvent; + this.unbind(element, eventName, listener); + } + }; + } + var SlickCore = { + // "Event": Event, + // "EventData": EventData, + // "EventHandler": EventHandler, + // "Range": Range, + // "NonDataRow": NonDataItem, + // "Group": Group, + // "GroupTotals": GroupTotals, + // "EditorLock": EditorLock, + RegexSanitizer: regexSanitizer, + // "BindingEventService": BindingEventService, + Utils: { + debounce, + extend, + calculateAvailableSpace, + createDomElement, + emptyElement, + innerSize, + isEmptyObject, + noop, + offset, + height, + width, + setStyleSize, + contains, + toFloat, + parents, + show, + hide, + slideUp, + slideDown, + storage: { + // https://stackoverflow.com/questions/29222027/vanilla-alternative-to-jquery-data-function-any-native-javascript-alternati + _storage: /* @__PURE__ */ new WeakMap(), + put: function(element, key, obj) { + this._storage.has(element) || this._storage.set(element, /* @__PURE__ */ new Map()), this._storage.get(element).set(key, obj); + }, + get: function(element, key) { + let el = this._storage.get(element); + return el ? el.get(key) : null; + }, + remove: function(element, key) { + var ret = this._storage.get(element).delete(key); + return !this._storage.get(element).size === 0 && this._storage.delete(element), ret; + } + } + }, + /*** + * A global singleton editor lock. + * @class GlobalEditorLock + * @static + * @constructor + */ + GlobalEditorLock: new EditorLock(), + keyCode: { + SPACE: 8, + BACKSPACE: 8, + DELETE: 46, + DOWN: 40, + END: 35, + ENTER: 13, + ESCAPE: 27, + HOME: 36, + INSERT: 45, + LEFT: 37, + PAGE_DOWN: 34, + PAGE_UP: 33, + RIGHT: 39, + TAB: 9, + UP: 38, + A: 65 + }, + preClickClassName: "slick-edit-preclick", + GridAutosizeColsMode: { + None: "NOA", + LegacyOff: "LOF", + LegacyForceFit: "LFF", + IgnoreViewport: "IGV", + FitColsToViewport: "FCV", + FitViewportToCols: "FVC" + }, + ColAutosizeMode: { + Locked: "LCK", + Guide: "GUI", + Content: "CON", + ContentExpandOnly: "CXO", + ContentIntelligent: "CTI" + }, + RowSelectionMode: { + FirstRow: "FS1", + FirstNRows: "FSN", + AllRows: "ALL", + LastRow: "LS1" + }, + ValueFilterMode: { + None: "NONE", + DeDuplicate: "DEDP", + GetGreatestAndSub: "GR8T", + GetLongestTextAndSub: "LNSB", + GetLongestText: "LNSC" + }, + WidthEvalMode: { + Auto: "AUTO", + TextOnly: "CANV", + HTML: "HTML" + } + }, { + Utils, + GlobalEditorLock, + keyCode, + preClickClassName, + GridAutosizeColsMode, + ColAutosizeMode, + RowSelectionMode, + ValueFilterMode, + WidthEvalMode + } = SlickCore; + typeof global != "undefined" && window.Slick && (global.Slick = window.Slick); + return __toCommonJS(slick_core_exports); +})(); diff --git a/dist/browser/slick.dataview.js b/dist/browser/slick.dataview.js new file mode 100644 index 00000000..da0a97de --- /dev/null +++ b/dist/browser/slick.dataview.js @@ -0,0 +1,754 @@ +"use strict"; +(() => { + // src/slick.dataview.js + var SlickEvent = Slick.Event, EventData = Slick.EventData, Group = Slick.Group, GroupTotals = Slick.GroupTotals, Utils = Slick.Utils, GroupItemMetadataProvider = Slick.GroupItemMetadataProvider; + function DataView(options) { + var self = this, defaults = { + groupItemMetadataProvider: null, + inlineFilters: !1 + }, idProperty = "id", items = [], rows = [], idxById = /* @__PURE__ */ new Map(), rowsById = null, filter = null, updated = null, suspend = !1, isBulkSuspend = !1, bulkDeleteIds = /* @__PURE__ */ new Map(), sortAsc = !0, fastSortField, sortComparer, refreshHints = {}, prevRefreshHints = {}, filterArgs, filteredItems = [], compiledFilter, compiledFilterWithCaching, filterCache = [], _grid = null, groupingInfoDefaults = { + getter: null, + formatter: null, + comparer: function(a, b) { + return a.value === b.value ? 0 : a.value > b.value ? 1 : -1; + }, + predefinedValues: [], + aggregators: [], + aggregateEmpty: !1, + aggregateCollapsed: !1, + aggregateChildGroups: !1, + collapsed: !1, + displayTotalsRow: !0, + lazyTotalsCalculation: !1 + }, groupingInfos = [], groups = [], toggledGroupsByLevel = [], groupingDelimiter = ":|:", selectedRowIds = null, preSelectedRowIdsChangeFn, pagesize = 0, pagenum = 0, totalRows = 0, onSelectedRowIdsChanged = new SlickEvent(), onSetItemsCalled = new SlickEvent(), onRowCountChanged = new SlickEvent(), onRowsChanged = new SlickEvent(), onRowsOrCountChanged = new SlickEvent(), onBeforePagingInfoChanged = new SlickEvent(), onPagingInfoChanged = new SlickEvent(), onGroupExpanded = new SlickEvent(), onGroupCollapsed = new SlickEvent(); + options = Utils.extend(!0, {}, defaults, options); + function beginUpdate(bulkUpdate) { + suspend = !0, isBulkSuspend = bulkUpdate === !0; + } + function endUpdate() { + var wasBulkSuspend = isBulkSuspend; + isBulkSuspend = !1, suspend = !1, wasBulkSuspend && (processBulkDelete(), ensureIdUniqueness()), refresh(); + } + function destroy() { + items = [], idxById = null, rowsById = null, filter = null, updated = null, sortComparer = null, filterCache = [], filteredItems = [], compiledFilter = null, compiledFilterWithCaching = null, _grid && _grid.onSelectedRowsChanged && _grid.onCellCssStylesChanged && (_grid.onSelectedRowsChanged.unsubscribe(), _grid.onCellCssStylesChanged.unsubscribe()), self.onRowsOrCountChanged && self.onRowsOrCountChanged.unsubscribe(); + } + function setRefreshHints(hints) { + refreshHints = hints; + } + function setFilterArgs(args) { + filterArgs = args; + } + function processBulkDelete() { + if (idxById) { + for (var id, item, newIdx = 0, i = 0, l = items.length; i < l; i++) { + if (item = items[i], id = item[idProperty], id === void 0) + throw new Error("[SlickGrid DataView] Each data element must implement a unique 'id' property"); + bulkDeleteIds.has(id) ? idxById.delete(id) : (items[newIdx] = item, idxById.set(id, newIdx), ++newIdx); + } + items.length = newIdx, bulkDeleteIds = /* @__PURE__ */ new Map(); + } + } + function updateIdxById(startingIndex) { + if (!(isBulkSuspend || !idxById)) { + startingIndex = startingIndex || 0; + for (var id, i = startingIndex, l = items.length; i < l; i++) { + if (id = items[i][idProperty], id === void 0) + throw new Error("[SlickGrid DataView] Each data element must implement a unique 'id' property"); + idxById.set(id, i); + } + } + } + function ensureIdUniqueness() { + if (!(isBulkSuspend || !idxById)) { + for (var id, i = 0, l = items.length; i < l; i++) + if (id = items[i][idProperty], id === void 0 || idxById.get(id) !== i) + throw new Error("[SlickGrid DataView] Each data element must implement a unique 'id' property"); + } + } + function getItems() { + return items; + } + function getIdPropertyName() { + return idProperty; + } + function setItems(data, objectIdProperty) { + objectIdProperty !== void 0 && (idProperty = objectIdProperty), items = filteredItems = data, onSetItemsCalled.notify({ idProperty: objectIdProperty, itemCount: items.length }, null, self), idxById = /* @__PURE__ */ new Map(), updateIdxById(), ensureIdUniqueness(), refresh(); + } + function setPagingOptions(args) { + onBeforePagingInfoChanged.notify(getPagingInfo(), null, self).getReturnValue() !== !1 && (args.pageSize != null && (pagesize = args.pageSize, pagenum = pagesize ? Math.min(pagenum, Math.max(0, Math.ceil(totalRows / pagesize) - 1)) : 0), args.pageNum != null && (pagenum = Math.min(args.pageNum, Math.max(0, Math.ceil(totalRows / pagesize) - 1))), onPagingInfoChanged.notify(getPagingInfo(), null, self), refresh()); + } + function getPagingInfo() { + var totalPages = pagesize ? Math.max(1, Math.ceil(totalRows / pagesize)) : 1; + return { pageSize: pagesize, pageNum: pagenum, totalRows, totalPages, dataView: self }; + } + function sort(comparer, ascending) { + sortAsc = ascending, sortComparer = comparer, fastSortField = null, ascending === !1 && items.reverse(), items.sort(comparer), ascending === !1 && items.reverse(), idxById = /* @__PURE__ */ new Map(), updateIdxById(), refresh(); + } + function fastSort(field, ascending) { + sortAsc = ascending, fastSortField = field, sortComparer = null; + var oldToString = Object.prototype.toString; + Object.prototype.toString = typeof field == "function" ? field : function() { + return this[field]; + }, ascending === !1 && items.reverse(), items.sort(), Object.prototype.toString = oldToString, ascending === !1 && items.reverse(), idxById = /* @__PURE__ */ new Map(), updateIdxById(), refresh(); + } + function reSort() { + sortComparer ? sort(sortComparer, sortAsc) : fastSortField && fastSort(fastSortField, sortAsc); + } + function getFilteredItems() { + return filteredItems; + } + function getFilteredItemCount() { + return filteredItems.length; + } + function getFilter() { + return filter; + } + function setFilter(filterFn) { + filter = filterFn, options.inlineFilters && (compiledFilter = compileFilter(), compiledFilterWithCaching = compileFilterWithCaching()), refresh(); + } + function getGrouping() { + return groupingInfos; + } + function setGrouping(groupingInfo) { + options.groupItemMetadataProvider || (options.groupItemMetadataProvider = new GroupItemMetadataProvider()), groups = [], toggledGroupsByLevel = [], groupingInfo = groupingInfo || [], groupingInfos = groupingInfo instanceof Array ? groupingInfo : [groupingInfo]; + for (var i = 0; i < groupingInfos.length; i++) { + var gi = groupingInfos[i] = Utils.extend(!0, {}, groupingInfoDefaults, groupingInfos[i]); + gi.getterIsAFn = typeof gi.getter == "function", gi.compiledAccumulators = []; + for (var idx = gi.aggregators.length; idx--; ) + gi.compiledAccumulators[idx] = compileAccumulatorLoop(gi.aggregators[idx]); + toggledGroupsByLevel[i] = {}; + } + refresh(); + } + function groupBy(valueGetter, valueFormatter, sortComparer2) { + if (valueGetter == null) { + setGrouping([]); + return; + } + setGrouping({ + getter: valueGetter, + formatter: valueFormatter, + comparer: sortComparer2 + }); + } + function setAggregators(groupAggregators, includeCollapsed) { + if (!groupingInfos.length) + throw new Error("[SlickGrid DataView] At least one grouping must be specified before calling setAggregators()."); + groupingInfos[0].aggregators = groupAggregators, groupingInfos[0].aggregateCollapsed = includeCollapsed, setGrouping(groupingInfos); + } + function getItemByIdx(i) { + return items[i]; + } + function getIdxById(id) { + return idxById && idxById.get(id); + } + function ensureRowsByIdCache() { + if (!rowsById) { + rowsById = {}; + for (var i = 0, l = rows.length; i < l; i++) + rowsById[rows[i][idProperty]] = i; + } + } + function getRowByItem(item) { + return ensureRowsByIdCache(), rowsById[item[idProperty]]; + } + function getRowById(id) { + return ensureRowsByIdCache(), rowsById[id]; + } + function getItemById(id) { + return items[idxById && idxById.get(id)]; + } + function mapItemsToRows(itemArray) { + var rows2 = []; + ensureRowsByIdCache(); + for (var i = 0, l = itemArray.length; i < l; i++) { + var row = rowsById[itemArray[i][idProperty]]; + row != null && (rows2[rows2.length] = row); + } + return rows2; + } + function mapIdsToRows(idArray) { + var rows2 = []; + ensureRowsByIdCache(); + for (var i = 0, l = idArray.length; i < l; i++) { + var row = rowsById[idArray[i]]; + row != null && (rows2[rows2.length] = row); + } + return rows2; + } + function mapRowsToIds(rowArray) { + for (var ids = [], i = 0, l = rowArray.length; i < l; i++) + if (rowArray[i] < rows.length) { + let rowItem = rows[rowArray[i]]; + ids[ids.length] = rowItem && rowItem[idProperty]; + } + return ids; + } + function updateSingleItem(id, item) { + if (idxById) { + if (!idxById.has(id)) + throw new Error("[SlickGrid DataView] Invalid id"); + if (id !== item[idProperty]) { + var newId = item[idProperty]; + if (newId == null) + throw new Error("[SlickGrid DataView] Cannot update item to associate with a null id"); + if (idxById.has(newId)) + throw new Error("[SlickGrid DataView] Cannot update item to associate with a non-unique id"); + idxById.set(newId, idxById.get(id)), idxById.delete(id), updated && updated[id] && delete updated[id], id = newId; + } + items[idxById.get(id)] = item, updated || (updated = {}), updated[id] = !0; + } + } + function updateItem(id, item) { + updateSingleItem(id, item), refresh(); + } + function updateItems(ids, newItems) { + if (ids.length !== newItems.length) + throw new Error("[SlickGrid DataView] Mismatch on the length of ids and items provided to update"); + for (var i = 0, l = newItems.length; i < l; i++) + updateSingleItem(ids[i], newItems[i]); + refresh(); + } + function insertItem(insertBefore, item) { + items.splice(insertBefore, 0, item), updateIdxById(insertBefore), refresh(); + } + function insertItems(insertBefore, newItems) { + Array.prototype.splice.apply(items, [insertBefore, 0].concat(newItems)), updateIdxById(insertBefore), refresh(); + } + function addItem(item) { + items.push(item), updateIdxById(items.length - 1), refresh(); + } + function addItems(newItems) { + items = items.concat(newItems), updateIdxById(items.length - newItems.length), refresh(); + } + function deleteItem(id) { + if (idxById) + if (isBulkSuspend) + bulkDeleteIds.set(id, !0); + else { + var idx = idxById.get(id); + if (idx === void 0) + throw new Error("[SlickGrid DataView] Invalid id"); + idxById.delete(id), items.splice(idx, 1), updateIdxById(idx), refresh(); + } + } + function deleteItems(ids) { + if (!(ids.length === 0 || !idxById)) + if (isBulkSuspend) + for (var i = 0, l = ids.length; i < l; i++) { + var id = ids[i], idx = idxById.get(id); + if (idx === void 0) + throw new Error("[SlickGrid DataView] Invalid id"); + bulkDeleteIds.set(id, !0); + } + else { + for (var indexesToDelete = [], i = 0, l = ids.length; i < l; i++) { + var id = ids[i], idx = idxById.get(id); + if (idx === void 0) + throw new Error("[SlickGrid DataView] Invalid id"); + idxById.delete(id), indexesToDelete.push(idx); + } + indexesToDelete.sort(); + for (var i = indexesToDelete.length - 1; i >= 0; --i) + items.splice(indexesToDelete[i], 1); + updateIdxById(indexesToDelete[0]), refresh(); + } + } + function sortedAddItem(item) { + if (!sortComparer) + throw new Error("[SlickGrid DataView] sortedAddItem() requires a sort comparer, use sort()"); + insertItem(sortedIndex(item), item); + } + function sortedUpdateItem(id, item) { + if (idxById) { + if (!idxById.has(id) || id !== item[idProperty]) + throw new Error("[SlickGrid DataView] Invalid or non-matching id " + idxById.get(id)); + if (!sortComparer) + throw new Error("[SlickGrid DataView] sortedUpdateItem() requires a sort comparer, use sort()"); + var oldItem = getItemById(id); + sortComparer(oldItem, item) !== 0 ? (deleteItem(id), sortedAddItem(item)) : updateItem(id, item); + } + } + function sortedIndex(searchItem) { + for (var low = 0, high = items.length; low < high; ) { + var mid = low + high >>> 1; + sortComparer(items[mid], searchItem) === -1 ? low = mid + 1 : high = mid; + } + return low; + } + function getItemCount() { + return items.length; + } + function getLength() { + return rows.length; + } + function getItem(i) { + var item = rows[i]; + if (item && item.__group && item.totals && !item.totals.initialized) { + var gi = groupingInfos[item.level]; + gi.displayTotalsRow || (calculateTotals(item.totals), item.title = gi.formatter ? gi.formatter(item) : item.value); + } else + item && item.__groupTotals && !item.initialized && calculateTotals(item); + return item; + } + function getItemMetadata(i) { + var item = rows[i]; + return item === void 0 ? null : item.__group ? options.groupItemMetadataProvider.getGroupRowMetadata(item) : item.__groupTotals ? options.groupItemMetadataProvider.getTotalsRowMetadata(item) : null; + } + function expandCollapseAllGroups(level, collapse) { + if (level == null) + for (var i = 0; i < groupingInfos.length; i++) + toggledGroupsByLevel[i] = {}, groupingInfos[i].collapsed = collapse, collapse === !0 ? onGroupCollapsed.notify({ level: i, groupingKey: null }) : onGroupExpanded.notify({ level: i, groupingKey: null }); + else + toggledGroupsByLevel[level] = {}, groupingInfos[level].collapsed = collapse, collapse === !0 ? onGroupCollapsed.notify({ level, groupingKey: null }) : onGroupExpanded.notify({ level, groupingKey: null }); + refresh(); + } + function collapseAllGroups(level) { + expandCollapseAllGroups(level, !0); + } + function expandAllGroups(level) { + expandCollapseAllGroups(level, !1); + } + function expandCollapseGroup(level, groupingKey, collapse) { + toggledGroupsByLevel[level][groupingKey] = groupingInfos[level].collapsed ^ collapse, refresh(); + } + function collapseGroup(varArgs) { + var args = Array.prototype.slice.call(arguments), arg0 = args[0], groupingKey, level; + args.length === 1 && arg0.indexOf(groupingDelimiter) !== -1 ? (groupingKey = arg0, level = arg0.split(groupingDelimiter).length - 1) : (groupingKey = args.join(groupingDelimiter), level = args.length - 1), expandCollapseGroup(level, groupingKey, !0), onGroupCollapsed.notify({ level, groupingKey }); + } + function expandGroup(varArgs) { + var args = Array.prototype.slice.call(arguments), arg0 = args[0], groupingKey, level; + args.length === 1 && arg0.indexOf(groupingDelimiter) !== -1 ? (level = arg0.split(groupingDelimiter).length - 1, groupingKey = arg0) : (level = args.length - 1, groupingKey = args.join(groupingDelimiter)), expandCollapseGroup(level, groupingKey, !1), onGroupExpanded.notify({ level, groupingKey }); + } + function getGroups() { + return groups; + } + function extractGroups(rows2, parentGroup) { + for (var group, val, groups2 = [], groupsByVal = {}, r, level = parentGroup ? parentGroup.level + 1 : 0, gi = groupingInfos[level], i = 0, l = gi.predefinedValues.length; i < l; i++) + val = gi.predefinedValues[i], group = groupsByVal[val], group || (group = new Group(), group.value = val, group.level = level, group.groupingKey = (parentGroup ? parentGroup.groupingKey + groupingDelimiter : "") + val, groups2[groups2.length] = group, groupsByVal[val] = group); + for (var i = 0, l = rows2.length; i < l; i++) + r = rows2[i], val = gi.getterIsAFn ? gi.getter(r) : r[gi.getter], group = groupsByVal[val], group || (group = new Group(), group.value = val, group.level = level, group.groupingKey = (parentGroup ? parentGroup.groupingKey + groupingDelimiter : "") + val, groups2[groups2.length] = group, groupsByVal[val] = group), group.rows[group.count++] = r; + if (level < groupingInfos.length - 1) + for (var i = 0; i < groups2.length; i++) + group = groups2[i], group.groups = extractGroups(group.rows, group); + return groups2.length && addTotals(groups2, level), groups2.sort(groupingInfos[level].comparer), groups2; + } + function calculateTotals(totals) { + var group = totals.group, gi = groupingInfos[group.level], isLeafLevel = group.level == groupingInfos.length, agg, idx = gi.aggregators.length; + if (!isLeafLevel && gi.aggregateChildGroups) + for (var i = group.groups.length; i--; ) + group.groups[i].totals.initialized || calculateTotals(group.groups[i].totals); + for (; idx--; ) + agg = gi.aggregators[idx], agg.init(), !isLeafLevel && gi.aggregateChildGroups ? gi.compiledAccumulators[idx].call(agg, group.groups) : gi.compiledAccumulators[idx].call(agg, group.rows), agg.storeResult(totals); + totals.initialized = !0; + } + function addGroupTotals(group) { + var gi = groupingInfos[group.level], totals = new GroupTotals(); + totals.group = group, group.totals = totals, gi.lazyTotalsCalculation || calculateTotals(totals); + } + function addTotals(groups2, level) { + level = level || 0; + for (var gi = groupingInfos[level], groupCollapsed = gi.collapsed, toggledGroups = toggledGroupsByLevel[level], idx = groups2.length, g; idx--; ) + g = groups2[idx], !(g.collapsed && !gi.aggregateCollapsed) && (g.groups && addTotals(g.groups, level + 1), gi.aggregators.length && (gi.aggregateEmpty || g.rows.length || g.groups && g.groups.length) && addGroupTotals(g), g.collapsed = groupCollapsed ^ toggledGroups[g.groupingKey], g.title = gi.formatter ? gi.formatter(g) : g.value); + } + function flattenGroupedRows(groups2, level) { + level = level || 0; + for (var gi = groupingInfos[level], groupedRows = [], rows2, gl = 0, g, i = 0, l = groups2.length; i < l; i++) { + if (g = groups2[i], groupedRows[gl++] = g, !g.collapsed) { + rows2 = g.groups ? flattenGroupedRows(g.groups, level + 1) : g.rows; + for (var j = 0, jj = rows2.length; j < jj; j++) + groupedRows[gl++] = rows2[j]; + } + g.totals && gi.displayTotalsRow && (!g.collapsed || gi.aggregateCollapsed) && (groupedRows[gl++] = g.totals); + } + return groupedRows; + } + function getFunctionInfo(fn) { + var fnStr = fn.toString(), usingEs5 = fnStr.indexOf("function") >= 0, fnRegex = usingEs5 ? /^function[^(]*\(([^)]*)\)\s*{([\s\S]*)}$/ : /^[^(]*\(([^)]*)\)\s*{([\s\S]*)}$/, matches = fn.toString().match(fnRegex); + return { + params: matches[1].split(","), + body: matches[2] + }; + } + function compileAccumulatorLoop(aggregator) { + if (aggregator.accumulate) { + var accumulatorInfo = getFunctionInfo(aggregator.accumulate), fn = new Function( + "_items", + "for (var " + accumulatorInfo.params[0] + ", _i=0, _il=_items.length; _i<_il; _i++) {" + accumulatorInfo.params[0] + " = _items[_i]; " + accumulatorInfo.body + "}" + ), fnName = "compiledAccumulatorLoop"; + return fn.displayName = fnName, fn.name = setFunctionName(fn, fnName), fn; + } else + return function() { + }; + } + function compileFilter() { + var filterInfo = getFunctionInfo(filter), filterPath1 = "{ continue _coreloop; }$1", filterPath2 = "{ _retval[_idx++] = $item$; continue _coreloop; }$1", filterBody = filterInfo.body.replace(/return false\s*([;}]|\}|$)/gi, filterPath1).replace(/return!1([;}]|\}|$)/gi, filterPath1).replace(/return true\s*([;}]|\}|$)/gi, filterPath2).replace(/return!0([;}]|\}|$)/gi, filterPath2).replace( + /return ([^;}]+?)\s*([;}]|$)/gi, + "{ if ($1) { _retval[_idx++] = $item$; }; continue _coreloop; }$2" + ), tpl = [ + //"function(_items, _args) { ", + "var _retval = [], _idx = 0; ", + "var $item$, $args$ = _args; ", + "_coreloop: ", + "for (var _i = 0, _il = _items.length; _i < _il; _i++) { ", + "$item$ = _items[_i]; ", + "$filter$; ", + "} ", + "return _retval; " + //"}" + ].join(""); + tpl = tpl.replace(/\$filter\$/gi, filterBody), tpl = tpl.replace(/\$item\$/gi, filterInfo.params[0]), tpl = tpl.replace(/\$args\$/gi, filterInfo.params[1]); + var fn = new Function("_items,_args", tpl), fnName = "compiledFilter"; + return fn.displayName = fnName, fn.name = setFunctionName(fn, fnName), fn; + } + function compileFilterWithCaching() { + var filterInfo = getFunctionInfo(filter), filterPath1 = "{ continue _coreloop; }$1", filterPath2 = "{ _cache[_i] = true;_retval[_idx++] = $item$; continue _coreloop; }$1", filterBody = filterInfo.body.replace(/return false\s*([;}]|\}|$)/gi, filterPath1).replace(/return!1([;}]|\}|$)/gi, filterPath1).replace(/return true\s*([;}]|\}|$)/gi, filterPath2).replace(/return!0([;}]|\}|$)/gi, filterPath2).replace( + /return ([^;}]+?)\s*([;}]|$)/gi, + "{ if ((_cache[_i] = $1)) { _retval[_idx++] = $item$; }; continue _coreloop; }$2" + ), tpl = [ + //"function(_items, _args, _cache) { ", + "var _retval = [], _idx = 0; ", + "var $item$, $args$ = _args; ", + "_coreloop: ", + "for (var _i = 0, _il = _items.length; _i < _il; _i++) { ", + "$item$ = _items[_i]; ", + "if (_cache[_i]) { ", + "_retval[_idx++] = $item$; ", + "continue _coreloop; ", + "} ", + "$filter$; ", + "} ", + "return _retval; " + //"}" + ].join(""); + tpl = tpl.replace(/\$filter\$/gi, filterBody), tpl = tpl.replace(/\$item\$/gi, filterInfo.params[0]), tpl = tpl.replace(/\$args\$/gi, filterInfo.params[1]); + var fn = new Function("_items,_args,_cache", tpl), fnName = "compiledFilterWithCaching"; + return fn.displayName = fnName, fn.name = setFunctionName(fn, fnName), fn; + } + function setFunctionName(fn, fnName) { + try { + Object.defineProperty(fn, "name", { + writable: !0, + value: fnName + }); + } catch (err) { + fn.name = fnName; + } + } + function uncompiledFilter(items2, args) { + for (var retval = [], idx = 0, i = 0, ii = items2.length; i < ii; i++) + filter(items2[i], args) && (retval[idx++] = items2[i]); + return retval; + } + function uncompiledFilterWithCaching(items2, args, cache) { + for (var retval = [], idx = 0, item, i = 0, ii = items2.length; i < ii; i++) + item = items2[i], cache[i] ? retval[idx++] = item : filter(item, args) && (retval[idx++] = item, cache[i] = !0); + return retval; + } + function getFilteredAndPagedItems(items2) { + if (filter) { + var batchFilter = options.inlineFilters ? compiledFilter : uncompiledFilter, batchFilterWithCaching = options.inlineFilters ? compiledFilterWithCaching : uncompiledFilterWithCaching; + refreshHints.isFilterNarrowing ? filteredItems = batchFilter(filteredItems, filterArgs) : refreshHints.isFilterExpanding ? filteredItems = batchFilterWithCaching(items2, filterArgs, filterCache) : refreshHints.isFilterUnchanged || (filteredItems = batchFilter(items2, filterArgs)); + } else + filteredItems = pagesize ? items2 : items2.concat(); + var paged; + return pagesize ? (filteredItems.length <= pagenum * pagesize && (filteredItems.length === 0 ? pagenum = 0 : pagenum = Math.floor((filteredItems.length - 1) / pagesize)), paged = filteredItems.slice(pagesize * pagenum, pagesize * pagenum + pagesize)) : paged = filteredItems, { totalRows: filteredItems.length, rows: paged }; + } + function getRowDiffs(rows2, newRows) { + var item, r, eitherIsNonData, diff = [], from = 0, to = Math.max(newRows.length, rows2.length); + refreshHints && refreshHints.ignoreDiffsBefore && (from = Math.max( + 0, + Math.min(newRows.length, refreshHints.ignoreDiffsBefore) + )), refreshHints && refreshHints.ignoreDiffsAfter && (to = Math.min( + newRows.length, + Math.max(0, refreshHints.ignoreDiffsAfter) + )); + for (var i = from, rl = rows2.length; i < to; i++) + i >= rl ? diff[diff.length] = i : (item = newRows[i], r = rows2[i], (!item || groupingInfos.length && (eitherIsNonData = item.__nonDataRow || r.__nonDataRow) && item.__group !== r.__group || item.__group && !item.equals(r) || eitherIsNonData && // no good way to compare totals since they are arbitrary DTOs + // deep object comparison is pretty expensive + // always considering them 'dirty' seems easier for the time being + (item.__groupTotals || r.__groupTotals) || item[idProperty] != r[idProperty] || updated && updated[item[idProperty]]) && (diff[diff.length] = i)); + return diff; + } + function recalc(_items) { + rowsById = null, (refreshHints.isFilterNarrowing != prevRefreshHints.isFilterNarrowing || refreshHints.isFilterExpanding != prevRefreshHints.isFilterExpanding) && (filterCache = []); + var filteredItems2 = getFilteredAndPagedItems(_items); + totalRows = filteredItems2.totalRows; + var newRows = filteredItems2.rows; + groups = [], groupingInfos.length && (groups = extractGroups(newRows), groups.length && (newRows = flattenGroupedRows(groups))); + var diff = getRowDiffs(rows, newRows); + return rows = newRows, diff; + } + function refresh() { + if (!suspend) { + var previousPagingInfo = Utils.extend(!0, {}, getPagingInfo()), countBefore = rows.length, totalRowsBefore = totalRows, diff = recalc(items, filter); + pagesize && totalRows < pagenum * pagesize && (pagenum = Math.max(0, Math.ceil(totalRows / pagesize) - 1), diff = recalc(items, filter)), updated = null, prevRefreshHints = refreshHints, refreshHints = {}, totalRowsBefore !== totalRows && onBeforePagingInfoChanged.notify(previousPagingInfo, null, self) !== !1 && onPagingInfoChanged.notify(getPagingInfo(), null, self), countBefore !== rows.length && onRowCountChanged.notify({ previous: countBefore, current: rows.length, itemCount: items.length, dataView: self, callingOnRowsChanged: diff.length > 0 }, null, self), diff.length > 0 && onRowsChanged.notify({ rows: diff, itemCount: items.length, dataView: self, calledOnRowCountChanged: countBefore !== rows.length }, null, self), (countBefore !== rows.length || diff.length > 0) && onRowsOrCountChanged.notify({ + rowsDiff: diff, + previousRowCount: countBefore, + currentRowCount: rows.length, + itemCount: items.length, + rowCountChanged: countBefore !== rows.length, + rowsChanged: diff.length > 0, + dataView: self + }, null, self); + } + } + function syncGridSelection(grid, preserveHidden, preserveHiddenOnSelectionChange) { + var self2 = this; + _grid = grid; + var inHandler; + selectedRowIds = self2.mapRowsToIds(grid.getSelectedRows()); + function setSelectedRowIds(rowIds) { + rowIds === !1 ? selectedRowIds = [] : selectedRowIds.sort().join(",") !== rowIds.sort().join(",") && (selectedRowIds = rowIds); + } + function update() { + if (selectedRowIds.length > 0 && !inHandler) { + inHandler = !0; + var selectedRows = self2.mapIdsToRows(selectedRowIds); + if (!preserveHidden) { + var selectedRowsChangedArgs = { + grid: _grid, + ids: self2.mapRowsToIds(selectedRows), + rows: selectedRows, + dataView: self2 + }; + preSelectedRowIdsChangeFn(selectedRowsChangedArgs), onSelectedRowIdsChanged.notify(Object.assign(selectedRowsChangedArgs, { + selectedRowIds, + filteredIds: self2.getAllSelectedFilteredIds() + }), new EventData(), self2); + } + grid.setSelectedRows(selectedRows), inHandler = !1; + } + } + return grid.onSelectedRowsChanged.subscribe(function(e, args) { + if (!inHandler) { + var newSelectedRowIds = self2.mapRowsToIds(args.rows), selectedRowsChangedArgs = { + grid: _grid, + ids: newSelectedRowIds, + rows: args.rows, + added: !0, + dataView: self2 + }; + preSelectedRowIdsChangeFn(selectedRowsChangedArgs), onSelectedRowIdsChanged.notify(Object.assign(selectedRowsChangedArgs, { + selectedRowIds, + filteredIds: self2.getAllSelectedFilteredIds() + }), new EventData(), self2); + } + }), preSelectedRowIdsChangeFn = function(args) { + if (!inHandler) { + inHandler = !0; + var overwrite = typeof args.added == "undefined"; + if (overwrite) + setSelectedRowIds(args.ids); + else { + var rowIds; + if (args.added) + if (preserveHiddenOnSelectionChange && grid.getOptions().multiSelect) { + var hiddenSelectedRowIds = selectedRowIds.filter(function(id) { + return self2.getRowById(id) === void 0; + }); + rowIds = hiddenSelectedRowIds.concat(args.ids); + } else + rowIds = args.ids; + else + preserveHiddenOnSelectionChange && grid.getOptions().multiSelect ? rowIds = selectedRowIds.filter(function(id) { + return args.ids.indexOf(id) === -1; + }) : rowIds = []; + setSelectedRowIds(rowIds); + } + inHandler = !1; + } + }, this.onRowsOrCountChanged.subscribe(update), onSelectedRowIdsChanged; + } + function getAllSelectedIds() { + return selectedRowIds; + } + function getAllSelectedFilteredIds() { + return getAllSelectedFilteredItems().map(function(item) { + return item[idProperty]; + }); + } + function setSelectedIds(selectedIds, options2) { + var isRowBeingAdded = options2 && options2.isRowBeingAdded, shouldTriggerEvent = options2 && options2.shouldTriggerEvent, applyRowSelectionToGrid = options2 && options2.applyRowSelectionToGrid; + isRowBeingAdded !== !1 && (isRowBeingAdded = !0); + var selectedRows = self.mapIdsToRows(selectedIds), selectedRowsChangedArgs = { + grid: _grid, + ids: selectedIds, + rows: selectedRows, + added: isRowBeingAdded, + dataView: self + }; + preSelectedRowIdsChangeFn(selectedRowsChangedArgs), shouldTriggerEvent !== !1 && onSelectedRowIdsChanged.notify(Object.assign(selectedRowsChangedArgs, { + selectedRowIds, + filteredIds: self.getAllSelectedFilteredIds() + }), new EventData(), self), applyRowSelectionToGrid !== !1 && _grid && _grid.setSelectedRows(selectedRows); + } + function getAllSelectedItems() { + var selectedData = [], selectedIds = getAllSelectedIds(); + return selectedIds.forEach(function(id) { + selectedData.push(self.getItemById(id)); + }), selectedData; + } + function getAllSelectedFilteredItems() { + if (!Array.isArray(selectedRowIds)) + return []; + var intersection = filteredItems.filter(function(a) { + return selectedRowIds.some(function(b) { + return a[idProperty] === b; + }); + }); + return intersection || []; + } + function syncGridCellCssStyles(grid, key) { + var hashById, inHandler; + storeCellCssStyles(grid.getCellCssStyles(key)); + function storeCellCssStyles(hash) { + hashById = {}; + for (var row in hash) { + var id = rows[row][idProperty]; + hashById[id] = hash[row]; + } + } + function update() { + if (hashById) { + inHandler = !0, ensureRowsByIdCache(); + var newHash = {}; + for (var id in hashById) { + var row = rowsById[id]; + row != null && (newHash[row] = hashById[id]); + } + grid.setCellCssStyles(key, newHash), inHandler = !1; + } + } + grid.onCellCssStylesChanged.subscribe(function(e, args) { + debugger; + inHandler || key == args.key && (args.hash ? storeCellCssStyles(args.hash) : (grid.onCellCssStylesChanged.unsubscribe(), self.onRowsOrCountChanged.unsubscribe(update))); + }), this.onRowsOrCountChanged.subscribe(update); + } + Utils.extend(this, { + // methods + beginUpdate, + endUpdate, + destroy, + setPagingOptions, + getPagingInfo, + getIdPropertyName, + getItems, + setItems, + setFilter, + getFilter, + getFilteredItems, + getFilteredItemCount, + sort, + fastSort, + reSort, + setGrouping, + getGrouping, + groupBy, + setAggregators, + collapseAllGroups, + expandAllGroups, + collapseGroup, + expandGroup, + getGroups, + getAllSelectedIds, + getAllSelectedItems, + getAllSelectedFilteredIds, + getAllSelectedFilteredItems, + setSelectedIds, + getIdxById, + getRowByItem, + getRowById, + getItemById, + getItemByIdx, + mapItemsToRows, + mapRowsToIds, + mapIdsToRows, + setRefreshHints, + setFilterArgs, + refresh, + updateItem, + updateItems, + insertItem, + insertItems, + addItem, + addItems, + deleteItem, + deleteItems, + sortedAddItem, + sortedUpdateItem, + syncGridSelection, + syncGridCellCssStyles, + // data provider methods + getItemCount, + getLength, + getItem, + getItemMetadata, + // events + onSelectedRowIdsChanged, + // NOTE this will only work when used with "syncGridSelection" + onSetItemsCalled, + onRowCountChanged, + onRowsChanged, + onRowsOrCountChanged, + onBeforePagingInfoChanged, + onPagingInfoChanged, + onGroupExpanded, + onGroupCollapsed + }); + } + function AvgAggregator(field) { + this.field_ = field, this.init = function() { + this.count_ = 0, this.nonNullCount_ = 0, this.sum_ = 0; + }, this.accumulate = function(item) { + var val = item[this.field_]; + this.count_++, val != null && val !== "" && !isNaN(val) && (this.nonNullCount_++, this.sum_ += parseFloat(val)); + }, this.storeResult = function(groupTotals) { + groupTotals.avg || (groupTotals.avg = {}), this.nonNullCount_ !== 0 && (groupTotals.avg[this.field_] = this.sum_ / this.nonNullCount_); + }; + } + function MinAggregator(field) { + this.field_ = field, this.init = function() { + this.min_ = null; + }, this.accumulate = function(item) { + var val = item[this.field_]; + val != null && val !== "" && !isNaN(val) && (this.min_ == null || val < this.min_) && (this.min_ = val); + }, this.storeResult = function(groupTotals) { + groupTotals.min || (groupTotals.min = {}), groupTotals.min[this.field_] = this.min_; + }; + } + function MaxAggregator(field) { + this.field_ = field, this.init = function() { + this.max_ = null; + }, this.accumulate = function(item) { + var val = item[this.field_]; + val != null && val !== "" && !isNaN(val) && (this.max_ == null || val > this.max_) && (this.max_ = val); + }, this.storeResult = function(groupTotals) { + groupTotals.max || (groupTotals.max = {}), groupTotals.max[this.field_] = this.max_; + }; + } + function SumAggregator(field) { + this.field_ = field, this.init = function() { + this.sum_ = null; + }, this.accumulate = function(item) { + var val = item[this.field_]; + val != null && val !== "" && !isNaN(val) && (this.sum_ += parseFloat(val)); + }, this.storeResult = function(groupTotals) { + groupTotals.sum || (groupTotals.sum = {}), groupTotals.sum[this.field_] = this.sum_; + }; + } + function CountAggregator(field) { + this.field_ = field, this.init = function() { + }, this.storeResult = function(groupTotals) { + groupTotals.count || (groupTotals.count = {}), groupTotals.count[this.field_] = groupTotals.group.rows.length; + }; + } + var Aggregators = { + Avg: AvgAggregator, + Min: MinAggregator, + Max: MaxAggregator, + Sum: SumAggregator, + Count: CountAggregator + }; + window.Slick && (window.Slick.Data = window.Slick.Data || {}, window.Slick.Data.DataView = DataView, window.Slick.Data.Aggregators = Aggregators); +})(); diff --git a/dist/browser/slick.editors.js b/dist/browser/slick.editors.js new file mode 100644 index 00000000..aff92b33 --- /dev/null +++ b/dist/browser/slick.editors.js @@ -0,0 +1,354 @@ +"use strict"; +(() => { + // src/slick.editors.js + var keyCode = Slick.keyCode, Utils = Slick.Utils; + function TextEditor(args) { + var input, defaultValue, scope = this, navOnLR; + this.args = args, this.init = function() { + navOnLR = args.grid.getOptions().editorCellNavOnLRKeys, input = Utils.createDomElement("input", { type: "text", className: "editor-text" }, args.container), input.addEventListener("keydown.nav", navOnLR ? handleKeydownLRNav : handleKeydownLRNoNav), input.focus(), input.select(), args.compositeEditorOptions && input.addEventListener("change", this.onChange); + }, this.onChange = function() { + var activeCell = args.grid.getActiveCell(); + scope.validate().valid && scope.applyValue(scope.args.item, scope.serializeValue()), scope.applyValue(scope.args.compositeEditorOptions.formValues, scope.serializeValue()), args.grid.onCompositeEditorChange.notify({ row: activeCell.row, cell: activeCell.cell, item: scope.args.item, column: scope.args.column, formValues: scope.args.compositeEditorOptions.formValues }); + }, this.destroy = function() { + input.removeEventListener("keydown.nav", navOnLR ? handleKeydownLRNav : handleKeydownLRNoNav), input.removeEventListener("change", this.onChange), input.remove(); + }, this.focus = function() { + input.focus(); + }, this.getValue = function() { + return input.value; + }, this.setValue = function(val) { + input.value = val; + }, this.loadValue = function(item) { + defaultValue = item[args.column.field] || "", input.value = defaultValue, input.defaultValue = defaultValue, input.select(); + }, this.serializeValue = function() { + return input.value; + }, this.applyValue = function(item, state) { + item[args.column.field] = state; + }, this.isValueChanged = function() { + return !(input.value === "" && defaultValue == null) && input.value != defaultValue; + }, this.validate = function() { + if (args.column.validator) { + var validationResults = args.column.validator(input.value, args); + if (!validationResults.valid) + return validationResults; + } + return { + valid: !0, + msg: null + }; + }, this.init(); + } + function IntegerEditor(args) { + var input, defaultValue, scope = this, navOnLR; + this.args = args, this.init = function() { + navOnLR = args.grid.getOptions().editorCellNavOnLRKeys, input = Utils.createDomElement("input", { type: "text", className: "editor-text" }, args.container), input.addEventListener("keydown.nav", navOnLR ? handleKeydownLRNav : handleKeydownLRNoNav), input.focus(), input.select(), args.compositeEditorOptions && input.addEventListener("change", this.onChange); + }, this.onChange = function() { + var activeCell = args.grid.getActiveCell(); + scope.validate().valid && scope.applyValue(scope.args.item, scope.serializeValue()), scope.applyValue(scope.args.compositeEditorOptions.formValues, scope.serializeValue()), args.grid.onCompositeEditorChange.notify({ row: activeCell.row, cell: activeCell.cell, item: scope.args.item, column: scope.args.column, formValues: scope.args.compositeEditorOptions.formValues }); + }, this.destroy = function() { + input.removeEventListener("keydown.nav", navOnLR ? handleKeydownLRNav : handleKeydownLRNoNav), input.removeEventListener("change", this.onChange), input.remove(); + }, this.focus = function() { + input.focus(); + }, this.loadValue = function(item) { + defaultValue = item[args.column.field], input.value = defaultValue, input.defaultValue = defaultValue, input.select(); + }, this.serializeValue = function() { + return parseInt(input.value, 10) || 0; + }, this.applyValue = function(item, state) { + item[args.column.field] = state; + }, this.isValueChanged = function() { + return !(input.value === "" && defaultValue == null) && input.value != defaultValue; + }, this.validate = function() { + if (isNaN(input.value)) + return { + valid: !1, + msg: "Please enter a valid integer" + }; + if (args.column.validator) { + var validationResults = args.column.validator(input.value, args); + if (!validationResults.valid) + return validationResults; + } + return { + valid: !0, + msg: null + }; + }, this.init(); + } + function FloatEditor(args) { + var input, defaultValue, scope = this, navOnLR; + this.args = args, this.init = function() { + navOnLR = args.grid.getOptions().editorCellNavOnLRKeys, input = Utils.createDomElement("input", { type: "text", className: "editor-text" }, args.container), input.addEventListener("keydown.nav", navOnLR ? handleKeydownLRNav : handleKeydownLRNoNav), input.focus(), input.select(), args.compositeEditorOptions && input.addEventListener("change", this.onChange); + }, this.onChange = function() { + var activeCell = args.grid.getActiveCell(); + scope.validate().valid && scope.applyValue(scope.args.item, scope.serializeValue()), scope.applyValue(scope.args.compositeEditorOptions.formValues, scope.serializeValue()), args.grid.onCompositeEditorChange.notify({ row: activeCell.row, cell: activeCell.cell, item: scope.args.item, column: scope.args.column, formValues: scope.args.compositeEditorOptions.formValues }); + }, this.destroy = function() { + input.removeEventListener("keydown.nav", navOnLR ? handleKeydownLRNav : handleKeydownLRNoNav), input.removeEventListener("change", this.onChange), input.remove(); + }, this.focus = function() { + input.focus(); + }; + function getDecimalPlaces() { + var rtn = args.column.editorFixedDecimalPlaces; + return typeof rtn == "undefined" && (rtn = FloatEditor.DefaultDecimalPlaces), !rtn && rtn !== 0 ? null : rtn; + } + this.loadValue = function(item) { + defaultValue = item[args.column.field]; + var decPlaces = getDecimalPlaces(); + decPlaces !== null && (defaultValue || defaultValue === 0) && defaultValue.toFixed && (defaultValue = defaultValue.toFixed(decPlaces)), input.value = defaultValue, input.defaultValue = defaultValue, input.select(); + }, this.serializeValue = function() { + var rtn = parseFloat(input.value); + FloatEditor.AllowEmptyValue ? !rtn && rtn !== 0 && (rtn = "") : rtn = rtn || 0; + var decPlaces = getDecimalPlaces(); + return decPlaces !== null && (rtn || rtn === 0) && rtn.toFixed && (rtn = parseFloat(rtn.toFixed(decPlaces))), rtn; + }, this.applyValue = function(item, state) { + item[args.column.field] = state; + }, this.isValueChanged = function() { + return !(input.value === "" && defaultValue == null) && input.value != defaultValue; + }, this.validate = function() { + if (isNaN(input.value)) + return { + valid: !1, + msg: "Please enter a valid number" + }; + if (args.column.validator) { + var validationResults = args.column.validator(input.value, args); + if (!validationResults.valid) + return validationResults; + } + return { + valid: !0, + msg: null + }; + }, this.init(); + } + FloatEditor.DefaultDecimalPlaces = null; + FloatEditor.AllowEmptyValue = !1; + function FlatpickrEditor(args) { + if (typeof flatpickr == "undefined") + throw new Error("Flatpickr not loaded but required in SlickGrid.Editors, refer to Flatpickr documentation: https://flatpickr.js.org/getting-started/"); + var input, defaultValue, scope = this; + this.args = args; + var flatpickrInstance; + this.init = function() { + input = Utils.createDomElement("input", { type: "text", className: "editor-text" }, args.container), input.focus(), input.select(), flatpickrInstance = flatpickr(input, { + closeOnSelect: !0, + allowInput: !0, + altInput: !0, + altFormat: "m/d/Y", + dateFormat: "m/d/Y", + onChange: () => { + if (args.compositeEditorOptions) { + var activeCell = args.grid.getActiveCell(); + scope.validate().valid && scope.applyValue(scope.args.item, scope.serializeValue()), scope.applyValue(scope.args.compositeEditorOptions.formValues, scope.serializeValue()), args.grid.onCompositeEditorChange.notify({ row: activeCell.row, cell: activeCell.cell, item: scope.args.item, column: scope.args.column, formValues: scope.args.compositeEditorOptions.formValues }); + } + } + }), args.compositeEditorOptions || setTimeout(() => { + scope.show(), scope.focus(); + }, 50), Utils.width(input, Utils.width(input) - (args.compositeEditorOptions ? 28 : 18)); + }, this.destroy = function() { + scope.hide(), flatpickrInstance && flatpickrInstance.destroy(), input.remove(); + }, this.show = function() { + !args.compositeEditorOptions && flatpickrInstance && flatpickrInstance.open(); + }, this.hide = function() { + !args.compositeEditorOptions && flatpickrInstance && flatpickrInstance.close(); + }, this.focus = function() { + input.focus(); + }, this.loadValue = function(item) { + defaultValue = item[args.column.field], input.value = defaultValue, input.defaultValue = defaultValue, input.select(), flatpickrInstance && flatpickrInstance.setDate(defaultValue); + }, this.serializeValue = function() { + return input.value; + }, this.applyValue = function(item, state) { + item[args.column.field] = state; + }, this.isValueChanged = function() { + return !(input.value === "" && defaultValue == null) && input.value != defaultValue; + }, this.validate = function() { + if (args.column.validator) { + var validationResults = args.column.validator(input.value, args); + if (!validationResults.valid) + return validationResults; + } + return { + valid: !0, + msg: null + }; + }, this.init(); + } + function YesNoSelectEditor(args) { + var select, defaultValue, scope = this; + this.args = args, this.init = function() { + select = Utils.createDomElement("select", { tabIndex: 0, className: "editor-yesno" }, args.container), Utils.createDomElement("option", { value: "yes", textContent: "Yes" }, select), Utils.createDomElement("option", { value: "no", textContent: "No" }, select), select.focus(), args.compositeEditorOptions && select.addEventListener("change", this.onChange); + }, this.onChange = function() { + var activeCell = args.grid.getActiveCell(); + scope.validate().valid && scope.applyValue(scope.args.item, scope.serializeValue()), scope.applyValue(scope.args.compositeEditorOptions.formValues, scope.serializeValue()), args.grid.onCompositeEditorChange.notify({ row: activeCell.row, cell: activeCell.cell, item: scope.args.item, column: scope.args.column, formValues: scope.args.compositeEditorOptions.formValues }); + }, this.destroy = function() { + select.removeEventListener("change", this.onChange), select.remove(); + }, this.focus = function() { + select.focus(); + }, this.loadValue = function(item) { + select.value = (defaultValue = item[args.column.field]) ? "yes" : "no"; + }, this.serializeValue = function() { + return select.value == "yes"; + }, this.applyValue = function(item, state) { + item[args.column.field] = state; + }, this.isValueChanged = function() { + return select.value != defaultValue; + }, this.validate = function() { + return { + valid: !0, + msg: null + }; + }, this.init(); + } + function CheckboxEditor(args) { + var select, defaultValue, scope = this; + this.args = args, this.init = function() { + select = Utils.createDomElement("input", { className: "editor-checkbox", type: "checkbox", value: "true" }, args.container), select.focus(), args.compositeEditorOptions && select.addEventListener("change", this.onChange); + }, this.onChange = function() { + var activeCell = args.grid.getActiveCell(); + scope.validate().valid && scope.applyValue(scope.args.item, scope.serializeValue()), scope.applyValue(scope.args.compositeEditorOptions.formValues, scope.serializeValue()), args.grid.onCompositeEditorChange.notify({ row: activeCell.row, cell: activeCell.cell, item: scope.args.item, column: scope.args.column, formValues: scope.args.compositeEditorOptions.formValues }); + }, this.destroy = function() { + select.removeEventListener("change", this.onChange), select.remove(); + }, this.focus = function() { + select.focus(); + }, this.loadValue = function(item) { + defaultValue = !!item[args.column.field], defaultValue ? select.checked = !0 : select.checked = !1; + }, this.serializeValue = function() { + return select.checked; + }, this.applyValue = function(item, state) { + item[args.column.field] = state; + }, this.isValueChanged = function() { + return this.serializeValue() !== defaultValue; + }, this.validate = function() { + return { + valid: !0, + msg: null + }; + }, this.init(); + } + function PercentCompleteEditor(args) { + var input, picker, defaultValue, scope = this; + this.args = args; + var slider, sliderInputHandler = function() { + input.value = this.value; + }, sliderChangeHandler = function() { + if (args.compositeEditorOptions) { + var activeCell = args.grid.getActiveCell(); + scope.validate().valid && scope.applyValue(scope.args.item, scope.serializeValue()), scope.applyValue(scope.args.compositeEditorOptions.formValues, scope.serializeValue()), args.grid.onCompositeEditorChange.notify({ row: activeCell.row, cell: activeCell.cell, item: scope.args.item, column: scope.args.column, formValues: scope.args.compositeEditorOptions.formValues }); + } + }; + this.init = function() { + input = Utils.createDomElement("input", { className: "editor-percentcomplete", type: "text" }, args.container), Utils.width(input, args.container.clientWidth - 25), picker = Utils.createDomElement("div", { className: "editor-percentcomplete-picker" }, args.container); + let pickerIcon = Utils.createDomElement("span", { className: "editor-percentcomplete-picker-icon" }, picker), containerHelper = Utils.createDomElement("div", { className: "editor-percentcomplete-helper" }, picker), containerWrapper = Utils.createDomElement("div", { className: "editor-percentcomplete-wrapper" }, containerHelper); + Utils.createDomElement("div", { className: "editor-percentcomplete-slider" }, containerWrapper), Utils.createDomElement("input", { className: "editor-percentcomplete-slider", type: "range" }, containerWrapper); + let containerButtons = Utils.createDomElement("div", { className: "editor-percentcomplete-buttons" }, containerWrapper); + Utils.createDomElement("button", { value: "0", className: "slick-btn slick-btn-default", textContent: "Not started" }, containerButtons), containerButtons.appendChild(document.createElement("br")), Utils.createDomElement("button", { value: "50", className: "slick-btn slick-btn-default", textContent: "In Progress" }, containerButtons), containerButtons.appendChild(document.createElement("br")), Utils.createDomElement("button", { value: "100", className: "slick-btn slick-btn-default", textContent: "Complete" }, containerButtons), input.focus(), input.select(), slider = picker.querySelector("input.editor-percentcomplete-slider"), slider.value = defaultValue, slider.addEventListener("input", sliderInputHandler), slider.addEventListener("change", sliderChangeHandler); + let buttons = picker.querySelectorAll(".editor-percentcomplete-buttons button"); + [].forEach.call(buttons, (button) => { + button.addEventListener("click", this.onClick); + }); + }, this.onClick = function() { + input.value = this.value, slider.value = this.value; + }, this.destroy = function() { + slider.removeEventListener("input", sliderInputHandler), slider.removeEventListener("change", sliderChangeHandler), picker.querySelectorAll(".editor-percentcomplete-buttons button").forEach((button) => button.removeEventListener("click", this.onClick)), input.remove(), picker.remove(); + }, this.focus = function() { + input.focus(); + }, this.loadValue = function(item) { + defaultValue = item[args.column.field], slider.value = defaultValue, input.value = defaultValue, input.select(); + }, this.serializeValue = function() { + return parseInt(input.value, 10) || 0; + }, this.applyValue = function(item, state) { + item[args.column.field] = state; + }, this.isValueChanged = function() { + return !(input.value === "" && defaultValue == null) && (parseInt(input.value, 10) || 0) != defaultValue; + }, this.validate = function() { + return isNaN(parseInt(input.value, 10)) ? { + valid: !1, + msg: "Please enter a valid positive number" + } : { + valid: !0, + msg: null + }; + }, this.init(); + } + function LongTextEditor(args) { + var input, wrapper, defaultValue, scope = this; + this.args = args, this.init = function() { + var compositeEditorOptions = args.compositeEditorOptions; + args.grid.getOptions().editorCellNavOnLRKeys; + var container = compositeEditorOptions ? args.container : document.body; + if (wrapper = Utils.createDomElement("div", { className: "slick-large-editor-text" }, container), compositeEditorOptions ? (wrapper.style.position = "relative", Utils.setStyleSize(wrapper, "padding", 0), Utils.setStyleSize(wrapper, "border", 0)) : wrapper.style.position = "absolute", input = Utils.createDomElement("textarea", { rows: 5, style: { background: "white", width: "250px", height: "80px", border: "0", outline: "0" } }, wrapper), compositeEditorOptions) + input.addEventListener("change", this.onChange); + else { + let btnContainer = Utils.createDomElement("div", { style: "text-align:right" }, wrapper); + Utils.createDomElement("button", { id: "save", className: "slick-btn slick-btn-primary", textContent: "Save" }, btnContainer), Utils.createDomElement("button", { id: "cancel", className: "slick-btn slick-btn-default", textContent: "Cancel" }, btnContainer), wrapper.querySelector("#save").addEventListener("click", this.save), wrapper.querySelector("#cancel").addEventListener("click", this.cancel), input.addEventListener("keydown", this.handleKeyDown), scope.position(args.position); + } + input.focus(), input.select(); + }, this.onChange = function() { + var activeCell = args.grid.getActiveCell(); + scope.validate().valid && scope.applyValue(scope.args.item, scope.serializeValue()), scope.applyValue(scope.args.compositeEditorOptions.formValues, scope.serializeValue()), args.grid.onCompositeEditorChange.notify({ row: activeCell.row, cell: activeCell.cell, item: scope.args.item, column: scope.args.column, formValues: scope.args.compositeEditorOptions.formValues }); + }, this.handleKeyDown = function(e) { + if (e.which == keyCode.ENTER && e.ctrlKey) + scope.save(); + else if (e.which == keyCode.ESCAPE) + e.preventDefault(), scope.cancel(); + else if (e.which == keyCode.TAB && e.shiftKey) + e.preventDefault(), args.grid.navigatePrev(); + else if (e.which == keyCode.TAB) + e.preventDefault(), args.grid.navigateNext(); + else if ((e.which == keyCode.LEFT || e.which == keyCode.RIGHT) && args.grid.getOptions().editorCellNavOnLRKeys) { + var cursorPosition = this.selectionStart, textLength = this.value.length; + e.keyCode === keyCode.LEFT && cursorPosition === 0 && args.grid.navigatePrev(), e.keyCode === keyCode.RIGHT && cursorPosition >= textLength - 1 && args.grid.navigateNext(); + } + }, this.save = function() { + (args.grid.getOptions() || {}).autoCommitEdit ? args.grid.getEditorLock().commitCurrentEdit() : args.commitChanges(); + }, this.cancel = function() { + input.value = defaultValue, args.cancelChanges(); + }, this.hide = function() { + Utils.hide(wrapper); + }, this.show = function() { + Utils.show(wrapper); + }, this.position = function(position) { + Utils.setStyleSize(wrapper, "top", position.top - 5), Utils.setStyleSize(wrapper, "left", position.left - 2); + }, this.destroy = function() { + args.compositeEditorOptions ? input.removeEventListener("change", this.onChange) : (wrapper.querySelector("#save").removeEventListener("click", this.save), wrapper.querySelector("#cancel").removeEventListener("click", this.cancel), input.removeEventListener("keydown", this.handleKeyDown)), wrapper.remove(); + }, this.focus = function() { + input.focus(); + }, this.loadValue = function(item) { + input.value = defaultValue = item[args.column.field], input.select(); + }, this.serializeValue = function() { + return input.value; + }, this.applyValue = function(item, state) { + item[args.column.field] = state; + }, this.isValueChanged = function() { + return !(input.value === "" && defaultValue == null) && input.value != defaultValue; + }, this.validate = function() { + if (args.column.validator) { + var validationResults = args.column.validator(input.value, args); + if (!validationResults.valid) + return validationResults; + } + return { + valid: !0, + msg: null + }; + }, this.init(); + } + function handleKeydownLRNav(e) { + var cursorPosition = this.selectionStart, textLength = this.value.length; + (e.keyCode === keyCode.LEFT && cursorPosition > 0 || e.keyCode === keyCode.RIGHT && cursorPosition < textLength - 1) && e.stopImmediatePropagation(); + } + function handleKeydownLRNoNav(e) { + (e.keyCode === keyCode.LEFT || e.keyCode === keyCode.RIGHT) && e.stopImmediatePropagation(); + } + var Editors = { + Text: TextEditor, + Integer: IntegerEditor, + Float: FloatEditor, + Flatpickr: FlatpickrEditor, + YesNoSelect: YesNoSelectEditor, + Checkbox: CheckboxEditor, + PercentComplete: PercentCompleteEditor, + LongText: LongTextEditor + }; + window.Slick && Utils.extend(Slick, { + Editors + }); +})(); diff --git a/dist/browser/slick.formatters.js b/dist/browser/slick.formatters.js new file mode 100644 index 00000000..94cb9989 --- /dev/null +++ b/dist/browser/slick.formatters.js @@ -0,0 +1,33 @@ +"use strict"; +(() => { + // src/slick.formatters.js + var Utils = Slick.Utils; + function PercentCompleteFormatter(row, cell, value, columnDef, dataContext) { + return value == null || value === "" ? "-" : value < 50 ? "" + value + "%" : "" + value + "%"; + } + function PercentCompleteBarFormatter(row, cell, value, columnDef, dataContext) { + if (value == null || value === "") + return ""; + var color; + return value < 30 ? color = "red" : value < 70 ? color = "silver" : color = "green", ""; + } + function YesNoFormatter(row, cell, value, columnDef, dataContext) { + return value ? "Yes" : "No"; + } + function CheckboxFormatter(row, cell, value, columnDef, dataContext) { + return ``; + } + function CheckmarkFormatter(row, cell, value, columnDef, dataContext) { + return value ? '' : ""; + } + var Formatters = { + PercentComplete: PercentCompleteFormatter, + PercentCompleteBar: PercentCompleteBarFormatter, + YesNo: YesNoFormatter, + Checkmark: CheckmarkFormatter, + Checkbox: CheckboxFormatter + }; + window.Slick && Utils.extend(Slick, { + Formatters + }); +})(); diff --git a/dist/browser/slick.grid.js b/dist/browser/slick.grid.js new file mode 100644 index 00000000..797613c6 --- /dev/null +++ b/dist/browser/slick.grid.js @@ -0,0 +1,2529 @@ +"use strict"; +(() => { + // src/slick.grid.js + var BindingEventService = Slick.BindingEventService, ColAutosizeMode = Slick.ColAutosizeMode, SlickEvent = Slick.Event, EventData = Slick.EventData, GlobalEditorLock = Slick.GlobalEditorLock, GridAutosizeColsMode = Slick.GridAutosizeColsMode, Group = Slick.Group, GroupTotals = Slick.GroupTotals, keyCode = Slick.keyCode, preClickClassName = Slick.preClickClassName, SlickRange = Slick.Range, RowSelectionMode = Slick.RowSelectionMode, ValueFilterMode = Slick.ValueFilterMode, Utils = Slick.Utils, WidthEvalMode = Slick.WidthEvalMode, Draggable = Slick.Draggable, MouseWheel = Slick.MouseWheel, Resizable = Slick.Resizable, scrollbarDimensions, maxSupportedCssHeight; + function SlickGrid(container, data, columns, options) { + var defaults = { + alwaysShowVerticalScroll: !1, + alwaysAllowHorizontalScroll: !1, + explicitInitialization: !1, + rowHeight: 25, + defaultColumnWidth: 80, + enableAddRow: !1, + leaveSpaceForNewRows: !1, + editable: !1, + autoEdit: !0, + autoCommitEdit: !1, + suppressActiveCellChangeOnEdit: !1, + enableCellNavigation: !0, + enableColumnReorder: !0, + asyncEditorLoading: !1, + asyncEditorLoadDelay: 100, + forceFitColumns: !1, + enableAsyncPostRender: !1, + asyncPostRenderDelay: 50, + enableAsyncPostRenderCleanup: !1, + asyncPostRenderCleanupDelay: 40, + auto: !1, + editorLock: GlobalEditorLock, + showColumnHeader: !0, + showHeaderRow: !1, + headerRowHeight: 25, + createFooterRow: !1, + showFooterRow: !1, + footerRowHeight: 25, + createPreHeaderPanel: !1, + showPreHeaderPanel: !1, + preHeaderPanelHeight: 25, + showTopPanel: !1, + topPanelHeight: 25, + formatterFactory: null, + editorFactory: null, + cellFlashingCssClass: "flashing", + selectedCellCssClass: "selected", + multiSelect: !0, + enableTextSelectionOnCells: !1, + dataItemColumnValueExtractor: null, + frozenBottom: !1, + frozenColumn: -1, + frozenRow: -1, + frozenRightViewportMinWidth: 100, + fullWidthRows: !1, + multiColumnSort: !1, + numberedMultiColumnSort: !1, + tristateMultiColumnSort: !1, + sortColNumberInSeparateSpan: !1, + defaultFormatter, + forceSyncScrolling: !1, + addNewRowCssClass: "new-row", + preserveCopiedSelectionOnPaste: !1, + showCellSelection: !0, + viewportClass: null, + minRowBuffer: 3, + emulatePagingWhenScrolling: !0, + // when scrolling off bottom of viewport, place new row at top of viewport + editorCellNavOnLRKeys: !1, + enableMouseWheelScrollHandler: !0, + doPaging: !0, + autosizeColsMode: GridAutosizeColsMode.LegacyOff, + autosizeColPaddingPx: 4, + autosizeTextAvgToMWidthRatio: 0.75, + viewportSwitchToScrollModeWidthPercent: void 0, + viewportMinWidthPx: void 0, + viewportMaxWidthPx: void 0, + suppressCssChangesOnHiddenInit: !1, + scrollDebounceDelay: -1, + // add a scroll delay to avoid screen flickering, -1 to disable delay + ffMaxSupportedCssHeight: 6e6, + maxSupportedCssHeight: 1e9, + sanitizer: void 0, + // sanitize function, built in basic sanitizer is: Slick.RegexSanitizer(dirtyHtml) + logSanitizedHtml: !1 + // log to console when sanitised - recommend true for testing of dev and production + }, columnDefaults = { + name: "", + resizable: !0, + sortable: !1, + minWidth: 30, + maxWidth: void 0, + rerenderOnResize: !1, + headerCssClass: null, + defaultSortAsc: !0, + focusable: !0, + selectable: !0, + hidden: !1 + }, columnAutosizeDefaults = { + ignoreHeaderText: !1, + colValueArray: void 0, + allowAddlPercent: void 0, + formatterOverride: void 0, + autosizeMode: ColAutosizeMode.ContentIntelligent, + rowSelectionModeOnInit: void 0, + rowSelectionMode: RowSelectionMode.FirstNRows, + rowSelectionCount: 100, + valueFilterMode: ValueFilterMode.None, + widthEvalMode: WidthEvalMode.Auto, + sizeToRemaining: void 0, + widthPx: void 0, + contentSizePx: 0, + headerWidthPx: 0, + colDataTypeOf: void 0 + }, th, h, ph, n, cj, page = 0, offset = 0, vScrollDir = 1; + let show = Utils.show, hide = Utils.hide; + var _bindingEventService = new BindingEventService(), initialized = !1, _container, uid = "slickgrid_" + Math.round(1e6 * Math.random()), self = this, _focusSink, _focusSink2, _groupHeaders = [], _headerScroller = [], _headers = [], _headerRows, _headerRowScroller, _headerRowSpacerL, _headerRowSpacerR, _footerRow, _footerRowScroller, _footerRowSpacerL, _footerRowSpacerR, _preHeaderPanel, _preHeaderPanelScroller, _preHeaderPanelSpacer, _preHeaderPanelR, _preHeaderPanelScrollerR, _preHeaderPanelSpacerR, _topPanelScrollers, _topPanels, _viewport, _canvas, _style, _boundAncestors = [], stylesheet, columnCssRulesL, columnCssRulesR, viewportH, viewportW, canvasWidth, canvasWidthL, canvasWidthR, headersWidth, headersWidthL, headersWidthR, viewportHasHScroll, viewportHasVScroll, headerColumnWidthDiff = 0, headerColumnHeightDiff = 0, cellWidthDiff = 0, cellHeightDiff = 0, absoluteColumnMinWidth, hasFrozenRows = !1, frozenRowsHeight = 0, actualFrozenRow = -1, paneTopH = 0, paneBottomH = 0, viewportTopH = 0, viewportBottomH = 0, topPanelH = 0, headerRowH = 0, footerRowH = 0, tabbingDirection = 1, _activeCanvasNode, _activeViewportNode, activePosX, activeRow, activeCell, activeCellNode = null, currentEditor = null, serializedEditorValue, editController, rowsCache = {}, renderedRows = 0, numVisibleRows = 0, prevScrollTop = 0, scrollTop = 0, lastRenderedScrollTop = 0, lastRenderedScrollLeft = 0, prevScrollLeft = 0, scrollLeft = 0, selectionModel, selectedRows = [], plugins = [], cellCssClasses = {}, columnsById = {}, sortColumns = [], columnPosLeft = [], columnPosRight = [], pagingActive = !1, pagingIsLastPage = !1, scrollThrottle = ActionThrottle(render, 50), h_editorLoader = null, h_render = null, h_postrender = null, h_postrenderCleanup = null, postProcessedRows = {}, postProcessToRow = null, postProcessFromRow = null, postProcessedCleanupQueue = [], postProcessgroupId = 0, counter_rows_rendered = 0, counter_rows_removed = 0, _paneHeaderL, _paneHeaderR, _paneTopL, _paneTopR, _paneBottomL, _paneBottomR, _headerScrollerL, _headerScrollerR, _headerL, _headerR, _groupHeadersL, _groupHeadersR, _headerRowScrollerL, _headerRowScrollerR, _footerRowScrollerL, _footerRowScrollerR, _headerRowL, _headerRowR, _footerRowL, _footerRowR, _topPanelScrollerL, _topPanelScrollerR, _topPanelL, _topPanelR, _viewportTopL, _viewportTopR, _viewportBottomL, _viewportBottomR, _canvasTopL, _canvasTopR, _canvasBottomL, _canvasBottomR, _viewportScrollContainerX, _viewportScrollContainerY, _headerScrollContainer, _headerRowScrollContainer, _footerRowScrollContainer, cssShow = { position: "absolute", visibility: "hidden", display: "block" }, _hiddenParents, oldProps = [], enforceFrozenRowHeightRecalc = !1, columnResizeDragging = !1, slickDraggableInstance = null, slickMouseWheelInstances = [], slickResizableInstances = [], sortableSideLeftInstance, sortableSideRightInstance; + function init() { + if (typeof container == "string" ? _container = document.querySelector(container) : _container = container, !_container) + throw new Error("SlickGrid requires a valid container, " + container + " does not exist in the DOM."); + if (maxSupportedCssHeight = maxSupportedCssHeight || getMaxSupportedCssHeight(), options = Utils.extend(!0, {}, defaults, options), validateAndEnforceOptions(), columnDefaults.width = options.defaultColumnWidth, options.suppressCssChangesOnHiddenInit || cacheCssForHiddenInit(), updateColumnProps(), options.enableColumnReorder && (!Sortable || !Sortable.create)) + throw new Error("SlickGrid requires Sortable.js module to be loaded"); + editController = { + commitCurrentEdit, + cancelCurrentEdit + }, _container.replaceChildren(), _container.style.overflow = "hidden", _container.style.outline = 0, _container.classList.add(uid), _container.classList.add("ui-widget"); + let containerStyles = window.getComputedStyle(_container); + /relative|absolute|fixed/.test(containerStyles.position) || (_container.style.position = "relative"), _focusSink = Utils.createDomElement("div", { tabIndex: 0, style: { position: "fixed", width: "0px", height: "0px", top: "0px", left: "0px", outline: "0px" } }, _container), _paneHeaderL = Utils.createDomElement("div", { className: "slick-pane slick-pane-header slick-pane-left", tabIndex: 0 }, _container), _paneHeaderR = Utils.createDomElement("div", { className: "slick-pane slick-pane-header slick-pane-right", tabIndex: 0 }, _container), _paneTopL = Utils.createDomElement("div", { className: "slick-pane slick-pane-top slick-pane-left", tabIndex: 0 }, _container), _paneTopR = Utils.createDomElement("div", { className: "slick-pane slick-pane-top slick-pane-right", tabIndex: 0 }, _container), _paneBottomL = Utils.createDomElement("div", { className: "slick-pane slick-pane-bottom slick-pane-left", tabIndex: 0 }, _container), _paneBottomR = Utils.createDomElement("div", { className: "slick-pane slick-pane-bottom slick-pane-right", tabIndex: 0 }, _container), options.createPreHeaderPanel && (_preHeaderPanelScroller = Utils.createDomElement("div", { className: "slick-preheader-panel ui-state-default slick-state-default", style: { overflow: "hidden", position: "relative" } }, _paneHeaderL), _preHeaderPanelScroller.appendChild(document.createElement("div")), _preHeaderPanel = Utils.createDomElement("div", null, _preHeaderPanelScroller), _preHeaderPanelSpacer = Utils.createDomElement("div", { style: { display: "block", height: "1px", position: "absolute", top: "0px", left: "0px" } }, _preHeaderPanelScroller), _preHeaderPanelScrollerR = Utils.createDomElement("div", { className: "slick-preheader-panel ui-state-default slick-state-default", style: { overflow: "hidden", position: "relative" } }, _paneHeaderR), _preHeaderPanelR = Utils.createDomElement("div", null, _preHeaderPanelScrollerR), _preHeaderPanelSpacerR = Utils.createDomElement("div", { style: { display: "block", height: "1px", position: "absolute", top: "0px", left: "0px" } }, _preHeaderPanelScrollerR), options.showPreHeaderPanel || (hide(_preHeaderPanelScroller), hide(_preHeaderPanelScrollerR))), _headerScrollerL = Utils.createDomElement("div", { className: "slick-header ui-state-default slick-state-default slick-header-left" }, _paneHeaderL), _headerScrollerR = Utils.createDomElement("div", { className: "slick-header ui-state-default slick-state-default slick-header-right" }, _paneHeaderR), _headerScroller.push(_headerScrollerL), _headerScroller.push(_headerScrollerR), _headerL = Utils.createDomElement("div", { className: "slick-header-columns slick-header-columns-left", style: { left: "-1000px" } }, _headerScrollerL), _headerR = Utils.createDomElement("div", { className: "slick-header-columns slick-header-columns-right", style: { left: "-1000px" } }, _headerScrollerR), _headers = [_headerL, _headerR], _headerRowScrollerL = Utils.createDomElement("div", { className: "slick-headerrow ui-state-default slick-state-default" }, _paneTopL), _headerRowScrollerR = Utils.createDomElement("div", { className: "slick-headerrow ui-state-default slick-state-default" }, _paneTopR), _headerRowScroller = [_headerRowScrollerL, _headerRowScrollerR], _headerRowSpacerL = Utils.createDomElement("div", { style: { display: "block", height: "1px", position: "absolute", top: "0px", left: "0px" } }, _headerRowScrollerL), _headerRowSpacerR = Utils.createDomElement("div", { style: { display: "block", height: "1px", position: "absolute", top: "0px", left: "0px" } }, _headerRowScrollerR), _headerRowL = Utils.createDomElement("div", { className: "slick-headerrow-columns slick-headerrow-columns-left" }, _headerRowScrollerL), _headerRowR = Utils.createDomElement("div", { className: "slick-headerrow-columns slick-headerrow-columns-right" }, _headerRowScrollerR), _headerRows = [_headerRowL, _headerRowR], _topPanelScrollerL = Utils.createDomElement("div", { className: "slick-top-panel-scroller ui-state-default slick-state-default" }, _paneTopL), _topPanelScrollerR = Utils.createDomElement("div", { className: "slick-top-panel-scroller ui-state-default slick-state-default" }, _paneTopR), _topPanelScrollers = [_topPanelScrollerL, _topPanelScrollerR], _topPanelL = Utils.createDomElement("div", { className: "slick-top-panel", style: { width: "10000px" } }, _topPanelScrollerL), _topPanelR = Utils.createDomElement("div", { className: "slick-top-panel", style: { width: "10000px" } }, _topPanelScrollerR), _topPanels = [_topPanelL, _topPanelR], options.showColumnHeader || _headerScroller.forEach(function(el) { + hide(el); + }), options.showTopPanel || _topPanelScrollers.forEach(function(scroller) { + hide(scroller); + }), options.showHeaderRow || _headerRowScroller.forEach(function(scroller) { + hide(scroller); + }), _viewportTopL = Utils.createDomElement("div", { className: "slick-viewport slick-viewport-top slick-viewport-left", tabIndex: 0 }, _paneTopL), _viewportTopR = Utils.createDomElement("div", { className: "slick-viewport slick-viewport-top slick-viewport-right", tabIndex: 0 }, _paneTopR), _viewportBottomL = Utils.createDomElement("div", { className: "slick-viewport slick-viewport-bottom slick-viewport-left", tabIndex: 0 }, _paneBottomL), _viewportBottomR = Utils.createDomElement("div", { className: "slick-viewport slick-viewport-bottom slick-viewport-right", tabIndex: 0 }, _paneBottomR), _viewport = [_viewportTopL, _viewportTopR, _viewportBottomL, _viewportBottomR], options.viewportClass && _viewport.forEach(function(view) { + view.classList.add(options.viewportClass); + }), _activeViewportNode = _viewportTopL, _canvasTopL = Utils.createDomElement("div", { className: "grid-canvas grid-canvas-top grid-canvas-left", tabIndex: 0 }, _viewportTopL), _canvasTopR = Utils.createDomElement("div", { className: "grid-canvas grid-canvas-top grid-canvas-right", tabIndex: 0 }, _viewportTopR), _canvasBottomL = Utils.createDomElement("div", { className: "grid-canvas grid-canvas-bottom grid-canvas-left", tabIndex: 0 }, _viewportBottomL), _canvasBottomR = Utils.createDomElement("div", { className: "grid-canvas grid-canvas-bottom grid-canvas-right", tabIndex: 0 }, _viewportBottomR), _canvas = [_canvasTopL, _canvasTopR, _canvasBottomL, _canvasBottomR], scrollbarDimensions = scrollbarDimensions || measureScrollbar(), _activeCanvasNode = _canvasTopL, _preHeaderPanelSpacer && Utils.width(_preHeaderPanelSpacer, getCanvasWidth() + scrollbarDimensions.width), _headers.forEach(function(el) { + Utils.width(el, getHeadersWidth()); + }), Utils.width(_headerRowSpacerL, getCanvasWidth() + scrollbarDimensions.width), Utils.width(_headerRowSpacerR, getCanvasWidth() + scrollbarDimensions.width), options.createFooterRow && (_footerRowScrollerR = Utils.createDomElement("div", { className: "slick-footerrow ui-state-default slick-state-default" }, _paneTopR), _footerRowScrollerL = Utils.createDomElement("div", { className: "slick-footerrow ui-state-default slick-state-default" }, _paneTopL), _footerRowScroller = [_footerRowScrollerL, _footerRowScrollerR], _footerRowSpacerL = Utils.createDomElement("div", { style: { display: "block", height: "1px", position: "absolute", top: "0px", left: "0px" } }, _footerRowScrollerL), Utils.width(_footerRowSpacerL, getCanvasWidth() + scrollbarDimensions.width), _footerRowSpacerR = Utils.createDomElement("div", { style: { display: "block", height: "1px", position: "absolute", top: "0px", left: "0px" } }, _footerRowScrollerR), Utils.width(_footerRowSpacerR, getCanvasWidth() + scrollbarDimensions.width), _footerRowL = Utils.createDomElement("div", { className: "slick-footerrow-columns slick-footerrow-columns-left" }, _footerRowScrollerL), _footerRowR = Utils.createDomElement("div", { className: "slick-footerrow-columns slick-footerrow-columns-right" }, _footerRowScrollerR), _footerRow = [_footerRowL, _footerRowR], options.showFooterRow || _footerRowScroller.forEach(function(scroller) { + hide(scroller); + })), _focusSink2 = _focusSink.cloneNode(!0), _container.append(_focusSink2), options.explicitInitialization || finishInitialization(); + } + function finishInitialization() { + initialized || (initialized = !0, getViewportWidth(), getViewportHeight(), measureCellPaddingAndBorder(), disableSelection(_headers), options.enableTextSelectionOnCells || _viewport.forEach(function(view) { + _bindingEventService.bind(view, "selectstart.ui", function(event) { + event.target instanceof HTMLInputElement || event.target instanceof HTMLTextAreaElement; + }); + }), setFrozenOptions(), setPaneVisibility(), setScroller(), setOverflow(), updateColumnCaches(), createColumnHeaders(), createColumnFooter(), setupColumnSort(), createCssRules(), resizeCanvas(), bindAncestorScrollEvents(), _bindingEventService.bind(_container, "resize.slickgrid", resizeCanvas), _viewport.forEach(function(view) { + _bindingEventService.bind(view, "scroll", handleScroll); + }), options.enableMouseWheelScrollHandler && _viewport.forEach(function(view) { + slickMouseWheelInstances.push(MouseWheel({ + element: view, + onMouseWheel: handleMouseWheel + })); + }), _headerScroller.forEach(function(el) { + _bindingEventService.bind(el, "contextmenu", handleHeaderContextMenu), _bindingEventService.bind(el, "click", handleHeaderClick); + }), _headerRowScroller.forEach(function(scroller) { + _bindingEventService.bind(scroller, "scroll", handleHeaderRowScroll); + }), options.createFooterRow && (_footerRow.forEach(function(footer) { + _bindingEventService.bind(footer, "contextmenu", handleFooterContextMenu), _bindingEventService.bind(footer, "click", handleFooterClick); + }), _footerRowScroller.forEach(function(scroller) { + _bindingEventService.bind(scroller, "scroll", handleFooterRowScroll); + })), options.createPreHeaderPanel && _bindingEventService.bind(_preHeaderPanelScroller, "scroll", handlePreHeaderPanelScroll), _bindingEventService.bind(_focusSink, "keydown", handleKeyDown), _bindingEventService.bind(_focusSink2, "keydown", handleKeyDown), _canvas.forEach(function(element) { + _bindingEventService.bind(element, "keydown", handleKeyDown), _bindingEventService.bind(element, "click", handleClick), _bindingEventService.bind(element, "dblclick", handleDblClick), _bindingEventService.bind(element, "contextmenu", handleContextMenu), _bindingEventService.bind(element, "mouseover", handleCellMouseOver), _bindingEventService.bind(element, "mouseout", handleCellMouseOut); + }), Draggable && (slickDraggableInstance = Draggable({ + containerElement: _container, + allowDragFrom: "div.slick-cell", + onDragInit: handleDragInit, + onDragStart: handleDragStart, + onDrag: handleDrag, + onDragEnd: handleDragEnd + })), options.suppressCssChangesOnHiddenInit || restoreCssFromHiddenInit()); + } + function cacheCssForHiddenInit() { + _hiddenParents = Utils.parents(_container, ":hidden"); + for (let el of _hiddenParents) { + var old = {}; + for (let name in cssShow) + old[name] = el.style[name], el.style[name] = cssShow[name]; + oldProps.push(old); + } + } + function restoreCssFromHiddenInit() { + let i2 = 0; + for (let el of _hiddenParents) { + var old = oldProps[i2++]; + for (let name in cssShow) + el.style[name] = old[name]; + } + } + function hasFrozenColumns() { + return options.frozenColumn > -1; + } + function registerPlugin(plugin) { + plugins.unshift(plugin), plugin.init(self); + } + function unregisterPlugin(plugin) { + for (var i2 = plugins.length; i2 >= 0; i2--) + if (plugins[i2] === plugin) { + plugins[i2].destroy && plugins[i2].destroy(), plugins.splice(i2, 1); + break; + } + } + function getPluginByName(name) { + for (var i2 = plugins.length - 1; i2 >= 0; i2--) + if (plugins[i2].pluginName === name) + return plugins[i2]; + } + function setSelectionModel(model) { + selectionModel && (selectionModel.onSelectedRangesChanged.unsubscribe(handleSelectedRangesChanged), selectionModel.destroy && selectionModel.destroy()), selectionModel = model, selectionModel && (selectionModel.init(self), selectionModel.onSelectedRangesChanged.subscribe(handleSelectedRangesChanged)); + } + function getSelectionModel() { + return selectionModel; + } + function getCanvasNode(columnIdOrIdx, rowIndex) { + return _getContainerElement(getCanvases(), columnIdOrIdx, rowIndex); + } + function getActiveCanvasNode(e) { + return e === void 0 || (e instanceof EventData && (e = e.getNativeEvent()), _activeCanvasNode = e.target.closest(".grid-canvas")), _activeCanvasNode; + } + function getCanvases() { + return _canvas; + } + function getViewportNode(columnIdOrIdx, rowIndex) { + return _getContainerElement(getViewports(), columnIdOrIdx, rowIndex); + } + function getViewports() { + return _viewport; + } + function getActiveViewportNode(e) { + return setActiveViewportNode(e), _activeViewportNode; + } + function setActiveViewportNode(e) { + return e instanceof EventData && (e = e.getNativeEvent()), _activeViewportNode = e.target.closest(".slick-viewport"), _activeViewportNode; + } + function _getContainerElement(targetContainers, columnIdOrIdx, rowIndex) { + if (targetContainers) { + columnIdOrIdx || (columnIdOrIdx = 0), rowIndex || (rowIndex = 0); + var idx = typeof columnIdOrIdx == "number" ? columnIdOrIdx : getColumnIndex(columnIdOrIdx), isBottomSide = hasFrozenRows && rowIndex >= actualFrozenRow + (options.frozenBottom ? 0 : 1), isRightSide = hasFrozenColumns() && idx > options.frozenColumn; + return targetContainers[(isBottomSide ? 2 : 0) + (isRightSide ? 1 : 0)]; + } + } + function measureScrollbar() { + var outerdiv = Utils.createDomElement("div", { className: _viewport.className, style: { position: "absolute", top: "-10000px", left: "-10000px", overflow: "auto", width: "100px", height: "100px" } }, document.body), innerdiv = Utils.createDomElement("div", { style: { width: "200px", height: "200px", overflow: "auto" } }, outerdiv), dim = { + width: outerdiv.offsetWidth - outerdiv.clientWidth, + height: outerdiv.offsetHeight - outerdiv.clientHeight + }; + return innerdiv.remove(), outerdiv.remove(), dim; + } + function getHeadersWidth() { + headersWidth = headersWidthL = headersWidthR = 0; + for (var includeScrollbar = !options.autoHeight, i2 = 0, ii = columns.length; i2 < ii; i2++) + if (!(!columns[i2] || columns[i2].hidden)) { + var width = columns[i2].width; + options.frozenColumn > -1 && i2 > options.frozenColumn ? headersWidthR += width : headersWidthL += width; + } + return includeScrollbar && (options.frozenColumn > -1 && i2 > options.frozenColumn ? headersWidthR += scrollbarDimensions.width : headersWidthL += scrollbarDimensions.width), hasFrozenColumns() ? (headersWidthL = headersWidthL + 1e3, headersWidthR = Math.max(headersWidthR, viewportW) + headersWidthL, headersWidthR += scrollbarDimensions.width) : (headersWidthL += scrollbarDimensions.width, headersWidthL = Math.max(headersWidthL, viewportW) + 1e3), headersWidth = headersWidthL + headersWidthR, Math.max(headersWidth, viewportW) + 1e3; + } + function getHeadersWidthL() { + return headersWidthL = 0, columns.forEach(function(column, i2) { + column.hidden || options.frozenColumn > -1 && i2 > options.frozenColumn || (headersWidthL += column.width); + }), hasFrozenColumns() ? headersWidthL += 1e3 : (headersWidthL += scrollbarDimensions.width, headersWidthL = Math.max(headersWidthL, viewportW) + 1e3), headersWidthL; + } + function getHeadersWidthR() { + return headersWidthR = 0, columns.forEach(function(column, i2) { + column.hidden || options.frozenColumn > -1 && i2 > options.frozenColumn && (headersWidthR += column.width); + }), hasFrozenColumns() && (headersWidthR = Math.max(headersWidthR, viewportW) + getHeadersWidthL(), headersWidthR += scrollbarDimensions.width), headersWidthR; + } + function getCanvasWidth() { + var availableWidth = viewportHasVScroll ? viewportW - scrollbarDimensions.width : viewportW, i2 = columns.length; + for (canvasWidthL = canvasWidthR = 0; i2--; ) + !columns[i2] || columns[i2].hidden || (hasFrozenColumns() && i2 > options.frozenColumn ? canvasWidthR += columns[i2].width : canvasWidthL += columns[i2].width); + var totalRowWidth = canvasWidthL + canvasWidthR; + if (options.fullWidthRows) { + var extraWidth = Math.max(totalRowWidth, availableWidth) - totalRowWidth; + extraWidth > 0 && (totalRowWidth += extraWidth, hasFrozenColumns() ? canvasWidthR += extraWidth : canvasWidthL += extraWidth); + } + return totalRowWidth; + } + function updateCanvasWidth(forceColumnWidthsUpdate) { + var oldCanvasWidth = canvasWidth, oldCanvasWidthL = canvasWidthL, oldCanvasWidthR = canvasWidthR, widthChanged; + if (canvasWidth = getCanvasWidth(), widthChanged = canvasWidth !== oldCanvasWidth || canvasWidthL !== oldCanvasWidthL || canvasWidthR !== oldCanvasWidthR, widthChanged || hasFrozenColumns() || hasFrozenRows) + if (Utils.width(_canvasTopL, canvasWidthL), getHeadersWidth(), Utils.width(_headerL, headersWidthL), Utils.width(_headerR, headersWidthR), hasFrozenColumns()) { + let cWidth = Utils.width(_container) || 0; + if (cWidth > 0 && canvasWidthL > cWidth) + throw new Error("[SlickGrid] Frozen columns cannot be wider than the actual grid container width. Make sure to have less columns freezed or make your grid container wider"); + Utils.width(_canvasTopR, canvasWidthR), Utils.width(_paneHeaderL, canvasWidthL), Utils.setStyleSize(_paneHeaderR, "left", canvasWidthL), Utils.setStyleSize(_paneHeaderR, "width", viewportW - canvasWidthL), Utils.width(_paneTopL, canvasWidthL), Utils.setStyleSize(_paneTopR, "left", canvasWidthL), Utils.width(_paneTopR, viewportW - canvasWidthL), Utils.width(_headerRowScrollerL, canvasWidthL), Utils.width(_headerRowScrollerR, viewportW - canvasWidthL), Utils.width(_headerRowL, canvasWidthL), Utils.width(_headerRowR, canvasWidthR), options.createFooterRow && (Utils.width(_footerRowScrollerL, canvasWidthL), Utils.width(_footerRowScrollerR, viewportW - canvasWidthL), Utils.width(_footerRowL, canvasWidthL), Utils.width(_footerRowR, canvasWidthR)), options.createPreHeaderPanel && Utils.width(_preHeaderPanel, canvasWidth), Utils.width(_viewportTopL, canvasWidthL), Utils.width(_viewportTopR, viewportW - canvasWidthL), hasFrozenRows && (Utils.width(_paneBottomL, canvasWidthL), Utils.setStyleSize(_paneBottomR, "left", canvasWidthL), Utils.width(_viewportBottomL, canvasWidthL), Utils.width(_viewportBottomR, viewportW - canvasWidthL), Utils.width(_canvasBottomL, canvasWidthL), Utils.width(_canvasBottomR, canvasWidthR)); + } else + Utils.width(_paneHeaderL, "100%"), Utils.width(_paneTopL, "100%"), Utils.width(_headerRowScrollerL, "100%"), Utils.width(_headerRowL, canvasWidth), options.createFooterRow && (Utils.width(_footerRowScrollerL, "100%"), Utils.width(_footerRowL, canvasWidth)), options.createPreHeaderPanel && Utils.width(_preHeaderPanel, canvasWidth), Utils.width(_viewportTopL, "100%"), hasFrozenRows && (Utils.width(_viewportBottomL, "100%"), Utils.width(_canvasBottomL, canvasWidthL)); + viewportHasHScroll = canvasWidth >= viewportW - scrollbarDimensions.width, Utils.width(_headerRowSpacerL, canvasWidth + (viewportHasVScroll ? scrollbarDimensions.width : 0)), Utils.width(_headerRowSpacerR, canvasWidth + (viewportHasVScroll ? scrollbarDimensions.width : 0)), options.createFooterRow && (Utils.width(_footerRowSpacerL, canvasWidth + (viewportHasVScroll ? scrollbarDimensions.width : 0)), Utils.width(_footerRowSpacerR, canvasWidth + (viewportHasVScroll ? scrollbarDimensions.width : 0))), (widthChanged || forceColumnWidthsUpdate) && applyColumnWidths(); + } + function disableSelection(target) { + target.forEach(function(el) { + el.setAttribute("unselectable", "on"), el.style.MozUserSelect = "none", _bindingEventService.bind(el, "selectstart.ui", function() { + return !1; + }); + }); + } + function getMaxSupportedCssHeight() { + let supportedHeight = 1e6, testUpTo = navigator.userAgent.toLowerCase().match(/firefox/) ? options.ffMaxSupportedCssHeight : options.maxSupportedCssHeight, div = Utils.createDomElement("div", { style: { display: "hidden" } }, document.body); + for (; ; ) { + let test = supportedHeight * 2; + Utils.height(div, test); + let height = Utils.height(div); + if (test > testUpTo || height !== test) + break; + supportedHeight = test; + } + return div.remove(), supportedHeight; + } + function getUID() { + return uid; + } + function getHeaderColumnWidthDiff() { + return headerColumnWidthDiff; + } + function getScrollbarDimensions() { + return scrollbarDimensions; + } + function getDisplayedScrollbarDimensions() { + return { + width: viewportHasVScroll ? scrollbarDimensions.width : 0, + height: viewportHasHScroll ? scrollbarDimensions.height : 0 + }; + } + function getAbsoluteColumnMinWidth() { + return absoluteColumnMinWidth; + } + function bindAncestorScrollEvents() { + for (var elem = hasFrozenRows && !options.frozenBottom ? _canvasBottomL : _canvasTopL; (elem = elem.parentNode) != document.body && elem != null; ) + (elem == _viewportTopL || elem.scrollWidth != elem.clientWidth || elem.scrollHeight != elem.clientHeight) && (_boundAncestors.push(elem), _bindingEventService.bind(elem, "scroll." + uid, handleActiveCellPositionChange)); + } + function unbindAncestorScrollEvents() { + _boundAncestors.forEach(function(ancestor) { + _bindingEventService.unbindByEventName(ancestor, "scroll." + uid); + }), _boundAncestors = []; + } + function updateColumnHeader(columnId, title, toolTip) { + if (initialized) { + var idx = getColumnIndex(columnId); + if (idx != null) { + var columnDef = columns[idx], header = getColumnByIndex(idx); + header && (title !== void 0 && (columns[idx].name = title), toolTip !== void 0 && (columns[idx].toolTip = toolTip), trigger(self.onBeforeHeaderCellDestroy, { + node: header, + column: columnDef, + grid: self + }), header.setAttribute("title", toolTip || ""), title !== void 0 && (header.children[0].innerHTML = sanitizeHtmlString(title)), trigger(self.onHeaderCellRendered, { + node: header, + column: columnDef, + grid: self + })); + } + } + } + function getHeader(columnDef) { + if (!columnDef) + return hasFrozenColumns() ? _headers : _headerL; + var idx = getColumnIndex(columnDef.id); + return hasFrozenColumns() ? idx <= options.frozenColumn ? _headerL : _headerR : _headerL; + } + function getHeaderColumn(columnIdOrIdx) { + var idx = typeof columnIdOrIdx == "number" ? columnIdOrIdx : getColumnIndex(columnIdOrIdx), targetHeader = hasFrozenColumns() ? idx <= options.frozenColumn ? _headerL : _headerR : _headerL, targetIndex = hasFrozenColumns() ? idx <= options.frozenColumn ? idx : idx - options.frozenColumn - 1 : idx; + return targetHeader.children[targetIndex]; + } + function getHeaderRow() { + return hasFrozenColumns() ? _headerRows : _headerRows[0]; + } + function getFooterRow() { + return hasFrozenColumns() ? _footerRow : _footerRow[0]; + } + function getPreHeaderPanel() { + return _preHeaderPanel; + } + function getPreHeaderPanelRight() { + return _preHeaderPanelR; + } + function getHeaderRowColumn(columnIdOrIdx) { + var idx = typeof columnIdOrIdx == "number" ? columnIdOrIdx : getColumnIndex(columnIdOrIdx), headerRowTarget; + return hasFrozenColumns() ? idx <= options.frozenColumn ? headerRowTarget = _headerRowL : (headerRowTarget = _headerRowR, idx -= options.frozenColumn + 1) : headerRowTarget = _headerRowL, headerRowTarget.children[idx]; + } + function getFooterRowColumn(columnIdOrIdx) { + var idx = typeof columnIdOrIdx == "number" ? columnIdOrIdx : getColumnIndex(columnIdOrIdx), footerRowTarget; + return hasFrozenColumns() ? idx <= options.frozenColumn ? footerRowTarget = _footerRowL : (footerRowTarget = _footerRowR, idx -= options.frozenColumn + 1) : footerRowTarget = _footerRowL, footerRowTarget.children[idx]; + } + function createColumnFooter() { + if (options.createFooterRow) { + _footerRow.forEach(function(footer) { + footer.querySelectorAll(".slick-footerrow-column").forEach(function(column) { + let columnDef = Utils.storage.get(column, "column"); + trigger(self.onBeforeFooterRowCellDestroy, { + node: column, + column: columnDef, + grid: self + }); + }); + }), _footerRowL.replaceChildren(), _footerRowR.replaceChildren(); + for (var i2 = 0; i2 < columns.length; i2++) { + var m = columns[i2]; + if (!m || m.hidden) + continue; + let footerRowCell = Utils.createDomElement("div", { className: `ui-state-default slick-state-default slick-footerrow-column l${i2} r${i2}` }, hasFrozenColumns() && i2 > options.frozenColumn ? _footerRowR : _footerRowL), className = hasFrozenColumns() && i2 <= options.frozenColumn ? "frozen" : null; + className && footerRowCell.classList.add(className), Utils.storage.put(footerRowCell, "column", m), trigger(self.onFooterRowCellRendered, { + node: footerRowCell, + column: m, + grid: self + }); + } + } + } + function handleHeaderMouseHoverOn(e) { + e.target.classList.add("ui-state-hover", "slick-state-hover"); + } + function handleHeaderMouseHoverOff(e) { + e.target.classList.remove("ui-state-hover", "slick-state-hover"); + } + function createColumnHeaders() { + _headers.forEach(function(header) { + header.querySelectorAll(".slick-header-column").forEach(function(column) { + var columnDef = Utils.storage.get(column, "column"); + columnDef && trigger(self.onBeforeHeaderCellDestroy, { + node: column, + column: columnDef, + grid: self + }); + }); + }), _headerL.replaceChildren(), _headerR.replaceChildren(), getHeadersWidth(), Utils.width(_headerL, headersWidthL), Utils.width(_headerR, headersWidthR), _headerRows.forEach(function(row) { + row.querySelectorAll(".slick-headerrow-column").forEach(function(column) { + let columnDef = Utils.storage.get(column, "column"); + columnDef && trigger(self.onBeforeHeaderRowCellDestroy, { + node: this, + column: columnDef, + grid: self + }); + }); + }), _headerRowL.replaceChildren(), _headerRowR.replaceChildren(), options.createFooterRow && (_footerRowL.querySelectorAll(".slick-footerrow-column").forEach(function(column) { + var columnDef = Utils.storage.get(column, "column"); + columnDef && trigger(self.onBeforeFooterRowCellDestroy, { + node: this, + column: columnDef, + grid: self + }); + }), _footerRowL.replaceChildren(), hasFrozenColumns() && (_footerRowR.querySelectorAll(".slick-footerrow-column").forEach(function(column) { + var columnDef = Utils.storage.get(column, "column"); + columnDef && trigger(self.onBeforeFooterRowCellDestroy, { + node: this, + column: columnDef, + grid: self + }); + }), _footerRowR.replaceChildren())); + for (var i2 = 0; i2 < columns.length; i2++) { + let m = columns[i2], headerTarget = hasFrozenColumns() ? i2 <= options.frozenColumn ? _headerL : _headerR : _headerL, headerRowTarget = hasFrozenColumns() ? i2 <= options.frozenColumn ? _headerRowL : _headerRowR : _headerRowL, header = Utils.createDomElement("div", { id: `${uid + m.id}`, dataset: { id: m.id }, className: "ui-state-default slick-state-default slick-header-column", title: m.toolTip || "" }, headerTarget); + Utils.createDomElement("span", { className: "slick-column-name", innerHTML: sanitizeHtmlString(m.name) }, header), Utils.width(header, m.width - headerColumnWidthDiff); + let classname = m.headerCssClass || null; + if (classname && header.classList.add(classname), classname = hasFrozenColumns() && i2 <= options.frozenColumn ? "frozen" : null, classname && header.classList.add(classname), _bindingEventService.bind(header, "mouseenter", handleHeaderMouseEnter), _bindingEventService.bind(header, "mouseleave", handleHeaderMouseLeave), Utils.storage.put(header, "column", m), (options.enableColumnReorder || m.sortable) && (_bindingEventService.bind(header, "mouseenter", handleHeaderMouseHoverOn), _bindingEventService.bind(header, "mouseleave", handleHeaderMouseHoverOff)), m.hasOwnProperty("headerCellAttrs") && m.headerCellAttrs instanceof Object) + for (var key in m.headerCellAttrs) + m.headerCellAttrs.hasOwnProperty(key) && header.setAttribute(key, m.headerCellAttrs[key]); + if (m.sortable && (header.classList.add("slick-header-sortable"), Utils.createDomElement("div", { className: `slick-sort-indicator ${options.numberedMultiColumnSort && !options.sortColNumberInSeparateSpan ? " slick-sort-indicator-numbered" : ""}` }, header), options.numberedMultiColumnSort && options.sortColNumberInSeparateSpan && Utils.createDomElement("div", { className: "slick-sort-indicator-numbered" }, header)), trigger(self.onHeaderCellRendered, { + node: header, + column: m, + grid: self + }), options.showHeaderRow) { + let headerRowCell = Utils.createDomElement("div", { className: `ui-state-default slick-state-default slick-headerrow-column l${i2} r${i2}` }, headerRowTarget), classname2 = hasFrozenColumns() && i2 <= options.frozenColumn ? "frozen" : null; + classname2 && headerRowCell.classList.add(classname2), _bindingEventService.bind(headerRowCell, "mouseenter", handleHeaderRowMouseEnter), _bindingEventService.bind(headerRowCell, "mouseleave", handleHeaderRowMouseLeave), Utils.storage.put(headerRowCell, "column", m), trigger(self.onHeaderRowCellRendered, { + node: headerRowCell, + column: m, + grid: self + }); + } + if (options.createFooterRow && options.showFooterRow) { + let footerRowTarget = hasFrozenColumns() ? i2 <= options.frozenColumn ? _footerRow[0] : _footerRow[1] : _footerRow[0], footerRowCell = Utils.createDomElement("div", { className: `ui-state-default slick-state-default slick-footerrow-column l${i2} r${i2}` }, footerRowTarget); + Utils.storage.put(footerRowCell, "column", m), trigger(self.onFooterRowCellRendered, { + node: footerRowCell, + column: m, + grid: self + }); + } + } + setSortColumns(sortColumns), setupColumnResize(), options.enableColumnReorder && (typeof options.enableColumnReorder == "function" ? options.enableColumnReorder(self, _headers, headerColumnWidthDiff, setColumns, setupColumnResize, columns, getColumnIndex, uid, trigger) : setupColumnReorder()); + } + function setupColumnSort() { + _headers.forEach(function(header) { + _bindingEventService.bind(header, "click", function(e) { + if (!columnResizeDragging && !e.target.classList.contains("slick-resizable-handle")) { + var coll = e.target.closest(".slick-header-column"); + if (coll) { + var column = Utils.storage.get(coll, "column"); + if (column.sortable) { + if (!getEditorLock().commitCurrentEdit()) + return; + for (var previousSortColumns = sortColumns.slice(), sortColumn = null, i2 = 0; i2 < sortColumns.length; i2++) + if (sortColumns[i2].columnId == column.id) { + sortColumn = sortColumns[i2], sortColumn.sortAsc = !sortColumn.sortAsc; + break; + } + var hadSortCol = !!sortColumn; + options.tristateMultiColumnSort ? (sortColumn || (sortColumn = { columnId: column.id, sortAsc: column.defaultSortAsc }), hadSortCol && sortColumn.sortAsc && (sortColumns.splice(i2, 1), sortColumn = null), options.multiColumnSort || (sortColumns = []), sortColumn && (!hadSortCol || !options.multiColumnSort) && sortColumns.push(sortColumn)) : e.metaKey && options.multiColumnSort ? sortColumn && sortColumns.splice(i2, 1) : ((!e.shiftKey && !e.metaKey || !options.multiColumnSort) && (sortColumns = []), sortColumn ? sortColumns.length === 0 && sortColumns.push(sortColumn) : (sortColumn = { columnId: column.id, sortAsc: column.defaultSortAsc }, sortColumns.push(sortColumn))); + var onSortArgs; + options.multiColumnSort ? onSortArgs = { + multiColumnSort: !0, + previousSortColumns, + sortCols: sortColumns.map(function(col) { + return { columnId: columns[getColumnIndex(col.columnId)].id, sortCol: columns[getColumnIndex(col.columnId)], sortAsc: col.sortAsc }; + }) + } : onSortArgs = { + multiColumnSort: !1, + previousSortColumns, + columnId: sortColumns.length > 0 ? column.id : null, + sortCol: sortColumns.length > 0 ? column : null, + sortAsc: sortColumns.length > 0 ? sortColumns[0].sortAsc : !0 + }, trigger(self.onBeforeSort, onSortArgs, e).getReturnValue() !== !1 && (setSortColumns(sortColumns), trigger(self.onSort, onSortArgs, e)); + } + } + } + }); + }); + } + function currentPositionInHeader(id) { + let currentPosition = 0; + return _headers.forEach(function(header) { + header.querySelectorAll(".slick-header-column").forEach(function(column) { + column.id == id && (currentPosition = i); + }); + }), currentPosition; + } + function remove(arr, elem) { + var index = arr.lastIndexOf(elem); + index > -1 && (arr.splice(index, 1), remove(arr, elem)); + } + function setupColumnReorder() { + sortableSideLeftInstance && (sortableSideLeftInstance.destroy(), sortableSideRightInstance.destroy()); + var columnScrollTimer = null; + function scrollColumnsRight() { + _viewportScrollContainerX.scrollLeft = _viewportScrollContainerX.scrollLeft + 10; + } + function scrollColumnsLeft() { + _viewportScrollContainerX.scrollLeft = _viewportScrollContainerX.scrollLeft - 10; + } + var canDragScroll, sortableOptions = { + animation: 50, + direction: "horizontal", + chosenClass: "slick-header-column-active", + ghostClass: "slick-sortable-placeholder", + draggable: ".slick-header-column", + dragoverBubble: !1, + revertClone: !0, + scroll: !hasFrozenColumns(), + // enable auto-scroll + onStart: function(e) { + canDragScroll = !hasFrozenColumns() || Utils.offset(e.item).left > Utils.offset(_viewportScrollContainerX).left, canDragScroll && e.originalEvent.pageX > _container.clientWidth ? columnScrollTimer || (columnScrollTimer = setInterval(scrollColumnsRight, 100)) : canDragScroll && e.originalEvent.pageX < Utils.offset(_viewportScrollContainerX).left ? columnScrollTimer || (columnScrollTimer = setInterval(scrollColumnsLeft, 100)) : (clearInterval(columnScrollTimer), columnScrollTimer = null); + }, + onEnd: function(e) { + var cancel = !1; + clearInterval(columnScrollTimer), columnScrollTimer = null; + var limit = null; + if (!(cancel || !getEditorLock().commitCurrentEdit())) { + var reorderedIds = sortableSideLeftInstance.toArray(); + reorderedIds = reorderedIds.concat(sortableSideRightInstance.toArray()); + for (var reorderedColumns = [], i2 = 0; i2 < reorderedIds.length; i2++) + reorderedColumns.push(columns[getColumnIndex(reorderedIds[i2])]); + setColumns(reorderedColumns), trigger(self.onColumnsReordered, { impactedColumns: getImpactedColumns(limit) }), e.stopPropagation(), setupColumnResize(); + } + } + }; + sortableSideLeftInstance = Sortable.create(_headerL, sortableOptions), sortableSideRightInstance = Sortable.create(_headerR, sortableOptions); + } + function getHeaderChildren() { + let a = Array.from(_headers[0].children), b = Array.from(_headers[1].children); + return a.concat(b); + } + function getImpactedColumns(limit) { + var impactedColumns = []; + if (limit) + for (var i2 = limit.start; i2 <= limit.end; i2++) + impactedColumns.push(columns[i2]); + else + impactedColumns = columns; + return impactedColumns; + } + function handleResizeableHandleDoubleClick(evt) { + let triggeredByColumn = evt.target.parentElement.id.replace(uid, ""); + trigger(self.onColumnsResizeDblClick, { triggeredByColumn }); + } + function setupColumnResize() { + if (typeof Resizable == "undefined") + throw new Error('Slick.Resizable is undefined, make sure to import "slick.interactions.js"'); + var j, k, c, pageX, minPageX, maxPageX, firstResizable, lastResizable, frozenLeftColMaxWidth = 0; + let children = getHeaderChildren(); + for (let i2 = 0; i2 < children.length; i2++) + children[i2].querySelectorAll(".slick-resizable-handle").forEach(function(handle) { + handle.remove(); + }), !(i2 >= columns.length || !columns[i2] || columns[i2].hidden) && columns[i2].resizable && (firstResizable === void 0 && (firstResizable = i2), lastResizable = i2); + if (firstResizable !== void 0) + for (let i2 = 0; i2 < children.length; i2++) { + let colElm = children[i2]; + if (i2 >= columns.length || !columns[i2] || columns[i2].hidden || i2 < firstResizable || options.forceFitColumns && i2 >= lastResizable) + continue; + let resizeableHandle = Utils.createDomElement("div", { className: "slick-resizable-handle", role: "separator", ariaOrientation: "horizontal" }, colElm); + _bindingEventService.bind(resizeableHandle, "dblclick", handleResizeableHandleDoubleClick), slickResizableInstances.push( + Resizable({ + resizeableElement: colElm, + resizeableHandleElement: resizeableHandle, + onResizeStart: function(e, resizeElms) { + var targetEvent = e.touches ? e.touches[0] : e; + if (!getEditorLock().commitCurrentEdit()) + return !1; + pageX = targetEvent.pageX, frozenLeftColMaxWidth = 0, resizeElms.resizeableElement.classList.add("slick-header-column-active"); + var shrinkLeewayOnRight = null, stretchLeewayOnRight = null; + for (let pw = 0; pw < children.length; pw++) + pw >= columns.length || !columns[pw] || columns[pw].hidden || (columns[pw].previousWidth = children[pw].offsetWidth); + if (options.forceFitColumns) + for (shrinkLeewayOnRight = 0, stretchLeewayOnRight = 0, j = i2 + 1; j < columns.length; j++) + c = columns[j], c && c.resizable && !c.hidden && (stretchLeewayOnRight !== null && (c.maxWidth ? stretchLeewayOnRight += c.maxWidth - c.previousWidth : stretchLeewayOnRight = null), shrinkLeewayOnRight += c.previousWidth - Math.max(c.minWidth || 0, absoluteColumnMinWidth)); + var shrinkLeewayOnLeft = 0, stretchLeewayOnLeft = 0; + for (j = 0; j <= i2; j++) + c = columns[j], c && c.resizable && !c.hidden && (stretchLeewayOnLeft !== null && (c.maxWidth ? stretchLeewayOnLeft += c.maxWidth - c.previousWidth : stretchLeewayOnLeft = null), shrinkLeewayOnLeft += c.previousWidth - Math.max(c.minWidth || 0, absoluteColumnMinWidth)); + shrinkLeewayOnRight === null && (shrinkLeewayOnRight = 1e5), shrinkLeewayOnLeft === null && (shrinkLeewayOnLeft = 1e5), stretchLeewayOnRight === null && (stretchLeewayOnRight = 1e5), stretchLeewayOnLeft === null && (stretchLeewayOnLeft = 1e5), maxPageX = pageX + Math.min(shrinkLeewayOnRight, stretchLeewayOnLeft), minPageX = pageX - Math.min(shrinkLeewayOnLeft, stretchLeewayOnRight); + }, + onResize: function(e, resizeElms) { + var targetEvent = e.touches ? e.touches[0] : e; + columnResizeDragging = !0; + var actualMinWidth, d = Math.min(maxPageX, Math.max(minPageX, targetEvent.pageX)) - pageX, x, newCanvasWidthL = 0, newCanvasWidthR = 0, viewportWidth = viewportHasVScroll ? viewportW - scrollbarDimensions.width : viewportW; + if (d < 0) { + for (x = d, j = i2; j >= 0; j--) + c = columns[j], c && c.resizable && !c.hidden && (actualMinWidth = Math.max(c.minWidth || 0, absoluteColumnMinWidth), x && c.previousWidth + x < actualMinWidth ? (x += c.previousWidth - actualMinWidth, c.width = actualMinWidth) : (c.width = c.previousWidth + x, x = 0)); + for (k = 0; k <= i2; k++) + c = columns[k], !(!c || c.hidden) && (hasFrozenColumns() && k > options.frozenColumn ? newCanvasWidthR += c.width : newCanvasWidthL += c.width); + if (options.forceFitColumns) + for (x = -d, j = i2 + 1; j < columns.length; j++) + c = columns[j], !(!c || c.hidden) && c.resizable && (x && c.maxWidth && c.maxWidth - c.previousWidth < x ? (x -= c.maxWidth - c.previousWidth, c.width = c.maxWidth) : (c.width = c.previousWidth + x, x = 0), hasFrozenColumns() && j > options.frozenColumn ? newCanvasWidthR += c.width : newCanvasWidthL += c.width); + else + for (j = i2 + 1; j < columns.length; j++) + c = columns[j], !(!c || c.hidden) && (hasFrozenColumns() && j > options.frozenColumn ? newCanvasWidthR += c.width : newCanvasWidthL += c.width); + if (options.forceFitColumns) + for (x = -d, j = i2 + 1; j < columns.length; j++) + c = columns[j], !(!c || c.hidden) && c.resizable && (x && c.maxWidth && c.maxWidth - c.previousWidth < x ? (x -= c.maxWidth - c.previousWidth, c.width = c.maxWidth) : (c.width = c.previousWidth + x, x = 0)); + } else { + for (x = d, newCanvasWidthL = 0, newCanvasWidthR = 0, j = i2; j >= 0; j--) + if (c = columns[j], !(!c || c.hidden) && c.resizable) + if (x && c.maxWidth && c.maxWidth - c.previousWidth < x) + x -= c.maxWidth - c.previousWidth, c.width = c.maxWidth; + else { + var newWidth = c.previousWidth + x, resizedCanvasWidthL = canvasWidthL + x; + hasFrozenColumns() && j <= options.frozenColumn ? (newWidth > frozenLeftColMaxWidth && resizedCanvasWidthL < viewportWidth - options.frozenRightViewportMinWidth && (frozenLeftColMaxWidth = newWidth), c.width = resizedCanvasWidthL + options.frozenRightViewportMinWidth > viewportWidth ? frozenLeftColMaxWidth : newWidth) : c.width = newWidth, x = 0; + } + for (k = 0; k <= i2; k++) + c = columns[k], !(!c || c.hidden) && (hasFrozenColumns() && k > options.frozenColumn ? newCanvasWidthR += c.width : newCanvasWidthL += c.width); + if (options.forceFitColumns) + for (x = -d, j = i2 + 1; j < columns.length; j++) + c = columns[j], !(!c || c.hidden) && c.resizable && (actualMinWidth = Math.max(c.minWidth || 0, absoluteColumnMinWidth), x && c.previousWidth + x < actualMinWidth ? (x += c.previousWidth - actualMinWidth, c.width = actualMinWidth) : (c.width = c.previousWidth + x, x = 0), hasFrozenColumns() && j > options.frozenColumn ? newCanvasWidthR += c.width : newCanvasWidthL += c.width); + else + for (j = i2 + 1; j < columns.length; j++) + c = columns[j], !(!c || c.hidden) && (hasFrozenColumns() && j > options.frozenColumn ? newCanvasWidthR += c.width : newCanvasWidthL += c.width); + } + hasFrozenColumns() && newCanvasWidthL != canvasWidthL && (Utils.width(_headerL, newCanvasWidthL + 1e3), Utils.setStyleSize(_paneHeaderR, "left", newCanvasWidthL)), applyColumnHeaderWidths(), options.syncColumnCellResize && applyColumnWidths(), trigger(self.onColumnsDrag, { + triggeredByColumn: resizeElms.resizeableElement, + resizeHandle: resizeElms.resizeableHandleElement + }); + }, + onResizeEnd: function(e, resizeElms) { + resizeElms.resizeableElement.classList.remove("slick-header-column-active"); + var triggeredByColumn = resizeElms.resizeableElement.id.replace(uid, ""); + trigger(self.onBeforeColumnsResize, { triggeredByColumn }).getReturnValue() === !0 && applyColumnHeaderWidths(); + var newWidth; + for (j = 0; j < columns.length; j++) + c = columns[j], !(!c || c.hidden) && (newWidth = children[j].offsetWidth, c.previousWidth !== newWidth && c.rerenderOnResize && invalidateAllRows()); + updateCanvasWidth(!0), render(), trigger(self.onColumnsResized, { triggeredByColumn }), setTimeout(function() { + columnResizeDragging = !1; + }, 300); + } + }) + ); + } + } + function getVBoxDelta(el) { + var p = ["borderTopWidth", "borderBottomWidth", "paddingTop", "paddingBottom"], styles = getComputedStyle(el), delta = 0; + return p.forEach(function(val) { + delta += Utils.toFloat(styles[val]); + }), delta; + } + function setFrozenOptions() { + if (options.frozenColumn = options.frozenColumn >= 0 && options.frozenColumn < columns.length ? parseInt(options.frozenColumn) : -1, options.frozenRow > -1) { + hasFrozenRows = !0, frozenRowsHeight = options.frozenRow * options.rowHeight; + var dataLength = getDataLength(); + actualFrozenRow = options.frozenBottom ? dataLength - options.frozenRow : options.frozenRow; + } else + hasFrozenRows = !1; + } + function setPaneVisibility() { + hasFrozenColumns() ? (show(_paneHeaderR), show(_paneTopR), hasFrozenRows ? (show(_paneBottomL), show(_paneBottomR)) : (hide(_paneBottomR), hide(_paneBottomL))) : (hide(_paneHeaderR), hide(_paneTopR), hide(_paneBottomR), hasFrozenRows ? show(_paneBottomL) : (hide(_paneBottomR), hide(_paneBottomL))); + } + function setOverflow() { + _viewportTopL.style["overflow-x"] = hasFrozenColumns() ? hasFrozenRows && !options.alwaysAllowHorizontalScroll ? "hidden" : "scroll" : hasFrozenRows && !options.alwaysAllowHorizontalScroll ? "hidden" : "auto", _viewportTopL.style["overflow-y"] = !hasFrozenColumns() && options.alwaysShowVerticalScroll ? "scroll" : hasFrozenColumns() ? "hidden" : hasFrozenRows ? "scroll" : "auto", _viewportTopR.style["overflow-x"] = hasFrozenColumns() ? hasFrozenRows && !options.alwaysAllowHorizontalScroll ? "hidden" : "scroll" : hasFrozenRows && !options.alwaysAllowHorizontalScroll ? "hidden" : "auto", _viewportTopR.style["overflow-y"] = options.alwaysShowVerticalScroll ? "scroll" : (hasFrozenColumns(), hasFrozenRows ? "scroll" : "auto"), _viewportBottomL.style["overflow-x"] = hasFrozenColumns() ? hasFrozenRows && !options.alwaysAllowHorizontalScroll ? "scroll" : "auto" : (hasFrozenRows && !options.alwaysAllowHorizontalScroll, "auto"), _viewportBottomL.style["overflow-y"] = !hasFrozenColumns() && options.alwaysShowVerticalScroll ? "scroll" : hasFrozenColumns() ? "hidden" : hasFrozenRows ? "scroll" : "auto", _viewportBottomR.style["overflow-x"] = hasFrozenColumns() ? hasFrozenRows && !options.alwaysAllowHorizontalScroll ? "scroll" : "auto" : (hasFrozenRows && !options.alwaysAllowHorizontalScroll, "auto"), _viewportBottomR.style["overflow-y"] = options.alwaysShowVerticalScroll ? "scroll" : (hasFrozenColumns(), "auto"), options.viewportClass && (_viewportTopL.classList.add(options.viewportClass), _viewportTopR.classList.add(options.viewportClass), _viewportBottomL.classList.add(options.viewportClass), _viewportBottomR.classList.add(options.viewportClass)); + } + function setScroller() { + hasFrozenColumns() ? (_headerScrollContainer = _headerScrollerR, _headerRowScrollContainer = _headerRowScrollerR, _footerRowScrollContainer = _footerRowScrollerR, hasFrozenRows ? options.frozenBottom ? (_viewportScrollContainerX = _viewportBottomR, _viewportScrollContainerY = _viewportTopR) : _viewportScrollContainerX = _viewportScrollContainerY = _viewportBottomR : _viewportScrollContainerX = _viewportScrollContainerY = _viewportTopR) : (_headerScrollContainer = _headerScrollerL, _headerRowScrollContainer = _headerRowScrollerL, _footerRowScrollContainer = _footerRowScrollerL, hasFrozenRows ? options.frozenBottom ? (_viewportScrollContainerX = _viewportBottomL, _viewportScrollContainerY = _viewportTopL) : _viewportScrollContainerX = _viewportScrollContainerY = _viewportBottomL : _viewportScrollContainerX = _viewportScrollContainerY = _viewportTopL); + } + function measureCellPaddingAndBorder() { + let h2 = ["borderLeftWidth", "borderRightWidth", "paddingLeft", "paddingRight"], v = ["borderTopWidth", "borderBottomWidth", "paddingTop", "paddingBottom"], header = _headers[0]; + headerColumnWidthDiff = headerColumnHeightDiff = 0, cellWidthDiff = cellHeightDiff = 0; + let el = Utils.createDomElement("div", { className: "ui-state-default slick-state-default slick-header-column", style: { visibility: "hidden" }, textContent: "-" }, header), style = getComputedStyle(el); + style["box-sizing"] != "border-box" && style["-moz-box-sizing"] != "border-box" && style["-webkit-box-sizing"] != "border-box" && (h2.forEach(function(val) { + headerColumnWidthDiff += Utils.toFloat(style[val]); + }), v.forEach(function(val) { + headerColumnHeightDiff += Utils.toFloat(style[val]); + })), el.remove(); + let r = Utils.createDomElement("div", { className: "slick-row" }, _canvas[0]); + el = Utils.createDomElement("div", { className: "slick-cell", id: "", style: { visibility: "hidden", textContent: "-" } }, r), style = getComputedStyle(el), style["box-sizing"] != "border-box" && style["-moz-box-sizing"] != "border-box" && style["-webkit-box-sizing"] != "border-box" && (h2.forEach(function(val) { + cellWidthDiff += Utils.toFloat(style[val]); + }), v.forEach(function(val) { + cellHeightDiff += Utils.toFloat(style[val]); + })), r.remove(), absoluteColumnMinWidth = Math.max(headerColumnWidthDiff, cellWidthDiff); + } + function createCssRules() { + _style = Utils.createDomElement("template", { innerHTML: ' + + + +
@@ -34,7 +16,10 @@
-

About

+

+ + About: +

This example demonstrates using the Slick.State plugin persisting grid column width, order, visibility and sort order using Local Storage. For this demo, we use Local Storage, but you could technically save this data into a database and reload at any time your previous session. @@ -46,13 +31,14 @@

Options:

+ - - - - - - + + + + + + - - - - - - - - - - - + + + + + + + + + + + - - - - - - - - - + + + + + + + + - - - - + + + + - - - + + + - - - - - - - - - + + + + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - - - - - + + + + + + + - - - - + + + + - - - - - - - - - - - + + + + + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + + - - - + + + - - - - - - - - - - + + + + + + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - - - - - - - - - + + + + + + + + + - - - + + + - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + + - - - + + + diff --git a/examples/example-external-headersort.html b/examples/example-external-headersort.html index 3411bf58..875dbdd8 100644 --- a/examples/example-external-headersort.html +++ b/examples/example-external-headersort.html @@ -4,8 +4,8 @@ External Header Sort - - + + @@ -14,34 +14,39 @@
-

Demonstrates:

-
    -
  • external column sort initialisation
  • -
-

- uses the options hook of passing a function (rather than true/false/undefined) as the enableColumnReorder option. This function will - be used to set up the column reordering.

-

- the function prototype is: function(grid, headers, headerColumnWidthDiff, setColumns, setupColumnResize, columns, getColumnIndex, uid, trigger)

+
+

+ + Demonstrates: +

+
    +
  • external column sort initialisation
  • +
+

- uses the options hook of passing a function (rather than true/false/undefined) as the enableColumnReorder option. This function will + be used to set up the column reordering.

+

- the function prototype is: function(grid, headers, headerColumnWidthDiff, setColumns, setupColumnResize, columns, getColumnIndex, uid, trigger)

+
- - - + + + - - - - + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - + + + + + + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + diff --git a/examples/example-grouping-groupcolumn.html b/examples/example-grouping-groupcolumn.html index 47251cc1..f745f9c7 100644 --- a/examples/example-grouping-groupcolumn.html +++ b/examples/example-grouping-groupcolumn.html @@ -4,14 +4,13 @@ SlickGrid example: Row Group column - - - - - + + + + @@ -34,11 +37,13 @@
-
-

Demonstrates:

+

+ + Demonstrates: +

  • Grouping & Aggregator features
  • Similar to regular grouping but the "grouping" must be defined in the column we want to group by
  • @@ -93,22 +98,19 @@

    View Source:

    - - - - - - - - - - - - + + + + + + + + + + + - - - - + + + + - - - - - + + + + + + +

    + SlickGrid icons + +

    +

    +All SVG icons came from the Material Design Icons project, we only picked the minimum icons needed by SlickGrid. +
    The instruction is to simply import the "slick-icons.css" file and then use any of the CSS class "sgi sgi-icon-name" as shown below (Note: the "sgi" class is also required). +

    + + +
    +
    + + +

    Icon extra utils (available sizes, from 10px to 30px)

    +
    +
    + + +

    Icons are pure CSS (credits goes to UnoCSS project, see this article)

    +

    You can use regular CSS to change the color of your icons and make them scalable

    +
    +
    + + diff --git a/examples/example-jquery-accordion.html b/examples/example-jquery-accordion.html index 172560c3..db01428d 100644 --- a/examples/example-jquery-accordion.html +++ b/examples/example-jquery-accordion.html @@ -4,9 +4,9 @@ SlickGrid example: jQuery Accordion with a grid in each pane - - + +
    -
    +
    -

    Demonstrates:

    +

    + + Demonstrates: +

    • basic grid with multi-column tri-state sort option
    • numbers indicating column sort precedence are displayed in the columns when multiple columns selected
    • @@ -24,29 +33,38 @@

      Demonstrates:

    • if option sortColNumberInSeparateSpan is false, the above span is also styled with css class slick-sort-indicator-numbered
    • if option sortColNumberInSeparateSpan is true, renders a separate span for the number and styles it with css class slick-sort-indicator-numbered
    -

    View Source:

    - + +

    Options:

    +

    + +   + +

    + +

    View Source:

    +
    + - - - + + + - - - - - + + + + + - - - - - - - - - + + + + + + + + + - - - - - - + + + + + + + - - - - - - + + + + + + - - - - - - - - - + + + + + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + + - - - - - + + + + - - - - - + + + + + - - - - - - - - - - - - + + + + + + + + + + + + - - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - + + + + + - - - - - - - - - - + + + + + + + + + + + + - - - - + + + + + - - - + + + - - - - - + + + + - - - + + + + - - - - + + + + + - - - + + + - - - + + + - - + + + + - - - - - + + + + + + - - - - + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + + - - - - + + + + - + - - - - - + + + + + + - - - - - - - - + + + + + + + + + - - - - + + + + - + - - - - - + + + + + + + + + + + + + + diff --git a/examples/example4-model.html b/examples/example4-model.html index 6539fea0..27a566ce 100644 --- a/examples/example4-model.html +++ b/examples/example4-model.html @@ -4,11 +4,10 @@ SlickGrid example 4: Model - - - - - + + + +
    -
    +
    -
    -
    +
    - Search: -
    +

    + + Search: +

    @@ -92,7 +89,7 @@

    View Source:

    -