Compare commits

..

245 Commits

Author SHA1 Message Date
Abdullah Almsaeed
7cfbe94b7e Update npmignore 2017-06-25 14:56:15 -04:00
Abdullah Almsaeed
187dcfae4d add npmignore 2017-06-25 14:53:15 -04:00
Abdullah Almsaeed
f4ee8fba68 Use dependecy manager when applicable issue #1532 2017-06-25 14:46:09 -04:00
Abdullah Almsaeed
fbbc450c41 Fix issue #1547 2017-06-25 09:33:22 -04:00
Abdullah Almsaeed
4b0d73bab9 Fix issue #1536 2017-06-25 09:13:29 -04:00
Abdullah Almsaeed
41d3db21ed Fix issue #1549 2017-06-24 11:02:54 -04:00
Abdullah Almsaeed
6f77ce584e Fix #1490 disabled nav tab 2017-05-18 17:52:37 -04:00
Abdullah Almsaeed
87209a984a Update docs links 2017-05-18 17:36:54 -04:00
Abdullah Almsaeed
406cda26d9 Update links 2017-05-18 17:36:20 -04:00
Abdullah Almsaeed
c6b45cdfa0 Resolve conflict 2017-05-18 08:22:52 -04:00
Abdullah Almsaeed
a60df9f050 Merge branch 'v2.4.0-dev' 2017-05-18 08:12:45 -04:00
Abdullah Almsaeed
4169db0857 Resolve conflicts 2017-05-18 08:11:54 -04:00
Abdullah Almsaeed
342a0ac17f Update dependencies 2017-05-17 19:23:47 -04:00
Abdullah Almsaeed
ec245fd46e Update README 2017-05-17 19:23:05 -04:00
Abdullah Almsaeed
ccb00ccdad Update modal page to add buttons and animation 2017-05-17 19:21:12 -04:00
Abdullah Almsaeed
7089f63213 Update README.md 2017-05-16 18:46:37 -04:00
Michaël Arnauts
bf174bfcb0 Fix typo in collapsed-sidebar.html (#1422) 2017-04-30 08:44:44 -04:00
Gavin Gilmour
1f797fd5f7 Fix README headers (#1425)
As title.
2017-04-16 08:55:27 -04:00
Gabor Mojzes
b12cc7d9e4 Updated changelog with already released versions (#1438)
* Fix style

* Updated changelog with already released versions
2017-04-16 08:53:16 -04:00
Gabor Mojzes
26a56938ce Fix Bootstrap version number (#1447) 2017-04-16 08:51:12 -04:00
Abdullah Almsaeed
4c25d55149 Refromat code 2017-04-04 18:54:18 -04:00
Gil Ferreira
eb782d743b Added CoPilot to example implementations. (#1359)
* Added CoPilot to example implementations. This is a version of AdminLTE that makes it easy to use Vue.js

* Added copilot into implementation page so it isn't overridden by grunt
2017-03-23 22:12:33 -04:00
Abdullah Almsaeed
b7da81b3d3 Merge pull request #1355 from utsman/fix-comment
Fix Comment
2017-03-23 19:18:25 -04:00
Abdullah Almsaeed
6f754362f5 Merge pull request #1398 from MrMitch/MrMitch-patch-name
fix name attribute in bower.json, fix #1397
2017-03-23 19:12:24 -04:00
Abdullah Almsaeed
d1dd9b8013 Merge pull request #1417 from wandersonwhcr/fix-screenshot-markdown
Fix Screenshot Mardown
2017-03-23 19:10:17 -04:00
Wanderson
936302b847 Fix screenshot mardown 2017-03-20 18:03:01 -03:00
Mickael GOETZ
a0475e08ae fix name attribute in bower.json
The package name cannot contain uppercase letters.
https://github.com/bower/spec/blob/master/json.md#name
2017-03-07 12:53:17 +01:00
Abdullah Almsaeed
235481d1d6 Remove font import from css and add it to html 2017-03-04 18:38:10 -05:00
Abdullah Almsaeed
37c8bbb019 Bump version up 2017-03-04 12:23:16 -05:00
Abdullah Almsaeed
890ccbdb09 Remove not needed comments 2017-03-04 12:20:23 -05:00
Abdullah Almsaeed
30324f4f33 Fix direct chat toggle trigger 2017-03-04 12:19:22 -05:00
Abdullah Almsaeed
324bca9f14 Activate bootstrap tooltips 2017-03-04 12:19:00 -05:00
Abdullah Almsaeed
2c372a2ce2 Create direct chat plugin 2017-03-04 12:13:04 -05:00
Abdullah Almsaeed
b04a99466d Add deprectated notice 2017-03-04 12:12:42 -05:00
Abdullah Almsaeed
201d482066 Update readme 2017-03-04 12:11:59 -05:00
Abdullah Almsaeed
b5f4bba4e6 Merge branch 'master' of https://github.com/almasaeed2010/AdminLTE 2017-02-27 08:29:01 -05:00
Abdullah Almsaeed
a1f6bb07d3 Update version to 2.3.12 2017-02-27 08:28:57 -05:00
Abdullah Almsaeed
024e3faa9d Update readme 2017-02-26 16:13:34 -05:00
Abdullah Almsaeed
436513ac24 Update readme 2017-02-26 16:12:36 -05:00
Abdullah Almsaeed
d2d63c857a Update readme 2017-02-26 16:09:42 -05:00
Abdullah Almsaeed
57c62f4222 Make JSHint happy 2017-02-26 16:05:36 -05:00
Abdullah Almsaeed
af4ece9a80 Update version 2017-02-26 16:04:47 -05:00
Abdullah Almsaeed
3f5abdbfca Make documentation compatible with the new js 2017-02-26 16:04:01 -05:00
Abdullah Almsaeed
383d685a5f Make pages compatible with the new js 2017-02-26 16:02:25 -05:00
Abdullah Almsaeed
075fe294ed Update todo list plugin usage example 2017-02-25 14:54:11 -05:00
Abdullah Almsaeed
9f870d0fad Add lint tasks and update less and js tasks 2017-02-25 14:53:27 -05:00
Abdullah Almsaeed
3c672fe9aa Seperate treeview plugin and fix control sidebar for the fixed layout 2017-02-25 14:52:04 -05:00
Abdullah Almsaeed
a7d49bd656 Make JSHint ignore app.js 2017-02-25 14:50:35 -05:00
Abdullah Almsaeed
f02c61eb0e Fix issue #1330 and update border colors 2017-02-25 14:47:24 -05:00
Abdullah Almsaeed
469e9cd136 Update data selector to match the name of the plugin 2017-02-25 14:46:01 -05:00
Abdullah Almsaeed
84ca9cdc24 Make listeners specific to the element 2017-02-25 14:45:03 -05:00
Abdullah Almsaeed
01b4740d93 Add more options and allow methods to get executed from outside the plugin 2017-02-25 14:43:23 -05:00
Abdullah Almsaeed
17c9366f4b Compile LESS 2017-02-25 14:40:16 -05:00
Abdullah Almsaeed
7cecd1922d Add compiled JS plugins 2017-02-25 14:39:54 -05:00
Abdullah Almsaeed
d10ba04ec9 Add TodoList plugin 2017-02-25 14:38:26 -05:00
Abdullah Almsaeed
51142e7fc9 Add BoxRefresh plugin 2017-02-25 14:38:05 -05:00
Abdullah Almsaeed
28c75ef8a0 Add BoxWidget plugin 2017-02-25 14:37:38 -05:00
Abdullah Almsaeed
cdc2e7e3d0 Create control sidebar functionality 2017-02-19 18:20:47 -05:00
Abdullah Almsaeed
b5e67488e7 Create JSHINT rules for Gruntfile 2017-02-19 10:44:41 -05:00
Abdullah Almsaeed
178adf5dc0 Create PushMenu widget 2017-02-19 10:43:39 -05:00
Abdullah Almsaeed
6683ab7303 Create Layout widget 2017-02-19 10:43:19 -05:00
Abdullah Almsaeed
7aa9f44d66 Create treeview css 2017-02-19 10:43:01 -05:00
Abdullah Almsaeed
bfbccf9bf7 Create Tree widget 2017-02-19 10:42:30 -05:00
Abdullah Almsaeed
61cd9ca7b0 Fix issue #1342 2017-02-18 17:32:34 -05:00
Abdullah Almsaeed
aa945e6e6f Update jquery to 3.1 2017-02-13 08:42:03 -05:00
Abdullah Almsaeed
d73be88861 Add JSCS and JSHINT rules 2017-02-13 08:41:47 -05:00
Abdullah Almsaeed
f46e5198b7 Make JSCS and JSHINT happy 2017-02-13 08:40:59 -05:00
Abdullah Almsaeed
be0a0b17b0 Comply with jscs andjshint 2017-02-12 19:15:52 -05:00
utsman
074d1ca039 Fix Comment 2017-02-06 01:39:19 +09:00
Abdullah Almsaeed
fcc14dcff7 Merge pull request #1328 from Skasi/master
Fix typos
2017-01-17 06:32:41 -08:00
Skasi
bd3799eb7c Fix typos 2017-01-17 15:28:35 +01:00
Abdullah Almsaeed
082ffa3d41 Merge pull request #1326 from Skasi/patch-1
Fix typo
2017-01-17 05:33:46 -08:00
Skasi
09c91313a0 Fix typo 2017-01-17 13:43:43 +01:00
Abdullah Almsaeed
1273f93e67 Update version number 2017-01-12 08:31:10 -08:00
Abdullah Almsaeed
74c27f7f11 Update README.md 2017-01-11 22:32:33 -08:00
Abdullah Almsaeed
501448ad6f Merge pull request #1311 from yajra/bump-npm-version
Bump npm version to v2.3.11.
2017-01-11 09:16:46 -05:00
Abdullah Almsaeed
cdcf40edc0 Update version 2017-01-11 09:14:59 -05:00
Arjay Angeles
8747e8be04 Bump npm version to v2.3.11. 2017-01-11 15:39:58 +08:00
Abdullah Almsaeed
2be703222a Update colors @gray color to @gray-lte 2017-01-08 16:03:57 -05:00
Abdullah Almsaeed
95d377eabc Fix default box solid color issue 2017-01-08 15:57:03 -05:00
Abdullah Almsaeed
194f92be3a Remove test from starter page 2017-01-08 15:43:46 -05:00
Abdullah Almsaeed
0c4ca8c4db Merge branch 'PeterDaveHelloKitchen-image-optimize' 2017-01-08 15:42:44 -05:00
Abdullah Almsaeed
2f3d9ca953 Merge PR #1108 to optimize images 2017-01-08 15:42:30 -05:00
Abdullah Almsaeed
02efe00fc9 Fix #1256 2017-01-08 15:37:30 -05:00
Abdullah Almsaeed
4758ab5216 Fix #1269 2017-01-08 15:32:52 -05:00
Abdullah Almsaeed
b621ed77f2 Fix #1276 2017-01-08 15:23:14 -05:00
Abdullah Almsaeed
76e1d899d5 Fix #1296 2017-01-08 15:07:55 -05:00
Abdullah Almsaeed
b016468ab2 Fix #1300 2017-01-08 15:03:40 -05:00
Abdullah Almsaeed
a527b7fe99 Allow for adminlte without plugin override 2017-01-08 12:40:55 -05:00
Abdullah Almsaeed
8410b2fdc1 Merge pull request #1101 from almasaeed2010/issue-668
Split CSS files
2017-01-08 12:39:05 -05:00
Abdullah Almsaeed
e73de15f31 Causes bootstrap slider to disappear
Revert "Merge pull request #1186 from manhhailua/patch-1"

This reverts commit 96174a1ada, reversing
changes made to 1817e83917.
2017-01-08 12:01:36 -05:00
Abdullah Almsaeed
96174a1ada Merge pull request #1186 from manhhailua/patch-1
sliders bug fixes
2017-01-08 11:58:49 -05:00
Abdullah Almsaeed
1817e83917 Merge pull request #1205 from tyrollins/master
Remove unnecessary coma
2017-01-08 11:43:38 -05:00
Abdullah Almsaeed
fff97052cc Merge pull request #1211 from cquanu/master
Update BS to v3.3.7
2017-01-08 11:38:15 -05:00
Abdullah Almsaeed
7ec1e072d9 Merge pull request #1224 from kennynaoh/master
Add CDNJS version badge in readme
2017-01-08 11:33:59 -05:00
Abdullah Almsaeed
3d4acd72d9 Fix typo 2017-01-08 11:27:44 -05:00
Abdullah Almsaeed
bb61097fea Merge pull request #1239 from zzzeep/master
Removed redundant punctuation ":"
2017-01-08 11:27:26 -05:00
Abdullah Almsaeed
5ecdce9813 Fix typo 2017-01-08 11:26:47 -05:00
Abdullah Almsaeed
508e4f0815 Merge pull request #1242 from gauravmak/patch-1
Wrong Spell
2017-01-08 11:25:24 -05:00
Abdullah Almsaeed
70b95bbf6f Merge pull request #1264 from Strato/patch-1
Fixed a typo
2017-01-08 11:24:31 -05:00
Abdullah Almsaeed
dc83709196 Merge pull request #1286 from marcusportmann/master
Fixed jumping buttons with Bootstrap tooltip
2017-01-08 11:18:20 -05:00
Abdullah Almsaeed
09651c1d0c Merge branch 'master' of https://github.com/almasaeed2010/AdminLTE 2017-01-08 11:13:22 -05:00
Abdullah Almsaeed
eec8a98901 add laravel implementation PR #1301 2017-01-08 11:13:16 -05:00
Abdullah Almsaeed
e736df9f64 Merge pull request #1268 from eryshev/master
Add option to control sidemenu's tree views.
2017-01-06 11:01:55 -05:00
Abdullah Almsaeed
12ea7168fb Happy New Years! 🎉 2017-01-01 10:23:43 -05:00
Marcus Portmann
90e62c2af0 Fixed jumping buttons with Bootstrap tooltip 2016-12-21 21:11:49 +02:00
Abdullah Almsaeed
e499f26f76 Run LESS 2016-12-11 16:04:13 -05:00
Abdullah Almsaeed
53b904d946 Remove font antialiasing 2016-12-11 16:00:04 -05:00
Alexey ERYSHEV
7ec587b75b Add option to control sidemenu's tree views. 2016-12-05 13:17:36 +01:00
François Guillot
0159d06b24 Fixed a typo
It works because it's an alias. But it might be removed without warning.

While I'm here, being able to deactivate the treeview on the sidebar would be super nice, or have it as an _opt-in_ using a CSS class like *sidebar-as-tree*.
2016-12-02 14:48:17 +01:00
Gaurav Makhecha
51bf7c4a80 Wrong Spell 2016-11-07 17:11:44 +05:30
Abdullah Almsaeed
6e2f5b0708 Fix issue #1191 2016-11-06 13:19:15 -05:00
Abdullah Almsaeed
8a7b80c64c Add yarn lock file 2016-11-06 13:18:50 -05:00
Abdullah Almsaeed
ced14b133d Update version number 2016-11-04 10:42:55 -04:00
Abdullah Almsaeed
1fe157ae77 Update Bootstrap to 3.3.7 2016-11-04 10:41:51 -04:00
Abdullah Almsaeed
3cbb6273e0 Fix sidebar angle icon issue #1237 2016-11-04 10:36:03 -04:00
zzzeep
7e011ed4b5 Removed redundant punctuation ":" 2016-11-04 20:31:07 +08:00
Abdullah Almsaeed
e3d93f7e1d Update version 2016-10-19 12:31:38 -04:00
Abdullah Almsaeed
797b65b3ca Compile less and minify js 2016-10-19 11:34:25 -04:00
Abdullah Almsaeed
5b14053e35 Update version number 2016-10-19 11:30:41 -04:00
naoh
4de79841b4 Add CDNJS version badge in readme
This will add the badge to show its version on CDNJS and also link to its page on CDNJS!
2016-10-18 17:46:38 +08:00
Quan You
8d21b84474 Update BS to v3.3.7 2016-10-06 17:40:19 +08:00
Tyler Rollins
7561213185 remove unnecessary coma 2016-10-02 18:52:12 -07:00
Abdullah Almsaeed
1a89a2feab Merge pull request #1160 from antoniocambados/antoniocambados-patch-1158
Update sidebar.less
2016-09-12 16:23:06 -04:00
Abdullah Almsaeed
060f79063e Merge branch 'rickysang-master' 2016-09-12 16:22:01 -04:00
Abdullah Almsaeed
159887612e merge pull request #1165 2016-09-12 16:21:52 -04:00
Abdullah Almsaeed
e207c9c0c8 Merge pull request #1166 from liamgall/master
Fix link to dashboard in widgets page
2016-09-12 16:18:09 -04:00
Abdullah Almsaeed
be18803032 Merge pull request #1178 from mortonfox/patch-1
Fix link to changelog
2016-09-12 16:16:36 -04:00
Mạnh Phạm
821a3bc063 sliders bug fixes
- use `.bootstrapSlider()` instead of `.slider()` because `.slider()` does not work right with react.js
- add attribute:type to `.ionRangeSlider()`: related issue at [ion.rangeSlider repo](https://github.com/IonDen/ion.rangeSlider/issues/343)
2016-09-12 16:33:28 +07:00
Abdullah Almsaeed
79bd17075e Merge pull request #1184 from leoncheek/master
Fix sidebar angle rotate issue
2016-09-05 12:44:23 -04:00
Leon Cheek
30f9916802 Fix sidebar li.active fa-angle-left rotate. 2016-09-04 23:43:26 +08:00
Morton Fox
5170c4f8ea Fix link to changelog 2016-09-01 00:32:40 -04:00
Kihwan Kim
09a8974ab7 Merge pull request #1 from liamgall/liamgall-patch-1
changed index2.html to ../index2.html
2016-08-20 14:43:20 +09:00
Kihwan Kim
e989db685e changed index2.html to ../index2.html
it send me to file:///~~~/AdminLTE-2.3.6/pages/index2.html
so can't find page.

changed "index2.html" to "../index2.html"
2016-08-20 14:38:44 +09:00
rickysang
87cba5d352 Fix issue #1008 2016-08-19 18:19:40 +08:00
Antonio Cambados
8f0a652055 Update sidebar.less
Fixes https://github.com/almasaeed2010/AdminLTE/issues/1158: expandable indicators of sidebar's expandable menu items didn't toggle (rotate) upon expansion.
2016-08-11 08:47:38 +02:00
Abdullah Almsaeed
be11566d95 Update changelog 2016-08-04 19:22:06 -04:00
Abdullah Almsaeed
d4877677ab Update version 2016-08-04 19:20:57 -04:00
Abdullah Almsaeed
98400d1498 Use markdown in the changelog file 2016-08-04 19:17:03 -04:00
Abdullah Almsaeed
1bffa9fd44 Patch for issue #1098 2016-08-04 19:12:52 -04:00
Abdullah Almsaeed
7d78453e8a Update support emails 2016-07-16 07:13:49 -04:00
Peter Dave Hello
0e601c1463 optimize png images using zopflipng 2016-07-10 18:01:03 +08:00
Abdullah Almsaeed
b8ea25e8eb Provide fix for issue #668 2016-07-04 11:48:51 -04:00
Abdullah Almsaeed
16bb613abe Merge pull request #1096 from nobusugi246/fix_css_content_too_large
min-height of .content is too large.
2016-07-03 11:27:15 -04:00
Abdullah Almsaeed
0ab2eb7f38 Update version 2016-07-03 11:21:22 -04:00
Abdullah Almsaeed
665514209b Fix issue #1097 2016-07-03 11:17:11 -04:00
nobusugi246
13f3036479 min-height of .content is too large. 2016-07-03 11:27:07 +09:00
Abdullah Almsaeed
2de98d7b70 Remove changelog from readme and specify new source 2016-07-02 18:17:47 -04:00
Abdullah Almsaeed
140c350c5c Merge pull request #1040 from OskarStark/patch-1
updated changelog with already released versions
2016-07-02 18:09:39 -04:00
Abdullah Almsaeed
68e473db43 Update package.json version 2016-07-02 10:18:53 -04:00
Abdullah Almsaeed
64a91f7b56 Update version number 2016-07-01 16:36:20 -04:00
Abdullah Almsaeed
8e278e1145 Fix issue #1093 2016-07-01 14:09:03 -04:00
Abdullah Almsaeed
bca8e8ec66 Fix issue #427 by updating slimscroll 2016-07-01 12:39:46 -04:00
Abdullah Almsaeed
db51bd8b98 Fix isse #683 2016-07-01 12:36:40 -04:00
Abdullah Almsaeed
1a29b58111 Revert boxed layout fix to attempt another 2016-07-01 12:31:17 -04:00
Abdullah Almsaeed
35dacb3f97 Fix issue #1091 2016-07-01 12:13:44 -04:00
Abdullah Almsaeed
688631379b Fix issue #683 2016-07-01 12:07:06 -04:00
Abdullah Almsaeed
05f0528552 Merge branch 'master' of https://github.com/almasaeed2010/AdminLTE 2016-07-01 11:59:45 -04:00
Abdullah Almsaeed
20cd83d204 Fix issue #995 2016-07-01 11:59:39 -04:00
Abdullah Almsaeed
9d6c25d7b2 Merge pull request #1094 from xvonabur/patch-2
Remove sidebar click handler, before assigning one. Fix sidebar autoclose bug.
2016-07-01 11:57:19 -04:00
Abdullah Almsaeed
6ed3a7bfc4 Merge pull request #1006 from Jerome1337/fix-sidebar-label
Fix/allow multiple labels on Firefox
2016-06-29 09:19:00 -04:00
Abdullah Almsaeed
476653811a Merge pull request #1090 from choonho/master
Update typo replated with jQuery
2016-06-28 22:53:15 -04:00
Choonho Son
84ad18c3e8 Update typo replated with jQuery
jQuery file is jquery-2.2.3.min.js not jQuery-2.2.3.min.js

Signed-off-by: Choonho Son <choonho.son@gmail.com>
2016-06-29 01:54:32 +00:00
Abdullah Almsaeed
59c8ea100a Merge pull request #1003 from yu1ro/replace-year
replace 2015 to 2016
2016-06-28 20:39:03 -04:00
Abdullah Almsaeed
493bdb6580 Merge pull request #1015 from Fl0ux/master
Update Date Range Picker
2016-06-28 19:15:44 -04:00
Abdullah Almsaeed
abe80a0e92 Merge pull request #1029 from angelitomg/master
Update jQuery version to 2.2.3
2016-06-28 19:12:06 -04:00
Abdullah Almsaeed
0dc992837e Merge branch 'master' of https://github.com/almasaeed2010/AdminLTE 2016-06-28 18:33:50 -04:00
Abdullah Almsaeed
ec2e31079b Revert 2016-06-28 18:33:46 -04:00
Abdullah Almsaeed
d003040ddc Merge pull request #1089 from almasaeed2010/revert-1084-master
Revert "Fixed loss of "active" class after collapsing menu"
2016-06-28 18:33:23 -04:00
Abdullah Almsaeed
b07ef01535 Revert "Fixed loss of "active" class after collapsing menu" 2016-06-28 18:32:19 -04:00
Abdullah Almsaeed
b4f1c53713 Merge branch 'master' of https://github.com/almasaeed2010/AdminLTE 2016-06-28 16:03:24 -04:00
Abdullah Almsaeed
bcd808d203 - 2016-06-28 16:03:18 -04:00
Abdullah Almsaeed
9b80592460 Merge pull request #1084 from blz-ea/master
Add "disable sidebar accordion feature" to preserve active classes in the sidebar.
2016-06-28 16:02:43 -04:00
Abdullah Almsaeed
8438a30eaa Merge branch 'master' of https://github.com/almasaeed2010/AdminLTE 2016-06-28 15:29:11 -04:00
Abdullah Almsaeed
da310983fd Update ChartJS to 1.1.1 2016-06-28 15:29:03 -04:00
Abdullah Almsaeed
04e4fcb934 Merge pull request #1061 from freedayko/update-select2
Update Select2 plugin to version 4.0.3
2016-06-28 15:18:37 -04:00
Abdullah Almsaeed
1c243550e4 Merge 2016-06-28 15:01:00 -04:00
Abdullah Almsaeed
b71926e6ac Update Readme 2016-06-28 14:58:25 -04:00
Abdullah Almsaeed
f9a3f8b5ff Merge pull request #1041 from OskarStark/patch-2
added missing changelog to README. refs #1040
2016-06-28 14:38:07 -04:00
blz-ea
0c4ebb13c2 Update AdminLTE.css 2016-06-27 09:40:06 +05:00
blz-ea
198e91c64a Update app.js 2016-06-27 09:38:45 +05:00
Aleksandr Palyan
9b77655eb3 Update Select2 plugin to version 4.0.3 2016-05-27 21:42:25 +03:00
Oskar Stark
c9dcc7c1dd added missing changelog to README. refs #1040 2016-05-09 10:57:19 +02:00
Oskar Stark
e5e0c53b0c updated changelog with already released versions
2.3.2 and 2.3.3 were missing
2016-05-09 10:54:51 +02:00
Angelito
6eab94926c Update jQuery version to 2.2.3 2016-05-01 14:56:20 -03:00
Foulques du Peloux
a0addfa177 Update Date Range Picker 2016-04-19 16:49:45 +02:00
Foulques du Peloux
cb6ac64ac4 Update Date Range Picker 2016-04-19 16:48:50 +02:00
Foulques du Peloux
e61eb404d2 Newest momentjs version 2016-04-19 16:48:20 +02:00
Foulques du Peloux
ea7823b72c Delete old momentjs version 2016-04-19 16:48:01 +02:00
Foulques du Peloux
88b4e3d8b6 Delete old momentjs version 2016-04-19 16:47:48 +02:00
Foulques du Peloux
446b1cec52 Update Date Range Picker 2016-04-19 16:47:19 +02:00
Foulques du Peloux
d73cf99666 Update Date Range Picker 2016-04-19 16:46:52 +02:00
Jerome Pogeant
139b4604c5 Update sidebar label template to allow multiple labels 2016-04-08 10:32:03 +02:00
Yuichiro Kawano
af4360260c replace 2015 to 2016
close #998
2016-04-05 23:11:29 +09:00
Abdullah Almsaeed
0050e298a2 Merge pull request #991 from johnberberich/patch-1
Add Bower, NPM and Packagist versions to README.md
2016-03-28 18:50:42 -04:00
John Berberich
d051696b4b Add Bower, NPM and Packagist versions to README.md 2016-03-28 17:17:47 -04:00
Abdullah Almsaeed
a49aaf581b Add notification for changelog 2016-03-24 11:09:27 -04:00
Abdullah Almsaeed
8db9797950 Update BS version 2016-03-24 10:31:41 -04:00
Abdullah Almsaeed
497ca6d7e6 Update version number 2016-03-24 10:00:18 -04:00
Abdullah Almsaeed
034c31e089 Merge pull request #976 from suvjunmd/markup
Fixed W3C Markup Validation errors and warnings
2016-03-23 11:50:55 -04:00
Abdullah Almsaeed
bdec7573df Merge pull request #983 from johnberberich/fix-help-block-validation
Apply validation state colors to form group help blocks
2016-03-23 11:49:13 -04:00
John Berberich
f3b2f0d46c Apply form validation state colors to help blocks 2016-03-23 11:30:40 -04:00
Dmitri Suvorov
c2bc22698c Fixed W3C Markup Validation errors and warnings 2016-03-20 21:05:32 +02:00
Abdullah Almsaeed
bd61a3b66b Merge #918. Fix date-range button selection issue 2016-03-14 12:14:28 -04:00
Abdullah Almsaeed
fe147c9b21 Merge pull request #944 from bluemanos/master
update font-awesome to 4.5.0, change CDN to cdnjs.com
2016-03-13 21:14:03 -04:00
Abdullah Almsaeed
faa724a692 Merge pull request #935 from schulzetenberg/master
Add datepicker example
2016-03-13 21:11:52 -04:00
Abdullah Almsaeed
dbfd0322c0 Merge pull request #904 from 0xMatt/master
Improve tree click event handler
2016-03-13 21:02:41 -04:00
Abdullah Almsaeed
720c036708 Merge pull request #816 from magikMaker/feature/package-json
added main property to package.json
2016-03-13 20:56:05 -04:00
Abdullah Almsaeed
2f64568f4c Fix #957. Make pace visible in skin black 2016-03-13 20:47:41 -04:00
Abdullah Almsaeed
18b882dd3f Update ckeditor 2016-03-13 20:16:33 -04:00
Abdullah Almsaeed
4fbef59be1 Fix typo 2016-03-13 20:12:38 -04:00
Szymon Bluma
9c28589ad6 updated momentjs library to 2.11.2 2016-02-25 15:18:13 +01:00
Szymon Bluma
bd36febbc0 update font-awesome to 4.5.0, change CDN to cdnjs.com 2016-02-25 15:07:14 +01:00
Abdullah Almsaeed
2b73a99716 Fix sentence 2016-02-24 10:21:30 -05:00
Abdullah Almsaeed
be82cd2d05 Update README.md 2016-02-24 10:20:20 -05:00
Jacob Schulzetenberg
bc696b82cc Formatting fix 2016-02-19 13:31:25 -07:00
Jacob Schulzetenberg
fe3382b879 Add datepicker plugin to examples 2016-02-19 13:28:53 -07:00
Jacob Schulzetenberg
525f1e62fe Merge remote-tracking branch 'refs/remotes/almasaeed2010/master' 2016-02-19 12:40:21 -07:00
Abdullah Almsaeed
10e1f7fc2d Update License 2016-02-09 13:19:29 -05:00
0xMatt
f284016fa8 Improve click event handler 2016-02-01 12:44:51 -06:00
Abdullah Almsaeed
93e99de603 Merge pull request #877 from suvjunmd/jQuery
Updated jQuery to version 2.2.0
2016-01-18 10:45:30 -05:00
Abdullah Almsaeed
6a45ff52d0 Add Laravel implementation #858 2016-01-18 10:44:17 -05:00
Dmitri Suvorov
45b64a9739 Updated jQuery to version 2.2.0 2016-01-16 23:55:16 +02:00
Abdullah Almsaeed
74428d3ec4 Fix issue #812 2016-01-16 13:29:23 -05:00
Abdullah Almsaeed
e6318e7386 Update BS to v3.3.6 2016-01-16 12:48:26 -05:00
Abdullah Almsaeed
41d18400ba Merge pull 2016-01-16 11:28:59 -05:00
Abdullah Almsaeed
fceb5eebe6 Add .sass-cache to gitignore 2016-01-16 11:28:40 -05:00
Abdullah Almsaeed
f741eec73c Merge pull request #822 from condor-bird/patch-5
Duplicate attribute type button
2016-01-16 11:22:47 -05:00
Abdullah Almsaeed
b1e8da631e Merge pull request #818 from gabel/update_bootstrap_slider
Update to bootsrap-slider 5.3.1
2016-01-16 11:22:26 -05:00
Abdullah Almsaeed
732d6bbd59 Merge pull request #821 from pdesmarais/master
Updating to ion.RangeSlider v2.1.2
2016-01-16 11:22:11 -05:00
Abdullah Almsaeed
5482534db4 Merge pull request #829 from gabel/update_momentjs
update moment.js cdn links to version 2.10.6
2016-01-16 11:21:54 -05:00
Abdullah Almsaeed
65904edd76 Merge pull request #831 from gabel/update_colorpicker
Update to bootstrap-colorpicker version  2.3.0
2016-01-16 11:21:42 -05:00
Abdullah Almsaeed
93f2ad2fef Merge pull request #854 from aqnouch/patch-1
Updated copyright to 2016
2016-01-16 11:21:11 -05:00
Abdullah Almsaeed
e92b9acd19 Merge pull request #825 from gabel/update_select2
Update to select2 version 4.0.1
2016-01-16 11:15:35 -05:00
AQNOUCH Mohammed
03ff6f5d9f Updated copyright to 2016 2016-01-01 00:55:21 +00:00
Martin Fischer
d30707611d Update to bootstrap-colorpicker version 2.3.0 2015-12-04 19:18:37 +01:00
Martin Fischer
d7189ad95c update moment.js cdn links to version 2.10.6 2015-12-03 21:40:10 +01:00
Martin Fischer
34ce040105 Update to select2 version 4.0.1 2015-12-02 21:37:31 +01:00
condor
c174dc7b63 Duplicate attribute type button
Duplicate attribute type="button"
2015-12-02 11:46:07 +06:00
Patrick Desmarais
2681b8bd2e Changing the img paths in the css files 2015-12-01 16:00:25 -05:00
Patrick Desmarais
dce8dd7070 Updating to ion.RangeSlider v2.1.2 2015-12-01 14:37:14 -05:00
Martin Fischer
12bf734658 update to bootsrap-slider 5.3.1 2015-11-30 20:53:21 +01:00
Bjørn Wikkeling
ff6ce09d39 added npm install to readme 2015-11-30 14:48:50 +01:00
Bjørn Wikkeling
9c15693784 added main property to package.json 2015-11-30 14:41:24 +01:00
xvonabur
20eba516a4 Remove sidebar click handler, before assigning one 2015-10-11 15:56:02 +03:00
2349 changed files with 103261 additions and 790625 deletions

View File

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

View File

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

View File

@@ -1,9 +0,0 @@
root = true
[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
indent_style = space
indent_size = 2

View File

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

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"
}
}

View File

@@ -1,32 +0,0 @@
---
name: Bug report for AdminLTE v2.4.x
about: Create a report to help us improve AdminLTE v2.4.x
title: "[BUG]"
labels: type:bug, version:2.4.x
assignees: ''
---
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Environment (please complete the following information):**
- AdminLTE Version: [e.g. v2.4.18]
- Operating System: [e.g. macOS Catalina]
- Browser (Version): [e.g. Chrome (Latest)]
**Additional context**
Add any other context about the problem here.

View File

@@ -1,32 +0,0 @@
---
name: Bug report for AdminLTE v3.x
about: Create a report to help us improve AdminLTE v3.x
title: "[BUG]"
labels: type:bug, version:3.x
assignees: ''
---
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
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)]
**Additional context**
Add any other context about the problem here.

View File

@@ -1,20 +0,0 @@
---
name: Feature request for AdminLTE v3.x
about: Suggest an idea for this project
title: "[FEATURE]"
labels: type:enhancement, version:3.x
assignees: ''
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.

38
.gitignore vendored
View File

@@ -1,38 +1,12 @@
// System / Log files
*.DS_Store
*.log
// Archives
*.zip
// Sass Cache
.sass-cache
// Project files
.idea
nbproject
nbproject/private
.vscode/
.vs/
// Node / Bower
node_modules/
bower_components/
// Plugins
/plugins/*/*.md
/plugins/*/*.html
/plugins/*/package.json
// Docs
Gemfile.lock
docs/_site
docs_html/
.jekyll-cache/
.jekyll-metadata
// ETC
.sass-cache/
/nbproject/
/nbproject/private/
/node_modules/
/bower_components/
ad.js
TODO
test.html
ad.js

View File

@@ -1 +1,3 @@
!/docs_html/
bower_components/
documentation/
composer.json

View File

@@ -1,25 +0,0 @@
language: node_js
node_js:
- 8
- 10
- 11
- 12
env:
- INSTALL=yarn
- INSTALL=npm
matrix:
fast_finish: true
exclude:
- node_js: 8
env: INSTALL=yarn
install:
- if [ "yarn" == $INSTALL ]; then yarn install; fi
- if [ "npm" == $INSTALL ]; then npm install; fi
script:
- echo 'Tests must be configured'

281
Gruntfile.js Normal file
View File

@@ -0,0 +1,281 @@
// AdminLTE Gruntfile
module.exports = function (grunt) { // jshint ignore:line
'use strict'
grunt.initConfig({
pkg : grunt.file.readJSON('package.json'),
watch : {
less : {
// Compiles less files upon saving
files: ['build/less/*.less'],
tasks: ['less:development', 'less:production']
},
js : {
// Compile js files upon saving
files: ['build/js/*.js', 'dist/js/app.js'],
tasks: ['js']
},
skins: {
// Compile any skin less files upon saving
files: ['build/less/skins/*.less'],
tasks: ['less:skins', 'less:minifiedSkins']
}
},
notify: {
less : {
title : 'LESS Compiler',
message: 'LESS finished running'
},
uglify: {
options: {
title : 'JS Compiler',
message: 'JS bundler finished running'
}
}
},
// 'less'-task configuration
// This task will compile all less files upon saving to create both AdminLTE.css and AdminLTE.min.css
less : {
// Development not compressed
development : {
files: {
// compilation.css : source.less
'dist/css/AdminLTE.css' : 'build/less/AdminLTE.less',
// AdminLTE without plugins
'dist/css/alt/AdminLTE-without-plugins.css' : 'build/less/AdminLTE-without-plugins.less',
// Separate plugins
'dist/css/alt/AdminLTE-select2.css' : 'build/less/select2.less',
'dist/css/alt/AdminLTE-fullcalendar.css' : 'build/less/fullcalendar.less',
'dist/css/alt/AdminLTE-bootstrap-social.css': 'build/less/bootstrap-social.less'
}
},
// Production compressed version
production : {
options: {
compress: true
},
files : {
// compilation.css : source.less
'dist/css/AdminLTE.min.css' : 'build/less/AdminLTE.less',
// AdminLTE without plugins
'dist/css/alt/AdminLTE-without-plugins.min.css' : 'build/less/AdminLTE-without-plugins.less',
// Separate plugins
'dist/css/alt/AdminLTE-select2.min.css' : 'build/less/select2.less',
'dist/css/alt/AdminLTE-fullcalendar.min.css' : 'build/less/fullcalendar.less',
'dist/css/alt/AdminLTE-bootstrap-social.min.css': 'build/less/bootstrap-social.less'
}
},
// Non minified skin files
skins : {
files: {
'dist/css/skins/skin-blue.css' : 'build/less/skins/skin-blue.less',
'dist/css/skins/skin-black.css' : 'build/less/skins/skin-black.less',
'dist/css/skins/skin-yellow.css' : 'build/less/skins/skin-yellow.less',
'dist/css/skins/skin-green.css' : 'build/less/skins/skin-green.less',
'dist/css/skins/skin-red.css' : 'build/less/skins/skin-red.less',
'dist/css/skins/skin-purple.css' : 'build/less/skins/skin-purple.less',
'dist/css/skins/skin-blue-light.css' : 'build/less/skins/skin-blue-light.less',
'dist/css/skins/skin-black-light.css' : 'build/less/skins/skin-black-light.less',
'dist/css/skins/skin-yellow-light.css': 'build/less/skins/skin-yellow-light.less',
'dist/css/skins/skin-green-light.css' : 'build/less/skins/skin-green-light.less',
'dist/css/skins/skin-red-light.css' : 'build/less/skins/skin-red-light.less',
'dist/css/skins/skin-purple-light.css': 'build/less/skins/skin-purple-light.less',
'dist/css/skins/_all-skins.css' : 'build/less/skins/_all-skins.less'
}
},
// Skins minified
minifiedSkins: {
options: {
compress: true
},
files : {
'dist/css/skins/skin-blue.min.css' : 'build/less/skins/skin-blue.less',
'dist/css/skins/skin-black.min.css' : 'build/less/skins/skin-black.less',
'dist/css/skins/skin-yellow.min.css' : 'build/less/skins/skin-yellow.less',
'dist/css/skins/skin-green.min.css' : 'build/less/skins/skin-green.less',
'dist/css/skins/skin-red.min.css' : 'build/less/skins/skin-red.less',
'dist/css/skins/skin-purple.min.css' : 'build/less/skins/skin-purple.less',
'dist/css/skins/skin-blue-light.min.css' : 'build/less/skins/skin-blue-light.less',
'dist/css/skins/skin-black-light.min.css' : 'build/less/skins/skin-black-light.less',
'dist/css/skins/skin-yellow-light.min.css': 'build/less/skins/skin-yellow-light.less',
'dist/css/skins/skin-green-light.min.css' : 'build/less/skins/skin-green-light.less',
'dist/css/skins/skin-red-light.min.css' : 'build/less/skins/skin-red-light.less',
'dist/css/skins/skin-purple-light.min.css': 'build/less/skins/skin-purple-light.less',
'dist/css/skins/_all-skins.min.css' : 'build/less/skins/_all-skins.less'
}
}
},
// Uglify task info. Compress the js files.
uglify: {
options : {
mangle : true,
preserveComments: 'some'
},
production: {
files: {
'dist/js/app.min.js' : ['dist/js/app.js'],
'dist/js/adminlte.min.js': ['dist/js/adminlte.js']
}
}
},
// Concatenate JS Files
concat: {
options: {
separator: '\n\n',
banner : '/*! AdminLTE app.js\n'
+ '* ================\n'
+ '* Main JS application file for AdminLTE v2. This file\n'
+ '* should be included in all pages. It controls some layout\n'
+ '* options and implements exclusive AdminLTE plugins.\n'
+ '*\n'
+ '* @Author Almsaeed Studio\n'
+ '* @Support <https://www.almsaeedstudio.com>\n'
+ '* @Email <abdullah@almsaeedstudio.com>\n'
+ '* @version <%= pkg.version %>\n'
+ '* @repository <%= pkg.repository.url %>\n'
+ '* @license MIT <http://opensource.org/licenses/MIT>\n'
+ '*/\n\n'
+ '// Make sure jQuery has been loaded\n'
+ 'if (typeof jQuery === \'undefined\') {\n'
+ 'throw new Error(\'AdminLTE requires jQuery\')\n'
+ '}\n\n'
},
dist : {
src : [
'build/js/Layout.js',
'build/js/PushMenu.js',
'build/js/Tree.js',
'build/js/ControlSidebar.js',
'build/js/BoxWidget.js',
'build/js/TodoList.js',
'build/js/DirectChat.js'
],
dest: 'dist/js/adminlte.js'
}
},
// Build the documentation files
includes: {
build: {
src : ['*.html'], // Source files
dest : 'documentation/', // Destination directory
flatten: true,
cwd : 'documentation/build',
options: {
silent : true,
includePath: 'documentation/build/include'
}
}
},
// Optimize images
image: {
dynamic: {
files: [
{
expand: true,
cwd : 'build/img/',
src : ['**/*.{png,jpg,gif,svg,jpeg}'],
dest : 'dist/img/'
}
]
}
},
// Validate JS code
jshint: {
options: {
jshintrc: 'build/js/.jshintrc'
},
grunt : {
options: {
jshintrc: 'build/grunt/.jshintrc'
},
src : 'Gruntfile.js'
},
core : {
src: 'build/js/*.js'
},
demo : {
src: 'dist/js/demo.js'
},
pages : {
src: 'dist/js/pages/*.js'
}
},
jscs: {
options: {
config: 'build/js/.jscsrc'
},
core : {
src: '<%= jshint.core.src %>'
},
pages : {
src: '<%= jshint.pages.src %>'
}
},
// Validate CSS files
csslint: {
options: {
csslintrc: 'build/less/.csslintrc'
},
dist : [
'dist/css/AdminLTE.css'
]
},
// Validate Bootstrap HTML
bootlint: {
options: {
relaxerror: ['W005']
},
files : ['pages/**/*.html', '*.html']
},
// Delete images in build directory
// After compressing the images in the build/img dir, there is no need
// for them
clean: {
build: ['build/img/*']
}
})
// Load all grunt tasks
// LESS Compiler
grunt.loadNpmTasks('grunt-contrib-less')
// Watch File Changes
grunt.loadNpmTasks('grunt-contrib-watch')
// Compress JS Files
grunt.loadNpmTasks('grunt-contrib-uglify')
// Include Files Within HTML
grunt.loadNpmTasks('grunt-includes')
// Optimize images
grunt.loadNpmTasks('grunt-image')
// Validate JS code
grunt.loadNpmTasks('grunt-contrib-jshint')
grunt.loadNpmTasks('grunt-jscs')
// Delete not needed files
grunt.loadNpmTasks('grunt-contrib-clean')
// Lint CSS
grunt.loadNpmTasks('grunt-contrib-csslint')
// Lint Bootstrap
grunt.loadNpmTasks('grunt-bootlint')
// Concatenate JS files
grunt.loadNpmTasks('grunt-contrib-concat')
// Notify
grunt.loadNpmTasks('grunt-notify')
// Linting task
grunt.registerTask('lint', ['jshint', 'csslint', 'bootlint'])
// JS task
grunt.registerTask('js', ['concat', 'uglify'])
// The default task (running 'grunt' in console) is 'watch'
grunt.registerTask('default', ['watch'])
}

