Compare commits

...

375 Commits

Author SHA1 Message Date
REJack
17aea0e4ef Merge pull request #3146 from danny007in/layout-size-fix
layout size bug fixed
2020-11-25 11:51:19 +01:00
REJack
3b6279ac38 fix faq demo links 2020-11-25 11:16:29 +01:00
REJack
087891fdf7 build dist files 2020-11-25 10:33:30 +01:00
REJack
82fb5d5f80 update dependencies 2020-11-25 10:31:52 +01:00
REJack
12c6c12907 add missing plugin notice 2020-11-25 10:15:53 +01:00
REJack
2ee68002ab fix version dropdown in docs 2020-11-25 10:13:29 +01:00
REJack
784eae413d update docs link 2020-11-25 10:12:46 +01:00
Daniel
0a70c3c89f layout size bug fixed 2020-11-25 14:22:20 +05:30
REJack
5993872f8b build dist files 2020-11-25 09:16:01 +01:00
REJack
ba3bf53809 bump version to v3.1.0-rc 2020-11-25 09:15:50 +01:00
REJack
a2df402653 update codemirror plugin files 2020-11-25 09:00:43 +01:00
REJack
4bbf746378 update plugin files 2020-11-25 09:00:26 +01:00
REJack
a33f74e503 add uplot charts 2020-11-25 08:59:41 +01:00
REJack
6b48a268c5 Merge pull request #3069 from ColorlibHQ/feat/iframe-plugin
IFrame plugin
2020-11-25 07:58:23 +01:00
Daniel
5d10674dc5 Update README.md (#3118)
Co-authored-by: REJack <info@rejack.de>
2020-11-25 07:53:27 +01:00
Nisar Hassan Naqvi
dfdb0f0665 make contributions easier via automating the dev setup. (#3110) 2020-11-25 07:51:27 +01:00
Michael Yang
a182ecfa69 Update _main-sidebar.scss (#3082)
fixed scrollbar show in sidebar
2020-11-25 07:50:13 +01:00
REJack
72ed5c36d4 bump bundlewatch sizes 2020-11-25 07:48:43 +01:00
dependabot[bot]
82d6e78508 Bump terser from 5.3.2 to 5.5.0 (#3142)
Bumps [terser](https://github.com/terser/terser) from 5.3.2 to 5.5.0.
- [Release notes](https://github.com/terser/terser/releases)
- [Changelog](https://github.com/terser/terser/blob/master/CHANGELOG.md)
- [Commits](https://github.com/terser/terser/compare/v5.3.2...v5.5.0)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-11-25 07:47:52 +01:00
dependabot[bot]
2997df7d63 Bump rollup from 2.28.2 to 2.33.3 (#3141)
Bumps [rollup](https://github.com/rollup/rollup) from 2.28.2 to 2.33.3.
- [Release notes](https://github.com/rollup/rollup/releases)
- [Changelog](https://github.com/rollup/rollup/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rollup/rollup/compare/v2.28.2...v2.33.3)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-11-25 07:47:30 +01:00
REJack
1b6767c07a Merge remote-tracking branch 'origin/master' into feat/iframe-plugin 2020-11-25 07:44:25 +01:00
dependabot[bot]
8e19ff2774 Bump codemirror from 5.58.0 to 5.58.3 (#3140)
Bumps [codemirror](https://github.com/codemirror/CodeMirror) from 5.58.0 to 5.58.3.
- [Release notes](https://github.com/codemirror/CodeMirror/releases)
- [Changelog](https://github.com/codemirror/CodeMirror/blob/master/CHANGELOG.md)
- [Commits](https://github.com/codemirror/CodeMirror/compare/5.58.0...5.58.3)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-11-25 07:36:01 +01:00
dependabot[bot]
7966285c3a Bump eslint from 7.10.0 to 7.14.0 (#3139)
Bumps [eslint](https://github.com/eslint/eslint) from 7.10.0 to 7.14.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/master/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v7.10.0...v7.14.0)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-11-25 07:35:48 +01:00
dependabot[bot]
f0c5ef275b Bump jekyll-seo-tag from 2.6.1 to 2.7.1 in /docs (#3098)
Bumps [jekyll-seo-tag](https://github.com/jekyll/jekyll-seo-tag) from 2.6.1 to 2.7.1.
- [Release notes](https://github.com/jekyll/jekyll-seo-tag/releases)
- [Changelog](https://github.com/jekyll/jekyll-seo-tag/blob/master/History.markdown)
- [Commits](https://github.com/jekyll/jekyll-seo-tag/compare/v2.6.1...v2.7.1)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-11-25 07:35:30 +01:00
dependabot[bot]
cb8dcbfd70 Bump moment from 2.29.0 to 2.29.1 (#3091)
Bumps [moment](https://github.com/moment/moment) from 2.29.0 to 2.29.1.
- [Release notes](https://github.com/moment/moment/releases)
- [Changelog](https://github.com/moment/moment/blob/develop/CHANGELOG.md)
- [Commits](https://github.com/moment/moment/compare/2.29.0...2.29.1)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-11-25 07:35:13 +01:00
dependabot[bot]
4f5da1f135 Bump @fortawesome/fontawesome-free from 5.14.0 to 5.15.1 (#3090)
Bumps [@fortawesome/fontawesome-free](https://github.com/FortAwesome/Font-Awesome) from 5.14.0 to 5.15.1.
- [Release notes](https://github.com/FortAwesome/Font-Awesome/releases)
- [Changelog](https://github.com/FortAwesome/Font-Awesome/blob/master/CHANGELOG.md)
- [Commits](https://github.com/FortAwesome/Font-Awesome/compare/5.14.0...5.15.1)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-11-25 07:34:40 +01:00
dependabot[bot]
8cb546b453 Bump datatables.net-buttons-bs4 from 1.6.4 to 1.6.5 (#3088)
Bumps [datatables.net-buttons-bs4](https://datatables.net) from 1.6.4 to 1.6.5.

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-11-25 07:34:28 +01:00
dependabot[bot]
0baf962241 Bump bundlewatch from 0.2.7 to 0.3.1 (#3077)
Bumps [bundlewatch](https://github.com/bundlewatch/bundlewatch) from 0.2.7 to 0.3.1.
- [Release notes](https://github.com/bundlewatch/bundlewatch/releases)
- [Commits](https://github.com/bundlewatch/bundlewatch/compare/v0.2.7...v0.3.1)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-11-25 07:34:01 +01:00
dependabot[bot]
5b590f4450 Bump postcss-cli from 7.1.1 to 7.1.2 (#3076)
Bumps [postcss-cli](https://github.com/postcss/postcss-cli) from 7.1.1 to 7.1.2.
- [Release notes](https://github.com/postcss/postcss-cli/releases)
- [Changelog](https://github.com/postcss/postcss-cli/blob/master/CHANGELOG.md)
- [Commits](https://github.com/postcss/postcss-cli/compare/7.1.1...7.1.2)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-11-25 07:33:51 +01:00
dependabot[bot]
aab8ff9605 Bump stylelint-config-twbs-bootstrap from 2.0.3 to 2.1.0 (#3074)
Bumps [stylelint-config-twbs-bootstrap](https://github.com/twbs/stylelint-config-twbs-bootstrap) from 2.0.3 to 2.1.0.
- [Release notes](https://github.com/twbs/stylelint-config-twbs-bootstrap/releases)
- [Commits](https://github.com/twbs/stylelint-config-twbs-bootstrap/compare/v2.0.3...v2.1.0)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-11-25 07:33:32 +01:00
REJack
218376c64c fix html validator error 2020-11-25 07:33:04 +01:00
REJack
e7d9ce7ec1 npm audit fix 2020-11-24 09:39:24 +01:00
REJack
1f7db49d54 add datatables searchpanes plugin 2020-11-24 09:38:21 +01:00
REJack
f163e3c43b small demo adjustments 2020-11-24 09:28:49 +01:00
REJack
fe3bce3398 add card with image overlay demo 2020-11-24 09:27:57 +01:00
REJack
290738e916 add .main-header.dropdown-offset-legacy 2020-11-24 08:54:03 +01:00
REJack
78a6403f2b update plugin files 2020-11-24 08:16:03 +01:00
REJack
45cd9f6645 rename .fullscreen-mode to .iframe-mode-fullscreen 2020-10-03 15:43:47 +02:00
REJack
865fc053fa add iframe fullscreen mode 2020-10-03 15:43:15 +02:00
REJack
113a477618 add scroll buttons for navbar items 2020-10-03 15:12:06 +02:00
REJack
98962aeab7 enhance removeActiveTab 2020-10-03 14:31:11 +02:00
REJack
fdaedac545 fix menu links 2020-10-03 14:30:19 +02:00
REJack
16b7b87af4 Merge branch 'feat/iframe-plugin' of https://github.com/ColorlibHQ/AdminLTE into feat/iframe-plugin 2020-10-01 13:57:55 +02:00
REJack
b9e718406b bump bundlewatch js sizes 2020-10-01 13:57:36 +02:00
REJack
81b9131269 Merge branch 'master' into feat/iframe-plugin 2020-10-01 13:11:46 +02:00
Cleverson
0c3f82bc58 Smileyzn close button patch 1 (#3049)
* Removed box shadow from page-link class

Removed box shadow from page-link class

* Add close span import

Let's fix close button on dialogs like modals etc.

* Fix outline for close button

Fix outline for close button

* Fixed whitespace

Fixed whitespace
2020-09-30 14:04:10 +02:00
REJack
96836c0f85 finish iframe docs 2020-09-30 09:04:42 +02:00
REJack
a772df102d rework methods 2020-09-30 09:04:29 +02:00
REJack
15e92b4546 place iframe.html sidebar menu item 2020-09-30 09:03:11 +02:00
REJack
4b567affcd add iframe docs (1st version) 2020-09-29 15:13:49 +02:00
REJack
f0f59489f0 fix tab events 2020-09-29 08:48:41 +02:00
REJack
39f9e9e8a8 add usage for useNavbarItems 2020-09-29 08:44:17 +02:00
REJack
94867cd6b5 rename events to onTab* instead of tab* 2020-09-29 08:27:43 +02:00
dependabot[bot]
c29e2c57c9 Bump eslint-plugin-import from 2.22.0 to 2.22.1 (#3058)
Bumps [eslint-plugin-import](https://github.com/benmosher/eslint-plugin-import) from 2.22.0 to 2.22.1.
- [Release notes](https://github.com/benmosher/eslint-plugin-import/releases)
- [Changelog](https://github.com/benmosher/eslint-plugin-import/blob/master/CHANGELOG.md)
- [Commits](https://github.com/benmosher/eslint-plugin-import/compare/v2.22.0...v2.22.1)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-09-28 09:16:22 +02:00
dependabot[bot]
0d6c6849c9 Bump stylelint from 13.6.1 to 13.7.2 (#3057)
Bumps [stylelint](https://github.com/stylelint/stylelint) from 13.6.1 to 13.7.2.
- [Release notes](https://github.com/stylelint/stylelint/releases)
- [Changelog](https://github.com/stylelint/stylelint/blob/master/CHANGELOG.md)
- [Commits](https://github.com/stylelint/stylelint/compare/13.6.1...13.7.2)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-09-28 09:16:08 +02:00
dependabot[bot]
e2a579fd8d Bump terser from 5.3.1 to 5.3.2 (#3061)
Bumps [terser](https://github.com/terser/terser) from 5.3.1 to 5.3.2.
- [Release notes](https://github.com/terser/terser/releases)
- [Changelog](https://github.com/terser/terser/blob/master/CHANGELOG.md)
- [Commits](https://github.com/terser/terser/compare/v5.3.1...v5.3.2)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-09-28 08:48:13 +02:00
REJack
88b30801f3 fix new eslint errors since v7.10.0 (#3064) 2020-09-28 08:25:39 +02:00
REJack
e00dce43d9 add missing form-control borrder only docs info (#3063) 2020-09-28 08:25:14 +02:00
dependabot[bot]
c195816e4f Bump moment from 2.28.0 to 2.29.0 (#3062)
Bumps [moment](https://github.com/moment/moment) from 2.28.0 to 2.29.0.
- [Release notes](https://github.com/moment/moment/releases)
- [Changelog](https://github.com/moment/moment/blob/develop/CHANGELOG.md)
- [Commits](https://github.com/moment/moment/compare/2.28.0...2.29.0)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-09-28 08:24:43 +02:00
dependabot[bot]
3f3b153733 Bump eslint-plugin-unicorn from 21.0.0 to 22.0.0 (#3060)
Bumps [eslint-plugin-unicorn](https://github.com/sindresorhus/eslint-plugin-unicorn) from 21.0.0 to 22.0.0.
- [Release notes](https://github.com/sindresorhus/eslint-plugin-unicorn/releases)
- [Commits](https://github.com/sindresorhus/eslint-plugin-unicorn/compare/v21.0.0...v22.0.0)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-09-28 08:24:27 +02:00
dependabot[bot]
c58530fa90 Bump @rollup/plugin-babel from 5.1.0 to 5.2.1 (#3059)
Bumps [@rollup/plugin-babel](https://github.com/rollup/plugins) from 5.1.0 to 5.2.1.
- [Release notes](https://github.com/rollup/plugins/releases)
- [Commits](https://github.com/rollup/plugins/compare/wasm-v5.1.0...babel-v5.2.1)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-09-28 08:24:16 +02:00
dependabot[bot]
e75ab5ea33 Bump rollup from 2.26.11 to 2.28.2 (#3056)
Bumps [rollup](https://github.com/rollup/rollup) from 2.26.11 to 2.28.2.
- [Release notes](https://github.com/rollup/rollup/releases)
- [Changelog](https://github.com/rollup/rollup/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rollup/rollup/compare/v2.26.11...v2.28.2)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-09-28 08:23:35 +02:00
dependabot[bot]
fc1e85f6e3 Bump eslint from 7.9.0 to 7.10.0 (#3055)
Bumps [eslint](https://github.com/eslint/eslint) from 7.9.0 to 7.10.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/master/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v7.9.0...v7.10.0)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-09-28 08:19:34 +02:00
dependabot[bot]
9b38c0d2d5 Bump @sweetalert2/theme-bootstrap-4 from 3.2.0 to 4.0.0 (#3053)
Bumps [@sweetalert2/theme-bootstrap-4](https://github.com/sweetalert2/sweetalert2-themes) from 3.2.0 to 4.0.0.
- [Release notes](https://github.com/sweetalert2/sweetalert2-themes/releases)
- [Changelog](https://github.com/sweetalert2/sweetalert2-themes/blob/master/CHANGELOG.md)
- [Commits](https://github.com/sweetalert2/sweetalert2-themes/compare/v3.2.0...v4.0.0)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-09-28 08:11:49 +02:00
dependabot[bot]
a68023d47d Bump sweetalert2 from 9.17.2 to 10.3.5 (#3054)
Bumps [sweetalert2](https://github.com/sweetalert2/sweetalert2) from 9.17.2 to 10.3.5.
- [Release notes](https://github.com/sweetalert2/sweetalert2/releases)
- [Changelog](https://github.com/sweetalert2/sweetalert2/blob/master/CHANGELOG.md)
- [Commits](https://github.com/sweetalert2/sweetalert2/compare/v9.17.2...v10.3.5)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-09-28 08:11:26 +02:00
REJack
4ead90db62 Merge pull request #3046 from ColorlibHQ/feat/new-form-button-styles
new styles and demos
2020-09-25 13:49:49 +02:00
REJack
5d434cb80f fix html validator errors 2020-09-25 12:38:53 +02:00
REJack
4bf3a3ec84 raise bundlewatch limits 2020-09-25 12:35:13 +02:00
Cleverson
d01e1ac22f Removed box shadow from page-link class (#3048)
Removed box shadow from page-link class
2020-09-24 22:52:30 +02:00
REJack
0ec522caa2 fix tfoot padding in .card-body.p-0 2020-09-24 11:16:02 +02:00
REJack
04d78d238b add dark-mode checkbox in demo.js 2020-09-24 11:03:13 +02:00
REJack
3311b2ca92 add kanban demo 2020-09-24 10:58:07 +02:00
REJack
1b328391c6 add kanban style 2020-09-24 10:57:36 +02:00
REJack
37a83c86fa small dark-mode fixes 2020-09-24 10:57:27 +02:00
REJack
ee814eb531 finish dark-mode overrides 2020-09-24 09:08:20 +02:00
REJack
377a00f0cb small html corrections 2020-09-24 09:07:55 +02:00
REJack
08151496fc add dark-mode in some components 2020-09-23 16:08:15 +02:00
REJack
89c19af33c remove text-dark on content header 2020-09-23 09:50:37 +02:00
REJack
1871f1d45d update docs/layout 2020-09-23 08:51:41 +02:00
REJack
89dbc4c8de add custom-control-input-outline for checkbox & radio 2020-09-23 08:46:54 +02:00
REJack
0c91826f12 add button with icons demo in ui/buttons 2020-09-23 08:13:56 +02:00
REJack
fd734c977a add custom-control-input color variations 2020-09-22 15:21:52 +02:00
REJack
e8744690ce add three new styles examples in forms/general 2020-09-22 15:02:28 +02:00
REJack
e4bc0c45c9 added .form-control-border 2020-09-22 15:01:56 +02:00
REJack
6e26bc3485 fix input-group-text font-size with body.text-sm (#3045) 2020-09-22 14:34:16 +02:00
REJack
3876bfdd29 fix direct-chat classes in pages/widgets (#3044) 2020-09-22 14:23:49 +02:00
REJack
24ce21a5c3 Merge pull request #3042 from mineminemine/fix/info-box
Fix/info box
2020-09-22 14:23:31 +02:00
Ryan
6eab10b0ba line-height with percentage seems to behave weirdly in IE 2020-09-22 12:05:02 +08:00
Ryan
ba9cf441cb Fix for Info Box when on IE11
Fixes info box displaying incorrectly when using IE11 (not sure for older versions) and also change text for the shadow info box so it will appear better for smaller screens (without having to use text-wrap).
2020-09-22 11:30:19 +08:00
REJack
9236727125 Merge pull request #3041 from ColorlibHQ/feat/update-plugins
update plugins
2020-09-21 11:50:00 +02:00
REJack
e8476fa5a4 update plugins 2020-09-21 11:43:11 +02:00
REJack
835d48fbb2 update to fullcalendar dist version 2020-09-21 11:39:44 +02:00
dependabot[bot]
f7911fe077 Bump @fullcalendar/daygrid from 4.4.2 to 5.3.2 (#3022)
Bumps [@fullcalendar/daygrid](https://github.com/fullcalendar/fullcalendar) from 4.4.2 to 5.3.2.
- [Release notes](https://github.com/fullcalendar/fullcalendar/releases)
- [Changelog](https://github.com/fullcalendar/fullcalendar/blob/master/CHANGELOG.md)
- [Commits](https://github.com/fullcalendar/fullcalendar/compare/v4.4.2...v5.3.2)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-09-21 11:14:08 +02:00
dependabot[bot]
f1e5aac2a2 Bump datatables.net-responsive-bs4 from 2.2.5 to 2.2.6 (#3035)
Bumps [datatables.net-responsive-bs4](https://datatables.net) from 2.2.5 to 2.2.6.

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-09-21 11:13:46 +02:00
dependabot[bot]
171c4270c8 Bump @babel/preset-env from 7.11.0 to 7.11.5 (#3034)
Bumps [@babel/preset-env](https://github.com/babel/babel/tree/HEAD/packages/babel-preset-env) from 7.11.0 to 7.11.5.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.11.5/packages/babel-preset-env)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-09-21 11:12:59 +02:00
dependabot[bot]
f59da2129d Bump @fullcalendar/timegrid from 4.4.2 to 5.3.1 (#3007)
Bumps [@fullcalendar/timegrid](https://github.com/fullcalendar/fullcalendar) from 4.4.2 to 5.3.1.
- [Release notes](https://github.com/fullcalendar/fullcalendar/releases)
- [Changelog](https://github.com/fullcalendar/fullcalendar/blob/master/CHANGELOG.md)
- [Commits](https://github.com/fullcalendar/fullcalendar/compare/v4.4.2...v5.3.1)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-09-21 11:12:19 +02:00
dependabot[bot]
49f2621e6f Bump datatables.net-keytable-bs4 from 2.5.2 to 2.5.3 (#3033)
Bumps [datatables.net-keytable-bs4](https://datatables.net) from 2.5.2 to 2.5.3.

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-09-21 11:11:49 +02:00
dependabot[bot]
8284cdc1da Bump moment from 2.27.0 to 2.28.0 (#3036)
Bumps [moment](https://github.com/moment/moment) from 2.27.0 to 2.28.0.
- [Release notes](https://github.com/moment/moment/releases)
- [Changelog](https://github.com/moment/moment/blob/develop/CHANGELOG.md)
- [Commits](https://github.com/moment/moment/compare/2.27.0...2.28.0)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-09-21 11:11:24 +02:00
dependabot[bot]
a0e1e81149 Bump datatables.net from 1.10.21 to 1.10.22 (#3037)
Bumps [datatables.net](https://github.com/DataTables/Dist-DataTables) from 1.10.21 to 1.10.22.
- [Release notes](https://github.com/DataTables/Dist-DataTables/releases)
- [Commits](https://github.com/DataTables/Dist-DataTables/compare/1.10.21...1.10.22)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-09-21 11:11:09 +02:00
dependabot[bot]
bd6b7a6d89 Bump @babel/core from 7.11.1 to 7.11.6 (#3038)
Bumps [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core) from 7.11.1 to 7.11.6.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.11.6/packages/babel-core)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-09-21 11:10:53 +02:00
dependabot[bot]
0f2ba49fae Bump @fullcalendar/interaction from 4.4.2 to 5.3.1 (#3004)
Bumps [@fullcalendar/interaction](https://github.com/fullcalendar/fullcalendar) from 4.4.2 to 5.3.1.
- [Release notes](https://github.com/fullcalendar/fullcalendar/releases)
- [Changelog](https://github.com/fullcalendar/fullcalendar/blob/master/CHANGELOG.md)
- [Commits](https://github.com/fullcalendar/fullcalendar/compare/v4.4.2...v5.3.1)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-09-21 11:09:12 +02:00
dependabot[bot]
7c8f45ebcf Bump @fullcalendar/bootstrap from 4.4.2 to 5.3.1 (#3003)
Bumps [@fullcalendar/bootstrap](https://github.com/fullcalendar/fullcalendar) from 4.4.2 to 5.3.1.
- [Release notes](https://github.com/fullcalendar/fullcalendar/releases)
- [Changelog](https://github.com/fullcalendar/fullcalendar/blob/master/CHANGELOG.md)
- [Commits](https://github.com/fullcalendar/fullcalendar/compare/v4.4.2...v5.3.1)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-09-21 11:08:45 +02:00
REJack
432be77df0 fix background-gradient-variant deprecated warning (#3040) 2020-09-21 11:03:47 +02:00
Shailesh Ladumor
41c9588cb9 docs: Video tutorial link add into docs (#3032) 2020-09-21 10:54:35 +02:00
REJack
99a1632731 Merge pull request #3039 from ColorlibHQ/feat/some-plugin-fixes
some plugin fixes
2020-09-21 10:45:22 +02:00
Ryan
32a760a47d Fix for sidebar searching when there are no sidebar to search (#3010)
* added examples for box shadows

Add some examples for shadows on certain elements/widgets like the cards or tables; mainly to help with color contrasting since the body background has a similar color / tone with the element/widget's background

* Revert "added examples for box shadows"

This reverts commit 3aa62588db.

* Fix sidebar searching

If there are no data-widget: "sidebar-search" found, then stop init()
2020-09-21 10:33:44 +02:00
REJack
06b7deef80 fix tooltip in maximized card 2020-09-21 10:20:07 +02:00
REJack
ee590b0645 update control-sidebar methods in docs 2020-09-21 09:32:01 +02:00
REJack
209075b504 fix mulitple level dropdown-menu overlapping 2020-09-21 09:28:14 +02:00
REJack
e257bffd0d add posibile fix to use multiple sidebar treeviews 2020-09-21 09:12:41 +02:00
REJack
fd07c05d2d last few changes
- fix sidebar menu item name (remove badge text)
- add removeActiveTab and event listener
2020-09-20 11:18:05 +02:00
REJack
1058af118a rework navbar to be scrollable 2020-09-20 11:16:39 +02:00
REJack
0cfe854c71 add ability to set menu items active 2020-09-20 10:55:39 +02:00
REJack
18aeaed0a6 add event callback's (tabClicked, tabChanged, tabCreated) 2020-09-20 10:07:34 +02:00
REJack
b4b92be945 add ability to use navbar items 2020-09-20 09:59:23 +02:00
REJack
3a12dce448 add tab loading screen with delay 2020-09-19 14:51:15 +02:00
REJack
5bf7e0346b fix iframe height setter 2020-09-19 14:16:39 +02:00
REJack
563a91d15a add panelAutoHeightMode in Layout.js 2020-09-19 14:15:59 +02:00
REJack
349b501c27 further progress
- fix tab creation
- fix tab switching
- add auto open tab on creation
- add auto iframe mode for easy adaption
- add switchTab method
2020-09-19 14:00:55 +02:00
REJack
973377e5df remove active menu in sidebar 2020-09-19 13:51:01 +02:00
REJack
b810326bb8 further changes
- add empty tab
- fix tab switching
- add _fixHeight
2020-09-18 12:54:44 +02:00
REJack
a298bab35d start iframe plugin 2020-09-16 15:32:22 +02:00
dependabot[bot]
2cb8bb72a7 Bump rollup from 2.23.0 to 2.26.11 (#3021)
Bumps [rollup](https://github.com/rollup/rollup) from 2.23.0 to 2.26.11.
- [Release notes](https://github.com/rollup/rollup/releases)
- [Changelog](https://github.com/rollup/rollup/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rollup/rollup/compare/v2.23.0...v2.26.11)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-09-16 13:44:04 +02:00
dependabot[bot]
b62d3b20df Bump terser from 4.8.0 to 5.3.1 (#3020)
Bumps [terser](https://github.com/terser/terser) from 4.8.0 to 5.3.1.
- [Release notes](https://github.com/terser/terser/releases)
- [Changelog](https://github.com/terser/terser/blob/master/CHANGELOG.md)
- [Commits](https://github.com/terser/terser/compare/v4.8.0...v5.3.1)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-09-16 13:43:45 +02:00
dependabot[bot]
4ca888e427 Bump eslint from 7.5.0 to 7.9.0 (#3019)
Bumps [eslint](https://github.com/eslint/eslint) from 7.5.0 to 7.9.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/master/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v7.5.0...v7.9.0)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-09-16 13:42:59 +02:00
dependabot[bot]
ec6425d99d Bump inputmask from 5.0.3 to 5.0.5 (#2963)
Bumps [inputmask](https://github.com/RobinHerbots/Inputmask) from 5.0.3 to 5.0.5.
- [Release notes](https://github.com/RobinHerbots/Inputmask/releases)
- [Changelog](https://github.com/RobinHerbots/Inputmask/blob/5.x/CHANGELOG.md)
- [Commits](https://github.com/RobinHerbots/Inputmask/compare/5.0.3...5.0.5)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-09-14 12:53:55 +02:00
dependabot[bot]
cc9766d607 Bump bootstrap from 4.4.1 to 4.5.2 (#2961)
Bumps [bootstrap](https://github.com/twbs/bootstrap) from 4.4.1 to 4.5.2.
- [Release notes](https://github.com/twbs/bootstrap/releases)
- [Commits](https://github.com/twbs/bootstrap/compare/v4.4.1...v4.5.2)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-09-14 12:53:43 +02:00
dependabot[bot]
443bb31418 Bump datatables.net-buttons-bs4 from 1.6.2 to 1.6.3 (#2959)
Bumps [datatables.net-buttons-bs4](https://datatables.net) from 1.6.2 to 1.6.3.

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-09-14 12:53:15 +02:00
REJack
80f96916e0 Merge pull request #3024 from ColorlibHQ/feat/new-example-pages
new example pages
2020-09-14 12:52:23 +02:00
REJack
dc00689d30 fix html validator errors/warnings 2020-09-14 11:54:09 +02:00
REJack
12c4eb90e4 fix active menu in contact-us & faq 2020-09-14 11:49:17 +02:00
REJack
6feb219d8b small contact-us changes 2020-09-14 11:43:49 +02:00
REJack
45c694fdc4 finish contact-us and place menu item 2020-09-14 11:41:18 +02:00
REJack
0384c30f8e add faq & contact us(not finish) demo 2020-09-11 17:08:08 +02:00
Ryan
48743c7dee Small fix for TodoList plugin (#3013)
Properly attach the event listener to the correct selector and fix on the options passed on in the JQuery API. However, a new bug comes from this fix when both data-widget and Jquery API is set where the event listener will be triggered twice
2020-09-11 11:57:33 +02:00
REJack
444b95ff48 rework login & register menu items in sidebar 2020-09-11 11:33:57 +02:00
REJack
e6965ff86a add forgot password v2 demo 2020-09-11 11:28:16 +02:00
REJack
758936a97a add search forms & results (simple & enhanced) 2020-09-11 11:20:30 +02:00
REJack
2ad27011ed add datatables button example 2020-09-11 09:50:09 +02:00
dependabot[bot]
16b4d30d31 Bump @babel/core from 7.10.5 to 7.11.1 (#2955)
Bumps [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core) from 7.10.5 to 7.11.1.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.11.1/packages/babel-core)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-08-06 11:19:01 +02:00
dependabot[bot]
f7dbbe455e Bump @babel/preset-env from 7.10.4 to 7.11.0 (#2948)
Bumps [@babel/preset-env](https://github.com/babel/babel/tree/HEAD/packages/babel-preset-env) from 7.10.4 to 7.11.0.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.11.0/packages/babel-preset-env)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-08-06 11:09:07 +02:00
dependabot[bot]
7679818fc4 Bump overlayscrollbars from 1.12.0 to 1.13.0 (#2944)
Bumps [overlayscrollbars](https://github.com/KingSora/OverlayScrollbars) from 1.12.0 to 1.13.0.
- [Release notes](https://github.com/KingSora/OverlayScrollbars/releases)
- [Commits](https://github.com/KingSora/OverlayScrollbars/compare/v1.12.0...v1.13.0)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-08-06 11:00:33 +02:00
dependabot[bot]
7a29690ed3 Bump autoprefixer from 9.8.5 to 9.8.6 (#2947)
Bumps [autoprefixer](https://github.com/postcss/autoprefixer) from 9.8.5 to 9.8.6.
- [Release notes](https://github.com/postcss/autoprefixer/releases)
- [Changelog](https://github.com/postcss/autoprefixer/blob/master/CHANGELOG.md)
- [Commits](https://github.com/postcss/autoprefixer/compare/9.8.5...9.8.6)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-08-06 10:48:01 +02:00
dependabot[bot]
e62d8e8562 Bump pdfmake from 0.1.66 to 0.1.68 (#2951)
Bumps [pdfmake](https://github.com/bpampuch/pdfmake) from 0.1.66 to 0.1.68.
- [Release notes](https://github.com/bpampuch/pdfmake/releases)
- [Changelog](https://github.com/bpampuch/pdfmake/blob/master/CHANGELOG.md)
- [Commits](https://github.com/bpampuch/pdfmake/compare/0.1.66...0.1.68)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-08-06 10:47:31 +02:00
dependabot[bot]
72ad5e5154 Bump @fortawesome/fontawesome-free from 5.13.1 to 5.14.0 (#2933)
Bumps [@fortawesome/fontawesome-free](https://github.com/FortAwesome/Font-Awesome) from 5.13.1 to 5.14.0.
- [Release notes](https://github.com/FortAwesome/Font-Awesome/releases)
- [Changelog](https://github.com/FortAwesome/Font-Awesome/blob/master/CHANGELOG.md)
- [Commits](https://github.com/FortAwesome/Font-Awesome/compare/5.13.1...5.14.0)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-08-06 10:46:12 +02:00
dependabot[bot]
0e5d88a095 Bump sweetalert2 from 9.17.0 to 9.17.1 (#2938)
Bumps [sweetalert2](https://github.com/sweetalert2/sweetalert2) from 9.17.0 to 9.17.1.
- [Release notes](https://github.com/sweetalert2/sweetalert2/releases)
- [Changelog](https://github.com/sweetalert2/sweetalert2/blob/master/CHANGELOG.md)
- [Commits](https://github.com/sweetalert2/sweetalert2/compare/v9.17.0...v9.17.1)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-07-28 16:39:12 +03:00
dependabot[bot]
f30cc78d5f Bump rollup from 2.21.0 to 2.23.0 (#2932)
Bumps [rollup](https://github.com/rollup/rollup) from 2.21.0 to 2.23.0.
- [Release notes](https://github.com/rollup/rollup/releases)
- [Changelog](https://github.com/rollup/rollup/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rollup/rollup/compare/v2.21.0...v2.23.0)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-07-28 16:35:41 +03:00
dependabot[bot]
c33f7a89c2 Bump eslint-config-xo from 0.32.0 to 0.32.1 (#2934)
Bumps [eslint-config-xo](https://github.com/xojs/eslint-config-xo) from 0.32.0 to 0.32.1.
- [Release notes](https://github.com/xojs/eslint-config-xo/releases)
- [Commits](https://github.com/xojs/eslint-config-xo/compare/v0.32.0...v0.32.1)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-07-28 16:34:46 +03:00
dependabot[bot]
5d3f997288 Bump eslint-plugin-unicorn from 20.1.0 to 21.0.0 (#2931)
Bumps [eslint-plugin-unicorn](https://github.com/sindresorhus/eslint-plugin-unicorn) from 20.1.0 to 21.0.0.
- [Release notes](https://github.com/sindresorhus/eslint-plugin-unicorn/releases)
- [Commits](https://github.com/sindresorhus/eslint-plugin-unicorn/compare/v20.1.0...v21.0.0)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-07-28 16:29:41 +03:00
dependabot[bot]
cc40b1fc6b Bump browser-sync from 2.26.7 to 2.26.12 (#2935)
Bumps [browser-sync](https://github.com/BrowserSync/browser-sync) from 2.26.7 to 2.26.12.
- [Release notes](https://github.com/BrowserSync/browser-sync/releases)
- [Changelog](https://github.com/BrowserSync/browser-sync/blob/master/CHANGELOG.md)
- [Commits](https://github.com/BrowserSync/browser-sync/compare/v2.26.7...v2.26.12)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-07-28 16:28:42 +03:00
dependabot[bot]
f9f1d5b3e2 Bump eslint from 7.4.0 to 7.5.0 (#2936)
Bumps [eslint](https://github.com/eslint/eslint) from 7.4.0 to 7.5.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/master/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v7.4.0...v7.5.0)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-07-28 16:28:27 +03:00
REJack
fdf849bab9 add new login, register & recover-password v2 page 2020-07-25 23:50:56 +02:00
REJack
611e50e969 move demo code after 3rd-party scripts (#2930) 2020-07-25 22:53:37 +02:00
REJack
c79452bb22 sidebar search enhancements (#2929)
* add ability to move across entries with arrow keys
* small style fixes for sidebar search
* bump bundlewatch size
2020-07-25 22:52:55 +02:00
REJack
127a1568c7 remove simplemde (#2928)
* remove simplemde
* remove simplemde from docs/dependencies
2020-07-25 19:58:03 +02:00
REJack
45a51f51b2 fix control-sidebar height with layout-fixed (#2927) 2020-07-25 00:39:07 +02:00
REJack
8facf9fa18 remove duplicate menu-open class in markup 2020-07-24 23:43:32 +02:00
REJack
346515b5a7 remove sidebar-is-opening on expand (#2926) 2020-07-24 22:43:50 +02:00
REJack
46dcb2a43e remove unnecessary jquery-ui (#2925) 2020-07-24 22:23:06 +02:00
REJack
67c15d1389 remove flot-old and add flot plugins from flot/source folder (#2924) 2020-07-24 22:13:20 +02:00
REJack
16c24abc3b Merge pull request #2923 from ColorlibHQ/feat/docs-updates-changes
* add additional-styles docs section
* add expandable tables section
* small typo fixes in direct chat section
2020-07-24 22:04:04 +02:00
REJack
c9ba65fb63 small typo fixes in direct chat section 2020-07-24 21:44:03 +02:00
REJack
731fef74f1 add expandable tables section 2020-07-24 21:43:34 +02:00
REJack
be42956a9d add additional-styles docs section 2020-07-24 21:27:54 +02:00
REJack
ac9e60684c add sparkline demo in inline charts (#2922) 2020-07-24 18:37:38 +02:00
REJack
949f91985f add support for fontawesome svg icons (#2920)
* add support for fontawesome svg icons
* bump bundlewatch sizes
2020-07-24 17:59:40 +02:00
REJack
240836922c Merge pull request #2916 from ColorlibHQ/feat/some-new-plugins
some new plugins
2020-07-24 16:24:32 +02:00
REJack
50d0035591 fix html validator error 2020-07-24 16:04:45 +02:00
REJack
29537ba540 fix html validator errors 2020-07-24 15:09:35 +02:00
REJack
204758c7ff add dropzonejs demo 2020-07-24 14:56:55 +02:00
REJack
216841f578 add dropzonejs plugin 2020-07-24 14:56:45 +02:00
REJack
caed140088 add codemirror & simplemde demo 2020-07-24 13:55:40 +02:00
REJack
2df58a35cc add codemirror & simplemde plugin files 2020-07-24 13:16:36 +02:00
REJack
07b516acc7 add bs-stepper demo 2020-07-23 23:25:53 +02:00
REJack
46927d3259 add bs-stepper plugin 2020-07-23 23:12:42 +02:00
REJack
1fc14abea4 update existing plugins 2020-07-23 23:12:30 +02:00
REJack
bafc8e67b8 fix maximized-card card-body overflow (#2915) 2020-07-23 22:18:44 +02:00
REJack
16686958b6 add nav-collapse-hide-child in demo.js (#2913)
* add nav-collapse-hide-child in demo.js
* fix nav-collapse-hide-child with sidebar-no-expand
2020-07-23 20:58:15 +02:00
REJack
2cf8ec813c remove has-treeview class across all demo & docs pages (#2912)
* remove has-treeview class across all demo & docs pages
* remove if item.subitems in docs/_includes/sidebar.html
2020-07-22 17:58:00 +02:00
REJack
aac8ca32df add font awesome light & duotone icons support (#2911)
* add font awesome light & duotone icons support
* fix lint error
2020-07-22 16:50:44 +02:00
REJack
1666fa3a46 enhance brand-link with pushmenu inside brand (#2910) 2020-07-22 16:08:19 +02:00
REJack
b48419b23b sidebar custom area (#2908)
* add sidebar-custom style
* fix hide-on-collapse
* add new sidebar menu entry
* add custom area docs info
2020-07-22 16:06:12 +02:00
REJack
01e00cd43d enhance ExpandableTable for table tree (#2907)
* enhance ExpandableTable for table tree
* remove unused rotate class
* fix html validator error/warnings
2020-07-22 16:03:54 +02:00
REJack
c9603ef5aa fullscreen plugin/button (#2906)
* add fullscreen plugin
* add fullscreen buton in topnav
* remove old mozilla function
2020-07-22 16:01:38 +02:00
REJack
42a184233e add pagination month (#2905) 2020-07-22 16:00:40 +02:00
dependabot[bot]
bc52b7276e Bump moment from 2.24.0 to 2.27.0 (#2896)
Bumps [moment](https://github.com/moment/moment) from 2.24.0 to 2.27.0.
- [Release notes](https://github.com/moment/moment/releases)
- [Changelog](https://github.com/moment/moment/blob/develop/CHANGELOG.md)
- [Commits](https://github.com/moment/moment/compare/2.24.0...2.27.0)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-07-22 15:59:23 +02:00
dependabot[bot]
702fc09199 Bump sweetalert2 from 9.15.2 to 9.17.0 (#2892)
Bumps [sweetalert2](https://github.com/sweetalert2/sweetalert2) from 9.15.2 to 9.17.0.
- [Release notes](https://github.com/sweetalert2/sweetalert2/releases)
- [Changelog](https://github.com/sweetalert2/sweetalert2/blob/master/CHANGELOG.md)
- [Commits](https://github.com/sweetalert2/sweetalert2/compare/v9.15.2...v9.17.0)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-07-22 15:57:53 +02:00
XhmikosR
7d42f7cceb Tweak CI cache (#2904)
Enable cache on Windows and fix cache directory to work on all OS'es
2020-07-22 15:53:08 +02:00
REJack
738ee83fa8 add btn-app color variations demo (#2903) 2020-07-19 16:23:40 +02:00
Aigars Silkalns
cd6930dd0a Merge pull request #2898 from ColorlibHQ/dependabot-cfg
Tweak dependabot config
2020-07-15 16:41:47 +03:00
Aigars Silkalns
5132611e0c Merge pull request #2897 from ColorlibHQ/deps
Update devDependencies and regenerate package-lock.json
2020-07-15 16:41:28 +03:00
XhmikosR
e60dc163e3 Tweak dependabot config
* switch to weekly updates
* increase versions
* add bundler deps too
2020-07-15 16:35:12 +03:00
XhmikosR
d143077b0e Update devDependencies and regenerate package-lock.json 2020-07-15 16:34:10 +03:00
XhmikosR
903143a1e1 Fix XSS in calendar.html (#2868)
* Fix XSS in calendar.html

* Remove console.log
2020-07-15 09:54:06 +02:00
XhmikosR
d114eabfe6 Update ci.yml (#2866)
Add caching but skip it on Windows due to https://github.com/actions/cache/issues/336

If the issue is fixed, the `if` condition can be removed
2020-07-15 09:53:49 +02:00
dependabot[bot]
917e47ea58 Bump @rollup/plugin-babel from 5.0.4 to 5.1.0 (#2885)
Bumps [@rollup/plugin-babel](https://github.com/rollup/plugins) from 5.0.4 to 5.1.0.
- [Release notes](https://github.com/rollup/plugins/releases)
- [Commits](https://github.com/rollup/plugins/compare/babel-v5.0.4...babel-v5.1.0)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-07-15 09:04:43 +03:00
dependabot[bot]
ffbe945d88 Bump autoprefixer from 9.8.4 to 9.8.5 (#2884)
Bumps [autoprefixer](https://github.com/postcss/autoprefixer) from 9.8.4 to 9.8.5.
- [Release notes](https://github.com/postcss/autoprefixer/releases)
- [Changelog](https://github.com/postcss/autoprefixer/blob/master/CHANGELOG.md)
- [Commits](https://github.com/postcss/autoprefixer/compare/9.8.4...9.8.5)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-07-15 09:03:11 +03:00
Aigars Silkalns
3fffe8071f Merge pull request #2872 from ColorlibHQ/dependabot/add-v2-config-file
Create Dependabot config file
2020-07-09 15:28:30 +03:00
dependabot-preview[bot]
186faaaab4 Create Dependabot config file 2020-07-08 14:38:30 +00:00
Aigars Silkalns
d3a552db71 Merge pull request #2871 from XhmikosR/deps
Update dependencies and gems
2020-07-08 16:50:06 +03:00
XhmikosR
9c878bde3a Update dependencies and gems
* pdfmake                     ^0.1.65  →   ^0.1.66
* @babel/core                 ^7.10.3  →   ^7.10.4
* @babel/preset-env           ^7.10.3  →   ^7.10.4
* eslint                       ^7.3.1  →    ^7.4.0
* eslint-config-xo            ^0.31.0  →   ^0.32.0
* eslint-plugin-compat         ^3.7.0  →    ^3.8.0
* rollup                      ^2.18.1  →   ^2.21.0
* vnu-jar                    ^20.5.29  →  ^20.6.30
2020-07-08 16:12:57 +03:00
REJack
c02ab3f0cd Merge pull request #2841 from ColorlibHQ/feat/sidebar-search
Sidebar Search
2020-07-05 12:03:22 +02:00
REJack
0aff809e7b add docs section 2020-07-02 15:52:12 +02:00
XhmikosR
a1d6efe454 Remove moot data-toggle="tooltip" (#2861)
Tooltips need to be manually initialized which didn't happen.

Also, streamline tag indentation a bit
2020-07-01 16:21:20 +02:00
REJack
89f47f3486 Update .babelrc.js (#2859)
* add `bugfixes: true` which will be the default in Babel 8.x
2020-06-28 14:03:33 +02:00
XhmikosR
fdc400067c Update dependencies (#2851)
* @fortawesome/fontawesome-free  ^5.13.0  →  ^5.13.1
* @sweetalert2/theme-bootstrap-4  ^3.1.4  →   ^3.2.0
* jszip                           ^3.4.0  →   ^3.5.0
* sweetalert2                    ^9.14.4  →  ^9.15.2
* eslint-plugin-import           ^2.21.2  →  ^2.22.0
* rollup                         ^2.18.0  →  ^2.18.1
2020-06-28 14:03:17 +02:00
XhmikosR
755df41324 Remove console.log (#2860) 2020-06-28 14:03:01 +02:00
XhmikosR
9812f8002b Update .babelrc.js
* add `bugfixes: true` which will be the default in Babel 8.x
2020-06-28 08:38:42 +03:00
REJack
5b24a7a47d rework expandable table (#2825) 2020-06-27 18:58:40 +02:00
REJack
45d4759ab0 add abilty to highlight name and path 2020-06-27 18:58:12 +02:00
REJack
798cf73e45 bump bundlewatch limit 2020-06-27 18:41:56 +02:00
REJack
6823a175d2 Revert "fix: ignore warnings for deprecation and add TODO for removing dependency (#2852)" (#2858)
This reverts commit 2458663439.
2020-06-27 18:30:21 +02:00
Shawn Heide
2458663439 fix: ignore warnings for deprecation and add TODO for removing dependency (#2852) 2020-06-27 17:56:03 +02:00
XhmikosR
50a8489e10 Update devDependencies (#2850)
* @babel/core           ^7.10.2  →  ^7.10.3
* @babel/preset-env     ^7.10.2  →  ^7.10.3
* @rollup/plugin-babel   ^5.0.3  →   ^5.0.4
* autoprefixer           ^9.8.0  →   ^9.8.4
* eslint                 ^7.2.0  →   ^7.3.1
* rollup                ^2.15.0  →  ^2.18.0
* stylelint             ^13.6.0  →  ^13.6.1
* terser                 ^4.7.0  →   ^4.8.0
2020-06-27 17:55:21 +02:00
XhmikosR
8e48630aac Update .browserslistrc (#2849)
* Remove the minimum Chrome and Firefox versions
* Make Edge 16 the minimum version
* Add Firefox ESR
2020-06-27 17:54:31 +02:00
REJack
eec4fd768e add sidebar search form in all demo pages 2020-06-13 17:37:06 +02:00
REJack
30746618d0 add sidebar search style 2020-06-13 17:33:02 +02:00
REJack
00b4aec60a add SidebarSearch.js 2020-06-13 17:32:43 +02:00
XhmikosR
5386be7a22 Fix comment (#2839) 2020-06-13 14:43:12 +02:00
XhmikosR
c886592bc5 ControlSidebar.js: minor simplification (#2837) 2020-06-13 14:42:56 +02:00
XhmikosR
57c2dd90c0 Update browserslist config (#2836)
* use the defaults
* drop Edge < 15
* drop Android since newer Android uses Android WebView which is Chromium-based
2020-06-13 14:34:36 +02:00
XhmikosR
2545f04bf3 Use template literals (#2835) 2020-06-13 14:34:10 +02:00
XhmikosR
bce97813d6 Be explicit with the background color property (#2834) 2020-06-13 12:22:58 +02:00
REJack
fffb131305 Merge pull request #2830 from XhmikosR/js-string-constants
Switch to String constants
2020-06-13 12:17:41 +02:00
XhmikosR
6a7c491071 ExpandableTable.js: add missing variable 2020-06-13 10:23:57 +03:00
XhmikosR
f94fa978f9 Fix DirectChat toggled event. 2020-06-13 10:23:57 +03:00
XhmikosR
4101916d14 Switch to String constants
Should result in better compression (aprox. -10% from the compressed adminlte.min.js) and should be easier to see unused/undefined variables on lint stage.
2020-06-13 10:23:56 +03:00
REJack
0a589f61b1 Merge pull request #2818 from XhmikosR/patch-1
vnu: enable `Werror`
2020-06-12 20:43:16 +02:00
REJack
515edfa906 Merge pull request #2829 from XhmikosR/deps
Update dependencies
2020-06-12 20:42:12 +02:00
XhmikosR
a8b291a943 Ignore more plugin files. (#2831) 2020-06-12 20:41:13 +02:00
XhmikosR
3f203af04b Remove .nav-tabs-custom references (#2832) 2020-06-12 20:40:06 +02:00
XhmikosR
5af47e0398 Update docs.yml
Fix ruby cache invalidation
2020-06-12 14:22:24 +03:00
XhmikosR
967fdeff31 Update Gemfile.lock 2020-06-12 12:49:44 +03:00
XhmikosR
29631025f3 Update dependencies
* flag-icon-css          ^3.4.6  →   ^3.5.0
* sweetalert2           ^9.14.0  →  ^9.14.4
* eslint-config-xo      ^0.30.0  →  ^0.31.0
* eslint-plugin-import  ^2.20.2  →  ^2.21.2
* rollup                ^2.13.1  →  ^2.15.0
2020-06-11 15:27:46 +03:00
XhmikosR
3bbde9e7ec pages/gallery.html: add missing headings 2020-06-08 14:29:23 +03:00
XhmikosR
9dfc8da08a It's JavaScript. 2020-06-08 14:29:23 +03:00
XhmikosR
500a53be1c pages/tables/simple.html: add colspan 2020-06-08 14:29:23 +03:00
XhmikosR
7f890fd6a2 ExpandableTable.js: lowercase colspan 2020-06-08 14:29:22 +03:00
XhmikosR
819455f5ec Fix 404.html page 2020-06-08 14:29:22 +03:00
XhmikosR
e8043b6a25 vnu: enable Werror 2020-06-08 14:29:22 +03:00
XhmikosR
cf2e1b85dc Fix accordion example (#2823)
* make collapsible heading behave like a block
* remove the non-existent `panel-collapse` class
* replace the `in` class with `show`
2020-06-08 13:28:13 +02:00
XhmikosR
18ee4a5421 Ignore inputmask.binding.js (#2820) 2020-06-08 12:33:22 +02:00
XhmikosR
8daa7a8f86 Use Bootstrap 4.4 consistently. (#2824) 2020-06-08 12:31:05 +02:00
REJack
06239d3d35 Merge pull request #2817 from XhmikosR/deps
Deps
2020-06-06 11:29:42 +02:00
XhmikosR
9cabb6468d Update devDependencies 2020-06-06 09:42:01 +03:00
XhmikosR
b2233260d4 Update bootstrap-slider to v11.0.2. 2020-06-06 09:41:45 +03:00
XhmikosR
a4673ccd1b Unbreak lines (#2814) 2020-06-05 16:36:57 +02:00
REJack
5ed7e97288 Merge pull request #2797 from XhmikosR/docs
Fix docs
2020-06-05 16:34:46 +02:00
XhmikosR
1f6c5a8181 Fix typo in comment (#2813) 2020-06-05 16:14:36 +02:00
XhmikosR
7782373a12 Remove docs from the npm package 2020-06-05 17:02:09 +03:00
XhmikosR
6017b241bf Markdown tweaks 2020-06-05 17:02:09 +03:00
XhmikosR
edc51cc61b Fix Jekyll variables and Liquid consistency tweaks
* add `baseurl`
* add `url`
2020-06-05 17:02:09 +03:00
XhmikosR
4bc6c1e8d6 Add missing trailing slash in docs link. (#2812) 2020-06-05 16:00:55 +02:00
XhmikosR
ae670b200e Load the minified summernote CSS (#2804) 2020-06-05 16:00:30 +02:00
XhmikosR
a3dc358394 language-menu.html: load flag-icon-css locally (#2803) 2020-06-05 16:00:15 +02:00
XhmikosR
3cec30427d layout.md: Escape \ (#2811) 2020-06-05 15:51:49 +02:00
XhmikosR
ea21c73666 Add back jsgrid/demos/db.js (#2810)
It's used in pages/tables/jsgrid.html.
2020-06-05 15:51:13 +02:00
XhmikosR
39e9416f8c Rename variable for clarity (#2801) 2020-06-05 15:49:56 +02:00
REJack
4a31f9986b Merge pull request #2799 from XhmikosR/pages
HTML Pages tag cleanup
2020-06-05 15:49:39 +02:00
XhmikosR
6788552f17 chartjs.html: switch to $. like everywhere else (#2798) 2020-06-05 15:47:32 +02:00
XhmikosR
695cfb9dd9 Update devDependencies and gems (#2796) 2020-06-05 15:46:57 +02:00
XhmikosR
96946b4fd4 Remove the obsolete X-UA-Compatible 2020-06-05 08:31:34 +03:00
XhmikosR
2f4a7e0e3e Move Google Fonts CSS first.
Also, fix a couple of comments.
2020-06-05 08:27:14 +03:00
REJack
5a6a9142fe bump bundlewatch size 2020-06-05 01:46:36 +02:00
bansalshashank
f1ce1758ce [Tables] Expandable table (#2528)
* [Tables] Expandable table

* enhance expandable table

* fix AdminLTE.js export

* fix linting errors

* fix HTML validator errors

Co-authored-by: Shashank Bansal <shashank.bansal@eloquent.studio>
Co-authored-by: REJack <info@rejack.de>
2020-06-05 00:35:50 +02:00
REJack
9f8149a44e remove missplaced "Outline" on non-outlined boxes 2020-06-04 21:39:44 +02:00
XhmikosR
74cccca8a1 Refactor SCSS main files. (#2791) 2020-06-04 21:27:13 +02:00
Ukee
e69ca82095 [Enhancement] Box Shadows (#2529)
* added examples for box shadows

Add some examples for shadows on certain elements/widgets like the cards or tables; mainly to help with color contrasting since the body background has a similar color / tone with the element/widget's background

* Revert "added examples for box shadows"

This reverts commit 3aa62588db.

* Added examples for box shadows

Add some examples for shadows on certain elements/widgets like the cards or tables; mainly to help with color contrasting since the body background has a similar color / tone with the element/widget's background

* remove simple table custom shadow variations

* update widget custom shadow variations

* replace tab indent with spaces

Co-authored-by: REJack <info@rejack.de>
2020-06-04 21:17:22 +02:00
XhmikosR
ab22cb62c7 docs action: fix cache (#2795) 2020-06-04 21:15:54 +02:00
XhmikosR
5a1ae0c35e Cache selectors when possible. (#2790) 2020-06-04 20:06:38 +02:00
REJack
1fbda275a9 prep pre version (v3.1.0-pre) 2020-06-04 17:31:22 +02:00
REJack
c4bc2c676c Merge pull request #2789 from XhmikosR/patch-13
Use an object when setting multiple CSS properties
2020-06-04 17:23:01 +02:00
REJack
c1f87dfbde Merge pull request #2772 from XhmikosR/docs-lint
Lint HTML
2020-06-04 17:13:11 +02:00
XhmikosR
306dd00b98 Fix all HTML validation errors. 2020-06-03 22:01:28 +03:00
XhmikosR
38e74faf55 Add vnu-jar for HTML validation.
Also, add a GitHub Action which builds the docs and run the validator script.
2020-06-03 22:01:27 +03:00
REJack
da1fa4eaab Merge pull request #2788 from XhmikosR/rm-ionic
Remove ionic icons from pages that don't use them
2020-06-03 19:04:27 +02:00
XhmikosR
5ac5edf929 Bump bundlewatch limit 2020-06-03 20:02:13 +03:00
XhmikosR
97d48edcdf Use an object when setting multiple CSS properties 2020-06-03 19:57:41 +03:00
XhmikosR
15e2a311fa Remove ionic icons from pages that don't use them 2020-06-03 19:53:23 +03:00
REJack
0e5d93fb4d Merge pull request #2787 from XhmikosR/deps
Update devDependencies and gems
2020-06-03 18:09:31 +02:00
REJack
b4b8d07feb Merge pull request #2785 from XhmikosR/js-tweaks-sort-exports
Sort imports/exports alphabetically
2020-06-03 18:07:00 +02:00
REJack
29666de051 docs: delete unused layouts. (#2784) 2020-06-03 18:05:53 +02:00
XhmikosR
f091c5d510 Dropdown.js: return early (#2783) 2020-06-03 18:05:36 +02:00
XhmikosR
695ca94fde Update devDependencies and gems 2020-06-03 16:16:48 +03:00
XhmikosR
e2e4bab687 Sort imports/exports alphabetically 2020-06-03 08:17:10 +03:00
XhmikosR
e023103dcf docs: delete unused layouts. 2020-06-03 08:06:13 +03:00
XhmikosR
312e083fc0 Dropdown.js: remove variable used only once (#2779)
Co-authored-by: REJack <info@rejack.de>
2020-06-02 22:41:03 +02:00
REJack
85d4b6be05 Dropdown.js: rename variable (#2780) 2020-06-02 22:39:17 +02:00
XhmikosR
13c857679b Layout.js: reuse constant (#2778) 2020-06-02 22:38:50 +02:00
XhmikosR
5167252a55 Dropdown.js: rename variable 2020-06-02 18:59:38 +03:00
XhmikosR
ad11109b2f Improve LGTM configuration (#2777)
* Testing LGTM

* Update .lgtm.yml

* Update .lgtm.yml

* Update .lgtm.yml

* Update .lgtm.yml
2020-06-02 16:38:46 +02:00
REJack
2eec6fe614 fix nav-link fadeIn (#2776) 2020-06-02 15:26:19 +02:00
XhmikosR
e848621b32 Remove unneeded IIFEs (#2774) 2020-06-02 15:23:22 +02:00
REJack
bbfcc0639e fix sidebar item icon transition (#2775)
* fix sidebar item icon transition

* rename menu-opens to menu-is-opening
2020-06-02 13:37:16 +02:00
XhmikosR
47e653bfbf Remove the executable permission. (#2768) 2020-06-02 13:25:34 +02:00
XhmikosR
dee12de0f7 Update .gitignore (#2773)
* Update .gitignore

* Update .gitignore
2020-06-02 12:21:48 +02:00
REJack
2bc9d56f62 Merge pull request #2771 from XhmikosR/pages
Minor pages cleanup
2020-06-02 11:29:47 +02:00
XhmikosR
feb42f852e Clean up more plugins' files. (#2767) 2020-06-02 11:29:28 +02:00
REJack
bbb22a16de Merge pull request #2751 from XhmikosR/js-tweaks
JS tweaks
2020-06-02 11:27:47 +02:00
XhmikosR
86d5d9b038 Remove trailing spaces 2020-06-02 12:16:43 +03:00
XhmikosR
d331b5f913 calendar.html: remove unused variable 2020-06-02 12:12:03 +03:00
XhmikosR
be58e635f6 Update lint.yml (#2770) 2020-06-02 10:41:53 +02:00
XhmikosR
04981d1770 Add missing shebang (#2769) 2020-06-02 10:39:15 +02:00
XhmikosR
2622f5ce56 Fix .gitignore comments (#2766)
Comments start with `#`
2020-06-02 10:38:43 +02:00
XhmikosR
ad03a31ffb Remove unused doc assets. (#2765) 2020-06-02 10:38:23 +02:00
XhmikosR
be3631930d Fix regression after 27ff009 2020-06-02 06:30:40 +03:00
XhmikosR
7853dcbd6e Use the document ready shorthand. 2020-06-02 06:30:39 +03:00
XhmikosR
3478837aab Layout.js: Simplify else 2020-06-02 06:30:39 +03:00
XhmikosR
cb85af826e Reuse variable 2020-06-02 06:30:39 +03:00
XhmikosR
e56939983d Remove variables only used once. 2020-06-02 06:30:39 +03:00
XhmikosR
187a01a8ee Return early. 2020-06-02 06:30:39 +03:00
XhmikosR
3528b6c1f8 Remove that workaround 2020-06-02 06:30:38 +03:00
REJack
c8feb99dc2 resolve lgtm alerts (#2764) 2020-06-01 21:49:17 +02:00
REJack
0641a8442d Fix ESLint errors (#2763)
* fix dist/js/demo.js eslint error

* fix Layout.js eslint error

* remove unnecessary semicolon

* remove unexpected token

* add missing radix for parseInt in Layout.js
2020-06-01 21:21:43 +02:00
XhmikosR
023ede7ded Update .bundlewatch.config.json (#2762) 2020-06-01 20:40:13 +02:00
XhmikosR
092028bb49 Run CI for master too. (#2761) 2020-06-01 20:32:29 +02:00
XhmikosR
cfe81189f5 Add bundlewatch (#2754) 2020-06-01 20:27:25 +02:00
XhmikosR
82b6f062d3 Remove docs-clean script (#2760)
Jekyll removes files by default
2020-06-01 20:14:30 +02:00
XhmikosR
0850fd8cb5 Update .eslintignore (#2759) 2020-06-01 20:14:13 +02:00
XhmikosR
7a7bea0be9 Update plugins. (#2756) 2020-06-01 20:13:38 +02:00
XhmikosR
569bddbf4d Rename install script to postinstall (#2757) 2020-06-01 20:11:09 +02:00
XhmikosR
48685382d3 Merge .npmignore files. (#2758) 2020-06-01 20:10:43 +02:00
XhmikosR
c4dae3e269 Add a separate prefix script for splits (#2755) 2020-06-01 20:09:37 +02:00
REJack
66f8bb1bbd Merge pull request #2752 from XhmikosR/plugins
Plugins
2020-06-01 14:09:20 +02:00
XhmikosR
1451820057 Remove glyphicon leftovers. (#2753) 2020-06-01 14:07:35 +02:00
XhmikosR
1af43bd9ea Remove outdated plugin files 2020-06-01 14:47:15 +03:00
XhmikosR
870df4406d Update plugins. 2020-06-01 14:45:27 +03:00
REJack
a26f303c69 Merge pull request #2728 from XhmikosR/eslint
Add ESLint support
2020-06-01 13:43:13 +02:00
XhmikosR
6dbfd55091 build/npm: don't copy dot files. 2020-06-01 14:26:08 +03:00
XhmikosR
27ff009494 Comply to the ESLint rules. 2020-06-01 14:26:08 +03:00
XhmikosR
5ba59f1454 Add ESLint support.
Used the Bootstrap master branch config and adapted it.

Also, remove the `babel-eslint` package since we don't use it.
2020-06-01 14:26:07 +03:00
REJack
ae1c128e04 Merge pull request #2727 from XhmikosR/stylelint
Add stylelint support
2020-06-01 13:24:44 +02:00
XhmikosR
ffcbdb2029 Add lint and compile tests to CI. 2020-06-01 14:09:56 +03:00
XhmikosR
ff66f38cee Convert hsla colors to rgba for consistency 2020-06-01 14:09:56 +03:00
XhmikosR
3d87e3c4cb Adhere to the Stylelint rules.
Also, re-use some of the color variables while at it.
2020-06-01 14:09:56 +03:00
XhmikosR
24bc6165bc Add Stylelint. 2020-06-01 14:09:56 +03:00
XhmikosR
8350264bd2 Update dependencies (#2748)
* @fullcalendar/bootstrap             ^4.4.0  →    ^4.4.2
* @fullcalendar/core                  ^4.4.0  →    ^4.4.2
* @fullcalendar/daygrid               ^4.4.0  →    ^4.4.2
* @fullcalendar/interaction           ^4.4.0  →    ^4.4.2
* @fullcalendar/timegrid              ^4.4.0  →    ^4.4.2
* @ttskch/select2-bootstrap4-theme     ^1.3.2  →   ^1.4.0
* bootstrap4-duallistbox              ^4.0.1  →    ^4.0.2
* datatables.net                    ^1.10.20  →  ^1.10.21
* datatables.net-autofill-bs4         ^2.3.4  →    ^2.3.5
* datatables.net-bs4                ^1.10.20  →  ^1.10.21
* datatables.net-buttons-bs4          ^1.6.1  →    ^1.6.2
* datatables.net-fixedcolumns-bs4     ^3.3.0  →    ^3.3.1
* datatables.net-fixedheader-bs4      ^3.1.6  →    ^3.1.7
* datatables.net-keytable-bs4         ^2.5.1  →    ^2.5.2
* datatables.net-responsive-bs4       ^2.2.3  →    ^2.2.5
* datatables.net-rowgroup-bs4         ^1.1.1  →    ^1.1.2
* datatables.net-rowreorder-bs4       ^1.2.6  →    ^1.2.7
* datatables.net-scroller-bs4         ^2.0.1  →    ^2.0.2
* filterizr                           ^2.2.3  →    ^2.2.4
* flot                                ^4.2.0  →    ^4.2.1
* jquery-validation                  ^1.19.1  →   ^1.19.2
* jszip                               ^3.3.0  →    ^3.4.0
* overlayscrollbars                  ^1.11.0  →   ^1.12.0
* summernote                         ^0.8.16  →   ^0.8.18
* sweetalert2                        ^9.10.8  →   ^9.14.0
2020-06-01 13:05:25 +02:00
XhmikosR
bbfae627a2 Doc gems (#2716)
* docs: specify the gems.

This saves 59 gems. Also, commit Gemfile.lock.

* Clean up docs/_config.yml

* Add jekyll-sitemap.

* Update Jekyll to v4.1.0.
2020-06-01 12:42:14 +02:00
XhmikosR
8bc05ad6b0 Update .editorconfig (#2749) 2020-06-01 10:33:50 +02:00
XhmikosR
7edd752b6b Assorted Markdown tweaks (#2750) 2020-06-01 10:33:08 +02:00
XhmikosR
532707221b Update devDependencies (#2747)
* @babel/core        ^7.10.1  →  ^7.10.2
* @babel/preset-env  ^7.10.1  →  ^7.10.2
* rollup             ^2.11.2  →  ^2.12.0
2020-06-01 10:32:53 +02:00
XhmikosR
b37e2e1aea Update jQuery to v3.5.1. (#2718) 2020-05-31 23:45:30 +02:00
XhmikosR
f1f0ff9776 A few HTML validation fixes (#2745) 2020-05-31 23:26:03 +02:00
XhmikosR
ef0fbe1b50 Specify diplay=fallback for Google Fonts (#2738) 2020-05-31 23:12:40 +02:00
XhmikosR
b480c754a4 Add rel=noopener for external links. (#2737) 2020-05-31 23:10:20 +02:00
XhmikosR
950e6e0dd1 Cleanup Gemfile and add wdm on Windows (#2708) 2020-05-31 23:09:01 +02:00
XhmikosR
7cc5f9b409 Configure LGTM (#2723)
Exclude the plugins folder since it slows down the scan a lot
2020-05-31 14:31:55 +02:00
XhmikosR
13ed4d6aca Use https when possible. (#2733) 2020-05-31 14:28:48 +02:00
XhmikosR
c000e77bde Specify --format breakWith=lf for cleancss (#2741) 2020-05-31 13:33:15 +02:00
XhmikosR
fa20b2def4 docs: fix HTML errors (#2732)
* duplicate `title` tag; jekyll-seo-tag adds the title by default
* escape `<`
* fix duplicate IDs
* fix typo `Documentaion`
* add missing `alt` attributes in direct-chat.md
2020-05-31 13:18:26 +02:00
XhmikosR
10e69015d9 Remove extra newline in footer version info. (#2744) 2020-05-31 13:16:25 +02:00
XhmikosR
44fcb13d47 Fix prefix script to run for all CSS files (#2740) 2020-05-31 13:12:40 +02:00
XhmikosR
d29b8c222c Fix GitHub case. (#2739) 2020-05-31 13:11:55 +02:00
XhmikosR
68d4417aad Move rel attribute first for consistency (#2736) 2020-05-31 13:10:51 +02:00
XhmikosR
2a964189de postcss.config.js: remove unused check (#2735) 2020-05-31 13:10:29 +02:00
XhmikosR
a58c7da1f3 Bump year to 2020 in all HTML files. (#2731) 2020-05-31 13:09:43 +02:00
XhmikosR
71a7ef8831 HTML: specify lang. (#2730) 2020-05-31 13:09:01 +02:00
REJack
b5e0f8441b Merge pull request #2724 from XhmikosR/update-rollup-babel
Update rollup babel
2020-05-31 13:08:25 +02:00
XhmikosR
2eebf1514f Simplify CI (#2721) 2020-05-31 13:07:42 +02:00
XhmikosR
1d1a3fd075 Remove unneeded babel packages. 2020-05-30 16:48:54 +03:00
XhmikosR
ca8f201737 Update to rollup/plugin-babel 2020-05-30 16:48:54 +03:00
XhmikosR
4d2ad43e50 Regenerate package-lock.json to flatten deps. (#2720) 2020-05-30 13:11:58 +02:00
XhmikosR
bb990bddc5 Enforce LF. (#2717)
On Windows with `autocrlf: true`, which is the default, we ended up with modified files.
2020-05-30 13:00:13 +02:00
XhmikosR
e35ab44603 Remove unused devDependencies. (#2711) 2020-05-30 12:34:48 +02:00
XhmikosR
9b79ce4fa3 Update CI config (#2712)
* remove the non-LTS Node.js 13
* specify `CI: true` environment variable
* switch to `npm ci` which checks for package-lock.json and it's intended for CI
2020-05-30 12:32:39 +02:00
XhmikosR
c04f125f46 Update devDependencies. (#2709)
* @babel/cli                       ^7.8.4  →  ^7.10.1
* @babel/core                      ^7.9.0  →  ^7.10.1
* @babel/plugin-external-helpers   ^7.8.3  →  ^7.10.1
* @babel/preset-env                ^7.9.0  →  ^7.10.1
* autoprefixer                     ^9.7.5  →   ^9.8.0
* css-loader                       ^3.4.2  →   ^3.5.3
* eslint                           ^6.8.0  →   ^7.1.0
* eslint-plugin-compat             ^3.5.1  →   ^3.7.0
* node-sass                       ^4.13.1  →  ^4.14.1
* nodemon                          ^2.0.2  →   ^2.0.4
* postcss-cli                      ^7.1.0  →   ^7.1.1
* rollup                           ^2.3.2  →  ^2.11.2
* style-loader                     ^1.1.3  →   ^1.2.1
* terser                          ^4.6.10  →   ^4.7.0
2020-05-30 12:20:37 +02:00
XhmikosR
1877ee7431 Update daterangepicker to v3.1.0 (#2713) 2020-05-30 12:10:52 +02:00
XhmikosR
45eae49936 Fix invalid href value (#2707) 2020-05-30 12:07:53 +02:00
XhmikosR
8a9808575f Compress png and remove unused img (#2706)
* Losslessly compress PNG files

Before: 1,17 MB (1.228.084 bytes)
After:  1,13 MB (1.194.642 bytes)

* Rename image for consistency.

* Delete the unused mestro.png
2020-05-30 12:07:22 +02:00
XhmikosR
671be53be1 Losslessly compress JPG files. (#2705)
Before: 1,84 MB (1.932.709 bytes)
After:  1,78 MB (1.867.039 bytes)
2020-05-30 12:07:10 +02:00
Alberto G. Rodriguez U
d146750a87 Update implementations.md (#2697)
add implementation for Cakephp 4.x

Co-authored-by: REJack <info@rejack.de>
2020-05-30 11:56:09 +02:00
REJack
cad5566d67 add ASP.NET Boilerplate implementation in docs 2020-05-27 22:20:22 +02:00
REJack
c2e77427ba fix layout-boxed sidebar with sidebar-mini 2020-05-27 22:14:18 +02:00
REJack
da47f23145 replace small-box font-size transition with transform 2020-05-27 22:02:21 +02:00
REJack
414d14b2d2 prep pre version 2020-05-27 21:59:29 +02:00
1441 changed files with 294719 additions and 224120 deletions

View File

@@ -1,14 +0,0 @@
{
"presets": [
[
"@babel/preset-env",
{
"loose": true,
"modules": false
}
]
],
"plugins": [
"@babel/plugin-external-helpers"
]
}

13
.babelrc.js Normal file
View File

@@ -0,0 +1,13 @@
module.exports = {
presets: [
[
'@babel/preset-env',
{
loose: true,
bugfixes: true,
modules: false,
exclude: ['transform-typeof-symbol']
}
]
]
};

View File

@@ -1,13 +1,10 @@
# https://github.com/browserslist/browserslist#readme
>= 1%
last 1 major version
>= 0.2%
last 2 major versions
not dead
Chrome >= 45
Firefox >= 38
Edge >= 12
Firefox ESR
Edge >= 16
Explorer >= 10
iOS >= 9
Safari >= 9
Android >= 4.4
Opera >= 30

60
.bundlewatch.config.json Normal file
View File

@@ -0,0 +1,60 @@
{
"files": [
{
"path": "./dist/css/adminlte.css",
"maxSize": "82 kB"
},
{
"path": "./dist/css/adminlte.min.css",
"maxSize": "77.8 kB"
},
{
"path": "./dist/css/alt/adminlte.components.css",
"maxSize": "16 kB"
},
{
"path": "./dist/css/alt/adminlte.components.min.css",
"maxSize": "15.4 kB"
},
{
"path": "./dist/css/alt/adminlte.core.css",
"maxSize": "47 kB"
},
{
"path": "./dist/css/alt/adminlte.core.min.css",
"maxSize": "44 kB"
},
{
"path": "./dist/css/alt/adminlte.extra-components.css",
"maxSize": "4 kB"
},
{
"path": "./dist/css/alt/adminlte.extra-components.min.css",
"maxSize": "4 kB"
},
{
"path": "./dist/css/alt/adminlte.pages.css",
"maxSize": "3 kB"
},
{
"path": "./dist/css/alt/adminlte.pages.min.css",
"maxSize": "3 kB"
},
{
"path": "./dist/css/alt/adminlte.plugins.css",
"maxSize": "17 kB"
},
{
"path": "./dist/css/alt/adminlte.plugins.min.css",
"maxSize": "16.6 kB"
},
{
"path": "./dist/js/adminlte.js",
"maxSize": "15 kB"
},
{
"path": "./dist/js/adminlte.min.js",
"maxSize": "10.5 kB"
}
]
}

View File

@@ -1,9 +1,14 @@
# editorconfig.org
root = true
[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
indent_style = space
indent_size = 2
indent_style = space
insert_final_newline = true
trim_trailing_whitespace = true
[*.md]
trim_trailing_whitespace = false

View File

@@ -1,5 +1,5 @@
**/*.min.js
**/plugins/*
**/dist/*
**/build/npm
ad.js
**/plugins/
/dist/js/adminlte.js
/docs/
/docs_html/

300
.eslintrc
View File

@@ -1,300 +0,0 @@
{
"root": true,
"parser": "babel-eslint",
"env": {
"browser": true,
"es6": true,
"amd": true
},
"extends": "eslint:recommended",
"plugins": [
"compat"
],
"globals": {
"jQuery": true
},
"rules": {
// Possible Errors
"no-await-in-loop": "error",
"no-extra-parens": "error",
"no-prototype-builtins": "error",
"no-template-curly-in-string": "error",
"compat/compat": "error",
"valid-jsdoc": "error",
// Best Practices
"accessor-pairs": "error",
"array-callback-return": "error",
"block-scoped-var": "error",
"class-methods-use-this": "off",
"complexity": "error",
"consistent-return": "error",
"curly": "error",
"default-case": "error",
"dot-location": [
"error",
"property"
],
"dot-notation": "error",
"eqeqeq": "error",
"guard-for-in": "error",
"no-alert": "error",
"no-caller": "error",
"no-div-regex": "error",
"no-else-return": "error",
"no-empty-function": "error",
"no-eq-null": "error",
"no-eval": "error",
"no-extend-native": "error",
"no-extra-bind": "error",
"no-extra-label": "error",
"no-floating-decimal": "error",
"no-implicit-coercion": "error",
"no-implicit-globals": "error",
"no-implied-eval": "error",
"no-invalid-this": "off",
"no-iterator": "error",
"no-labels": "error",
"no-lone-blocks": "error",
"no-loop-func": "error",
"no-magic-numbers": [
"error",
{
"ignore": [
-1,
0,
1
],
"ignoreArrayIndexes": true
}
],
"no-multi-spaces": [
"error",
{
"ignoreEOLComments": true,
"exceptions": {
"AssignmentExpression": true,
"ArrowFunctionExpression": true,
"CallExpression": true,
"VariableDeclarator": true
}
}
],
"no-multi-str": "error",
"no-new": "error",
"no-new-func": "error",
"no-new-wrappers": "error",
"no-octal-escape": "error",
"no-param-reassign": "off",
"no-proto": "error",
"no-restricted-properties": "error",
"no-return-assign": "error",
"no-return-await": "error",
"no-script-url": "error",
"no-self-compare": "error",
"no-sequences": "error",
"no-throw-literal": "error",
"no-unmodified-loop-condition": "error",
"no-unused-expressions": "error",
"no-useless-call": "error",
"no-useless-concat": "error",
"no-useless-return": "error",
"no-void": "error",
"no-warning-comments": "off",
"no-with": "error",
"prefer-promise-reject-errors": "error",
"radix": "error",
"require-await": "error",
"vars-on-top": "error",
"wrap-iife": "error",
"yoda": "error",
// Strict Mode
"strict": "error",
// Variables
"init-declarations": "off",
"no-catch-shadow": "error",
"no-label-var": "error",
"no-restricted-globals": "error",
"no-shadow": "off",
"no-shadow-restricted-names": "error",
"no-undef-init": "error",
"no-undefined": "error",
"no-use-before-define": "off",
// Node.js and CommonJS
"callback-return": "off",
"global-require": "error",
"handle-callback-err": "error",
"no-mixed-requires": "error",
"no-new-require": "error",
"no-path-concat": "error",
"no-process-env": "error",
"no-process-exit": "error",
"no-restricted-modules": "error",
"no-sync": "error",
// Stylistic Issues
"array-bracket-spacing": "error",
"block-spacing": "error",
"brace-style": "error",
"camelcase": "error",
"capitalized-comments": "off",
"comma-dangle": "error",
"comma-spacing": "error",
"comma-style": "error",
"computed-property-spacing": "error",
"consistent-this": "error",
"eol-last": "error",
"func-call-spacing": "error",
"func-name-matching": "error",
"func-names": "off",
"func-style": [
"error",
"declaration"
],
"id-blacklist": "error",
"id-length": "off",
"id-match": "error",
"indent": [
"error",
2,
{
"SwitchCase": 1
}
],
"jsx-quotes": "error",
"key-spacing": "off",
"keyword-spacing": "error",
"linebreak-style": [
"error",
"unix"
],
"line-comment-position": "off",
"lines-around-comment": "off",
"lines-around-directive": "error",
"max-depth": [
"error",
10
],
"max-len": "off",
"max-lines": "off",
"max-nested-callbacks": "error",
"max-params": "off",
"max-statements": "off",
"max-statements-per-line": "error",
"multiline-ternary": "off",
"new-cap": [
"error",
{
"capIsNewExceptionPattern": "$.*"
}
],
"newline-after-var": "off",
"newline-per-chained-call": [
"error",
{
"ignoreChainWithDepth": 5
}
],
"new-parens": "error",
"no-array-constructor": "error",
"no-bitwise": "error",
"no-continue": "off",
"no-inline-comments": "off",
"no-lonely-if": "error",
"no-mixed-operators": "off",
"no-multi-assign": "error",
"no-multiple-empty-lines": "error",
"nonblock-statement-body-position": "error",
"no-negated-condition": "off",
"no-nested-ternary": "error",
"no-new-object": "error",
"no-plusplus": "off",
"no-restricted-syntax": "error",
"no-tabs": "error",
"no-ternary": "off",
"no-trailing-spaces": "error",
"no-underscore-dangle": "off",
"no-unneeded-ternary": "error",
"no-whitespace-before-property": "error",
"object-curly-newline": [
"error",
{
"minProperties": 1
}
],
"object-curly-spacing": [
"error",
"always"
],
"object-property-newline": "error",
"one-var": [
"error",
"never"
],
"one-var-declaration-per-line": "error",
"operator-assignment": "error",
"operator-linebreak": "error",
"padded-blocks": [
"error",
"never"
],
"padding-line-between-statements": "off",
"quote-props": [
"error",
"as-needed"
],
"quotes": [
"error",
"single"
],
"require-jsdoc": "off",
"semi": [
"error",
"never"
],
"semi-spacing": "error",
"sort-keys": "off",
"sort-vars": "error",
"space-before-blocks": "error",
"space-before-function-paren": [
"error",
{
"anonymous": "always",
"named": "never"
}
],
"space-in-parens": "error",
"space-infix-ops": "error",
"space-unary-ops": "error",
"spaced-comment": "error",
"template-tag-spacing": "error",
"unicode-bom": "error",
"wrap-regex": "off",
// ECMAScript 6
"arrow-body-style": [
"error",
"as-needed"
],
"arrow-parens": "error",
"arrow-spacing": "error",
"generator-star-spacing": "error",
"no-confusing-arrow": "error",
"no-duplicate-imports": "error",
"no-restricted-imports": "error",
"no-useless-computed-key": "error",
"no-useless-constructor": "error",
"no-useless-rename": "error",
"no-var": "error",
"object-shorthand": "error",
"prefer-arrow-callback": "error",
"prefer-const": "error",
"prefer-destructuring": "off",
"prefer-numeric-literals": "error",
"prefer-rest-params": "error",
"prefer-spread": "error",
"prefer-template": "error",
"rest-spread-spacing": "error",
"sort-imports": "error",
"symbol-description": "error",
"template-curly-spacing": "error",
"yield-star-spacing": "error"
}
}

64
.eslintrc.json Normal file
View File

@@ -0,0 +1,64 @@
{
"root": true,
"extends": [
"plugin:compat/recommended",
"plugin:import/errors",
"plugin:import/warnings",
"plugin:unicorn/recommended",
"xo/esnext",
"xo/browser"
],
"env": {
"jquery": true
},
"rules": {
"capitalized-comments": "off",
"eqeqeq": "off",
"indent": [
"error",
2,
{
"MemberExpression": "off",
"SwitchCase": 1
}
],
"multiline-ternary": [
"error",
"always-multiline"
],
"new-cap": [
"error",
{
"properties": false
}
],
"no-eq-null": "off",
"no-negated-condition": "off",
"no-console": "error",
"object-curly-spacing": [
"error",
"always"
],
"prefer-template": "error",
"prefer-named-capture-group": "off",
"semi": [
"error",
"never"
],
"unicorn/filename-case": "off",
"unicorn/import-index": "off",
"unicorn/no-fn-reference-in-iterator": "off",
"unicorn/no-for-loop": "off",
"unicorn/no-null": "off",
"unicorn/no-unused-properties": "error",
"unicorn/prefer-dataset": "off",
"unicorn/prefer-includes": "off",
"unicorn/prefer-node-append": "off",
"unicorn/prefer-node-remove": "off",
"unicorn/prefer-number-properties": "off",
"unicorn/prefer-optional-catch-binding": "off",
"unicorn/prefer-query-selector": "off",
"unicorn/prefer-set-has": "off",
"unicorn/prevent-abbreviations": "off"
}
}

2
.gitattributes vendored Normal file
View File

@@ -0,0 +1,2 @@
# Enforce Unix newlines
* text=auto eol=lf

View File

@@ -24,9 +24,9 @@ A clear and concise description of what you expected to happen.
If applicable, add screenshots to help explain your problem.
**Environment (please complete the following information):**
- AdminLTE Version: [e.g. v3.0.0]
- Operating System: [e.g. macOS Catalina]
- Browser (Version): [e.g. Chrome (Latest)]
- AdminLTE Version: [e.g. v3.0.0]
- Operating System: [e.g. macOS Catalina]
- Browser (Version): [e.g. Chrome (Latest)]
**Additional context**
Add any other context about the problem here.

18
.github/dependabot.yml vendored Normal file
View File

@@ -0,0 +1,18 @@
version: 2
updates:
- package-ecosystem: npm
directory: "/"
schedule:
interval: weekly
day: monday
time: "03:00"
open-pull-requests-limit: 10
versioning-strategy: increase
- package-ecosystem: bundler
directory: "/docs/"
schedule:
interval: weekly
day: monday
time: "03:00"
open-pull-requests-limit: 10
versioning-strategy: increase

63
.github/workflows/ci.yml vendored Normal file
View File

@@ -0,0 +1,63 @@
name: CI
on:
push:
branches:
- master
pull_request:
branches:
- "**"
env:
CI: true
jobs:
run:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
node:
- "10.x"
- "12.x"
- "14.x"
os:
- "ubuntu-latest"
- "macos-latest"
- "windows-latest"
steps:
- name: Clone repository
uses: actions/checkout@v2
- name: Use Node.js ${{ matrix.node }}
uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node }}
- name: Get npm cache directory
id: npm-cache
run: |
echo "::set-output name=dir::$(npm config get cache)"
- name: Set up npm cache
uses: actions/cache@v2
with:
path: ${{ steps.npm-cache.outputs.dir }}
key: ${{ runner.os }}-node-v${{ env.node }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }}}
restore-keys: |
${{ runner.OS }}-node-v${{ env.node }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }}
${{ runner.OS }}-node-v${{ env.node }}-
- name: Install npm dependencies
run: npm ci
- name: Build files
run: npm run compile
- name: Run bundlewatch
run: npm run bundlewatch
if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.node, '12')
env:
BUNDLEWATCH_GITHUB_TOKEN: "${{ secrets.BUNDLEWATCH_GITHUB_TOKEN }}"

78
.github/workflows/docs.yml vendored Normal file
View File

@@ -0,0 +1,78 @@
name: Docs
on:
push:
branches:
- master
pull_request:
branches:
- "**"
env:
CI: true
NODE: 12.x
RUBY: 2.6.x
jobs:
run:
runs-on: ubuntu-latest
steps:
- name: Clone repository
uses: actions/checkout@v2
- name: Set up Node.js
uses: actions/setup-node@v1
with:
node-version: "${{ env.NODE }}"
- name: Set up Ruby
uses: actions/setup-ruby@v1
with:
ruby-version: ${{ env.RUBY }}
- name: Disable gem docs
run: 'echo "gem: --no-document" > ~/.gemrc'
- name: Get npm cache directory
id: npm-cache
run: |
echo "::set-output name=dir::$(npm config get cache)"
- name: Set up npm cache
uses: actions/cache@v2
with:
path: ${{ steps.npm-cache.outputs.dir }}
key: ${{ runner.os }}-node-v${{ env.node }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }}}
restore-keys: |
${{ runner.OS }}-node-v${{ env.node }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }}
${{ runner.OS }}-node-v${{ env.node }}-
- name: Set up Ruby cache
uses: actions/cache@v2
with:
path: docs/vendor/bundle
key: ${{ runner.os }}-ruby-v${{ env.RUBY }}-${{ hashFiles('docs/Gemfile') }}-${{ hashFiles('docs/Gemfile.lock') }}
restore-keys: |
${{ runner.os }}-ruby-v${{ env.RUBY }}-${{ hashFiles('docs/Gemfile') }}-${{ hashFiles('docs/Gemfile.lock') }}
${{ runner.os }}-ruby-v${{ env.RUBY }}-
- name: Set up Bundler
run: gem install bundler -v "~> 1.17"
- run: ruby --version
- run: gem --version
- run: bundle --version
- run: java -version
- name: Install npm dependencies
run: npm ci
- name: Install bundler dependencies
run: bundle install --gemfile docs/Gemfile --deployment --jobs=4 --retry=3 --clean
- name: Build docs
run: npm run docs-compile
- name: Run HTML validator
run: npm run docs-lint

41
.github/workflows/lint.yml vendored Normal file
View File

@@ -0,0 +1,41 @@
name: Lint
on:
push:
branches:
- master
pull_request:
branches:
- "**"
env:
CI: true
NODE: 12.x
jobs:
run:
runs-on: ubuntu-latest
steps:
- name: Clone repository
uses: actions/checkout@v2
- name: Set up Node.js
uses: actions/setup-node@v1
with:
node-version: "${{ env.NODE }}"
- name: Set up npm cache
uses: actions/cache@v2
with:
path: ~/.npm
key: ${{ runner.os }}-node-v${{ env.node }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }}}
restore-keys: |
${{ runner.OS }}-node-v${{ env.node }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }}
${{ runner.OS }}-node-v${{ env.node }}-
- name: Install npm dependencies
run: npm ci
- name: Run lint
run: npm run lint

View File

@@ -1,56 +0,0 @@
# This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node
# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions
name: Node.js Install Test
on:
pull_request:
release:
types:
- created
jobs:
install-ubuntu:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [10.x, 12.x, 13.x, 14.x]
steps:
- uses: actions/checkout@v2
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node-version }}
- run: npm install
install-macos:
runs-on: macos-latest
strategy:
matrix:
node-version: [10.x, 12.x, 13.x, 14.x]
steps:
- uses: actions/checkout@v2
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node-version }}
- run: npm install
install-windows:
runs-on: windows-latest
strategy:
matrix:
node-version: [10.x, 12.x, 13.x] #14.x doesn't work properly on GitHub actions
steps:
- uses: actions/checkout@v2
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node-version }}
- run: npm install

61
.gitignore vendored
View File

@@ -1,38 +1,71 @@
// System / Log files
# System / Log files
*.DS_Store
*.log
// Archives
# Archives
*.zip
// Sass Cache
# Sass Cache
.sass-cache
// Project files
# Project files
.idea
nbproject
nbproject/private
.vscode/
.vs/
// Node / Bower
# Node / Bower
node_modules/
bower_components/
// Plugins
/plugins/*/*.md
/plugins/*/*.html
/plugins/*/package.json
# Plugins
/plugins/**/*.html
/plugins/**/*.less
/plugins/**/*.md
/plugins/**/*.scss
/plugins/**/*.ts
/plugins/**/bower.json
/plugins/**/package.json
/plugins/**/webpack.config.js
/plugins/**/demo/
/plugins/**/demos/
/plugins/**/dev/
/plugins/**/example/
/plugins/**/examples/
/plugins/**/less/
/plugins/**/test/
/plugins/**/tests/
/plugins/daterangepicker/website/
/plugins/daterangepicker/drp.png
/plugins/daterangepicker/moment.min.js
/plugins/daterangepicker/package.js
/plugins/daterangepicker/website.css
/plugins/daterangepicker/website.js
/plugins/jquery-ui/AUTHORS.txt
/plugins/jquery-ui/external/jquery/jquery.js
/plugins/inputmask/bindings/
/plugins/flot/plugins/jquery*.js
!/plugins/flot/plugins/jquery.flot.*.js
!/plugins/**/LICENSE.md
!/plugins/**/LICENSE.txt
!/plugins/**/license.md
!/plugins/**/license.txt
!/plugins/**/LICENSE
!/plugins/**/license
!/plugins/**/COPYING
// Docs
Gemfile.lock
docs/_site
docs_html/
# Docs
/docs/_site/
/docs/vendor/
/docs/.bundle/
/docs_html/
.jekyll-cache/
.jekyll-metadata
// ETC
# ETC
TODO
test.html
ad.js
/.cache/

6
.gitpod.yml Normal file
View File

@@ -0,0 +1,6 @@
tasks:
- init: npm install
command: npm run dev
ports:
- port: 3000
onOpen: open-preview

15
.lgtm.yml Normal file
View File

@@ -0,0 +1,15 @@
# https://lgtm.com/help/lgtm/customizing-file-classification
path_classifiers:
plugins:
- plugins/
extraction:
javascript:
# https://lgtm.com/help/lgtm/javascript-extraction#customizing-index
# The `index` step extracts information from the files in the codebase.
index:
# Specify a list of files and folders to exclude from extraction.
exclude:
- bower_components/
- docs/assets/js/plugins/
- plugins/

View File

@@ -1 +1,6 @@
!/docs_html/
/docs/
/docs_html/
/plugins/*
!/plugins/flot-old/
/.github/
/.lgtm.yml

4
.stylelintignore Normal file
View File

@@ -0,0 +1,4 @@
**/*.min.css
**/dist/
**/docs_html/
**/plugins/

16
.stylelintrc Normal file
View File

@@ -0,0 +1,16 @@
{
"extends": [
"stylelint-config-twbs-bootstrap/scss"
],
"rules": {
"declaration-no-important": null,
"order/properties-order": null,
"selector-max-class": null,
"selector-max-combinators": null,
"selector-max-compound-selectors": null,
"selector-max-id": null,
"selector-max-specificity": null,
"selector-max-type": null,
"selector-no-qualifying-type": null
}
}

173
README.md
View File

@@ -1,121 +1,130 @@
Introduction
============
# Introduction
[![npm version](https://img.shields.io/npm/v/admin-lte/latest.svg)](https://www.npmjs.com/package/admin-lte)
[![Packagist](https://img.shields.io/packagist/v/almasaeed2010/adminlte.svg)](https://packagist.org/packages/almasaeed2010/adminlte)
[![CDNJS](https://img.shields.io/cdnjs/v/admin-lte.svg)](https://cdnjs.com/libraries/admin-lte)
[![Gitpod Ready-to-Code](https://img.shields.io/badge/Gitpod-Ready--to--Code-blue?logo=gitpod)](https://gitpod.io/from-referrer/)
**AdminLTE** is a fully responsive administration template. Based on **[Bootstrap 4.4](https://getbootstrap.com)** framework and also the JS/jQuery plugin.
**AdminLTE** is a fully responsive administration template. Based on **[Bootstrap 4.5](https://getbootstrap.com/)** framework and also the JS/jQuery plugin.
Highly customizable and easy to use. Fits many screen resolutions from small mobile devices to large desktops.
**Preview on [AdminLTE.io](https://adminlte.io/themes/v3)**
Looking for Premium Templates?
------------------------------
## Looking for Premium Templates?
AdminLTE.io just opened a new premium templates page. Hand picked to ensure the best quality and the most affordable
prices. Visit https://adminlte.io/premium for more information.
prices. Visit <https://adminlte.io/premium> for more information.
!["AdminLTE Presentation"](https://adminlte.io/AdminLTE3.png "AdminLTE Presentation")
**AdminLTE** has been carefully coded with clear comments in all of its JS, SCSS and HTML files.
SCSS has been used to increase code customizability.
Installation
------------
## Installation
There are multiple ways to install AdminLTE.
#### Download:
### Download & Changelog:
Download from [Github releases](https://github.com/ColorlibHQ/AdminLTE/releases).
Download from GitHub latest release [AdminLTE 3](https://github.com/ColorlibHQ/AdminLTE/latest).
Visit the [releases](https://github.com/ColorlibHQ/AdminLTE/releases) page to view the changelog.
Legacy Releases are [AdminLTE 2](https://github.com/ColorlibHQ/AdminLTE/releases/tag/v2.4.18) / [AdminLTE 1](https://github.com/ColorlibHQ/AdminLTE/releases/tag/1.3.1).
#### Using The Command Line:
### Using The Command Line:
_**Important Note**: To install it via NPM/Yarn, you need at least Node.js 10 or higher._
_**Important Note**: To install it via npm/Yarn, you need at least Node.js 10 or higher._
__Via NPM__
```bash
npm install admin-lte@^3.0 --save
```
- **Via npm**
__Via Yarn__
```bash
yarn add admin-lte@^3.0
```
```bash
npm install admin-lte@^3.0 --save
```
__Via Composer__
```bash
composer require "almasaeed2010/adminlte=~3.0"
```
- **Via Yarn**
__Via Git__
- Clone to your machine
```
git clone https://github.com/ColorlibHQ/AdminLTE.git
```
```bash
yarn add admin-lte@^3.0
```
Documentation
-------------
Visit the [online documentation](https://adminlte.io/docs/3.0/) for the most
- **Via Composer**
```bash
composer require "almasaeed2010/adminlte=~3.0"
```
- **Via Git**
Clone to your machine
```bash
git clone https://github.com/ColorlibHQ/AdminLTE.git
```
## Documentation
Visit the [online documentation](https://adminlte.io/docs/3.1/) for the most
updated guide. Information will be added on a weekly basis.
Browser Support
---------------
- IE 10+
- Firefox (latest)
- Chrome (latest)
- Safari (latest)
- Opera (latest)
- Microsoft Edge (latest)
## Browsers support
Contribution
------------
Contribution are always **welcome and recommended**! Here is how:
| [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/edge/edge_48x48.png" alt="IE / Edge" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)<br/>IE / Edge | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/firefox/firefox_48x48.png" alt="Firefox" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)<br/>Firefox | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/chrome/chrome_48x48.png" alt="Chrome" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)<br/>Chrome | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/safari/safari_48x48.png" alt="Safari" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)<br/>Safari | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/safari-ios/safari-ios_48x48.png" alt="iOS Safari" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)<br/>iOS Safari | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/samsung-internet/samsung-internet_48x48.png" alt="Samsung" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)<br/>Samsung | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/opera/opera_48x48.png" alt="Opera" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)<br/>Opera | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/vivaldi/vivaldi_48x48.png" alt="Vivaldi" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)<br/>Vivaldi | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/electron/electron_48x48.png" alt="Electron" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)<br/>Electron |
| --------- | --------- | --------- | --------- | --------- | --------- | --------- | --------- | --------- |
| IE10, IE11, Edge| last 2 versions| last 2 versions| last 2 versions| last 2 versions| last 2 versions| last 2 versions| last 2 versions| last 2 versions
- Fork the repository ([here is the guide](https://help.github.com/articles/fork-a-repo/)).
- Clone to your machine ```git clone https://github.com/YOUR_USERNAME/AdminLTE.git```
- Create a new branch
- Make your changes
- Create a pull request
## How to Contribute
#### Compile dist files
To compile the dist files you need nodejs/npm, clone/download the repo then:
Contributions are always **welcome and recommended**! Here is how for beginner's: [Get started with open source click here](https://youtu.be/GbqSvJs-6W4)
1. Contribution Requirements :
* When you contribute, you agree to give a non-exclusive license to AdminLTE.io to use that contribution in any context as we (AdminLTE.io) see appropriate.
* If you use content provided by another party, it must be appropriately licensed using an [open source](https://opensource.org/licenses) license.
* Contributions are only accepted through GitHub pull requests.
* Finally, contributed code must work in all supported browsers (see above for browser support).
2. Installation :
* Fork the repository ([here is the guide](https://help.github.com/articles/fork-a-repo/)).
* Clone to your machine
```bash
git clone https://github.com/YOUR_USERNAME/AdminLTE.git
```
* Create a new branch
3. Compile dist files (Development) :
* To compile the dist files you need Node.js 10 or higher/npm (node package manager)
* Delete ./package-lock.json file
* `npm install` (install npm deps)
* `npm run dev` (developer mode, autocompile with browsersync support for live demo)
* Make your changes only in ./buid Folder OR package.json OR ./dist/js/demo.js OR in any html files which nessary to contribute
* Do not changes in ./dist/css/ AND ./dist/js/ Because its compiled files
* `npm run production` (compile css/js files and test every pages are perfectly working fine, before creating pull request)
4. Create a pull request
### Online one-click setup for contributing
You can use Gitpod(an online IDE which is free for Open Source) for working on issues or making Prs. With a single click it will launch a workspace and automatically:
- clone the `AdminLTE` repo.
- install the dependencies.
- run `yarn dev` to start the server.
[![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/)
### Compile dist files
To compile the dist files you need Node.js/npm, clone/download the repo then:
1. `npm install` (install npm deps)
2. _Optional:_ `npm run dev` (developer mode, autocompile with browsersync support for live demo)
3. `npm run production` (compile css/js files)
#### Contribution Requirements:
- When you contribute, you agree to give a non-exclusive license to AdminLTE.io to use that contribution in any context as we (AdminLTE.io) see appropriate.
- If you use content provided by another party, it must be appropriately licensed using an [open source](http://opensource.org/licenses) license.
- Contributions are only accepted through Github pull requests.
- Finally, contributed code must work in all supported browsers (see above for browser support).
## License
License
-------
AdminLTE is an open source project by [AdminLTE.io](https://adminlte.io) that is licensed under [MIT](http://opensource.org/licenses/MIT). AdminLTE.io
reserves the right to change the license of future releases.
AdminLTE is an open source project by [AdminLTE.io](https://adminlte.io) that is licensed under [MIT](https://opensource.org/licenses/MIT).
AdminLTE.io reserves the right to change the license of future releases.
Latest Release
---------------
- [AdminLTE 3](https://github.com/ColorlibHQ/AdminLTE/releases/latest)
## Image Credits
Legacy Releases
---------------
- [AdminLTE 2](https://github.com/ColorlibHQ/AdminLTE/releases/tag/v2.4.18)
- [AdminLTE 1](https://github.com/ColorlibHQ/AdminLTE/releases/tag/1.3.1)
Change log
----------
Visit the [releases](https://github.com/ColorlibHQ/AdminLTE/releases) page to view the changelog
Image Credits
-------------
[Pixeden](http://www.pixeden.com/psd-web-elements/flat-responsive-showcase-psd)
[Graphicsfuel](http://www.graphicsfuel.com/2013/02/13-high-resolution-blur-backgrounds/)
[Pickaface](http://pickaface.net/)
[Unsplash](https://unsplash.com/)
[Uifaces](http://uifaces.com/)
- [Pixeden](http://www.pixeden.com/psd-web-elements/flat-responsive-showcase-psd)
- [Graphicsfuel](https://www.graphicsfuel.com/2013/02/13-high-resolution-blur-backgrounds/)
- [Pickaface](https://pickaface.net/)
- [Unsplash](https://unsplash.com/)
- [Uifaces](http://uifaces.com/)

View File

@@ -0,0 +1,14 @@
{
"env": {
"browser": false,
"node": true
},
"parserOptions": {
"sourceType": "script"
},
"extends": "../../.eslintrc.json",
"rules": {
"no-console": "off",
"strict": "error"
}
}

View File

@@ -1,7 +1,7 @@
'use strict'
module.exports = (ctx) => ({
map: ctx.file.dirname.includes('examples') ? false : {
module.exports = () => ({
map: {
inline: false,
annotation: true,
sourcesContent: true

View File

@@ -1,29 +1,32 @@
import babel from 'rollup-plugin-babel'
'use strict'
const pkg = require('../../package')
const { babel } = require('@rollup/plugin-babel')
const pkg = require('../../package')
const year = new Date().getFullYear()
const globals = {
jquery: 'jQuery'
}
export default {
input : 'build/js/AdminLTE.js',
output : {
banner: `/*!
const banner = `/*!
* AdminLTE v${pkg.version} (${pkg.homepage})
* Copyright 2014-${year} ${pkg.author}
* Licensed under MIT (https://github.com/ColorlibHQ/AdminLTE/blob/master/LICENSE)
*/`,
file : 'dist/js/adminlte.js',
*/`
module.exports = {
input: 'build/js/AdminLTE.js',
output: {
banner,
file: 'dist/js/adminlte.js',
format: 'umd',
globals,
name : 'adminlte'
globals: {
jquery: 'jQuery'
},
name: 'adminlte'
},
external: ['jquery'],
plugins: [
babel({
exclude: 'node_modules/**',
externalHelpers: true
// Include the helpers in the bundle, at most one copy of each
babelHelpers: 'bundled'
})
]
}

View File

@@ -1,44 +0,0 @@
{
"esnext": true,
"verbose": true,
"disallowEmptyBlocks": true,
"disallowKeywords": ["with"],
"disallowMixedSpacesAndTabs": true,
"disallowMultipleLineStrings": true,
"disallowMultipleVarDecl": true,
"disallowQuotedKeysInObjects": "allButReserved",
"disallowSpaceAfterPrefixUnaryOperators": ["++", "--", "+", "-", "~", "!"],
"disallowSpaceBeforeBinaryOperators": [","],
"disallowSpaceBeforePostfixUnaryOperators": ["++", "--"],
"disallowSpacesInFunctionDeclaration": { "beforeOpeningRoundBrace": true },
"disallowSpacesInNamedFunctionExpression": { "beforeOpeningRoundBrace": true },
"disallowSpacesInsideArrayBrackets": true,
"disallowSpacesInsideParentheses": true,
"disallowTrailingComma": true,
"disallowTrailingWhitespace": true,
"requireCamelCaseOrUpperCaseIdentifiers": true,
"requireCapitalizedConstructors": true,
"requireCommaBeforeLineBreak": true,
"requireDollarBeforejQueryAssignment": true,
"requireDotNotation": true,
"requireLineFeedAtFileEnd": true,
"requirePaddingNewLinesAfterUseStrict": true,
"requirePaddingNewLinesBeforeExport": true,
"requireSpaceAfterBinaryOperators": ["+", "-", "/", "*", "=", "==", "===", "!=", "!==", ">", "<", ">=", "<="],
"requireSpaceAfterKeywords": ["if", "else", "for", "while", "do", "switch", "return", "try", "catch"],
"requireSpaceAfterLineComment": true,
"requireSpaceBeforeBinaryOperators": ["+", "-", "/", "*", "=", "==", "===", "!=", "!==", ">", "<", ">=", "<="],
"requireSpaceBetweenArguments": true,
"requireSpacesInAnonymousFunctionExpression": { "beforeOpeningCurlyBrace": true, "beforeOpeningRoundBrace": true, "allExcept": ["shorthand"] },
"requireSpacesInConditionalExpression": true,
"requireSpacesInForStatement": true,
"requireSpacesInFunctionDeclaration": { "beforeOpeningCurlyBrace": true },
"requireSpacesInFunctionExpression": { "beforeOpeningCurlyBrace": true },
"requireSpacesInNamedFunctionExpression": { "beforeOpeningCurlyBrace": true },
"requireSpacesInsideObjectBrackets": "allButNested",
"validateAlignedFunctionParameters": true,
"validateIndentation": 2,
"validateLineBreaks": "LF",
"validateNewlineAfterArrayElements": true,
"validateQuoteMarks": "'"
}

View File

@@ -1,23 +1,31 @@
import CardRefresh from './CardRefresh'
import CardWidget from './CardWidget'
import ControlSidebar from './ControlSidebar'
import DirectChat from './DirectChat'
import Dropdown from './Dropdown'
import ExpandableTable from './ExpandableTable'
import Fullscreen from './Fullscreen'
import IFrame from './IFrame'
import Layout from './Layout'
import PushMenu from './PushMenu'
import Treeview from './Treeview'
import DirectChat from './DirectChat'
import TodoList from './TodoList'
import CardWidget from './CardWidget'
import CardRefresh from './CardRefresh'
import Dropdown from './Dropdown'
import SidebarSearch from './SidebarSearch'
import Toasts from './Toasts'
import TodoList from './TodoList'
import Treeview from './Treeview'
export {
CardRefresh,
CardWidget,
ControlSidebar,
DirectChat,
Dropdown,
ExpandableTable,
Fullscreen,
IFrame,
Layout,
PushMenu,
Treeview,
DirectChat,
SidebarSearch,
Toasts,
TodoList,
CardWidget,
CardRefresh,
Dropdown,
Toasts
Treeview
}

View File

@@ -5,164 +5,150 @@
* --------------------------------------------
*/
const CardRefresh = (($) => {
/**
* Constants
* ====================================================
*/
import $ from 'jquery'
const NAME = 'CardRefresh'
const DATA_KEY = 'lte.cardrefresh'
const EVENT_KEY = `.${DATA_KEY}`
const JQUERY_NO_CONFLICT = $.fn[NAME]
/**
* Constants
* ====================================================
*/
const Event = {
LOADED: `loaded${EVENT_KEY}`,
OVERLAY_ADDED: `overlay.added${EVENT_KEY}`,
OVERLAY_REMOVED: `overlay.removed${EVENT_KEY}`,
const NAME = 'CardRefresh'
const DATA_KEY = 'lte.cardrefresh'
const EVENT_KEY = `.${DATA_KEY}`
const JQUERY_NO_CONFLICT = $.fn[NAME]
const EVENT_LOADED = `loaded${EVENT_KEY}`
const EVENT_OVERLAY_ADDED = `overlay.added${EVENT_KEY}`
const EVENT_OVERLAY_REMOVED = `overlay.removed${EVENT_KEY}`
const CLASS_NAME_CARD = 'card'
const SELECTOR_CARD = `.${CLASS_NAME_CARD}`
const SELECTOR_DATA_REFRESH = '[data-card-widget="card-refresh"]'
const Default = {
source: '',
sourceSelector: '',
params: {},
trigger: SELECTOR_DATA_REFRESH,
content: '.card-body',
loadInContent: true,
loadOnInit: true,
responseType: '',
overlayTemplate: '<div class="overlay"><i class="fas fa-2x fa-sync-alt fa-spin"></i></div>',
onLoadStart() {
},
onLoadDone(response) {
return response
}
}
const ClassName = {
CARD: 'card',
}
class CardRefresh {
constructor(element, settings) {
this._element = element
this._parent = element.parents(SELECTOR_CARD).first()
this._settings = $.extend({}, Default, settings)
this._overlay = $(this._settings.overlayTemplate)
const Selector = {
CARD: `.${ClassName.CARD}`,
DATA_REFRESH: '[data-card-widget="card-refresh"]',
}
if (element.hasClass(CLASS_NAME_CARD)) {
this._parent = element
}
const Default = {
source: '',
sourceSelector: '',
params: {},
trigger: Selector.DATA_REFRESH,
content: '.card-body',
loadInContent: true,
loadOnInit: true,
responseType: '',
overlayTemplate: '<div class="overlay"><i class="fas fa-2x fa-sync-alt fa-spin"></i></div>',
onLoadStart: function () {
},
onLoadDone: function (response) {
return response;
if (this._settings.source === '') {
throw new Error('Source url was not defined. Please specify a url in your CardRefresh source option.')
}
}
class CardRefresh {
constructor(element, settings) {
this._element = element
this._parent = element.parents(Selector.CARD).first()
this._settings = $.extend({}, Default, settings)
this._overlay = $(this._settings.overlayTemplate)
load() {
this._addOverlay()
this._settings.onLoadStart.call($(this))
if (element.hasClass(ClassName.CARD)) {
this._parent = element
}
if (this._settings.source === '') {
throw new Error('Source url was not defined. Please specify a url in your CardRefresh source option.');
}
}
load() {
this._addOverlay()
this._settings.onLoadStart.call($(this))
$.get(this._settings.source, this._settings.params, function (response) {
if (this._settings.loadInContent) {
if (this._settings.sourceSelector != '') {
response = $(response).find(this._settings.sourceSelector).html()
}
this._parent.find(this._settings.content).html(response)
$.get(this._settings.source, this._settings.params, response => {
if (this._settings.loadInContent) {
if (this._settings.sourceSelector !== '') {
response = $(response).find(this._settings.sourceSelector).html()
}
this._settings.onLoadDone.call($(this), response)
this._removeOverlay();
}.bind(this), this._settings.responseType !== '' && this._settings.responseType)
const loadedEvent = $.Event(Event.LOADED)
$(this._element).trigger(loadedEvent)
}
_addOverlay() {
this._parent.append(this._overlay)
const overlayAddedEvent = $.Event(Event.OVERLAY_ADDED)
$(this._element).trigger(overlayAddedEvent)
};
_removeOverlay() {
this._parent.find(this._overlay).remove()
const overlayRemovedEvent = $.Event(Event.OVERLAY_REMOVED)
$(this._element).trigger(overlayRemovedEvent)
};
// Private
_init(card) {
$(this).find(this._settings.trigger).on('click', () => {
this.load()
})
if (this._settings.loadOnInit) {
this.load()
}
}
// Static
static _jQueryInterface(config) {
let data = $(this).data(DATA_KEY)
const _options = $.extend({}, Default, $(this).data())
if (!data) {
data = new CardRefresh($(this), _options)
$(this).data(DATA_KEY, typeof config === 'string' ? data: config)
this._parent.find(this._settings.content).html(response)
}
if (typeof config === 'string' && config.match(/load/)) {
data[config]()
} else {
data._init($(this))
}
}
this._settings.onLoadDone.call($(this), response)
this._removeOverlay()
}, this._settings.responseType !== '' && this._settings.responseType)
$(this._element).trigger($.Event(EVENT_LOADED))
}
/**
* Data API
* ====================================================
*/
_addOverlay() {
this._parent.append(this._overlay)
$(this._element).trigger($.Event(EVENT_OVERLAY_ADDED))
}
$(document).on('click', Selector.DATA_REFRESH, function (event) {
if (event) {
event.preventDefault()
}
_removeOverlay() {
this._parent.find(this._overlay).remove()
$(this._element).trigger($.Event(EVENT_OVERLAY_REMOVED))
}
CardRefresh._jQueryInterface.call($(this), 'load')
})
// Private
$(document).ready(function () {
$(Selector.DATA_REFRESH).each(function() {
CardRefresh._jQueryInterface.call($(this))
_init() {
$(this).find(this._settings.trigger).on('click', () => {
this.load()
})
})
/**
* jQuery API
* ====================================================
*/
$.fn[NAME] = CardRefresh._jQueryInterface
$.fn[NAME].Constructor = CardRefresh
$.fn[NAME].noConflict = function () {
$.fn[NAME] = JQUERY_NO_CONFLICT
return CardRefresh._jQueryInterface
if (this._settings.loadOnInit) {
this.load()
}
}
return CardRefresh
})(jQuery)
// Static
static _jQueryInterface(config) {
let data = $(this).data(DATA_KEY)
const _options = $.extend({}, Default, $(this).data())
if (!data) {
data = new CardRefresh($(this), _options)
$(this).data(DATA_KEY, typeof config === 'string' ? data : config)
}
if (typeof config === 'string' && config.match(/load/)) {
data[config]()
} else {
data._init($(this))
}
}
}
/**
* Data API
* ====================================================
*/
$(document).on('click', SELECTOR_DATA_REFRESH, function (event) {
if (event) {
event.preventDefault()
}
CardRefresh._jQueryInterface.call($(this), 'load')
})
$(() => {
$(SELECTOR_DATA_REFRESH).each(function () {
CardRefresh._jQueryInterface.call($(this))
})
})
/**
* jQuery API
* ====================================================
*/
$.fn[NAME] = CardRefresh._jQueryInterface
$.fn[NAME].Constructor = CardRefresh
$.fn[NAME].noConflict = function () {
$.fn[NAME] = JQUERY_NO_CONFLICT
return CardRefresh._jQueryInterface
}
export default CardRefresh

View File

@@ -5,249 +5,234 @@
* --------------------------------------------
*/
const CardWidget = (($) => {
/**
* Constants
* ====================================================
*/
import $ from 'jquery'
const NAME = 'CardWidget'
const DATA_KEY = 'lte.cardwidget'
const EVENT_KEY = `.${DATA_KEY}`
const JQUERY_NO_CONFLICT = $.fn[NAME]
/**
* Constants
* ====================================================
*/
const Event = {
EXPANDED: `expanded${EVENT_KEY}`,
COLLAPSED: `collapsed${EVENT_KEY}`,
MAXIMIZED: `maximized${EVENT_KEY}`,
MINIMIZED: `minimized${EVENT_KEY}`,
REMOVED: `removed${EVENT_KEY}`
const NAME = 'CardWidget'
const DATA_KEY = 'lte.cardwidget'
const EVENT_KEY = `.${DATA_KEY}`
const JQUERY_NO_CONFLICT = $.fn[NAME]
const EVENT_EXPANDED = `expanded${EVENT_KEY}`
const EVENT_COLLAPSED = `collapsed${EVENT_KEY}`
const EVENT_MAXIMIZED = `maximized${EVENT_KEY}`
const EVENT_MINIMIZED = `minimized${EVENT_KEY}`
const EVENT_REMOVED = `removed${EVENT_KEY}`
const CLASS_NAME_CARD = 'card'
const CLASS_NAME_COLLAPSED = 'collapsed-card'
const CLASS_NAME_COLLAPSING = 'collapsing-card'
const CLASS_NAME_EXPANDING = 'expanding-card'
const CLASS_NAME_WAS_COLLAPSED = 'was-collapsed'
const CLASS_NAME_MAXIMIZED = 'maximized-card'
const SELECTOR_DATA_REMOVE = '[data-card-widget="remove"]'
const SELECTOR_DATA_COLLAPSE = '[data-card-widget="collapse"]'
const SELECTOR_DATA_MAXIMIZE = '[data-card-widget="maximize"]'
const SELECTOR_CARD = `.${CLASS_NAME_CARD}`
const SELECTOR_CARD_HEADER = '.card-header'
const SELECTOR_CARD_BODY = '.card-body'
const SELECTOR_CARD_FOOTER = '.card-footer'
const Default = {
animationSpeed: 'normal',
collapseTrigger: SELECTOR_DATA_COLLAPSE,
removeTrigger: SELECTOR_DATA_REMOVE,
maximizeTrigger: SELECTOR_DATA_MAXIMIZE,
collapseIcon: 'fa-minus',
expandIcon: 'fa-plus',
maximizeIcon: 'fa-expand',
minimizeIcon: 'fa-compress'
}
class CardWidget {
constructor(element, settings) {
this._element = element
this._parent = element.parents(SELECTOR_CARD).first()
if (element.hasClass(CLASS_NAME_CARD)) {
this._parent = element
}
this._settings = $.extend({}, Default, settings)
}
const ClassName = {
CARD: 'card',
COLLAPSED: 'collapsed-card',
COLLAPSING: 'collapsing-card',
EXPANDING: 'expanding-card',
WAS_COLLAPSED: 'was-collapsed',
MAXIMIZED: 'maximized-card',
}
const Selector = {
DATA_REMOVE: '[data-card-widget="remove"]',
DATA_COLLAPSE: '[data-card-widget="collapse"]',
DATA_MAXIMIZE: '[data-card-widget="maximize"]',
CARD: `.${ClassName.CARD}`,
CARD_HEADER: '.card-header',
CARD_BODY: '.card-body',
CARD_FOOTER: '.card-footer',
COLLAPSED: `.${ClassName.COLLAPSED}`,
}
const Default = {
animationSpeed: 'normal',
collapseTrigger: Selector.DATA_COLLAPSE,
removeTrigger: Selector.DATA_REMOVE,
maximizeTrigger: Selector.DATA_MAXIMIZE,
collapseIcon: 'fa-minus',
expandIcon: 'fa-plus',
maximizeIcon: 'fa-expand',
minimizeIcon: 'fa-compress',
}
class CardWidget {
constructor(element, settings) {
this._element = element
this._parent = element.parents(Selector.CARD).first()
if (element.hasClass(ClassName.CARD)) {
this._parent = element
}
this._settings = $.extend({}, Default, settings)
}
collapse() {
this._parent.addClass(ClassName.COLLAPSING).children(`${Selector.CARD_BODY}, ${Selector.CARD_FOOTER}`)
.slideUp(this._settings.animationSpeed, () => {
this._parent.addClass(ClassName.COLLAPSED).removeClass(ClassName.COLLAPSING)
})
this._parent.find('> ' + Selector.CARD_HEADER + ' ' + this._settings.collapseTrigger + ' .' + this._settings.collapseIcon)
.addClass(this._settings.expandIcon)
.removeClass(this._settings.collapseIcon)
const collapsed = $.Event(Event.COLLAPSED)
this._element.trigger(collapsed, this._parent)
}
expand() {
this._parent.addClass(ClassName.EXPANDING).children(`${Selector.CARD_BODY}, ${Selector.CARD_FOOTER}`)
.slideDown(this._settings.animationSpeed, () => {
this._parent.removeClass(ClassName.COLLAPSED).removeClass(ClassName.EXPANDING)
})
this._parent.find('> ' + Selector.CARD_HEADER + ' ' + this._settings.collapseTrigger + ' .' + this._settings.expandIcon)
.addClass(this._settings.collapseIcon)
.removeClass(this._settings.expandIcon)
const expanded = $.Event(Event.EXPANDED)
this._element.trigger(expanded, this._parent)
}
remove() {
this._parent.slideUp()
const removed = $.Event(Event.REMOVED)
this._element.trigger(removed, this._parent)
}
toggle() {
if (this._parent.hasClass(ClassName.COLLAPSED)) {
this.expand()
return
}
this.collapse()
}
maximize() {
this._parent.find(this._settings.maximizeTrigger + ' .' + this._settings.maximizeIcon)
.addClass(this._settings.minimizeIcon)
.removeClass(this._settings.maximizeIcon)
this._parent.css({
'height': this._parent.height(),
'width': this._parent.width(),
'transition': 'all .15s'
}).delay(150).queue(function(){
$(this).addClass(ClassName.MAXIMIZED)
$('html').addClass(ClassName.MAXIMIZED)
if ($(this).hasClass(ClassName.COLLAPSED)) {
$(this).addClass(ClassName.WAS_COLLAPSED)
}
$(this).dequeue()
collapse() {
this._parent.addClass(CLASS_NAME_COLLAPSING).children(`${SELECTOR_CARD_BODY}, ${SELECTOR_CARD_FOOTER}`)
.slideUp(this._settings.animationSpeed, () => {
this._parent.addClass(CLASS_NAME_COLLAPSED).removeClass(CLASS_NAME_COLLAPSING)
})
const maximized = $.Event(Event.MAXIMIZED)
this._parent.find(`> ${SELECTOR_CARD_HEADER} ${this._settings.collapseTrigger} .${this._settings.collapseIcon}`)
.addClass(this._settings.expandIcon)
.removeClass(this._settings.collapseIcon)
this._element.trigger(maximized, this._parent)
}
minimize() {
this._parent.find(this._settings.maximizeTrigger + ' .' + this._settings.minimizeIcon)
.addClass(this._settings.maximizeIcon)
.removeClass(this._settings.minimizeIcon)
this._parent.css('cssText', 'height:' + this._parent[0].style.height + ' !important;' +
'width:' + this._parent[0].style.width + ' !important; transition: all .15s;'
).delay(10).queue(function(){
$(this).removeClass(ClassName.MAXIMIZED)
$('html').removeClass(ClassName.MAXIMIZED)
$(this).css({
'height': 'inherit',
'width': 'inherit'
})
if ($(this).hasClass(ClassName.WAS_COLLAPSED)) {
$(this).removeClass(ClassName.WAS_COLLAPSED)
}
$(this).dequeue()
})
const MINIMIZED = $.Event(Event.MINIMIZED)
this._element.trigger(MINIMIZED, this._parent)
}
toggleMaximize() {
if (this._parent.hasClass(ClassName.MAXIMIZED)) {
this.minimize()
return
}
this.maximize()
}
// Private
_init(card) {
this._parent = card
$(this).find(this._settings.collapseTrigger).click(() => {
this.toggle()
})
$(this).find(this._settings.maximizeTrigger).click(() => {
this.toggleMaximize()
})
$(this).find(this._settings.removeTrigger).click(() => {
this.remove()
})
}
// Static
static _jQueryInterface(config) {
let data = $(this).data(DATA_KEY)
const _options = $.extend({}, Default, $(this).data())
if (!data) {
data = new CardWidget($(this), _options)
$(this).data(DATA_KEY, typeof config === 'string' ? data: config)
}
if (typeof config === 'string' && config.match(/collapse|expand|remove|toggle|maximize|minimize|toggleMaximize/)) {
data[config]()
} else if (typeof config === 'object') {
data._init($(this))
}
}
this._element.trigger($.Event(EVENT_COLLAPSED), this._parent)
}
/**
* Data API
* ====================================================
*/
expand() {
this._parent.addClass(CLASS_NAME_EXPANDING).children(`${SELECTOR_CARD_BODY}, ${SELECTOR_CARD_FOOTER}`)
.slideDown(this._settings.animationSpeed, () => {
this._parent.removeClass(CLASS_NAME_COLLAPSED).removeClass(CLASS_NAME_EXPANDING)
})
$(document).on('click', Selector.DATA_COLLAPSE, function (event) {
if (event) {
event.preventDefault()
}
this._parent.find(`> ${SELECTOR_CARD_HEADER} ${this._settings.collapseTrigger} .${this._settings.expandIcon}`)
.addClass(this._settings.collapseIcon)
.removeClass(this._settings.expandIcon)
CardWidget._jQueryInterface.call($(this), 'toggle')
})
$(document).on('click', Selector.DATA_REMOVE, function (event) {
if (event) {
event.preventDefault()
}
CardWidget._jQueryInterface.call($(this), 'remove')
})
$(document).on('click', Selector.DATA_MAXIMIZE, function (event) {
if (event) {
event.preventDefault()
}
CardWidget._jQueryInterface.call($(this), 'toggleMaximize')
})
/**
* jQuery API
* ====================================================
*/
$.fn[NAME] = CardWidget._jQueryInterface
$.fn[NAME].Constructor = CardWidget
$.fn[NAME].noConflict = function () {
$.fn[NAME] = JQUERY_NO_CONFLICT
return CardWidget._jQueryInterface
this._element.trigger($.Event(EVENT_EXPANDED), this._parent)
}
return CardWidget
})(jQuery)
remove() {
this._parent.slideUp()
this._element.trigger($.Event(EVENT_REMOVED), this._parent)
}
toggle() {
if (this._parent.hasClass(CLASS_NAME_COLLAPSED)) {
this.expand()
return
}
this.collapse()
}
maximize() {
this._parent.find(`${this._settings.maximizeTrigger} .${this._settings.maximizeIcon}`)
.addClass(this._settings.minimizeIcon)
.removeClass(this._settings.maximizeIcon)
this._parent.css({
height: this._parent.height(),
width: this._parent.width(),
transition: 'all .15s'
}).delay(150).queue(function () {
const $element = $(this)
$element.addClass(CLASS_NAME_MAXIMIZED)
$('html').addClass(CLASS_NAME_MAXIMIZED)
if ($element.hasClass(CLASS_NAME_COLLAPSED)) {
$element.addClass(CLASS_NAME_WAS_COLLAPSED)
}
$element.dequeue()
})
this._element.trigger($.Event(EVENT_MAXIMIZED), this._parent)
}
minimize() {
this._parent.find(`${this._settings.maximizeTrigger} .${this._settings.minimizeIcon}`)
.addClass(this._settings.maximizeIcon)
.removeClass(this._settings.minimizeIcon)
this._parent.css('cssText', `height: ${this._parent[0].style.height} !important; width: ${this._parent[0].style.width} !important; transition: all .15s;`
).delay(10).queue(function () {
const $element = $(this)
$element.removeClass(CLASS_NAME_MAXIMIZED)
$('html').removeClass(CLASS_NAME_MAXIMIZED)
$element.css({
height: 'inherit',
width: 'inherit'
})
if ($element.hasClass(CLASS_NAME_WAS_COLLAPSED)) {
$element.removeClass(CLASS_NAME_WAS_COLLAPSED)
}
$element.dequeue()
})
this._element.trigger($.Event(EVENT_MINIMIZED), this._parent)
}
toggleMaximize() {
if (this._parent.hasClass(CLASS_NAME_MAXIMIZED)) {
this.minimize()
return
}
this.maximize()
}
// Private
_init(card) {
this._parent = card
$(this).find(this._settings.collapseTrigger).click(() => {
this.toggle()
})
$(this).find(this._settings.maximizeTrigger).click(() => {
this.toggleMaximize()
})
$(this).find(this._settings.removeTrigger).click(() => {
this.remove()
})
}
// Static
static _jQueryInterface(config) {
let data = $(this).data(DATA_KEY)
const _options = $.extend({}, Default, $(this).data())
if (!data) {
data = new CardWidget($(this), _options)
$(this).data(DATA_KEY, typeof config === 'string' ? data : config)
}
if (typeof config === 'string' && config.match(/collapse|expand|remove|toggle|maximize|minimize|toggleMaximize/)) {
data[config]()
} else if (typeof config === 'object') {
data._init($(this))
}
}
}
/**
* Data API
* ====================================================
*/
$(document).on('click', SELECTOR_DATA_COLLAPSE, function (event) {
if (event) {
event.preventDefault()
}
CardWidget._jQueryInterface.call($(this), 'toggle')
})
$(document).on('click', SELECTOR_DATA_REMOVE, function (event) {
if (event) {
event.preventDefault()
}
CardWidget._jQueryInterface.call($(this), 'remove')
})
$(document).on('click', SELECTOR_DATA_MAXIMIZE, function (event) {
if (event) {
event.preventDefault()
}
CardWidget._jQueryInterface.call($(this), 'toggleMaximize')
})
/**
* jQuery API
* ====================================================
*/
$.fn[NAME] = CardWidget._jQueryInterface
$.fn[NAME].Constructor = CardWidget
$.fn[NAME].noConflict = function () {
$.fn[NAME] = JQUERY_NO_CONFLICT
return CardWidget._jQueryInterface
}
export default CardWidget

View File

@@ -5,288 +5,292 @@
* --------------------------------------------
*/
const ControlSidebar = (($) => {
/**
* Constants
* ====================================================
*/
import $ from 'jquery'
const NAME = 'ControlSidebar'
const DATA_KEY = 'lte.controlsidebar'
const EVENT_KEY = `.${DATA_KEY}`
const JQUERY_NO_CONFLICT = $.fn[NAME]
const DATA_API_KEY = '.data-api'
/**
* Constants
* ====================================================
*/
const Event = {
COLLAPSED: `collapsed${EVENT_KEY}`,
EXPANDED: `expanded${EVENT_KEY}`,
const NAME = 'ControlSidebar'
const DATA_KEY = 'lte.controlsidebar'
const EVENT_KEY = `.${DATA_KEY}`
const JQUERY_NO_CONFLICT = $.fn[NAME]
const EVENT_COLLAPSED = `collapsed${EVENT_KEY}`
const EVENT_EXPANDED = `expanded${EVENT_KEY}`
const SELECTOR_CONTROL_SIDEBAR = '.control-sidebar'
const SELECTOR_CONTROL_SIDEBAR_CONTENT = '.control-sidebar-content'
const SELECTOR_DATA_TOGGLE = '[data-widget="control-sidebar"]'
const SELECTOR_HEADER = '.main-header'
const SELECTOR_FOOTER = '.main-footer'
const CLASS_NAME_CONTROL_SIDEBAR_ANIMATE = 'control-sidebar-animate'
const CLASS_NAME_CONTROL_SIDEBAR_OPEN = 'control-sidebar-open'
const CLASS_NAME_CONTROL_SIDEBAR_SLIDE = 'control-sidebar-slide-open'
const CLASS_NAME_LAYOUT_FIXED = 'layout-fixed'
const CLASS_NAME_NAVBAR_FIXED = 'layout-navbar-fixed'
const CLASS_NAME_NAVBAR_SM_FIXED = 'layout-sm-navbar-fixed'
const CLASS_NAME_NAVBAR_MD_FIXED = 'layout-md-navbar-fixed'
const CLASS_NAME_NAVBAR_LG_FIXED = 'layout-lg-navbar-fixed'
const CLASS_NAME_NAVBAR_XL_FIXED = 'layout-xl-navbar-fixed'
const CLASS_NAME_FOOTER_FIXED = 'layout-footer-fixed'
const CLASS_NAME_FOOTER_SM_FIXED = 'layout-sm-footer-fixed'
const CLASS_NAME_FOOTER_MD_FIXED = 'layout-md-footer-fixed'
const CLASS_NAME_FOOTER_LG_FIXED = 'layout-lg-footer-fixed'
const CLASS_NAME_FOOTER_XL_FIXED = 'layout-xl-footer-fixed'
const Default = {
controlsidebarSlide: true,
scrollbarTheme: 'os-theme-light',
scrollbarAutoHide: 'l'
}
/**
* Class Definition
* ====================================================
*/
class ControlSidebar {
constructor(element, config) {
this._element = element
this._config = config
this._init()
}
const Selector = {
CONTROL_SIDEBAR: '.control-sidebar',
CONTROL_SIDEBAR_CONTENT: '.control-sidebar-content',
DATA_TOGGLE: '[data-widget="control-sidebar"]',
CONTENT: '.content-wrapper',
HEADER: '.main-header',
FOOTER: '.main-footer',
}
// Public
const ClassName = {
CONTROL_SIDEBAR_ANIMATE: 'control-sidebar-animate',
CONTROL_SIDEBAR_OPEN: 'control-sidebar-open',
CONTROL_SIDEBAR_SLIDE: 'control-sidebar-slide-open',
LAYOUT_FIXED: 'layout-fixed',
NAVBAR_FIXED: 'layout-navbar-fixed',
NAVBAR_SM_FIXED: 'layout-sm-navbar-fixed',
NAVBAR_MD_FIXED: 'layout-md-navbar-fixed',
NAVBAR_LG_FIXED: 'layout-lg-navbar-fixed',
NAVBAR_XL_FIXED: 'layout-xl-navbar-fixed',
FOOTER_FIXED: 'layout-footer-fixed',
FOOTER_SM_FIXED: 'layout-sm-footer-fixed',
FOOTER_MD_FIXED: 'layout-md-footer-fixed',
FOOTER_LG_FIXED: 'layout-lg-footer-fixed',
FOOTER_XL_FIXED: 'layout-xl-footer-fixed',
}
collapse() {
const $body = $('body')
const $html = $('html')
const Default = {
controlsidebarSlide: true,
scrollbarTheme : 'os-theme-light',
scrollbarAutoHide: 'l',
}
/**
* Class Definition
* ====================================================
*/
class ControlSidebar {
constructor(element, config) {
this._element = element
this._config = config
this._init()
// Show the control sidebar
if (this._config.controlsidebarSlide) {
$html.addClass(CLASS_NAME_CONTROL_SIDEBAR_ANIMATE)
$body.removeClass(CLASS_NAME_CONTROL_SIDEBAR_SLIDE).delay(300).queue(function () {
$(SELECTOR_CONTROL_SIDEBAR).hide()
$html.removeClass(CLASS_NAME_CONTROL_SIDEBAR_ANIMATE)
$(this).dequeue()
})
} else {
$body.removeClass(CLASS_NAME_CONTROL_SIDEBAR_OPEN)
}
// Public
$(this._element).trigger($.Event(EVENT_COLLAPSED))
}
collapse() {
// Show the control sidebar
if (this._config.controlsidebarSlide) {
$('html').addClass(ClassName.CONTROL_SIDEBAR_ANIMATE)
$('body').removeClass(ClassName.CONTROL_SIDEBAR_SLIDE).delay(300).queue(function(){
$(Selector.CONTROL_SIDEBAR).hide()
$('html').removeClass(ClassName.CONTROL_SIDEBAR_ANIMATE)
show() {
const $body = $('body')
const $html = $('html')
// Collapse the control sidebar
if (this._config.controlsidebarSlide) {
$html.addClass(CLASS_NAME_CONTROL_SIDEBAR_ANIMATE)
$(SELECTOR_CONTROL_SIDEBAR).show().delay(10).queue(function () {
$body.addClass(CLASS_NAME_CONTROL_SIDEBAR_SLIDE).delay(300).queue(function () {
$html.removeClass(CLASS_NAME_CONTROL_SIDEBAR_ANIMATE)
$(this).dequeue()
})
} else {
$('body').removeClass(ClassName.CONTROL_SIDEBAR_OPEN)
}
const collapsedEvent = $.Event(Event.COLLAPSED)
$(this._element).trigger(collapsedEvent)
$(this).dequeue()
})
} else {
$body.addClass(CLASS_NAME_CONTROL_SIDEBAR_OPEN)
}
show() {
// Collapse the control sidebar
if (this._config.controlsidebarSlide) {
$('html').addClass(ClassName.CONTROL_SIDEBAR_ANIMATE)
$(Selector.CONTROL_SIDEBAR).show().delay(10).queue(function(){
$('body').addClass(ClassName.CONTROL_SIDEBAR_SLIDE).delay(300).queue(function(){
$('html').removeClass(ClassName.CONTROL_SIDEBAR_ANIMATE)
$(this).dequeue()
})
$(this).dequeue()
})
} else {
$('body').addClass(ClassName.CONTROL_SIDEBAR_OPEN)
}
this._fixHeight()
this._fixScrollHeight()
const expandedEvent = $.Event(Event.EXPANDED)
$(this._element).trigger(expandedEvent)
$(this._element).trigger($.Event(EVENT_EXPANDED))
}
toggle() {
const $body = $('body')
const shouldClose = $body.hasClass(CLASS_NAME_CONTROL_SIDEBAR_OPEN) ||
$body.hasClass(CLASS_NAME_CONTROL_SIDEBAR_SLIDE)
if (shouldClose) {
// Close the control sidebar
this.collapse()
} else {
// Open the control sidebar
this.show()
}
}
toggle() {
const shouldClose = $('body').hasClass(ClassName.CONTROL_SIDEBAR_OPEN) || $('body')
.hasClass(ClassName.CONTROL_SIDEBAR_SLIDE)
if (shouldClose) {
// Close the control sidebar
this.collapse()
} else {
// Open the control sidebar
this.show()
}
}
// Private
// Private
_init() {
this._fixHeight()
this._fixScrollHeight()
_init() {
$(window).resize(() => {
this._fixHeight()
this._fixScrollHeight()
})
$(window).resize(() => {
this._fixHeight()
$(window).scroll(() => {
const $body = $('body')
const shouldFixHeight = $body.hasClass(CLASS_NAME_CONTROL_SIDEBAR_OPEN) ||
$body.hasClass(CLASS_NAME_CONTROL_SIDEBAR_SLIDE)
if (shouldFixHeight) {
this._fixScrollHeight()
}
})
}
_fixScrollHeight() {
const $body = $('body')
if (!$body.hasClass(CLASS_NAME_LAYOUT_FIXED)) {
return
}
const heights = {
scroll: $(document).height(),
window: $(window).height(),
header: $(SELECTOR_HEADER).outerHeight(),
footer: $(SELECTOR_FOOTER).outerHeight()
}
const positions = {
bottom: Math.abs((heights.window + $(window).scrollTop()) - heights.scroll),
top: $(window).scrollTop()
}
const navbarFixed = (
$body.hasClass(CLASS_NAME_NAVBAR_FIXED) ||
$body.hasClass(CLASS_NAME_NAVBAR_SM_FIXED) ||
$body.hasClass(CLASS_NAME_NAVBAR_MD_FIXED) ||
$body.hasClass(CLASS_NAME_NAVBAR_LG_FIXED) ||
$body.hasClass(CLASS_NAME_NAVBAR_XL_FIXED)
) && $(SELECTOR_HEADER).css('position') === 'fixed'
const footerFixed = (
$body.hasClass(CLASS_NAME_FOOTER_FIXED) ||
$body.hasClass(CLASS_NAME_FOOTER_SM_FIXED) ||
$body.hasClass(CLASS_NAME_FOOTER_MD_FIXED) ||
$body.hasClass(CLASS_NAME_FOOTER_LG_FIXED) ||
$body.hasClass(CLASS_NAME_FOOTER_XL_FIXED)
) && $(SELECTOR_FOOTER).css('position') === 'fixed'
const $controlSidebar = $(SELECTOR_CONTROL_SIDEBAR)
const $controlsidebarContent = $(`${SELECTOR_CONTROL_SIDEBAR}, ${SELECTOR_CONTROL_SIDEBAR} ${SELECTOR_CONTROL_SIDEBAR_CONTENT}`)
if (positions.top === 0 && positions.bottom === 0) {
$controlSidebar.css({
bottom: heights.footer,
top: heights.header
})
$controlsidebarContent.css('height', heights.window - (heights.header + heights.footer))
} else if (positions.bottom <= heights.footer) {
if (footerFixed === false) {
const top = heights.header - positions.top
$controlSidebar.css('bottom', heights.footer - positions.bottom).css('top', top >= 0 ? top : 0)
$controlsidebarContent.css('height', heights.window - (heights.footer - positions.bottom))
} else {
$controlSidebar.css('bottom', heights.footer)
}
} else if (positions.top <= heights.header) {
if (navbarFixed === false) {
$controlSidebar.css('top', heights.header - positions.top)
$controlsidebarContent.css('height', heights.window - (heights.header - positions.top))
} else {
$controlSidebar.css('top', heights.header)
}
} else if (navbarFixed === false) {
$controlSidebar.css('top', 0)
$controlsidebarContent.css('height', heights.window)
} else {
$controlSidebar.css('top', heights.header)
}
}
$(window).scroll(() => {
if ($('body').hasClass(ClassName.CONTROL_SIDEBAR_OPEN) || $('body').hasClass(ClassName.CONTROL_SIDEBAR_SLIDE)) {
this._fixScrollHeight()
}
})
_fixHeight() {
const $body = $('body')
if (!$body.hasClass(CLASS_NAME_LAYOUT_FIXED)) {
return
}
_fixScrollHeight() {
const heights = {
scroll: $(document).height(),
window: $(window).height(),
header: $(Selector.HEADER).outerHeight(),
footer: $(Selector.FOOTER).outerHeight(),
}
const positions = {
bottom: Math.abs((heights.window + $(window).scrollTop()) - heights.scroll),
top: $(window).scrollTop(),
}
const heights = {
window: $(window).height(),
header: $(SELECTOR_HEADER).outerHeight(),
footer: $(SELECTOR_FOOTER).outerHeight()
}
let navbarFixed = false;
let footerFixed = false;
let sidebarHeight = heights.window - heights.header
if ($('body').hasClass(ClassName.LAYOUT_FIXED)) {
if (
$('body').hasClass(ClassName.NAVBAR_FIXED)
|| $('body').hasClass(ClassName.NAVBAR_SM_FIXED)
|| $('body').hasClass(ClassName.NAVBAR_MD_FIXED)
|| $('body').hasClass(ClassName.NAVBAR_LG_FIXED)
|| $('body').hasClass(ClassName.NAVBAR_XL_FIXED)
) {
if ($(Selector.HEADER).css("position") === "fixed") {
navbarFixed = true;
}
}
if (
$('body').hasClass(ClassName.FOOTER_FIXED)
|| $('body').hasClass(ClassName.FOOTER_SM_FIXED)
|| $('body').hasClass(ClassName.FOOTER_MD_FIXED)
|| $('body').hasClass(ClassName.FOOTER_LG_FIXED)
|| $('body').hasClass(ClassName.FOOTER_XL_FIXED)
) {
if ($(Selector.FOOTER).css("position") === "fixed") {
footerFixed = true;
}
}
if (positions.top === 0 && positions.bottom === 0) {
$(Selector.CONTROL_SIDEBAR).css('bottom', heights.footer);
$(Selector.CONTROL_SIDEBAR).css('top', heights.header);
$(Selector.CONTROL_SIDEBAR + ', ' + Selector.CONTROL_SIDEBAR + ' ' + Selector.CONTROL_SIDEBAR_CONTENT).css('height', heights.window - (heights.header + heights.footer))
} else if (positions.bottom <= heights.footer) {
if (footerFixed === false) {
$(Selector.CONTROL_SIDEBAR).css('bottom', heights.footer - positions.bottom);
$(Selector.CONTROL_SIDEBAR + ', ' + Selector.CONTROL_SIDEBAR + ' ' + Selector.CONTROL_SIDEBAR_CONTENT).css('height', heights.window - (heights.footer - positions.bottom))
} else {
$(Selector.CONTROL_SIDEBAR).css('bottom', heights.footer);
}
} else if (positions.top <= heights.header) {
if (navbarFixed === false) {
$(Selector.CONTROL_SIDEBAR).css('top', heights.header - positions.top);
$(Selector.CONTROL_SIDEBAR + ', ' + Selector.CONTROL_SIDEBAR + ' ' + Selector.CONTROL_SIDEBAR_CONTENT).css('height', heights.window - (heights.header - positions.top))
} else {
$(Selector.CONTROL_SIDEBAR).css('top', heights.header);
}
} else {
if (navbarFixed === false) {
$(Selector.CONTROL_SIDEBAR).css('top', 0);
$(Selector.CONTROL_SIDEBAR + ', ' + Selector.CONTROL_SIDEBAR + ' ' + Selector.CONTROL_SIDEBAR_CONTENT).css('height', heights.window)
} else {
$(Selector.CONTROL_SIDEBAR).css('top', heights.header);
}
}
if (
$body.hasClass(CLASS_NAME_FOOTER_FIXED) ||
$body.hasClass(CLASS_NAME_FOOTER_SM_FIXED) ||
$body.hasClass(CLASS_NAME_FOOTER_MD_FIXED) ||
$body.hasClass(CLASS_NAME_FOOTER_LG_FIXED) ||
$body.hasClass(CLASS_NAME_FOOTER_XL_FIXED)
) {
if ($(SELECTOR_FOOTER).css('position') === 'fixed') {
sidebarHeight = heights.window - heights.header - heights.footer
}
}
_fixHeight() {
const heights = {
window: $(window).height(),
header: $(Selector.HEADER).outerHeight(),
footer: $(Selector.FOOTER).outerHeight(),
}
const $controlSidebar = $(`${SELECTOR_CONTROL_SIDEBAR} ${SELECTOR_CONTROL_SIDEBAR_CONTENT}`)
$controlSidebar.css('height', sidebarHeight)
if ($('body').hasClass(ClassName.LAYOUT_FIXED)) {
let sidebarHeight = heights.window - heights.header;
if (
$('body').hasClass(ClassName.FOOTER_FIXED)
|| $('body').hasClass(ClassName.FOOTER_SM_FIXED)
|| $('body').hasClass(ClassName.FOOTER_MD_FIXED)
|| $('body').hasClass(ClassName.FOOTER_LG_FIXED)
|| $('body').hasClass(ClassName.FOOTER_XL_FIXED)
) {
if ($(Selector.FOOTER).css("position") === "fixed") {
sidebarHeight = heights.window - heights.header - heights.footer;
}
if (typeof $.fn.overlayScrollbars !== 'undefined') {
$controlSidebar.overlayScrollbars({
className: this._config.scrollbarTheme,
sizeAutoCapable: true,
scrollbars: {
autoHide: this._config.scrollbarAutoHide,
clickScrolling: true
}
$(Selector.CONTROL_SIDEBAR + ' ' + Selector.CONTROL_SIDEBAR_CONTENT).css('height', sidebarHeight)
if (typeof $.fn.overlayScrollbars !== 'undefined') {
$(Selector.CONTROL_SIDEBAR + ' ' + Selector.CONTROL_SIDEBAR_CONTENT).overlayScrollbars({
className : this._config.scrollbarTheme,
sizeAutoCapable : true,
scrollbars : {
autoHide: this._config.scrollbarAutoHide,
clickScrolling : true
}
})
}
}
}
// Static
static _jQueryInterface(operation) {
return this.each(function () {
let data = $(this).data(DATA_KEY)
const _options = $.extend({}, Default, $(this).data())
if (!data) {
data = new ControlSidebar(this, _options)
$(this).data(DATA_KEY, data)
}
if (data[operation] === 'undefined') {
throw new Error(`${operation} is not a function`)
}
data[operation]()
})
}
}
/**
*
* Data Api implementation
* ====================================================
*/
$(document).on('click', Selector.DATA_TOGGLE, function (event) {
event.preventDefault()
// Static
ControlSidebar._jQueryInterface.call($(this), 'toggle')
})
static _jQueryInterface(operation) {
return this.each(function () {
let data = $(this).data(DATA_KEY)
const _options = $.extend({}, Default, $(this).data())
/**
* jQuery API
* ====================================================
*/
if (!data) {
data = new ControlSidebar(this, _options)
$(this).data(DATA_KEY, data)
}
$.fn[NAME] = ControlSidebar._jQueryInterface
$.fn[NAME].Constructor = ControlSidebar
$.fn[NAME].noConflict = function () {
$.fn[NAME] = JQUERY_NO_CONFLICT
return ControlSidebar._jQueryInterface
if (data[operation] === 'undefined') {
throw new Error(`${operation} is not a function`)
}
data[operation]()
})
}
}
return ControlSidebar
})(jQuery)
/**
*
* Data Api implementation
* ====================================================
*/
$(document).on('click', SELECTOR_DATA_TOGGLE, function (event) {
event.preventDefault()
ControlSidebar._jQueryInterface.call($(this), 'toggle')
})
/**
* jQuery API
* ====================================================
*/
$.fn[NAME] = ControlSidebar._jQueryInterface
$.fn[NAME].Constructor = ControlSidebar
$.fn[NAME].noConflict = function () {
$.fn[NAME] = JQUERY_NO_CONFLICT
return ControlSidebar._jQueryInterface
}
export default ControlSidebar

View File

@@ -5,88 +5,80 @@
* --------------------------------------------
*/
const DirectChat = (($) => {
/**
* Constants
* ====================================================
*/
import $ from 'jquery'
const NAME = 'DirectChat'
const DATA_KEY = 'lte.directchat'
const EVENT_KEY = `.${DATA_KEY}`
const JQUERY_NO_CONFLICT = $.fn[NAME]
const DATA_API_KEY = '.data-api'
/**
* Constants
* ====================================================
*/
const Event = {
TOGGLED: `toggled{EVENT_KEY}`
const NAME = 'DirectChat'
const DATA_KEY = 'lte.directchat'
const EVENT_KEY = `.${DATA_KEY}`
const JQUERY_NO_CONFLICT = $.fn[NAME]
const EVENT_TOGGLED = `toggled${EVENT_KEY}`
const SELECTOR_DATA_TOGGLE = '[data-widget="chat-pane-toggle"]'
const SELECTOR_DIRECT_CHAT = '.direct-chat'
const CLASS_NAME_DIRECT_CHAT_OPEN = 'direct-chat-contacts-open'
/**
* Class Definition
* ====================================================
*/
class DirectChat {
constructor(element) {
this._element = element
}
const Selector = {
DATA_TOGGLE: '[data-widget="chat-pane-toggle"]',
DIRECT_CHAT: '.direct-chat'
};
const ClassName = {
DIRECT_CHAT_OPEN: 'direct-chat-contacts-open'
};
/**
* Class Definition
* ====================================================
*/
class DirectChat {
constructor(element, config) {
this._element = element
}
toggle() {
$(this._element).parents(Selector.DIRECT_CHAT).first().toggleClass(ClassName.DIRECT_CHAT_OPEN);
const toggledEvent = $.Event(Event.TOGGLED)
$(this._element).trigger(toggledEvent)
}
// Static
static _jQueryInterface(config) {
return this.each(function () {
let data = $(this).data(DATA_KEY)
if (!data) {
data = new DirectChat($(this))
$(this).data(DATA_KEY, data)
}
data[config]()
})
}
toggle() {
$(this._element).parents(SELECTOR_DIRECT_CHAT).first().toggleClass(CLASS_NAME_DIRECT_CHAT_OPEN)
$(this._element).trigger($.Event(EVENT_TOGGLED))
}
/**
*
* Data Api implementation
* ====================================================
*/
// Static
$(document).on('click', Selector.DATA_TOGGLE, function (event) {
if (event) event.preventDefault();
DirectChat._jQueryInterface.call($(this), 'toggle');
});
static _jQueryInterface(config) {
return this.each(function () {
let data = $(this).data(DATA_KEY)
/**
* jQuery API
* ====================================================
*/
if (!data) {
data = new DirectChat($(this))
$(this).data(DATA_KEY, data)
}
$.fn[NAME] = DirectChat._jQueryInterface
$.fn[NAME].Constructor = DirectChat
$.fn[NAME].noConflict = function () {
$.fn[NAME] = JQUERY_NO_CONFLICT
return DirectChat._jQueryInterface
data[config]()
})
}
}
/**
*
* Data Api implementation
* ====================================================
*/
$(document).on('click', SELECTOR_DATA_TOGGLE, function (event) {
if (event) {
event.preventDefault()
}
return DirectChat
})(jQuery)
DirectChat._jQueryInterface.call($(this), 'toggle')
})
/**
* jQuery API
* ====================================================
*/
$.fn[NAME] = DirectChat._jQueryInterface
$.fn[NAME].Constructor = DirectChat
$.fn[NAME].noConflict = function () {
$.fn[NAME] = JQUERY_NO_CONFLICT
return DirectChat._jQueryInterface
}
export default DirectChat

View File

@@ -5,139 +5,143 @@
* --------------------------------------------
*/
const Dropdown = (($) => {
/**
* Constants
* ====================================================
*/
import $ from 'jquery'
const NAME = 'Dropdown'
const DATA_KEY = 'lte.dropdown'
const EVENT_KEY = `.${DATA_KEY}`
const JQUERY_NO_CONFLICT = $.fn[NAME]
/**
* Constants
* ====================================================
*/
const Selector = {
NAVBAR: '.navbar',
DROPDOWN_MENU: '.dropdown-menu',
DROPDOWN_MENU_ACTIVE: '.dropdown-menu.show',
DROPDOWN_TOGGLE: '[data-toggle="dropdown"]',
const NAME = 'Dropdown'
const DATA_KEY = 'lte.dropdown'
const JQUERY_NO_CONFLICT = $.fn[NAME]
const SELECTOR_NAVBAR = '.navbar'
const SELECTOR_DROPDOWN_MENU = '.dropdown-menu'
const SELECTOR_DROPDOWN_MENU_ACTIVE = '.dropdown-menu.show'
const SELECTOR_DROPDOWN_TOGGLE = '[data-toggle="dropdown"]'
const CLASS_NAME_DROPDOWN_RIGHT = 'dropdown-menu-right'
const CLASS_NAME_DROPDOWN_SUBMENU = 'dropdown-submenu'
// TODO: this is unused; should be removed along with the extend?
const Default = {
}
/**
* Class Definition
* ====================================================
*/
class Dropdown {
constructor(element, config) {
this._config = config
this._element = element
}
const ClassName = {
DROPDOWN_HOVER: 'dropdown-hover',
DROPDOWN_RIGHT: 'dropdown-menu-right'
}
// Public
const Default = {
}
toggleSubmenu() {
this._element.siblings().show().toggleClass('show')
/**
* Class Definition
* ====================================================
*/
class Dropdown {
constructor(element, config) {
this._config = config
this._element = element
if (!this._element.next().hasClass('show')) {
this._element.parents(SELECTOR_DROPDOWN_MENU).first().find('.show').removeClass('show').hide()
}
// Public
this._element.parents('li.nav-item.dropdown.show').on('hidden.bs.dropdown', () => {
$('.dropdown-submenu .show').removeClass('show').hide()
})
}
toggleSubmenu() {
this._element.siblings().show().toggleClass("show")
fixPosition() {
const $element = $(SELECTOR_DROPDOWN_MENU_ACTIVE)
if (! this._element.next().hasClass('show')) {
this._element.parents('.dropdown-menu').first().find('.show').removeClass("show").hide()
if ($element.length === 0) {
return
}
if ($element.hasClass(CLASS_NAME_DROPDOWN_RIGHT)) {
$element.css({
left: 'inherit',
right: 0
})
} else {
$element.css({
left: 0,
right: 'inherit'
})
}
const offset = $element.offset()
const width = $element.width()
const visiblePart = $(window).width() - offset.left
if (offset.left < 0) {
$element.css({
left: 'inherit',
right: offset.left - 5
})
} else if (visiblePart < width) {
$element.css({
left: 'inherit',
right: 0
})
}
}
// Static
static _jQueryInterface(config) {
return this.each(function () {
let data = $(this).data(DATA_KEY)
const _config = $.extend({}, Default, $(this).data())
if (!data) {
data = new Dropdown($(this), _config)
$(this).data(DATA_KEY, data)
}
this._element.parents('li.nav-item.dropdown.show').on('hidden.bs.dropdown', function(e) {
$('.dropdown-submenu .show').removeClass("show").hide()
})
}
if (config === 'toggleSubmenu' || config === 'fixPosition') {
data[config]()
}
})
}
}
fixPosition() {
let elm = $(Selector.DROPDOWN_MENU_ACTIVE)
/**
* Data API
* ====================================================
*/
if (elm.length !== 0) {
if (elm.hasClass(ClassName.DROPDOWN_RIGHT)) {
elm.css('left', 'inherit')
elm.css('right', 0)
} else {
elm.css('left', 0)
elm.css('right', 'inherit')
}
$(`${SELECTOR_DROPDOWN_MENU} ${SELECTOR_DROPDOWN_TOGGLE}`).on('click', function (event) {
event.preventDefault()
event.stopPropagation()
let offset = elm.offset()
let width = elm.width()
let windowWidth = $(window).width()
let visiblePart = windowWidth - offset.left
Dropdown._jQueryInterface.call($(this), 'toggleSubmenu')
})
if (offset.left < 0) {
elm.css('left', 'inherit')
elm.css('right', (offset.left - 5))
} else {
if (visiblePart < width) {
elm.css('left', 'inherit')
elm.css('right', 0)
}
}
}
}
$(`${SELECTOR_NAVBAR} ${SELECTOR_DROPDOWN_TOGGLE}`).on('click', event => {
event.preventDefault()
// Static
static _jQueryInterface(config) {
return this.each(function () {
let data = $(this).data(DATA_KEY)
const _config = $.extend({}, Default, $(this).data())
if (!data) {
data = new Dropdown($(this), _config)
$(this).data(DATA_KEY, data)
}
if (config === 'toggleSubmenu' || config == 'fixPosition') {
data[config]()
}
})
}
if ($(event.target).parent().hasClass(CLASS_NAME_DROPDOWN_SUBMENU)) {
return
}
/**
* Data API
* ====================================================
*/
setTimeout(function () {
Dropdown._jQueryInterface.call($(this), 'fixPosition')
}, 1)
})
$(Selector.DROPDOWN_MENU + ' ' + Selector.DROPDOWN_TOGGLE).on("click", function(event) {
event.preventDefault()
event.stopPropagation()
/**
* jQuery API
* ====================================================
*/
Dropdown._jQueryInterface.call($(this), 'toggleSubmenu')
});
$(Selector.NAVBAR + ' ' + Selector.DROPDOWN_TOGGLE).on("click", function(event) {
event.preventDefault()
setTimeout(function() {
Dropdown._jQueryInterface.call($(this), 'fixPosition')
}, 1)
});
/**
* jQuery API
* ====================================================
*/
$.fn[NAME] = Dropdown._jQueryInterface
$.fn[NAME].Constructor = Dropdown
$.fn[NAME].noConflict = function () {
$.fn[NAME] = JQUERY_NO_CONFLICT
return Dropdown._jQueryInterface
}
return Dropdown
})(jQuery)
$.fn[NAME] = Dropdown._jQueryInterface
$.fn[NAME].Constructor = Dropdown
$.fn[NAME].noConflict = function () {
$.fn[NAME] = JQUERY_NO_CONFLICT
return Dropdown._jQueryInterface
}
export default Dropdown

115
build/js/ExpandableTable.js Normal file
View File

@@ -0,0 +1,115 @@
/**
* --------------------------------------------
* AdminLTE ExpandableTable.js
* License MIT
* --------------------------------------------
*/
import $ from 'jquery'
/**
* Constants
* ====================================================
*/
const NAME = 'ExpandableTable'
const DATA_KEY = 'lte.expandableTable'
const EVENT_KEY = `.${DATA_KEY}`
const JQUERY_NO_CONFLICT = $.fn[NAME]
const EVENT_EXPANDED = `expanded${EVENT_KEY}`
const EVENT_COLLAPSED = `collapsed${EVENT_KEY}`
const SELECTOR_TABLE = '.expandable-table'
const SELECTOR_DATA_TOGGLE = '[data-widget="expandable-table"]'
const SELECTOR_ARIA_ATTR = 'aria-expanded'
/**
* Class Definition
* ====================================================
*/
class ExpandableTable {
constructor(element, options) {
this._options = options
this._element = element
}
// Public
init() {
$(SELECTOR_DATA_TOGGLE).each((_, $header) => {
const $type = $($header).attr(SELECTOR_ARIA_ATTR)
const $body = $($header).next().children().first().children()
if ($type === 'true') {
$body.show()
} else if ($type === 'false') {
$body.hide()
$body.parent().parent().addClass('d-none')
}
})
}
toggleRow() {
const $element = this._element
const time = 500
const $type = $element.attr(SELECTOR_ARIA_ATTR)
const $body = $element.next().children().first().children()
$body.stop()
if ($type === 'true') {
$body.slideUp(time, () => {
$element.next().addClass('d-none')
})
$element.attr(SELECTOR_ARIA_ATTR, 'false')
$element.trigger($.Event(EVENT_COLLAPSED))
} else if ($type === 'false') {
$element.next().removeClass('d-none')
$body.slideDown(time)
$element.attr(SELECTOR_ARIA_ATTR, 'true')
$element.trigger($.Event(EVENT_EXPANDED))
}
}
// Static
static _jQueryInterface(operation) {
return this.each(function () {
let data = $(this).data(DATA_KEY)
if (!data) {
data = new ExpandableTable($(this))
$(this).data(DATA_KEY, data)
}
if (typeof operation === 'string' && operation.match(/init|toggleRow/)) {
data[operation]()
}
})
}
}
/**
* Data API
* ====================================================
*/
$(SELECTOR_TABLE).ready(function () {
ExpandableTable._jQueryInterface.call($(this), 'init')
})
$(document).on('click', SELECTOR_DATA_TOGGLE, function () {
ExpandableTable._jQueryInterface.call($(this), 'toggleRow')
})
/**
* jQuery API
* ====================================================
*/
$.fn[NAME] = ExpandableTable._jQueryInterface
$.fn[NAME].Constructor = ExpandableTable
$.fn[NAME].noConflict = function () {
$.fn[NAME] = JQUERY_NO_CONFLICT
return ExpandableTable._jQueryInterface
}
export default ExpandableTable

117
build/js/Fullscreen.js Normal file
View File

@@ -0,0 +1,117 @@
/**
* --------------------------------------------
* AdminLTE Fullscreen.js
* License MIT
* --------------------------------------------
*/
import $ from 'jquery'
/**
* Constants
* ====================================================
*/
const NAME = 'Fullscreen'
const DATA_KEY = 'lte.fullscreen'
const JQUERY_NO_CONFLICT = $.fn[NAME]
const SELECTOR_DATA_WIDGET = '[data-widget="fullscreen"]'
const SELECTOR_ICON = `${SELECTOR_DATA_WIDGET} i`
const Default = {
minimizeIcon: 'fa-compress-arrows-alt',
maximizeIcon: 'fa-expand-arrows-alt'
}
/**
* Class Definition
* ====================================================
*/
class Fullscreen {
constructor(_element, _options) {
this.element = _element
this.options = $.extend({}, Default, _options)
}
// Public
toggle() {
if (document.fullscreenElement ||
document.mozFullScreenElement ||
document.webkitFullscreenElement ||
document.msFullscreenElement) {
this.windowed()
} else {
this.fullscreen()
}
}
fullscreen() {
if (document.documentElement.requestFullscreen) {
document.documentElement.requestFullscreen()
} else if (document.documentElement.webkitRequestFullscreen) {
document.documentElement.webkitRequestFullscreen()
} else if (document.documentElement.msRequestFullscreen) {
document.documentElement.msRequestFullscreen()
}
$(SELECTOR_ICON).removeClass(this.options.maximizeIcon).addClass(this.options.minimizeIcon)
}
windowed() {
if (document.exitFullscreen) {
document.exitFullscreen()
} else if (document.webkitExitFullscreen) {
document.webkitExitFullscreen()
} else if (document.msExitFullscreen) {
document.msExitFullscreen()
}
$(SELECTOR_ICON).removeClass(this.options.minimizeIcon).addClass(this.options.maximizeIcon)
}
// Static
static _jQueryInterface(config) {
let data = $(this).data(DATA_KEY)
if (!data) {
data = $(this).data()
}
const _options = $.extend({}, Default, typeof config === 'object' ? config : data)
const plugin = new Fullscreen($(this), _options)
$(this).data(DATA_KEY, typeof config === 'object' ? config : data)
if (typeof config === 'string' && config.match(/toggle|fullscreen|windowed/)) {
plugin[config]()
} else {
plugin.init()
}
}
}
/**
* Data API
* ====================================================
*/
$(document).on('click', SELECTOR_DATA_WIDGET, function () {
Fullscreen._jQueryInterface.call($(this), 'toggle')
})
/**
* jQuery API
* ====================================================
*/
$.fn[NAME] = Fullscreen._jQueryInterface
$.fn[NAME].Constructor = Fullscreen
$.fn[NAME].noConflict = function () {
$.fn[NAME] = JQUERY_NO_CONFLICT
return Fullscreen._jQueryInterface
}
export default Fullscreen

356
build/js/IFrame.js Normal file
View File

@@ -0,0 +1,356 @@
/**
* --------------------------------------------
* AdminLTE IFrame.js
* License MIT
* --------------------------------------------
*/
import $ from 'jquery'
/**
* Constants
* ====================================================
*/
const NAME = 'IFrame'
const DATA_KEY = 'lte.iframe'
const JQUERY_NO_CONFLICT = $.fn[NAME]
const SELECTOR_DATA_TOGGLE = '[data-widget="iframe"]'
const SELECTOR_DATA_TOGGLE_CLOSE = '[data-widget="iframe-close"]'
const SELECTOR_DATA_TOGGLE_SCROLL_LEFT = '[data-widget="iframe-scrollleft"]'
const SELECTOR_DATA_TOGGLE_SCROLL_RIGHT = '[data-widget="iframe-scrollright"]'
const SELECTOR_DATA_TOGGLE_FULLSCREEN = '[data-widget="iframe-fullscreen"]'
const SELECTOR_CONTENT_WRAPPER = '.content-wrapper'
const SELECTOR_CONTENT_IFRAME = `${SELECTOR_CONTENT_WRAPPER} iframe`
const SELECTOR_TAB_NAV = `${SELECTOR_DATA_TOGGLE}.iframe-mode .nav`
const SELECTOR_TAB_NAVBAR_NAV = `${SELECTOR_DATA_TOGGLE}.iframe-mode .navbar-nav`
const SELECTOR_TAB_NAVBAR_NAV_ITEM = `${SELECTOR_TAB_NAVBAR_NAV} .nav-item`
const SELECTOR_TAB_CONTENT = `${SELECTOR_DATA_TOGGLE}.iframe-mode .tab-content`
const SELECTOR_TAB_EMPTY = `${SELECTOR_TAB_CONTENT} .tab-empty`
const SELECTOR_TAB_LOADING = `${SELECTOR_TAB_CONTENT} .tab-loading`
const SELECTOR_SIDEBAR_MENU_ITEM = '.main-sidebar .nav-item > a.nav-link'
const SELECTOR_HEADER_MENU_ITEM = '.main-header .nav-item a.nav-link'
const SELECTOR_HEADER_DROPDOWN_ITEM = '.main-header a.dropdown-item'
const CLASS_NAME_IFRAME_MODE = 'iframe-mode'
const CLASS_NAME_FULLSCREEN_MODE = 'iframe-mode-fullscreen'
const Default = {
onTabClick(item) {
return item
},
onTabChanged(item) {
return item
},
onTabCreated(item) {
return item
},
autoIframeMode: true,
autoItemActive: true,
autoShowNewTab: true,
loadingScreen: true,
useNavbarItems: true,
scrollOffset: 40,
scrollBehaviorSwap: false,
iconMaximize: 'fa-expand',
iconMinimize: 'fa-compress'
}
/**
* Class Definition
* ====================================================
*/
class IFrame {
constructor(element, config) {
this._config = config
this._element = element
this._init()
}
// Public
onTabClick(item) {
this._config.onTabClick(item)
}
onTabChanged(item) {
this._config.onTabChanged(item)
}
onTabCreated(item) {
this._config.onTabCreated(item)
}
createTab(title, link, uniqueName, autoOpen) {
const tabId = `panel-${uniqueName}-${Math.floor(Math.random() * 1000)}`
const navId = `tab-${uniqueName}-${Math.floor(Math.random() * 1000)}`
const newNavItem = `<li class="nav-item" role="presentation"><a class="nav-link" data-toggle="row" id="${navId}" href="#${tabId}" role="tab" aria-controls="${tabId}" aria-selected="false">${title}</a></li>`
$(SELECTOR_TAB_NAVBAR_NAV).append(newNavItem)
const newTabItem = `<div class="tab-pane fade" id="${tabId}" role="tabpanel" aria-labelledby="${navId}"><iframe src="${link}"></iframe></div>`
$(SELECTOR_TAB_CONTENT).append(newTabItem)
if (autoOpen) {
if (this._config.loadingScreen) {
const $loadingScreen = $(SELECTOR_TAB_LOADING)
$loadingScreen.fadeIn()
$(`${tabId} iframe`).ready(() => {
if (typeof this._config.loadingScreen === 'number') {
this.switchTab(`#${navId}`, this._config.loadingScreen)
setTimeout(() => {
$loadingScreen.fadeOut()
}, this._config.loadingScreen)
} else {
this.switchTab(`#${navId}`, this._config.loadingScreen)
$loadingScreen.fadeOut()
}
})
} else {
this.switchTab(`#${navId}`)
}
}
this.onTabCreated($(`#${navId}`))
}
openTabSidebar(item, autoOpen = this._config.autoShowNewTab) {
let $item = $(item).clone()
if ($item.attr('href') === undefined) {
$item = $(item).parent('a').clone()
}
$item.find('.right').remove()
let title = $item.find('p').text()
if (title === '') {
title = $item.text()
}
const link = $item.attr('href')
if (link === '#' || link === '' || link === undefined) {
return
}
this.createTab(title, link, link.replace('.html', '').replace('./', '').replaceAll('/', '-'), autoOpen)
}
switchTab(item) {
const $item = $(item)
const tabId = $item.attr('href')
$(SELECTOR_TAB_EMPTY).hide()
$(`${SELECTOR_TAB_NAVBAR_NAV} .active`).tab('dispose').removeClass('active')
this._fixHeight()
$item.tab('show')
$item.parents('li').addClass('active')
this.onTabChanged($item)
if (this._config.autoItemActive) {
this._setItemActive($(`${tabId} iframe`).attr('src'))
}
}
removeActiveTab() {
const $navItem = $(`${SELECTOR_TAB_NAVBAR_NAV_ITEM}.active`)
const $navItemParent = $navItem.parent()
const navItemIndex = $navItem.index()
$navItem.remove()
$('.tab-pane.active').remove()
if ($(SELECTOR_TAB_CONTENT).children().length == $(`${SELECTOR_TAB_EMPTY}, ${SELECTOR_TAB_LOADING}`).length) {
$(SELECTOR_TAB_EMPTY).show()
} else {
const prevNavItemIndex = navItemIndex - 1
this.switchTab($navItemParent.children().eq(prevNavItemIndex).find('a'))
}
}
toggleFullscreen() {
if ($('body').hasClass(CLASS_NAME_FULLSCREEN_MODE)) {
$(`${SELECTOR_DATA_TOGGLE_FULLSCREEN} i`).removeClass(this._config.iconMinimize).addClass(this._config.iconMaximize)
$('body').removeClass(CLASS_NAME_FULLSCREEN_MODE)
$(`${SELECTOR_TAB_EMPTY}, ${SELECTOR_TAB_LOADING}`).height('auto')
$(SELECTOR_CONTENT_WRAPPER).height('auto')
$(SELECTOR_CONTENT_IFRAME).height('auto')
} else {
$(`${SELECTOR_DATA_TOGGLE_FULLSCREEN} i`).removeClass(this._config.iconMaximize).addClass(this._config.iconMinimize)
$('body').addClass(CLASS_NAME_FULLSCREEN_MODE)
}
$(window).trigger('resize')
this._fixHeight(true)
}
// Private
_init() {
if (window.frameElement && this._config.autoIframeMode) {
$('body').addClass(CLASS_NAME_IFRAME_MODE)
} else if ($(SELECTOR_CONTENT_WRAPPER).hasClass(CLASS_NAME_IFRAME_MODE)) {
this._setupListeners()
this._fixHeight(true)
}
}
_navScroll(offset) {
const leftPos = $(SELECTOR_TAB_NAVBAR_NAV).scrollLeft()
$(SELECTOR_TAB_NAVBAR_NAV).animate({ scrollLeft: (leftPos + offset) }, 250, 'linear')
}
_setupListeners() {
$(window).on('resize', () => {
setTimeout(() => {
this._fixHeight()
}, 1)
})
$(document).on('click', SELECTOR_SIDEBAR_MENU_ITEM, e => {
e.preventDefault()
this.openTabSidebar(e.target)
})
if (this._config.useNavbarItems) {
$(document).on('click', `${SELECTOR_HEADER_MENU_ITEM}, ${SELECTOR_HEADER_DROPDOWN_ITEM}`, e => {
e.preventDefault()
this.openTabSidebar(e.target)
})
}
$(document).on('click', SELECTOR_TAB_NAVBAR_NAV_ITEM, e => {
e.preventDefault()
this.onTabClick(e.target)
this.switchTab(e.target)
})
$(document).on('click', SELECTOR_DATA_TOGGLE_CLOSE, e => {
e.preventDefault()
this.removeActiveTab()
})
$(document).on('click', SELECTOR_DATA_TOGGLE_FULLSCREEN, e => {
e.preventDefault()
this.toggleFullscreen()
})
let mousedown = false
let mousedownInterval = null
$(document).on('mousedown', SELECTOR_DATA_TOGGLE_SCROLL_LEFT, e => {
e.preventDefault()
clearInterval(mousedownInterval)
let { scrollOffset } = this._config
if (!this._config.scrollBehaviorSwap) {
scrollOffset = -scrollOffset
}
mousedown = true
this._navScroll(scrollOffset)
mousedownInterval = setInterval(() => {
this._navScroll(scrollOffset)
}, 250)
})
$(document).on('mousedown', SELECTOR_DATA_TOGGLE_SCROLL_RIGHT, e => {
e.preventDefault()
clearInterval(mousedownInterval)
let { scrollOffset } = this._config
if (this._config.scrollBehaviorSwap) {
scrollOffset = -scrollOffset
}
mousedown = true
this._navScroll(scrollOffset)
mousedownInterval = setInterval(() => {
this._navScroll(scrollOffset)
}, 250)
})
$(document).on('mouseup', () => {
if (mousedown) {
mousedown = false
clearInterval(mousedownInterval)
mousedownInterval = null
}
})
}
_setItemActive(href) {
$(`${SELECTOR_SIDEBAR_MENU_ITEM}, ${SELECTOR_HEADER_DROPDOWN_ITEM}`).removeClass('active')
$(SELECTOR_HEADER_MENU_ITEM).parent().removeClass('active')
const $headerMenuItem = $(`${SELECTOR_HEADER_MENU_ITEM}[href$="${href}"]`)
const $headerDropdownItem = $(`${SELECTOR_HEADER_DROPDOWN_ITEM}[href$="${href}"]`)
const $sidebarMenuItem = $(`${SELECTOR_SIDEBAR_MENU_ITEM}[href$="${href}"]`)
$headerMenuItem.each((i, e) => {
$(e).parent().addClass('active')
})
$headerDropdownItem.each((i, e) => {
$(e).addClass('active')
})
$sidebarMenuItem.each((i, e) => {
$(e).addClass('active')
$(e).parents('.nav-treeview').prevAll('.nav-link').addClass('active')
})
}
_fixHeight(tabEmpty = false) {
if ($('body').hasClass(CLASS_NAME_FULLSCREEN_MODE)) {
const windowHeight = $(window).height()
$(`${SELECTOR_TAB_EMPTY}, ${SELECTOR_TAB_LOADING}`).height(windowHeight)
$(SELECTOR_CONTENT_WRAPPER).height(windowHeight)
$(SELECTOR_CONTENT_IFRAME).height(windowHeight)
} else {
const contentWrapperHeight = parseFloat($(SELECTOR_CONTENT_WRAPPER).css('min-height'))
const navbarHeight = $(SELECTOR_TAB_NAV).outerHeight()
if (tabEmpty == true) {
setTimeout(() => {
$(`${SELECTOR_TAB_EMPTY}, ${SELECTOR_TAB_LOADING}`).height(contentWrapperHeight - navbarHeight)
}, 50)
} else {
$(SELECTOR_CONTENT_IFRAME).height(contentWrapperHeight - navbarHeight)
}
}
}
// Static
static _jQueryInterface(operation, ...args) {
let data = $(this).data(DATA_KEY)
const _options = $.extend({}, Default, $(this).data())
if (!data) {
data = new IFrame(this, _options)
$(this).data(DATA_KEY, data)
}
if (typeof operation === 'string' && operation.match(/createTab|openTabSidebar|switchTab|removeActiveTab/)) {
data[operation](...args)
}
}
}
/**
* Data API
* ====================================================
*/
$(window).on('load', () => {
IFrame._jQueryInterface.call($(SELECTOR_DATA_TOGGLE))
})
/**
* jQuery API
* ====================================================
*/
$.fn[NAME] = IFrame._jQueryInterface
$.fn[NAME].Constructor = IFrame
$.fn[NAME].noConflict = function () {
$.fn[NAME] = JQUERY_NO_CONFLICT
return IFrame._jQueryInterface
}
export default IFrame

View File

@@ -5,248 +5,244 @@
* --------------------------------------------
*/
const Layout = (($) => {
/**
* Constants
* ====================================================
*/
import $ from 'jquery'
const NAME = 'Layout'
const DATA_KEY = 'lte.layout'
const EVENT_KEY = `.${DATA_KEY}`
const JQUERY_NO_CONFLICT = $.fn[NAME]
/**
* Constants
* ====================================================
*/
const Event = {
SIDEBAR: 'sidebar'
const NAME = 'Layout'
const DATA_KEY = 'lte.layout'
const JQUERY_NO_CONFLICT = $.fn[NAME]
const SELECTOR_HEADER = '.main-header'
const SELECTOR_MAIN_SIDEBAR = '.main-sidebar'
const SELECTOR_SIDEBAR = '.main-sidebar .sidebar'
const SELECTOR_CONTENT = '.content-wrapper'
const SELECTOR_CONTROL_SIDEBAR_CONTENT = '.control-sidebar-content'
const SELECTOR_CONTROL_SIDEBAR_BTN = '[data-widget="control-sidebar"]'
const SELECTOR_FOOTER = '.main-footer'
const SELECTOR_PUSHMENU_BTN = '[data-widget="pushmenu"]'
const SELECTOR_LOGIN_BOX = '.login-box'
const SELECTOR_REGISTER_BOX = '.register-box'
const CLASS_NAME_SIDEBAR_FOCUSED = 'sidebar-focused'
const CLASS_NAME_LAYOUT_FIXED = 'layout-fixed'
const CLASS_NAME_CONTROL_SIDEBAR_SLIDE_OPEN = 'control-sidebar-slide-open'
const CLASS_NAME_CONTROL_SIDEBAR_OPEN = 'control-sidebar-open'
const CLASS_NAME_LAYOUT_TOP_NAV = 'layout-top-nav'
const Default = {
scrollbarTheme: 'os-theme-light',
scrollbarAutoHide: 'l',
panelAutoHeight: true,
panelAutoHeightMode: 'min-height',
loginRegisterAutoHeight: true
}
/**
* Class Definition
* ====================================================
*/
class Layout {
constructor(element, config) {
this._config = config
this._element = element
this._init()
}
const Selector = {
HEADER : '.main-header',
MAIN_SIDEBAR : '.main-sidebar',
SIDEBAR : '.main-sidebar .sidebar',
CONTENT : '.content-wrapper',
BRAND : '.brand-link',
CONTENT_HEADER : '.content-header',
WRAPPER : '.wrapper',
CONTROL_SIDEBAR: '.control-sidebar',
CONTROL_SIDEBAR_CONTENT: '.control-sidebar-content',
CONTROL_SIDEBAR_BTN: '[data-widget="control-sidebar"]',
LAYOUT_FIXED : '.layout-fixed',
FOOTER : '.main-footer',
PUSHMENU_BTN : '[data-widget="pushmenu"]',
LOGIN_BOX : '.login-box',
REGISTER_BOX : '.register-box'
}
// Public
const ClassName = {
HOLD : 'hold-transition',
SIDEBAR : 'main-sidebar',
CONTENT_FIXED : 'content-fixed',
SIDEBAR_FOCUSED: 'sidebar-focused',
LAYOUT_FIXED : 'layout-fixed',
NAVBAR_FIXED : 'layout-navbar-fixed',
FOOTER_FIXED : 'layout-footer-fixed',
LOGIN_PAGE : 'login-page',
REGISTER_PAGE : 'register-page',
CONTROL_SIDEBAR_SLIDE_OPEN: 'control-sidebar-slide-open',
CONTROL_SIDEBAR_OPEN: 'control-sidebar-open',
}
fixLayoutHeight(extra = null) {
const $body = $('body')
let controlSidebar = 0
const Default = {
scrollbarTheme : 'os-theme-light',
scrollbarAutoHide: 'l',
panelAutoHeight: true,
loginRegisterAutoHeight: true,
}
/**
* Class Definition
* ====================================================
*/
class Layout {
constructor(element, config) {
this._config = config
this._element = element
this._init()
if ($body.hasClass(CLASS_NAME_CONTROL_SIDEBAR_SLIDE_OPEN) || $body.hasClass(CLASS_NAME_CONTROL_SIDEBAR_OPEN) || extra === 'control_sidebar') {
controlSidebar = $(SELECTOR_CONTROL_SIDEBAR_CONTENT).height()
}
// Public
const heights = {
window: $(window).height(),
header: $(SELECTOR_HEADER).length !== 0 ? $(SELECTOR_HEADER).outerHeight() : 0,
footer: $(SELECTOR_FOOTER).length !== 0 ? $(SELECTOR_FOOTER).outerHeight() : 0,
sidebar: $(SELECTOR_SIDEBAR).length !== 0 ? $(SELECTOR_SIDEBAR).height() : 0,
controlSidebar
}
fixLayoutHeight(extra = null) {
let control_sidebar = 0
const max = this._max(heights)
let offset = this._config.panelAutoHeight
if ($('body').hasClass(ClassName.CONTROL_SIDEBAR_SLIDE_OPEN) || $('body').hasClass(ClassName.CONTROL_SIDEBAR_OPEN) || extra == 'control_sidebar') {
control_sidebar = $(Selector.CONTROL_SIDEBAR_CONTENT).height()
}
if (offset === true) {
offset = 0
}
const heights = {
window: $(window).height(),
header: $(Selector.HEADER).length !== 0 ? $(Selector.HEADER).outerHeight() : 0,
footer: $(Selector.FOOTER).length !== 0 ? $(Selector.FOOTER).outerHeight() : 0,
sidebar: $(Selector.SIDEBAR).length !== 0 ? $(Selector.SIDEBAR).height() : 0,
control_sidebar: control_sidebar,
}
const $contentSelector = $(SELECTOR_CONTENT)
const max = this._max(heights)
let offset = this._config.panelAutoHeight
if (offset === true) {
offset = 0;
}
if (offset !== false) {
if (max == heights.control_sidebar) {
$(Selector.CONTENT).css('min-height', (max + offset))
} else if (max == heights.window) {
$(Selector.CONTENT).css('min-height', (max + offset) - heights.header - heights.footer)
if (offset !== false) {
if (max === heights.controlSidebar) {
if ($body.hasClass(CLASS_NAME_LAYOUT_TOP_NAV)) {
$contentSelector.css(this._config.panelAutoHeightMode, (max + offset) + heights.header + heights.footer)
} else {
$(Selector.CONTENT).css('min-height', (max + offset) - heights.header)
}
if (this._isFooterFixed()) {
$(Selector.CONTENT).css('min-height', parseFloat($(Selector.CONTENT).css('min-height')) + heights.footer);
$contentSelector.css(this._config.panelAutoHeightMode, (max + offset))
}
} else if (max === heights.window) {
$contentSelector.css(this._config.panelAutoHeightMode, (max + offset) - heights.header - heights.footer)
} else {
$contentSelector.css(this._config.panelAutoHeightMode, (max + offset) - heights.header)
}
if ($('body').hasClass(ClassName.LAYOUT_FIXED)) {
if (offset !== false) {
$(Selector.CONTENT).css('min-height', (max + offset) - heights.header - heights.footer)
}
if (typeof $.fn.overlayScrollbars !== 'undefined') {
$(Selector.SIDEBAR).overlayScrollbars({
className : this._config.scrollbarTheme,
sizeAutoCapable : true,
scrollbars : {
autoHide: this._config.scrollbarAutoHide,
clickScrolling : true
}
})
}
if (this._isFooterFixed()) {
$contentSelector.css(this._config.panelAutoHeightMode, parseFloat($contentSelector.css(this._config.panelAutoHeightMode)) + heights.footer)
}
}
fixLoginRegisterHeight() {
if ($(Selector.LOGIN_BOX + ', ' + Selector.REGISTER_BOX).length === 0) {
$('body, html').css('height', 'auto')
} else if ($(Selector.LOGIN_BOX + ', ' + Selector.REGISTER_BOX).length !== 0) {
let box_height = $(Selector.LOGIN_BOX + ', ' + Selector.REGISTER_BOX).height()
if ($('body').css('min-height') !== box_height) {
$('body').css('min-height', box_height)
}
}
if (!$body.hasClass(CLASS_NAME_LAYOUT_FIXED)) {
return
}
// Private
if (offset !== false) {
$contentSelector.css(this._config.panelAutoHeightMode, (max + offset) - heights.header - heights.footer)
}
_init() {
// Activate layout height watcher
this.fixLayoutHeight()
if (typeof $.fn.overlayScrollbars !== 'undefined') {
$(SELECTOR_SIDEBAR).overlayScrollbars({
className: this._config.scrollbarTheme,
sizeAutoCapable: true,
scrollbars: {
autoHide: this._config.scrollbarAutoHide,
clickScrolling: true
}
})
}
}
if (this._config.loginRegisterAutoHeight === true) {
this.fixLoginRegisterHeight()
} else if (Number.isInteger(this._config.loginRegisterAutoHeight)) {
setInterval(this.fixLoginRegisterHeight, this._config.loginRegisterAutoHeight);
fixLoginRegisterHeight() {
const $body = $('body')
const $selector = $(`${SELECTOR_LOGIN_BOX}, ${SELECTOR_REGISTER_BOX}`)
if ($selector.length === 0) {
$body.css('height', 'auto')
$('html').css('height', 'auto')
} else {
const boxHeight = $selector.height()
if ($body.css(this._config.panelAutoHeightMode) !== boxHeight) {
$body.css(this._config.panelAutoHeightMode, boxHeight)
}
}
}
$(Selector.SIDEBAR)
.on('collapsed.lte.treeview expanded.lte.treeview', () => {
this.fixLayoutHeight()
})
// Private
$(Selector.PUSHMENU_BTN)
.on('collapsed.lte.pushmenu shown.lte.pushmenu', () => {
this.fixLayoutHeight()
})
_init() {
// Activate layout height watcher
this.fixLayoutHeight()
$(Selector.CONTROL_SIDEBAR_BTN)
.on('collapsed.lte.controlsidebar', () => {
this.fixLayoutHeight()
})
.on('expanded.lte.controlsidebar', () => {
this.fixLayoutHeight('control_sidebar')
})
if (this._config.loginRegisterAutoHeight === true) {
this.fixLoginRegisterHeight()
} else if (this._config.loginRegisterAutoHeight === parseInt(this._config.loginRegisterAutoHeight, 10)) {
setInterval(this.fixLoginRegisterHeight, this._config.loginRegisterAutoHeight)
}
$(window).resize(() => {
$(SELECTOR_SIDEBAR)
.on('collapsed.lte.treeview expanded.lte.treeview', () => {
this.fixLayoutHeight()
})
setTimeout(() => {
$('body.hold-transition').removeClass('hold-transition')
}, 50);
}
_max(numbers) {
// Calculate the maximum number in a list
let max = 0
Object.keys(numbers).forEach((key) => {
if (numbers[key] > max) {
max = numbers[key]
}
$(SELECTOR_PUSHMENU_BTN)
.on('collapsed.lte.pushmenu shown.lte.pushmenu', () => {
this.fixLayoutHeight()
})
return max
}
_isFooterFixed() {
return $('.main-footer').css('position') === 'fixed';
}
// Static
static _jQueryInterface(config = '') {
return this.each(function () {
let data = $(this).data(DATA_KEY)
const _options = $.extend({}, Default, $(this).data())
if (!data) {
data = new Layout($(this), _options)
$(this).data(DATA_KEY, data)
}
if (config === 'init' || config === '') {
data['_init']()
} else if (config === 'fixLayoutHeight' || config === 'fixLoginRegisterHeight') {
data[config]()
}
$(SELECTOR_CONTROL_SIDEBAR_BTN)
.on('collapsed.lte.controlsidebar', () => {
this.fixLayoutHeight()
})
}
.on('expanded.lte.controlsidebar', () => {
this.fixLayoutHeight('control_sidebar')
})
$(window).resize(() => {
this.fixLayoutHeight()
})
$(document).ready(() => {
this.fixLayoutHeight()
})
setTimeout(() => {
$('body.hold-transition').removeClass('hold-transition')
}, 50)
}
/**
* Data API
* ====================================================
*/
_max(numbers) {
// Calculate the maximum number in a list
let max = 0
$(window).on('load', () => {
Layout._jQueryInterface.call($('body'))
})
Object.keys(numbers).forEach(key => {
if (numbers[key] > max) {
max = numbers[key]
}
})
$(Selector.SIDEBAR + ' a').on('focusin', () => {
$(Selector.MAIN_SIDEBAR).addClass(ClassName.SIDEBAR_FOCUSED);
})
$(Selector.SIDEBAR + ' a').on('focusout', () => {
$(Selector.MAIN_SIDEBAR).removeClass(ClassName.SIDEBAR_FOCUSED);
})
/**
* jQuery API
* ====================================================
*/
$.fn[NAME] = Layout._jQueryInterface
$.fn[NAME].Constructor = Layout
$.fn[NAME].noConflict = function () {
$.fn[NAME] = JQUERY_NO_CONFLICT
return Layout._jQueryInterface
return max
}
return Layout
})(jQuery)
_isFooterFixed() {
return $(SELECTOR_FOOTER).css('position') === 'fixed'
}
// Static
static _jQueryInterface(config = '') {
return this.each(function () {
let data = $(this).data(DATA_KEY)
const _options = $.extend({}, Default, $(this).data())
if (!data) {
data = new Layout($(this), _options)
$(this).data(DATA_KEY, data)
}
if (config === 'init' || config === '') {
data._init()
} else if (config === 'fixLayoutHeight' || config === 'fixLoginRegisterHeight') {
data[config]()
}
})
}
}
/**
* Data API
* ====================================================
*/
$(window).on('load', () => {
Layout._jQueryInterface.call($('body'))
})
$(`${SELECTOR_SIDEBAR} a`).on('focusin', () => {
$(SELECTOR_MAIN_SIDEBAR).addClass(CLASS_NAME_SIDEBAR_FOCUSED)
})
$(`${SELECTOR_SIDEBAR} a`).on('focusout', () => {
$(SELECTOR_MAIN_SIDEBAR).removeClass(CLASS_NAME_SIDEBAR_FOCUSED)
})
/**
* jQuery API
* ====================================================
*/
$.fn[NAME] = Layout._jQueryInterface
$.fn[NAME].Constructor = Layout
$.fn[NAME].noConflict = function () {
$.fn[NAME] = JQUERY_NO_CONFLICT
return Layout._jQueryInterface
}
export default Layout

View File

@@ -5,221 +5,223 @@
* --------------------------------------------
*/
const PushMenu = (($) => {
/**
* Constants
* ====================================================
*/
import $ from 'jquery'
const NAME = 'PushMenu'
const DATA_KEY = 'lte.pushmenu'
const EVENT_KEY = `.${DATA_KEY}`
const JQUERY_NO_CONFLICT = $.fn[NAME]
/**
* Constants
* ====================================================
*/
const Event = {
COLLAPSED: `collapsed${EVENT_KEY}`,
SHOWN: `shown${EVENT_KEY}`
}
const NAME = 'PushMenu'
const DATA_KEY = 'lte.pushmenu'
const EVENT_KEY = `.${DATA_KEY}`
const JQUERY_NO_CONFLICT = $.fn[NAME]
const Default = {
autoCollapseSize: 992,
enableRemember: false,
noTransitionAfterReload: true
}
const EVENT_COLLAPSED = `collapsed${EVENT_KEY}`
const EVENT_SHOWN = `shown${EVENT_KEY}`
const Selector = {
TOGGLE_BUTTON: '[data-widget="pushmenu"]',
SIDEBAR_MINI: '.sidebar-mini',
SIDEBAR_COLLAPSED: '.sidebar-collapse',
BODY: 'body',
OVERLAY: '#sidebar-overlay',
WRAPPER: '.wrapper'
}
const SELECTOR_TOGGLE_BUTTON = '[data-widget="pushmenu"]'
const SELECTOR_BODY = 'body'
const SELECTOR_OVERLAY = '#sidebar-overlay'
const SELECTOR_WRAPPER = '.wrapper'
const ClassName = {
COLLAPSED: 'sidebar-collapse',
OPEN: 'sidebar-open',
CLOSED: 'sidebar-closed'
}
const CLASS_NAME_COLLAPSED = 'sidebar-collapse'
const CLASS_NAME_OPEN = 'sidebar-open'
const CLASS_NAME_IS_OPENING = 'sidebar-is-opening'
const CLASS_NAME_CLOSED = 'sidebar-closed'
/**
* Class Definition
* ====================================================
*/
const Default = {
autoCollapseSize: 992,
enableRemember: false,
noTransitionAfterReload: true
}
class PushMenu {
constructor(element, options) {
this._element = element
this._options = $.extend({}, Default, options)
/**
* Class Definition
* ====================================================
*/
if (!$(Selector.OVERLAY).length) {
this._addOverlay()
}
class PushMenu {
constructor(element, options) {
this._element = element
this._options = $.extend({}, Default, options)
this._init()
if ($(SELECTOR_OVERLAY).length === 0) {
this._addOverlay()
}
// Public
this._init()
}
expand() {
if (this._options.autoCollapseSize) {
if ($(window).width() <= this._options.autoCollapseSize) {
$(Selector.BODY).addClass(ClassName.OPEN)
}
// Public
expand() {
const $bodySelector = $(SELECTOR_BODY)
if (this._options.autoCollapseSize) {
if ($(window).width() <= this._options.autoCollapseSize) {
$bodySelector.addClass(CLASS_NAME_OPEN)
}
$(Selector.BODY).removeClass(ClassName.COLLAPSED).removeClass(ClassName.CLOSED)
if(this._options.enableRemember) {
localStorage.setItem(`remember${EVENT_KEY}`, ClassName.OPEN)
}
const shownEvent = $.Event(Event.SHOWN)
$(this._element).trigger(shownEvent)
}
collapse() {
if (this._options.autoCollapseSize) {
if ($(window).width() <= this._options.autoCollapseSize) {
$(Selector.BODY).removeClass(ClassName.OPEN).addClass(ClassName.CLOSED)
}
}
$bodySelector.addClass(CLASS_NAME_IS_OPENING).removeClass(`${CLASS_NAME_COLLAPSED} ${CLASS_NAME_CLOSED}`).delay(50).queue(function () {
$bodySelector.removeClass(CLASS_NAME_IS_OPENING)
$(this).dequeue()
})
$(Selector.BODY).addClass(ClassName.COLLAPSED)
if(this._options.enableRemember) {
localStorage.setItem(`remember${EVENT_KEY}`, ClassName.COLLAPSED)
}
const collapsedEvent = $.Event(Event.COLLAPSED)
$(this._element).trigger(collapsedEvent)
if (this._options.enableRemember) {
localStorage.setItem(`remember${EVENT_KEY}`, CLASS_NAME_OPEN)
}
toggle() {
if (!$(Selector.BODY).hasClass(ClassName.COLLAPSED)) {
$(this._element).trigger($.Event(EVENT_SHOWN))
}
collapse() {
const $bodySelector = $(SELECTOR_BODY)
if (this._options.autoCollapseSize) {
if ($(window).width() <= this._options.autoCollapseSize) {
$bodySelector.removeClass(CLASS_NAME_OPEN).addClass(CLASS_NAME_CLOSED)
}
}
$bodySelector.addClass(CLASS_NAME_COLLAPSED)
if (this._options.enableRemember) {
localStorage.setItem(`remember${EVENT_KEY}`, CLASS_NAME_COLLAPSED)
}
$(this._element).trigger($.Event(EVENT_COLLAPSED))
}
toggle() {
if ($(SELECTOR_BODY).hasClass(CLASS_NAME_COLLAPSED)) {
this.expand()
} else {
this.collapse()
}
}
autoCollapse(resize = false) {
if (!this._options.autoCollapseSize) {
return
}
const $bodySelector = $(SELECTOR_BODY)
if ($(window).width() <= this._options.autoCollapseSize) {
if (!$bodySelector.hasClass(CLASS_NAME_OPEN)) {
this.collapse()
} else {
}
} else if (resize === true) {
if ($bodySelector.hasClass(CLASS_NAME_OPEN)) {
$bodySelector.removeClass(CLASS_NAME_OPEN)
} else if ($bodySelector.hasClass(CLASS_NAME_CLOSED)) {
this.expand()
}
}
}
autoCollapse(resize = false) {
if (this._options.autoCollapseSize) {
if ($(window).width() <= this._options.autoCollapseSize) {
if (!$(Selector.BODY).hasClass(ClassName.OPEN)) {
this.collapse()
}
} else if (resize == true) {
if ($(Selector.BODY).hasClass(ClassName.OPEN)) {
$(Selector.BODY).removeClass(ClassName.OPEN)
} else if($(Selector.BODY).hasClass(ClassName.CLOSED)) {
this.expand()
}
}
remember() {
if (!this._options.enableRemember) {
return
}
const $body = $('body')
const toggleState = localStorage.getItem(`remember${EVENT_KEY}`)
if (toggleState === CLASS_NAME_COLLAPSED) {
if (this._options.noTransitionAfterReload) {
$body.addClass('hold-transition').addClass(CLASS_NAME_COLLAPSED).delay(50).queue(function () {
$(this).removeClass('hold-transition')
$(this).dequeue()
})
} else {
$body.addClass(CLASS_NAME_COLLAPSED)
}
}
remember() {
if(this._options.enableRemember) {
let toggleState = localStorage.getItem(`remember${EVENT_KEY}`)
if (toggleState == ClassName.COLLAPSED){
if (this._options.noTransitionAfterReload) {
$("body").addClass('hold-transition').addClass(ClassName.COLLAPSED).delay(50).queue(function() {
$(this).removeClass('hold-transition')
$(this).dequeue()
})
} else {
$("body").addClass(ClassName.COLLAPSED)
}
} else {
if (this._options.noTransitionAfterReload) {
$("body").addClass('hold-transition').removeClass(ClassName.COLLAPSED).delay(50).queue(function() {
$(this).removeClass('hold-transition')
$(this).dequeue()
})
} else {
$("body").removeClass(ClassName.COLLAPSED)
}
}
}
}
// Private
_init() {
this.remember()
this.autoCollapse()
$(window).resize(() => {
this.autoCollapse(true)
})
}
_addOverlay() {
const overlay = $('<div />', {
id: 'sidebar-overlay'
})
overlay.on('click', () => {
this.collapse()
})
$(Selector.WRAPPER).append(overlay)
}
// Static
static _jQueryInterface(operation) {
return this.each(function () {
let data = $(this).data(DATA_KEY)
const _options = $.extend({}, Default, $(this).data())
if (!data) {
data = new PushMenu(this, _options)
$(this).data(DATA_KEY, data)
}
if (typeof operation === 'string' && operation.match(/collapse|expand|toggle/)) {
data[operation]()
}
} else if (this._options.noTransitionAfterReload) {
$body.addClass('hold-transition').removeClass(CLASS_NAME_COLLAPSED).delay(50).queue(function () {
$(this).removeClass('hold-transition')
$(this).dequeue()
})
} else {
$body.removeClass(CLASS_NAME_COLLAPSED)
}
}
/**
* Data API
* ====================================================
*/
// Private
$(document).on('click', Selector.TOGGLE_BUTTON, (event) => {
event.preventDefault()
_init() {
this.remember()
this.autoCollapse()
let button = event.currentTarget
if ($(button).data('widget') !== 'pushmenu') {
button = $(button).closest(Selector.TOGGLE_BUTTON)
}
PushMenu._jQueryInterface.call($(button), 'toggle')
})
$(window).on('load', () => {
PushMenu._jQueryInterface.call($(Selector.TOGGLE_BUTTON))
})
/**
* jQuery API
* ====================================================
*/
$.fn[NAME] = PushMenu._jQueryInterface
$.fn[NAME].Constructor = PushMenu
$.fn[NAME].noConflict = function () {
$.fn[NAME] = JQUERY_NO_CONFLICT
return PushMenu._jQueryInterface
$(window).resize(() => {
this.autoCollapse(true)
})
}
return PushMenu
})(jQuery)
_addOverlay() {
const overlay = $('<div />', {
id: 'sidebar-overlay'
})
overlay.on('click', () => {
this.collapse()
})
$(SELECTOR_WRAPPER).append(overlay)
}
// Static
static _jQueryInterface(operation) {
return this.each(function () {
let data = $(this).data(DATA_KEY)
const _options = $.extend({}, Default, $(this).data())
if (!data) {
data = new PushMenu(this, _options)
$(this).data(DATA_KEY, data)
}
if (typeof operation === 'string' && operation.match(/collapse|expand|toggle/)) {
data[operation]()
}
})
}
}
/**
* Data API
* ====================================================
*/
$(document).on('click', SELECTOR_TOGGLE_BUTTON, event => {
event.preventDefault()
let button = event.currentTarget
if ($(button).data('widget') !== 'pushmenu') {
button = $(button).closest(SELECTOR_TOGGLE_BUTTON)
}
PushMenu._jQueryInterface.call($(button), 'toggle')
})
$(window).on('load', () => {
PushMenu._jQueryInterface.call($(SELECTOR_TOGGLE_BUTTON))
})
/**
* jQuery API
* ====================================================
*/
$.fn[NAME] = PushMenu._jQueryInterface
$.fn[NAME].Constructor = PushMenu
$.fn[NAME].noConflict = function () {
$.fn[NAME] = JQUERY_NO_CONFLICT
return PushMenu._jQueryInterface
}
export default PushMenu

293
build/js/SidebarSearch.js Normal file
View File

@@ -0,0 +1,293 @@
/**
* --------------------------------------------
* AdminLTE SidebarSearch.js
* License MIT
* --------------------------------------------
*/
import $, { trim } from 'jquery'
/**
* Constants
* ====================================================
*/
const NAME = 'SidebarSearch'
const DATA_KEY = 'lte.sidebar-search'
const JQUERY_NO_CONFLICT = $.fn[NAME]
const CLASS_NAME_OPEN = 'sidebar-search-open'
const CLASS_NAME_ICON_SEARCH = 'fa-search'
const CLASS_NAME_ICON_CLOSE = 'fa-times'
const CLASS_NAME_HEADER = 'nav-header'
const CLASS_NAME_SEARCH_RESULTS = 'sidebar-search-results'
const CLASS_NAME_LIST_GROUP = 'list-group'
const SELECTOR_DATA_WIDGET = '[data-widget="sidebar-search"]'
const SELECTOR_SIDEBAR = '.main-sidebar .nav-sidebar'
const SELECTOR_NAV_LINK = '.nav-link'
const SELECTOR_NAV_TREEVIEW = '.nav-treeview'
const SELECTOR_SEARCH_INPUT = `${SELECTOR_DATA_WIDGET} .form-control`
const SELECTOR_SEARCH_BUTTON = `${SELECTOR_DATA_WIDGET} .btn`
const SELECTOR_SEARCH_ICON = `${SELECTOR_SEARCH_BUTTON} i`
const SELECTOR_SEARCH_LIST_GROUP = `.${CLASS_NAME_LIST_GROUP}`
const SELECTOR_SEARCH_RESULTS = `.${CLASS_NAME_SEARCH_RESULTS}`
const SELECTOR_SEARCH_RESULTS_GROUP = `${SELECTOR_SEARCH_RESULTS} .${CLASS_NAME_LIST_GROUP}`
const Default = {
arrowSign: '->',
minLength: 3,
maxResults: 7,
highlightName: true,
highlightPath: false,
highlightClass: 'text-light',
notFoundText: 'No element found!'
}
const SearchItems = []
/**
* Class Definition
* ====================================================
*/
class SidebarSearch {
constructor(_element, _options) {
this.element = _element
this.options = $.extend({}, Default, _options)
this.items = []
}
// Public
init() {
if ($(SELECTOR_DATA_WIDGET).length == 0) {
return
}
if ($(SELECTOR_DATA_WIDGET).next(SELECTOR_SEARCH_RESULTS).length == 0) {
$(SELECTOR_DATA_WIDGET).after(
$('<div />', { class: CLASS_NAME_SEARCH_RESULTS })
)
}
if ($(SELECTOR_SEARCH_RESULTS).children(SELECTOR_SEARCH_LIST_GROUP).length == 0) {
$(SELECTOR_SEARCH_RESULTS).append(
$('<div />', { class: CLASS_NAME_LIST_GROUP })
)
}
this._addNotFound()
$(SELECTOR_SIDEBAR).children().each((i, child) => {
this._parseItem(child)
})
}
search() {
const searchValue = $(SELECTOR_SEARCH_INPUT).val().toLowerCase()
if (searchValue.length < this.options.minLength) {
$(SELECTOR_SEARCH_RESULTS_GROUP).empty()
this._addNotFound()
this.close()
return
}
const searchResults = SearchItems.filter(item => (item.name).toLowerCase().includes(searchValue))
const endResults = $(searchResults.slice(0, this.options.maxResults))
$(SELECTOR_SEARCH_RESULTS_GROUP).empty()
if (endResults.length === 0) {
this._addNotFound()
} else {
endResults.each((i, result) => {
$(SELECTOR_SEARCH_RESULTS_GROUP).append(this._renderItem(result.name, result.link, result.path))
})
}
this.open()
}
open() {
$(SELECTOR_DATA_WIDGET).parent().addClass(CLASS_NAME_OPEN)
$(SELECTOR_SEARCH_ICON).removeClass(CLASS_NAME_ICON_SEARCH).addClass(CLASS_NAME_ICON_CLOSE)
}
close() {
$(SELECTOR_DATA_WIDGET).parent().removeClass(CLASS_NAME_OPEN)
$(SELECTOR_SEARCH_ICON).removeClass(CLASS_NAME_ICON_CLOSE).addClass(CLASS_NAME_ICON_SEARCH)
}
toggle() {
if ($(SELECTOR_DATA_WIDGET).parent().hasClass(CLASS_NAME_OPEN)) {
this.close()
} else {
this.open()
}
}
// Private
_parseItem(item, path = []) {
if ($(item).hasClass(CLASS_NAME_HEADER)) {
return
}
const itemObject = {}
const navLink = $(item).clone().find(`> ${SELECTOR_NAV_LINK}`)
const navTreeview = $(item).clone().find(`> ${SELECTOR_NAV_TREEVIEW}`)
const link = navLink.attr('href')
const name = navLink.find('p').children().remove().end().text()
itemObject.name = this._trimText(name)
itemObject.link = link
itemObject.path = path
if (navTreeview.length === 0) {
SearchItems.push(itemObject)
} else {
const newPath = itemObject.path.concat([itemObject.name])
navTreeview.children().each((i, child) => {
this._parseItem(child, newPath)
})
}
}
_trimText(text) {
return trim(text.replace(/(\r\n|\n|\r)/gm, ' '))
}
_renderItem(name, link, path) {
path = path.join(` ${this.options.arrowSign} `)
if (this.options.highlightName || this.options.highlightPath) {
const searchValue = $(SELECTOR_SEARCH_INPUT).val().toLowerCase()
const regExp = new RegExp(searchValue, 'gi')
if (this.options.highlightName) {
name = name.replace(
regExp,
str => {
return `<b class="${this.options.highlightClass}">${str}</b>`
}
)
}
if (this.options.highlightPath) {
path = path.replace(
regExp,
str => {
return `<b class="${this.options.highlightClass}">${str}</b>`
}
)
}
}
return `<a href="${link}" class="list-group-item">
<div class="search-title">
${name}
</div>
<div class="search-path">
${path}
</div>
</a>`
}
_addNotFound() {
$(SELECTOR_SEARCH_RESULTS_GROUP).append(this._renderItem(this.options.notFoundText, '#', []))
}
// Static
static _jQueryInterface(config) {
let data = $(this).data(DATA_KEY)
if (!data) {
data = $(this).data()
}
const _options = $.extend({}, Default, typeof config === 'object' ? config : data)
const plugin = new SidebarSearch($(this), _options)
$(this).data(DATA_KEY, typeof config === 'object' ? config : data)
if (typeof config === 'string' && config.match(/init|toggle|close|open|search/)) {
plugin[config]()
} else {
plugin.init()
}
}
}
/**
* Data API
* ====================================================
*/
$(document).on('click', SELECTOR_SEARCH_BUTTON, event => {
event.preventDefault()
SidebarSearch._jQueryInterface.call($(SELECTOR_DATA_WIDGET), 'toggle')
})
$(document).on('keyup', SELECTOR_SEARCH_INPUT, event => {
if (event.keyCode == 38) {
event.preventDefault()
$(SELECTOR_SEARCH_RESULTS_GROUP).children().last().focus()
return
}
if (event.keyCode == 40) {
event.preventDefault()
$(SELECTOR_SEARCH_RESULTS_GROUP).children().first().focus()
return
}
let timer = 0
clearTimeout(timer)
timer = setTimeout(() => {
SidebarSearch._jQueryInterface.call($(SELECTOR_DATA_WIDGET), 'search')
}, 100)
})
$(document).on('keydown', SELECTOR_SEARCH_RESULTS_GROUP, event => {
const $focused = $(':focus')
if (event.keyCode == 38) {
event.preventDefault()
if ($focused.is(':first-child')) {
$focused.siblings().last().focus()
} else {
$focused.prev().focus()
}
}
if (event.keyCode == 40) {
event.preventDefault()
if ($focused.is(':last-child')) {
$focused.siblings().first().focus()
} else {
$focused.next().focus()
}
}
})
$(window).on('load', () => {
SidebarSearch._jQueryInterface.call($(SELECTOR_DATA_WIDGET), 'init')
})
/**
* jQuery API
* ====================================================
*/
$.fn[NAME] = SidebarSearch._jQueryInterface
$.fn[NAME].Constructor = SidebarSearch
$.fn[NAME].noConflict = function () {
$.fn[NAME] = JQUERY_NO_CONFLICT
return SidebarSearch._jQueryInterface
}
export default SidebarSearch

View File

@@ -5,123 +5,113 @@
* --------------------------------------------
*/
const SiteSearch = (($) => {
/**
* Constants
* ====================================================
*/
import $ from 'jquery'
const NAME = 'SiteSearch'
const DATA_KEY = 'lte.site-search'
const EVENT_KEY = `.${DATA_KEY}`
const JQUERY_NO_CONFLICT = $.fn[NAME]
/**
* Constants
* ====================================================
*/
const Event = {}
const NAME = 'SiteSearch'
const DATA_KEY = 'lte.site-search'
const JQUERY_NO_CONFLICT = $.fn[NAME]
const Selector = {
TOGGLE_BUTTON : '[data-widget="site-search"]',
SEARCH_BLOCK : '.site-search-block',
SEARCH_BACKDROP: '.site-search-backdrop',
SEARCH_INPUT : '.site-search-block .form-control'
const SELECTOR_TOGGLE_BUTTON = '[data-widget="site-search"]'
const SELECTOR_SEARCH_BLOCK = '.site-search-block'
const SELECTOR_SEARCH_BACKDROP = '.site-search-backdrop'
const SELECTOR_SEARCH_INPUT = '.site-search-block .form-control'
const CLASS_NAME_OPEN = 'site-search-open'
const Default = {
transitionSpeed: 300
}
/**
* Class Definition
* ====================================================
*/
class SiteSearch {
constructor(_element, _options) {
this.element = _element
this.options = $.extend({}, Default, _options)
}
const ClassName = {
OPEN: 'site-search-open'
// Public
open() {
$(SELECTOR_SEARCH_BLOCK).slideDown(this.options.transitionSpeed)
$(SELECTOR_SEARCH_BACKDROP).show(0)
$(SELECTOR_SEARCH_INPUT).focus()
$(SELECTOR_SEARCH_BLOCK).addClass(CLASS_NAME_OPEN)
}
const Default = {
transitionSpeed: 300
close() {
$(SELECTOR_SEARCH_BLOCK).slideUp(this.options.transitionSpeed)
$(SELECTOR_SEARCH_BACKDROP).hide(0)
$(SELECTOR_SEARCH_BLOCK).removeClass(CLASS_NAME_OPEN)
}
/**
* Class Definition
* ====================================================
*/
class SiteSearch {
constructor(_element, _options) {
this.element = _element
this.options = $.extend({}, Default, _options)
toggle() {
if ($(SELECTOR_SEARCH_BLOCK).hasClass(CLASS_NAME_OPEN)) {
this.close()
} else {
this.open()
}
}
// Public
// Static
open() {
$(Selector.SEARCH_BLOCK).slideDown(this.options.transitionSpeed)
$(Selector.SEARCH_BACKDROP).show(0)
$(Selector.SEARCH_INPUT).focus()
$(Selector.SEARCH_BLOCK).addClass(ClassName.OPEN)
}
static _jQueryInterface(options) {
return this.each(function () {
let data = $(this).data(DATA_KEY)
close() {
$(Selector.SEARCH_BLOCK).slideUp(this.options.transitionSpeed)
$(Selector.SEARCH_BACKDROP).hide(0)
$(Selector.SEARCH_BLOCK).removeClass(ClassName.OPEN)
}
toggle() {
if ($(Selector.SEARCH_BLOCK).hasClass(ClassName.OPEN)) {
this.close()
} else {
this.open()
if (!data) {
data = new SiteSearch(this, options)
$(this).data(DATA_KEY, data)
}
}
// Static
if (!/toggle|close/.test(options)) {
throw new Error(`Undefined method ${options}`)
}
static _jQueryInterface(options) {
return this.each(function () {
let data = $(this).data(DATA_KEY)
data[options]()
})
}
}
if (!data) {
data = new SiteSearch(this, options)
$(this).data(DATA_KEY, data)
}
/**
* Data API
* ====================================================
*/
$(document).on('click', SELECTOR_TOGGLE_BUTTON, event => {
event.preventDefault()
if (!/toggle|close/.test(options)) {
throw Error(`Undefined method ${options}`)
}
let button = $(event.currentTarget)
data[options]()
})
}
if (button.data('widget') !== 'site-search') {
button = button.closest(SELECTOR_TOGGLE_BUTTON)
}
/**
* Data API
* ====================================================
*/
$(document).on('click', Selector.TOGGLE_BUTTON, (event) => {
event.preventDefault()
SiteSearch._jQueryInterface.call(button, 'toggle')
})
let button = $(event.currentTarget)
$(document).on('click', SELECTOR_SEARCH_BACKDROP, event => {
const backdrop = $(event.currentTarget)
SiteSearch._jQueryInterface.call(backdrop, 'close')
})
if (button.data('widget') !== 'site-search') {
button = button.closest(Selector.TOGGLE_BUTTON)
}
/**
* jQuery API
* ====================================================
*/
SiteSearch._jQueryInterface.call(button, 'toggle')
})
$(document).on('click', Selector.SEARCH_BACKDROP, (event) => {
const backdrop = $(event.currentTarget)
SiteSearch._jQueryInterface.call(backdrop, 'close')
})
/**
* jQuery API
* ====================================================
*/
$.fn[NAME] = SiteSearch._jQueryInterface
$.fn[NAME].Constructor = SiteSearch
$.fn[NAME].noConflict = function () {
$.fn[NAME] = JQUERY_NO_CONFLICT
return SiteSearch._jQueryInterface
}
return SiteSearch
})(jQuery)
$.fn[NAME] = SiteSearch._jQueryInterface
$.fn[NAME].Constructor = SiteSearch
$.fn[NAME].noConflict = function () {
$.fn[NAME] = JQUERY_NO_CONFLICT
return SiteSearch._jQueryInterface
}
export default SiteSearch

View File

@@ -5,225 +5,205 @@
* --------------------------------------------
*/
const Toasts = (($) => {
/**
* Constants
* ====================================================
*/
import $ from 'jquery'
const NAME = 'Toasts'
const DATA_KEY = 'lte.toasts'
const EVENT_KEY = `.${DATA_KEY}`
const JQUERY_NO_CONFLICT = $.fn[NAME]
/**
* Constants
* ====================================================
*/
const Event = {
INIT: `init${EVENT_KEY}`,
CREATED: `created${EVENT_KEY}`,
REMOVED: `removed${EVENT_KEY}`,
const NAME = 'Toasts'
const DATA_KEY = 'lte.toasts'
const EVENT_KEY = `.${DATA_KEY}`
const JQUERY_NO_CONFLICT = $.fn[NAME]
const EVENT_INIT = `init${EVENT_KEY}`
const EVENT_CREATED = `created${EVENT_KEY}`
const EVENT_REMOVED = `removed${EVENT_KEY}`
const SELECTOR_CONTAINER_TOP_RIGHT = '#toastsContainerTopRight'
const SELECTOR_CONTAINER_TOP_LEFT = '#toastsContainerTopLeft'
const SELECTOR_CONTAINER_BOTTOM_RIGHT = '#toastsContainerBottomRight'
const SELECTOR_CONTAINER_BOTTOM_LEFT = '#toastsContainerBottomLeft'
const CLASS_NAME_TOP_RIGHT = 'toasts-top-right'
const CLASS_NAME_TOP_LEFT = 'toasts-top-left'
const CLASS_NAME_BOTTOM_RIGHT = 'toasts-bottom-right'
const CLASS_NAME_BOTTOM_LEFT = 'toasts-bottom-left'
const POSITION_TOP_RIGHT = 'topRight'
const POSITION_TOP_LEFT = 'topLeft'
const POSITION_BOTTOM_RIGHT = 'bottomRight'
const POSITION_BOTTOM_LEFT = 'bottomLeft'
const Default = {
position: POSITION_TOP_RIGHT,
fixed: true,
autohide: false,
autoremove: true,
delay: 1000,
fade: true,
icon: null,
image: null,
imageAlt: null,
imageHeight: '25px',
title: null,
subtitle: null,
close: true,
body: null,
class: null
}
/**
* Class Definition
* ====================================================
*/
class Toasts {
constructor(element, config) {
this._config = config
this._prepareContainer()
$('body').trigger($.Event(EVENT_INIT))
}
const Selector = {
BODY: 'toast-body',
CONTAINER_TOP_RIGHT: '#toastsContainerTopRight',
CONTAINER_TOP_LEFT: '#toastsContainerTopLeft',
CONTAINER_BOTTOM_RIGHT: '#toastsContainerBottomRight',
CONTAINER_BOTTOM_LEFT: '#toastsContainerBottomLeft',
}
// Public
const ClassName = {
TOP_RIGHT: 'toasts-top-right',
TOP_LEFT: 'toasts-top-left',
BOTTOM_RIGHT: 'toasts-bottom-right',
BOTTOM_LEFT: 'toasts-bottom-left',
FADE: 'fade',
}
create() {
const toast = $('<div class="toast" role="alert" aria-live="assertive" aria-atomic="true"/>')
const Position = {
TOP_RIGHT: 'topRight',
TOP_LEFT: 'topLeft',
BOTTOM_RIGHT: 'bottomRight',
BOTTOM_LEFT: 'bottomLeft',
}
toast.data('autohide', this._config.autohide)
toast.data('animation', this._config.fade)
const Id = {
CONTAINER_TOP_RIGHT: 'toastsContainerTopRight',
CONTAINER_TOP_LEFT: 'toastsContainerTopLeft',
CONTAINER_BOTTOM_RIGHT: 'toastsContainerBottomRight',
CONTAINER_BOTTOM_LEFT: 'toastsContainerBottomLeft',
}
const Default = {
position: Position.TOP_RIGHT,
fixed: true,
autohide: false,
autoremove: true,
delay: 1000,
fade: true,
icon: null,
image: null,
imageAlt: null,
imageHeight: '25px',
title: null,
subtitle: null,
close: true,
body: null,
class: null,
}
/**
* Class Definition
* ====================================================
*/
class Toasts {
constructor(element, config) {
this._config = config
this._prepareContainer();
const initEvent = $.Event(Event.INIT)
$('body').trigger(initEvent)
if (this._config.class) {
toast.addClass(this._config.class)
}
// Public
create() {
var toast = $('<div class="toast" role="alert" aria-live="assertive" aria-atomic="true"/>')
toast.data('autohide', this._config.autohide)
toast.data('animation', this._config.fade)
if (this._config.class) {
toast.addClass(this._config.class)
}
if (this._config.delay && this._config.delay != 500) {
toast.data('delay', this._config.delay)
}
var toast_header = $('<div class="toast-header">')
if (this._config.image != null) {
var toast_image = $('<img />').addClass('rounded mr-2').attr('src', this._config.image).attr('alt', this._config.imageAlt)
if (this._config.imageHeight != null) {
toast_image.height(this._config.imageHeight).width('auto')
}
toast_header.append(toast_image)
}
if (this._config.icon != null) {
toast_header.append($('<i />').addClass('mr-2').addClass(this._config.icon))
}
if (this._config.title != null) {
toast_header.append($('<strong />').addClass('mr-auto').html(this._config.title))
}
if (this._config.subtitle != null) {
toast_header.append($('<small />').html(this._config.subtitle))
}
if (this._config.close == true) {
var toast_close = $('<button data-dismiss="toast" />').attr('type', 'button').addClass('ml-2 mb-1 close').attr('aria-label', 'Close').append('<span aria-hidden="true">&times;</span>')
if (this._config.title == null) {
toast_close.toggleClass('ml-2 ml-auto')
}
toast_header.append(toast_close)
}
toast.append(toast_header)
if (this._config.body != null) {
toast.append($('<div class="toast-body" />').html(this._config.body))
}
$(this._getContainerId()).prepend(toast)
const createdEvent = $.Event(Event.CREATED)
$('body').trigger(createdEvent)
toast.toast('show')
if (this._config.autoremove) {
toast.on('hidden.bs.toast', function () {
$(this).delay(200).remove();
const removedEvent = $.Event(Event.REMOVED)
$('body').trigger(removedEvent)
})
}
if (this._config.delay && this._config.delay != 500) {
toast.data('delay', this._config.delay)
}
// Static
const toastHeader = $('<div class="toast-header">')
_getContainerId() {
if (this._config.position == Position.TOP_RIGHT) {
return Selector.CONTAINER_TOP_RIGHT;
} else if (this._config.position == Position.TOP_LEFT) {
return Selector.CONTAINER_TOP_LEFT;
} else if (this._config.position == Position.BOTTOM_RIGHT) {
return Selector.CONTAINER_BOTTOM_RIGHT;
} else if (this._config.position == Position.BOTTOM_LEFT) {
return Selector.CONTAINER_BOTTOM_LEFT;
if (this._config.image != null) {
const toastImage = $('<img />').addClass('rounded mr-2').attr('src', this._config.image).attr('alt', this._config.imageAlt)
if (this._config.imageHeight != null) {
toastImage.height(this._config.imageHeight).width('auto')
}
toastHeader.append(toastImage)
}
_prepareContainer() {
if ($(this._getContainerId()).length === 0) {
var container = $('<div />').attr('id', this._getContainerId().replace('#', ''))
if (this._config.position == Position.TOP_RIGHT) {
container.addClass(ClassName.TOP_RIGHT)
} else if (this._config.position == Position.TOP_LEFT) {
container.addClass(ClassName.TOP_LEFT)
} else if (this._config.position == Position.BOTTOM_RIGHT) {
container.addClass(ClassName.BOTTOM_RIGHT)
} else if (this._config.position == Position.BOTTOM_LEFT) {
container.addClass(ClassName.BOTTOM_LEFT)
}
$('body').append(container)
}
if (this._config.fixed) {
$(this._getContainerId()).addClass('fixed')
} else {
$(this._getContainerId()).removeClass('fixed')
}
if (this._config.icon != null) {
toastHeader.append($('<i />').addClass('mr-2').addClass(this._config.icon))
}
// Static
if (this._config.title != null) {
toastHeader.append($('<strong />').addClass('mr-auto').html(this._config.title))
}
static _jQueryInterface(option, config) {
return this.each(function () {
const _options = $.extend({}, Default, config)
var toast = new Toasts($(this), _options)
if (this._config.subtitle != null) {
toastHeader.append($('<small />').html(this._config.subtitle))
}
if (option === 'create') {
toast[option]()
}
if (this._config.close == true) {
const toastClose = $('<button data-dismiss="toast" />').attr('type', 'button').addClass('ml-2 mb-1 close').attr('aria-label', 'Close').append('<span aria-hidden="true">&times;</span>')
if (this._config.title == null) {
toastClose.toggleClass('ml-2 ml-auto')
}
toastHeader.append(toastClose)
}
toast.append(toastHeader)
if (this._config.body != null) {
toast.append($('<div class="toast-body" />').html(this._config.body))
}
$(this._getContainerId()).prepend(toast)
const $body = $('body')
$body.trigger($.Event(EVENT_CREATED))
toast.toast('show')
if (this._config.autoremove) {
toast.on('hidden.bs.toast', function () {
$(this).delay(200).remove()
$body.trigger($.Event(EVENT_REMOVED))
})
}
}
/**
* jQuery API
* ====================================================
*/
// Static
$.fn[NAME] = Toasts._jQueryInterface
$.fn[NAME].Constructor = Toasts
$.fn[NAME].noConflict = function () {
$.fn[NAME] = JQUERY_NO_CONFLICT
return Toasts._jQueryInterface
_getContainerId() {
if (this._config.position == POSITION_TOP_RIGHT) {
return SELECTOR_CONTAINER_TOP_RIGHT
}
if (this._config.position == POSITION_TOP_LEFT) {
return SELECTOR_CONTAINER_TOP_LEFT
}
if (this._config.position == POSITION_BOTTOM_RIGHT) {
return SELECTOR_CONTAINER_BOTTOM_RIGHT
}
if (this._config.position == POSITION_BOTTOM_LEFT) {
return SELECTOR_CONTAINER_BOTTOM_LEFT
}
}
return Toasts
})(jQuery)
_prepareContainer() {
if ($(this._getContainerId()).length === 0) {
const container = $('<div />').attr('id', this._getContainerId().replace('#', ''))
if (this._config.position == POSITION_TOP_RIGHT) {
container.addClass(CLASS_NAME_TOP_RIGHT)
} else if (this._config.position == POSITION_TOP_LEFT) {
container.addClass(CLASS_NAME_TOP_LEFT)
} else if (this._config.position == POSITION_BOTTOM_RIGHT) {
container.addClass(CLASS_NAME_BOTTOM_RIGHT)
} else if (this._config.position == POSITION_BOTTOM_LEFT) {
container.addClass(CLASS_NAME_BOTTOM_LEFT)
}
$('body').append(container)
}
if (this._config.fixed) {
$(this._getContainerId()).addClass('fixed')
} else {
$(this._getContainerId()).removeClass('fixed')
}
}
// Static
static _jQueryInterface(option, config) {
return this.each(function () {
const _options = $.extend({}, Default, config)
const toast = new Toasts($(this), _options)
if (option === 'create') {
toast[option]()
}
})
}
}
/**
* jQuery API
* ====================================================
*/
$.fn[NAME] = Toasts._jQueryInterface
$.fn[NAME].Constructor = Toasts
$.fn[NAME].noConflict = function () {
$.fn[NAME] = JQUERY_NO_CONFLICT
return Toasts._jQueryInterface
}
export default Toasts

View File

@@ -5,118 +5,114 @@
* --------------------------------------------
*/
const TodoList = (($) => {
/**
* Constants
* ====================================================
*/
import $ from 'jquery'
const NAME = 'TodoList'
const DATA_KEY = 'lte.todolist'
const EVENT_KEY = `.${DATA_KEY}`
const JQUERY_NO_CONFLICT = $.fn[NAME]
/**
* Constants
* ====================================================
*/
const Selector = {
DATA_TOGGLE: '[data-widget="todo-list"]'
const NAME = 'TodoList'
const DATA_KEY = 'lte.todolist'
const JQUERY_NO_CONFLICT = $.fn[NAME]
const SELECTOR_DATA_TOGGLE = '[data-widget="todo-list"]'
const CLASS_NAME_TODO_LIST_DONE = 'done'
const Default = {
onCheck(item) {
return item
},
onUnCheck(item) {
return item
}
}
/**
* Class Definition
* ====================================================
*/
class TodoList {
constructor(element, config) {
this._config = config
this._element = element
this._init()
}
const ClassName = {
TODO_LIST_DONE: 'done'
}
// Public
const Default = {
onCheck: function (item) {
return item;
},
onUnCheck: function (item) {
return item;
}
}
/**
* Class Definition
* ====================================================
*/
class TodoList {
constructor(element, config) {
this._config = config
this._element = element
this._init()
toggle(item) {
item.parents('li').toggleClass(CLASS_NAME_TODO_LIST_DONE)
if (!$(item).prop('checked')) {
this.unCheck($(item))
return
}
// Public
this.check(item)
}
toggle(item) {
item.parents('li').toggleClass(ClassName.TODO_LIST_DONE);
if (! $(item).prop('checked')) {
this.unCheck($(item));
return;
check(item) {
this._config.onCheck.call(item)
}
unCheck(item) {
this._config.onUnCheck.call(item)
}
// Private
_init() {
const $toggleSelector = this._element
$toggleSelector.find('input:checkbox:checked').parents('li').toggleClass(CLASS_NAME_TODO_LIST_DONE)
$toggleSelector.on('change', 'input:checkbox', event => {
this.toggle($(event.target))
})
}
// Static
static _jQueryInterface(config) {
return this.each(function () {
let data = $(this).data(DATA_KEY)
if (!data) {
data = $(this).data()
}
this.check(item);
}
const _options = $.extend({}, Default, typeof config === 'object' ? config : data)
const plugin = new TodoList($(this), _options)
check (item) {
this._config.onCheck.call(item);
}
$(this).data(DATA_KEY, typeof config === 'object' ? config : data)
unCheck (item) {
this._config.onUnCheck.call(item);
}
// Private
_init() {
var that = this
$(Selector.DATA_TOGGLE).find('input:checkbox:checked').parents('li').toggleClass(ClassName.TODO_LIST_DONE)
$(Selector.DATA_TOGGLE).on('change', 'input:checkbox', (event) => {
that.toggle($(event.target))
})
}
// Static
static _jQueryInterface(config) {
return this.each(function () {
let data = $(this).data(DATA_KEY)
const _options = $.extend({}, Default, $(this).data())
if (!data) {
data = new TodoList($(this), _options)
$(this).data(DATA_KEY, data)
}
if (config === 'init') {
data[config]()
}
})
}
if (config === 'init') {
plugin[config]()
}
})
}
}
/**
* Data API
* ====================================================
*/
/**
* Data API
* ====================================================
*/
$(window).on('load', () => {
TodoList._jQueryInterface.call($(Selector.DATA_TOGGLE))
})
$(window).on('load', () => {
TodoList._jQueryInterface.call($(SELECTOR_DATA_TOGGLE))
})
/**
* jQuery API
* ====================================================
*/
/**
* jQuery API
* ====================================================
*/
$.fn[NAME] = TodoList._jQueryInterface
$.fn[NAME].Constructor = TodoList
$.fn[NAME].noConflict = function () {
$.fn[NAME] = JQUERY_NO_CONFLICT
return TodoList._jQueryInterface
}
return TodoList
})(jQuery)
$.fn[NAME] = TodoList._jQueryInterface
$.fn[NAME].Constructor = TodoList
$.fn[NAME].noConflict = function () {
$.fn[NAME] = JQUERY_NO_CONFLICT
return TodoList._jQueryInterface
}
export default TodoList

View File

@@ -5,181 +5,171 @@
* --------------------------------------------
*/
const Treeview = (($) => {
/**
* Constants
* ====================================================
*/
import $ from 'jquery'
const NAME = 'Treeview'
const DATA_KEY = 'lte.treeview'
const EVENT_KEY = `.${DATA_KEY}`
const JQUERY_NO_CONFLICT = $.fn[NAME]
/**
* Constants
* ====================================================
*/
const Event = {
SELECTED : `selected${EVENT_KEY}`,
EXPANDED : `expanded${EVENT_KEY}`,
COLLAPSED : `collapsed${EVENT_KEY}`,
LOAD_DATA_API: `load${EVENT_KEY}`
const NAME = 'Treeview'
const DATA_KEY = 'lte.treeview'
const EVENT_KEY = `.${DATA_KEY}`
const JQUERY_NO_CONFLICT = $.fn[NAME]
const EVENT_EXPANDED = `expanded${EVENT_KEY}`
const EVENT_COLLAPSED = `collapsed${EVENT_KEY}`
const EVENT_LOAD_DATA_API = `load${EVENT_KEY}`
const SELECTOR_LI = '.nav-item'
const SELECTOR_LINK = '.nav-link'
const SELECTOR_TREEVIEW_MENU = '.nav-treeview'
const SELECTOR_OPEN = '.menu-open'
const SELECTOR_DATA_WIDGET = '[data-widget="treeview"]'
const CLASS_NAME_OPEN = 'menu-open'
const CLASS_NAME_IS_OPENING = 'menu-is-opening'
const CLASS_NAME_SIDEBAR_COLLAPSED = 'sidebar-collapse'
const Default = {
trigger: `${SELECTOR_DATA_WIDGET} ${SELECTOR_LINK}`,
animationSpeed: 300,
accordion: true,
expandSidebar: false,
sidebarButtonSelector: '[data-widget="pushmenu"]'
}
/**
* Class Definition
* ====================================================
*/
class Treeview {
constructor(element, config) {
this._config = config
this._element = element
}
const Selector = {
LI : '.nav-item',
LINK : '.nav-link',
TREEVIEW_MENU: '.nav-treeview',
OPEN : '.menu-open',
DATA_WIDGET : '[data-widget="treeview"]'
// Public
init() {
$(`${SELECTOR_LI}${SELECTOR_OPEN} ${SELECTOR_TREEVIEW_MENU}`).css('display', 'block')
this._setupListeners()
}
const ClassName = {
LI : 'nav-item',
LINK : 'nav-link',
TREEVIEW_MENU : 'nav-treeview',
OPEN : 'menu-open',
SIDEBAR_COLLAPSED: 'sidebar-collapse'
}
expand(treeviewMenu, parentLi) {
const expandedEvent = $.Event(EVENT_EXPANDED)
const Default = {
trigger : `${Selector.DATA_WIDGET} ${Selector.LINK}`,
animationSpeed : 300,
accordion : true,
expandSidebar : false,
sidebarButtonSelector: '[data-widget="pushmenu"]'
}
/**
* Class Definition
* ====================================================
*/
class Treeview {
constructor(element, config) {
this._config = config
this._element = element
if (this._config.accordion) {
const openMenuLi = parentLi.siblings(SELECTOR_OPEN).first()
const openTreeview = openMenuLi.find(SELECTOR_TREEVIEW_MENU).first()
this.collapse(openTreeview, openMenuLi)
}
// Public
init() {
this._setupListeners()
}
expand(treeviewMenu, parentLi) {
const expandedEvent = $.Event(Event.EXPANDED)
if (this._config.accordion) {
const openMenuLi = parentLi.siblings(Selector.OPEN).first()
const openTreeview = openMenuLi.find(Selector.TREEVIEW_MENU).first()
this.collapse(openTreeview, openMenuLi)
}
treeviewMenu.stop().slideDown(this._config.animationSpeed, () => {
parentLi.addClass(ClassName.OPEN)
$(this._element).trigger(expandedEvent)
})
if (this._config.expandSidebar) {
this._expandSidebar()
}
}
collapse(treeviewMenu, parentLi) {
const collapsedEvent = $.Event(Event.COLLAPSED)
treeviewMenu.stop().slideUp(this._config.animationSpeed, () => {
parentLi.removeClass(ClassName.OPEN)
$(this._element).trigger(collapsedEvent)
treeviewMenu.find(`${Selector.OPEN} > ${Selector.TREEVIEW_MENU}`).slideUp()
treeviewMenu.find(Selector.OPEN).removeClass(ClassName.OPEN)
})
}
toggle(event) {
const $relativeTarget = $(event.currentTarget)
const $parent = $relativeTarget.parent()
let treeviewMenu = $parent.find('> ' + Selector.TREEVIEW_MENU)
if (!treeviewMenu.is(Selector.TREEVIEW_MENU)) {
if (!$parent.is(Selector.LI)) {
treeviewMenu = $parent.parent().find('> ' + Selector.TREEVIEW_MENU)
}
if (!treeviewMenu.is(Selector.TREEVIEW_MENU)) {
return
}
}
event.preventDefault()
const parentLi = $relativeTarget.parents(Selector.LI).first()
const isOpen = parentLi.hasClass(ClassName.OPEN)
if (isOpen) {
this.collapse($(treeviewMenu), parentLi)
} else {
this.expand($(treeviewMenu), parentLi)
}
}
// Private
_setupListeners() {
$(document).on('click', this._config.trigger, (event) => {
this.toggle(event)
})
}
_expandSidebar() {
if ($('body').hasClass(ClassName.SIDEBAR_COLLAPSED)) {
$(this._config.sidebarButtonSelector).PushMenu('expand')
}
}
// Static
static _jQueryInterface(config) {
return this.each(function () {
let data = $(this).data(DATA_KEY)
const _options = $.extend({}, Default, $(this).data())
if (!data) {
data = new Treeview($(this), _options)
$(this).data(DATA_KEY, data)
}
if (config === 'init') {
data[config]()
}
})
}
}
/**
* Data API
* ====================================================
*/
$(window).on(Event.LOAD_DATA_API, () => {
$(Selector.DATA_WIDGET).each(function () {
Treeview._jQueryInterface.call($(this), 'init')
parentLi.addClass(CLASS_NAME_IS_OPENING)
treeviewMenu.stop().slideDown(this._config.animationSpeed, () => {
parentLi.addClass(CLASS_NAME_OPEN)
$(this._element).trigger(expandedEvent)
})
})
/**
* jQuery API
* ====================================================
*/
$.fn[NAME] = Treeview._jQueryInterface
$.fn[NAME].Constructor = Treeview
$.fn[NAME].noConflict = function () {
$.fn[NAME] = JQUERY_NO_CONFLICT
return Treeview._jQueryInterface
if (this._config.expandSidebar) {
this._expandSidebar()
}
}
return Treeview
})(jQuery)
collapse(treeviewMenu, parentLi) {
const collapsedEvent = $.Event(EVENT_COLLAPSED)
parentLi.removeClass(`${CLASS_NAME_IS_OPENING} ${CLASS_NAME_OPEN}`)
treeviewMenu.stop().slideUp(this._config.animationSpeed, () => {
$(this._element).trigger(collapsedEvent)
treeviewMenu.find(`${SELECTOR_OPEN} > ${SELECTOR_TREEVIEW_MENU}`).slideUp()
treeviewMenu.find(SELECTOR_OPEN).removeClass(CLASS_NAME_OPEN)
})
}
toggle(event) {
const $relativeTarget = $(event.currentTarget)
const $parent = $relativeTarget.parent()
let treeviewMenu = $parent.find(`> ${SELECTOR_TREEVIEW_MENU}`)
if (!treeviewMenu.is(SELECTOR_TREEVIEW_MENU)) {
if (!$parent.is(SELECTOR_LI)) {
treeviewMenu = $parent.parent().find(`> ${SELECTOR_TREEVIEW_MENU}`)
}
if (!treeviewMenu.is(SELECTOR_TREEVIEW_MENU)) {
return
}
}
event.preventDefault()
const parentLi = $relativeTarget.parents(SELECTOR_LI).first()
const isOpen = parentLi.hasClass(CLASS_NAME_OPEN)
if (isOpen) {
this.collapse($(treeviewMenu), parentLi)
} else {
this.expand($(treeviewMenu), parentLi)
}
}
// Private
_setupListeners() {
const elementId = this._element.attr('id') !== undefined ? `#${this._element.attr('id')}` : ''
$(document).on('click', `${elementId}${this._config.trigger}`, event => {
this.toggle(event)
})
}
_expandSidebar() {
if ($('body').hasClass(CLASS_NAME_SIDEBAR_COLLAPSED)) {
$(this._config.sidebarButtonSelector).PushMenu('expand')
}
}
// Static
static _jQueryInterface(config) {
return this.each(function () {
let data = $(this).data(DATA_KEY)
const _options = $.extend({}, Default, $(this).data())
if (!data) {
data = new Treeview($(this), _options)
$(this).data(DATA_KEY, data)
}
if (config === 'init') {
data[config]()
}
})
}
}
/**
* Data API
* ====================================================
*/
$(window).on(EVENT_LOAD_DATA_API, () => {
$(SELECTOR_DATA_WIDGET).each(function () {
Treeview._jQueryInterface.call($(this), 'init')
})
})
/**
* jQuery API
* ====================================================
*/
$.fn[NAME] = Treeview._jQueryInterface
$.fn[NAME].Constructor = Treeview
$.fn[NAME].noConflict = function () {
$.fn[NAME] = JQUERY_NO_CONFLICT
return Treeview._jQueryInterface
}
export default Treeview

14
build/npm/.eslintrc.json Normal file
View File

@@ -0,0 +1,14 @@
{
"env": {
"browser": false,
"node": true
},
"parserOptions": {
"sourceType": "script"
},
"extends": "../../.eslintrc.json",
"rules": {
"no-console": "off",
"strict": "error"
}
}

View File

@@ -1,45 +1,47 @@
'use strict'
const Plugins = [
// AdminLTE Dist
{
from: 'dist/css/',
to : 'docs/assets/css/'
to: 'docs/assets/css/'
},
{
from: 'dist/js/',
to : 'docs/assets/js/'
to: 'docs/assets/js/'
},
// jQuery
{
from: 'node_modules/jquery/dist/',
to : 'docs/assets/plugins/jquery/'
to: 'docs/assets/plugins/jquery/'
},
// Popper
{
from: 'node_modules/popper.js/dist/',
to : 'docs/assets/plugins/popper/'
to: 'docs/assets/plugins/popper/'
},
// Bootstrap
{
from: 'node_modules/bootstrap/dist/js/',
to : 'docs/assets/plugins/bootstrap/js/'
to: 'docs/assets/plugins/bootstrap/js/'
},
// Font Awesome
{
from: 'node_modules/@fortawesome/fontawesome-free/css/',
to : 'docs/assets/plugins/fontawesome-free/css/'
to: 'docs/assets/plugins/fontawesome-free/css/'
},
{
from: 'node_modules/@fortawesome/fontawesome-free/webfonts/',
to : 'docs/assets/plugins/fontawesome-free/webfonts/'
to: 'docs/assets/plugins/fontawesome-free/webfonts/'
},
// overlayScrollbars
{
from: 'node_modules/overlayscrollbars/js/',
to : 'docs/assets/plugins/overlayScrollbars/js/'
to: 'docs/assets/plugins/overlayScrollbars/js/'
},
{
from: 'node_modules/overlayscrollbars/css/',
to : 'docs/assets/plugins/overlayScrollbars/css/'
to: 'docs/assets/plugins/overlayScrollbars/css/'
}
]

View File

@@ -1,5 +1,10 @@
#!/usr/bin/env node
'use strict'
const path = require('path')
const fse = require('fs-extra')
const Plugins = require('./DocsPlugins')
const fse = require('fs-extra')
class Publish {
constructor() {
@@ -12,7 +17,7 @@ class Publish {
getArguments() {
if (process.argv.length > 2) {
let arg = process.argv[2]
const arg = process.argv[2]
switch (arg) {
case '-v':
case '--verbose':
@@ -26,15 +31,20 @@ class Publish {
run() {
// Publish files
Plugins.forEach((module) => {
Plugins.forEach(module => {
try {
fse.copySync(module.from, module.to)
fse.copySync(module.from, module.to, {
// Skip copying dot files
filter(src) {
return !path.basename(src).startsWith('.')
}
})
if (this.options.verbose) {
console.log(`Copied ${module.from} to ${module.to}`)
}
} catch (err) {
console.error(`Error: ${err}`)
} catch (error) {
console.error(`Error: ${error}`)
}
})
}

View File

@@ -1,102 +1,108 @@
'use strict'
const Plugins = [
// jQuery
{
from: 'node_modules/jquery/dist',
to : 'plugins/jquery'
to: 'plugins/jquery'
},
// Popper
{
from: 'node_modules/popper.js/dist',
to : 'plugins/popper'
to: 'plugins/popper'
},
// Bootstrap
{
from: 'node_modules/bootstrap/dist/js',
to : 'plugins/bootstrap/js'
to: 'plugins/bootstrap/js'
},
// Font Awesome
{
from: 'node_modules/@fortawesome/fontawesome-free/css',
to : 'plugins/fontawesome-free/css'
to: 'plugins/fontawesome-free/css'
},
{
from: 'node_modules/@fortawesome/fontawesome-free/webfonts',
to : 'plugins/fontawesome-free/webfonts'
to: 'plugins/fontawesome-free/webfonts'
},
// overlayScrollbars
{
from: 'node_modules/overlayscrollbars/js',
to : 'plugins/overlayScrollbars/js'
to: 'plugins/overlayScrollbars/js'
},
{
from: 'node_modules/overlayscrollbars/css',
to : 'plugins/overlayScrollbars/css'
to: 'plugins/overlayScrollbars/css'
},
// Chart.js
{
from: 'node_modules/chart.js/dist/',
to : 'plugins/chart.js'
to: 'plugins/chart.js'
},
// jQuery UI
{
from: 'node_modules/jquery-ui-dist/',
to : 'plugins/jquery-ui'
to: 'plugins/jquery-ui'
},
// Flot
{
from: 'node_modules/flot/dist/es5/',
to : 'plugins/flot'
to: 'plugins/flot'
},
{
from: 'node_modules/flot/source/',
to: 'plugins/flot/plugins'
},
// Summernote
{
from: 'node_modules/summernote/dist/',
to : 'plugins/summernote'
to: 'plugins/summernote'
},
// Bootstrap Slider
{
from: 'node_modules/bootstrap-slider/dist/',
to : 'plugins/bootstrap-slider'
to: 'plugins/bootstrap-slider'
},
{
from: 'node_modules/bootstrap-slider/dist/css',
to : 'plugins/bootstrap-slider/css'
to: 'plugins/bootstrap-slider/css'
},
// Bootstrap Colorpicker
{
from: 'node_modules/bootstrap-colorpicker/dist/js',
to : 'plugins/bootstrap-colorpicker/js'
to: 'plugins/bootstrap-colorpicker/js'
},
{
from: 'node_modules/bootstrap-colorpicker/dist/css',
to : 'plugins/bootstrap-colorpicker/css'
to: 'plugins/bootstrap-colorpicker/css'
},
// Tempusdominus Bootstrap 4
{
from: 'node_modules/tempusdominus-bootstrap-4/build/js',
to : 'plugins/tempusdominus-bootstrap-4/js'
to: 'plugins/tempusdominus-bootstrap-4/js'
},
{
from: 'node_modules/tempusdominus-bootstrap-4/build/css',
to : 'plugins/tempusdominus-bootstrap-4/css'
to: 'plugins/tempusdominus-bootstrap-4/css'
},
// Moment
{
from: 'node_modules/moment/min',
to : 'plugins/moment'
to: 'plugins/moment'
},
{
from: 'node_modules/moment/locale',
to : 'plugins/moment/locale'
to: 'plugins/moment/locale'
},
// FastClick
{
from: 'node_modules/fastclick/lib',
to : 'plugins/fastclick'
to: 'plugins/fastclick'
},
// Date Range Picker
{
from: 'node_modules/daterangepicker/',
to : 'plugins/daterangepicker'
to: 'plugins/daterangepicker'
},
// DataTables
{
@@ -239,6 +245,18 @@ const Plugins = [
from: 'node_modules/datatables.net-scroller-bs4/css',
to: 'plugins/datatables-scroller/css'
},
{
from: 'node_modules/datatables.net-searchpanes/js',
to: 'plugins/datatables-searchpanes/js'
},
{
from: 'node_modules/datatables.net-searchpanes-bs4/js',
to: 'plugins/datatables-searchpanes/js'
},
{
from: 'node_modules/datatables.net-searchpanes-bs4/css',
to: 'plugins/datatables-searchpanes/css'
},
{
from: 'node_modules/datatables.net-select/js',
to: 'plugins/datatables-select/js'
@@ -254,97 +272,81 @@ const Plugins = [
// Fullcalendar
{
from: 'node_modules/@fullcalendar/core/',
to : 'plugins/fullcalendar'
},
{
from: 'node_modules/@fullcalendar/bootstrap/',
to : 'plugins/fullcalendar-bootstrap'
},
{
from: 'node_modules/@fullcalendar/daygrid/',
to : 'plugins/fullcalendar-daygrid'
},
{
from: 'node_modules/@fullcalendar/timegrid/',
to : 'plugins/fullcalendar-timegrid'
},
{
from: 'node_modules/@fullcalendar/interaction/',
to : 'plugins/fullcalendar-interaction'
from: 'node_modules/fullcalendar/',
to: 'plugins/fullcalendar'
},
// icheck bootstrap
{
from: 'node_modules/icheck-bootstrap/',
to : 'plugins/icheck-bootstrap'
to: 'plugins/icheck-bootstrap'
},
// inputmask
{
from: 'node_modules/inputmask/dist/',
to : 'plugins/inputmask'
to: 'plugins/inputmask'
},
// ion-rangeslider
{
from: 'node_modules/ion-rangeslider/',
to : 'plugins/ion-rangeslider'
to: 'plugins/ion-rangeslider'
},
// JQVMap (jqvmap-novulnerability)
{
from: 'node_modules/jqvmap-novulnerability/dist/',
to : 'plugins/jqvmap'
to: 'plugins/jqvmap'
},
// jQuery Mapael
{
from: 'node_modules/jquery-mapael/js/',
to : 'plugins/jquery-mapael'
to: 'plugins/jquery-mapael'
},
// Raphael
{
from: 'node_modules/raphael/',
to : 'plugins/raphael'
to: 'plugins/raphael'
},
// jQuery Mousewheel
{
from: 'node_modules/jquery-mousewheel/',
to : 'plugins/jquery-mousewheel'
to: 'plugins/jquery-mousewheel'
},
// jQuery Knob
{
from: 'node_modules/jquery-knob-chif/dist/',
to : 'plugins/jquery-knob'
to: 'plugins/jquery-knob'
},
// pace-progress
{
from: 'node_modules/@lgaitan/pace-progress/dist/',
to : 'plugins/pace-progress'
to: 'plugins/pace-progress'
},
// Select2
{
from: 'node_modules/select2/dist/',
to : 'plugins/select2'
to: 'plugins/select2'
},
{
from: 'node_modules/@ttskch/select2-bootstrap4-theme/dist/',
to : 'plugins/select2-bootstrap4-theme'
to: 'plugins/select2-bootstrap4-theme'
},
// Sparklines
{
from: 'node_modules/sparklines/source/',
to : 'plugins/sparklines'
to: 'plugins/sparklines'
},
// SweetAlert2
{
from: 'node_modules/sweetalert2/dist/',
to : 'plugins/sweetalert2'
to: 'plugins/sweetalert2'
},
{
from: 'node_modules/@sweetalert2/theme-bootstrap-4/',
to : 'plugins/sweetalert2-theme-bootstrap-4'
to: 'plugins/sweetalert2-theme-bootstrap-4'
},
// Toastr
{
from: 'node_modules/toastr/build/',
to : 'plugins/toastr'
to: 'plugins/toastr'
},
// jsGrid
{
@@ -352,8 +354,8 @@ const Plugins = [
to: 'plugins/jsgrid'
},
{
from: 'node_modules/jsgrid/demos/',
to: 'plugins/jsgrid/demos'
from: 'node_modules/jsgrid/demos/db.js',
to: 'plugins/jsgrid/demos/db.js'
},
// flag-icon-css
{
@@ -387,13 +389,49 @@ const Plugins = [
// jQuery Validate
{
from: 'node_modules/jquery-validation/dist/',
to : 'plugins/jquery-validation'
to: 'plugins/jquery-validation'
},
// bs-custom-file-input
{
from: 'node_modules/bs-custom-file-input/dist/',
to : 'plugins/bs-custom-file-input'
to: 'plugins/bs-custom-file-input'
},
// bs-stepper
{
from: 'node_modules/bs-stepper/dist/',
to: 'plugins/bs-stepper'
},
// CodeMirror
{
from: 'node_modules/codemirror/lib/',
to: 'plugins/codemirror'
},
{
from: 'node_modules/codemirror/addon/',
to: 'plugins/codemirror/addon'
},
{
from: 'node_modules/codemirror/keymap/',
to: 'plugins/codemirror/keymap'
},
{
from: 'node_modules/codemirror/mode/',
to: 'plugins/codemirror/mode'
},
{
from: 'node_modules/codemirror/theme/',
to: 'plugins/codemirror/theme'
},
// dropzonejs
{
from: 'node_modules/dropzone/dist/',
to: 'plugins/dropzone'
},
// uPlot
{
from: 'node_modules/uplot/dist/',
to: 'plugins/uplot'
}
]
module.exports = Plugins

View File

@@ -1,5 +1,10 @@
#!/usr/bin/env node
'use strict'
const path = require('path')
const fse = require('fs-extra')
const Plugins = require('./Plugins')
const fse = require('fs-extra')
class Publish {
constructor() {
@@ -12,7 +17,7 @@ class Publish {
getArguments() {
if (process.argv.length > 2) {
let arg = process.argv[2]
const arg = process.argv[2]
switch (arg) {
case '-v':
case '--verbose':
@@ -26,19 +31,26 @@ class Publish {
run() {
// Publish files
Plugins.forEach((module) => {
Plugins.forEach(module => {
const fseOptions = {
// Skip copying dot files
filter(src) {
return !path.basename(src).startsWith('.')
}
}
try {
if (fse.existsSync(module.from)) {
fse.copySync(module.from, module.to)
fse.copySync(module.from, module.to, fseOptions)
} else {
fse.copySync(module.from.replace('node_modules/', '../'), module.to)
fse.copySync(module.from.replace('node_modules/', '../'), module.to, fseOptions)
}
if (this.options.verbose) {
console.log(`Copied ${module.from} to ${module.to}`)
}
} catch (err) {
console.error(`Error: ${err}`)
} catch (error) {
console.error(`Error: ${error}`)
}
})
}

55
build/npm/vnu-jar.js Normal file
View File

@@ -0,0 +1,55 @@
#!/usr/bin/env node
/*!
* Script to run vnu-jar if Java is available.
* Copyright 2017-2020 The Bootstrap Authors
* Copyright 2017-2020 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/
'use strict'
const childProcess = require('child_process')
const vnu = require('vnu-jar')
childProcess.exec('java -version', (error, stdout, stderr) => {
if (error) {
console.error('Skipping vnu-jar test; Java is missing.')
return
}
const is32bitJava = !/64-Bit/.test(stderr)
// vnu-jar accepts multiple ignores joined with a `|`.
// Also note that the ignores are regular expressions.
const ignores = [
// "autocomplete" is included in <button> and checkboxes and radio <input>s due to
// Firefox's non-standard autocomplete behavior - see https://bugzilla.mozilla.org/show_bug.cgi?id=654072
'Attribute “autocomplete” is only allowed when the input type is.*'
].join('|')
const args = [
'-jar',
vnu,
'--asciiquotes',
'--skip-non-html',
// Ignore the language code warnings
'--no-langdetect',
'--Werror',
`--filterpattern "${ignores}"`,
'./*.html',
'docs_html/',
'pages/'
]
// For the 32-bit Java we need to pass `-Xss512k`
if (is32bitJava) {
args.splice(0, 0, '-Xss512k')
}
return childProcess.spawn('java', args, {
shell: true,
stdio: 'inherit'
})
.on('exit', process.exit)
})

View File

@@ -1,23 +0,0 @@
{
"adjoining-classes": false,
"box-sizing": false,
"box-model": false,
"compatible-vendor-prefixes": false,
"floats": false,
"font-sizes": false,
"gradients": false,
"important": false,
"known-properties": false,
"outline-none": false,
"qualified-headings": false,
"regex-selectors": false,
"shorthand": false,
"text-indent": false,
"unique-headings": false,
"universal-selector": false,
"unqualified-attributes": false,
"ids": false,
"fallback-colors": false,
"vendor-prefix": false,
"import": false
}

View File

@@ -1,20 +0,0 @@
/*!
* AdminLTE v3.0.5
* Only Components
* Author: Colorlib
* Website: AdminLTE.io <http://adminlte.io>
* License: Open source - MIT <http://opensource.org/licenses/MIT>
*/
// Bootstrap
// ---------------------------------------------------
@import '~bootstrap/scss/functions';
@import 'bootstrap-variables';
@import '~bootstrap/scss/mixins';
// @import '~bootstrap/scss/bootstrap';
// Variables and Mixins
// ---------------------------------------------------
@import 'variables';
@import 'mixins';
@import 'parts/components';

View File

@@ -1,20 +0,0 @@
/*!
* AdminLTE v3.0.5
* Only Core
* Author: Colorlib
* Website: AdminLTE.io <http://adminlte.io>
* License: Open source - MIT <http://opensource.org/licenses/MIT>
*/
// Bootstrap
// ---------------------------------------------------
@import '~bootstrap/scss/functions';
@import 'bootstrap-variables';
@import '~bootstrap/scss/bootstrap';
// Variables and Mixins
// ---------------------------------------------------
@import 'variables';
@import 'mixins';
@import 'parts/core';
@import 'parts/miscellaneous';

View File

@@ -1,20 +0,0 @@
/*!
* AdminLTE v3.0.5
* Only Extra Components
* Author: Colorlib
* Website: AdminLTE.io <http://adminlte.io>
* License: Open source - MIT <http://opensource.org/licenses/MIT>
*/
// Bootstrap
// ---------------------------------------------------
@import '~bootstrap/scss/functions';
@import 'bootstrap-variables';
@import '~bootstrap/scss/mixins';
// @import '~bootstrap/scss/bootstrap';
// Variables and Mixins
// ---------------------------------------------------
@import 'variables';
@import 'mixins';
@import 'parts/extra-components';

View File

@@ -1,20 +0,0 @@
/*!
* AdminLTE v3.0.5
* Only Pages
* Author: Colorlib
* Website: AdminLTE.io <http://adminlte.io>
* License: Open source - MIT <http://opensource.org/licenses/MIT>
*/
// Bootstrap
// ---------------------------------------------------
@import '~bootstrap/scss/functions';
@import 'bootstrap-variables';
@import '~bootstrap/scss/mixins';
@import '~bootstrap/scss/close';
// Variables and Mixins
// ---------------------------------------------------
@import 'variables';
@import 'mixins';
@import 'parts/pages';

View File

@@ -1,20 +0,0 @@
/*!
* AdminLTE v3.0.5
* Only Plugins
* Author: Colorlib
* Website: AdminLTE.io <http://adminlte.io>
* License: Open source - MIT <http://opensource.org/licenses/MIT>
*/
// Bootstrap
// ---------------------------------------------------
@import '~bootstrap/scss/functions';
@import 'bootstrap-variables';
@import '~bootstrap/scss/mixins';
// @import '~bootstrap/scss/bootstrap';
// Variables and Mixins
// ---------------------------------------------------
@import 'variables';
@import 'mixins';
@import 'parts/plugins';

View File

@@ -1,24 +0,0 @@
/*!
* AdminLTE v3.0.5
* Author: Colorlib
* Website: AdminLTE.io <http://adminlte.io>
* License: Open source - MIT <http://opensource.org/licenses/MIT>
*/
// Bootstrap
// ---------------------------------------------------
@import '~bootstrap/scss/functions';
@import 'bootstrap-variables';
@import '~bootstrap/scss/bootstrap';
// Variables and Mixins
// ---------------------------------------------------
@import 'variables';
@import 'mixins';
@import 'parts/core';
@import 'parts/components';
@import 'parts/extra-components';
@import 'parts/pages';
@import 'parts/plugins';
@import 'parts/miscellaneous';

View File

@@ -1,9 +1,10 @@
/*!
* AdminLTE v3.0.5
* AdminLTE v3.1.0-rc
* Author: Colorlib
* Website: AdminLTE.io <http://adminlte.io>
* License: Open source - MIT <http://opensource.org/licenses/MIT>
* Website: AdminLTE.io <https://adminlte.io>
* License: Open source - MIT <https://opensource.org/licenses/MIT>
*/
//
// ------------------------------------------------------------------
// This file is to be included in your custom SCSS. Before importing
@@ -12,16 +13,17 @@
// ok to import this file without custom variables too!
// NOTE: be sure to keep the license notice in the generated css.
// ------------------------------------------------------------------
//
// Variables and Mixins
// ---------------------------------------------------
@import 'bootstrap-variables';
@import 'variables';
@import 'mixins';
@import "bootstrap-variables";
@import "variables";
@import "mixins";
@import 'parts/core';
@import 'parts/components';
@import 'parts/extra-components';
@import 'parts/pages';
@import 'parts/plugins';
@import 'parts/miscellaneous';
@import "parts/core";
@import "parts/components";
@import "parts/extra-components";
@import "parts/pages";
@import "parts/plugins";
@import "parts/miscellaneous";

View File

@@ -26,7 +26,7 @@
@each $color, $value in $theme-colors {
.alert-#{$color} {
color: color-yiq($value);
background: $value;
background-color: $value;
border-color: darken($value, 5%);
}

View File

@@ -9,7 +9,7 @@
//
// stylelint-disable
$white: #ffffff !default;
$white: #fff !default;
$gray-100: #f8f9fa !default;
$gray-200: #e9ecef !default;
$gray-300: #dee2e6 !default;
@@ -23,15 +23,15 @@ $black: #000 !default;
$grays: () !default;
$grays: map-merge((
"100": $gray-100,
"200": $gray-200,
"300": $gray-300,
"400": $gray-400,
"500": $gray-500,
"600": $gray-600,
"700": $gray-700,
"800": $gray-800,
"900": $gray-900
"100": $gray-100,
"200": $gray-200,
"300": $gray-300,
"400": $gray-400,
"500": $gray-500,
"600": $gray-600,
"700": $gray-700,
"800": $gray-800,
"900": $gray-900
), $grays);
$blue: #007bff !default;
@@ -47,19 +47,19 @@ $cyan: #17a2b8 !default;
$colors: () !default;
$colors: map-merge((
"blue": $blue,
"indigo": $indigo,
"purple": $purple,
"pink": $pink,
"red": $red,
"orange": $orange,
"yellow": $yellow,
"green": $green,
"teal": $teal,
"cyan": $cyan,
"white": $white,
"gray": $gray-600,
"gray-dark": $gray-800
"blue": $blue,
"indigo": $indigo,
"purple": $purple,
"pink": $pink,
"red": $red,
"orange": $orange,
"yellow": $yellow,
"green": $green,
"teal": $teal,
"cyan": $cyan,
"white": $white,
"gray": $gray-600,
"gray-dark": $gray-800
), $colors);
$primary: $blue !default;
@@ -73,14 +73,14 @@ $dark: $gray-800 !default;
$theme-colors: () !default;
$theme-colors: map-merge((
"primary": $primary,
"secondary": $secondary,
"success": $success,
"info": $info,
"warning": $warning,
"danger": $danger,
"light": $light,
"dark": $dark
"primary": $primary,
"secondary": $secondary,
"success": $success,
"info": $info,
"warning": $warning,
"danger": $danger,
"light": $light,
"dark": $dark
), $theme-colors);
// stylelint-enable
@@ -91,7 +91,7 @@ $theme-color-interval: 8% !default;
$yiq-contrasted-threshold: 150 !default;
// Customize the light and dark text colors for use in our YIQ color contrast function.
$yiq-text-dark: #1F2D3D !default;
$yiq-text-dark: #1f2d3d !default;
$yiq-text-light: $white !default;
// Options
@@ -122,21 +122,21 @@ $enable-deprecation-messages: true !default;
$spacer: 1rem !default;
$spacers: () !default;
$spacers: map-merge((
0: 0,
1: ($spacer * .25),
2: ($spacer * .5),
3: $spacer,
4: ($spacer * 1.5),
5: ($spacer * 3)
0: 0,
1: ($spacer * .25),
2: ($spacer * .5),
3: $spacer,
4: ($spacer * 1.5),
5: ($spacer * 3)
), $spacers);
// This variable affects the `.h-*` and `.w-*` classes.
$sizes: () !default;
$sizes: map-merge((
25: 25%,
50: 50%,
75: 75%,
100: 100%
25: 25%,
50: 50%,
75: 75%,
100: 100%
), $sizes);
// stylelint-enable
@@ -169,11 +169,11 @@ $paragraph-margin-bottom: 1rem !default;
// adapting to different screen sizes, for use in media queries.
$grid-breakpoints: (
xs: 0,
sm: 576px,
md: 768px,
lg: 992px,
xl: 1200px
xs: 0,
sm: 576px,
md: 768px,
lg: 992px,
xl: 1200px
) !default;
@include _assert-ascending($grid-breakpoints, "$grid-breakpoints");
@@ -185,10 +185,10 @@ $grid-breakpoints: (
// Define the maximum width of `.container` for different screen sizes.
$container-max-widths: (
sm: 540px,
md: 720px,
lg: 960px,
xl: 1140px
sm: 540px,
md: 720px,
lg: 960px,
xl: 1140px
) !default;
@include _assert-ascending($container-max-widths, "$container-max-widths");
@@ -521,7 +521,7 @@ $custom-file-box-shadow: $custom-select-focus-box-shadow !default;
$custom-file-button-color: $custom-file-color !default;
$custom-file-button-bg: $input-group-addon-bg !default;
$custom-file-text: (
en: "Browse"
en: "Browse"
) !default;
$custom-range-thumb-focus-box-shadow: 0 0 0 1px $body-bg, $input-btn-focus-box-shadow !default;

View File

@@ -20,14 +20,40 @@
font-size: inherit;
}
[class*='sidebar-dark'] & {
[class*="sidebar-dark"] & {
border-bottom: 1px solid lighten($dark, 10%);
color: rgba($white, .8);
&,
.pushmenu {
color: rgba($white, .8);
&:hover {
color: $white;
}
}
}
[class*='sidebar-light'] & {
[class*="sidebar-light"] & {
border-bottom: 1px solid $gray-300;
color: rgba($black, .8);
&,
.pushmenu {
color: rgba($black, .8);
&:hover {
color: $black;
}
}
}
.pushmenu {
margin-right: $sidebar-padding-x;
font-size: $font-size-base;
}
.brand-link {
padding: 0;
border-bottom: none;
}
.brand-image {

View File

@@ -20,8 +20,8 @@
overflow: hidden;
position: relative;
> input[type='file'] {
background: $white;
> input[type="file"] {
background-color: $white;
cursor: inherit;
display: block;
font-size: 100px;
@@ -74,21 +74,27 @@
> .fas,
> .far,
> .fab,
> .glyphicon,
> .fal,
> .fad,
> .svg-inline--fa,
> .ion {
display: block;
font-size: 20px;
}
> .svg-inline--fa {
margin: 0 auto;
}
&:hover {
background: $button-default-background-color;
background-color: $button-default-background-color;
border-color: darken($button-default-border-color, 20%);
color: $button-default-color;
}
&:active,
&:focus {
@include box-shadow(inset 0 3px 5px rgba($black, 0.125));
@include box-shadow(inset 0 3px 5px rgba($black, .125));
}
// The badge
@@ -106,3 +112,31 @@
.btn-xs {
@include button-size($button-padding-y-xs, $button-padding-x-xs, $button-font-size-xs, $button-line-height-xs, $button-border-radius-xs);
}
.dark-mode {
.btn-default,
.btn-app {
background-color: lighten($dark, 2.5%);
color: $white;
border-color: $gray-600;
&:hover,
&:focus {
background-color: lighten($dark, 5%);
color: $gray-300;
border-color: lighten($gray-600, 2.5%);
}
}
.btn-light {
background-color: lighten($dark, 7.5%);
color: $white;
border-color: $gray-600;
&:hover,
&:focus {
background-color: lighten($dark, 10%);
color: $gray-300;
border-color: lighten($gray-600, 5%);
}
}
}

View File

@@ -34,18 +34,24 @@
// Themes for different contexts
&.callout-danger {
border-left-color: darken(theme-color('danger'), 10%);
border-left-color: darken(theme-color("danger"), 10%);
}
&.callout-warning {
border-left-color: darken(theme-color('warning'), 10%);
border-left-color: darken(theme-color("warning"), 10%);
}
&.callout-info {
border-left-color: darken(theme-color('info'), 10%);
border-left-color: darken(theme-color("info"), 10%);
}
&.callout-success {
border-left-color: darken(theme-color('success'), 10%);
border-left-color: darken(theme-color("success"), 10%);
}
}
.dark-mode {
.callout {
background-color: lighten($dark, 5%);
}
}

View File

@@ -34,13 +34,17 @@
position: fixed;
top: 0;
width: 100% !important;
z-index: 9999;
z-index: $zindex-modal-backdrop;
&.was-collapsed .card-body {
display: block !important;
}
[data-widget='collapse'] {
.card-body {
overflow: auto;
}
[data-widget="collapse"] {
display: none;
}
@@ -87,12 +91,12 @@
&.card-tabs {
&:not(.card-outline) {
& > .card-header {
> .card-header {
border-bottom: 0;
.nav-item {
&:first-child .nav-link {
margin-left: -1px;
border-left-color: transparent;
}
}
}
@@ -202,7 +206,7 @@ html.maximized-card {
.card-header,
.card-body,
.card-footer {
@include clearfix;
@include clearfix ();
}
// Box header
@@ -231,7 +235,7 @@ html.maximized-card {
margin-top: -$card-spacer-y / 2.5;
}
[data-toggle='tooltip'] {
[data-toggle="tooltip"] {
position: relative;
}
}
@@ -251,7 +255,7 @@ html.maximized-card {
// Box Tools Buttons
.btn-tool {
background: transparent;
background-color: transparent;
color: $gray-500;
font-size: $font-size-sm;
margin: -(($card-spacer-y / 2) * 2) 0;
@@ -310,7 +314,7 @@ html.maximized-card {
}
.chart-legend {
@include list-unstyled;
@include list-unstyled ();
margin: 10px 0;
> li {
@@ -323,10 +327,10 @@ html.maximized-card {
// Comment Box
.card-comments {
background: $gray-100;
background-color: $gray-100;
.card-comment {
@include clearfix;
@include clearfix ();
border-bottom: 1px solid $gray-200;
padding: 8px 0;
@@ -375,7 +379,7 @@ html.maximized-card {
// Todo list element
> li {
@include border-radius(2px);
background: $gray-100;
background-color: $gray-100;
border-left: 2px solid $gray-200;
color: $gray-700;
margin-bottom: 2px;
@@ -385,7 +389,7 @@ html.maximized-card {
margin-bottom: 0;
}
> input[type='checkbox'] {
> input[type="checkbox"] {
margin: 0 10px 0 5px;
}
@@ -403,7 +407,7 @@ html.maximized-card {
// Tools and options box
.tools {
color: theme-color('danger');
color: theme-color("danger");
display: none;
float: right;
@@ -412,7 +416,9 @@ html.maximized-card {
> .fas,
> .far,
> .fab,
> .glyphicon,
> .fal,
> .fad,
> .svg-inline--fa,
> .ion {
cursor: pointer;
margin-right: 5px;
@@ -432,7 +438,7 @@ html.maximized-card {
}
.badge {
background: $gray-500 !important;
background-color: $gray-500 !important;
}
}
}
@@ -472,3 +478,44 @@ html.maximized-card {
}
}
}
.dark-mode {
.card {
background-color: $dark;
color: $white;
.card {
background-color: lighten($dark, 5%);
color: $white;
}
.nav.flex-column > li {
border-bottom-color: $gray-600;
}
.card-footer {
background-color: rgba($black, .1);
}
&.card-outline-tabs .card-header a:hover {
border-color: $gray-600;
}
&:not(.card-outline) > .card-header a.active {
color: $white;
}
}
.card-comments {
background-color: lighten($dark, 1.25%);
.username {
color: $gray-400;
}
.card-comment {
border-bottom-color: lighten($dark, 7.5%);
}
}
.todo-list > li {
background-color: lighten($dark, 5%);
border-color: lighten($dark, 7.5%);
color: $white;
}
}

View File

@@ -2,17 +2,21 @@
// Component: Carousel
//
.carousel-control {
&.left,
&.right {
background-image: none;
.carousel-control-custom-icon {
.carousel-control-prev & {
margin-left: -20px;
}
.carousel-control-next & {
margin-right: 20px;
}
> .fa,
> .fas,
> .far,
> .fab,
> .glyphicon,
> .fal,
> .fad,
> .svg-inline--fa,
> .ion {
display: inline-block;
font-size: 40px;

44
build/scss/_close.scss Normal file
View File

@@ -0,0 +1,44 @@
.close {
float: right;
@include font-size($close-font-size);
font-weight: $close-font-weight;
line-height: 1;
color: $close-color;
text-shadow: $close-text-shadow;
opacity: .5;
// Override <a>'s hover style
@include hover() {
color: $close-color;
text-decoration: none;
}
&:not(:disabled):not(.disabled) {
@include hover-focus() {
opacity: .75;
}
}
&:focus {
outline: none;
}
}
// Additional properties for button version
// iOS requires the button element instead of an anchor tag.
// If you want the anchor version, it requires `href="#"`.
// See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile
// stylelint-disable-next-line selector-no-qualifying-type
button.close {
padding: 0;
background-color: transparent;
border: 0;
}
// Future-proof disabling of clicks on `<a>` elements
// stylelint-disable-next-line selector-no-qualifying-type
a.close.disabled {
pointer-events: none;
}

View File

@@ -43,7 +43,7 @@
}
// Backgrund Color Disabled
[class^='bg-'].disabled {
[class^="bg-"].disabled {
opacity: .65;
}
@@ -89,3 +89,16 @@ a.text-muted:hover {
}
}
}
.dark-mode {
.bg-light {
background-color: lighten($dark, 7.5%) !important;
color: $white !important;
}
.text-black,
.text-dark,
.link-black,
.link-dark {
color: $gray-400;
}
}

View File

@@ -1,7 +1,7 @@
//
// Component: Control Sidebar
//
html.control-sidebar-animate {
overflow-x: hidden;
}
@@ -11,7 +11,7 @@ html.control-sidebar-animate {
position: absolute;
top: $main-header-height;
z-index: $zindex-control-sidebar;
&,
&::before {
bottom: $main-footer-height;
@@ -22,7 +22,7 @@ html.control-sidebar-animate {
}
&::before {
content: '';
content: "";
display: block;
position: fixed;
top: 0;
@@ -46,11 +46,11 @@ body.text-sm {
}
.control-sidebar-push-slide {
.content-wrapper,
.main-footer {
@include transition(margin-right $transition-speed $transition-fn);
}
.content-wrapper,
.main-footer {
@include transition(margin-right $transition-speed $transition-fn);
}
}
// Control sidebar open state
.control-sidebar-open {
@@ -95,17 +95,14 @@ body.text-sm {
// Dark skin
.control-sidebar-dark {
background-color: $sidebar-dark-bg;
&,
a,
.nav-link {
color: $sidebar-dark-color;
}
// Background
& {
background: $sidebar-dark-bg;
}
a:hover {
color: $sidebar-dark-hover-color;
}
@@ -171,8 +168,6 @@ body.text-sm {
color: lighten($sidebar-light-color, 10%);
// Background
& {
background: $sidebar-light-bg;
border-left: $main-header-bottom-border;
}
background-color: $sidebar-light-bg;
border-left: $main-header-bottom-border;
}

View File

@@ -1,7 +1,7 @@
//
// Component: Direct Chat
//
.direct-chat {
.card-body {
overflow-x: hidden;
@@ -42,7 +42,7 @@
}
.direct-chat-msg {
@include clearfix;
@include clearfix ();
margin-bottom: 10px;
}
@@ -56,7 +56,7 @@
@include border-radius($border-radius-lg);
}
background: $direct-chat-default-msg-bg;
background-color: $direct-chat-default-msg-bg;
border: 1px solid $direct-chat-default-msg-border-color;
color: $direct-chat-default-font-color;
margin: 5px 0 0 50px;
@@ -68,7 +68,7 @@
&::before {
border: solid transparent;
border-right-color: $direct-chat-default-msg-border-color;
content: ' ';
content: " ";
height: 0;
pointer-events: none;
position: absolute;
@@ -135,7 +135,7 @@
.direct-chat-contacts {
@include translate(101%, 0);
background: $dark;
background-color: $dark;
bottom: 0;
color: $white;
height: 250px;
@@ -146,7 +146,7 @@
}
.direct-chat-contacts-light {
background: $light;
background-color: $light;
.contacts-list-name {
color: $gray-700;
@@ -163,11 +163,11 @@
//Contacts list -- for displaying contacts in direct chat contacts pane
.contacts-list {
@include list-unstyled;
@include list-unstyled ();
> li {
@include clearfix;
border-bottom: 1px solid rgba($black, 0.2);
@include clearfix ();
border-bottom: 1px solid rgba($black, .2);
margin: 0;
padding: 10px;
@@ -203,7 +203,7 @@
.contacts-list-date {
color: $gray-400;
font-weight: normal;
font-weight: 400;
}
.contacts-list-msg {
@@ -222,3 +222,25 @@
@include direct-chat-variant($color);
}
}
.dark-mode {
.direct-chat-text {
background-color: lighten($dark, 7.5%);
border-color: lighten($dark, 10%);
color: $white;
&::after,
&::before {
border-right-color: lighten($dark, 10%);
}
}
.direct-chat-timestamp {
color: $gray-500;
}
.right > .direct-chat-text {
&::after,
&::before {
border-right-color: transparent;
}
}
}

View File

@@ -18,7 +18,7 @@
}
.dropdown-toggle::after {
vertical-align: .2rem
vertical-align: .2rem;
}
}
@@ -57,17 +57,17 @@
.dropdown-submenu {
position: relative;
& > a:after {
@include caret-right;
> a::after {
@include caret-right ();
float: right;
margin-left: .5rem;
margin-top: .5rem;
}
& > .dropdown-menu {
> .dropdown-menu {
left: 100%;
margin-left: 0px;
margin-top: 0px;
margin-left: 0;
margin-top: 0;
top: 0;
}
}
@@ -85,7 +85,6 @@
}
// Dropdown Sizes
.dropdown-menu-xl {
max-width: 420px;
@@ -115,7 +114,7 @@
text-align: center;
}
// Add fade animation to dropdown menus by appending
// Add fade animation to dropdown menus by appending
// the class .animated-dropdown-menu to the .dropdown-menu ul (or ol)
.open:not(.dropup) > .animated-dropdown-menu {
@include animation(flipInX .7s both);
@@ -170,7 +169,7 @@
right: 5%;
left: auto;
border: 1px solid #ddd;
background: $white;
background-color: $white;
}
}
}
@@ -178,8 +177,8 @@
// User Menu
.navbar-nav > .user-menu {
> .nav-link:after {
content:none;
> .nav-link::after {
content: none;
}
> .dropdown-menu {
@@ -205,7 +204,7 @@
width: 90px;
border: 3px solid;
border-color: transparent;
border-color: rgba(255, 255, 255, 0.2);
border-color: rgba(255, 255, 255, .2);
}
> p {
@@ -223,14 +222,14 @@
// Menu Body
> .user-body {
@include clearfix;
@include clearfix ();
border-bottom: 1px solid $gray-700;
border-top: 1px solid $gray-300;
padding: 15px;
a {
@include media-breakpoint-up(sm) {
background: $white !important;
background-color: $white !important;
color: $gray-700 !important;
}
}
@@ -238,7 +237,7 @@
// Menu Footer
> .user-footer {
@include clearfix;
@include clearfix ();
background-color: $gray-100;
padding: 10px;
@@ -270,3 +269,53 @@
width: $sidebar-user-image-width;
}
}
.dark-mode {
.dropdown-menu {
background-color: $dark;
color: $white;
}
.dropdown-item {
color: $white;
&:focus,
&:hover {
background-color: lighten($dark, 5%);
}
}
.dropdown-divider {
border-color: $gray-600;
}
.navbar-nav > .user-menu > .dropdown-menu {
> .user-footer {
background-color: lighten($dark, 2.5%);
color: $white;
.btn-default {
color: $white;
&:hover,
&:focus {
background-color: lighten($dark, 5%);
color: $gray-300;
}
&:focus {
background-color: lighten($dark, 7.5%);
}
}
}
> .user-body {
border-color: $gray-600;
}
> .user-body a {
background-color: transparent !important;
color: $white !important;
&:hover,
&:focus {
color: $gray-400 !important;
}
}
}
}

View File

@@ -1,7 +1,7 @@
//
// Component: Forms
//
.form-group {
&.has-icon {
position: relative;
@@ -40,19 +40,23 @@
&.fas,
&.far,
&.fab,
&.glyphicon,
&.fal,
&.fad,
&.svg-inline--fa,
&.ion {
line-height: $input-height;
}
}
.input-lg + .form-control-feedback,
.input-lg + .form-control-feedback,
.input-group-lg + .form-control-feedback {
&.fa,
&.fas,
&.far,
&.fab,
&.glyphicon,
&.fal,
&.fad,
&.svg-inline--fa,
&.ion {
line-height: $input-height-lg;
}
@@ -64,20 +68,24 @@
&.fas,
&.far,
&.fab,
&.glyphicon,
&.fal,
&.fad,
&.svg-inline--fa,
&.ion {
line-height: $input-height-lg;
}
}
}
.input-sm + .form-control-feedback,
.input-sm + .form-control-feedback,
.input-group-sm + .form-control-feedback {
&.fa,
&.fas,
&.far,
&.fab,
&.glyphicon,
&.fal,
&.fad,
&.svg-inline--fa,
&.ion {
line-height: $input-height-sm;
}
@@ -89,7 +97,9 @@
&.fas,
&.far,
&.fab,
&.glyphicon,
&.fal,
&.fad,
&.svg-inline--fa,
&.ion {
line-height: $input-height-sm;
}
@@ -102,7 +112,7 @@ label:not(.form-check-label):not(.custom-file-label) {
.warning-feedback {
@include font-size($form-feedback-font-size);
color: theme-color('warning');
color: theme-color("warning");
display: none;
margin-top: $form-feedback-margin-top;
width: 100%;
@@ -111,8 +121,8 @@ label:not(.form-check-label):not(.custom-file-label) {
.warning-tooltip {
@include border-radius($form-feedback-tooltip-border-radius);
@include font-size($form-feedback-tooltip-font-size);
background-color: rgba(theme-color('warning'), $form-feedback-tooltip-opacity);
color: color-yiq(theme-color('warning'));
background-color: rgba(theme-color("warning"), $form-feedback-tooltip-opacity);
color: color-yiq(theme-color("warning"));
display: none;
line-height: $form-feedback-tooltip-line-height;
margin-top: .1rem;
@@ -125,7 +135,7 @@ label:not(.form-check-label):not(.custom-file-label) {
.form-control {
&.is-warning {
border-color: theme-color('warning');
border-color: theme-color("warning");
@if $enable-validation-icons {
// padding-right: $input-height-inner;
@@ -136,8 +146,8 @@ label:not(.form-check-label):not(.custom-file-label) {
}
&:focus {
border-color: theme-color('warning');
box-shadow: 0 0 0 $input-focus-width rgba(theme-color('warning'), .25);
border-color: theme-color("warning");
box-shadow: 0 0 0 $input-focus-width rgba(theme-color("warning"), .25);
}
~ .warning-feedback,
@@ -159,7 +169,7 @@ textarea.form-control {
.custom-select {
&.is-warning {
border-color: theme-color('warning');
border-color: theme-color("warning");
@if $enable-validation-icons {
// padding-right: $custom-select-feedback-icon-padding-right;
@@ -167,8 +177,8 @@ textarea.form-control {
}
&:focus {
border-color: theme-color('warning');
box-shadow: 0 0 0 $input-focus-width rgba(theme-color('warning'), .25);
border-color: theme-color("warning");
box-shadow: 0 0 0 $input-focus-width rgba(theme-color("warning"), .25);
}
~ .warning-feedback,
@@ -191,7 +201,7 @@ textarea.form-control {
.form-check-input {
&.is-warning {
~ .form-check-label {
color: theme-color('warning');
color: theme-color("warning");
}
~ .warning-feedback,
@@ -203,10 +213,10 @@ textarea.form-control {
.custom-control-input.is-warning {
~ .custom-control-label {
color: theme-color('warning');
color: theme-color("warning");
&::before {
border-color: theme-color('warning');
border-color: theme-color("warning");
}
}
@@ -217,18 +227,18 @@ textarea.form-control {
&:checked {
~ .custom-control-label::before {
@include gradient-bg(lighten(theme-color('warning'), 10%));
border-color: lighten(theme-color('warning'), 10%);
@include gradient-bg(lighten(theme-color("warning"), 10%));
border-color: lighten(theme-color("warning"), 10%);
}
}
&:focus {
~ .custom-control-label::before {
box-shadow: 0 0 0 $input-focus-width rgba(theme-color('warning'), .25);
box-shadow: 0 0 0 $input-focus-width rgba(theme-color("warning"), .25);
}
&:not(:checked) ~ .custom-control-label::before {
border-color: theme-color('warning');
border-color: theme-color("warning");
}
}
}
@@ -237,7 +247,7 @@ textarea.form-control {
.custom-file-input {
&.is-warning {
~ .custom-file-label {
border-color: theme-color('warning');
border-color: theme-color("warning");
}
~ .warning-feedback,
@@ -247,13 +257,39 @@ textarea.form-control {
&:focus {
~ .custom-file-label {
border-color: theme-color('warning');
box-shadow: 0 0 0 $input-focus-width rgba(theme-color('warning'), .25);
border-color: theme-color("warning");
box-shadow: 0 0 0 $input-focus-width rgba(theme-color("warning"), .25);
}
}
}
}
// body.text-sm support
body.text-sm {
.input-group-text {
font-size: $font-size-sm;
}
}
// custom .form-control styles
.form-control,
.custom-select {
&.form-control-border {
border-top: 0;
border-left: 0;
border-right: 0;
border-radius: 0;
box-shadow: inherit;
&.border-width-2 {
border-bottom-width: 2px;
}
&.border-width-3 {
border-bottom-width: 3px;
}
}
}
// custom switch color variations
.custom-switch {
@each $name, $color in $theme-colors {
@@ -275,3 +311,91 @@ textarea.form-control {
@include custom-range-variant($name, $color);
}
}
// custom control input variations
@each $name, $color in $theme-colors {
@include custom-control-input-variant($name, $color);
}
@each $name, $color in $colors {
@include custom-control-input-variant($name, $color);
}
.custom-control-input-outline {
~ .custom-control-label::before {
background-color: transparent !important;
box-shadow: none;
}
&:checked ~ .custom-control-label::before {
@include gradient-bg(transparent);
}
}
.dark-mode {
.form-control,
.custom-select,
.custom-file-label,
.custom-file-label::after,
.custom-control-label::before,
.input-group-text {
background-color: $dark;
color: $white;
}
.form-control:not(.form-control-navbar):not(.is-invalid):not(:focus) {
border-color: $gray-600;
}
select {
background-color: $dark;
color: $white;
border-color: $gray-600;
}
.input-group-text {
border-color: $gray-600;
}
.custom-control-input:disabled ~ .custom-control-label::before,
.custom-control-input[disabled] ~ .custom-control-label::before {
background-color: lighten($dark, 5%);
border-color: $gray-600;
color: $white;
}
.custom-range {
&::-webkit-slider-runnable-track {
background-color: lighten($dark, 7.5%);
}
&::-moz-range-track {
background-color: lighten($dark, 7.5%);
}
&::-ms-track {
background-color: lighten($dark, 7.5%);
}
}
.navbar-dark {
.btn-navbar,
.form-control-navbar {
background-color: $dark;
border: $input-border-width solid $gray-600;
}
.btn-navbar {
&:hover {
background-color: lighten($sidebar-dark-bg, 7.5%);
}
&:focus {
background-color: lighten($sidebar-dark-bg, 10%);
}
}
.form-control-navbar + .input-group-prepend,
.form-control-navbar + .input-group-append {
> .btn-navbar {
background-color: lighten($dark, 5%);
color: $white;
border: $input-border-width solid $gray-600;
border-left: none;
}
}
}
}

View File

@@ -1,12 +1,12 @@
//
// Component: Info Box
//
.info-box {
@include box-shadow($card-shadow);
@include border-radius($border-radius);
background: $white;
background-color: $white;
display: flex;
margin-bottom: map-get($spacers, 3);
min-height: 80px;
@@ -45,7 +45,7 @@
display: flex;
flex-direction: column;
justify-content: center;
line-height: 120%;
line-height: 1.8;
flex: 1;
padding: 0 10px;
}
@@ -144,3 +144,10 @@
}
}
}
.dark-mode {
.info-box {
background-color: $dark;
color: $white;
}
}

View File

@@ -15,7 +15,7 @@ body,
.wrapper {
position: relative;
& .content-wrapper {
.content-wrapper {
min-height: calc(100vh - #{$main-header-height} - #{$main-footer-height});
}
@@ -28,7 +28,7 @@ body,
max-width: $boxed-layout-max-width;
}
& .main-sidebar {
.main-sidebar {
left: inherit;
}
}
@@ -347,9 +347,7 @@ body,
.control-sidebar {
bottom: 0;
}
}
.layout-footer-fixed & {
.main-footer {
bottom: 0;
left: 0;
@@ -376,9 +374,7 @@ body,
.control-sidebar {
bottom: 0;
}
}
.layout#{$infix}-footer-fixed & {
.main-footer {
bottom: 0;
left: 0;
@@ -403,7 +399,7 @@ body,
.layout-top-nav & {
margin-left: 0;
.main-header {
.main-header {
.brand-image {
margin-top: -.5rem;
margin-right: .2rem;
@@ -411,14 +407,14 @@ body,
}
}
& .main-sidebar {
.main-sidebar {
bottom: inherit;
height: inherit;
}
& .content-wrapper,
& .main-header,
& .main-footer {
.content-wrapper,
.main-header,
.main-footer {
margin-left: 0;
}
}
@@ -483,7 +479,7 @@ body:not(.sidebar-mini-md) {
}
.content-wrapper {
background: $main-bg;
background-color: $main-bg;
> .content {
padding: $content-padding-y $content-padding-x;
@@ -577,7 +573,7 @@ body:not(.sidebar-mini-md) {
}
.main-footer {
background: $main-footer-bg;
background-color: $main-footer-bg;
border-top: $main-footer-border-top;
color: lighten($gray-700, 25%);
padding: $main-footer-padding;
@@ -605,7 +601,7 @@ body:not(.sidebar-mini-md) {
}
.breadcrumb {
background: transparent;
background-color: transparent;
line-height: 1.8rem;
margin-bottom: 0;
padding: 0;
@@ -617,7 +613,6 @@ body:not(.sidebar-mini-md) {
}
.hold-transition {
.content-wrapper,
.main-header,
@@ -630,3 +625,27 @@ body:not(.sidebar-mini-md) {
animation-duration: 0s !important;
}
}
.dark-mode {
background-color: lighten($dark, 7.5%) !important;
color: $white;
.breadcrumb-item {
&.active,
+ .breadcrumb-item::before {
color: $gray-500;
}
}
.main-footer {
background-color: $dark;
border-color: lighten($dark, 10%);
}
.content-wrapper {
background-color: lighten($dark, 7.5%);
color: $white;
.content-header {
color: $white;
}
}
}

View File

@@ -1,7 +1,7 @@
//
// Component: Main Header
//
.main-header {
border-bottom: $main-header-bottom-border;
z-index: $zindex-main-header;
@@ -21,7 +21,9 @@
> .fas,
> .far,
> .fab,
> .glyphicon,
> .fal,
> .fad,
> .svg-inline--fa,
> .ion {
font-size: $font-size-sm;
}
@@ -34,7 +36,7 @@
margin: 0;
}
&[class*='-right'] {
&[class*="-right"] {
.dropdown-menu {
left: auto;
margin-top: -3px;
@@ -47,6 +49,11 @@
}
}
}
&.dropdown-legacy .dropdown-menu {
top: $nav-link-height + $navbar-padding-y;
margin-top: 0;
}
}
// Add this class to images within a nav-link
@@ -73,7 +80,7 @@
.form-control-navbar {
border-right-width: 0;
& + .input-group-append {
+ .input-group-append {
margin-left: 0;
}
}
@@ -101,7 +108,7 @@
&:focus {
&,
& + .input-group-append .btn-navbar {
+ .input-group-append .btn-navbar {
background-color: $main-header-dark-form-control-focused-bg;
border: $main-header-dark-form-control-focused-border !important;
color: $main-header-dark-form-control-focused-color;
@@ -128,7 +135,7 @@
&:focus {
&,
& + .input-group-append .btn-navbar {
+ .input-group-append .btn-navbar {
background-color: $main-header-light-form-control-focused-bg;
border: $main-header-light-form-control-focused-border !important;
color: $main-header-light-form-control-focused-color;

View File

@@ -19,7 +19,7 @@
.sidebar {
height: calc(100% - (#{$main-header-height-inner} + #{$main-header-bottom-border-width}));
overflow-y: auto;
overflow-y: initial;
padding-bottom: $sidebar-padding-y;
padding-left: $sidebar-padding-x;
padding-right: $sidebar-padding-x;
@@ -30,11 +30,11 @@
.user-panel {
position: relative;
[class*='sidebar-dark'] & {
[class*="sidebar-dark"] & {
border-bottom: 1px solid lighten($dark, 12%);
}
[class*='sidebar-light'] & {
[class*="sidebar-light"] & {
border-bottom: 1px solid $gray-300;
}
@@ -98,7 +98,10 @@
> .nav-treeview {
display: block;
}
}
.menu-open,
.menu-is-opening {
> .nav-link {
i.right {
@include rotate(-90deg);
@@ -121,7 +124,9 @@
&.fas,
&.far,
&.fab,
&.glyphicon,
&.fal,
&.fad,
&.svg-inline--fa,
&.ion {
font-size: 1.1rem;
}
@@ -158,12 +163,12 @@
}
&.nav-legacy {
.nav-treeview {
.nav-treeview {
.nav-treeview {
padding-left: 2rem;
margin-left: -1rem;
.text-sm & {
.text-sm & {
padding-left: 1rem;
margin-left: -.5rem;
}
@@ -183,10 +188,15 @@
.nav-link p {
display: inline-block;
margin: 0;
}
}
.sidebar-is-opening .nav-sidebar {
.nav-link p {
animation-name: fadeIn;
animation-duration: $transition-speed;
animation-fill-mode: both;
margin: 0;
}
}
@@ -197,7 +207,7 @@
}
}
background-color: rgba($black, 0.1);
background-color: rgba($black, .1);
bottom: 0;
display: none;
left: 0;
@@ -207,7 +217,7 @@
z-index: $zindex-main-sidebar - 1;
}
[class*='sidebar-light-'] {
[class*="sidebar-light-"] {
// Sidebar background color
background-color: $sidebar-light-bg;
@@ -218,13 +228,13 @@
}
.status {
background: $sidebar-light-hover-bg;
background-color: $sidebar-light-hover-bg;
color: $sidebar-light-color;
&:hover,
&:focus,
&:active {
background: darken($sidebar-light-hover-bg, 3%);
background-color: darken($sidebar-light-hover-bg, 3%);
color: $sidebar-light-hover-color;
}
}
@@ -267,13 +277,13 @@
// First Level Submenu
> .nav-treeview {
background: $sidebar-light-submenu-bg;
background-color: $sidebar-light-submenu-bg;
}
}
// Section Heading
.nav-header {
background: inherit;
background-color: inherit;
color: darken($sidebar-light-color, 5%);
}
@@ -330,7 +340,7 @@
}
}
[class*='sidebar-dark-'] {
[class*="sidebar-dark-"] {
// Sidebar background color
background-color: $sidebar-dark-bg;
@@ -341,13 +351,13 @@
}
.status {
background: $sidebar-dark-hover-bg;
background-color: $sidebar-dark-hover-bg;
color: $sidebar-dark-color;
&:hover,
&:focus,
&:active {
background: darken($sidebar-dark-hover-bg, 3%);
background-color: darken($sidebar-dark-hover-bg, 3%);
color: $sidebar-dark-hover-color;
}
}
@@ -375,7 +385,7 @@
// Hover and active states
&.menu-open > .nav-link,
&:hover > .nav-link,
& > .nav-link:focus {
> .nav-link:focus {
background-color: $sidebar-dark-hover-bg;
color: $sidebar-dark-hover-color;
}
@@ -390,13 +400,13 @@
// First Level Submenu
> .nav-treeview {
background: $sidebar-dark-submenu-bg;
background-color: $sidebar-dark-submenu-bg;
}
}
// Section Heading
.nav-header {
background: inherit; //darken($sidebar-dark-bg, 3%);
background-color: inherit; //darken($sidebar-dark-bg, 3%);
color: lighten($sidebar-dark-color, 5%);
}
@@ -461,14 +471,14 @@
@each $name, $color in $theme-colors {
.sidebar-dark-#{$name},
.sidebar-light-#{$name} {
@include sidebar-color($color)
@include sidebar-color($color);
}
}
@each $name, $color in $colors {
.sidebar-dark-#{$name},
.sidebar-light-#{$name} {
@include sidebar-color($color)
@include sidebar-color($color);
}
}
@@ -478,7 +488,7 @@
.sidebar-mini-md .main-sidebar:not(.sidebar-no-expand):hover,
.sidebar-mini .main-sidebar.sidebar-focused,
.sidebar-mini-md .main-sidebar.sidebar-focused {
.nav-compact.nav-sidebar.nav-child-indent:not(.nav-flat) .nav-treeview {
.nav-compact.nav-sidebar.nav-child-indent:not(.nav-flat) .nav-treeview {
padding-left: 1rem;
margin-left: -.5rem;
}
@@ -486,7 +496,7 @@
// Nav Flat
.nav-flat {
margin: (-$sidebar-padding-x/2) (-$sidebar-padding-x) 0;
margin: (-$sidebar-padding-x / 2) (-$sidebar-padding-x) 0;
.nav-item {
> .nav-link {
@@ -500,7 +510,7 @@
}
&:not(.nav-child-indent) {
.nav-treeview {
.nav-treeview {
.nav-item {
> .nav-link {
> .nav-icon {
@@ -637,7 +647,7 @@
&.nav-sidebar > .nav-item {
.nav-treeview,
> .nav-treeview {
background: rgba($white, .05);
background-color: rgba($white, .05);
.nav-item {
> .nav-link {
@@ -649,7 +659,7 @@
}
.nav-legacy {
margin: (-$sidebar-padding-x/2) (-$sidebar-padding-x) 0;
margin: (-$sidebar-padding-x / 2) (-$sidebar-padding-x) 0;
&.nav-sidebar .nav-item {
> .nav-link {
@@ -669,13 +679,13 @@
&.nav-sidebar > .nav-item {
> .nav-link {
&.active {
background: inherit;
background-color: inherit;
border-left: 3px solid transparent;
box-shadow: none;
> .nav-icon {
margin-left: calc(.55rem - 3px);
.text-sm & {
margin-left: calc(.75rem - 3px);
}
@@ -746,15 +756,15 @@
}
}
&.nav-child-indent {
&.nav-child-indent {
.nav-treeview {
.nav-treeview {
padding-left: 0;
margin-left: 0;
}
}
}
}
}
.sidebar-mini.sidebar-collapse.text-sm &,
@@ -772,11 +782,11 @@
}
}
[class*='sidebar-dark'] & {
[class*="sidebar-dark"] & {
&.nav-sidebar > .nav-item {
.nav-treeview,
> .nav-treeview {
background: rgba($white, .05);
background-color: rgba($white, .05);
}
> .nav-link.active {
@@ -788,17 +798,17 @@
&.active,
&:focus,
&:hover {
background: none;
background-color: transparent;
color: $sidebar-dark-active-color;
}
}
}
[class*='sidebar-light'] & {
[class*="sidebar-light"] & {
&.nav-sidebar > .nav-item {
.nav-treeview,
> .nav-treeview {
background: rgba($black, .05);
background-color: rgba($black, .05);
}
> .nav-link.active {
@@ -810,7 +820,7 @@
&.active,
&:focus,
&:hover {
background: none;
background-color: transparent;
color: $sidebar-light-active-color;
}
}
@@ -836,9 +846,9 @@
}
.sidebar-mini.sidebar-collapse .main-sidebar.sidebar-focused &,
.sidebar-mini.sidebar-collapse .main-sidebar:hover &,
.sidebar-mini.sidebar-collapse .main-sidebar:not(.sidebar-no-expand):hover &,
.sidebar-mini-md.sidebar-collapse .main-sidebar.sidebar-focused &,
.sidebar-mini-md.sidebar-collapse .main-sidebar:hover & {
.sidebar-mini-md.sidebar-collapse .main-sidebar:not(.sidebar-no-expand):hover & {
.menu-open > .nav-treeview {
max-height: min-content;
animation-name: fadeIn;
@@ -875,10 +885,10 @@
}
// Sidebar Form Control
[class*='sidebar-dark'] {
[class*="sidebar-dark"] {
.form-control-sidebar,
.btn-sidebar {
background: lighten($sidebar-dark-bg, 5%);
background-color: lighten($sidebar-dark-bg, 5%);
border: 1px solid lighten($sidebar-dark-bg, 15%);
color: lighten(color-yiq(lighten($sidebar-dark-bg, 5%)), 15%);
}
@@ -889,18 +899,36 @@
}
.btn-sidebar:hover {
background: lighten($sidebar-dark-bg, 7.5%);
background-color: lighten($sidebar-dark-bg, 7.5%);
}
.btn-sidebar:focus {
background: lighten($sidebar-dark-bg, 10%);
background-color: lighten($sidebar-dark-bg, 10%);
}
.list-group-item {
background-color: lighten($sidebar-dark-bg, 7.5%);
border-color: lighten($sidebar-dark-bg, 15%);
color: $sidebar-dark-color;
&:hover {
background-color: lighten($sidebar-dark-bg, 10%);
}
&:focus {
background-color: lighten($sidebar-dark-bg, 12.5%);
}
.search-path {
color: $gray-500;
}
}
}
[class*='sidebar-light'] {
[class*="sidebar-light"] {
.form-control-sidebar,
.btn-sidebar {
background: darken($sidebar-light-bg, 5%);
background-color: darken($sidebar-light-bg, 5%);
border: 1px solid darken($sidebar-light-bg, 15%);
color: color-yiq(darken($sidebar-light-bg, 5%));
}
@@ -911,11 +939,27 @@
}
.btn-sidebar:hover {
background: darken($sidebar-light-bg, 7.5%);
background-color: darken($sidebar-light-bg, 7.5%);
}
.btn-sidebar:focus {
background: darken($sidebar-light-bg, 10%);
background-color: darken($sidebar-light-bg, 10%);
}
.list-group-item {
border-color: darken($sidebar-light-bg, 15%);
&:hover {
background-color: darken($sidebar-light-bg, 7.5%);
}
&:focus {
background-color: darken($sidebar-light-bg, 10%);
}
.search-path {
color: $gray-600;
}
}
}
@@ -928,15 +972,154 @@
}
// Sidebar Collapse on Layout Boxed
.layout-boxed {
.layout-boxed:not(.sidebar-mini):not(.sidebar-mini-md) {
&.sidebar-collapse .main-sidebar {
margin-left: 0;
}
.content-wrapper,
.content-wrapper,
.main-header,
.main-footer {
z-index: 9999;
position: relative;
}
}
// Sidebar Search
.sidebar-collapse {
.form-control-sidebar,
.form-control-sidebar ~ .input-group-append,
.sidebar-search-results {
display: none;
}
}
[data-widget="sidebar-search"] {
input[type="search"] {
&::-ms-clear,
&::-ms-reveal {
display: none;
width: 0;
height: 0;
}
&::-webkit-search-cancel-button,
&::-webkit-search-decoration,
&::-webkit-search-results-button,
&::-webkit-search-results-decoration {
display: none;
}
}
}
.sidebar-search-results {
position: relative;
display: none;
width: 100%;
.sidebar-search-open & {
display: inline-block;
}
.search-title {
margin-bottom: -.1rem;
}
.list-group {
position: absolute;
width: 100%;
z-index: $zindex-main-sidebar + 1;
> .list-group-item {
padding: $input-padding-y $input-padding-x;
&:-moz-focusring {
margin-top: 0;
border-left: 1px solid transparent;
border-top: 0;
border-bottom: 1px solid transparent;
}
&:first-child {
margin-top: 0;
border-top: 0;
@include border-top-radius(0);
}
}
}
}
.sidebar-search-results .search-path {
font-size: $small-font-size;
}
.sidebar-search-open {
.btn,
.form-control {
@include border-bottom-radius(0);
}
}
// Custom Area
.sidebar-custom {
[class*="sidebar-dark"] & {
border-top: 1px solid lighten($dark, 12%);
}
[class*="sidebar-light"] & {
border-top: 1px solid $gray-300;
}
}
.layout-fixed {
&.sidebar-collapse {
.hide-on-collapse {
display: none;
}
}
&.sidebar-collapse:hover {
.hide-on-collapse {
display: block;
}
}
.main-sidebar-custom {
.sidebar {
height: calc(100% - ((#{$main-header-height-inner} + #{$sidebar-custom-height}) + #{$main-header-bottom-border-width}));
}
.sidebar-custom {
height: $sidebar-custom-height;
padding: $sidebar-custom-padding-x $sidebar-custom-padding-y;
}
}
.main-sidebar-custom-lg {
.sidebar {
height: calc(100% - ((#{$main-header-height-inner} + #{$sidebar-custom-height-lg}) + #{$main-header-bottom-border-width}));
}
.sidebar-custom {
height: $sidebar-custom-height-lg;
}
}
.main-sidebar-custom-xl {
.sidebar {
height: calc(100% - ((#{$main-header-height-inner} + #{$sidebar-custom-height-xl}) + #{$main-header-bottom-border-width}));
}
.sidebar-custom {
height: $sidebar-custom-height-xl;
}
}
.main-sidebar-custom,
.main-sidebar-custom-lg,
.main-sidebar-custom-xl {
.pos-right {
position: absolute;
right: .5rem;
}
}
}

View File

@@ -47,12 +47,12 @@
.list-header {
color: $gray-600;
font-size: 15px;
font-weight: bold;
font-weight: 700;
padding: 10px 4px;
}
.list-seperator {
background: $card-border-color;
background-color: $card-border-color;
height: 1px;
margin: 15px 0 9px;
}
@@ -162,7 +162,7 @@
// Rounded and Circle Images
.img-rounded {
@include border-radius($border-radius)
@include border-radius($border-radius);
}
.img-circle {
@@ -216,7 +216,7 @@
// General attachemnt block
.attachment-block {
background: $gray-100;
background-color: $gray-100;
border: 1px solid $card-border-color;
margin-bottom: 10px;
padding: 5px;
@@ -259,7 +259,7 @@
.overlay {
@include border-radius($border-radius);
align-items: center;
background: rgba($white, 0.7);
background-color: rgba($white, .7);
display: flex;
justify-content: center;
z-index: 50;
@@ -268,19 +268,23 @@
> .fas,
> .far,
> .fab,
> .glyphicon,
> .fal,
> .fad,
> .svg-inline--fa,
> .ion {
color: $gray-800;
}
&.dark {
background: rgba($black, 0.5);
background-color: rgba($black, .5);
> .fa,
> .fas,
> .far,
> .fab,
> .glyphicon,
> .fal,
> .fad,
> .svg-inline--fa,
> .ion {
color: $gray-400;
}
@@ -360,7 +364,7 @@
border-right: $ribbon-border-size solid transparent;
border-top: $ribbon-border-size solid #9e9e9e;
bottom: -$ribbon-border-size;
content: '';
content: "";
position: absolute;
}
@@ -393,13 +397,13 @@ pre {
// Blockquotes styles
blockquote {
background: $white;
background-color: $white;
border-left: .7rem solid $primary;
margin: 1.5em .7rem;
padding: 0.5em .7rem;
padding: .5em .7rem;
.box & {
background: $gray-200;
background-color: $gray-200;
}
p:last-child {
@@ -471,9 +475,37 @@ blockquote {
border-radius: $button-border-radius-xs;
font-size: $button-font-size-xs;
font-weight: 400;
padding: $button-padding-y-xs*2 $button-padding-x-xs*2;
padding: $button-padding-y-xs * 2 $button-padding-x-xs * 2;
}
.badge-btn.badge-pill {
padding: .375rem .6rem;
}
.dark-mode {
a:not(.btn):hover {
color: lighten($link-color, 10%);
}
.attachment-block {
background-color: lighten($dark, 3.75%);
.attachment-text {
color: $gray-400;
}
}
blockquote {
background-color: lighten($dark, 5%);
}
.close,
.mailbox-attachment-close {
color: $gray-500;
text-shadow: 0 1px 0 $gray-700;
}
.tab-custom-content {
border-color: $gray-600;
}
.list-group-item {
background-color: $dark;
border-color: $gray-600;
}
}

View File

@@ -2,12 +2,12 @@
// General: Mixins
//
@import 'mixins/cards';
@import 'mixins/sidebar';
@import 'mixins/navbar';
@import 'mixins/accent';
@import 'mixins/custom-forms';
@import 'mixins/backgrounds';
@import 'mixins/direct-chat';
@import 'mixins/toasts';
@import 'mixins/miscellaneous';
@import "mixins/cards";
@import "mixins/sidebar";
@import "mixins/navbar";
@import "mixins/accent";
@import "mixins/custom-forms";
@import "mixins/backgrounds";
@import "mixins/direct-chat";
@import "mixins/toasts";
@import "mixins/miscellaneous";

View File

@@ -34,7 +34,39 @@
&.bg-success, {
.close {
color: $white;
text-shadow: 0 1px 0 #000;
text-shadow: 0 1px 0 $black;
}
}
}
.dark-mode {
.modal-header,
.modal-footer {
border-color: $gray-600;
}
.modal-content {
background-color: $dark;
&.bg-warning {
.modal-header,
.modal-footer {
border-color: $gray-600;
}
.close {
color: $dark !important;
text-shadow: 0 1px 0 $gray-700 !important;
}
}
&.bg-primary,
&.bg-secondary,
&.bg-info,
&.bg-danger,
&.bg-success {
.modal-header,
.modal-footer {
border-color: $white;
}
}
}
}

View File

@@ -7,7 +7,7 @@
color: $gray-600;
&:not(.active):hover {
color: theme-color('primary');
color: theme-color("primary");
}
}
@@ -30,7 +30,7 @@
border-top-right-radius: 0;
margin-right: -$nav-tabs-border-width;
@include hover-focus {
@include hover-focus () {
border-color: $gray-200 transparent $gray-200 $gray-200;
}
}
@@ -51,7 +51,7 @@
border-top-right-radius: $nav-tabs-border-radius;
margin-left: -$nav-tabs-border-width;
@include hover-focus {
@include hover-focus () {
border-color: $gray-200 $gray-200 $gray-200 transparent;
}
}
@@ -81,6 +81,9 @@
@if $color == dark or $color == light {
.navbar-#{$color} {
background-color: $value;
@if $color == dark {
border-color: lighten($dark, 10%);
}
}
}
}
@@ -98,3 +101,49 @@
background-color: $value;
}
}
.dark-mode {
.nav-pills .nav-link {
color: $gray-400;
}
.nav-tabs {
border-color: lighten($dark, 15%);
.nav-link:focus,
.nav-link:hover {
border-color: lighten($dark, 15%);
}
.nav-item.show .nav-link,
.nav-link.active {
background-color: $dark;
border-color: lighten($dark, 15%) lighten($dark, 15%) transparent lighten($dark, 15%);
color: $white;
}
&.flex-column {
.nav-item.show .nav-link,
.nav-link {
&.active,
&:focus,
&:hover {
border-color: lighten($dark, 15%) transparent lighten($dark, 15%) lighten($dark, 15%);
}
&:focus,
&:hover {
background-color: lighten($dark, 5%);
}
}
&.nav-tabs-right {
border-color: lighten($dark, 15%);
.nav-link {
&.active,
&:focus,
&:hover {
border-color: lighten($dark, 15%) lighten($dark, 15%) lighten($dark, 15%) transparent;
}
}
}
}
}
}

View File

@@ -0,0 +1,73 @@
//
// Component: Pagination
//
.pagination-month {
.page-item {
justify-self: stretch;
.page-link {
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
box-shadow: none;
}
&:first-child,
&:last-child {
.page-link {
height: 100%;
font-size: $font-size-lg;
}
}
.page-month {
margin-bottom: 0;
font-size: $font-size-lg;
font-weight: $font-weight-bold;
}
.page-year {
margin-bottom: 0;
}
}
&.pagination-lg {
.page-month {
font-size: ($font-size-lg * 1.25);
}
}
&.pagination-sm {
.page-month {
font-size: ($font-size-base);
}
}
}
.dark-mode {
.page-item {
&.disabled .page-link {
background-color: lighten($dark, 2.5%);
border-color: $gray-600;
color: $gray-600;
}
&.active {
.page-link {
&:hover,
&:focus {
color: $gray-400;
}
}
}
&:not(.active) {
.page-link {
background-color: $dark;
border-color: $gray-600;
&:hover,
&:focus {
color: lighten($primary, 5%);
background-color: lighten($dark, 5%);
}
}
}
}
}

View File

@@ -8,14 +8,15 @@
padding: 0;
> .item {
@include clearfix;
@include clearfix ();
@if $enable-rounded {
@include border-radius($border-radius);
}
background: $white;
background-color: $white;
padding: 10px 0;
}
.product-img {
@@ -52,3 +53,16 @@
border-bottom-width: 0;
}
}
.dark-mode {
.products-list > .item {
background-color: $dark;
color: $white;
border-bottom-color: $gray-600;
}
.product-description {
color: $gray-400;
}
}

View File

@@ -64,3 +64,9 @@
}
}
}
.dark-mode {
.progress {
background: lighten($dark, 7.5%);
}
}

View File

@@ -33,7 +33,7 @@
.brand-link {
&.logo-switch {
&::before {
content: '\00a0';
content: "\00a0";
}
}
}
@@ -41,7 +41,7 @@
// Add sidebar-mini class to the body tag to activate this feature
.sidebar-mini {
@include media-breakpoint-up(lg) {
@include sidebar-mini-breakpoint;
@include sidebar-mini-breakpoint ();
}
}
@include media-breakpoint-down(md) {
@@ -52,7 +52,7 @@
.sidebar-mini-md {
@include media-breakpoint-up(md) {
@include sidebar-mini-breakpoint;
@include sidebar-mini-breakpoint ();
}
}
@include media-breakpoint-down(sm) {
@@ -170,5 +170,5 @@
.main-sidebar .logo-xs,
.main-sidebar .logo-xl,
.sidebar .user-panel .info {
@include transition(margin-left $transition-speed linear, opacity $transition-speed ease, visibility $transition-speed ease)
@include transition(margin-left $transition-speed linear, opacity $transition-speed ease, visibility $transition-speed ease);
}

View File

@@ -16,8 +16,8 @@
}
> .small-box-footer {
background: rgba($black, 0.1);
color: rgba($white, 0.8);
background-color: rgba($black, .1);
color: rgba($white, .8);
display: block;
padding: 3px 0;
position: relative;
@@ -26,15 +26,15 @@
z-index: 10;
&:hover {
background: rgba($black, 0.15);
background-color: rgba($black, .15);
color: $white;
}
}
h3 {
@include font-size(2.2rem);
font-weight: bold;
margin: 0 0 10px 0;
font-weight: 700;
margin: 0 0 10px;
padding: 0;
white-space: nowrap;
}
@@ -81,7 +81,7 @@
> small {
color: $gray-100;
display: block;
font-size: 0.9rem;
font-size: .9rem;
margin-top: 5px;
}
}
@@ -93,7 +93,7 @@
// the icon
.icon {
color: rgba($black, 0.15);
color: rgba($black, .15);
z-index: 0;
> i {
@@ -101,19 +101,27 @@
position: absolute;
right: 15px;
top: 15px;
transition: all $transition-speed linear;
transition: transform $transition-speed linear;
&.fa,
&.fas,
&.far,
&.fab,
&.glyphicon,
&.fal,
&.fad,
&.ion {
font-size: 70px;
top: 20px;
}
}
svg {
font-size: 70px;
position: absolute;
right: 15px;
top: 15px;
transition: transform $transition-speed linear;
}
}
// Small box hover state
@@ -121,16 +129,21 @@
text-decoration: none;
// Animate icons on small box hover
.icon > i {
font-size: 95px;
&.fa,
&.fas,
&.far,
&.fab,
&.glyphicon,
&.ion {
font-size: 75px;
.icon {
> i {
&,
&.fa,
&.fas,
&.far,
&.fab,
&.fal,
&.fad,
&.ion {
transform: scale(1.1);
}
}
> svg {
transform: scale(1.1);
}
}
}

View File

@@ -28,7 +28,7 @@
font-weight: 300;
margin-bottom: 0;
margin-top: 0;
text-shadow: 0 1px 1px rgba($black, 0.2);
text-shadow: 0 1px 1px rgba($black, .2);
}
//User single line description

View File

@@ -12,8 +12,7 @@
thead tr:nth-child(1) th {
background-color: $white;
border-bottom: 0;
box-shadow: inset 0 1px 0 $table-border-color,
inset 0 -1px 0 $table-border-color;
box-shadow: inset 0 1px 0 $table-border-color, inset 0 -1px 0 $table-border-color;
position: sticky;
top: 0;
z-index: 10;
@@ -23,8 +22,7 @@
thead tr {
&:nth-child(1) th {
background-color: $table-dark-bg;
box-shadow: inset 0 1px 0 $table-dark-border-color,
inset 0 -1px 0 $table-dark-border-color;
box-shadow: inset 0 1px 0 $table-dark-border-color, inset 0 -1px 0 $table-dark-border-color;
}
}
}
@@ -60,6 +58,8 @@
.card-body.p-0 & {
thead > tr > th,
thead > tr > td,
tfoot > tr > th,
tfoot > tr > td,
tbody > tr > th,
tbody > tr > td {
&:first-of-type {
@@ -72,3 +72,84 @@
}
}
}
// Expandable Table
.table-hover tbody tr.expandable-body:hover {
background-color: inherit !important;
}
[data-widget="expandable-table"] {
cursor: pointer;
i {
transition: transform $transition-speed linear;
}
&[aria-expanded="true"] {
td > i {
// stylelint-disable selector-max-attribute
&[class*="right"] {
transform: rotate(90deg);
}
&[class*="left"] {
transform: rotate(-90deg);
}
// stylelint-enable selector-max-attribute
}
}
}
.expandable-body {
> td {
padding: 0 !important;
width: 100%;
> div,
> p {
padding: $table-cell-padding;
}
}
.table {
width: calc(100% - #{$table-cell-padding});
margin: 0 0 0 $table-cell-padding;
tr:first-child {
td,
th {
border-top: none;
}
}
}
}
.dark-mode {
.table-bordered {
&,
td,
th {
border-color: $gray-600;
}
}
.table-hover {
tbody tr:hover {
color: $gray-300;
background-color: lighten($dark, 2.5%);
border-color: $gray-600;
}
}
.table {
thead th {
border-bottom-color: $gray-600;
}
th,
td {
border-top-color: $gray-600;
}
&.table-head-fixed {
thead tr:nth-child(1) th {
background-color: lighten($dark, 5%);
}
}
}
}

View File

@@ -4,7 +4,9 @@
// text modification
.text-bold {
&, &.table td, &.table th {
&,
&.table td,
&.table th {
font-weight: 700;
}
}
@@ -35,3 +37,9 @@
color: #{$color} !important;
}
}
.dark-mode {
.text-muted {
color: $gray-500 !important;
}
}

View File

@@ -9,9 +9,9 @@
// The line
&::before {
@include border-radius($border-radius);
background: $gray-300;
background-color: $gray-300;
bottom: 0;
content: '';
content: "";
left: 31px;
margin: 0;
position: absolute;
@@ -33,7 +33,7 @@
> .timeline-item {
@include box-shadow($card-shadow);
@include border-radius($border-radius);
background: $white;
background-color: $white;
color: $gray-700;
margin-left: 60px;
margin-right: 15px;
@@ -70,7 +70,9 @@
> img {
margin: 10px;
}
> dl, ol, ul {
> dl,
ol,
ul {
margin: 0;
}
}
@@ -86,11 +88,13 @@
> .fas,
> .far,
> .fab,
> .glyphicon,
> .fal,
> .fad,
> .svg-inline--fa,
> .ion {
background: $gray-500;
background-color: $gray-500;
border-radius: 50%;
font-size: 15px;
font-size: 16px;
height: 30px;
left: 18px;
line-height: 30px;
@@ -99,6 +103,9 @@
top: 0;
width: 30px;
}
> .svg-inline--fa {
padding: 7px;
}
}
// Time label
> .time-label {
@@ -116,7 +123,7 @@
> div {
> .timeline-item {
@include box-shadow(none);
background: $gray-100;
background-color: $gray-100;
border: 1px solid $gray-300;
> .timeline-header {
@@ -125,3 +132,24 @@
}
}
}
.dark-mode {
.timeline {
&::before {
background-color: $gray-600;
}
> div > .timeline-item {
background-color: $dark;
color: $white;
border-color: $gray-600;
> .timeline-header {
color: $gray-400;
border-color: $gray-600;
}
> .time {
color: $gray-400;
}
}
}
}

View File

@@ -46,6 +46,18 @@
}
}
.dark-mode {
.toast {
background-color: rgba($dark, .85);
color: $white;
.toast-header {
background-color: rgba($dark, .7);
color: $gray-100;
}
}
}
.toast {
@each $name, $color in $theme-colors {
@include toast-variant($name, $color);

View File

@@ -3,7 +3,7 @@
//
.users-list {
@include list-unstyled;
@include list-unstyled ();
> li {
float: left;
@@ -43,3 +43,12 @@
color: darken($gray-500, 20%);
font-size: 12px;
}
.dark-mode {
.users-list-name {
color: $gray-400;
}
.users-list-date {
color: $gray-500;
}
}

View File

@@ -17,14 +17,17 @@ $maroon: #d81b60 !default;
$black: #111 !default;
$gray-x-light: #d2d6de !default;
$colors: map-merge((
'lightblue': $lightblue,
'navy': $navy,
'olive': $olive,
'lime': $lime,
'fuchsia': $fuchsia,
'maroon': $maroon,
), $colors);
$colors: map-merge(
(
"lightblue": $lightblue,
"navy": $navy,
"olive": $olive,
"lime": $lime,
"fuchsia": $fuchsia,
"maroon": $maroon,
),
$colors
);
// LAYOUT
// --------------------------------------------------------
@@ -33,8 +36,13 @@ $font-size-root: 1rem !default;
// Sidebar
$sidebar-width: 250px !default;
$sidebar-padding-x: 0.5rem !default;
$sidebar-padding-x: .5rem !default;
$sidebar-padding-y: 0 !default;
$sidebar-custom-height: 4rem !default;
$sidebar-custom-height-lg: 6rem !default;
$sidebar-custom-height-xl: 8rem !default;
$sidebar-custom-padding-x: .85rem !default;
$sidebar-custom-padding-y: .5rem !default;
// Boxed layout maximum width
$boxed-layout-max-width: 1250px !default;
@@ -74,19 +82,19 @@ $main-header-height-sm: calc(#{$main-header-height-sm-inner} + #{$main-header-bo
// Main header skins
$main-header-dark-form-control-bg: hsla(100, 100%, 100%, 0.2) !default;
$main-header-dark-form-control-focused-bg: hsla(100, 100%, 100%, 0.6) !default;
$main-header-dark-form-control-bg: rgba(255, 255, 255, .2) !default;
$main-header-dark-form-control-focused-bg: rgba(255, 255, 255, .6) !default;
$main-header-dark-form-control-focused-color: $gray-800 !default;
$main-header-dark-form-control-border: 0 !default;
$main-header-dark-form-control-focused-border: 0 !default;
$main-header-dark-placeholder-color: hsla(100, 100%, 100%, 0.6) !default;
$main-header-dark-placeholder-color: rgba(255, 255, 255, .6) !default;
$main-header-light-form-control-bg: darken($gray-100, 2%) !default;
$main-header-light-form-control-focused-bg: $gray-200 !default;
$main-header-light-form-control-focused-color: $gray-800 !default;
$main-header-light-form-control-border: 0 !default;
$main-header-light-form-control-focused-border: 0 !default;
$main-header-light-placeholder-color: hsla(0, 0%, 0%, 0.6) !default;
$main-header-light-placeholder-color: rgba(0, 0, 0, .6) !default;
// MAIN FOOTER
// --------------------------------------------------------
@@ -106,16 +114,16 @@ $main-footer-bg: $white !default;
// Dark sidebar
$sidebar-dark-bg: $dark !default;
$sidebar-dark-hover-bg: hsla(100, 100%, 100%, 0.1) !default;
$sidebar-dark-color: #C2C7D0 !default;
$sidebar-dark-hover-bg: rgba(255, 255, 255, .1) !default;
$sidebar-dark-color: #c2c7d0 !default;
$sidebar-dark-hover-color: $white !default;
$sidebar-dark-active-color: $white !default;
$sidebar-dark-submenu-bg: transparent !default;
$sidebar-dark-submenu-color: #C2C7D0 !default;
$sidebar-dark-submenu-color: #c2c7d0 !default;
$sidebar-dark-submenu-hover-color: $white !default;
$sidebar-dark-submenu-hover-bg: $sidebar-dark-hover-bg !default;
$sidebar-dark-submenu-active-color: $sidebar-dark-bg !default;
$sidebar-dark-submenu-active-bg: hsla(100, 100%, 100%, 0.9) !default;
$sidebar-dark-submenu-active-bg: rgba(255, 255, 255, .9) !default;
$sidebar-dark-header-color: $white !default;
// Light sidebar
@@ -184,7 +192,7 @@ $zindex-toasts: $zindex-main-sidebar + 2 !default;
// --------------------------------------------------------
// Transition global options
$transition-speed: 0.3s !default;
$transition-speed: .3s !default;
$transition-fn: ease-in-out !default;
// TEXT
@@ -205,18 +213,21 @@ $button-line-height-xs: $line-height-sm !default;
$button-font-size-xs: ($font-size-base * .75) !default;
$button-border-radius-xs: .15rem !default;
// ELEVATION
// --------------------------------------------------------
$elevations: ();
$elevations: map-merge((
1: unquote('0 1px 3px ' + rgba($black, 0.12) + ', 0 1px 2px ' + rgba($black, 0.24)),
2: unquote('0 3px 6px ' + rgba($black, 0.16) + ', 0 3px 6px ' + rgba($black, 0.23)),
3: unquote('0 10px 20px ' + rgba($black, 0.19) + ', 0 6px 6px ' + rgba($black, 0.23)),
4: unquote('0 14px 28px ' + rgba($black, 0.25) + ', 0 10px 10px ' + rgba($black, 0.22)),
5: unquote('0 19px 38px ' + rgba($black, 0.30) + ', 0 15px 12px ' + rgba($black, 0.22)),
), $elevations);
$elevations: map-merge(
(
1: unquote("0 1px 3px " + rgba($black, .12) + ", 0 1px 2px " + rgba($black, .24)),
2: unquote("0 3px 6px " + rgba($black, .16) + ", 0 3px 6px " + rgba($black, .23)),
3: unquote("0 10px 20px " + rgba($black, .19) + ", 0 6px 6px " + rgba($black, .23)),
4: unquote("0 14px 28px " + rgba($black, .25) + ", 0 10px 10px " + rgba($black, .22)),
5: unquote("0 19px 38px " + rgba($black, .3) + ", 0 15px 12px " + rgba($black, .22)),
),
$elevations
);
// RIBBON
// --------------------------------------------------------
$ribbon-border-size: 3px !default;
@@ -230,7 +241,7 @@ $ribbon-right: -2px !default;
$ribbon-lg-wrapper-size: 120px !default;
$ribbon-lg-width: 160px !default;
$ribbon-lg-top: 26px !default;
$ribbon-lg-right: 0px !default;
$ribbon-lg-right: 0 !default;
$ribbon-xl-wrapper-size: 180px !default;
$ribbon-xl-width: 240px !default;
$ribbon-xl-top: 47px !default;

24
build/scss/adminlte.scss Normal file
View File

@@ -0,0 +1,24 @@
/*!
* AdminLTE v3.1.0-rc
* Author: Colorlib
* Website: AdminLTE.io <https://adminlte.io>
* License: Open source - MIT <https://opensource.org/licenses/MIT>
*/
// Bootstrap
// ---------------------------------------------------
@import "~bootstrap/scss/functions";
@import "bootstrap-variables";
@import "~bootstrap/scss/bootstrap";
// Variables and Mixins
// ---------------------------------------------------
@import "variables";
@import "mixins";
@import "parts/core";
@import "parts/components";
@import "parts/extra-components";
@import "parts/pages";
@import "parts/plugins";
@import "parts/miscellaneous";

View File

@@ -4,8 +4,8 @@
// Accent Variant
@mixin accent-variant($name, $color) {
$link-color: $color;
.accent-#{$name} {
$link-color: $color;
$link-hover-color: darken($color, 15%);
$pagination-active-bg: $color;
$pagination-active-border-color: $color;
@@ -14,7 +14,7 @@
a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):not(.btn) {
color: $link-color;
@include hover {
@include hover () {
color: $link-hover-color;
}
}
@@ -22,20 +22,20 @@
.dropdown-item {
&:active,
&.active {
background: $color;
background-color: $color;
color: color-yiq($color);
}
}
.custom-control-input:checked ~ .custom-control-label {
&::before {
background: $color;
background-color: $color;
border-color: darken($color, 20%);
}
&::after {
$newColor: color-yiq($color);
background-image: str-replace($custom-checkbox-indicator-icon-checked, str-replace(#{$custom-control-indicator-checked-color}, '#', '%23'), str-replace(#{$newColor}, '#', '%23'));
$new-color: color-yiq($color);
background-image: str-replace($custom-checkbox-indicator-icon-checked, str-replace(#{$custom-control-indicator-checked-color}, "#", "%23"), str-replace(#{$new-color}, "#", "%23"));
}
}
@@ -45,7 +45,7 @@
.custom-file-input:focus ~ .custom-file-label {
border-color: lighten($color, 25%);
}
.page-item {
.page-link {
color: $link-color;
@@ -70,8 +70,8 @@
.sidebar {
a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link) {
color: $sidebar-dark-color;
@include hover {
@include hover () {
color: $sidebar-dark-hover-color;
}
}
@@ -83,12 +83,21 @@
a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link) {
color: $sidebar-light-color;
@include hover {
@include hover () {
color: $sidebar-light-hover-color;
}
}
}
}
}
.dark-mode.accent-#{$name} {
.page-item {
.page-link {
&:hover,
&:focus {
color: lighten($link-color, 5%);
}
}
}
}
}

View File

@@ -33,7 +33,7 @@
// Background Gradient Variant
@mixin background-gradient-variant($name, $color) {
.bg-gradient-#{$name} {
@include bg-gradient-variant('&', $color);
background: $color linear-gradient(180deg, mix($body-bg, $color, 15%), $color) repeat-x !important;
color: color-yiq($color);
&.btn {
@@ -46,7 +46,7 @@
}
&:hover {
@include bg-gradient-variant('&', darken($color, 7.5%));
background: $color linear-gradient(180deg, mix($body-bg, darken($color, 7.5%), 15%), darken($color, 7.5%)) repeat-x !important;
border-color: darken($color, 10%);
color: darken(color-yiq($color), 7.5%);
}
@@ -55,7 +55,7 @@
&:not(:disabled):not(.disabled).active,
&:active,
&.active {
@include bg-gradient-variant('&', darken($color, 10%));
background: $color linear-gradient(180deg, mix($body-bg, darken($color, 10%), 15%), darken($color, 10%)) repeat-x !important;
border-color: darken($color, 12.5%);
color: color-yiq(darken($color, 10%));
}

View File

@@ -42,7 +42,7 @@
.bg-gradient-#{$name},
.card-#{$name}:not(.card-outline) {
.btn-tool {
color: rgba(color-yiq($color), 0.8);
color: rgba(color-yiq($color), .8);
&:hover {
color: color-yiq($color);
@@ -63,7 +63,7 @@
table td.hour:hover,
table td.minute:hover,
table td.second:hover {
background: darken($color, 8%);
background-color: darken($color, 8%);
color: color-yiq($color);
}
@@ -73,7 +73,7 @@
table td.active,
table td.active:hover {
background: lighten($color, 10%);
background-color: lighten($color, 10%);
color: color-yiq($color);
}
}

View File

@@ -5,32 +5,32 @@
// Custom Switch Variant
@mixin custom-switch-variant($name, $color) {
&.custom-switch-off-#{$name} {
& .custom-control-input ~ .custom-control-label::before {
background: #{$color};
.custom-control-input ~ .custom-control-label::before {
background-color: #{$color};
border-color: darken($color, 20%);
}
& .custom-control-input:focus ~ .custom-control-label::before {
.custom-control-input:focus ~ .custom-control-label::before {
box-shadow: 0 0 0 1px $body-bg, 0 0 0 2px rgba($color, .25);
}
& .custom-control-input ~ .custom-control-label::after {
background: darken($color, 25%);
.custom-control-input ~ .custom-control-label::after {
background-color: darken($color, 25%);
}
}
&.custom-switch-on-#{$name} {
& .custom-control-input:checked ~ .custom-control-label::before {
background: #{$color};
.custom-control-input:checked ~ .custom-control-label::before {
background-color: #{$color};
border-color: darken($color, 20%);
}
& .custom-control-input:checked:focus ~ .custom-control-label::before {
.custom-control-input:checked:focus ~ .custom-control-label::before {
box-shadow: 0 0 0 1px $body-bg, 0 0 0 2px rgba($color, .25);
}
& .custom-control-input:checked ~ .custom-control-label::after {
background: lighten($color, 30%);
.custom-control-input:checked ~ .custom-control-label::after {
background-color: lighten($color, 30%);
}
}
}
@@ -79,3 +79,45 @@
}
}
}
// Custom Control Input Variant
@mixin custom-control-input-variant($name, $color) {
$custom-control-indicator-checked-color: $color;
$custom-checkbox-indicator-icon-checked: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='#{$custom-control-indicator-checked-color}' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E"), "#", "%23");
$custom-radio-indicator-icon-checked: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='#{$custom-control-indicator-checked-color}'/%3E%3C/svg%3E"), "#", "%23");
.custom-control-input-#{$name} {
&:checked ~ .custom-control-label::before {
border-color: $color;
@include gradient-bg($color);
}
&.custom-control-input-outline:checked {
&[type="checkbox"] ~ .custom-control-label::after {
background-image: $custom-checkbox-indicator-icon-checked !important;
}
&[type="radio"] ~ .custom-control-label::after {
background-image: $custom-radio-indicator-icon-checked !important;
}
}
&:focus ~ .custom-control-label::before {
// the mixin is not used here to make sure there is feedback
@if $enable-shadows {
box-shadow: $input-box-shadow, 0 0 0 $input-btn-focus-width rgba($color, .25);
} @else {
box-shadow: 0 0 0 $input-btn-focus-width rgba($color, .25);
}
}
&:focus:not(:checked) ~ .custom-control-label::before {
border-color: lighten($color, 25%);
}
&:not(:disabled):active ~ .custom-control-label::before {
background-color: lighten($color, 35%);
border-color: lighten($color, 35%);
}
}
}

View File

@@ -3,9 +3,9 @@
//
// Direct Chat Variant
@mixin direct-chat-variant($bg-color, $color: #fff) {
@mixin direct-chat-variant($bg-color, $color: $white) {
.right > .direct-chat-text {
background: $bg-color;
background-color: $bg-color;
border-color: $bg-color;
color: color-yiq($bg-color);

View File

@@ -25,11 +25,8 @@
}
// Gradient background
@mixin gradient($color: #F5F5F5, $start: #EEE, $stop: #FFF) {
background: $color;
background: -webkit-gradient(linear, left bottom, left top, color-stop(0, $start), color-stop(1, $stop));
background: -ms-linear-gradient(bottom, $start, $stop);
background: -moz-linear-gradient(center bottom, $start 0%, $stop 100%);
background: -o-linear-gradient($stop, $start);
@mixin gradient($color: #f5f5f5, $start: #eee, $stop: $white) {
background-color: $color;
background-image: gradient(linear, left bottom, left top, color-stop(0, $start), color-stop(1, $stop));
}

View File

@@ -3,7 +3,7 @@
//
// Navbar Variant
@mixin navbar-variant($color, $font-color: rgba(255, 255, 255, 0.8), $hover-color: #f6f6f6, $hover-bg: rgba(0, 0, 0, 0.1)) {
@mixin navbar-variant($color, $font-color: rgba(255, 255, 255, .8), $hover-color: #f6f6f6, $hover-bg: rgba(0, 0, 0, .1)) {
background-color: $color;
.nav > li > a {
@@ -17,7 +17,7 @@
.nav .open > a:hover,
.nav .open > a:focus,
.nav > .active > a {
background: $hover-bg;
background-color: $hover-bg;
color: $hover-color;
}
@@ -27,7 +27,7 @@
&:hover,
&:focus {
background: $hover-bg;
background-color: $hover-bg;
color: $hover-color;
}
}

View File

@@ -5,14 +5,14 @@
// Sidebar Color
@mixin sidebar-color($color) {
.nav-sidebar > .nav-item {
& > .nav-link.active {
> .nav-link.active {
background-color: $color;
color: color-yiq($color);
}
}
.nav-sidebar.nav-legacy > .nav-item {
& > .nav-link.active {
> .nav-link.active {
border-color: $color;
}
}
@@ -136,7 +136,7 @@
.sidebar-form,
.user-panel > .info {
display: block !important;
-webkit-transform: translateZ(0);
transform: translateZ(0);
}
.nav-sidebar > .nav-item > .nav-link > span {

View File

@@ -5,17 +5,17 @@
// Toast Variant
@mixin toast-variant($name, $color) {
&.bg-#{$name} {
background: rgba($color, .9) !important;
background-color: rgba($color, .9) !important;
@if (color-yiq($color) == $yiq-text-light) {
.close {
color: color-yiq($color);
text-shadow: 0 1px 0 #000;
text-shadow: 0 1px 0 $black;
}
}
.toast-header {
background: rgba($color, .85);
background-color: rgba($color, .85);
color: color-yiq($color);
}
}

View File

@@ -1,7 +1,7 @@
//
// Pages: 400 and 500 error pages
//
.error-page {
margin: 20px auto 0;
width: 600px;

Some files were not shown because too many files have changed in this diff Show More