View File

@@ -1,6 +1,6 @@
The MIT License (MIT)
Copyright (c) 2014-2018 almasaeed2010
Copyright (c) 2014-2017 Abdullah Almsaeed
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in

116
README.md
View File

@@ -1,115 +1,57 @@
Introduction
============
[![Build Status](https://img.shields.io/travis/ColorlibHQ/AdminLTE/master.svg)](https://travis-ci.org/ColorlibHQ/AdminLTE)
[![npm version](https://img.shields.io/npm/v/admin-lte/latest.svg)](https://www.npmjs.com/package/admin-lte)
![Bower version](https://img.shields.io/bower/v/adminlte.svg)
[![npm version](https://img.shields.io/npm/v/admin-lte.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)
**AdminLTE** is a fully responsive administration template. Based on **[Bootstrap 4](https://getbootstrap.com)** framework.
Highly customizable and easy to use. Fits many screen resolutions from small mobile devices to large desktops.
**AdminLTE** -- is a fully responsive admin template. Based on **[Bootstrap 3](https://github.com/twbs/bootstrap)** framework. Highly customizable and easy to use. Fits many screen resolutions from small mobile devices to large desktops. Check out the live preview now and see for yourself.
**Preview on [AdminLTE.io](https://adminlte.io/themes/v3)**
**Download & Preview on [AdminLTE.IO](https://adminlte.io)**
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.
### Looking for Premium Templates?
**AdminLTE.IO just opened a new premium templates website. Hand picked to ensure the best quality and the most affordable prices. Visit https://themequarry.com for more information.**
!["AdminLTE Presentation"](https://adminlte.io/AdminLTE3.png "AdminLTE Presentation")
## Documentation & Installation Guide
Visit the [online documentation](https://adminlte.io/docs) for the most
updated guide.
**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.
!["AdminLTE Presentation"](https://adminlte.io/AdminLTE2.png "AdminLTE Presentation")
Installation
------------
There are multiple ways to install AdminLTE.
#### Download:
Download from [Github releases](https://github.com/ColorlibHQ/AdminLTE/releases).
#### Using The Command Line:
__Via NPM__
```bash
npm install admin-lte@^3.0 --save
```
__Via Yarn__
```bash
yarn add admin-lte@^3.0
```
__Via Composer__
```bash
composer require "almasaeed2010/adminlte=~3.0"
```
__Via Git__
- Clone to your machine
```
git clone https://github.com/ColorlibHQ/AdminLTE.git
```
Documentation
-------------
Visit the [online documentation](https://adminlte.io/docs/3.0/) 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)
Contribution
------------
### Contribution
Contribution are always **welcome and recommended**! Here is how:
- 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
#### Compile dist files
To compile the dist files you need nodejs/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.
- 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
-------
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.
### 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. Wondering what you can or can't do? View the [license guide](https://adminlte.io/docs/license).
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)
### Legacy Releases
AdminLTE 1.x can be easily upgraded to 2.x using [this guide](https://adminlte.io/themes/AdminLTE/documentation/index.html#upgrade), but if you intend to keep using AdminLTE 1.x, you can download the latest release from the [releases](https://github.com/almasaeed2010/AdminLTE/releases) section above.
Change log
----------
Visit the [releases](https://github.com/ColorlibHQ/AdminLTE/releases) page to view the changelog
### Change log
**For the most recent change log, visit the [releases page](https://github.com/almasaeed2010/AdminLTE/releases) or the [changelog file](https://github.com/almasaeed2010/AdminLTE/blob/master/changelog.md).** We will add a detailed release notes to each new release.
Image Credits
-------------
[Pixeden](http://www.pixeden.com/psd-web-elements/flat-responsive-showcase-psd)
### 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/)
[Graphicsfuel](http://www.graphicsfuel.com/2013/02/13-high-resolution-blur-backgrounds/)
### Donations
Donations are **greatly appreciated!**
[Pickaface](http://pickaface.net/)
[Unsplash](https://unsplash.com/)
[Uifaces](http://uifaces.com/)
[![Donate](https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif "AdminLTE Presentation")](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=629XCUSXBHCBC "Donate")

61
bower.json Normal file
View File

@@ -0,0 +1,61 @@
{
"name": "admin-lte",
"homepage": "https://adminlte.io",
"authors": [
"Abdullah Almsaeed <abdullah@almsaeedstudio.com>"
],
"description": "Admin dashboard and control panel template",
"main": [
"index2.html",
"dist/css/AdminLTE.css",
"dist/js/app.js",
"build/less/AdminLTE.less"
],
"keywords": [
"css",
"js",
"html",
"template",
"admin",
"bootstrap",
"theme",
"backend",
"responsive"
],
"license": "MIT",
"ignore": [
"/.*",
"node_modules",
"bower_components",
"composer.json",
"documentation"
],
"dependencies": {
"bootstrap-slider": "*",
"chart.js": "^1.0.*",
"ckeditor": "^4.7.0",
"bootstrap-colorpicker": "^2.5.1",
"bootstrap": "^3.3.7",
"jquery": "^3.2.1",
"datatables.net": "^1.10.15",
"datatables.net-bs": "^2.1.1",
"bootstrap-datepicker": "^1.7.0",
"bootstrap-daterangepicker": "^2.1.25",
"moment": "^2.18.1",
"fastclick": "^1.0.6",
"Flot": "flot#^0.8.3",
"fullcalendar": "^3.4.0",
"inputmask": "jquery.inputmask#^3.3.7",
"ion.rangeSlider": "ionrangeslider#^2.2.0",
"jvectormap": "^2.0.4",
"jquery-knob": "^1.2.13",
"morris.js": "^0.5.1",
"PACE": "pace#^1.0.2",
"select2": "^4.0.3",
"jquery-slimscroll": "slimscroll#^1.3.8",
"bootstrap-timepicker": "^0.5.2",
"jquery-sparkline": "^2.1.3",
"font-awesome": "^4.7.0",
"Ionicons": "ionicons#^2.0.1"
}
}

View File

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

View File

@@ -1,29 +0,0 @@
import babel from '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: `/*!
* 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',
format: 'umd',
globals,
name : 'adminlte'
},
plugins: [
babel({
exclude: 'node_modules/**',
externalHelpers: true
})
]
}

7
build/grunt/.jshintrc Normal file
View File

@@ -0,0 +1,7 @@
{
"extends" : "../js/.jshintrc",
"asi" : false,
"browser" : false,
"es3" : false,
"node" : true
}

View File

@@ -1,12 +1,9 @@
{
"esnext": true,
"verbose": true,
"disallowEmptyBlocks": true,
"disallowKeywords": ["with"],
"disallowMixedSpacesAndTabs": true,
"disallowMultipleLineStrings": true,
"disallowMultipleVarDecl": true,
"disallowQuotedKeysInObjects": "allButReserved",
"disallowSpaceAfterPrefixUnaryOperators": ["++", "--", "+", "-", "~", "!"],
"disallowSpaceBeforeBinaryOperators": [","],
"disallowSpaceBeforePostfixUnaryOperators": ["++", "--"],
@@ -29,7 +26,7 @@
"requireSpaceAfterLineComment": true,
"requireSpaceBeforeBinaryOperators": ["+", "-", "/", "*", "=", "==", "===", "!=", "!==", ">", "<", ">=", "<="],
"requireSpaceBetweenArguments": true,
"requireSpacesInAnonymousFunctionExpression": { "beforeOpeningCurlyBrace": true, "beforeOpeningRoundBrace": true, "allExcept": ["shorthand"] },
"requireSpacesInAnonymousFunctionExpression": { "beforeOpeningCurlyBrace": true, "beforeOpeningRoundBrace": true },
"requireSpacesInConditionalExpression": true,
"requireSpacesInForStatement": true,
"requireSpacesInFunctionDeclaration": { "beforeOpeningCurlyBrace": true },
@@ -40,5 +37,6 @@
"validateIndentation": 2,
"validateLineBreaks": "LF",
"validateNewlineAfterArrayElements": true,
"validateQuoteMarks": "'"
}
"validateQuoteMarks": "'",
"maxErrors": "3000"
}

17
build/js/.jshintrc Normal file
View File

@@ -0,0 +1,17 @@
{
"asi" : true,
"browser" : true,
"eqeqeq" : false,
"eqnull" : true,
"es3" : true,
"expr" : true,
"jquery" : true,
"latedef" : true,
"laxbreak" : true,
"nonbsp" : true,
"strict" : true,
"undef" : true,
"unused" : true,
// External variabls and plugins
"predef": [ "AdminLTEOptions", "FastClick", "moment", "Morris", "Chart" ]
}

View File

@@ -1,23 +0,0 @@
import ControlSidebar from './ControlSidebar'
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 Toasts from './Toasts'
export {
ControlSidebar,
Layout,
PushMenu,
Treeview,
DirectChat,
TodoList,
CardWidget,
CardRefresh,
Dropdown,
Toasts
}

119
build/js/BoxRefresh.js Normal file
View File

@@ -0,0 +1,119 @@
/* BoxRefresh()
* =========
* Adds AJAX content control to a box.
*
* @Usage: $('#my-box').boxRefresh(options)
* or add [data-widget="box-refresh"] to the box element
* Pass any option as data-option="value"
*/
+function ($) {
'use strict'
var DataKey = 'lte.boxrefresh'
var Default = {
source : '',
params : {},
trigger : '.refresh-btn',
content : '.box-body',
loadInContent : true,
responseType : '',
overlayTemplate: '<div class="overlay"><div class="fa fa-refresh fa-spin"></div></div>',
onLoadStart : function () {
},
onLoadDone : function (response) {
return response
}
}
var Selector = {
data: '[data-widget="box-refresh"]'
}
// BoxRefresh Class Definition
// =========================
var BoxRefresh = function (element, options) {
this.element = element
this.options = options
this.$overlay = $(options.overlay)
if (options.source === '') {
throw new Error('Source url was not defined. Please specify a url in your BoxRefresh source option.')
}
this._setUpListeners()
this.load()
}
BoxRefresh.prototype.load = function () {
this._addOverlay()
this.options.onLoadStart.call($(this))
$.get(this.options.source, this.options.params, function (response) {
if (this.options.loadInContent) {
$(this.options.content).html(response)
}
this.options.onLoadDone.call($(this), response)
this._removeOverlay()
}.bind(this), this.options.responseType !== '' && this.options.responseType)
}
// Private
BoxRefresh.prototype._setUpListeners = function () {
$(this.element).on('click', Selector.trigger, function (event) {
if (event) event.preventDefault()
this.load()
}.bind(this))
}
BoxRefresh.prototype._addOverlay = function () {
$(this.element).append(this.$overlay)
}
BoxRefresh.prototype._removeOverlay = function () {
$(this.element).remove(this.$overlay)
}
// Plugin Definition
// =================
function Plugin(option) {
return this.each(function () {
var $this = $(this)
var data = $this.data(DataKey)
if (!data) {
var options = $.extend({}, Default, $this.data(), typeof option == 'object' && option)
$this.data(DataKey, (data = new BoxRefresh($this, options)))
}
if (typeof data == 'string') {
if (typeof data[option] == 'undefined') {
throw new Error('No method named ' + option)
}
data[option]()
}
})
}
var old = $.fn.boxRefresh
$.fn.boxRefresh = Plugin
$.fn.boxRefresh.Constructor = BoxRefresh
// No Conflict Mode
// ================
$.fn.boxRefresh.noConflict = function () {
$.fn.boxRefresh = old
return this
}
// BoxRefresh Data API
// =================
$(window).on('load', function () {
$(Selector.data).each(function () {
Plugin.call($(this))
})
})
}(jQuery)

161
build/js/BoxWidget.js Normal file
View File

@@ -0,0 +1,161 @@
/* BoxWidget()
* ======
* Adds box widget functions to boxes.
*
* @Usage: $('.my-box').boxWidget(options)
* or add [data-widget="box-widget"] to the ul element
* Pass any option as data-option="value"
*/
+function ($) {
'use strict'
var DataKey = 'lte.boxwidget'
var Default = {
animationSpeed : 500,
collapseTrigger: '[data-widget="collapse"]',
removeTrigger : '[data-widget="remove"]',
collapseIcon : 'fa-minus',
expandIcon : 'fa-plus',
removeIcon : 'fa-times'
}
var Selector = {
data : '.box',
collapsed: '.collapsed-box',
body : '.box-body',
footer : '.box-footer',
tools : '.box-tools'
}
var ClassName = {
collapsed: 'collapsed-box'
}
var Event = {
collapsed: 'collapsed.boxwidget',
expanded : 'expanded.boxwidget',
removed : 'removed.boxwidget'
}
// BoxWidget Class Definition
// =====================
var BoxWidget = function (element, options) {
this.element = element
this.options = options
this._setUpListeners()
}
BoxWidget.prototype.toggle = function () {
var isOpen = !$(this.element).is(Selector.collapsed)
if (isOpen) {
this.collapse()
} else {
this.expand()
}
}
BoxWidget.prototype.expand = function () {
var expandedEvent = $.Event(Event.expanded)
var collapseIcon = this.options.collapseIcon
var expandIcon = this.options.expandIcon
$(this.element).removeClass(ClassName.collapsed)
$(Selector.tools)
.find('.' + expandIcon)
.removeClass(expandIcon)
.addClass(collapseIcon)
$(this.element).find(Selector.body + ', ' + Selector.footer)
.slideDown(this.options.animationSpeed, function () {
$(this.element).trigger(expandedEvent)
}.bind(this))
}
BoxWidget.prototype.collapse = function () {
var collapsedEvent = $.Event(Event.collapsed)
var collapseIcon = this.options.collapseIcon
var expandIcon = this.options.expandIcon
$(Selector.tools)
.find('.' + collapseIcon)
.removeClass(collapseIcon)
.addClass(expandIcon)
$(this.element).find(Selector.body + ', ' + Selector.footer)
.slideUp(this.options.animationSpeed, function () {
$(this.element).addClass(ClassName.collapsed)
$(this.element).trigger(collapsedEvent)
}.bind(this))
}
BoxWidget.prototype.remove = function () {
var removedEvent = $.Event(Event.removed)
$(this.element).slideUp(this.options.animationSpeed, function () {
$(this.element).trigger(removedEvent)
$(this.element).remove()
}.bind(this))
}
// Private
BoxWidget.prototype._setUpListeners = function () {
var that = this
$(this.element).on('click', this.options.collapseTrigger, function (event) {
if (event) event.preventDefault()
that.toggle($(this))
})
$(this.element).on('click', this.options.removeTrigger, function (event) {
if (event) event.preventDefault()
that.remove($(this))
})
}
// Plugin Definition
// =================
function Plugin(option) {
return this.each(function () {
var $this = $(this)
var data = $this.data(DataKey)
if (!data) {
var options = $.extend({}, Default, $this.data(), typeof option == 'object' && option)
$this.data(DataKey, (data = new BoxWidget($this, options)))
}
if (typeof option == 'string') {
if (typeof data[option] == 'undefined') {
throw new Error('No method named ' + option)
}
data[option]()
}
})
}
var old = $.fn.boxWidget
$.fn.boxWidget = Plugin
$.fn.boxWidget.Constructor = BoxWidget
// No Conflict Mode
// ================
$.fn.boxWidget.noConflict = function () {
$.fn.boxWidget = old
return this
}
// BoxWidget Data API
// ==================
$(window).on('load', function () {
$(Selector.data).each(function () {
Plugin.call($(this))
})
})
}(jQuery)

View File

@@ -1,168 +0,0 @@
/**
* --------------------------------------------
* AdminLTE CardRefresh.js
* License MIT
* --------------------------------------------
*/
const CardRefresh = (($) => {
/**
* Constants
* ====================================================
*/
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}`,
OVERLAY_ADDED: `overlay.added${EVENT_KEY}`,
OVERLAY_REMOVED: `overlay.removed${EVENT_KEY}`,
}
const ClassName = {
CARD: 'card',
}
const Selector = {
CARD: `.${ClassName.CARD}`,
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: function () {
},
onLoadDone: function (response) {
return response;
}
}
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)
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)
}
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)
}
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')
})
$(document).ready(function () {
$(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
}
return CardRefresh
})(jQuery)
export default CardRefresh

View File

@@ -1,253 +0,0 @@
/**
* --------------------------------------------
* AdminLTE CardWidget.js
* License MIT
* --------------------------------------------
*/
const CardWidget = (($) => {
/**
* Constants
* ====================================================
*/
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}`,
COLLAPSED: `collapsed${EVENT_KEY}`,
MAXIMIZED: `maximized${EVENT_KEY}`,
MINIMIZED: `minimized${EVENT_KEY}`,
REMOVED: `removed${EVENT_KEY}`
}
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()
})
const maximized = $.Event(Event.MAXIMIZED)
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))
}
}
}
/**
* 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
}
return CardWidget
})(jQuery)
export default CardWidget

View File

@@ -1,292 +1,138 @@
/**
* --------------------------------------------
* AdminLTE ControlSidebar.js
* License MIT
* --------------------------------------------
/* ControlSidebar()
* ===============
* Toggles the state of the control sidebar
*
* @Usage: $('#control-sidebar-trigger').controlSidebar(options)
* or add [data-toggle="control-sidebar"] to the trigger
* Pass any option as data-option="value"
*/
+function ($) {
'use strict'
const ControlSidebar = (($) => {
/**
* Constants
* ====================================================
*/
var DataKey = 'lte.controlsidebar'
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'
const Event = {
COLLAPSED: `collapsed${EVENT_KEY}`,
EXPANDED: `expanded${EVENT_KEY}`,
var Default = {
slide: true
}
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',
var Selector = {
sidebar: '.control-sidebar',
data : '[data-toggle="control-sidebar"]',
open : '.control-sidebar-open',
bg : '.control-sidebar-bg',
wrapper: '.wrapper',
content: '.content-wrapper',
boxed : '.layout-boxed'
}
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',
var ClassName = {
open : 'control-sidebar-open',
fixed: 'fixed'
}
const Default = {
controlsidebarSlide: true,
scrollbarTheme : 'os-theme-light',
scrollbarAutoHide: 'l',
var Event = {
collapsed: 'collapsed.controlsidebar',
expanded : 'expanded.controlsidebar'
}
/**
* Class Definition
* ====================================================
*/
// ControlSidebar Class Definition
// ===============================
var ControlSidebar = function (element, options) {
this.element = element
this.options = options
this.hasBindedResize = false
class ControlSidebar {
constructor(element, config) {
this._element = element
this._config = config
this.init()
}
this._init()
ControlSidebar.prototype.init = function () {
// Add click listener if the element hasn't been
// initialized using the data API
if (!$(this.element).is(Selector.data)) {
$(this).on('click', this.toggle)
}
// Public
this.fix()
$(window).resize(function () {
this.fix()
}.bind(this))
}
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)
$(this).dequeue()
})
} else {
$('body').removeClass(ClassName.CONTROL_SIDEBAR_OPEN)
}
ControlSidebar.prototype.toggle = function (event) {
if (event) event.preventDefault()
const collapsedEvent = $.Event(Event.COLLAPSED)
$(this._element).trigger(collapsedEvent)
}
this.fix()
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)
}
const expandedEvent = $.Event(Event.EXPANDED)
$(this._element).trigger(expandedEvent)
}
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
_init() {
this._fixHeight()
this._fixScrollHeight()
$(window).resize(() => {
this._fixHeight()
this._fixScrollHeight()
})
$(window).scroll(() => {
if ($('body').hasClass(ClassName.CONTROL_SIDEBAR_OPEN) || $('body').hasClass(ClassName.CONTROL_SIDEBAR_SLIDE)) {
this._fixScrollHeight()
}
})
}
_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(),
}
let navbarFixed = false;
let footerFixed = false;
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);
}
}
}
}
_fixHeight() {
const heights = {
window: $(window).height(),
header: $(Selector.HEADER).outerHeight(),
footer: $(Selector.FOOTER).outerHeight(),
}
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;
}
}
$(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]()
})
if (!$(Selector.sidebar).is(Selector.open) && !$('body').is(Selector.open)) {
this.expand()
} else {
this.collapse()
}
}
/**
*
* Data Api implementation
* ====================================================
*/
$(document).on('click', Selector.DATA_TOGGLE, function (event) {
event.preventDefault()
ControlSidebar.prototype.expand = function () {
if (!this.options.slide) {
$('body').addClass(ClassName.open)
} else {
$(Selector.sidebar).addClass(ClassName.open)
}
ControlSidebar._jQueryInterface.call($(this), 'toggle')
$(this.element).trigger($.Event(Event.expanded))
}
ControlSidebar.prototype.collapse = function () {
$('body, ' + Selector.sidebar).removeClass(ClassName.open)
$(this.element).trigger($.Event(Event.collapsed))
}
ControlSidebar.prototype.fix = function () {
if ($('body').is(Selector.boxed)) {
this._fixForBoxed($(Selector.bg))
}
}
// Private
ControlSidebar.prototype._fixForBoxed = function (bg) {
bg.css({
position: 'absolute',
height : $(Selector.wrapper).height()
})
}
// Plugin Definition
// =================
function Plugin(option) {
return this.each(function () {
var $this = $(this)
var data = $this.data(DataKey)
if (!data) {
var options = $.extend({}, Default, $this.data(), typeof option == 'object' && option)
$this.data(DataKey, (data = new ControlSidebar($this, options)))
}
if (typeof option == 'string') data.toggle()
})
}
var old = $.fn.controlSidebar
$.fn.controlSidebar = Plugin
$.fn.controlSidebar.Constructor = ControlSidebar
// No Conflict Mode
// ================
$.fn.controlSidebar.noConflict = function () {
$.fn.controlSidebar = old
return this
}
// ControlSidebar Data API
// =======================
$(document).on('click', Selector.data, function (event) {
if (event) event.preventDefault()
Plugin.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
}
return ControlSidebar
})(jQuery)
export default ControlSidebar
}(jQuery)

View File

@@ -1,92 +1,66 @@
/**
* --------------------------------------------
* AdminLTE DirectChat.js
* License MIT
* --------------------------------------------
/* DirectChat()
* ===============
* Toggles the state of the control sidebar
*
* @Usage: $('#my-chat-box').directChat()
* or add [data-widget="direct-chat"] to the trigger
*/
+function ($) {
'use strict'
const DirectChat = (($) => {
/**
* Constants
* ====================================================
*/
var DataKey = 'lte.directchat'
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'
const Event = {
TOGGLED: `toggled{EVENT_KEY}`
var Selector = {
data: '[data-widget="chat-pane-toggle"]',
box : '.direct-chat'
}
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]()
})
}
var ClassName = {
open: 'direct-chat-contacts-open'
}
/**
*
* Data Api implementation
* ====================================================
*/
$(document).on('click', Selector.DATA_TOGGLE, function (event) {
if (event) event.preventDefault();
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
// DirectChat Class Definition
// ===========================
var DirectChat = function (element) {
this.element = element
}
return DirectChat
})(jQuery)
DirectChat.prototype.toggle = function ($trigger) {
$trigger.parents(Selector.box).first().toggleClass(ClassName.open)
}
export default DirectChat
// Plugin Definition
// =================
function Plugin(option) {
return this.each(function () {
var $this = $(this)
var data = $this.data(DataKey)
if (!data) {
$this.data(DataKey, (data = new DirectChat($this)))
}
if (typeof option == 'string') data.toggle($this)
})
}
var old = $.fn.directChat
$.fn.directChat = Plugin
$.fn.directChat.Constructor = DirectChat
// No Conflict Mode
// ================
$.fn.directChat.noConflict = function () {
$.fn.directChat = old
return this
}
// DirectChat Data API
// ===================
$(document).on('click', Selector.data, function (event) {
if (event) event.preventDefault()
Plugin.call($(this), 'toggle')
})
}(jQuery)

View File

@@ -1,143 +0,0 @@
/**
* --------------------------------------------
* AdminLTE Dropdown.js
* License MIT
* --------------------------------------------
*/
const Dropdown = (($) => {
/**
* Constants
* ====================================================
*/
const NAME = 'Dropdown'
const DATA_KEY = 'lte.dropdown'
const EVENT_KEY = `.${DATA_KEY}`
const JQUERY_NO_CONFLICT = $.fn[NAME]
const Selector = {
NAVBAR: '.navbar',
DROPDOWN_MENU: '.dropdown-menu',
DROPDOWN_MENU_ACTIVE: '.dropdown-menu.show',
DROPDOWN_TOGGLE: '[data-toggle="dropdown"]',
}
const ClassName = {
DROPDOWN_HOVER: 'dropdown-hover',
DROPDOWN_RIGHT: 'dropdown-menu-right'
}
const Default = {
}
/**
* Class Definition
* ====================================================
*/
class Dropdown {
constructor(element, config) {
this._config = config
this._element = element
}
// Public
toggleSubmenu() {
this._element.siblings().show().toggleClass("show")
if (! this._element.next().hasClass('show')) {
this._element.parents('.dropdown-menu').first().find('.show').removeClass("show").hide()
}
this._element.parents('li.nav-item.dropdown.show').on('hidden.bs.dropdown', function(e) {
$('.dropdown-submenu .show').removeClass("show").hide()
})
}
fixPosition() {
let elm = $(Selector.DROPDOWN_MENU_ACTIVE)
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')
}
let offset = elm.offset()
let width = elm.width()
let windowWidth = $(window).width()
let visiblePart = windowWidth - offset.left
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)
}
}
}
}
// 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]()
}
})
}
}
/**
* Data API
* ====================================================
*/
$(Selector.DROPDOWN_MENU + ' ' + Selector.DROPDOWN_TOGGLE).on("click", function(event) {
event.preventDefault()
event.stopPropagation()
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)
export default Dropdown

View File

@@ -1,242 +1,179 @@
/**
* --------------------------------------------
* AdminLTE Layout.js
* License MIT
* --------------------------------------------
/* Layout()
* ========
* Implements AdminLTE layout.
* Fixes the layout height in case min-height fails.
*
* @usage activated automatically upon window load.
* Configure any options by passing data-option="value"
* to the body tag.
*/
+function ($) {
'use strict'
const Layout = (($) => {
/**
* Constants
* ====================================================
*/
var DataKey = 'lte.layout'
const NAME = 'Layout'
const DATA_KEY = 'lte.layout'
const EVENT_KEY = `.${DATA_KEY}`
const JQUERY_NO_CONFLICT = $.fn[NAME]
const Event = {
SIDEBAR: 'sidebar'
var Default = {
slimscroll : true,
resetHeight: true
}
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'
var Selector = {
wrapper : '.wrapper',
contentWrapper: '.content-wrapper',
layoutBoxed : '.layout-boxed',
mainFooter : '.main-footer',
mainHeader : '.main-header',
sidebar : '.sidebar',
controlSidebar: '.control-sidebar',
fixed : '.fixed',
sidebarMenu : '.sidebar-menu',
logo : '.main-header .logo'
}
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',
var ClassName = {
fixed : 'fixed',
holdTransition: 'hold-transition'
}
const Default = {
scrollbarTheme : 'os-theme-light',
scrollbarAutoHide: 'l',
panelAutoHeight: true,
loginRegisterAutoHeight: true,
var Layout = function (options) {
this.options = options
this.bindedResize = false
this.activate()
}
/**
* Class Definition
* ====================================================
*/
Layout.prototype.activate = function () {
this.fix()
this.fixSidebar()
class Layout {
constructor(element, config) {
this._config = config
this._element = element
$('body').removeClass(ClassName.holdTransition)
this._init()
}
// Public
fixLayoutHeight(extra = null) {
let control_sidebar = 0
if ($('body').hasClass(ClassName.CONTROL_SIDEBAR_SLIDE_OPEN) || $('body').hasClass(ClassName.CONTROL_SIDEBAR_OPEN) || extra == 'control_sidebar') {
control_sidebar = $(Selector.CONTROL_SIDEBAR_CONTENT).height()
}
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 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)
} else {
$(Selector.CONTENT).css('min-height', (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
}
})
}
}
}
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)
}
}
}
// Private
_init() {
// Activate layout height watcher
this.fixLayoutHeight()
if (this._config.loginRegisterAutoHeight === true) {
this.fixLoginRegisterHeight()
} else if (Number.isInteger(this._config.loginRegisterAutoHeight)) {
setInterval(this.fixLoginRegisterHeight, this._config.loginRegisterAutoHeight);
}
$(Selector.SIDEBAR)
.on('collapsed.lte.treeview expanded.lte.treeview', () => {
this.fixLayoutHeight()
})
$(Selector.PUSHMENU_BTN)
.on('collapsed.lte.pushmenu shown.lte.pushmenu', () => {
this.fixLayoutHeight()
})
$(Selector.CONTROL_SIDEBAR_BTN)
.on('collapsed.lte.controlsidebar', () => {
this.fixLayoutHeight()
})
.on('expanded.lte.controlsidebar', () => {
this.fixLayoutHeight('control_sidebar')
})
$(window).resize(() => {
this.fixLayoutHeight()
})
$('body.hold-transition').removeClass('hold-transition')
}
_max(numbers) {
// Calculate the maximum number in a list
let max = 0
Object.keys(numbers).forEach((key) => {
if (numbers[key] > max) {
max = numbers[key]
}
})
return max
}
// 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]()
}
if (this.options.resetHeight) {
$('body, html, ' + Selector.wrapper).css({
'height' : 'auto',
'min-height': '100%'
})
}
if (!this.bindedResize) {
$(window).resize(function () {
this.fix()
this.fixSidebar()
$(Selector.logo + ', ' + Selector.sidebar).one('webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend', function () {
this.fix()
this.fixSidebar()
}.bind(this))
}.bind(this))
this.bindedResize = true
}
$(Selector.sidebarMenu).on('expanded.tree', function () {
this.fix()
this.fixSidebar()
}.bind(this))
$(Selector.sidebarMenu).on('collapsed.tree', function () {
this.fix()
this.fixSidebar()
}.bind(this))
}
/**
* Data API
* ====================================================
*/
Layout.prototype.fix = function () {
// Remove overflow from .wrapper if layout-boxed exists
$(Selector.layoutBoxed + ' > ' + Selector.wrapper).css('overflow', 'hidden')
$(window).on('load', () => {
Layout._jQueryInterface.call($('body'))
})
// Get window height and the wrapper height
var footerHeight = $(Selector.mainFooter).outerHeight() || 0
var neg = $(Selector.mainHeader).outerHeight() + footerHeight
var windowHeight = $(window).height()
var sidebarHeight = $(Selector.sidebar).height() || 0
$(Selector.SIDEBAR + ' a').on('focusin', () => {
$(Selector.MAIN_SIDEBAR).addClass(ClassName.SIDEBAR_FOCUSED);
})
// Set the min-height of the content and sidebar based on
// the height of the document.
if ($('body').hasClass(ClassName.fixed)) {
$(Selector.contentWrapper).css('min-height', windowHeight - footerHeight)
} else {
var postSetHeight
$(Selector.SIDEBAR + ' a').on('focusout', () => {
$(Selector.MAIN_SIDEBAR).removeClass(ClassName.SIDEBAR_FOCUSED);
})
if (windowHeight >= sidebarHeight) {
$(Selector.contentWrapper).css('min-height', windowHeight - neg)
postSetHeight = windowHeight - neg
} else {
$(Selector.contentWrapper).css('min-height', sidebarHeight)
postSetHeight = sidebarHeight
}
/**
* jQuery API
* ====================================================
*/
$.fn[NAME] = Layout._jQueryInterface
$.fn[NAME].Constructor = Layout
$.fn[NAME].noConflict = function () {
$.fn[NAME] = JQUERY_NO_CONFLICT
return Layout._jQueryInterface
// Fix for the control sidebar height
var $controlSidebar = $(Selector.controlSidebar)
if (typeof $controlSidebar !== 'undefined') {
if ($controlSidebar.height() > postSetHeight)
$(Selector.contentWrapper).css('min-height', $controlSidebar.height())
}
}
}
return Layout
})(jQuery)
Layout.prototype.fixSidebar = function () {
// Make sure the body tag has the .fixed class
if (!$('body').hasClass(ClassName.fixed)) {
if (typeof $.fn.slimScroll !== 'undefined') {
$(Selector.sidebar).slimScroll({ destroy: true }).height('auto')
}
return
}
export default Layout
// Enable slimscroll for fixed layout
if (this.options.slimscroll) {
if (typeof $.fn.slimScroll !== 'undefined') {
// Destroy if it exists
$(Selector.sidebar).slimScroll({ destroy: true }).height('auto')
// Add slimscroll
$(Selector.sidebar).slimScroll({
height: ($(window).height() - $(Selector.mainHeader).height()) + 'px',
color : 'rgba(0,0,0,0.2)',
size : '3px'
})
}
}
}
// Plugin Definition
// =================
function Plugin(option) {
return this.each(function () {
var $this = $(this)
var data = $this.data(DataKey)
if (!data) {
var options = $.extend({}, Default, $this.data(), typeof option === 'object' && option)
$this.data(DataKey, (data = new Layout(options)))
}
if (typeof option === 'string') {
if (typeof data[option] === 'undefined') {
throw new Error('No method named ' + option)
}
data[option]()
}
})
}
var old = $.fn.layout
$.fn.layout = Plugin
$.fn.layout.Constuctor = Layout
// No conflict mode
// ================
$.fn.layout.noConflict = function () {
$.fn.layout = old
return this
}
// Layout DATA-API
// ===============
$(window).on('load', function () {
Plugin.call($('body'))
})
}(jQuery)

View File

@@ -1,223 +1,176 @@
/**
* --------------------------------------------
* AdminLTE PushMenu.js
* License MIT
* --------------------------------------------
/* PushMenu()
* ==========
* Adds the push menu functionality to the sidebar.
*
* @usage: $('.btn').pushMenu(options)
* or add [data-toggle="push-menu"] to any toggle button
* Pass any option as data-option="value"
*/
+function ($) {
'use strict'
const PushMenu = (($) => {
/**
* Constants
* ====================================================
*/
var DataKey = 'lte.pushmenu'
const NAME = 'PushMenu'
const DATA_KEY = 'lte.pushmenu'
const EVENT_KEY = `.${DATA_KEY}`
const JQUERY_NO_CONFLICT = $.fn[NAME]
const Event = {
COLLAPSED: `collapsed${EVENT_KEY}`,
SHOWN: `shown${EVENT_KEY}`
var Default = {
collapseScreenSize : 767,
expandOnHover : false,
expandTransitionDelay: 200
}
const Default = {
autoCollapseSize: 992,
enableRemember: false,
noTransitionAfterReload: true
var Selector = {
collapsed : '.sidebar-collapse',
open : '.sidebar-open',
mainSidebar : '.main-sidebar',
contentWrapper: '.content-wrapper',
searchInput : '.sidebar-form .form-control',
button : '[data-toggle="push-menu"]',
mini : '.sidebar-mini',
expanded : '.sidebar-expanded-on-hover',
layoutFixed : '.fixed'
}
const Selector = {
TOGGLE_BUTTON: '[data-widget="pushmenu"]',
SIDEBAR_MINI: '.sidebar-mini',
SIDEBAR_COLLAPSED: '.sidebar-collapse',
BODY: 'body',
OVERLAY: '#sidebar-overlay',
WRAPPER: '.wrapper'
var ClassName = {
collapsed : 'sidebar-collapse',
open : 'sidebar-open',
mini : 'sidebar-mini',
expanded : 'sidebar-expanded-on-hover',
expandFeature: 'sidebar-mini-expand-feature',
layoutFixed : 'fixed'
}
const ClassName = {
SIDEBAR_OPEN: 'sidebar-open',
COLLAPSED: 'sidebar-collapse',
OPEN: 'sidebar-open'
var Event = {
expanded : 'expanded.pushMenu',
collapsed: 'collapsed.pushMenu'
}
/**
* Class Definition
* ====================================================
*/
// PushMenu Class Definition
// =========================
var PushMenu = function (options) {
this.options = options
this.init()
}
class PushMenu {
constructor(element, options) {
this._element = element
this._options = $.extend({}, Default, options)
if (!$(Selector.OVERLAY).length) {
this._addOverlay()
}
this._init()
PushMenu.prototype.init = function () {
if (this.options.expandOnHover
|| ($('body').is(Selector.mini + Selector.layoutFixed))) {
this.expandOnHover()
$('body').addClass(ClassName.expandFeature)
}
// Public
expand() {
if (this._options.autoCollapseSize) {
if ($(window).width() <= this._options.autoCollapseSize) {
$(Selector.BODY).addClass(ClassName.OPEN)
}
$(Selector.contentWrapper).click(function () {
// Enable hide menu when clicking on the content-wrapper on small screens
if ($(window).width() <= this.options.collapseScreenSize && $('body').hasClass(ClassName.open)) {
this.close()
}
}.bind(this))
$(Selector.BODY).removeClass(ClassName.COLLAPSED)
// __Fix for android devices
$(Selector.searchInput).click(function (e) {
e.stopPropagation()
})
}
if(this._options.enableRemember) {
localStorage.setItem(`remember${EVENT_KEY}`, ClassName.OPEN)
}
PushMenu.prototype.toggle = function () {
var windowWidth = $(window).width()
var isOpen = !$('body').hasClass(ClassName.collapsed)
const shownEvent = $.Event(Event.SHOWN)
$(this._element).trigger(shownEvent)
if (windowWidth <= this.options.collapseScreenSize) {
isOpen = $('body').hasClass(ClassName.open)
}
collapse() {
if (this._options.autoCollapseSize) {
if ($(window).width() <= this._options.autoCollapseSize) {
$(Selector.BODY).removeClass(ClassName.OPEN)
}
}
$(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 (!isOpen) {
this.open()
} else {
this.close()
}
}
toggle() {
if (!$(Selector.BODY).hasClass(ClassName.COLLAPSED)) {
this.collapse()
} else {
PushMenu.prototype.open = function () {
var windowWidth = $(window).width()
if (windowWidth > this.options.collapseScreenSize) {
$('body').removeClass(ClassName.collapsed)
.trigger($.Event(Event.expanded))
}
else {
$('body').addClass(ClassName.open)
.trigger($.Event(Event.expanded))
}
}
PushMenu.prototype.close = function () {
var windowWidth = $(window).width()
if (windowWidth > this.options.collapseScreenSize) {
$('body').addClass(ClassName.collapsed)
.trigger($.Event(Event.collapsed))
} else {
$('body').removeClass(ClassName.open + ' ' + ClassName.collapsed)
.trigger($.Event(Event.collapsed))
}
}
PushMenu.prototype.expandOnHover = function () {
$(Selector.mainSidebar).hover(function () {
if ($('body').is(Selector.mini + Selector.collapsed)
&& $(window).width() > this.options.collapseScreenSize) {
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)
}
}
}
}
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', () => {
}.bind(this), function () {
if ($('body').is(Selector.expanded)) {
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]()
}
})
}
}
}.bind(this))
}
/**
* 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
PushMenu.prototype.expand = function () {
setTimeout(function () {
$('body').removeClass(ClassName.collapsed)
.addClass(ClassName.expanded)
}, this.options.expandTransitionDelay)
}
return PushMenu
})(jQuery)
PushMenu.prototype.collapse = function () {
setTimeout(function () {
$('body').removeClass(ClassName.expanded)
.addClass(ClassName.collapsed)
}, this.options.expandTransitionDelay)
}
export default PushMenu
// PushMenu Plugin Definition
// ==========================
function Plugin(option) {
return this.each(function () {
var $this = $(this)
var data = $this.data(DataKey)
if (!data) {
var options = $.extend({}, Default, $this.data(), typeof option == 'object' && option)
$this.data(DataKey, (data = new PushMenu(options)))
}
if (option == 'toggle') data.toggle()
})
}
var old = $.fn.pushMenu
$.fn.pushMenu = Plugin
$.fn.pushMenu.Constructor = PushMenu
// No Conflict Mode
// ================
$.fn.pushMenu.noConflict = function () {
$.fn.pushMenu = old
return this
}
// Data API
// ========
$(document).on('click', Selector.button, function (e) {
e.preventDefault()
Plugin.call($(this), 'toggle')
})
$(window).on('load', function () {
Plugin.call($(Selector.button))
})
}(jQuery)

View File

@@ -1,127 +0,0 @@
/**
* --------------------------------------------
* AdminLTE SiteSearch.js
* License MIT
* --------------------------------------------
*/
const SiteSearch = (($) => {
/**
* Constants
* ====================================================
*/
const NAME = 'SiteSearch'
const DATA_KEY = 'lte.site-search'
const EVENT_KEY = `.${DATA_KEY}`
const JQUERY_NO_CONFLICT = $.fn[NAME]
const Event = {}
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 ClassName = {
OPEN: 'site-search-open'
}
const Default = {
transitionSpeed: 300
}
/**
* Class Definition
* ====================================================
*/
class SiteSearch {
constructor(_element, _options) {
this.element = _element
this.options = $.extend({}, Default, _options)
}
// Public
open() {
$(Selector.SEARCH_BLOCK).slideDown(this.options.transitionSpeed)
$(Selector.SEARCH_BACKDROP).show(0)
$(Selector.SEARCH_INPUT).focus()
$(Selector.SEARCH_BLOCK).addClass(ClassName.OPEN)
}
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()
}
}
// Static
static _jQueryInterface(options) {
return this.each(function () {
let data = $(this).data(DATA_KEY)
if (!data) {
data = new SiteSearch(this, options)
$(this).data(DATA_KEY, data)
}
if (!/toggle|close/.test(options)) {
throw Error(`Undefined method ${options}`)
}
data[options]()
})
}
}
/**
* Data API
* ====================================================
*/
$(document).on('click', Selector.TOGGLE_BUTTON, (event) => {
event.preventDefault()
let button = $(event.currentTarget)
if (button.data('widget') !== 'site-search') {
button = button.closest(Selector.TOGGLE_BUTTON)
}
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)
export default SiteSearch

View File

@@ -1,229 +0,0 @@
/**
* --------------------------------------------
* AdminLTE Toasts.js
* License MIT
* --------------------------------------------
*/
const Toasts = (($) => {
/**
* Constants
* ====================================================
*/
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}`,
CREATED: `created${EVENT_KEY}`,
REMOVED: `removed${EVENT_KEY}`,
}
const Selector = {
BODY: 'toast-body',
CONTAINER_TOP_RIGHT: '#toastsContainerTopRight',
CONTAINER_TOP_LEFT: '#toastsContainerTopLeft',
CONTAINER_BOTTOM_RIGHT: '#toastsContainerBottomRight',
CONTAINER_BOTTOM_LEFT: '#toastsContainerBottomLeft',
}
const ClassName = {
TOP_RIGHT: 'toasts-top-right',
TOP_LEFT: 'toasts-top-left',
BOTTOM_RIGHT: 'toasts-bottom-right',
BOTTOM_LEFT: 'toasts-bottom-left',
FADE: 'fade',
}
const Position = {
TOP_RIGHT: 'topRight',
TOP_LEFT: 'topLeft',
BOTTOM_RIGHT: 'bottomRight',
BOTTOM_LEFT: 'bottomLeft',
}
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)
}
// 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)
})
}
}
// Static
_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;
}
}
_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')
}
}
// Static
static _jQueryInterface(option, config) {
return this.each(function () {
const _options = $.extend({}, Default, config)
var 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
}
return Toasts
})(jQuery)
export default Toasts

View File

@@ -1,122 +1,107 @@
/**
* --------------------------------------------
* AdminLTE TodoList.js
* License MIT
* --------------------------------------------
/* TodoList()
* =========
* Converts a list into a todoList.
*
* @Usage: $('.my-list').todoList(options)
* or add [data-widget="todo-list"] to the ul element
* Pass any option as data-option="value"
*/
+function ($) {
'use strict'
const TodoList = (($) => {
/**
* Constants
* ====================================================
*/
var DataKey = 'lte.todolist'
const NAME = 'TodoList'
const DATA_KEY = 'lte.todolist'
const EVENT_KEY = `.${DATA_KEY}`
const JQUERY_NO_CONFLICT = $.fn[NAME]
const Selector = {
DATA_TOGGLE: '[data-widget="todo-list"]'
}
const ClassName = {
TODO_LIST_DONE: 'done'
}
const Default = {
onCheck: function (item) {
return item;
var Default = {
iCheck : false,
onCheck : function () {
},
onUnCheck: function (item) {
return item;
onUnCheck: function () {
}
}
/**
* Class Definition
* ====================================================
*/
var Selector = {
data: '[data-widget="todo-list"]'
}
class TodoList {
constructor(element, config) {
this._config = config
this._element = element
var ClassName = {
done: 'done'
}
this._init()
// TodoList Class Definition
// =========================
var TodoList = function (element, options) {
this.element = element
this.options = options
this._setUpListeners()
}
TodoList.prototype.toggle = function (item) {
item.parents(Selector.li).first().toggleClass(ClassName.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;
TodoList.prototype.check = function (item) {
this.options.onCheck.call(item)
}
TodoList.prototype.unCheck = function (item) {
this.options.onUnCheck.call(item)
}
// Private
TodoList.prototype._setUpListeners = function () {
var that = this
$(this.element).on('change ifChanged', 'input:checkbox', function () {
that.toggle($(this))
})
}
// Plugin Definition
// =================
function Plugin(option) {
return this.each(function () {
var $this = $(this)
var data = $this.data(DataKey)
if (!data) {
var options = $.extend({}, Default, $this.data(), typeof option == 'object' && option)
$this.data(DataKey, (data = new TodoList($this, options)))
}
this.check(item);
}
check (item) {
this._config.onCheck.call(item);
}
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 (typeof data == 'string') {
if (typeof data[option] == 'undefined') {
throw new Error('No method named ' + option)
}
if (config === 'init') {
data[config]()
}
})
}
data[option]()
}
})
}
/**
* Data API
* ====================================================
*/
var old = $.fn.todoList
$(window).on('load', () => {
TodoList._jQueryInterface.call($(Selector.DATA_TOGGLE))
$.fn.todoList = Plugin
$.fn.todoList.Constructor = TodoList
// No Conflict Mode
// ================
$.fn.todoList.noConflict = function () {
$.fn.todoList = old
return this
}
// TodoList Data API
// =================
$(window).on('load', function () {
$(Selector.data).each(function () {
Plugin.call($(this))
})
})
/**
* 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)
export default TodoList
}(jQuery)

145
build/js/Tree.js Normal file
View File

@@ -0,0 +1,145 @@
/* Tree()
* ======
* Converts a nested list into a multilevel
* tree view menu.
*
* @Usage: $('.my-menu').tree(options)
* or add [data-widget="tree"] to the ul element
* Pass any option as data-option="value"
*/
+function ($) {
'use strict'
var DataKey = 'lte.tree'
var Default = {
animationSpeed: 500,
accordion : true,
followLink : false,
trigger : '.treeview a'
}
var Selector = {
tree : '.tree',
treeview : '.treeview',
treeviewMenu: '.treeview-menu',
open : '.menu-open, .active',
li : 'li',
data : '[data-widget="tree"]',
active : '.active'
}
var ClassName = {
open: 'menu-open',
tree: 'tree'
}
var Event = {
collapsed: 'collapsed.tree',
expanded : 'expanded.tree'
}
// Tree Class Definition
// =====================
var Tree = function (element, options) {
this.element = element
this.options = options
$(this.element).addClass(ClassName.tree)
$(Selector.treeview + Selector.active, this.element).addClass(ClassName.open)
this._setUpListeners()
}
Tree.prototype.toggle = function (link, event) {
var treeviewMenu = link.next(Selector.treeviewMenu)
var parentLi = link.parent()
var isOpen = parentLi.hasClass(ClassName.open)
if (!parentLi.is(Selector.treeview)) {
return
}
if (!this.options.followLink || link.attr('href') == '#') {
event.preventDefault()
}
if (isOpen) {
this.collapse(treeviewMenu, parentLi)
} else {
this.expand(treeviewMenu, parentLi)
}
}
Tree.prototype.expand = function (tree, parent) {
var expandedEvent = $.Event(Event.expanded)
if (this.options.accordion) {
var openMenuLi = parent.siblings(Selector.open)
var openTree = openMenuLi.children(Selector.treeviewMenu)
this.collapse(openTree, openMenuLi)
}
parent.addClass(ClassName.open)
tree.slideDown(this.options.animationSpeed, function () {
$(this.element).trigger(expandedEvent)
}.bind(this))
}
Tree.prototype.collapse = function (tree, parentLi) {
var collapsedEvent = $.Event(Event.collapsed)
tree.find(Selector.open).removeClass(ClassName.open)
parentLi.removeClass(ClassName.open)
tree.slideUp(this.options.animationSpeed, function () {
tree.find(Selector.open + ' > ' + Selector.treeview).slideUp()
$(this.element).trigger(collapsedEvent)
}.bind(this))
}
// Private
Tree.prototype._setUpListeners = function () {
var that = this
$(this.element).on('click', this.options.trigger, function (event) {
that.toggle($(this), event)
})
}
// Plugin Definition
// =================
function Plugin(option) {
return this.each(function () {
var $this = $(this)
var data = $this.data(DataKey)
if (!data) {
var options = $.extend({}, Default, $this.data(), typeof option == 'object' && option)
$this.data(DataKey, new Tree($this, options))
}
})
}
var old = $.fn.tree
$.fn.tree = Plugin
$.fn.tree.Constructor = Tree
// No Conflict Mode
// ================
$.fn.tree.noConflict = function () {
$.fn.tree = old
return this
}
// Tree Data API
// =============
$(window).on('load', function () {
$(Selector.data).each(function () {
Plugin.call($(this))
})
})
}(jQuery)

View File

@@ -1,185 +0,0 @@
/**
* --------------------------------------------
* AdminLTE Treeview.js
* License MIT
* --------------------------------------------
*/
const Treeview = (($) => {
/**
* Constants
* ====================================================
*/
const NAME = 'Treeview'
const DATA_KEY = 'lte.treeview'
const EVENT_KEY = `.${DATA_KEY}`
const JQUERY_NO_CONFLICT = $.fn[NAME]
const Event = {
SELECTED : `selected${EVENT_KEY}`,
EXPANDED : `expanded${EVENT_KEY}`,
COLLAPSED : `collapsed${EVENT_KEY}`,
LOAD_DATA_API: `load${EVENT_KEY}`
}
const Selector = {
LI : '.nav-item',
LINK : '.nav-link',
TREEVIEW_MENU: '.nav-treeview',
OPEN : '.menu-open',
DATA_WIDGET : '[data-widget="treeview"]'
}
const ClassName = {
LI : 'nav-item',
LINK : 'nav-link',
TREEVIEW_MENU : 'nav-treeview',
OPEN : 'menu-open',
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
}
// 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')
})
})
/**
* jQuery API
* ====================================================
*/
$.fn[NAME] = Treeview._jQueryInterface
$.fn[NAME].Constructor = Treeview
$.fn[NAME].noConflict = function () {
$.fn[NAME] = JQUERY_NO_CONFLICT
return Treeview._jQueryInterface
}
return Treeview
})(jQuery)
export default Treeview

View File

@@ -20,4 +20,4 @@
"fallback-colors": false,
"vendor-prefix": false,
"import": false
}
}

View File

@@ -1,43 +1,36 @@
//
// Pages: 400 and 500 error pages
//
/*
* Page: 400 and 500 error pages
* ------------------------------
*/
.error-page {
margin: 20px auto 0;
width: 600px;
@include media-breakpoint-down(sm) {
margin: 20px auto 0 auto;
@media (max-width: @screen-sm-max) {
width: 100%;
}
//For the error number e.g: 404
> .headline {
float: left;
font-size: 100px;
font-weight: 300;
@include media-breakpoint-down(sm) {
@media (max-width: @screen-sm-max) {
float: none;
text-align: center;
}
}
//For the message
> .error-content {
display: block;
margin-left: 190px;
@include media-breakpoint-down(sm) {
@media (max-width: @screen-sm-max) {
margin-left: 0;
}
> h3 {
font-size: 25px;
font-weight: 300;
@include media-breakpoint-down(sm) {
font-size: 25px;
@media (max-width: @screen-sm-max) {
text-align: center;
}
}
display: block;
}
}

View File

@@ -0,0 +1,55 @@
/*!
* AdminLTE v2.4.0 Without Third-Party Plugins
* Author: Almsaeed Studio
* Website: Almsaeed Studio <https://adminlte.io>
* License: Open source - MIT
* Please visit http://opensource.org/licenses/MIT for more information
!*/
//Bootstrap Variables & Mixins
//The core bootstrap code have not been modified. These files
//are included only for reference.
@import (reference) "../../bower_components/bootstrap/less/mixins";
@import (reference) "../../bower_components/bootstrap/less/variables";
//MISC
//----
@import "core";
@import "variables";
@import "mixins";
//COMPONENTS
//-----------
@import "header";
@import "sidebar";
@import "sidebar-mini";
@import "control-sidebar";
@import "dropdown";
@import "forms";
@import "progress-bars";
@import "small-box";
@import "boxes";
@import "info-box";
@import "timeline";
@import "buttons";
@import "callout";
@import "alerts";
@import "navs";
@import "products";
@import "table";
@import "labels";
@import "direct-chat";
@import "users-list";
@import "carousel";
@import "modal";
@import "social-widgets";
@import "treeview";
//PAGES
//------
@import "mailbox";
@import "lockscreen";
@import "login_and_register";
@import "404_500_errors";
@import "invoice";
@import "profile";
//Miscellaneous
//-------------
@import "miscellaneous";
@import "print";

62
build/less/AdminLTE.less Normal file
View File

@@ -0,0 +1,62 @@
/*!
* AdminLTE v2.4.0
* Author: Almsaeed Studio
* Website: Almsaeed Studio <https://adminlte.io>
* License: Open source - MIT
* Please visit http://opensource.org/licenses/MIT for more information
*/
// Bootstrap
//--------------------------------------------------------
@import (reference) "../../bower_components/bootstrap/less/mixins";
@import (reference) "../../bower_components/bootstrap/less/variables";
// MISC
//--------------------------------------------------------
@import "core";
@import "variables";
@import "mixins";
// COMPONENTS
//--------------------------------------------------------
@import "header";
@import "sidebar";
@import "sidebar-mini";
@import "control-sidebar";
@import "dropdown";
@import "forms";
@import "progress-bars";
@import "small-box";
@import "boxes";
@import "info-box";
@import "timeline";
@import "buttons";
@import "callout";
@import "alerts";
@import "navs";
@import "products";
@import "table";
@import "labels";
@import "direct-chat";
@import "users-list";
@import "carousel";
@import "modal";
@import "social-widgets";
@import "treeview";
// PAGES
//--------------------------------------------------------
@import "mailbox";
@import "lockscreen";
@import "login_and_register";
@import "404_500_errors";
@import "invoice";
@import "profile";
// Plugins
//--------------------------------------------------------
@import "plugins";
// Miscellaneous
//--------------------------------------------------------
@import "miscellaneous";
@import "print";

47
build/less/alerts.less Normal file
View File

@@ -0,0 +1,47 @@
/*
* Component: alert
* ----------------
*/
.alert {
.border-radius(3px);
h4 {
font-weight: 600;
}
.icon {
margin-right: 10px;
}
.close {
color: #000;
.opacity(.2);
&:hover {
.opacity(.5);
}
}
a {
color: #fff;
text-decoration: underline;
}
}
//Alert Variants
.alert-success {
&:extend(.bg-green);
border-color: darken(@green, 5%);
}
.alert-danger,
.alert-error {
&:extend(.bg-red);
border-color: darken(@red, 5%);
}
.alert-warning {
&:extend(.bg-yellow);
border-color: darken(@yellow, 5%);
}
.alert-info {
&:extend(.bg-aqua);
border-color: darken(@aqua, 5%);
}

178
build/less/bootstrap-social.less vendored Normal file
View File

@@ -0,0 +1,178 @@
/*
* Social Buttons for Bootstrap
*
* Copyright 2013-2015 Panayiotis Lipiridis
* Licensed under the MIT License
*
* https://github.com/lipis/bootstrap-social
*/
// Import variables and mixins as a reference for separate plugins version
@import (reference) "../../bower_components/bootstrap/less/mixins";
@import (reference) "../../bower_components/bootstrap/less/variables";
@import (reference) "variables";
@import (reference) "mixins";
@bs-height-base: (@line-height-computed + @padding-base-vertical * 2);
@bs-height-lg: (floor(@font-size-large * @line-height-base) + @padding-large-vertical * 2);
@bs-height-sm: (floor(@font-size-small * 1.5) + @padding-small-vertical * 2);
@bs-height-xs: (floor(@font-size-small * 1.2) + @padding-small-vertical + 1);
.btn-social {
position: relative;
padding-left: (@bs-height-base + @padding-base-horizontal);
text-align: left;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
> :first-child {
position: absolute;
left: 0;
top: 0;
bottom: 0;
width: @bs-height-base;
line-height: (@bs-height-base + 2);
font-size: 1.6em;
text-align: center;
border-right: 1px solid rgba(0, 0, 0, 0.2);
}
&.btn-lg {
padding-left: (@bs-height-lg + @padding-large-horizontal);
> :first-child {
line-height: @bs-height-lg;
width: @bs-height-lg;
font-size: 1.8em;
}
}
&.btn-sm {
padding-left: (@bs-height-sm + @padding-small-horizontal);
> :first-child {
line-height: @bs-height-sm;
width: @bs-height-sm;
font-size: 1.4em;
}
}
&.btn-xs {
padding-left: (@bs-height-xs + @padding-small-horizontal);
> :first-child {
line-height: @bs-height-xs;
width: @bs-height-xs;
font-size: 1.2em;
}
}
}
.btn-social-icon {
.btn-social;
height: (@bs-height-base + 2);
width: (@bs-height-base + 2);
padding: 0;
> :first-child {
border: none;
text-align: center;
width: 100%;
}
&.btn-lg {
height: @bs-height-lg;
width: @bs-height-lg;
padding-left: 0;
padding-right: 0;
}
&.btn-sm {
height: (@bs-height-sm + 2);
width: (@bs-height-sm + 2);
padding-left: 0;
padding-right: 0;
}
&.btn-xs {
height: (@bs-height-xs + 2);
width: (@bs-height-xs + 2);
padding-left: 0;
padding-right: 0;
}
}
.btn-social(@color-bg, @color: #fff) {
background-color: @color-bg;
.button-variant(@color, @color-bg, rgba(0, 0, 0, .2));
}
.btn-adn {
.btn-social(#d87a68);
}
.btn-bitbucket {
.btn-social(#205081);
}
.btn-dropbox {
.btn-social(#1087dd);
}
.btn-facebook {
.btn-social(#3b5998);
}
.btn-flickr {
.btn-social(#ff0084);
}
.btn-foursquare {
.btn-social(#f94877);
}
.btn-github {
.btn-social(#444444);
}
.btn-google {
.btn-social(#dd4b39);
}
.btn-instagram {
.btn-social(#3f729b);
}
.btn-linkedin {
.btn-social(#007bb6);
}
.btn-microsoft {
.btn-social(#2672ec);
}
.btn-openid {
.btn-social(#f7931e);
}
.btn-pinterest {
.btn-social(#cb2027);
}
.btn-reddit {
.btn-social(#eff7ff, #000);
}
.btn-soundcloud {
.btn-social(#ff5500);
}
.btn-tumblr {
.btn-social(#2c4762);
}
.btn-twitter {
.btn-social(#55acee);
}
.btn-vimeo {
.btn-social(#1ab7ea);
}
.btn-vk {
.btn-social(#587ea3);
}
.btn-yahoo {
.btn-social(#720e9e);
}

489
build/less/boxes.less Normal file
View File

@@ -0,0 +1,489 @@
/*
* Component: Box
* --------------
*/
.box {
position: relative;
.border-radius(@box-border-radius);
background: #ffffff;
border-top: 3px solid @box-default-border-top-color;
margin-bottom: 20px;
width: 100%;
box-shadow: @box-boxshadow;
// Box color variations
&.box-primary {
border-top-color: @light-blue;
}
&.box-info {
border-top-color: @aqua;
}
&.box-danger {
border-top-color: @red;
}
&.box-warning {
border-top-color: @yellow;
}
&.box-success {
border-top-color: @green;
}
&.box-default {
border-top-color: @gray-lte;
}
// collapsed mode
&.collapsed-box {
.box-body,
.box-footer {
display: none;
}
}
.nav-stacked {
> li {
border-bottom: 1px solid @box-border-color;
margin: 0;
&:last-of-type {
border-bottom: none;
}
}
}
// fixed height to 300px
&.height-control {
.box-body {
max-height: 300px;
overflow: auto;
}
}
.border-right {
border-right: 1px solid @box-border-color;
}
.border-left {
border-left: 1px solid @box-border-color;
}
//SOLID BOX
//---------
//use this class to get a colored header and borders
&.box-solid {
border-top: 0;
> .box-header {
.btn.btn-default {
background: transparent;
}
.btn,
a {
&:hover {
background: rgba(0, 0, 0, 0.1);
}
}
}
// Box color variations
&.box-default {
.box-solid-variant(@gray-lte, #444);
}
&.box-primary {
.box-solid-variant(@light-blue);
}
&.box-info {
.box-solid-variant(@aqua);
}
&.box-danger {
.box-solid-variant(@red);
}
&.box-warning {
.box-solid-variant(@yellow);
}
&.box-success {
.box-solid-variant(@green);
}
> .box-header > .box-tools .btn {
border: 0;
box-shadow: none;
}
// Fix font color for tiles
&[class*='bg'] {
> .box-header {
color: #fff;
}
}
}
//BOX GROUP
.box-group {
> .box {
margin-bottom: 5px;
}
}
// jQuery Knob in a box
.knob-label {
text-align: center;
color: #333;
font-weight: 100;
font-size: 12px;
margin-bottom: 0.3em;
}
}
.box,
.overlay-wrapper {
// Box overlay for LOADING STATE effect
> .overlay,
> .loading-img {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
.overlay {
z-index: 50;
background: rgba(255, 255, 255, 0.7);
.border-radius(@box-border-radius);
> .fa {
position: absolute;
top: 50%;
left: 50%;
margin-left: -15px;
margin-top: -15px;
color: #000;
font-size: 30px;
}
}
.overlay.dark {
background: rgba(0, 0, 0, 0.5);
}
}
//Add clearfix to header, body and footer
.box-header,
.box-body,
.box-footer {
.clearfix();
}
//Box header
.box-header {
color: #444;
display: block;
padding: @box-padding;
position: relative;
//Add bottom border
&.with-border {
border-bottom: 1px solid @box-border-color;
.collapsed-box & {
border-bottom: none;
}
}
//Icons and box title
> .fa,
> .glyphicon,
> .ion,
.box-title {
display: inline-block;
font-size: 18px;
margin: 0;
line-height: 1;
}
> .fa,
> .glyphicon,
> .ion {
margin-right: 5px;
}
> .box-tools {
position: absolute;
right: 10px;
top: 5px;
[data-toggle="tooltip"] {
position: relative;
}
&.pull-right {
.dropdown-menu {
right: 0;
left: auto;
}
}
.dropdown-menu > li > a {
color: #444!important;
}
}
}
//Box Tools Buttons
.btn-box-tool {
padding: 5px;
font-size: 12px;
background: transparent;
color: darken(@box-default-border-top-color, 20%);
.open &,
&:hover {
color: darken(@box-default-border-top-color, 40%);
}
&.btn:active {
box-shadow: none;
}
}
//Box Body
.box-body {
.border-radius(0; 0; @box-border-radius; @box-border-radius);
padding: @box-padding;
.no-header & {
.border-top-radius(@box-border-radius);
}
// Tables within the box body
> .table {
margin-bottom: 0;
}
// Calendar within the box body
.fc {
margin-top: 5px;
}
.full-width-chart {
margin: -19px;
}
&.no-padding .full-width-chart {
margin: -9px;
}
.box-pane {
.border-radius(0; 0; @box-border-radius; 0);
}
.box-pane-right {
.border-radius(0; 0; 0; @box-border-radius);
}
}
//Box footer
.box-footer {
.border-radius(0; 0; @box-border-radius; @box-border-radius);
border-top: 1px solid @box-border-color;
padding: @box-padding;
background-color: @box-footer-bg;
}
.chart-legend {
&:extend(.list-unstyled);
margin: 10px 0;
> li {
@media (max-width: @screen-sm-max) {
float: left;
margin-right: 10px;
}
}
}
//Comment Box
.box-comments {
background: #f7f7f7;
.box-comment {
.clearfix();
padding: 8px 0;
border-bottom: 1px solid #eee;
&:last-of-type {
border-bottom: 0;
}
&:first-of-type {
padding-top: 0;
}
img {
&:extend(.img-sm);
float: left;
}
}
.comment-text {
margin-left: 40px;
color: #555;
}
.username {
color: #444;
display: block;
font-weight: 600;
}
.text-muted {
font-weight: 400;
font-size: 12px;
}
}
//Widgets
//-----------
/* Widget: TODO LIST */
.todo-list {
margin: 0;
padding: 0;
list-style: none;
overflow: auto;
// Todo list element
> li {
.border-radius(2px);
padding: 10px;
background: #f4f4f4;
margin-bottom: 2px;
border-left: 2px solid #e6e7e8;
color: #444;
&:last-of-type {
margin-bottom: 0;
}
> input[type='checkbox'] {
margin: 0 10px 0 5px;
}
.text {
display: inline-block;
margin-left: 5px;
font-weight: 600;
}
// Time labels
.label {
margin-left: 10px;
font-size: 9px;
}
// Tools and options box
.tools {
display: none;
float: right;
color: @red;
// icons
> .fa, > .glyphicon, > .ion {
margin-right: 5px;
cursor: pointer;
}
}
&:hover .tools {
display: inline-block;
}
&.done {
color: #999;
.text {
text-decoration: line-through;
font-weight: 500;
}
.label {
background: @gray-lte !important;
}
}
}
// Color varaity
.danger {
border-left-color: @red;
}
.warning {
border-left-color: @yellow;
}
.info {
border-left-color: @aqua;
}
.success {
border-left-color: @green;
}
.primary {
border-left-color: @light-blue;
}
.handle {
display: inline-block;
cursor: move;
margin: 0 5px;
}
}
// END TODO WIDGET
/* Chat widget (DEPRECATED - this will be removed in the next major release. Use Direct Chat instead)*/
.chat {
padding: 5px 20px 5px 10px;
.item {
.clearfix();
margin-bottom: 10px;
// The image
> img {
width: 40px;
height: 40px;
border: 2px solid transparent;
.border-radius(50%);
}
> .online {
border: 2px solid @green;
}
> .offline {
border: 2px solid @red;
}
// The message body
> .message {
margin-left: 55px;
margin-top: -40px;
> .name {
display: block;
font-weight: 600;
}
}
// The attachment
> .attachment {
.border-radius(@attachment-border-radius);
background: #f4f4f4;
margin-left: 65px;
margin-right: 15px;
padding: 10px;
> h4 {
margin: 0 0 5px 0;
font-weight: 600;
font-size: 14px;
}
> p, > .filename {
font-weight: 600;
font-size: 13px;
font-style: italic;
margin: 0;
}
.clearfix();
}
}
}
//END CHAT WIDGET
//Input in box
.box-input {
max-width: 200px;
}
//A fix for panels body text color when placed within
// a modal
.modal {
.panel-body {
color: #444;
}
}

168
build/less/buttons.less Normal file
View File

@@ -0,0 +1,168 @@
/*
* Component: Button
* -----------------
*/
.btn {
.border-radius(@btn-border-radius);
.box-shadow(@btn-boxshadow);
border: 1px solid transparent;
&.uppercase {
text-transform: uppercase
}
// Flat buttons
&.btn-flat {
.border-radius(0);
-webkit-box-shadow: none;
-moz-box-shadow: none;
box-shadow: none;
border-width: 1px;
}
// Active state
&:active {
-webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
-moz-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
}
&:focus {
outline: none;
}
// input file btn
&.btn-file {
position: relative;
overflow: hidden;
> input[type='file'] {
position: absolute;
top: 0;
right: 0;
min-width: 100%;
min-height: 100%;
font-size: 100px;
text-align: right;
.opacity(0);
outline: none;
background: white;
cursor: inherit;
display: block;
}
}
}
//Button color variations
.btn-default {
background-color: #f4f4f4;
color: #444;
border-color: #ddd;
&:hover,
&:active,
&.hover {
background-color: darken(#f4f4f4, 5%);
}
}
.btn-primary {
background-color: @light-blue;
border-color: darken(@light-blue, 5%);
&:hover, &:active, &.hover {
background-color: darken(@light-blue, 5%);
}
}
.btn-success {
background-color: @green;
border-color: darken(@green, 5%);
&:hover, &:active, &.hover {
background-color: darken(@green, 5%);
}
}
.btn-info {
background-color: @aqua;
border-color: darken(@aqua, 5%);
&:hover, &:active, &.hover {
background-color: darken(@aqua, 5%);
}
}
.btn-danger {
background-color: @red;
border-color: darken(@red, 5%);
&:hover, &:active, &.hover {
background-color: darken(@red, 5%);
}
}
.btn-warning {
background-color: @yellow;
border-color: darken(@yellow, 5%);
&:hover, &:active, &.hover {
background-color: darken(@yellow, 5%);
}
}
.btn-outline {
border: 1px solid #fff;
background: transparent;
color: #fff;
&:hover,
&:focus,
&:active {
color: rgba(255, 255, 255, .7);
border-color: rgba(255, 255, 255, .7);
}
}
.btn-link {
.box-shadow(none);
}
//General .btn with bg class
.btn[class*='bg-']:hover {
.box-shadow(inset 0 0 100px rgba(0, 0, 0, 0.2));
}
// Application buttons
.btn-app {
.border-radius(3px);
position: relative;
padding: 15px 5px;
margin: 0 0 10px 10px;
min-width: 80px;
height: 60px;
text-align: center;
color: #666;
border: 1px solid #ddd;
background-color: #f4f4f4;
font-size: 12px;
//Icons within the btn
> .fa, > .glyphicon, > .ion {
font-size: 20px;
display: block;
}
&:hover {
background: #f4f4f4;
color: #444;
border-color: #aaa;
}
&:active, &:focus {
-webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
-moz-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
}
//The badge
> .badge {
position: absolute;
top: -3px;
right: -10px;
font-size: 10px;
font-weight: 400;
}
}

48
build/less/callout.less Normal file
View File

@@ -0,0 +1,48 @@
/*
* Component: Callout
* ------------------
*/
// Base styles (regardless of theme)
.callout {
.border-radius(3px);
margin: 0 0 20px 0;
padding: 15px 30px 15px 15px;
border-left: 5px solid #eee;
a {
color: #fff;
text-decoration: underline;
&:hover {
color: #eee;
}
}
h4 {
margin-top: 0;
font-weight: 600;
}
p:last-child {
margin-bottom: 0;
}
code,
.highlight {
background-color: #fff;
}
// Themes for different contexts
&.callout-danger {
&:extend(.bg-red);
border-color: darken(@red, 10%);
}
&.callout-warning {
&:extend(.bg-yellow);
border-color: darken(@yellow, 10%);
}
&.callout-info {
&:extend(.bg-aqua);
border-color: darken(@aqua, 10%);
}
&.callout-success {
&:extend(.bg-green);
border-color: darken(@green, 10%);
}
}

View File

@@ -1,24 +1,18 @@
//
// Component: Carousel
//
/*
* Component: Carousel
* -------------------
*/
.carousel-control {
&.left,
&.right {
background-image: none;
}
> .fa,
> .fas,
> .far,
> .fab,
> .glyphicon,
> .ion {
display: inline-block;
> .fa {
font-size: 40px;
margin-top: -20px;
position: absolute;
top: 50%;
z-index: 5;
display: inline-block;
margin-top: -20px;
}
}

View File

@@ -0,0 +1,299 @@
/*
* Component: Control sidebar. By default, this is the right sidebar.
*/
// The sidebar's background control class
// This is a hack to make the background visible while scrolling
.control-sidebar-bg {
position: fixed;
z-index: 1000;
bottom: 0;
}
// Transitions
.control-sidebar-bg,
.control-sidebar {
top: 0;
right: -@control-sidebar-width;
width: @control-sidebar-width;
.transition(right @transition-speed ease-in-out);
}
// The sidebar
.control-sidebar {
position: absolute;
padding-top: @navbar-height;
z-index: 1010;
// Fix position after header collapse
@media (max-width: @screen-sm) {
padding-top: @navbar-height + 50;
}
// Tab panes
> .tab-content {
padding: 10px 15px;
}
// Open state with slide over content effect
&.control-sidebar-open {
&,
+ .control-sidebar-bg {
right: 0;
}
}
}
// Open without slide over content
.control-sidebar-open {
.control-sidebar-bg,
.control-sidebar {
right: 0;
}
@media (min-width: @screen-sm) {
.content-wrapper,
.right-side,
.main-footer {
margin-right: @control-sidebar-width;
}
}
}
// Fixed Layout
.fixed {
.control-sidebar {
position: fixed;
height: 100%;
overflow-y: auto;
padding-bottom: 50px;
}
}
// Control sidebar tabs
.nav-tabs.control-sidebar-tabs {
> li {
&:first-of-type > a {
&,
&:hover,
&:focus {
border-left-width: 0;
}
}
> a {
.border-radius(0);
// Hover and active states
&,
&:hover {
border-top: none;
border-right: none;
border-left: 1px solid transparent;
border-bottom: 1px solid transparent;
}
.icon {
font-size: 16px;
}
}
// Active state
&.active {
> a {
&,
&:hover,
&:focus,
&:active {
border-top: none;
border-right: none;
border-bottom: none;
}
}
}
}
// Remove responsiveness on small screens
@media (max-width: @screen-sm) {
display: table;
> li {
display: table-cell;
}
}
}
// Headings in the sidebar content
.control-sidebar-heading {
font-weight: 400;
font-size: 16px;
padding: 10px 0;
margin-bottom: 10px;
}
// Subheadings
.control-sidebar-subheading {
display: block;
font-weight: 400;
font-size: 14px;
}
// Control Sidebar Menu
.control-sidebar-menu {
list-style: none;
padding: 0;
margin: 0 -15px;
> li > a {
.clearfix();
display: block;
padding: 10px 15px;
> .control-sidebar-subheading {
margin-top: 0;
}
}
.menu-icon {
float: left;
width: 35px;
height: 35px;
border-radius: 50%;
text-align: center;
line-height: 35px;
}
.menu-info {
margin-left: 45px;
margin-top: 3px;
> .control-sidebar-subheading {
margin: 0;
}
> p {
margin: 0;
font-size: 11px;
}
}
.progress {
margin: 0;
}
}
// Dark skin
.control-sidebar-dark {
color: @sidebar-dark-color;
// Background
&,
+ .control-sidebar-bg {
background: @sidebar-dark-bg;
}
// Sidebar tabs
.nav-tabs.control-sidebar-tabs {
border-bottom: darken(@sidebar-dark-bg, 3%);
> li {
> a {
background: darken(@sidebar-dark-bg, 5%);
color: @sidebar-dark-color;
// Hover and active states
&,
&:hover,
&:focus {
border-left-color: darken(@sidebar-dark-bg, 7%);
border-bottom-color: darken(@sidebar-dark-bg, 7%);
}
&:hover,
&:focus,
&:active {
background: darken(@sidebar-dark-bg, 3%);
}
&:hover {
color: #fff;
}
}
// Active state
&.active {
> a {
&,
&:hover,
&:focus,
&:active {
background: @sidebar-dark-bg;
color: #fff;
}
}
}
}
}
// Heading & subheading
.control-sidebar-heading,
.control-sidebar-subheading {
color: #fff;
}
// Sidebar list
.control-sidebar-menu {
> li {
> a {
&:hover {
background: @sidebar-dark-hover-bg;
}
.menu-info {
> p {
color: @sidebar-dark-color;
}
}
}
}
}
}
// Light skin
.control-sidebar-light {
color: lighten(@sidebar-light-color, 10%);
// Background
&,
+ .control-sidebar-bg {
background: @sidebar-light-bg;
border-left: 1px solid @gray-lte;
}
// Sidebar tabs
.nav-tabs.control-sidebar-tabs {
border-bottom: @gray-lte;
> li {
> a {
background: darken(@sidebar-light-bg, 5%);
color: @sidebar-light-color;
// Hover and active states
&,
&:hover,
&:focus {
border-left-color: @gray-lte;
border-bottom-color: @gray-lte;
}
&:hover,
&:focus,
&:active {
background: darken(@sidebar-light-bg, 3%);
}
}
// Active state
&.active {
> a {
&,
&:hover,
&:focus,
&:active {
background: @sidebar-light-bg;
color: #111;
}
}
}
}
}
// Heading & subheading
.control-sidebar-heading,
.control-sidebar-subheading {
color: #111;
}
// Sidebar list
.control-sidebar-menu {
margin-left: -14px;
> li {
> a {
&:hover {
background: @sidebar-light-hover-bg;
}
.menu-info {
> p {
color: lighten(@sidebar-light-color, 10%);
}
}
}
}
}
}

174
build/less/core.less Normal file
View File

@@ -0,0 +1,174 @@
/*
* Core: General Layout Style
* -------------------------
*/
html,
body {
height: 100%;
.layout-boxed & {
height: 100%;
}
}
body {
font-family: 'Source Sans Pro', 'Helvetica Neue', Helvetica, Arial, sans-serif;
font-weight: 400;
overflow-x: hidden;
overflow-y: auto;
}
/* Layout */
.wrapper {
.clearfix();
height: 100%;
position: relative;
overflow-x: hidden;
overflow-y: auto;
.layout-boxed & {
max-width: 1250px;
margin: 0 auto;
min-height: 100%;
box-shadow: 0 0 8px rgba(0, 0, 0, 0.5);
position: relative;
}
}
.layout-boxed {
background: url('@{boxed-layout-bg-image-path}') repeat fixed;
}
/*
* Content Wrapper - contains the main content
*/
.content-wrapper,
.main-footer {
// Using disposable variable to join statements with a comma
@transition-rule: @transition-speed @transition-fn,
margin @transition-speed @transition-fn;
.transition-transform(@transition-rule);
margin-left: @sidebar-width;
z-index: 820;
// Top nav layout
.layout-top-nav & {
margin-left: 0;
}
@media (max-width: @screen-xs-max) {
margin-left: 0;
}
// When opening the sidebar on large screens
.sidebar-collapse & {
@media (min-width: @screen-sm) {
margin-left: 0;
}
}
// When opening the sidebar on small screens
.sidebar-open & {
@media (max-width: @screen-xs-max) {
.translate(@sidebar-width, 0);
}
}
}
.content-wrapper {
min-height: 100%;
background-color: @body-bg;
z-index: 800;
}
.main-footer {
background: #fff;
padding: 15px;
color: #444;
border-top: 1px solid @gray-lte;
}
/* Fixed layout */
.fixed {
.main-header,
.main-sidebar,
.left-side {
position: fixed;
}
.main-header {
top: 0;
right: 0;
left: 0;
}
.content-wrapper,
.right-side {
padding-top: 50px;
@media (max-width: @screen-header-collapse) {
padding-top: 100px;
}
}
&.layout-boxed {
.wrapper {
max-width: 100%;
}
}
.wrapper {
overflow: hidden;
}
}
.hold-transition {
.content-wrapper,
.right-side,
.main-footer,
.main-sidebar,
.left-side,
.main-header .navbar,
.main-header .logo,
.menu-open .fa-angle-left {
/* Fix for IE */
.transition(none);
}
}
/* Content */
.content {
min-height: 250px;
padding: 15px;
.container-fixed(@grid-gutter-width);
}
/* H1 - H6 font */
h1,
h2,
h3,
h4,
h5,
h6,
.h1,
.h2,
.h3,
.h4,
.h5,
.h6 {
font-family: 'Source Sans Pro', sans-serif;
}
/* General Links */
a {
color: @link-color;
}
a:hover,
a:active,
a:focus {
outline: none;
text-decoration: none;
color: @link-hover-color;
}
/* Page Header */
.page-header {
margin: 10px 0 20px 0;
font-size: 22px;
> small {
color: #666;
display: block;
margin-top: 5px;
}
}

View File

@@ -0,0 +1,22 @@
.box {
.datepicker-inline {
&,
.datepicker-days {
&,
> table {
width: 100%;
td {
&:hover {
background-color: rgba(255, 255, 255, .3);
}
&.day {
&.old,
&.new {
color: #777;
}
}
}
}
}
}
}

View File

@@ -1,39 +1,26 @@
//
// Component: Direct Chat
//
/*
* Component: Direct Chat
* ----------------------
*/
.direct-chat {
.card-body {
.box-body {
.border-bottom-radius(0);
position: relative;
overflow-x: hidden;
padding: 0;
position: relative;
}
&.chat-pane-open {
.direct-chat-contacts {
@include translate(0, 0);
}
}
&.timestamp-light {
.direct-chat-timestamp {
color: lighten(color-yiq($yiq-text-light), 10%);
}
}
&.timestamp-dark {
.direct-chat-timestamp {
color: darken(color-yiq($yiq-text-dark), 20%);
.translate(0, 0);
}
}
}
.direct-chat-messages {
@include translate(0, 0);
.translate(0, 0);
padding: 10px;
height: 250px;
overflow: auto;
padding: 10px;
}
.direct-chat-msg,
@@ -42,80 +29,73 @@
}
.direct-chat-msg {
@include clearfix;
.clearfix();
margin-bottom: 10px;
}
.direct-chat-messages,
.direct-chat-contacts {
transition: transform .5s ease-in-out;
.transition-transform(.5s ease-in-out);
}
.direct-chat-text {
@if $enable-rounded {
@include border-radius($border-radius-lg);
}
background: $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;
padding: 5px 10px;
.border-radius(5px);
position: relative;
padding: 5px 10px;
background: @direct-chat-default-msg-bg;
border: 1px solid @direct-chat-default-msg-border-color;
margin: 5px 0 0 50px;
color: @direct-chat-default-font-color;
//Create the arrow
&::after,
&::before {
border: solid transparent;
border-right-color: $direct-chat-default-msg-border-color;
content: ' ';
height: 0;
pointer-events: none;
&:after,
&:before {
position: absolute;
right: 100%;
top: 15px;
border: solid transparent;
border-right-color: @direct-chat-default-msg-border-color;
content: ' ';
height: 0;
width: 0;
pointer-events: none;
}
&::after {
&:after {
border-width: 5px;
margin-top: -5px;
}
&::before {
&:before {
border-width: 6px;
margin-top: -6px;
}
.right & {
margin-left: 0;
margin-right: 50px;
&::after,
&::before {
border-left-color: $direct-chat-default-msg-border-color;
border-right-color: transparent;
left: 100%;
margin-left: 0;
&:after,
&:before {
right: auto;
left: 100%;
border-right-color: transparent;
border-left-color: @direct-chat-default-msg-border-color;
}
}
}
.direct-chat-img {
@include border-radius(50%);
.border-radius(50%);
float: left;
height: 40px;
width: 40px;
height: 40px;
.right & {
float: right;
}
}
.direct-chat-infos {
.direct-chat-info {
display: block;
font-size: $font-size-sm;
margin-bottom: 2px;
font-size: 12px;
}
.direct-chat-name {
@@ -123,69 +103,51 @@
}
.direct-chat-timestamp {
color: darken($gray-500, 25%);
color: #999;
}
//Direct chat contacts pane
.direct-chat-contacts-open {
.direct-chat-contacts {
@include translate(0, 0);
.translate(0, 0);
}
}
.direct-chat-contacts {
@include translate(101%, 0);
background: $dark;
bottom: 0;
color: $white;
height: 250px;
overflow: auto;
.translate(101%, 0);
position: absolute;
top: 0;
bottom: 0;
height: 250px;
width: 100%;
}
.direct-chat-contacts-light {
background: $light;
.contacts-list-name {
color: $gray-700;
}
.contacts-list-date {
color: $gray-600;
}
.contacts-list-msg {
color: darken($gray-600, 10%);
}
background: #222d32;
color: #fff;
overflow: auto;
}
//Contacts list -- for displaying contacts in direct chat contacts pane
.contacts-list {
@include list-unstyled;
&:extend(.list-unstyled);
> li {
@include clearfix;
border-bottom: 1px solid rgba($black, 0.2);
margin: 0;
.clearfix();
border-bottom: 1px solid rgba(0, 0, 0, 0.2);
padding: 10px;
margin: 0;
&:last-of-type {
border-bottom: 0;
border-bottom: none;
}
}
}
.contacts-list-img {
@include border-radius(50%);
float: left;
.border-radius(50%);
width: 40px;
float: left;
}
.contacts-list-info {
color: $white;
margin-left: 45px;
color: #fff;
}
.contacts-list-name,
@@ -198,27 +160,35 @@
}
.contacts-list-status {
font-size: $font-size-sm;
font-size: 12px;
}
.contacts-list-date {
color: $gray-400;
color: #aaa;
font-weight: normal;
}
.contacts-list-msg {
color: darken($gray-400, 10%);
color: #999;
}
// Color variants
@each $name, $color in $theme-colors {
.direct-chat-#{$name} {
@include direct-chat-variant($color);
}
//Direct Chat Variants
.direct-chat-danger {
.direct-chat-variant(@red);
}
@each $name, $color in $colors {
.direct-chat-#{$name} {
@include direct-chat-variant($color);
}
.direct-chat-primary {
.direct-chat-variant(@light-blue);
}
.direct-chat-warning {
.direct-chat-variant(@yellow);
}
.direct-chat-info {
.direct-chat-variant(@aqua);
}
.direct-chat-success {
.direct-chat-variant(@green);
}

350
build/less/dropdown.less Normal file
View File

@@ -0,0 +1,350 @@
/*
* Component: Dropdown menus
* -------------------------
*/
/*Dropdowns in general*/
.dropdown-menu {
box-shadow: none;
border-color: #eee;
> li > a {
color: #777;
}
> li > a > .glyphicon,
> li > a > .fa,
> li > a > .ion {
margin-right: 10px;
}
> li > a:hover {
background-color: lighten(@gray-lte, 5%);
color: #333;
}
> .divider {
background-color: #eee;
}
}
//Navbar custom dropdown menu
.navbar-nav > .notifications-menu,
.navbar-nav > .messages-menu,
.navbar-nav > .tasks-menu {
//fix width and padding
> .dropdown-menu {
> li {
position: relative;
}
width: 280px;
//Remove padding and margins
padding: 0 0 0 0;
margin: 0;
top: 100%;
}
//Define header class
> .dropdown-menu > li.header {
.border-radius(4px; 4px; 0; 0);
background-color: #ffffff;
padding: 7px 10px;
border-bottom: 1px solid #f4f4f4;
color: #444444;
font-size: 14px;
}
//Define footer class
> .dropdown-menu > li.footer > a {
.border-radius(0; 0; 4px; 4px);
font-size: 12px;
background-color: #fff;
padding: 7px 10px;
border-bottom: 1px solid #eeeeee;
color: #444 !important;
@media (max-width: @screen-sm-max) {
background: #fff !important;
color: #444 !important;
}
text-align: center;
//Hover state
&:hover {
text-decoration: none;
font-weight: normal;
}
}
//Clear inner menu padding and margins
> .dropdown-menu > li .menu {
max-height: 200px;
margin: 0;
padding: 0;
list-style: none;
overflow-x: hidden;
> li > a {
display: block;
white-space: nowrap; /* Prevent text from breaking */
border-bottom: 1px solid #f4f4f4;
// Hove state
&:hover {
background: #f4f4f4;
text-decoration: none;
}
}
}
}
//Notifications menu
.navbar-nav > .notifications-menu {
> .dropdown-menu > li .menu {
// Links inside the menu
> li > a {
color: #444444;
overflow: hidden;
text-overflow: ellipsis;
padding: 10px;
// Icons inside the menu
> .glyphicon,
> .fa,
> .ion {
width: 20px;
}
}
}
}
//Messages menu
.navbar-nav > .messages-menu {
//Inner menu
> .dropdown-menu > li .menu {
// Messages menu item
> li > a {
margin: 0;
//line-height: 20px;
padding: 10px 10px;
// User image
> div > img {
margin: auto 10px auto auto;
width: 40px;
height: 40px;
}
// Message heading
> h4 {
padding: 0;
margin: 0 0 0 45px;
color: #444444;
font-size: 15px;
position: relative;
// Small for message time display
> small {
color: #999999;
font-size: 10px;
position: absolute;
top: 0;
right: 0;
}
}
> p {
margin: 0 0 0 45px;
font-size: 12px;
color: #888888;
}
.clearfix();
}
}
}
//Tasks menu
.navbar-nav > .tasks-menu {
> .dropdown-menu > li .menu {
> li > a {
padding: 10px;
> h3 {
font-size: 14px;
padding: 0;
margin: 0 0 10px 0;
color: #666666;
}
> .progress {
padding: 0;
margin: 0;
}
}
}
}
//User menu
.navbar-nav > .user-menu {
> .dropdown-menu {
.border-top-radius(0);
padding: 1px 0 0 0;
border-top-width: 0;
width: 280px;
&,
> .user-body {
.border-bottom-radius(4px);
}
// Header menu
> li.user-header {
height: 175px;
padding: 10px;
text-align: center;
// User image
> img {
z-index: 5;
height: 90px;
width: 90px;
border: 3px solid;
border-color: transparent;
border-color: rgba(255, 255, 255, 0.2);
}
> p {
z-index: 5;
color: #fff;
color: rgba(255, 255, 255, 0.8);
font-size: 17px;
//text-shadow: 2px 2px 3px #333333;
margin-top: 10px;
> small {
display: block;
font-size: 12px;
}
}
}
// Menu Body
> .user-body {
padding: 15px;
border-bottom: 1px solid #f4f4f4;
border-top: 1px solid #dddddd;
.clearfix();
a {
color: #444 !important;
@media (max-width: @screen-sm-max) {
background: #fff !important;
color: #444 !important;
}
}
}
// Menu Footer
> .user-footer {
background-color: #f9f9f9;
padding: 10px;
.clearfix();
.btn-default {
color: #666666;
&:hover {
@media (max-width: @screen-sm-max) {
background-color: #f9f9f9;
}
}
}
}
}
.user-image {
float: left;
width: 25px;
height: 25px;
border-radius: 50%;
margin-right: 10px;
margin-top: -2px;
@media (max-width: @screen-xs-max) {
float: none;
margin-right: 0;
margin-top: -8px;
line-height: 10px;
}
}
}
/* 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 {
backface-visibility: visible !important;
.animation(flipInX .7s both);
}
@keyframes flipInX {
0% {
transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
transition-timing-function: ease-in;
opacity: 0;
}
40% {
transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
transition-timing-function: ease-in;
}
60% {
transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
opacity: 1;
}
80% {
transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
}
100% {
transform: perspective(400px);
}
}
@-webkit-keyframes flipInX {
0% {
-webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
-webkit-transition-timing-function: ease-in;
opacity: 0;
}
40% {
-webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
-webkit-transition-timing-function: ease-in;
}
60% {
-webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
opacity: 1;
}
80% {
-webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
}
100% {
-webkit-transform: perspective(400px);
}
}
/* Fix dropdown menu in navbars */
.navbar-custom-menu > .navbar-nav {
> li {
position: relative;
> .dropdown-menu {
position: absolute;
right: 0;
left: auto;
}
}
}
@media (max-width: @screen-sm-max) {
.navbar-custom-menu > .navbar-nav {
float: right;
> li {
position: static;
> .dropdown-menu {
position: absolute;
right: 5%;
left: auto;
border: 1px solid #ddd;
background: #fff;
}
}
}
}

108
build/less/forms.less Normal file
View File

@@ -0,0 +1,108 @@
/*
* Component: Form
* ---------------
*/
.form-control {
.border-radius(@input-radius);
box-shadow: none;
border-color: @gray-lte;
&:focus {
border-color: @light-blue;
box-shadow: none;
}
&::-moz-placeholder,
&:-ms-input-placeholder,
&::-webkit-input-placeholder {
color: #bbb;
opacity: 1;
}
&:not(select) {
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
}
}
.form-group {
&.has-success {
label {
color: @green;
}
.form-control,
.input-group-addon {
border-color: @green;
box-shadow: none;
}
.help-block {
color: @green;
}
}
&.has-warning {
label {
color: @yellow;
}
.form-control,
.input-group-addon {
border-color: @yellow;
box-shadow: none;
}
.help-block {
color: @yellow;
}
}
&.has-error {
label {
color: @red;
}
.form-control,
.input-group-addon {
border-color: @red;
box-shadow: none;
}
.help-block {
color: @red;
}
}
}
/* Input group */
.input-group {
.input-group-addon {
.border-radius(@input-radius);
border-color: @gray-lte;
background-color: #fff;
}
}
/* button groups */
.btn-group-vertical {
.btn {
&.btn-flat:first-of-type, &.btn-flat:last-of-type {
.border-radius(0);
}
}
}
.icheck > label {
padding-left: 0;
}
/* support Font Awesome icons in form-control */
.form-control-feedback.fa {
line-height: @input-height-base;
}
.input-lg + .form-control-feedback.fa,
.input-group-lg + .form-control-feedback.fa,
.form-group-lg .form-control + .form-control-feedback.fa {
line-height: @input-height-large;
}
.input-sm + .form-control-feedback.fa,
.input-group-sm + .form-control-feedback.fa,
.form-group-sm .form-control + .form-control-feedback.fa {
line-height: @input-height-small;
}

View File

@@ -1,15 +1,20 @@
//
// Plugin: Full Calendar
//
/*
* Plugin: Full Calendar
* ---------------------
*/
// Import variables and mixins as a reference for separate plugins version
@import (reference) "../../bower_components/bootstrap/less/mixins";
@import (reference) "../../bower_components/bootstrap/less/variables";
@import (reference) "variables";
@import (reference) "mixins";
// Buttons
// Fullcalendar buttons
.fc-button {
background: $gray-100;
background: #f4f4f4;
background-image: none;
border-bottom-color: #ddd;
color: #444;
border-color: #ddd;
color: $gray-700;
border-bottom-color: #ddd;
&:hover,
&:active,
&.hover {
@@ -19,9 +24,9 @@
// Calendar title
.fc-header-title h2 {
color: #666;
font-size: 15px;
line-height: 1.6em;
color: #666;
margin-left: 10px;
}
@@ -39,8 +44,8 @@
}
.fc-grid {
border: 0;
width: 100%;
border: 0;
}
.fc-widget-header:first-of-type,
@@ -54,30 +59,9 @@
border-right: 0;
}
.fc-toolbar,
.fc-toolbar.fc-header-toolbar {
.fc-toolbar {
padding: @box-padding;
margin: 0;
padding: 1rem;
}
@include media-breakpoint-down(xs) {
.fc-toolbar {
flex-direction: column;
.fc-left {
order: 1;
margin-bottom: .5rem;
}
.fc-center {
order: 0;
margin-bottom: .375rem;
}
.fc-right {
order: 2;
}
}
}
.fc-day-number {
@@ -90,42 +74,33 @@
list-style: none;
margin: 0;
padding: 0;
> li {
float: left;
font-size: 30px;
line-height: 30px;
margin-right: 5px;
.fa,
.fas,
.far,
.fab,
.glyphicon,
.ion {
transition: transform linear .3s;
line-height: 30px;
.fa {
.transition-transform(linear .3s);
&:hover {
@include rotate(30deg);
.rotate(30deg);
}
}
}
}
#add-new-event {
transition: all linear .3s;
.transition(all linear .3s);
}
.external-event {
@include box-shadow($card-shadow);
border-radius: $border-radius;
cursor: move;
padding: 5px 10px;
font-weight: bold;
margin-bottom: 4px;
padding: 5px 10px;
box-shadow: @box-boxshadow;
text-shadow: @box-boxshadow;
border-radius: @box-border-radius;
cursor: move;
&:hover {
@include box-shadow(inset 0 0 90px rgba(0, 0, 0, 0.2));
box-shadow: inset 0 0 90px rgba(0, 0, 0, 0.2);
}
}

248
build/less/header.less Normal file
View File

@@ -0,0 +1,248 @@
/*
* Component: Main Header
* ----------------------
*/
.main-header {
position: relative;
max-height: 100px;
z-index: 1030;
//Navbar
.navbar {
.transition(margin-left @transition-speed @transition-fn);
margin-bottom: 0;
margin-left: @sidebar-width;
border: none;
min-height: @navbar-height;
border-radius: 0;
.layout-top-nav & {
margin-left: 0;
}
}
//Navbar search text input
#navbar-search-input.form-control {
background: rgba(255, 255, 255, .2);
border-color: transparent;
&:focus,
&:active {
border-color: rgba(0, 0, 0, .1);
background: rgba(255, 255, 255, .9);
}
&::-moz-placeholder {
color: #ccc;
opacity: 1;
}
&:-ms-input-placeholder {
color: #ccc;
}
&::-webkit-input-placeholder {
color: #ccc;
}
}
//Navbar Right Menu
.navbar-custom-menu,
.navbar-right {
float: right;
@media (max-width: @screen-sm-max) {
a {
color: inherit;
background: transparent;
}
}
}
.navbar-right {
@media (max-width: @screen-header-collapse) {
float: none;
.navbar-collapse & {
margin: 7.5px -15px;
}
> li {
color: inherit;
border: 0;
}
}
}
//Navbar toggle button
.sidebar-toggle {
float: left;
background-color: transparent;
background-image: none;
padding: @navbar-padding-vertical @navbar-padding-horizontal;
//Add the fontawesome bars icon
font-family: fontAwesome;
&:before {
content: "\f0c9";
}
&:hover {
color: #fff;
}
&:focus,
&:active {
background: transparent;
}
}
.sidebar-toggle .icon-bar {
display: none;
}
//Navbar User Menu
.navbar .nav > li.user > a {
> .fa,
> .glyphicon,
> .ion {
margin-right: 5px;
}
}
//Labels in navbar
.navbar .nav > li > a > .label {
position: absolute;
top: 9px;
right: 7px;
text-align: center;
font-size: 9px;
padding: 2px 3px;
line-height: .9;
}
//Logo bar
.logo {
.transition(width @transition-speed @transition-fn);
display: block;
float: left;
height: @navbar-height;
font-size: 20px;
line-height: 50px;
text-align: center;
width: @sidebar-width;
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
padding: 0 15px;
font-weight: 300;
overflow: hidden;
//Add support to sidebar mini by allowing the user to create
//2 logo designs. mini and lg
.logo-lg {
//should be visibile when sidebar isn't collapsed
display: block;
}
.logo-mini {
display: none;
}
}
//Navbar Brand. Alternative logo with layout-top-nav
.navbar-brand {
color: #fff;
}
}
// Content Header
.content-header {
position: relative;
padding: 15px 15px 0 15px;
// Header Text
> h1 {
margin: 0;
font-size: 24px;
> small {
font-size: 15px;
display: inline-block;
padding-left: 4px;
font-weight: 300;
}
}
> .breadcrumb {
float: right;
background: transparent;
margin-top: 0;
margin-bottom: 0;
font-size: 12px;
padding: 7px 5px;
position: absolute;
top: 15px;
right: 10px;
.border-radius(2px);
> li > a {
color: #444;
text-decoration: none;
display: inline-block;
> .fa, > .glyphicon, > .ion {
margin-right: 5px;
}
}
> li + li:before {
content: '>\00a0';
}
}
@media (max-width: @screen-sm-max) {
> .breadcrumb {
position: relative;
margin-top: 5px;
top: 0;
right: 0;
float: none;
background: @gray-lte;
padding-left: 10px;
li:before {
color: darken(@gray-lte, 20%);
}
}
}
}
.navbar-toggle {
color: #fff;
border: 0;
margin: 0;
padding: @navbar-padding-vertical @navbar-padding-horizontal;
}
//Control navbar scaffolding on x-small screens
@media (max-width: @screen-sm-max) {
.navbar-custom-menu .navbar-nav > li {
float: left;
}
//Dont't let links get full width
.navbar-custom-menu .navbar-nav {
margin: 0;
float: left;
}
.navbar-custom-menu .navbar-nav > li > a {
padding-top: 15px;
padding-bottom: 15px;
line-height: 20px;
}
}
// Collapse header
@media (max-width: @screen-header-collapse) {
.main-header {
position: relative;
.logo,
.navbar {
width: 100%;
float: none;
}
.navbar {
margin: 0;
}
.navbar-custom-menu {
float: right;
}
}
}
.navbar-collapse.pull-left {
@media (max-width: @screen-sm-max) {
float: none !important;
+ .navbar-custom-menu {
display: block;
position: absolute;
top: 0;
right: 40px;
}
}
}

75
build/less/info-box.less Normal file
View File

@@ -0,0 +1,75 @@
/*
* Component: Info Box
* -------------------
*/
.info-box {
display: block;
min-height: 90px;
background: #fff;
width: 100%;
box-shadow: @box-boxshadow;
.border-radius(2px);
margin-bottom: 15px;
small {
font-size: 14px;
}
.progress {
background: rgba(0, 0, 0, .2);
margin: 5px -10px 5px -10px;
height: 2px;
&,
& .progress-bar {
.border-radius(0);
}
.progress-bar {
background: #fff;
}
}
}
.info-box-icon {
.border-radius(2px; 0; 2px; 0);
display: block;
float: left;
height: 90px;
width: 90px;
text-align: center;
font-size: 45px;
line-height: 90px;
background: rgba(0, 0, 0, 0.2);
> img {
max-width: 100%;
}
}
.info-box-content {
padding: 5px 10px;
margin-left: 90px;
}
.info-box-number {
display: block;
font-weight: bold;
font-size: 18px;
}
.progress-description,
.info-box-text {
display: block;
font-size: 14px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.info-box-text {
text-transform: uppercase;
}
.info-box-more {
display: block;
}
.progress-description {
margin: 0;
}

16
build/less/invoice.less Normal file
View File

@@ -0,0 +1,16 @@
/*
* Page: Invoice
* -------------
*/
.invoice {
position: relative;
background: #fff;
border: 1px solid #f4f4f4;
padding: 20px;
margin: 10px 25px;
}
.invoice-title {
margin-top: 0;
}

28
build/less/labels.less Normal file
View File

@@ -0,0 +1,28 @@
/*
* Component: Label
* ----------------
*/
.label-default {
background-color: @gray-lte;
color: #444;
}
.label-danger {
&:extend(.bg-red);
}
.label-info {
&:extend(.bg-aqua);
}
.label-warning {
&:extend(.bg-yellow);
}
.label-primary {
&:extend(.bg-light-blue);
}
.label-success {
&:extend(.bg-green);
}

View File

@@ -1,73 +1,68 @@
//
// Pages: Lock Screen
//
// ADD THIS CLASS TO THE <BODY> TAG
/*
* Page: Lock Screen
* -----------------
*/
/* ADD THIS CLASS TO THE <BODY> TAG */
.lockscreen {
background: $gray-200;
// User name [optional]
.lockscreen-name {
font-weight: 600;
text-align: center;
}
background: @gray-lte;
}
.lockscreen-logo {
font-size: 35px;
font-weight: 300;
margin-bottom: 25px;
text-align: center;
margin-bottom: 25px;
font-weight: 300;
a {
color: $gray-700;
color: #444;
}
}
.lockscreen-wrapper {
max-width: 400px;
margin: 0 auto;
margin-top: 10%;
max-width: 400px;
}
/* User name [optional] */
.lockscreen .lockscreen-name {
text-align: center;
font-weight: 600;
}
// Will contain the image and the sign in form
/* Will contain the image and the sign in form */
.lockscreen-item {
@include border-radius(4px);
background: $white;
margin: 10px auto 30px;
.border-radius(4px);
padding: 0;
background: #fff;
position: relative;
margin: 10px auto 30px auto;
width: 290px;
}
// User image
/* User image */
.lockscreen-image {
@include border-radius(50%);
background: $white;
left: -10px;
padding: 5px;
.border-radius(50%);
position: absolute;
left: -10px;
top: -25px;
background: #fff;
padding: 5px;
z-index: 10;
> img {
@include border-radius(50%);
height: 70px;
.border-radius(50%);
width: 70px;
height: 70px;
}
}
// Contains the password input and the login button
/* Contains the password input and the login button */
.lockscreen-credentials {
margin-left: 70px;
.form-control {
border: 0;
}
.btn {
background-color: $white;
background-color: #fff;
border: 0;
padding: 0 10px;
}

View File

@@ -0,0 +1,52 @@
/*
* Page: Login & Register
* ----------------------
*/
.login-logo,
.register-logo {
font-size: 35px;
text-align: center;
margin-bottom: 25px;
font-weight: 300;
a {
color: #444;
}
}
.login-page,
.register-page {
background: @gray-lte;
}
.login-box,
.register-box {
width: 360px;
margin: 7% auto;
@media (max-width: @screen-sm) {
width: 90%;
margin-top: 20px;
}
}
.login-box-body,
.register-box-body {
background: #fff;
padding: 20px;
border-top: 0;
color: #666;
.form-control-feedback {
color: #777;
}
}
.login-box-msg,
.register-box-msg {
margin: 0;
text-align: center;
padding: 0 20px 20px 20px;
}
.social-auth-links {
margin: 10px 0;
}

View File

@@ -1,7 +1,7 @@
//
// Pages: Mailbox
//
/*
* Page: Mailbox
* -------------
*/
.mailbox-messages {
> .table {
margin: 0;
@@ -10,24 +10,21 @@
.mailbox-controls {
padding: 5px;
&.with-border {
border-bottom: 1px solid $card-border-color;
border-bottom: 1px solid @box-border-color;
}
}
.mailbox-read-info {
border-bottom: 1px solid $card-border-color;
border-bottom: 1px solid @box-border-color;
padding: 10px;
h3 {
font-size: 20px;
margin: 0;
}
h5 {
margin: 0;
padding: 5px 0 0;
padding: 5px 0 0 0;
}
}
@@ -41,19 +38,19 @@
}
.mailbox-attachments {
@include list-unstyled;
&:extend(.list-unstyled);
li {
border: 1px solid #eee;
float: left;
width: 200px;
border: 1px solid #eee;
margin-bottom: 10px;
margin-right: 10px;
width: 200px;
}
}
.mailbox-attachment-name {
color: #666;
font-weight: bold;
color: #666;
}
.mailbox-attachment-icon,
@@ -63,37 +60,29 @@
}
.mailbox-attachment-info {
background: $gray-100;
padding: 10px;
background: #f4f4f4;
}
.mailbox-attachment-size {
color: #999;
font-size: 12px;
> span {
display: inline-block;
padding-top: 0.75rem;
}
}
.mailbox-attachment-icon {
color: #666;
font-size: 65px;
max-height: 132.5px;
padding: 20px 10px;
text-align: center;
font-size: 65px;
color: #666;
padding: 20px 10px;
&.has-img {
padding: 0;
> img {
height: auto;
max-width: 100%;
height: auto;
}
}
}
.mailbox-attachment-close {
@extend .close;
&:extend(.close);
}

View File

@@ -0,0 +1,606 @@
/*
* General: Miscellaneous
* ----------------------
*/
// 10px padding and margins
.pad {
padding: 10px;
}
.margin {
margin: 10px;
}
.margin-bottom {
margin-bottom: 20px;
}
.margin-bottom-none {
margin-bottom: 0;
}
.margin-r-5 {
margin-right: 5px;
}
// Display inline
.inline {
display: inline;
}
// Description Blocks
.description-block {
display: block;
margin: 10px 0;
text-align: center;
&.margin-bottom {
margin-bottom: 25px;
}
> .description-header {
margin: 0;
padding: 0;
font-weight: 600;
font-size: 16px;
}
> .description-text {
text-transform: uppercase;
}
}
// Background colors
.bg-red,
.bg-yellow,
.bg-aqua,
.bg-blue,
.bg-light-blue,
.bg-green,
.bg-navy,
.bg-teal,
.bg-olive,
.bg-lime,
.bg-orange,
.bg-fuchsia,
.bg-purple,
.bg-maroon,
.bg-black,
.bg-red-active,
.bg-yellow-active,
.bg-aqua-active,
.bg-blue-active,
.bg-light-blue-active,
.bg-green-active,
.bg-navy-active,
.bg-teal-active,
.bg-olive-active,
.bg-lime-active,
.bg-orange-active,
.bg-fuchsia-active,
.bg-purple-active,
.bg-maroon-active,
.bg-black-active {
color: #fff !important;
}
.bg-gray {
color: #000;
background-color: @gray-lte !important;
}
.bg-gray-light {
background-color: #f7f7f7;
}
.bg-black {
background-color: @black !important;
}
.bg-red {
background-color: @red !important;
}
.bg-yellow {
background-color: @yellow !important;
}
.bg-aqua {
background-color: @aqua !important;
}
.bg-blue {
background-color: @blue !important;
}
.bg-light-blue {
background-color: @light-blue !important;
}
.bg-green {
background-color: @green !important;
}
.bg-navy {
background-color: @navy !important;
}
.bg-teal {
background-color: @teal !important;
}
.bg-olive {
background-color: @olive !important;
}
.bg-lime {
background-color: @lime !important;
}
.bg-orange {
background-color: @orange !important;
}
.bg-fuchsia {
background-color: @fuchsia !important;
}
.bg-purple {
background-color: @purple !important;
}
.bg-maroon {
background-color: @maroon !important;
}
//Set of Active Background Colors
.bg-gray-active {
color: #000;
background-color: darken(@gray-lte, 10%) !important;
}
.bg-black-active {
background-color: darken(@black, 10%) !important;
}
.bg-red-active {
background-color: darken(@red , 6%) !important;
}
.bg-yellow-active {
background-color: darken(@yellow , 6%) !important;
}
.bg-aqua-active {
background-color: darken(@aqua , 6%) !important;
}
.bg-blue-active {
background-color: darken(@blue , 10%) !important;
}
.bg-light-blue-active {
background-color: darken(@light-blue , 6%) !important;
}
.bg-green-active {
background-color: darken(@green , 5%) !important;
}
.bg-navy-active {
background-color: darken(@navy , 2%) !important;
}
.bg-teal-active {
background-color: darken(@teal , 5%) !important;
}
.bg-olive-active {
background-color: darken(@olive , 5%) !important;
}
.bg-lime-active {
background-color: darken(@lime , 5%) !important;
}
.bg-orange-active {
background-color: darken(@orange , 5%) !important;
}
.bg-fuchsia-active {
background-color: darken(@fuchsia , 5%) !important;
}
.bg-purple-active {
background-color: darken(@purple , 5%) !important;
}
.bg-maroon-active {
background-color: darken(@maroon , 3%) !important;
}
//Disabled!
[class^="bg-"].disabled {
.opacity(.65);
}
// Text colors
.text-red {
color: @red !important;
}
.text-yellow {
color: @yellow !important;
}
.text-aqua {
color: @aqua !important;
}
.text-blue {
color: @blue !important;
}
.text-black {
color: @black !important;
}
.text-light-blue {
color: @light-blue !important;
}
.text-green {
color: @green !important;
}
.text-gray {
color: @gray-lte !important;
}
.text-navy {
color: @navy !important;
}
.text-teal {
color: @teal !important;
}
.text-olive {
color: @olive !important;
}
.text-lime {
color: @lime !important;
}
.text-orange {
color: @orange !important;
}
.text-fuchsia {
color: @fuchsia !important;
}
.text-purple {
color: @purple !important;
}
.text-maroon {
color: @maroon !important;
}
.link-muted {
color: darken(@gray-lte, 30%);
&:hover,
&:focus {
color: darken(@gray-lte, 40%);
}
}
.link-black {
color: #666;
&:hover,
&:focus {
color: #999;
}
}
// Hide elements by display none only
.hide {
display: none !important;
}
// Remove borders
.no-border {
border: 0 !important;
}
// Remove padding
.no-padding {
padding: 0 !important;
}
// Remove margins
.no-margin {
margin: 0 !important;
}
// Remove box shadow
.no-shadow {
box-shadow: none !important;
}
// Unstyled List
.list-unstyled {
list-style: none;
margin: 0;
padding: 0;
}
.list-group-unbordered {
> .list-group-item {
border-left: 0;
border-right: 0;
border-radius: 0;
padding-left: 0;
padding-right: 0;
}
}
// Remove border radius
.flat {
.border-radius(0) !important;
}
.text-bold {
&, &.table td, &.table th {
font-weight: 700;
}
}
.text-sm {
font-size: 12px;
}
// _fix for sparkline tooltip
.jqstooltip {
padding: 5px !important;
width: auto !important;
height: auto !important;
}
// Gradient Background colors
.bg-teal-gradient {
.gradient(@teal; @teal; lighten(@teal, 16%)) !important;
color: #fff;
}
.bg-light-blue-gradient {
.gradient(@light-blue; @light-blue; lighten(@light-blue, 12%)) !important;
color: #fff;
}
.bg-blue-gradient {
.gradient(@blue; @blue; lighten(@blue, 7%)) !important;
color: #fff;
}
.bg-aqua-gradient {
.gradient(@aqua; @aqua; lighten(@aqua, 7%)) !important;
color: #fff;
}
.bg-yellow-gradient {
.gradient(@yellow; @yellow; lighten(@yellow, 16%)) !important;
color: #fff;
}
.bg-purple-gradient {
.gradient(@purple; @purple; lighten(@purple, 16%)) !important;
color: #fff;
}
.bg-green-gradient {
.gradient(@green; @green; lighten(@green, 7%)) !important;
color: #fff;
}
.bg-red-gradient {
.gradient(@red; @red; lighten(@red, 10%)) !important;
color: #fff;
}
.bg-black-gradient {
.gradient(@black; @black; lighten(@black, 10%)) !important;
color: #fff;
}
.bg-maroon-gradient {
.gradient(@maroon; @maroon; lighten(@maroon, 10%)) !important;
color: #fff;
}
//Description Block Extension
.description-block {
.description-icon {
font-size: 16px;
}
}
//Remove top padding
.no-pad-top {
padding-top: 0;
}
//Make position static
.position-static {
position: static !important;
}
//List utility classes
.list-header {
font-size: 15px;
padding: 10px 4px;
font-weight: bold;
color: #666;
}
.list-seperator {
height: 1px;
background: @box-border-color;
margin: 15px 0 9px 0;
}
.list-link {
> a {
padding: 4px;
color: #777;
&:hover {
color: #222;
}
}
}
//Light font weight
.font-light {
font-weight: 300;
}
//User block
.user-block {
.clearfix();
img {
width: 40px;
height: 40px;
float: left;
}
.username,
.description,
.comment {
display: block;
margin-left: 50px;
}
.username {
font-size: 16px;
font-weight: 600;
}
.description {
color: #999;
font-size: 13px;
}
&.user-block-sm {
img {
&:extend(.img-sm);
}
.username,
.description,
.comment {
margin-left: 40px;
}
.username {
font-size: 14px;
}
}
}
//Image sizes
.img-sm,
.img-md,
.img-lg {
float: left;
}
.img-sm {
width: 30px !important;
height: 30px !important;
+ .img-push {
margin-left: 40px;
}
}
.img-md {
width: 60px;
height: 60px;
+ .img-push {
margin-left: 70px;
}
}
.img-lg {
width: 100px;
height: 100px;
+ .img-push {
margin-left: 110px;
}
}
// Image bordered
.img-bordered {
border: 3px solid @gray-lte;
padding: 3px;
}
.img-bordered-sm {
border: 2px solid @gray-lte;
padding: 2px;
}
//General attachemnt block
.attachment-block {
border: 1px solid @box-border-color;
padding: 5px;
margin-bottom: 10px;
background: #f7f7f7;
.attachment-img {
max-width: 100px;
max-height: 100px;
height: auto;
float: left;
}
.attachment-pushed {
margin-left: 110px;
}
.attachment-heading {
margin: 0;
}
.attachment-text {
color: #555;
}
}
.connectedSortable {
min-height: 100px;
}
.ui-helper-hidden-accessible {
border: 0;
clip: rect(0 0 0 0);
height: 1px;
margin: -1px;
overflow: hidden;
padding: 0;
position: absolute;
width: 1px;
}
.sort-highlight {
background: #f4f4f4;
border: 1px dashed #ddd;
margin-bottom: 10px;
}
.full-opacity-hover {
.opacity(.65);
&:hover {
.opacity(1);
}
}
// Charts
.chart {
position: relative;
overflow: hidden;
width: 100%;
svg,
canvas {
width: 100% !important;
}
}

312
build/less/mixins.less Normal file
View File

@@ -0,0 +1,312 @@
//AdminLTE mixins
//===============
//Changes the color and the hovering properties of the navbar
.navbar-variant(@color; @font-color: rgba(255, 255, 255, 0.8); @hover-color: #f6f6f6; @hover-bg: rgba(0, 0, 0, 0.1)) {
background-color: @color;
//Navbar links
.nav > li > a {
color: @font-color;
}
.nav > li > a:hover,
.nav > li > a:active,
.nav > li > a:focus,
.nav .open > a,
.nav .open > a:hover,
.nav .open > a:focus,
.nav > .active > a {
background: @hover-bg;
color: @hover-color;
}
//Add color to the sidebar toggle button
.sidebar-toggle {
color: @font-color;
&:hover {
color: @hover-color;
background: @hover-bg;
}
}
}
//Logo color variation
.logo-variant(@bg-color; @color: #fff; @border-bottom-color: transparent; @border-bottom-width: 0) {
background-color: @bg-color;
color: @color;
border-bottom: @border-bottom-width solid @border-bottom-color;
&:hover {
background-color: darken(@bg-color, 1%);
}
}
//Box solid color variantion creator
.box-solid-variant(@color; @text-color: #fff) {
border: 1px solid @color;
> .box-header {
color: @text-color;
background: @color;
background-color: @color;
a,
.btn {
color: @text-color;
}
}
}
//Direct Chat Variant
.direct-chat-variant(@bg-color; @color: #fff) {
.right > .direct-chat-text {
background: @bg-color;
border-color: @bg-color;
color: @color;
&:after,
&:before {
border-left-color: @bg-color;
}
}
}
//border radius creator
.border-radius(@radius) {
border-radius: @radius;
}
//Different radius each side
.border-radius(@top-left, @top-right, @bottom-left, @bottom-right)
{
border-top-left-radius: @top-left;
border-top-right-radius: @top-right;
border-bottom-right-radius: @bottom-right;
border-bottom-left-radius: @bottom-left;
}
//Gradient background
.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);
filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",@stop,@start));
}
//Added 2.1.0
//Skins Mixins
//Dark Sidebar Mixin
.skin-dark-sidebar(@link-hover-border-color) {
// Sidebar background color (Both .wrapper and .left-side are responsible for sidebar bg color)
.wrapper,
.main-sidebar,
.left-side {
background-color: @sidebar-dark-bg;
}
//User Panel (resides in the sidebar)
.user-panel {
> .info, > .info > a {
color: #fff;
}
}
//Sidebar Menu. First level links
.sidebar-menu > li {
//Section Headning
&.header {
color: lighten(@sidebar-dark-bg, 20%);
background: darken(@sidebar-dark-bg, 4%);
}
//links
> a {
border-left: 3px solid transparent;
}
//Hover and active states
&:hover > a,
&.active > a,
&.menu-open > a {
color: @sidebar-dark-hover-color;
background: @sidebar-dark-hover-bg;
}
&.active > a {
border-left-color: @link-hover-border-color;
}
//First Level Submenu
> .treeview-menu {
margin: 0 1px;
background: @sidebar-dark-submenu-bg;
}
}
//All links within the sidebar menu
.sidebar a {
color: @sidebar-dark-color;
&:hover {
text-decoration: none;
}
}
//All submenus
.sidebar-menu .treeview-menu {
> li {
> a {
color: @sidebar-dark-submenu-color;
}
&.active > a, > a:hover {
color: @sidebar-dark-submenu-hover-color;
}
}
}
//The sidebar search form
.sidebar-form {
.border-radius(3px);
border: 1px solid lighten(@sidebar-dark-bg, 10%);
margin: 10px 10px;
input[type="text"], .btn {
box-shadow: none;
background-color: lighten(@sidebar-dark-bg, 10%);
border: 1px solid transparent;
height: 35px;
//.transition(all @transition-speed @transition-fn);
}
input[type="text"] {
color: #666;
.border-radius(2px, 0, 2px, 0);
&:focus,
&:focus + .input-group-btn .btn {
background-color: #fff;
color: #666;
}
&:focus + .input-group-btn .btn {
border-left-color: #fff;
}
}
.btn {
color: #999;
.border-radius(0, 2px, 0, 2px);
}
}
}
//Light Sidebar Mixin
.skin-light-sidebar(@icon-active-color) {
// Sidebar background color (Both .wrapper and .left-side are responsible for sidebar bg color)
.wrapper,
.main-sidebar,
.left-side {
background-color: @sidebar-light-bg;
}
.content-wrapper,
.main-footer {
//border-left: 1px solid @gray-lte;
}
.main-sidebar {
border-right: 1px solid @gray-lte;
}
//User Panel (resides in the sidebar)
.user-panel {
> .info, > .info > a {
color: @sidebar-light-color;
}
}
//Sidebar Menu. First level links
.sidebar-menu > li {
.transition(border-left-color .3s ease);
//border-left: 3px solid transparent;
//Section Headning
&.header {
color: lighten(@sidebar-light-color, 25%);
background: @sidebar-light-bg;
}
//links
> a {
border-left: 3px solid transparent;
font-weight: 600;
}
//Hover and active states
&:hover > a,
&.active > a {
color: @sidebar-light-hover-color;
background: @sidebar-light-hover-bg;
}
&:hover > a {
}
&.active {
border-left-color: @icon-active-color;
> a {
font-weight: 600;
}
}
//First Level Submenu
> .treeview-menu {
background: @sidebar-light-submenu-bg;
}
}
//All links within the sidebar menu
.sidebar a {
color: @sidebar-light-color;
&:hover {
text-decoration: none;
}
}
//All submenus
.sidebar-menu .treeview-menu {
> li {
> a {
color: @sidebar-light-submenu-color;
}
&.active > a,
> a:hover {
color: @sidebar-light-submenu-hover-color;
}
&.active > a {
font-weight: 600;
}
}
}
//The sidebar search form
.sidebar-form {
.border-radius(3px);
border: 1px solid @gray-lte; //darken(@sidebar-light-bg, 5%);
margin: 10px 10px;
input[type="text"],
.btn {
box-shadow: none;
background-color: #fff; //darken(@sidebar-light-bg, 3%);
border: 1px solid transparent;
height: 35px;
//.transition(all @transition-speed @transition-fn);
}
input[type="text"] {
color: #666;
.border-radius(2px, 0, 2px, 0);
&:focus,
&:focus + .input-group-btn .btn {
background-color: #fff;
color: #666;
}
&:focus + .input-group-btn .btn {
border-left-color: #fff;
}
}
.btn {
color: #999;
.border-radius(0, 2px, 0, 2px);
}
}
@media (min-width: @screen-sm-min) {
&.sidebar-mini.sidebar-collapse {
.sidebar-menu > li > .treeview-menu {
border-left: 1px solid @gray-lte;
}
}
}
}

80
build/less/modal.less Normal file
View File

@@ -0,0 +1,80 @@
/*
* Component: modal
* ----------------
*/
.modal {
background: rgba(0, 0, 0, .3);
}
.modal-content {
.border-radius(0);
.box-shadow(0 2px 3px rgba(0, 0, 0, .125));
border: 0;
@media (min-width: @screen-sm-min) {
.box-shadow(0 2px 3px rgba(0, 0, 0, .125));
}
}
.modal-header {
border-bottom-color: @box-border-color;
}
.modal-footer {
border-top-color: @box-border-color;
}
//Modal variants
.modal-primary {
.modal-body {
&:extend(.bg-light-blue);
}
.modal-header,
.modal-footer {
&:extend(.bg-light-blue-active);
border-color: darken(@light-blue, 10%);
}
}
.modal-warning {
.modal-body {
&:extend(.bg-yellow);
}
.modal-header,
.modal-footer {
&:extend(.bg-yellow-active);
border-color: darken(@yellow, 10%);
}
}
.modal-info {
.modal-body {
&:extend(.bg-aqua);
}
.modal-header,
.modal-footer {
&:extend(.bg-aqua-active);
border-color: darken(@aqua, 10%);
}
}
.modal-success {
.modal-body {
&:extend(.bg-green);
}
.modal-header,
.modal-footer {
&:extend(.bg-green-active);
border-color: darken(@green, 10%);
}
}
.modal-danger {
.modal-body {
&:extend(.bg-red);
}
.modal-header,
.modal-footer {
&:extend(.bg-red-active);
border-color: darken(@red, 10%);
}
}

232
build/less/navs.less Normal file
View File

@@ -0,0 +1,232 @@
/*
* Component: Nav
* --------------
*/
.nav {
> li > a:hover,
> li > a:active,
> li > a:focus {
color: #444;
background: #f7f7f7;
}
}
/* NAV PILLS */
.nav-pills {
> li > a {
.border-radius(0);
border-top: 3px solid transparent;
color: #444;
> .fa,
> .glyphicon,
> .ion {
margin-right: 5px;
}
}
> li.active > a,
> li.active > a:hover,
> li.active > a:focus {
border-top-color: @light-blue;
}
> li.active > a {
font-weight: 600;
}
}
/* NAV STACKED */
.nav-stacked {
> li > a {
.border-radius(0);
border-top: 0;
border-left: 3px solid transparent;
color: #444;
}
> li.active > a,
> li.active > a:hover {
background: transparent;
color: #444;
border-top: 0;
border-left-color: @light-blue;
}
> li.header {
border-bottom: 1px solid #ddd;
color: #777;
margin-bottom: 10px;
padding: 5px 10px;
text-transform: uppercase;
}
}
/* NAV TABS */
.nav-tabs-custom {
margin-bottom: 20px;
background: #fff;
box-shadow: @box-boxshadow;
border-radius: @box-border-radius;
> .nav-tabs {
margin: 0;
border-bottom-color: #f4f4f4;
.border-top-radius(@box-border-radius);
> li {
border-top: 3px solid transparent;
margin-bottom: -2px;
&.disabled > a {
color: #777;
}
> a {
color: #444;
.border-radius(0);
&.text-muted {
color: #999;
}
&,
&:hover {
background: transparent;
margin: 0;
}
&:hover {
color: #999;
}
}
&:not(.active) {
> a:hover,
> a:focus,
> a:active {
border-color: transparent;
}
}
margin-right: 5px;
}
> li.active {
border-top-color: @light-blue;
& > a,
&:hover > a {
background-color: #fff;
color: #444;
}
> a {
border-top-color: transparent;
border-left-color: #f4f4f4;
border-right-color: #f4f4f4;
}
}
> li:first-of-type {
margin-left: 0;
&.active {
> a {
border-left-color: transparent;
}
}
}
//Pulled to the right
&.pull-right {
float: none !important;
> li {
float: right;
}
> li:first-of-type {
margin-right: 0;
> a {
border-left-width: 1px;
}
&.active {
> a {
border-left-color: #f4f4f4;
border-right-color: transparent;
}
}
}
}
> li.header {
line-height: 35px;
padding: 0 10px;
font-size: 20px;
color: #444;
> .fa,
> .glyphicon,
> .ion {
margin-right: 5px;
}
}
}
> .tab-content {
background: #fff;
padding: 10px;
.border-bottom-radius(@box-border-radius);
}
.dropdown.open > a {
&:active,
&:focus {
background: transparent;
color: #999;
}
}
// Tab color variations
&.tab-primary {
> .nav-tabs {
> li.active {
border-top-color: @light-blue;
}
}
}
&.tab-info {
> .nav-tabs {
> li.active {
border-top-color: @aqua;
}
}
}
&.tab-danger {
> .nav-tabs {
> li.active {
border-top-color: @red;
}
}
}
&.tab-warning {
> .nav-tabs {
> li.active {
border-top-color: @yellow;
}
}
}
&.tab-success {
> .nav-tabs {
> li.active {
border-top-color: @green;
}
}
}
&.tab-default {
> .nav-tabs {
> li.active {
border-top-color: @gray-lte;
}
}
}
}
/* PAGINATION */
.pagination {
> li > a {
background: #fafafa;
color: #666;
}
&.pagination-flat {
> li > a {
.border-radius(0) !important;
}
}
}

5
build/less/plugins.less Normal file
View File

@@ -0,0 +1,5 @@
// Customized third-party plugins
@import "bootstrap-social.less";
@import "fullcalendar.less";
@import "select2.less";
@import "datepicker";

View File

@@ -1,7 +1,7 @@
//
// Misc: Print
//
/*
* Misc: print
* -----------
*/
@media print {
//Add to elements that you do not want to show when printing
.no-print {
@@ -10,29 +10,32 @@
//Elements that we want to hide when printing
.main-sidebar,
.left-side,
.main-header,
.content-header {
@extend .no-print;
&:extend(.no-print);
}
//This is the only element that should appear, so let's remove the margins
.content-wrapper,
.right-side,
.main-footer {
@include translate(0, 0);
margin-left: 0 !important;
min-height: 0 !important;
.translate(0, 0) !important;
}
.layout-fixed .content-wrapper {
.fixed .content-wrapper,
.fixed .right-side {
padding-top: 0 !important;
}
//Invoice printing
.invoice {
width: 100%;
border: 0;
margin: 0;
padding: 0;
width: 100%;
}
.invoice-col {
@@ -43,7 +46,6 @@
//Make sure table content displays properly
.table-responsive {
overflow: auto;
> .table tr th,
> .table tr td {
white-space: normal !important;

View File

@@ -1,53 +1,44 @@
//
// Component: Products
//
/*
* Component: Products List
* ------------------------
*/
.products-list {
list-style: none;
margin: 0;
padding: 0;
> .item {
@include clearfix;
@if $enable-rounded {
@include border-radius($border-radius);
}
background: $white;
.border-radius(@box-border-radius);
.box-shadow(@box-boxshadow);
.clearfix();
padding: 10px 0;
background: #fff;
}
.product-img {
float: left;
img {
height: 50px;
width: 50px;
height: 50px;
}
}
.product-info {
margin-left: 60px;
}
.product-title {
font-weight: 600;
}
.product-description {
color: $gray-600;
display: block;
color: #999;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
text-overflow: ellipsis;
}
}
.product-list-in-card > .item {
@include border-radius(0);
border-bottom: 1px solid $card-border-color;
.product-list-in-box > .item {
.box-shadow(none);
.border-radius(0);
border-bottom: 1px solid @box-border-color;
&:last-of-type {
border-bottom-width: 0;
}

View File

@@ -1,12 +1,13 @@
//
// Pages: Profile
//
/*
* Page: Profile
* -------------
*/
.profile-user-img {
border: 3px solid $gray-500;
margin: 0 auto;
padding: 3px;
width: 100px;
padding: 3px;
border: 3px solid @gray-lte;
}
.profile-username {
@@ -15,23 +16,16 @@
}
.post {
border-bottom: 1px solid $gray-500;
color: #666;
border-bottom: 1px solid @gray-lte;
margin-bottom: 15px;
padding-bottom: 15px;
color: #666;
&:last-of-type {
border-bottom: 0;
margin-bottom: 0;
padding-bottom: 0;
}
.user-block {
margin-bottom: 15px;
width: 100%;
}
.row {
width: 100%;
}
}

View File

@@ -0,0 +1,111 @@
/*
* Component: Progress Bar
* -----------------------
*/
//General CSS
.progress,
.progress > .progress-bar {
.box-shadow(none);
&, .progress-bar {
.border-radius(@progress-bar-border-radius);
}
}
/* size variation */
.progress.sm,
.progress-sm {
height: 10px;
&, .progress-bar {
.border-radius(@progress-bar-sm-border-radius);
}
}
.progress.xs,
.progress-xs {
height: 7px;
&, .progress-bar {
.border-radius(@progress-bar-xs-border-radius);
}
}
.progress.xxs,
.progress-xxs {
height: 3px;
&, .progress-bar {
.border-radius(@progress-bar-xs-border-radius);
}
}
/* Vertical bars */
.progress.vertical {
position: relative;
width: 30px;
height: 200px;
display: inline-block;
margin-right: 10px;
> .progress-bar {
width: 100%;
position: absolute;
bottom: 0;
}
//Sizes
&.sm,
&.progress-sm {
width: 20px;
}
&.xs,
&.progress-xs {
width: 10px;
}
&.xxs,
&.progress-xxs {
width: 3px;
}
}
//Progress Groups
.progress-group {
.progress-text {
font-weight: 600;
}
.progress-number {
float: right;
}
}
/* Remove margins from progress bars when put in a table */
.table {
tr > td .progress {
margin: 0;
}
}
// Variations
// -------------------------
.progress-bar-light-blue,
.progress-bar-primary {
.progress-bar-variant(@light-blue);
}
.progress-bar-green,
.progress-bar-success {
.progress-bar-variant(@green);
}
.progress-bar-aqua,
.progress-bar-info {
.progress-bar-variant(@aqua);
}
.progress-bar-yellow,
.progress-bar-warning {
.progress-bar-variant(@yellow);
}
.progress-bar-red,
.progress-bar-danger {
.progress-bar-variant(@red);
}

127
build/less/select2.less Normal file
View File

@@ -0,0 +1,127 @@
/*
* Plugin: Select2
* ---------------
*/
// Import variables and mixins as a reference for separate plugins version
@import (reference) "../../bower_components/bootstrap/less/mixins";
@import (reference) "../../bower_components/bootstrap/less/variables";
@import (reference) "variables";
@import (reference) "mixins";
//Signle select
.select2-container--default,
.select2-selection {
&.select2-container--focus,
&:focus,
&:active {
outline: none;
}
.select2-selection--single {
border: 1px solid @gray-lte;
border-radius: @input-radius;
padding: 6px 12px;
height: 34px;
}
}
.select2-container--default.select2-container--open {
border-color: @light-blue;
}
.select2-dropdown {
border: 1px solid @gray-lte;
border-radius: @input-radius;
}
.select2-container--default .select2-results__option--highlighted[aria-selected] {
background-color: @light-blue;
color: white;
}
.select2-results__option {
padding: 6px 12px;
user-select: none;
-webkit-user-select: none;
}
.select2-container .select2-selection--single .select2-selection__rendered {
padding-left: 0;
padding-right: 0;
height: auto;
margin-top: -4px;
}
.select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered {
padding-right: 6px;
padding-left: 20px;
}
.select2-container--default .select2-selection--single .select2-selection__arrow {
height: 28px;
right: 3px;
}
.select2-container--default .select2-selection--single .select2-selection__arrow b {
margin-top: 0;
}
.select2-dropdown,
.select2-search--inline {
.select2-search__field {
border: 1px solid @gray-lte;
&:focus {
outline: none;
//border: 1px solid @light-blue;
}
}
}
.select2-container--default.select2-container--focus .select2-selection--multiple,
.select2-container--default .select2-search--dropdown .select2-search__field {
border-color: @light-blue !important;
}
.select2-container--default .select2-results__option[aria-disabled=true] {
color: #999;
}
.select2-container--default .select2-results__option[aria-selected=true] {
background-color: #ddd;
&,
&:hover {
color: #444;
}
}
//Multiple select
.select2-container--default {
.select2-selection--multiple {
border: 1px solid @gray-lte;
border-radius: @input-radius;
&:focus {
border-color: @light-blue;
}
}
&.select2-container--focus .select2-selection--multiple {
border-color: @gray-lte;
}
}
.select2-container--default .select2-selection--multiple .select2-selection__choice {
background-color: @light-blue;
border-color: darken(@light-blue, 5%);
padding: 1px 10px;
color: #fff;
}
.select2-container--default .select2-selection--multiple .select2-selection__choice__remove {
margin-right: 5px;
color: rgba(255, 255, 255, .7);
&:hover {
color: #fff;
}
}
.select2-container .select2-selection--single .select2-selection__rendered {
padding-right: 10px;
}

View File

@@ -0,0 +1,165 @@
/*
* Component: Sidebar Mini
*/
//Add sidebar-mini class to the body tag to activate this feature
.sidebar-mini {
//Sidebar mini should work only on devices larger than @screen-sm
@media (min-width: @screen-sm) {
//When the sidebar is collapsed...
&.sidebar-collapse {
//Apply the new margining to the main content and footer
.content-wrapper,
.right-side,
.main-footer {
margin-left: 50px !important;
z-index: 840;
}
//Modify the sidebar to shrink instead of disappearing
.main-sidebar {
//Don't go away! Just shrink
.translate(0, 0);
width: 50px !important;
z-index: 850;
}
.sidebar-menu {
> li {
position: relative;
> a {
margin-right: 0;
}
> a > span {
border-top-right-radius: 4px;
}
&:not(.treeview) {
> a > span {
border-bottom-right-radius: 4px;
}
}
> .treeview-menu {
// Add some padding to the treeview menu
padding-top: 5px;
padding-bottom: 5px;
border-bottom-right-radius: 4px;
}
}
}
//Make the sidebar links, menus, labels, badges
//and angle icons disappear
.main-sidebar .user-panel > .info,
.sidebar-form,
.sidebar-menu > li > a > span,
.sidebar-menu > li > .treeview-menu,
.sidebar-menu > li > a > .pull-right,
.sidebar-menu li.header {
display: none !important;
-webkit-transform: translateZ(0);
}
.main-header {
//Let's make the logo also shrink and the mini logo to appear
.logo {
width: 50px;
> .logo-mini {
display: block;
margin-left: -15px;
margin-right: -15px;
font-size: 18px;
}
> .logo-lg {
display: none;
}
}
//Since the logo got smaller, we need to fix the navbar's position
.navbar {
margin-left: 50px;
}
}
}
}
}
// Show menu items on hover
.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse {
.sidebar-menu > li:hover {
> a {
//overflow: visible;
}
> a > span:not(.pull-right), //:not(.pull-right-container),
> .treeview-menu {
display: block !important;
position: absolute;
width: @sidebar-width - 50;
left: 50px;
}
//position the header & treeview menus
> a > span {
top: 0;
margin-left: -3px;
padding: 12px 5px 12px 20px;
background-color: inherit;
}
> a > .pull-right-container {
//display: block!important;
position: relative !important;
float: right;
width: auto !important;
left: 200px - 20px !important;
top: -22px !important;
z-index: 900;
> .label:not(:first-of-type) {
display: none;
}
}
> .treeview-menu {
top: 44px;
margin-left: 0;
}
}
}
.sidebar-expanded-on-hover {
.main-footer,
.content-wrapper {
margin-left: 50px;
}
.main-sidebar {
box-shadow: @sidebar-expanded-shadow;
}
}
//A fix for text overflow while transitioning from sidebar mini to full sidebar
.sidebar-menu,
.main-sidebar .user-panel,
.sidebar-menu > li.header {
white-space: nowrap;
overflow: hidden;
}
.sidebar-menu:hover {
overflow: visible;
}
.sidebar-form,
.sidebar-menu > li.header {
overflow: hidden;
text-overflow: clip;
}
.sidebar-menu li > a {
position: relative;
> .pull-right-container {
position: absolute;
right: 10px;
top: 50%;
margin-top: -7px;
}
}

141
build/less/sidebar.less Normal file
View File

@@ -0,0 +1,141 @@
/*
* Component: Sidebar
* ------------------
*/
// Main Sidebar
.main-sidebar {
position: absolute;
top: 0;
left: 0;
padding-top: 50px;
min-height: 100%;
width: @sidebar-width;
z-index: 810;
// Using disposable variable to join statements with a comma
@transition-rule: @transition-speed @transition-fn, width @transition-speed @transition-fn;
.transition-transform(@transition-rule);
@media (max-width: @screen-header-collapse) {
padding-top: 100px;
}
@media (max-width: @screen-xs-max) {
.translate(-@sidebar-width, 0);
}
.sidebar-collapse & {
@media (min-width: @screen-sm) {
.translate(-@sidebar-width, 0);
}
}
.sidebar-open & {
@media (max-width: @screen-xs-max) {
.translate(0, 0);
}
}
}
.sidebar {
padding-bottom: 10px;
}
// Remove border from form
.sidebar-form {
input:focus {
border-color: transparent;
}
}
// Sidebar user panel
.user-panel {
position: relative;
width: 100%;
padding: 10px;
overflow: hidden;
.clearfix();
> .image > img {
width: 100%;
max-width: 45px;
height: auto;
}
> .info {
padding: 5px 5px 5px 15px;
line-height: 1;
position: absolute;
left: 55px;
> p {
font-weight: 600;
margin-bottom: 9px;
}
> a {
text-decoration: none;
padding-right: 5px;
margin-top: 3px;
font-size: 11px;
> .fa,
> .ion,
> .glyphicon {
margin-right: 3px;
}
}
}
}
// Sidebar menu
.sidebar-menu {
list-style: none;
margin: 0;
padding: 0;
//First Level
> li {
position: relative;
margin: 0;
padding: 0;
> a {
padding: 12px 5px 12px 15px;
display: block;
> .fa,
> .glyphicon,
> .ion {
width: 20px;
}
}
.label,
.badge {
margin-right: 5px;
}
.badge {
margin-top: 3px;
}
}
li.header {
padding: 10px 25px 10px 15px;
font-size: 12px;
}
li > a > .fa-angle-left,
li > a > .pull-right-container > .fa-angle-left {
width: auto;
height: auto;
padding: 0;
margin-right: 10px;
.transition(transform .5s ease);
}
li > a > .fa-angle-left {
position: absolute;
top: 50%;
right: 10px;
margin-top: -8px;
}
.menu-open {
> a > .fa-angle-left,
> a > .pull-right-container > .fa-angle-left {
.rotate(-90deg);
}
}
.active > .treeview-menu {
display: block;
}
}

View File

@@ -0,0 +1,13 @@
//All skins in one file
@import "skin-blue.less";
@import "skin-blue-light.less";
@import "skin-black.less";
@import "skin-black-light.less";
@import "skin-green.less";
@import "skin-green-light.less";
@import "skin-red.less";
@import "skin-red-light.less";
@import "skin-yellow.less";
@import "skin-yellow-light.less";
@import "skin-purple.less";
@import "skin-purple-light.less";

View File

@@ -0,0 +1,65 @@
/*
* Skin: Black
* -----------
*/
@import "../../../bower_components/bootstrap/less/mixins.less";
@import "../../../bower_components/bootstrap/less/variables.less";
@import "../variables.less";
@import "../mixins.less";
/* skin-black navbar */
.skin-black-light {
//Navbar & Logo
.main-header {
//.box-shadow(0px 1px 1px rgba(0, 0, 0, 0.05));
border-bottom: 1px solid @gray-lte;
.navbar-toggle {
color: #333;
}
.navbar-brand {
color: #333;
border-right: 1px solid @gray-lte;
}
.navbar {
.navbar-variant(#fff; #333; #999; #fff);
> .sidebar-toggle {
color: #333;
border-right: 1px solid @gray-lte;
}
.navbar-nav {
> li > a {
border-right: 1px solid @gray-lte;
}
}
.navbar-custom-menu .navbar-nav,
.navbar-right {
> li {
> a {
border-left: 1px solid @gray-lte;
border-right-width: 0;
}
}
}
}
> .logo {
.logo-variant(#fff; #333);
border-right: 1px solid @gray-lte;
@media (max-width: @screen-header-collapse) {
.logo-variant(#222; #fff);
border-right: none;
}
}
li.user-header {
background-color: #222;
}
}
//Content Header
.content-header {
background: transparent;
box-shadow: none;
}
//Create the sidebar skin
.skin-light-sidebar(#fff);
}

View File

@@ -0,0 +1,74 @@
/*
* Skin: Black
* -----------
*/
@import "../../../bower_components/bootstrap/less/mixins.less";
@import "../../../bower_components/bootstrap/less/variables.less";
@import "../variables.less";
@import "../mixins.less";
/* skin-black navbar */
.skin-black {
//Navbar & Logo
.main-header {
.box-shadow(0px 1px 1px rgba(0, 0, 0, 0.05));
.navbar-toggle {
color: #333;
}
.navbar-brand {
color: #333;
border-right: 1px solid #eee;
}
.navbar {
.navbar-variant(#fff; #333; #999; #fff);
> .sidebar-toggle {
color: #333;
border-right: 1px solid #eee;
}
.navbar-nav {
> li > a {
border-right: 1px solid #eee;
}
}
.navbar-custom-menu .navbar-nav,
.navbar-right {
> li {
> a {
border-left: 1px solid #eee;
border-right-width: 0;
}
}
}
}
> .logo {
.logo-variant(#fff; #333);
border-right: 1px solid #eee;
@media (max-width: @screen-header-collapse) {
.logo-variant(#222; #fff);
border-right: none;
}
}
li.user-header {
background-color: #222;
}
}
//Content Header
.content-header {
background: transparent;
box-shadow: none;
}
//Create the sidebar skin
.skin-dark-sidebar(#fff);
.pace {
.pace-progress {
background: #222;
}
.pace-activity {
border-top-color: #222;
border-left-color: #222;
}
}
}

View File

@@ -0,0 +1,61 @@
/*
* Skin: Blue
* ----------
*/
@import "../../../bower_components/bootstrap/less/mixins.less";
@import "../../../bower_components/bootstrap/less/variables.less";
@import "../variables.less";
@import "../mixins.less";
.skin-blue-light {
//Navbar
.main-header {
.navbar {
.navbar-variant(@light-blue; #fff);
.sidebar-toggle {
color: #fff;
&:hover {
background-color: darken(@light-blue, 5%);
}
}
@media (max-width: @screen-header-collapse) {
.dropdown-menu {
li {
&.divider {
background-color: rgba(255, 255, 255, 0.1);
}
a {
color: #fff;
&:hover {
background: darken(@light-blue, 5%);
}
}
}
}
}
}
//Logo
.logo {
.logo-variant(@light-blue);
}
li.user-header {
background-color: @light-blue;
}
}
//Content Header
.content-header {
background: transparent;
}
//Create the sidebar skin
.skin-light-sidebar(@light-blue);
.main-footer {
border-top-color: @gray-lte;
}
}
.skin-blue.layout-top-nav .main-header > .logo {
.logo-variant(@light-blue);
}

View File

@@ -0,0 +1,58 @@
/*
* Skin: Blue
* ----------
*/
@import "../../../bower_components/bootstrap/less/mixins.less";
@import "../../../bower_components/bootstrap/less/variables.less";
@import "../variables.less";
@import "../mixins.less";
.skin-blue {
//Navbar
.main-header {
.navbar {
.navbar-variant(@light-blue; #fff);
.sidebar-toggle {
color: #fff;
&:hover {
background-color: darken(@light-blue, 5%);
}
}
@media (max-width: @screen-header-collapse) {
.dropdown-menu {
li {
&.divider {
background-color: rgba(255, 255, 255, 0.1);
}
a {
color: #fff;
&:hover {
background: darken(@light-blue, 5%);
}
}
}
}
}
}
//Logo
.logo {
.logo-variant(darken(@light-blue, 5%));
}
li.user-header {
background-color: @light-blue;
}
}
//Content Header
.content-header {
background: transparent;
}
//Create the sidebar skin
.skin-dark-sidebar(@light-blue);
}
.skin-blue.layout-top-nav .main-header > .logo {
.logo-variant(@light-blue);
}

View File

@@ -0,0 +1,55 @@
/*
* Skin: Green
* -----------
*/
@import "../../../bower_components/bootstrap/less/mixins.less";
@import "../../../bower_components/bootstrap/less/variables.less";
@import "../variables.less";
@import "../mixins.less";
.skin-green-light {
//Navbar
.main-header {
.navbar {
.navbar-variant(@green; #fff);
.sidebar-toggle {
color: #fff;
&:hover {
background-color: darken(@green, 5%);
}
}
@media (max-width: @screen-header-collapse) {
.dropdown-menu {
li {
&.divider {
background-color: rgba(255, 255, 255, 0.1);
}
a {
color: #fff;
&:hover {
background: darken(@green, 5%);
}
}
}
}
}
}
//Logo
.logo {
.logo-variant(@green);
}
li.user-header {
background-color: @green;
}
}
//Content Header
.content-header {
background: transparent;
}
//Create the sidebar skin
.skin-light-sidebar(@green);
}

View File

@@ -0,0 +1,55 @@
/*
* Skin: Green
* -----------
*/
@import "../../../bower_components/bootstrap/less/mixins.less";
@import "../../../bower_components/bootstrap/less/variables.less";
@import "../variables.less";
@import "../mixins.less";
.skin-green {
//Navbar
.main-header {
.navbar {
.navbar-variant(@green; #fff);
.sidebar-toggle {
color: #fff;
&:hover {
background-color: darken(@green, 5%);
}
}
@media (max-width: @screen-header-collapse) {
.dropdown-menu {
li {
&.divider {
background-color: rgba(255, 255, 255, 0.1);
}
a {
color: #fff;
&:hover {
background: darken(@green, 5%);
}
}
}
}
}
}
//Logo
.logo {
.logo-variant(darken(@green, 5%));
}
li.user-header {
background-color: @green;
}
}
//Content Header
.content-header {
background: transparent;
}
//Create the sidebar skin
.skin-dark-sidebar(@green);
}

View File

@@ -0,0 +1,54 @@
/*
* Skin: Purple
* ------------
*/
@import "../../../bower_components/bootstrap/less/mixins.less";
@import "../../../bower_components/bootstrap/less/variables.less";
@import "../variables.less";
@import "../mixins.less";
.skin-purple-light {
//Navbar
.main-header {
.navbar {
.navbar-variant(@purple; #fff);
.sidebar-toggle {
color: #fff;
&:hover {
background-color: darken(@purple, 5%);
}
}
@media (max-width: @screen-header-collapse) {
.dropdown-menu {
li {
&.divider {
background-color: rgba(255, 255, 255, 0.1);
}
a {
color: #fff;
&:hover {
background: darken(@purple, 5%);
}
}
}
}
}
}
//Logo
.logo {
.logo-variant(@purple);
}
li.user-header {
background-color: @purple;
}
}
//Content Header
.content-header {
background: transparent;
}
//Create the sidebar skin
.skin-light-sidebar(@purple);
}

View File

@@ -0,0 +1,54 @@
/*
* Skin: Purple
* ------------
*/
@import "../../../bower_components/bootstrap/less/mixins.less";
@import "../../../bower_components/bootstrap/less/variables.less";
@import "../variables.less";
@import "../mixins.less";
.skin-purple {
//Navbar
.main-header {
.navbar {
.navbar-variant(@purple; #fff);
.sidebar-toggle {
color: #fff;
&:hover {
background-color: darken(@purple, 5%);
}
}
@media (max-width: @screen-header-collapse) {
.dropdown-menu {
li {
&.divider {
background-color: rgba(255, 255, 255, 0.1);
}
a {
color: #fff;
&:hover {
background: darken(@purple, 5%);
}
}
}
}
}
}
//Logo
.logo {
.logo-variant(darken(@purple, 5%));
}
li.user-header {
background-color: @purple;
}
}
//Content Header
.content-header {
background: transparent;
}
//Create the sidebar skin
.skin-dark-sidebar(@purple);
}

View File

@@ -0,0 +1,54 @@
/*
* Skin: Red
* ---------
*/
@import "../../../bower_components/bootstrap/less/mixins.less";
@import "../../../bower_components/bootstrap/less/variables.less";
@import "../variables.less";
@import "../mixins.less";
.skin-red-light {
//Navbar
.main-header {
.navbar {
.navbar-variant(@red; #fff);
.sidebar-toggle {
color: #fff;
&:hover {
background-color: darken(@red, 5%);
}
}
@media (max-width: @screen-header-collapse) {
.dropdown-menu {
li {
&.divider {
background-color: rgba(255, 255, 255, 0.1);
}
a {
color: #fff;
&:hover {
background: darken(@red, 5%);
}
}
}
}
}
}
//Logo
.logo {
.logo-variant(@red);
}
li.user-header {
background-color: @red;
}
}
//Content Header
.content-header {
background: transparent;
}
//Create the sidebar skin
.skin-light-sidebar(@red);
}

View File

@@ -0,0 +1,54 @@
/*
* Skin: Red
* ---------
*/
@import "../../../bower_components/bootstrap/less/mixins.less";
@import "../../../bower_components/bootstrap/less/variables.less";
@import "../variables.less";
@import "../mixins.less";
.skin-red {
//Navbar
.main-header {
.navbar {
.navbar-variant(@red; #fff);
.sidebar-toggle {
color: #fff;
&:hover {
background-color: darken(@red, 5%);
}
}
@media (max-width: @screen-header-collapse) {
.dropdown-menu {
li {
&.divider {
background-color: rgba(255, 255, 255, 0.1);
}
a {
color: #fff;
&:hover {
background: darken(@red, 5%);
}
}
}
}
}
}
//Logo
.logo {
.logo-variant(darken(@red, 5%));
}
li.user-header {
background-color: @red;
}
}
//Content Header
.content-header {
background: transparent;
}
//Create the sidebar skin
.skin-dark-sidebar(@red);
}

View File

@@ -0,0 +1,54 @@
/*
* Skin: Yellow
* ------------
*/
@import "../../../bower_components/bootstrap/less/mixins.less";
@import "../../../bower_components/bootstrap/less/variables.less";
@import "../variables.less";
@import "../mixins.less";
.skin-yellow-light {
//Navbar
.main-header {
.navbar {
.navbar-variant(@yellow; #fff);
.sidebar-toggle {
color: #fff;
&:hover {
background-color: darken(@yellow, 5%);
}
}
@media (max-width: @screen-header-collapse) {
.dropdown-menu {
li {
&.divider {
background-color: rgba(255, 255, 255, 0.1);
}
a {
color: #fff;
&:hover {
background: darken(@yellow, 5%);
}
}
}
}
}
}
//Logo
.logo {
.logo-variant(@yellow);
}
li.user-header {
background-color: @yellow;
}
}
//Content Header
.content-header {
background: transparent;
}
//Create the sidebar skin
.skin-light-sidebar(@yellow);
}

View File

@@ -0,0 +1,54 @@
/*
* Skin: Yellow
* ------------
*/
@import "../../../bower_components/bootstrap/less/mixins.less";
@import "../../../bower_components/bootstrap/less/variables.less";
@import "../variables.less";
@import "../mixins.less";
.skin-yellow {
//Navbar
.main-header {
.navbar {
.navbar-variant(@yellow; #fff);
.sidebar-toggle {
color: #fff;
&:hover {
background-color: darken(@yellow, 5%);
}
}
@media (max-width: @screen-header-collapse) {
.dropdown-menu {
li {
&.divider {
background-color: rgba(255, 255, 255, 0.1);
}
a {
color: #fff;
&:hover {
background: darken(@yellow, 5%);
}
}
}
}
}
}
//Logo
.logo {
.logo-variant(darken(@yellow, 5%));
}
li.user-header {
background-color: @yellow;
}
}
//Content Header
.content-header {
background: transparent;
}
//Create the sidebar skin
.skin-dark-sidebar(@yellow);
}

89
build/less/small-box.less Normal file
View File

@@ -0,0 +1,89 @@
/*
* Component: Small Box
* --------------------
*/
.small-box {
.border-radius(2px);
position: relative;
display: block;
margin-bottom: 20px;
box-shadow: @box-boxshadow;
// content wrapper
> .inner {
padding: 10px;
}
> .small-box-footer {
position: relative;
text-align: center;
padding: 3px 0;
color: #fff;
color: rgba(255, 255, 255, 0.8);
display: block;
z-index: 10;
background: rgba(0, 0, 0, 0.1);
text-decoration: none;
&:hover {
color: #fff;
background: rgba(0, 0, 0, 0.15);
}
}
h3 {
font-size: 38px;
font-weight: bold;
margin: 0 0 10px 0;
white-space: nowrap;
padding: 0;
}
p {
font-size: 15px;
> small {
display: block;
color: #f9f9f9;
font-size: 13px;
margin-top: 5px;
}
}
h3, p {
z-index: 5;
}
// the icon
.icon {
.transition(all @transition-speed linear);
position: absolute;
top: -10px;
right: 10px;
z-index: 0;
font-size: 90px;
color: rgba(0, 0, 0, 0.15);
}
// Small box hover state
&:hover {
text-decoration: none;
color: #f9f9f9;
// Animate icons on small box hover
.icon {
font-size: 95px;
}
}
}
@media (max-width: @screen-xs-max) {
// No need for icons on very small devices
.small-box {
text-align: center;
.icon {
display: none;
}
p {
font-size: 12px;
}
}
}

View File

@@ -1,93 +1,78 @@
//
// Component: Social Widgets
//
/*
* Component: Social Widgets
* -------------------------
*/
//General widget style
.card-widget {
border: 0;
.box-widget {
border: none;
position: relative;
}
//User Widget Style 1
.widget-user {
//User name container
.widget-user-header {
@if $enable-rounded {
@include border-top-radius($border-radius);
}
height: 135px;
padding: 1rem;
text-align: center;
padding: 20px;
height: 120px;
.border-top-radius(@box-border-radius);
}
//User name
.widget-user-username {
margin-top: 0;
margin-bottom: 5px;
font-size: 25px;
font-weight: 300;
margin-bottom: 0;
margin-top: 0;
text-shadow: 0 1px 1px rgba($black, 0.2);
text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2);
}
//User single line description
.widget-user-desc {
margin-top: 0;
}
//User image container
.widget-user-image {
position: absolute;
top: 65px;
left: 50%;
margin-left: -45px;
position: absolute;
top: 80px;
> img {
border: 3px solid $white;
height: auto;
width: 90px;
height: auto;
border: 3px solid #fff;
}
}
.card-footer {
padding-top: 50px;
.box-footer {
padding-top: 30px;
}
}
//User Widget Style 2
.widget-user-2 {
//User name container
.widget-user-header {
@include border-top-radius($border-radius);
padding: 1rem;
padding: 20px;
.border-top-radius(@box-border-radius);
}
//User name
.widget-user-username {
margin-top: 5px;
margin-bottom: 5px;
font-size: 25px;
font-weight: 300;
margin-bottom: 5px;
margin-top: 5px;
}
//User single line description
.widget-user-desc {
margin-top: 0;
}
.widget-user-username,
.widget-user-desc {
margin-left: 75px;
}
//User image container
.widget-user-image {
> img {
float: left;
height: auto;
width: 65px;
height: auto;
float: left;
}
}
}

71
build/less/table.less Normal file
View File

@@ -0,0 +1,71 @@
/*
* Component: Table
* ----------------
*/
.table {
//Cells
> thead,
> tbody,
> tfoot {
> tr {
> th,
> td {
border-top: 1px solid @box-border-color;
}
}
}
//thead cells
> thead > tr > th {
border-bottom: 2px solid @box-border-color;
}
//progress bars in tables
tr td .progress {
margin-top: 5px;
}
}
//Bordered Table
.table-bordered {
border: 1px solid @box-border-color;
> thead,
> tbody,
> tfoot {
> tr {
> th,
> td {
border: 1px solid @box-border-color;
}
}
}
> thead > tr {
> th,
> td {
border-bottom-width: 2px;
}
}
}
.table.no-border {
&,
td,
th {
border: 0;
}
}
/* .text-center in tables */
table.text-center {
&, td, th {
text-align: center;
}
}
.table.align {
th {
text-align: left;
}
td {
text-align: right;
}
}

View File

@@ -1,126 +1,109 @@
//
// Component: Timeline
//
/*
* Component: Timeline
* -------------------
*/
.timeline {
margin: 0 0 45px;
padding: 0;
position: relative;
margin: 0 0 30px 0;
padding: 0;
list-style: none;
// The line
&::before {
@include border-radius($border-radius);
background: $gray-300;
bottom: 0;
&:before {
content: '';
left: 31px;
margin: 0;
position: absolute;
top: 0;
bottom: 0;
width: 4px;
background: #ddd;
left: 31px;
margin: 0;
.border-radius(2px);
}
// Element
> div {
&::before,
&::after {
content: "";
display: table;
}
margin-bottom: 15px;
margin-right: 10px;
> li {
position: relative;
margin-right: 10px;
margin-bottom: 15px;
.clearfix();
// The content
> .timeline-item {
@include box-shadow($card-shadow);
@include border-radius($border-radius);
background: $white;
color: $gray-700;
.box-shadow(@box-boxshadow);
.border-radius(@box-border-radius);
margin-top: 0;
background: #fff;
color: #444;
margin-left: 60px;
margin-right: 15px;
margin-top: 0;
padding: 0;
position: relative;
// The time and header
> .time {
color: #999;
float: right;
font-size: 12px;
padding: 10px;
font-size: 12px;
}
// Header
> .timeline-header {
border-bottom: 1px solid $card-border-color;
color: $gray-700;
margin: 0;
color: #555;
border-bottom: 1px solid @box-border-color;
padding: 10px;
font-size: 16px;
line-height: 1.1;
margin: 0;
padding: 10px;
// Link in header
> a {
font-weight: 600;
}
}
// Item body and footer
> .timeline-body,
> .timeline-footer {
> .timeline-body, > .timeline-footer {
padding: 10px;
}
> .timeline-body {
> img {
margin: 10px;
}
> dl, ol, ul {
margin: 0;
}
}
> .timeline-footer {
> a {
color: $white;
}
}
}
// The icons at line
// The icons
> .fa,
> .fas,
> .far,
> .fab,
> .glyphicon,
> .ion {
background: $gray-500;
border-radius: 50%;
font-size: 15px;
width: 30px;
height: 30px;
left: 18px;
font-size: 15px;
line-height: 30px;
position: absolute;
color: #666;
background: @gray-lte;
border-radius: 50%;
text-align: center;
left: 18px;
top: 0;
width: 30px;
}
}
// Time label
> .time-label {
> span {
@include border-radius(4px);
background-color: $white;
display: inline-block;
font-weight: 600;
padding: 5px;
display: inline-block;
background-color: #fff;
.border-radius(4px);
}
}
}
.timeline-inverse {
> div {
> li {
> .timeline-item {
@include box-shadow(none);
background: $gray-100;
border: 1px solid $gray-300;
background: #f0f0f0;
border: 1px solid #ddd;
.box-shadow(none);
> .timeline-header {
border-bottom-color: $gray-300;
border-bottom-color: #ddd;
}
}
}

30
build/less/treeview.less Normal file
View File

@@ -0,0 +1,30 @@
// Tree view menu
.treeview-menu {
display: none;
list-style: none;
padding: 0;
margin: 0;
padding-left: 5px;
.treeview-menu {
padding-left: 20px;
}
> li {
margin: 0;
> a {
padding: 5px 5px 5px 15px;
display: block;
font-size: 14px;
> .fa,
> .glyphicon,
> .ion {
width: 20px;
}
> .pull-right-container > .fa-angle-left,
> .pull-right-container > .fa-angle-down,
> .fa-angle-left,
> .fa-angle-down {
width: auto;
}
}
}
}

View File

@@ -1,22 +1,19 @@
//
// Component: Users List
//
/*
* Component: Users List
* ---------------------
*/
.users-list {
@include list-unstyled;
&:extend(.list-unstyled);
> li {
width: 25%;
float: left;
padding: 10px;
text-align: center;
width: 25%;
img {
@include border-radius(50%);
height: auto;
.border-radius(50%);
max-width: 100%;
height: auto;
}
> a:hover {
&,
.users-list-name {
@@ -32,14 +29,14 @@
}
.users-list-name {
color: $gray-700;
font-size: $font-size-sm;
font-weight: 600;
color: #444;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
text-overflow: ellipsis;
}
.users-list-date {
color: darken($gray-500, 20%);
color: #999;
font-size: 12px;
}

125
build/less/variables.less Normal file
View File

@@ -0,0 +1,125 @@
// AdminLTE 2 Variables.less
// =========================
// PATHS
// --------------------------------------------------------
@boxed-layout-bg-image-path: "../img/boxed-bg.jpg";
// COLORS
// --------------------------------------------------------
// Primary
@light-blue: #3c8dbc;
// Danger
@red: #dd4b39;
// Success
@green: #00a65a;
// Info
@aqua: #00c0ef;
// Warning
@yellow: #f39c12;
@blue: #0073b7;
@navy: #001F3F;
@teal: #39CCCC;
@olive: #3D9970;
@lime: #01FF70;
@orange: #FF851B;
@fuchsia: #F012BE;
@purple: #605ca8;
@maroon: #D81B60;
@black: #111;
@gray-lte: #d2d6de;
// LAYOUT
// --------------------------------------------------------
// Side bar and logo width
@sidebar-width: 230px;
// Boxed layout maximum width
@boxed-layout-max-width: 1024px;
// When the logo should go to the top of the screen
@screen-header-collapse: @screen-xs-max;
// Link colors (Aka: <a> tags)
@link-color: @light-blue;
@link-hover-color: lighten(@link-color, 15%);
// Body background (Affects main content background only)
@body-bg: #ecf0f5;
// SIDEBAR SKINS
// --------------------------------------------------------
// Dark sidebar
@sidebar-dark-bg: #222d32;
@sidebar-dark-hover-bg: darken(@sidebar-dark-bg, 2%);
@sidebar-dark-color: lighten(@sidebar-dark-bg, 60%);
@sidebar-dark-hover-color: #fff;
@sidebar-dark-submenu-bg: lighten(@sidebar-dark-bg, 5%);
@sidebar-dark-submenu-color: lighten(@sidebar-dark-submenu-bg, 40%);
@sidebar-dark-submenu-hover-color: #fff;
// Light sidebar
@sidebar-light-bg: #f9fafc;
@sidebar-light-hover-bg: lighten(#f0f0f1, 1.5%);
@sidebar-light-color: #444;
@sidebar-light-hover-color: #000;
@sidebar-light-submenu-bg: @sidebar-light-hover-bg;
@sidebar-light-submenu-color: #777;
@sidebar-light-submenu-hover-color: #000;
// sidebar-expanded-on-hover
@sidebar-expanded-shadow: 3px 0 8px rgba(0,0,0,.125);
// CONTROL SIDEBAR
// --------------------------------------------------------
@control-sidebar-width: @sidebar-width;
// BOXES
// --------------------------------------------------------
@box-border-color: #f4f4f4;
@box-border-radius: 3px;
@box-footer-bg: #fff;
@box-boxshadow: 0 1px 1px rgba(0, 0, 0, .1);
@box-padding: 10px;
// Box variants
@box-default-border-top-color: #d2d6de;
// BUTTONS
// --------------------------------------------------------
@btn-boxshadow: none;
// PROGRESS BARS
// --------------------------------------------------------
@progress-bar-border-radius: 1px;
@progress-bar-sm-border-radius: 1px;
@progress-bar-xs-border-radius: 1px;
// FORMS
// --------------------------------------------------------
@input-radius: 0;
// BUTTONS
// --------------------------------------------------------
// Border radius for non flat buttons
@btn-border-radius: 3px;
// DIRECT CHAT
// --------------------------------------------------------
@direct-chat-height: 250px;
@direct-chat-default-msg-bg: @gray-lte;
@direct-chat-default-font-color: #444;
@direct-chat-default-msg-border-color: @gray-lte;
// CHAT WIDGET
// --------------------------------------------------------
@attachment-border-radius: 3px;
// TRANSITIONS SETTINGS
// --------------------------------------------------------
// Transition global options
@transition-speed: .3s;
@transition-fn: ease-in-out;

View File

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

View File

@@ -1,43 +0,0 @@
const Plugins = require('./DocsPlugins')
const fse = require('fs-extra')
class Publish {
constructor() {
this.options = {
verbose: false
}
this.getArguments()
}
getArguments() {
if (process.argv.length > 2) {
let arg = process.argv[2]
switch (arg) {
case '-v':
case '--verbose':
this.options.verbose = true
break
default:
throw new Error(`Unknown option ${arg}`)
}
}
}
run() {
// Publish files
Plugins.forEach((module) => {
try {
fse.copySync(module.from, module.to)
if (this.options.verbose) {
console.log(`Copied ${module.from} to ${module.to}`)
}
} catch (err) {
console.error(`Error: ${err}`)
}
})
}
}
(new Publish()).run()

View File

@@ -1,399 +0,0 @@
const Plugins = [
// jQuery
{
from: 'node_modules/jquery/dist',
to : 'plugins/jquery'
},
// Popper
{
from: 'node_modules/popper.js/dist',
to : 'plugins/popper'
},
// Bootstrap
{
from: 'node_modules/bootstrap/dist/js',
to : 'plugins/bootstrap/js'
},
// Font Awesome
{
from: 'node_modules/@fortawesome/fontawesome-free/css',
to : 'plugins/fontawesome-free/css'
},
{
from: 'node_modules/@fortawesome/fontawesome-free/webfonts',
to : 'plugins/fontawesome-free/webfonts'
},
// overlayScrollbars
{
from: 'node_modules/overlayscrollbars/js',
to : 'plugins/overlayScrollbars/js'
},
{
from: 'node_modules/overlayscrollbars/css',
to : 'plugins/overlayScrollbars/css'
},
// Chart.js
{
from: 'node_modules/chart.js/dist/',
to : 'plugins/chart.js'
},
// jQuery UI
{
from: 'node_modules/jquery-ui-dist/',
to : 'plugins/jquery-ui'
},
// Flot
{
from: 'node_modules/flot/dist/es5/',
to : 'plugins/flot'
},
// Summernote
{
from: 'node_modules/summernote/dist/',
to : 'plugins/summernote'
},
// Bootstrap Slider
{
from: 'node_modules/bootstrap-slider/dist/',
to : 'plugins/bootstrap-slider'
},
{
from: 'node_modules/bootstrap-slider/dist/css',
to : 'plugins/bootstrap-slider/css'
},
// Bootstrap Colorpicker
{
from: 'node_modules/bootstrap-colorpicker/dist/js',
to : 'plugins/bootstrap-colorpicker/js'
},
{
from: 'node_modules/bootstrap-colorpicker/dist/css',
to : 'plugins/bootstrap-colorpicker/css'
},
// Tempusdominus Bootstrap 4
{
from: 'node_modules/tempusdominus-bootstrap-4/build/js',
to : 'plugins/tempusdominus-bootstrap-4/js'
},
{
from: 'node_modules/tempusdominus-bootstrap-4/build/css',
to : 'plugins/tempusdominus-bootstrap-4/css'
},
// Moment
{
from: 'node_modules/moment/min',
to : 'plugins/moment'
},
{
from: 'node_modules/moment/locale',
to : 'plugins/moment/locale'
},
// FastClick
{
from: 'node_modules/fastclick/lib',
to : 'plugins/fastclick'
},
// Date Range Picker
{
from: 'node_modules/daterangepicker/',
to : 'plugins/daterangepicker'
},
// DataTables
{
from: 'node_modules/pdfmake/build',
to: 'plugins/pdfmake'
},
{
from: 'node_modules/jszip/dist',
to: 'plugins/jszip'
},
{
from: 'node_modules/datatables.net/js',
to: 'plugins/datatables'
},
{
from: 'node_modules/datatables.net-bs4/js',
to: 'plugins/datatables-bs4/js'
},
{
from: 'node_modules/datatables.net-bs4/css',
to: 'plugins/datatables-bs4/css'
},
{
from: 'node_modules/datatables.net-autofill/js',
to: 'plugins/datatables-autofill/js'
},
{
from: 'node_modules/datatables.net-autofill-bs4/js',
to: 'plugins/datatables-autofill/js'
},
{
from: 'node_modules/datatables.net-autofill-bs4/css',
to: 'plugins/datatables-autofill/css'
},
{
from: 'node_modules/datatables.net-buttons/js',
to: 'plugins/datatables-buttons/js'
},
{
from: 'node_modules/datatables.net-buttons-bs4/js',
to: 'plugins/datatables-buttons/js'
},
{
from: 'node_modules/datatables.net-buttons-bs4/css',
to: 'plugins/datatables-buttons/css'
},
{
from: 'node_modules/datatables.net-colreorder/js',
to: 'plugins/datatables-colreorder/js'
},
{
from: 'node_modules/datatables.net-colreorder-bs4/js',
to: 'plugins/datatables-colreorder/js'
},
{
from: 'node_modules/datatables.net-colreorder-bs4/css',
to: 'plugins/datatables-colreorder/css'
},
{
from: 'node_modules/datatables.net-fixedcolumns/js',
to: 'plugins/datatables-fixedcolumns/js'
},
{
from: 'node_modules/datatables.net-fixedcolumns-bs4/js',
to: 'plugins/datatables-fixedcolumns/js'
},
{
from: 'node_modules/datatables.net-fixedcolumns-bs4/css',
to: 'plugins/datatables-fixedcolumns/css'
},
{
from: 'node_modules/datatables.net-fixedheader/js',
to: 'plugins/datatables-fixedheader/js'
},
{
from: 'node_modules/datatables.net-fixedheader-bs4/js',
to: 'plugins/datatables-fixedheader/js'
},
{
from: 'node_modules/datatables.net-fixedheader-bs4/css',
to: 'plugins/datatables-fixedheader/css'
},
{
from: 'node_modules/datatables.net-keytable/js',
to: 'plugins/datatables-keytable/js'
},
{
from: 'node_modules/datatables.net-keytable-bs4/js',
to: 'plugins/datatables-keytable/js'
},
{
from: 'node_modules/datatables.net-keytable-bs4/css',
to: 'plugins/datatables-keytable/css'
},
{
from: 'node_modules/datatables.net-responsive/js',
to: 'plugins/datatables-responsive/js'
},
{
from: 'node_modules/datatables.net-responsive-bs4/js',
to: 'plugins/datatables-responsive/js'
},
{
from: 'node_modules/datatables.net-responsive-bs4/css',
to: 'plugins/datatables-responsive/css'
},
{
from: 'node_modules/datatables.net-rowgroup/js',
to: 'plugins/datatables-rowgroup/js'
},
{
from: 'node_modules/datatables.net-rowgroup-bs4/js',
to: 'plugins/datatables-rowgroup/js'
},
{
from: 'node_modules/datatables.net-rowgroup-bs4/css',
to: 'plugins/datatables-rowgroup/css'
},
{
from: 'node_modules/datatables.net-rowreorder/js',
to: 'plugins/datatables-rowreorder/js'
},
{
from: 'node_modules/datatables.net-rowreorder-bs4/js',
to: 'plugins/datatables-rowreorder/js'
},
{
from: 'node_modules/datatables.net-rowreorder-bs4/css',
to: 'plugins/datatables-rowreorder/css'
},
{
from: 'node_modules/datatables.net-scroller/js',
to: 'plugins/datatables-scroller/js'
},
{
from: 'node_modules/datatables.net-scroller-bs4/js',
to: 'plugins/datatables-scroller/js'
},
{
from: 'node_modules/datatables.net-scroller-bs4/css',
to: 'plugins/datatables-scroller/css'
},
{
from: 'node_modules/datatables.net-select/js',
to: 'plugins/datatables-select/js'
},
{
from: 'node_modules/datatables.net-select-bs4/js',
to: 'plugins/datatables-select/js'
},
{
from: 'node_modules/datatables.net-select-bs4/css',
to: 'plugins/datatables-select/css'
},
// 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'
},
// icheck bootstrap
{
from: 'node_modules/icheck-bootstrap/',
to : 'plugins/icheck-bootstrap'
},
// inputmask
{
from: 'node_modules/inputmask/dist/',
to : 'plugins/inputmask'
},
// ion-rangeslider
{
from: 'node_modules/ion-rangeslider/',
to : 'plugins/ion-rangeslider'
},
// JQVMap (jqvmap-novulnerability)
{
from: 'node_modules/jqvmap-novulnerability/dist/',
to : 'plugins/jqvmap'
},
// jQuery Mapael
{
from: 'node_modules/jquery-mapael/js/',
to : 'plugins/jquery-mapael'
},
// Raphael
{
from: 'node_modules/raphael/',
to : 'plugins/raphael'
},
// jQuery Mousewheel
{
from: 'node_modules/jquery-mousewheel/',
to : 'plugins/jquery-mousewheel'
},
// jQuery Knob
{
from: 'node_modules/jquery-knob-chif/dist/',
to : 'plugins/jquery-knob'
},
// pace-progress
{
from: 'node_modules/@lgaitan/pace-progress/dist/',
to : 'plugins/pace-progress'
},
// Select2
{
from: 'node_modules/select2/dist/',
to : 'plugins/select2'
},
{
from: 'node_modules/@ttskch/select2-bootstrap4-theme/dist/',
to : 'plugins/select2-bootstrap4-theme'
},
// Sparklines
{
from: 'node_modules/sparklines/source/',
to : 'plugins/sparklines'
},
// SweetAlert2
{
from: 'node_modules/sweetalert2/dist/',
to : 'plugins/sweetalert2'
},
{
from: 'node_modules/@sweetalert2/theme-bootstrap-4/',
to : 'plugins/sweetalert2-theme-bootstrap-4'
},
// Toastr
{
from: 'node_modules/toastr/build/',
to : 'plugins/toastr'
},
// jsGrid
{
from: 'node_modules/jsgrid/dist',
to: 'plugins/jsgrid'
},
{
from: 'node_modules/jsgrid/demos/',
to: 'plugins/jsgrid/demos'
},
// flag-icon-css
{
from: 'node_modules/flag-icon-css/css',
to: 'plugins/flag-icon-css/css'
},
{
from: 'node_modules/flag-icon-css/flags',
to: 'plugins/flag-icon-css/flags'
},
// bootstrap4-duallistbox
{
from: 'node_modules/bootstrap4-duallistbox/dist',
to: 'plugins/bootstrap4-duallistbox/'
},
// filterizr
{
from: 'node_modules/filterizr/dist',
to: 'plugins/filterizr/'
},
// ekko-lightbox
{
from: 'node_modules/ekko-lightbox/dist',
to: 'plugins/ekko-lightbox/'
},
// bootstrap-switch
{
from: 'node_modules/bootstrap-switch/dist',
to: 'plugins/bootstrap-switch/'
},
// jQuery Validate
{
from: 'node_modules/jquery-validation/dist/',
to : 'plugins/jquery-validation'
},
// bs-custom-file-input
{
from: 'node_modules/bs-custom-file-input/dist/',
to : 'plugins/bs-custom-file-input'
},
]
module.exports = Plugins

View File

@@ -1,47 +0,0 @@
const Plugins = require('./Plugins')
const fse = require('fs-extra')
class Publish {
constructor() {
this.options = {
verbose: false
}
this.getArguments()
}
getArguments() {
if (process.argv.length > 2) {
let arg = process.argv[2]
switch (arg) {
case '-v':
case '--verbose':
this.options.verbose = true
break
default:
throw new Error(`Unknown option ${arg}`)
}
}
}
run() {
// Publish files
Plugins.forEach((module) => {
try {
if (fse.existsSync(module.from)) {
fse.copySync(module.from, module.to)
} else {
fse.copySync(module.from.replace('node_modules/', '../'), module.to)
}
if (this.options.verbose) {
console.log(`Copied ${module.from} to ${module.to}`)
}
} catch (err) {
console.error(`Error: ${err}`)
}
})
}
}
(new Publish()).run()

View File

@@ -1,20 +0,0 @@
/*!
* AdminLTE v 3.0.3
* 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 v 3.0.3
* 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 v 3.0.3
* 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 v 3.0.3
* 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 v 3.0.3
* 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';

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