Compare commits

...
327 Commits
Author SHA1 Message Date
Simba 856df5ebe3 change user search text. 2021-01-05 23:12:16 +08:00
Simba 82f5b016e5 transform class arrow function to class method function. 2021-01-05 22:53:30 +08:00
Simba 9e0cdfd167 transform matter pages class arrow function to class method function. 2021-01-04 23:08:16 +08:00
Simba 2c835ea42f v3.1.2 2021-01-04 22:08:36 +08:00
Simba 666783e11e upload cancel. 2021-01-04 22:06:27 +08:00
lishuang 2894434ae8 Refine the variable scope. 2021-01-04 22:06:27 +08:00
lishuang 2b28317a8f Fix the large file upload bug. 2021-01-04 22:06:27 +08:00
lishuang 31ce6dca15 Fix the upload bug. 2021-01-04 22:06:27 +08:00
Simba c9a5fee48a upload matters. 2021-01-04 22:06:27 +08:00
lishuang b31cd37109 Fix the sort bug. 2021-01-04 22:06:27 +08:00
Simba 8786e2b427 matter list sort. 2021-01-04 22:06:27 +08:00
Simba 87cce788a5 preference recycle bin zero keep-day setting. 2021-01-04 22:06:27 +08:00
Simba 8165c13128 change soft del and hard del order. 2021-01-04 22:06:27 +08:00
Simba b7f4d87236 add scan immediately. 2021-01-04 22:06:27 +08:00
Simba 91ffc11b90 a little optimization. 2021-01-04 22:06:27 +08:00
Simba e2ad3d1caf matter list delete option soft or hard. 2021-01-04 22:06:27 +08:00
Simba 9bd725fc8e upload matter promote to global. 2021-01-02 14:37:13 +08:00
Simba affd0d0325 all-files menu navigate to all files index. 2021-01-02 14:05:21 +08:00
Simba b9402649c6 user role can not update sizeLimit and totalSizeLimit by self. 2021-01-02 13:47:56 +08:00
Simba 02298f9361 remove js-cookie. 2020-12-09 23:41:01 +08:00
Simba f698bdd6b0 mobile initial hide menu. 2020-11-26 23:24:43 +08:00
Simba ef85fda048 change version 2020-09-16 09:13:37 +08:00
Simba 27816d9303 release 3.1.1 2020-09-08 00:22:26 +08:00
Simba 52189867ea del useless component 2020-09-08 00:11:53 +08:00
Simba c127440207 declare dom file type 2020-09-08 00:03:52 +08:00
Simba d856e81c5f del upload directory tooltip 2020-09-07 23:55:46 +08:00
lishuang 36d4c81dd5 Rm the testing lib. 2020-09-07 23:52:31 +08:00
Simba 254bde20b9 change file type 2020-09-07 23:23:38 +08:00
Simba 153270fe9a fix share detail page refresh login 2020-09-06 15:32:19 +08:00
Simba 9fa6462bcd fix unlogin user open share file 2020-09-06 14:30:57 +08:00
Simba bb16ed3b21 support upload directory 2020-09-06 01:41:35 +08:00
Simba 32c881a875 update share detail responsive 2020-07-27 22:35:56 +08:00
Simba 5859dd5113 feat: share matter login not required 2020-07-26 21:45:24 +08:00
eyeblue 214b34ed28 Update SideLayout.tsx
Rm a import.
2020-07-21 10:40:54 +08:00
eyeblue ab7c915140 Update package.json
Fix the antd version.
2020-07-21 10:40:07 +08:00
Simba 0e8c223cfa add readme 2020-07-18 16:29:47 +08:00
lishuang e1838a5fac Fix the display for url. 2020-07-18 15:16:06 +08:00
Simba 813e9c9ae3 preference previewEngine default url 2020-07-18 15:14:04 +08:00
Simba 7bddd1e1c8 matter recovery 2020-07-18 15:04:48 +08:00
lishuang 392fd860f2 Fix the useless console log feature. 2020-07-18 14:52:39 +08:00
Simba 17a674d956 change bin list 2020-07-18 14:42:25 +08:00
lishuang 71bc7ebe8e Fix some style for about modal. 2020-07-18 14:40:17 +08:00
lishuang 18db3f5cae Fix some details. 2020-07-16 02:00:52 +08:00
Simba 9901920bc7 add recovery matter 2020-07-15 09:22:32 +08:00
Simba 0296d2f345 add recycle bin list 2020-07-14 23:08:31 +08:00
lishuang d880fc0487 Fix the share root uuid. 2020-07-12 23:32:31 +08:00
lishuang 058498093a Change the dashboard color. 2020-07-12 23:13:53 +08:00
lishuang 2ac3e24e7a Fix the response feature. 2020-07-12 23:10:59 +08:00
Simba f7f0351505 fix share detail preview and download problem 2020-07-12 23:09:53 +08:00
lishuang 8b9b6f6bd4 Fix the preview engine. 2020-07-12 22:08:55 +08:00
lishuang 4bcc3555ca Fix the share empty hint. 2020-07-12 21:49:49 +08:00
Simba e003175a02 preference add deletedKeepDays 2020-07-12 18:33:01 +08:00
Simba 46db40780a add default preview engines 2020-07-12 17:39:18 +08:00
lishuang 5b5f0d05c4 Fix the data error for dashboard. 2020-07-12 16:31:21 +08:00
Simba 93691bdb4f fix scan edit problem 2020-07-12 15:26:32 +08:00
Simba 00429b1f73 preference scan edit complete 2020-07-12 01:59:32 +08:00
lishuang b0029661e0 No longer need eslint. 2020-07-12 00:08:32 +08:00
lishuang 5325637deb Remove the service worker. 2020-07-12 00:06:15 +08:00
lishuang aee4a75428 Remove the service worker. 2020-07-12 00:02:47 +08:00
lishuang 820801af20 Add a field into matter. 2020-07-11 23:59:13 +08:00
lishuang e60cbd853f Finish the dashboard feature. 2020-07-11 22:16:10 +08:00
lishuang e61ff77284 Fix the lang time. 2020-07-11 21:58:51 +08:00
lishuang 4ec3c9f9ab Change some styles for the matter detail page. 2020-07-11 21:16:09 +08:00
Simba 202f6e54b7 preview engine 2020-07-11 21:07:13 +08:00
lishuang c3c5adffd7 Add etl feature. 2020-07-11 21:05:32 +08:00
Simba 7ff2e70853 fix user detail style problem 2020-07-11 18:06:33 +08:00
Simba 9981b2f56d Merge branch 'master' of github.com:eyebluecn/tank-front 2020-07-11 17:42:19 +08:00
Simba cbc1cbe9f4 add mobile user list 2020-07-11 17:42:08 +08:00
lishuang 99eca5420e Add the physic. 2020-07-11 17:38:56 +08:00
Simba eb072dc5a9 matter list refresh code upgrade 2020-07-02 18:51:37 +08:00
Simba 14bf34fbc6 use template string instead of common string 2020-07-01 17:38:44 +08:00
Simba 5d6d11aa7d add webpack theme change and dynamic antd style import 2020-07-01 15:16:26 +08:00
Simba ec90f66d94 add polyfill 2020-06-30 15:35:42 +08:00
Simba 7d8e245e14 fix a breadcrumb bug 2020-06-24 00:49:37 +08:00
Simba 65456dfccc some internationalization 2020-06-24 00:08:29 +08:00
Simba 7bfc98a0ff add about modal 2020-06-23 23:58:57 +08:00
Simba 061ade451a fix a share bug 2020-06-21 21:39:53 +08:00
Simba 85810b5767 preference engines style 2020-06-21 21:23:12 +08:00
Simba 7bb3d6fe3b preference engines internationalization 2020-06-21 20:46:22 +08:00
Simba 3b7da44cc7 preference index engines 2020-06-21 19:34:16 +08:00
lishuang 9d8d3d35da Remove some useless things. 2020-06-21 18:06:18 +08:00
lishuang 62466ff1d4 Add the url remark. 2020-06-21 17:38:03 +08:00
lishuang 8e9ee8df71 Finish the preview. 2020-06-21 17:32:11 +08:00
lishuang 08f5a9f186 Finish the preview. 2020-06-21 17:21:14 +08:00
Simba 49413436c1 batch move style 2020-06-21 16:10:59 +08:00
Simba 6afbc93199 add infoCell 2020-06-21 15:01:41 +08:00
Simba 41b5b44403 add some icon 2020-06-21 14:09:25 +08:00
lishuang b34f66ad8c Finish the Rough preview engine feature. 2020-06-21 03:33:27 +08:00
lishuang 1d8eb74ba7 Ready to reuse the Form.Item. 2020-06-21 03:13:04 +08:00
Simba 0dc139c087 matter and share tooltips 2020-06-21 02:51:24 +08:00
lishuang 92eb82e207 Add the preview config and engine model. 2020-06-21 02:41:36 +08:00
Simba 2f76483d05 matter and share internationalization 2020-06-21 02:20:48 +08:00
Simba 3ae906b07e drag matter complete 2020-06-21 01:02:59 +08:00
lishuang e41ae5e5b5 Finish the System cleanup feature. 2020-06-21 00:12:29 +08:00
lishuang 43ab1290f5 Finish the user delete feature. 2020-06-21 00:04:43 +08:00
lishuang 13a3020633 Finish the Breadcrumb panel. 2020-06-20 21:26:43 +08:00
Simba 9e505f2003 matter image 2020-06-20 21:25:38 +08:00
lishuang 7803fd0dba Finish the Breadcrumb feature for all files. 2020-06-20 21:10:01 +08:00
lishuang 7f9425fc61 Reformat the matter List view. 2020-06-20 20:27:05 +08:00
lishuang dc377984ff Finish the I18N work for install module. 2020-06-20 18:13:35 +08:00
lishuang 057feb28e2 Refine the Lang module. 2020-06-20 17:40:46 +08:00
lishuang 5681238cd0 Ready to migrate lang from Moon to Lang. 2020-06-20 17:35:21 +08:00
lishuang 43f3712f54 Finish the i18n for user model. 2020-06-20 17:28:28 +08:00
Simba 736d0120b7 share detail complete 2020-06-20 17:13:12 +08:00
lishuang 5483b99376 Finish the i18n work for preference and dashboard. 2020-06-20 16:18:31 +08:00
lishuang f13543c54e Add the i18n frame. 2020-06-20 15:17:47 +08:00
lishuang 00a9e71de9 Ready to refine the global i18n feature. 2020-06-20 14:11:22 +08:00
lishuang f058642d69 Fix the copyright and record feature. 2020-06-20 13:46:40 +08:00
lishuang 7fd650024e Fix the responsive feature for the Layout. 2020-06-20 01:52:19 +08:00
lishuang edc6c9c562 Finish the rough frame layout. 2020-06-20 01:37:42 +08:00
lishuang 65b8de8db0 Finish the main layout. 2020-06-20 01:10:24 +08:00
lishuang eada6b5005 Ready to refine the whole frame. 2020-06-20 00:30:16 +08:00
lishuang bb397d0639 Fix the log and favicon feature. 2020-06-20 00:05:31 +08:00
Simba 86852f6714 matter list share 2020-06-19 23:35:39 +08:00
Simba 7b1af51fe6 share operation alpha 2020-06-19 17:59:52 +08:00
simba 61746f5ebf test github account 2020-06-19 10:08:44 +08:00
Simba 231d89ae5c complete share list 2020-06-18 23:58:13 +08:00
Simba a1fb2f9ba5 use sun global router 2020-06-18 22:42:27 +08:00
simba 9782fd929a share components begin 2020-06-18 18:39:49 +08:00
simba d0dab0894c mobile matter detail cache handles expanding 2020-06-17 11:57:25 +08:00
Simba 422f716d36 use velocity-react instead of cssTransitionGroup and velocity-animate 2020-06-17 09:28:19 +08:00
simba 1fa200e0fd mobile matter list handles expanding 2020-06-16 18:19:21 +08:00
Simba c83edd2209 matter list mobile handles visible without transition 2020-06-16 00:10:50 +08:00
Simba 328946944d download token 2020-06-15 21:32:29 +08:00
simba 700a2eff60 share model 2020-06-15 18:18:02 +08:00
Simba 8871c7873d matter detail 2020-06-14 18:29:18 +08:00
Simba 47faafa27d complete file page 2020-06-13 21:06:07 +08:00
Simba f0aac156a2 search file 2020-06-13 16:53:04 +08:00
Simba 148a0052e3 complete move batch 2020-06-13 16:33:42 +08:00
Simba 68d6fa0176 alpha move batch 2020-06-13 01:06:17 +08:00
lishuang cc8d2c8729 Finis the preview feature. 2020-06-13 00:44:56 +08:00
lishuang 34ef6e4ec9 Finish the pdf preview. 2020-06-13 00:35:34 +08:00
Simba 3c97f38c5e prepare batchMove 2020-06-12 08:56:09 +08:00
simba 750478036c change native button to Button 2020-06-11 18:15:24 +08:00
simba 9a0f787484 use launchUpload with reactComponent 2020-06-10 17:06:26 +08:00
Simba 9e99a5f30a complete file upload progress 2020-06-10 00:17:46 +08:00
Simba f471691292 complete file upload 2020-06-08 23:07:35 +08:00
lishuang dd20af4c19 Finish all the work for installing. 2020-06-07 22:16:31 +08:00
lishuang 3902a657ee Finish the Install UI. 2020-06-07 21:58:53 +08:00
lishuang 84cfc03d29 Add a line. 2020-06-07 21:37:46 +08:00
lishuang af41bbe7a3 Finish the first install pipeline work. 2020-06-07 21:29:18 +08:00
Simba ea4c9428a1 Merge remote-tracking branch 'origin/react-refine' into react-refine 2020-06-07 21:28:24 +08:00
Simba 328bc4c712 matter list some function complete 2020-06-07 21:28:00 +08:00
lishuang 17b4dbb191 Finish the separate work for SetAdmin panel. 2020-06-07 21:02:18 +08:00
lishuang 7569ca9c87 Finish all the feature of CreateTablePanel. 2020-06-07 20:14:12 +08:00
lishuang 754c86a7c5 Finish the MysqlPanel. 2020-06-07 19:36:20 +08:00
lishuang 023bb4a3a1 Add tabs for install. 2020-06-07 17:56:42 +08:00
lishuang 16adebaebf Add the frame for install. 2020-06-07 17:43:02 +08:00
lishuang 7ae8dd128f Refine the MessageBox usage. 2020-06-07 17:20:47 +08:00
lishuang e9863403fe Ready to do the install work. 2020-06-07 17:00:31 +08:00
Simba 260462465e matter goto directory 2020-06-07 16:55:39 +08:00
lishuang de63f1e3d4 Add the dashboard hint. 2020-06-07 16:36:59 +08:00
lishuang 33b48e0e2d Finish all the dashboard view. 2020-06-07 16:33:29 +08:00
lishuang d62192fa39 Finish the card and line charts. 2020-06-07 16:19:48 +08:00
lishuang 62c183470a Import the echarts. Ready to combine the dashboard data. 2020-06-07 16:00:19 +08:00
lishuang 3819c8e24e Add the card dashboard feature. 2020-06-07 15:37:58 +08:00
lishuang cca1a55647 Add placeholder of Dashboard. Add ImagePreviewer. 2020-06-07 15:19:58 +08:00
lishuang a4ae20f458 Finish all the UserList feature. 2020-06-07 14:33:04 +08:00
lishuang 7009d94648 Finish the ImagePreviewer module. 2020-06-07 00:54:59 +08:00
lishuang d227d231db Fix the user/detail page. Add the Authentication login method. 2020-06-07 00:46:39 +08:00
Simba b8cd2e5d4d matter simple handle complete 2020-06-07 00:24:17 +08:00
lishuang 422b5bda20 Finish the transfiguration feature. 2020-06-07 00:23:15 +08:00
lishuang 5f0455c676 Add the change password and reset password feature. 2020-06-07 00:11:50 +08:00
Simba e4b9e58a41 add rename matter 2020-06-06 23:43:04 +08:00
lishuang 8babfa9d67 Add the User Detail page. 2020-06-06 21:59:18 +08:00
lishuang 30b2a5ba09 Finish the Image Resize feature. 2020-06-06 21:31:33 +08:00
Simba 290eab243b feat: axios return promise 2020-06-06 21:18:46 +08:00
lishuang 9bab8765c4 Try to use the old html. 2020-06-06 21:13:27 +08:00
Simba e3d34dde82 some matter change 2020-06-06 19:22:21 +08:00
lishuang 3e9533a624 Ready to add the UserDetail page. 2020-06-06 19:04:11 +08:00
lishuang 41df6e08ed Finish the create feature of user. 2020-06-06 18:54:53 +08:00
lishuang 3e0fe86a4b Add the Edit. 2020-06-06 18:22:41 +08:00
lishuang 469d3d93f9 Finish the rough feature of PreferenceForm. 2020-06-06 17:13:06 +08:00
lishuang d07a7d229c Refine the form of Preference. 2020-06-06 17:04:35 +08:00
Simba 2eddd832e8 add matter model 2020-06-06 15:08:08 +08:00
lishuang c7ffa53463 Change the images. 2020-06-06 14:52:14 +08:00
lishuang be436f6679 Add the UserList. 2020-06-06 14:39:12 +08:00
lishuang 8e17ad1c5f Finish the Preference Index and Edit page. 2020-06-06 14:26:35 +08:00
lishuang 622b8129fb Finish the Preference index page. 2020-06-06 14:06:28 +08:00
lishuang b8599d15d0 Fix the crash error. 2020-06-06 12:20:41 +08:00
Simba 2fa3fca071 fix some problems 2020-06-06 12:17:05 +08:00
lishuang a67e0e1e23 Refine some golbal. 2020-06-06 12:07:46 +08:00
Simba 67ace29f28 add some utils 2020-06-06 12:06:07 +08:00
lishuang 31011d65ed Change Bamboo to Tank. 2020-06-06 11:57:14 +08:00
lishuang f9ed88b84f Add the placeholder for preference. 2020-06-06 11:49:44 +08:00
lishuang 7bf0fc6c77 Finish the login page. 2020-06-06 01:07:59 +08:00
lishuang 5b7d29de4d Finish the Login page. 2020-06-06 00:51:11 +08:00
lishuang bc01b42182 Use TankComponent. 2020-06-06 00:33:45 +08:00
lishuang 9ca77eb501 Find reactComponent back. 2020-06-06 00:33:13 +08:00
lishuang 36a890ceb4 Add the feature. 2020-06-06 00:24:22 +08:00
lishuang 232c63af60 Remove the reactComponent. 2020-06-06 00:20:11 +08:00
Simba 686ff1dcde transfer some dependency to devDenpendency 2020-06-06 00:18:20 +08:00
lishuang 7bad1db7e6 Commit the matter. 2020-06-06 00:05:24 +08:00
lishuang 3a2a5bab2a Add the main frame. 2020-06-06 00:04:03 +08:00
lishuang ddbc94e854 Change the port. 2020-06-05 23:45:01 +08:00
lishuang 7332a1807d add the bamboo demo 2020-06-05 23:26:14 +08:00
lishuang 03bb3f4881 Finish the first version of tank from bamboo. 2020-06-05 23:21:18 +08:00
lishuang 397cc7af58 Remove the jest tests. Add the support for less. Keep the class name. Add antd. 2020-06-05 22:47:36 +08:00
lishuang 2afa8c6f0f run eject 2020-06-05 22:31:58 +08:00
lishuang 9894b3196f Let's refine tank by react+antd. 2020-06-05 22:26:59 +08:00
lishuang 094d6961e2 Add the custom api for office preview. 2020-05-09 02:20:49 +08:00
lishuang 4e5796159f Finish the charset for mysql. 2020-05-06 02:21:29 +08:00
zicla 2409817980 Remove the package-lock.json 2020-03-11 00:52:42 +08:00
eyeblue 641830255f Merge pull request #20 from eyebluecn/dependabot/npm_and_yarn/mixin-deep-1.3.2
Bump mixin-deep from 1.3.1 to 1.3.2
2020-03-11 00:46:50 +08:00
eyeblue 347598abac Merge pull request #21 from eyebluecn/dependabot/npm_and_yarn/lodash.defaultsdeep-4.6.1
Bump lodash.defaultsdeep from 4.6.0 to 4.6.1
2020-03-11 00:46:32 +08:00
dependabot[bot] f010f8a709 Bump lodash.defaultsdeep from 4.6.0 to 4.6.1
Bumps [lodash.defaultsdeep](https://github.com/lodash/lodash) from 4.6.0 to 4.6.1.
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.6.0...4.6.1)

Signed-off-by: dependabot[bot] <support@github.com>
2020-03-10 16:46:14 +00:00
eyeblue 26f6e00d15 Merge pull request #22 from eyebluecn/dependabot/npm_and_yarn/lodash-4.17.15
Bump lodash from 4.17.11 to 4.17.15
2020-03-11 00:45:10 +08:00
dependabot[bot] 8720c172b0 Bump lodash from 4.17.11 to 4.17.15
Bumps [lodash](https://github.com/lodash/lodash) from 4.17.11 to 4.17.15.
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.11...4.17.15)

Signed-off-by: dependabot[bot] <support@github.com>
2020-03-10 16:44:36 +00:00
dependabot[bot] 4922ba1082 Bump mixin-deep from 1.3.1 to 1.3.2
Bumps [mixin-deep](https://github.com/jonschlinkert/mixin-deep) from 1.3.1 to 1.3.2.
- [Release notes](https://github.com/jonschlinkert/mixin-deep/releases)
- [Commits](https://github.com/jonschlinkert/mixin-deep/compare/1.3.1...1.3.2)

Signed-off-by: dependabot[bot] <support@github.com>
2020-03-10 16:44:18 +00:00
zicla 24d91ae7cc Merge remote-tracking branch 'origin/feat-compress-code' 2020-03-11 00:44:00 +08:00
eyeblue 3f6fcd408e Merge pull request #17 from eyebluecn/dependabot/npm_and_yarn/eslint-utils-1.4.3
Bump eslint-utils from 1.3.1 to 1.4.3
2020-03-11 00:41:21 +08:00
simba 643bd8ee80 feat: compress build code. 2019-11-19 18:20:20 +08:00
eyeblue d8195aede5 Merge pull request #16 from eyebluecn/fix-search
fix: some search problems.
2019-11-18 21:20:26 +08:00
simba 88a7f64510 feat: add web folder copy link. 2019-11-18 21:14:18 +08:00
dependabot[bot] 4884b953ce Bump eslint-utils from 1.3.1 to 1.4.3
Bumps [eslint-utils](https://github.com/mysticatea/eslint-utils) from 1.3.1 to 1.4.3.
- [Release notes](https://github.com/mysticatea/eslint-utils/releases)
- [Commits](https://github.com/mysticatea/eslint-utils/compare/v1.3.1...v1.4.3)

Signed-off-by: dependabot[bot] <support@github.com>
2019-11-02 22:37:29 +00:00
simba d85dd443e0 fix: some search problems. 2019-10-18 22:35:42 +08:00
zicla 76255dc098 Release 3.0.6 2019-10-13 16:59:03 +08:00
simba aab1d1b48d fix: keyword search. 2019-10-11 22:15:05 +08:00
simba a6b8643941 feat: delete useless code. 2019-09-04 22:50:17 +08:00
simba dd99108afd feat: update drag file icon. 2019-09-04 22:13:56 +08:00
eyeblue 23f7c50106 Merge pull request #14 from eyebluecn/feat-drop-exquiste
Accept.
2019-08-31 22:53:19 +08:00
simba 55da380795 feat: add drag file background. 2019-08-31 21:44:50 +08:00
eyeblue 912536c620 Merge pull request #13 from eyebluecn/feat-drag-file
Accept. This feature will release on 3.1.0
2019-08-29 00:08:00 +08:00
simba 73e4670f8b feat: format code. 2019-08-28 23:50:36 +08:00
simba 9e7c2cbf5a feat: add drop file without format. 2019-08-28 09:12:34 +08:00
simba 9dbb8d4001 feat: update category. 2019-08-24 22:24:08 +08:00
simba 56b39b698d feat: adjust views. 2019-08-24 18:25:47 +08:00
eyeblue 2f545a343f Merge pull request #10 from eyebluecn/feat-update-category
Accept feat: adjust category and views
2019-08-24 17:53:16 +08:00
simba 28eb0a01bd feat: adjust views. 2019-08-24 17:22:12 +08:00
simba ebe2651ce8 feat: adjust category. 2019-08-24 16:58:37 +08:00
zicla 91eb8485f3 Fix the static path issue. 2019-06-11 01:13:47 +08:00
zicla 9fd02b75a8 Ready to release 3.0.4 2019-06-11 01:01:40 +08:00
zicla b355245a9c Update some Words. 2019-06-06 02:32:22 +08:00
zicla a24c8f66a5 Add the feature of creating user. 2019-06-04 02:39:24 +08:00
zicla b42bbe1206 Ready to release 3.0.3 2019-05-31 03:05:54 +08:00
zicla 9d011ae992 Fix some i18n bug. 2019-05-31 02:58:03 +08:00
zicla 4807ea1d21 Add the doc link. 2019-05-29 02:53:04 +08:00
zicla ce9b721ebc Try to release 3.0.2 2019-05-27 00:36:47 +08:00
zicla 67fca9e181 Fix the move bug. 2019-05-27 00:07:27 +08:00
simba 954c59c3f8 update some UI 2019-05-25 17:57:04 +08:00
simba 434453cee5 fix a mobile display bug,that will cause component do not redraw 2019-05-25 14:36:25 +08:00
zicla 24e8634af6 Fix the title for docs and project. 2019-05-24 16:09:16 +08:00
zicla 70eb01366e Ready to release 3.0.0 2019-05-23 03:00:41 +08:00
zicla 74a5d9c5fd Merge remote-tracking branch 'origin/master'
# Conflicts:
#	build/webpack.base.conf.js
2019-05-23 02:59:16 +08:00
zicla e9a820c520 Try to release 3.0.0 version. 2019-05-23 01:41:10 +08:00
zicla 9407bd2a18 Fix some i18n issue. 2019-05-23 01:39:50 +08:00
zicla 9cc097052a Fix a UI style. 2019-05-21 21:13:38 +08:00
zicla fd0d35c8d9 Change the prefix. 2019-05-21 03:32:39 +08:00
zicla 20d048501f Release 3.0.0.beta4. 2019-05-20 03:11:11 +08:00
zicla bda9e35666 Finish all the i18n things. 2019-05-20 00:38:52 +08:00
zicla 8a99f3b518 Fix the bug of i18n in preview panel. 2019-05-17 15:27:27 +08:00
zicla 33c84a8755 Upgrade the vue framework. 2019-05-17 02:45:46 +08:00
zicla 20fb208307 Finish half of i18n work. Ready to release 3.0.0.beta3 2019-05-10 02:57:00 +08:00
zicla b71ccf3971 Finish half of i18n work. 2019-05-09 01:59:06 +08:00
zicla f85083b94a pack 3.0.0.beta2. 2019-05-07 02:19:03 +08:00
zicla d4149e6c3c Fix some bug. 2019-05-07 01:33:59 +08:00
zicla 4496015f25 Remove the useless style. 2019-05-07 00:28:27 +08:00
zicla 8a67016f6e Update version. 2019-05-05 11:13:01 +08:00
zicla 30bf6eddb1 Finish the transfiguration feature. 2019-05-04 03:24:44 +08:00
zicla d6df67b5ec Refine the user model. 2019-05-04 02:35:03 +08:00
zicla c7008edeb0 Refine the user model. 2019-05-04 01:24:10 +08:00
zicla 1630b40b88 Remove some pngs. 2019-05-01 21:48:07 +08:00
zicla 66ee627ae3 Finish the archive download feature. 2019-05-01 19:53:55 +08:00
zicla 50c78d81da Ready to add the preview and download feature in the share bar. 2019-05-01 03:05:06 +08:00
zicla c0df04a108 Try to add the download things. 2019-05-01 01:44:46 +08:00
zicla 0e68a364d2 Ready to abstract the copy codes. 2019-04-30 23:56:21 +08:00
zicla 30422d2a02 Try to abstract the ShareDialogPanel. 2019-04-30 23:42:43 +08:00
赋苏 68841881ac Go for 5.1 now. 2019-04-30 18:43:59 +08:00
zicla b913dbe007 Finish the UI of share. 2019-04-30 03:35:43 +08:00
赋苏 676488208a Finish the feature of Share and Bridge. 2019-04-29 21:15:05 +08:00
zicla 778d0f8884 Change something in Preference. 2019-04-29 02:42:33 +08:00
赋苏 aa8ede1f75 Fix some detail bugs. 2019-04-28 22:30:00 +08:00
zicla f2eed257ba Reformat. 2019-04-18 02:40:53 +08:00
zicla c83253f476 Change some detail for ImageCache. 2019-04-10 02:00:36 +08:00
zicla 0111c3c49a Add the system cleaup feature. 2019-04-04 03:19:45 +08:00
zicla 946f4c5dc3 Fix the avatar upload things. 2019-04-02 02:42:37 +08:00
zicla 2dcd263417 Revert to the normal version. 2019-04-01 01:55:23 +08:00
seaheart c6435fc123 性能优化,路由懒加载 2019-03-22 00:16:06 +08:00
seaheart 9ab8700027 性能优化,路由懒加载 2019-03-22 00:14:48 +08:00
赋苏 35a7b693ec Fix the resize-detector. 2019-03-21 11:35:05 +08:00
zicla 9e1300c6da kick off v3 2019-03-01 01:09:06 +08:00
赋苏 1e56eb95ae release 2.0.0 2019-01-07 17:40:45 +08:00
zicla 9f2aa111e1 Change a dashboard word. 2018-12-27 02:17:37 +08:00
zicla 9ad16b9c7b Support Mysql 5.5. Support file upload with interrupt. Support config showAlien. 2018-12-27 01:38:35 +08:00
zicla 2c810700f9 Fix a dashboard bug. 2018-12-18 02:25:28 +08:00
zicla 8d426de0c1 Fix some UI bugs. 2018-12-18 01:29:23 +08:00
zicla 1a3c0ed00c Fix the max size bug. 2018-12-13 23:49:50 +08:00
zicla 27e77b9a6f Fix a lot of UI things. 2018-12-07 19:33:48 +08:00
zicla defc4a0ee4 Add the search feature. 2018-12-06 21:38:40 +08:00
zicla 337fb74432 Fix a detail things. 2018-12-06 20:10:39 +08:00
zicla 632d5516f8 Finish the install procedure. 2018-12-06 19:26:35 +08:00
zicla 7e13532a5f Finish the create table of install. 2018-12-05 21:21:28 +08:00
zicla 747ee00bb6 Add the frame of install. 2018-12-04 21:35:14 +08:00
zicla d511e52b56 Add the frame of install things. 2018-12-03 21:21:09 +08:00
zicla 0eb1ad72c6 Fix the ppt icon. 2018-12-03 02:41:56 +08:00
zicla 70f5fca2e7 Fix the preview bug for office file. 2018-12-03 02:28:37 +08:00
zicla 0c4c7fa40d Finish all the things of matter detail. 2018-12-02 23:09:16 +08:00
zicla 1ff18d3779 Fix some detail for display. 2018-12-02 21:11:53 +08:00
zicla 393aabe8bf Finish the page of dashboard. 2018-12-02 20:27:53 +08:00
zicla 65c32463b1 Add the placeholder for dashboard. 2018-12-01 22:22:29 +08:00
zicla bfb135ac6d Add the custom theme for echart. 2018-12-01 17:40:54 +08:00
zicla de193d6036 Finish the framework for dashboard. 2018-12-01 04:02:24 +08:00
zicla 55d46c8e02 Add the hint for cannot preview. 2018-11-27 21:31:03 +08:00
zicla 0598a2de6d Finish the preview things. 2018-11-27 20:57:55 +08:00
zicla 9c736d9406 Add the office preview things. 2018-11-27 15:40:29 +08:00
zicla ac249369bd refine avatar url. 2018-11-26 21:26:42 +08:00
zicla c0813a302e Add the matter panel things. 2018-11-26 21:19:14 +08:00
zicla ba4b10ddd8 Add text preview widget. 2018-11-26 20:51:48 +08:00
zicla a57d33f414 Finish the Pdf Preview things. 2018-11-26 20:22:11 +08:00
zicla 73d716d408 Add the image cache things. 2018-11-26 16:36:53 +08:00
zicla 777443f4a2 Refine the photo swipe plugin things. 2018-11-26 16:12:48 +08:00
zicla a17ad46355 Add image preview plugin. 2018-11-26 15:49:56 +08:00
zicla 3cccfd71b0 Add the UI for image cache. 2018-11-26 14:46:42 +08:00
zicla a2ddc7968f Add the image cache panel. 2018-11-26 13:04:07 +08:00
zicla 87ec0db454 Ready to write image cache panel. 2018-11-26 12:35:45 +08:00
zicla 44b8fe54a9 Add the image cache things. 2018-11-23 21:27:24 +08:00
zicla c9c02af2c0 Update the framework of front. 2018-11-23 20:00:38 +08:00
zicla 61f212d94b Ready to release v1.0.5 2018-07-26 00:10:37 +08:00
zicla ce7bda5aca Release 1.0.4 2018-07-03 16:02:30 +08:00
zicla de662b1987 Release 1.0.3. 2018-04-12 17:54:06 +08:00
zicla e8d6f8398c Change the config of building. 2018-04-10 18:32:12 +08:00
hxsherry 42818e5ce9 Fix the active bug when refreshing. 2018-02-09 00:23:48 +08:00
zicla b319a77e67 Fix the Upper and Lower Case bug in the suffix. 2018-02-08 13:34:18 +08:00
zicla dfd7595f6a Better the readme file. 2018-01-26 17:15:41 +08:00
hxsherry f064e4b8bc Fix the issue of cannot get function name in IE. 2018-01-24 22:00:19 +08:00
hxsherry 5f941f132c Remove the useless one2one. 2018-01-22 01:11:48 +08:00
hxsherry 5dbe04568e Fix the logoPath bug. 2018-01-19 14:56:26 +08:00
383 changed files with 21947 additions and 18291 deletions
-18
View File
@@ -1,18 +0,0 @@
{
"presets": [
["env", {
"modules": false,
"targets": {
"browsers": ["> 1%", "last 2 versions", "not ie <= 8"]
}
}],
"stage-2"
],
"plugins": ["transform-runtime"],
"env": {
"test": {
"presets": ["env", "stage-2"],
"plugins": ["istanbul"]
}
}
}
+6
View File
@@ -7,3 +7,9 @@ indent_size = 2
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
[*.{js,jsx,ts,tsx,vue}]
indent_style = space
indent_size = 2
trim_trailing_whitespace = true
insert_final_newline = true
-8
View File
@@ -1,8 +0,0 @@
/build/
/config/
/dist/
/static/
/*.js
src/common/fork/*
-65
View File
@@ -1,65 +0,0 @@
// https://eslint.org/docs/user-guide/configuring
module.exports = {
root: true,
parser: 'babel-eslint',
parserOptions: {
sourceType: 'module'
},
env: {
browser: true,
},
// https://github.com/standard/standard/blob/master/docs/RULES-en.md
extends: 'standard',
// required to lint *.vue files
plugins: [
'html'
],
// add your custom rules here
'rules': {
// allow paren-less arrow functions
'arrow-parens': 0,
// allow async-await
'generator-star-spacing': 0,
// allow debugger during development
'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0,
//ignore the paren check before function.
'space-before-function-paren': [0, 'always'],
//ignore the space before block.
'space-before-blocks': [0, 'always'],
//ignore the empty line check.
'no-multiple-empty-lines': [0, {'max': 2}],
//semicolon or no semicolon is ok.
'semi': [0, 'always'],
//ignore the space before or after =>
'arrow-spacing': 0,
//the type of quotes
'quotes': [0, 'single'],
//block can be padded by blank lines
'padded-blocks': 0,
//comma spacing before or after.
'comma-spacing': 0,
//key spacing.
'key-spacing': [0, {'beforeColon': false, 'afterColon': true}],
//trailing spaces
'no-trailing-spaces': 0,
//spaced comment
'spaced-comment': 0,
//keyword-spacing
'keyword-spacing': 0,
'space-in-parens': 0,
'no-extend-native': 0,
'no-useless-escape': 0,
'no-unused-vars': 0,
'no-undef': 0,
'no-tabs': 0,
'indent': 0,
'no-multi-spaces': 0,
'eol-last': 0,
'no-template-curly-in-string': 0,
'no-mixed-spaces-and-tabs': 0,
'handle-callback-err': 0,
"import/no-webpack-loader-syntax": "off"
}
}
+24 -2
View File
@@ -1,9 +1,27 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
# dependencies
/node_modules
/.pnp
.pnp.js
# testing
/coverage
# production
/build
# misc
.DS_Store
node_modules/
/dist/
.env.local
.env.development.local
.env.test.local
.env.production.local
npm-debug.log*
yarn-debug.log*
yarn-error.log*
yarn.lock
# Editor directories and files
.idea
@@ -12,3 +30,7 @@ yarn-error.log*
*.ntvs*
*.njsproj
*.sln
draft.html
report.*.json
draft.txt
-8
View File
@@ -1,8 +0,0 @@
// https://github.com/michael-ciniawsky/postcss-load-config
module.exports = {
"plugins": {
// to edit target browsers: use "browserslist" field in package.json
"autoprefixer": {}
}
}
-38
View File
@@ -1,38 +0,0 @@
# 蓝眼云盘
## 注意事项
每次版本升级时需要修改以下内容。
1. build/pack/build.bat
set VERSION_NAME=tank-x.x.x
2. build/pack/build.sh
VERSION_NAME=tank-x.x.x
3. rest/config.go
VERSION = x.x.x
4. tank-front 修改 vuex/index.js
versionName: 'x.x.x'
2018-01-19
tank-1.0.2
1. 修复了下载时无法估算文件大小的bug,header头重添加了Content-Type. [#2](https://github.com/eyebluecn/tank/issues/2)
2. 修复了移动端样式混乱的问题.[#3](https://github.com/eyebluecn/tank/issues/3)
3. 修复了文夹层数无上限的bug. [#4](https://github.com/eyebluecn/tank/issues/4)
4. 修复了文件夹自己移动到自己后就全部消失的bug. [#8](https://github.com/eyebluecn/tank/issues/8)
5. 统一不能删除用户,但是可以禁用或者启用用户. [#9](https://github.com/eyebluecn/tank/issues/9)
2018-01-12
tank-1.0.1
1. 修复面包屑回退的bug [#1](https://github.com/eyebluecn/tank/issues/1)
2. 修复移动文件时,可能移到其他人的文件夹下的bug
3. 新增404页面
4. 移除掉一些没用的代码
2018-01-01
tank-1.0.0
完成基本核心功能
-21
View File
@@ -1,21 +0,0 @@
MIT License
Copyright (c) 2017 蓝眼
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 the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
+28 -144
View File
@@ -1,167 +1,51 @@
![蓝眼云盘logo](https://raw.githubusercontent.com/eyebluecn/tank/master/build/doc/img/logo.png)
[![蓝眼云盘logo](./doc/img/logo.png)](https://github.com/eyebluecn/tank)
# 蓝眼云盘前端
[English Version](https://tank-doc.eyeblue.cn/en)
##### [在线Demo](http://tank.eyeblue.cn) (体验账号: demo@tank.eyeblue.cn 密码:123456)
# 蓝眼云盘(3.1.2)
[在线Demo](https://tank.eyeblue.cn) (体验账号: demo 密码:123456)
##### [配套后端tank](https://github.com/eyebluecn/tank)
蓝眼云盘是蓝眼开源系列代表作品之一,致力于打造精致,优雅,简约的云盘。核心功能如下:
1. 文件列表
2. 文件/文件夹上传 + 拖拽上传
3. 文件分享
4. 文件监控统计
5. 回收站
6. 多用户
7. [WebDav](https://tank-doc.eyeblue.cn/advance/webdav.html)
8. [扫描磁盘任务](https://tank-doc.eyeblue.cn/advance/scan.html)
9. [在线预览及自定义配置预览引擎](https://tank-doc.eyeblue.cn/advance/preview.html)
### 简介
蓝眼云盘是 [蓝眼系列开源软件](https://github.com/eyebluecn) 中的第一个
[更多内容请移步至文档](https://tank-doc.eyeblue.cn/)
- 主要用于快速搭建私人云盘,可以简单理解为部署在自己服务器上的[百度云盘](https://pan.baidu.com/)。
- 蓝眼云盘提供了[编程接口](https://github.com/eyebluecn/tank/blob/master/build/doc/alien_zh.md),可以使用接口上传文件,作为其他网站、系统、app的资源存储器,可以当作单机版的[七牛云](https://www.qiniu.com)或[阿里云OSS](https://www.aliyun.com/product/oss)使用。在即将发布的[《蓝眼博客》](https://github.com/eyebluecn/blog)软件中将会有详细的使用。
- 蓝眼云盘还提供了账号管理系统,超级管理员可以管理用户,查看用户文件,普通用户只能查看自己的文件,修改自己的资料。上面提供的体验账号就是一个普通用户的账号。
前端技术栈:Typescript + React + Ant Design 4.0 + OOP
蓝眼云盘可以作为团队内部或个人私有的云盘使用,亦可当作专门处理图片,音频,视频等二进制文件的第三方编程辅助工具。
### 软件截图
#### PC端截图
如果您觉得蓝眼云盘对您有帮助,请不要吝惜您的star :smile:
![](./doc/img/tank0.png)
### 技术栈
![](./doc/img/tank1.png)
vue2.0 + vue-router + vuex + vue-resource + webpack + es6 + less
![](./doc/img/tank2.png)
#### 手机端截图
### 运行
![](./doc/img/mobile.png)
```
npm install
npm run dev
```
如果你有自己的tank后端,也可以在`config/index.js`中`proxyTable.target`修改为自己tank所在地址
### 打包
```
npm run build
```
打包的结果在`dist`文件夹下,将该文件夹下的内容放置在[后端tank](https://github.com/eyebluecn/tank)的`build/html`文件夹下即可。
### 配套后端
此项目有配套后端项目,对golang感兴趣的同学可以猛戳 [配套后端tank](https://github.com/eyebluecn/tank)
### 总结
1、 蓝眼的宗旨是专注于开源精致而优雅的软件,所以在代码的构建过程中我们不停地思考与迭代,追求最优质的代码。
2、 蓝眼云盘前端代码的构建完全面向对象,可扩展能力强,涉及多用户,多权限功能。
3、 蓝眼云盘后端采用了更贴近底层golang语言,更加适用于文件传输类的软件,速度更快,用户体验更好。
## [安装文档](https://tank-doc.eyeblue.cn/basic/install.html)
### Contribution
感谢所有蓝眼云盘的贡献者 [@zicla](https://github.com/zicla),[@seaheart](https://github.com/seaheart),@heying,[@hxsherry](https://github.com/hxsherry)
感谢所有蓝眼云盘的贡献者 [@zicla](https://github.com/zicla),[@seaheart](https://github.com/seaheart),[@yemuhe](https://github.com/yemuhe),[@hxsherry](https://github.com/hxsherry)
如果您也想参与进来,请尽情的fork, star, post issue, pull requests
### 部分截图
![蓝眼云盘登录页面](https://raw.githubusercontent.com/eyebluecn/tank/master/build/doc/img/login.png)
当然你可以加入钉钉群一起直接交流,在钉钉群中可以获取最新beta版本。
![蓝眼云盘主要页面](https://raw.githubusercontent.com/eyebluecn/tank/master/build/doc/img/matters.png)
![](./doc/img/dingding.jpg)
### 项目布局
```
├── build // webpack配置文件
├── config // 项目打包路径及反向代理配置
├── doc // vue-cli创建后配置文档
├── node_modules // 依赖包存放目录
├── screenshots // 项目部分截图
├── node_modules // 依赖包存放目录
├── static // 打包文件存放目录
├── src // 源码目录
│   ├── assets // 静态资源
│   │   ├── css // css目录
│   │   │   ├── bootstrap // bootstrap全局less
│   │   │   ├── global // 自定义全局less
│   │   │   ├── inspinia // 引用外部插件less
│   │   │   ├── mixin // bootstrap部分样式
│   │   │   ├── app.less // less入口文件
│   │   ├── img // 静态图片存放目录
│   ├── backyard // 组件目录
│   │   ├── layout // 布局
│   │   │   ├── BottomNavigation.vue // 尾部布局
│   │   │   ├── SideMenu.vue // 侧边栏菜单
│   │   │   ├── SideNavigation.vue // 侧边栏布局
│   │   │   ├── TopNavigation.vue // 头部布局
│   │   ├── matter // 文件
│   │   │   ├── widget
│   │   │   │   ├── Director.js // 单个文件的导演类
│   │   │   │   ├── FolderTree.vue // 文件夹递归树组件
│   │   │   │   ├── MatterImage.vue // 图片类型文件上传组件
│   │   │   │   ├── MatterPanel.vue // 单文件或文件夹个体
│   │   │   │   ├── MoveBatchPanel.vue // 批量文件移动组件
│   │   │   │   ├── UploadMatterPanel.vue // 文件上传组件
│   │   │   ├── List.vue // 文件列表
│   │   ├── preference // 个性化
│   │   │   ├── Edit.vue // 个性化编辑
│   │   │   ├── Index.vue // 个性化显示
│   │   ├── user // 用户
│   │   │   ├── widget
│   │   │   │   ├── UserInputSelection.vue // 异步用户模糊单选组件
│   │   │   ├── ChangePassword.vue // 用户修改密码
│   │   │   ├── Create.vue // 创建用户
│   │   │   ├── Detail.vue // 用户详情
│   │   │   ├── List.vue // 用户列表
│   │   │   ├── Login.vue // 用户登录
│   │   ├── widget // 与页面有关的公用组件
│   │   │   ├── CreateSaveButton.vue // 保存创建按钮组件
│   │   │   ├── LoadingFrame.vue // 框架加载组件
│   │   ├── Frame.vue // 大框架
│   ├── common // 公共目录
│   │   ├── directive // 自定义指令
│   │   │   ├── directive.js // 验证规则指令
│   │   ├── filter // 过滤器
│   │   │   ├── index.js // 过滤器入口文件
│   │   │   ├── number.js // 数字格式过滤器
│   │   │   ├── str.js // 字符串格式过滤器
│   │   │   ├── time.js // 时间格式过滤器
│   │   │   ├── validate.js // 正则表达式
│   │   ├── fork // 引用外部插件
│   │   ├── model // 类模型目录
│   │   │   ├── base // 基
│   │   │   │   ├── Base.js // 基类
│   │   │   │   ├── BaseEntity.js // 实体基类
│   │   │   │   ├── Filter.js // 过滤器类
│   │   │   │   ├── Pager.js // 分页类
│   │   │   ├── feature // 权限
│   │   │   │   ├── FeatureType.js // 权限点类
│   │   │   ├── matter // 文件
│   │   │   │   ├── Matter.js // 文件类
│   │   │   ├── preference // 个性化
│   │   │   │   ├── Preference.js // 个性化类
│   │   │   ├── user // 用户
│   │   │   │   ├── User.js // 用户类
│   │   ├── router // 路由
│   │   │   ├── index.js // 路由入口文件
│   │   ├── util // 通用
│   │   │   ├── MimeUtil.js // 后缀名判别文件
│   │   │   ├── Utils.js // 客户端判别文件
│   │   ├── vuex // vuex状态管理
│   │   │   ├── index.js // vuex入口文件
│   │   ├── widget // 公用轮子文件(里面存放各种通用型轮子)
│   │   │   ├── filter // 筛选
│   │   │   │   ├── NbFilter.vue // 筛选入口组件
│   │   │   │   ├── NbFilterCheck.vue // 单/多项选择筛选
│   │   │   │   ├── NbFilterDateTime.vue // 时间筛选
│   │   │   │   ├── NbFilterHttpInputSelection.vue // 异步输入筛选
│   │   │   │   ├── NbFilterHttpSelection.vue // 异步下拉筛选
│   │   │   │   ├── NbFilterMultiSelection.vue // 多选下拉筛选
│   │   │   │   ├── NbFilterSelection.vue // 下拉筛选
│   │   │   │   ├── NbFilterSort.vue // 布尔值筛选
│   │   │   ├── NbBtnDropdown.vue // 按钮下拉组件
│   │   │   ├── NbCheckbox.vue // 复选框组件
│   │   │   ├── NbExpanding.vue // 收缩展开组件
│   │   │   ├── NbPager.vue // 分页组件
│   │   │   ├── NbRadio.vue // 单选框组件
│   │   │   ├── NbSlidePanel.vue // 动画组件
│   │   │   ├── NbSwitcher.vue // 开关按钮组件
│   ├── App.vue // 页面入口文件
│   ├── main.js // Js入口文件
├── index.html // 入口Html文件
```
群号:23156361
### License
-41
View File
@@ -1,41 +0,0 @@
'use strict'
require('./check-versions')()
process.env.NODE_ENV = 'production'
const ora = require('ora')
const rm = require('rimraf')
const path = require('path')
const chalk = require('chalk')
const webpack = require('webpack')
const config = require('../config')
const webpackConfig = require('./webpack.prod.conf')
const spinner = ora('building for production...')
spinner.start()
rm(path.join(config.build.assetsRoot, config.build.assetsSubDirectory), err => {
if (err) throw err
webpack(webpackConfig, function (err, stats) {
spinner.stop()
if (err) throw err
process.stdout.write(stats.toString({
colors: true,
modules: false,
children: false,
chunks: false,
chunkModules: false
}) + '\n\n')
if (stats.hasErrors()) {
console.log(chalk.red(' Build failed with errors.\n'))
process.exit(1)
}
console.log(chalk.cyan(' Build complete.\n'))
console.log(chalk.yellow(
' Tip: built files are meant to be served over an HTTP server.\n' +
' Opening index.html over matter:// won\'t work.\n'
))
})
})
-49
View File
@@ -1,49 +0,0 @@
'use strict'
const chalk = require('chalk')
const semver = require('semver')
const packageConfig = require('../package.json')
const shell = require('shelljs')
function exec (cmd) {
return require('child_process').execSync(cmd).toString().trim()
}
const versionRequirements = [
{
name: 'node',
currentVersion: semver.clean(process.version),
versionRequirement: packageConfig.engines.node
}
]
if (shell.which('npm')) {
versionRequirements.push({
name: 'npm',
currentVersion: exec('npm --version'),
versionRequirement: packageConfig.engines.npm
})
}
module.exports = function () {
const warnings = []
for (let i = 0; i < versionRequirements.length; i++) {
const mod = versionRequirements[i]
if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) {
warnings.push(mod.name + ': ' +
chalk.red(mod.currentVersion) + ' should be ' +
chalk.green(mod.versionRequirement)
)
}
}
if (warnings.length) {
console.log('')
console.log(chalk.yellow('To use this template, you must update following to modules:'))
console.log()
for (let i = 0; i < warnings.length; i++) {
const warning = warnings[i]
console.log(' ' + warning)
}
console.log()
process.exit(1)
}
}
-10
View File
@@ -1,10 +0,0 @@
/* eslint-disable */
'use strict'
require('eventsource-polyfill')
var hotClient = require('webpack-hot-middleware/client?noInfo=true&reload=true')
hotClient.subscribe(function (event) {
if (event.action === 'reload') {
window.location.reload()
}
})
-107
View File
@@ -1,107 +0,0 @@
'use strict'
require('./check-versions')()
const config = require('../config')
if (!process.env.NODE_ENV) {
process.env.NODE_ENV = JSON.parse(config.dev.env.NODE_ENV)
}
const opn = require('opn')
const path = require('path')
const express = require('express')
const webpack = require('webpack')
const proxyMiddleware = require('http-proxy-middleware')
const webpackConfig = (process.env.NODE_ENV === 'testing' || process.env.NODE_ENV === 'production')
? require('./webpack.prod.conf')
: require('./webpack.dev.conf')
// default port where dev server listens for incoming traffic
const port = process.env.PORT || config.dev.port
// automatically open browser, if not set will be false
const autoOpenBrowser = !!config.dev.autoOpenBrowser
// Define HTTP proxies to your custom API backend
// https://github.com/chimurai/http-proxy-middleware
const proxyTable = config.dev.proxyTable
const app = express()
const compiler = webpack(webpackConfig)
const devMiddleware = require('webpack-dev-middleware')(compiler, {
publicPath: webpackConfig.output.publicPath,
quiet: true
})
const hotMiddleware = require('webpack-hot-middleware')(compiler, {
log: false,
heartbeat: 2000
})
// force page reload when html-webpack-plugin template changes
// currently disabled until this is resolved:
// https://github.com/jantimon/html-webpack-plugin/issues/680
// compiler.plugin('compilation', function (compilation) {
// compilation.plugin('html-webpack-plugin-after-emit', function (data, cb) {
// hotMiddleware.publish({ action: 'reload' })
// cb()
// })
// })
// enable hot-reload and state-preserving
// compilation error display
app.use(hotMiddleware)
// proxy api requests
Object.keys(proxyTable).forEach(function (context) {
let options = proxyTable[context]
if (typeof options === 'string') {
options = { target: options }
}
app.use(proxyMiddleware(options.filter || context, options))
})
// handle fallback for HTML5 history API
app.use(require('connect-history-api-fallback')())
// serve webpack bundle output
app.use(devMiddleware)
// serve pure static assets
const staticPath = path.posix.join(config.dev.assetsPublicPath, config.dev.assetsSubDirectory)
app.use(staticPath, express.static('./static'))
const uri = 'http://localhost:' + port
var _resolve
var _reject
var readyPromise = new Promise((resolve, reject) => {
_resolve = resolve
_reject = reject
})
var server
var portfinder = require('portfinder')
portfinder.basePort = port
console.log('> Starting dev server...')
devMiddleware.waitUntilValid(() => {
portfinder.getPort((err, port) => {
if (err) {
_reject(err)
}
process.env.PORT = port
var uri = 'http://localhost:' + port
console.log('> Listening at ' + uri + '\n')
// when env is testing, don't need open it
if (autoOpenBrowser && process.env.NODE_ENV !== 'testing') {
opn(uri)
}
server = app.listen(port)
_resolve()
})
})
module.exports = {
ready: readyPromise,
close: () => {
server.close()
}
}
-72
View File
@@ -1,72 +0,0 @@
'use strict'
const path = require('path')
const config = require('../config')
const ExtractTextPlugin = require('extract-text-webpack-plugin')
exports.assetsPath = function (_path) {
const assetsSubDirectory = process.env.NODE_ENV === 'production'
? config.build.assetsSubDirectory
: config.dev.assetsSubDirectory
return path.posix.join(assetsSubDirectory, _path)
}
exports.cssLoaders = function (options) {
options = options || {}
const cssLoader = {
loader: 'css-loader',
options: {
minimize: process.env.NODE_ENV === 'production',
sourceMap: options.sourceMap
}
}
// generate loader string to be used with extract text plugin
function generateLoaders (loader, loaderOptions) {
const loaders = [cssLoader]
if (loader) {
loaders.push({
loader: loader + '-loader',
options: Object.assign({}, loaderOptions, {
sourceMap: options.sourceMap
})
})
}
// Extract CSS when that option is specified
// (which is the case during production build)
if (options.extract) {
return ExtractTextPlugin.extract({
use: loaders,
fallback: 'vue-style-loader'
})
} else {
return ['vue-style-loader'].concat(loaders)
}
}
// https://vue-loader.vuejs.org/en/configurations/extract-css.html
return {
css: generateLoaders(),
postcss: generateLoaders(),
less: generateLoaders('less'),
sass: generateLoaders('sass', { indentedSyntax: true }),
scss: generateLoaders('sass'),
stylus: generateLoaders('stylus'),
styl: generateLoaders('stylus')
}
}
// Generate loaders for standalone style files (outside of .vue)
exports.styleLoaders = function (options) {
const output = []
const loaders = exports.cssLoaders(options)
for (const extension in loaders) {
const loader = loaders[extension]
output.push({
test: new RegExp('\\.' + extension + '$'),
use: loader
})
}
return output
}
-19
View File
@@ -1,19 +0,0 @@
'use strict'
const utils = require('./utils')
const config = require('../config')
const isProduction = process.env.NODE_ENV === 'production'
module.exports = {
loaders: utils.cssLoaders({
sourceMap: isProduction
? config.build.productionSourceMap
: config.dev.cssSourceMap,
extract: isProduction
}),
transformToRequire: {
video: 'src',
source: 'src',
img: 'src',
image: 'xlink:href'
}
}
-76
View File
@@ -1,76 +0,0 @@
'use strict'
const path = require('path')
const utils = require('./utils')
const config = require('../config')
const vueLoaderConfig = require('./vue-loader.conf')
function resolve(dir) {
return path.join(__dirname, '..', dir)
}
module.exports = {
entry: {
app: './src/main.js'
},
output: {
path: config.build.assetsRoot,
filename: '[name].js',
publicPath: process.env.NODE_ENV === 'production'
? config.build.assetsPublicPath
: config.dev.assetsPublicPath
},
resolve: {
extensions: ['.js', '.vue', '.json'],
alias: {
'vue$': 'vue/dist/vue.esm.js',
'@': resolve('src'),
}
},
module: {
rules: [
{
test: /\.(js|vue)$/,
loader: 'eslint-loader',
enforce: 'pre',
include: [resolve('src'), resolve('test')],
options: {
formatter: require('eslint-friendly-formatter')
}
},
{
test: /\.vue$/,
loader: 'vue-loader',
options: vueLoaderConfig
},
{
test: /\.js$/,
loader: 'babel-loader',
include: [resolve('src'), resolve('test')]
},
{
test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
loader: 'url-loader',
options: {
limit: 10000,
name: utils.assetsPath('img/[name].[hash:7].[ext]')
}
},
{
test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/,
loader: 'url-loader',
options: {
limit: 10000,
name: utils.assetsPath('media/[name].[hash:7].[ext]')
}
},
{
test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
loader: 'url-loader',
options: {
limit: 10000,
name: utils.assetsPath('fonts/[name].[hash:7].[ext]')
}
}
]
}
}
-37
View File
@@ -1,37 +0,0 @@
'use strict'
const utils = require('./utils')
const webpack = require('webpack')
const config = require('../config')
const merge = require('webpack-merge')
const baseWebpackConfig = require('./webpack.base.conf')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin')
// add hot-reload related code to entry chunks
Object.keys(baseWebpackConfig.entry).forEach(function (name) {
baseWebpackConfig.entry[name] = ['./build/dev-client'].concat(baseWebpackConfig.entry[name])
})
module.exports = merge(baseWebpackConfig, {
module: {
rules: utils.styleLoaders({sourceMap: config.dev.cssSourceMap})
},
// cheap-module-eval-source-map is faster for development
devtool: '#cheap-module-eval-source-map',
plugins: [
new webpack.DefinePlugin({
'process.env': config.dev.env
}),
// https://github.com/glenjamin/webpack-hot-middleware#installation--usage
new webpack.HotModuleReplacementPlugin(),
new webpack.NoEmitOnErrorsPlugin(),
// https://github.com/ampedandwired/html-webpack-plugin
new HtmlWebpackPlugin({
filename: 'index.html',
template: 'index.html',
inject: true,
favicon: 'src/assets/img/favicon.ico'
}),
new FriendlyErrorsPlugin()
]
})
-134
View File
@@ -1,134 +0,0 @@
'use strict'
const path = require('path')
const utils = require('./utils')
const webpack = require('webpack')
const config = require('../config')
const merge = require('webpack-merge')
const baseWebpackConfig = require('./webpack.base.conf')
const CopyWebpackPlugin = require('copy-webpack-plugin')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const ExtractTextPlugin = require('extract-text-webpack-plugin')
const OptimizeCSSPlugin = require('optimize-css-assets-webpack-plugin')
const env = process.env.NODE_ENV === 'testing'
? require('../config/test.env')
: config.build.env
const webpackConfig = merge(baseWebpackConfig, {
module: {
rules: utils.styleLoaders({
sourceMap: config.build.productionSourceMap,
extract: true
})
},
devtool: config.build.productionSourceMap ? '#source-map' : false,
output: {
path: config.build.assetsRoot,
filename: utils.assetsPath('js/[name].[chunkhash].js'),
chunkFilename: utils.assetsPath('js/[id].[chunkhash].js')
},
plugins: [
// http://vuejs.github.io/vue-loader/en/workflow/production.html
new webpack.DefinePlugin({
'process.env': env
}),
// UglifyJs do not support ES6+, you can also use babel-minify for better treeshaking: https://github.com/babel/minify
new webpack.optimize.UglifyJsPlugin({
compress: {
warnings: false
},
sourceMap: true,
//我们的类名不希望被混淆,否则url获取会成单字母了。
mangle: {
except: ['$super', '$', 'exports', 'require', 'angular'],
keep_fnames: true//it works
}
}),
// extract css into its own matter
new ExtractTextPlugin({
filename: utils.assetsPath('css/[name].[contenthash].css')
}),
// Compress extracted CSS. We are using this plugin so that possible
// duplicated CSS from different components can be deduped.
new OptimizeCSSPlugin({
cssProcessorOptions: {
safe: true
}
}),
// generate dist index.html with correct asset hash for caching.
// you can customize output by editing /index.html
// see https://github.com/ampedandwired/html-webpack-plugin
new HtmlWebpackPlugin({
filename: process.env.NODE_ENV === 'testing'
? 'index.html'
: config.build.index,
template: 'index.html',
inject: true,
favicon: 'src/assets/img/favicon.ico',
minify: {
removeComments: true,
collapseWhitespace: true,
removeAttributeQuotes: true
// more options:
// https://github.com/kangax/html-minifier#options-quick-reference
},
// necessary to consistently work with multiple chunks via CommonsChunkPlugin
chunksSortMode: 'dependency'
}),
// keep module.id stable when vender modules does not change
new webpack.HashedModuleIdsPlugin(),
// split vendor js into its own matter
new webpack.optimize.CommonsChunkPlugin({
name: 'vendor',
minChunks: function (module) {
// any required modules inside node_modules are extracted to vendor
return (
module.resource &&
/\.js$/.test(module.resource) &&
module.resource.indexOf(
path.join(__dirname, '../node_modules')
) === 0
)
}
}),
// extract webpack runtime and module manifest to its own matter in order to
// prevent vendor hash from being updated whenever app bundle is updated
new webpack.optimize.CommonsChunkPlugin({
name: 'manifest',
chunks: ['vendor']
}),
// copy custom static assets
new CopyWebpackPlugin([
{
from: path.resolve(__dirname, '../static'),
to: config.build.assetsSubDirectory,
ignore: ['.*']
}
])
]
})
if (config.build.productionGzip) {
const CompressionWebpackPlugin = require('compression-webpack-plugin')
webpackConfig.plugins.push(
new CompressionWebpackPlugin({
asset: '[path].gz[query]',
algorithm: 'gzip',
test: new RegExp(
'\\.(' +
config.build.productionGzipExtensions.join('|') +
')$'
),
threshold: 10240,
minRatio: 0.8
})
)
}
if (config.build.bundleAnalyzerReport) {
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin
webpackConfig.plugins.push(new BundleAnalyzerPlugin())
}
module.exports = webpackConfig
-32
View File
@@ -1,32 +0,0 @@
'use strict'
// This is the webpack config used for unit tests.
const utils = require('./utils')
const webpack = require('webpack')
const merge = require('webpack-merge')
const baseWebpackConfig = require('./webpack.base.conf')
const webpackConfig = merge(baseWebpackConfig, {
// use inline sourcemap for karma-sourcemap-loader
module: {
rules: utils.styleLoaders()
},
devtool: '#inline-source-map',
resolveLoader: {
alias: {
// necessary to to make lang="scss" work in test when using vue-loader's ?inject option
// see discussion at https://github.com/vuejs/vue-loader/issues/724
'scss-loader': 'sass-loader'
}
},
plugins: [
new webpack.DefinePlugin({
'process.env': require('../config/test.env')
})
]
})
// no need for app entry during tests
delete webpackConfig.entry
module.exports = webpackConfig
-7
View File
@@ -1,7 +0,0 @@
'use strict'
const merge = require('webpack-merge')
const prodEnv = require('./prod.env')
module.exports = merge(prodEnv, {
NODE_ENV: '"development"'
})
+101
View File
@@ -0,0 +1,101 @@
'use strict';
const fs = require('fs');
const path = require('path');
const paths = require('./paths');
// Make sure that including paths.js after env.js will read .env variables.
delete require.cache[require.resolve('./paths')];
const NODE_ENV = process.env.NODE_ENV;
if (!NODE_ENV) {
throw new Error(
'The NODE_ENV environment variable is required but was not specified.'
);
}
// https://github.com/bkeepers/dotenv#what-other-env-files-can-i-use
const dotenvFiles = [
`${paths.dotenv}.${NODE_ENV}.local`,
`${paths.dotenv}.${NODE_ENV}`,
// Don't include `.env.local` for `test` environment
// since normally you expect tests to produce the same
// results for everyone
NODE_ENV !== 'test' && `${paths.dotenv}.local`,
paths.dotenv,
].filter(Boolean);
// Load environment variables from .env* files. Suppress warnings using silent
// if this file is missing. dotenv will never modify any environment variables
// that have already been set. Variable expansion is supported in .env files.
// https://github.com/motdotla/dotenv
// https://github.com/motdotla/dotenv-expand
dotenvFiles.forEach(dotenvFile => {
if (fs.existsSync(dotenvFile)) {
require('dotenv-expand')(
require('dotenv').config({
path: dotenvFile,
})
);
}
});
// We support resolving modules according to `NODE_PATH`.
// This lets you use absolute paths in imports inside large monorepos:
// https://github.com/facebook/create-react-app/issues/253.
// It works similar to `NODE_PATH` in Node itself:
// https://nodejs.org/api/modules.html#modules_loading_from_the_global_folders
// Note that unlike in Node, only *relative* paths from `NODE_PATH` are honored.
// Otherwise, we risk importing Node.js core modules into an app instead of webpack shims.
// https://github.com/facebook/create-react-app/issues/1023#issuecomment-265344421
// We also resolve them to make sure all tools using them work consistently.
const appDirectory = fs.realpathSync(process.cwd());
process.env.NODE_PATH = (process.env.NODE_PATH || '')
.split(path.delimiter)
.filter(folder => folder && !path.isAbsolute(folder))
.map(folder => path.resolve(appDirectory, folder))
.join(path.delimiter);
// Grab NODE_ENV and REACT_APP_* environment variables and prepare them to be
// injected into the application via DefinePlugin in webpack configuration.
const REACT_APP = /^REACT_APP_/i;
function getClientEnvironment(publicUrl) {
const raw = Object.keys(process.env)
.filter(key => REACT_APP.test(key))
.reduce(
(env, key) => {
env[key] = process.env[key];
return env;
},
{
// Useful for determining whether we’re running in production mode.
// Most importantly, it switches React into the correct mode.
NODE_ENV: process.env.NODE_ENV || 'development',
// Useful for resolving the correct path to static assets in `public`.
// For example, <img src={process.env.PUBLIC_URL + '/img/logo.png'} />.
// This should only be used as an escape hatch. Normally you would put
// images into the `src` and `import` them in code to get their paths.
PUBLIC_URL: publicUrl,
// We support configuring the sockjs pathname during development.
// These settings let a developer run multiple simultaneous projects.
// They are used as the connection `hostname`, `pathname` and `port`
// in webpackHotDevClient. They are used as the `sockHost`, `sockPath`
// and `sockPort` options in webpack-dev-server.
WDS_SOCKET_HOST: process.env.WDS_SOCKET_HOST,
WDS_SOCKET_PATH: process.env.WDS_SOCKET_PATH,
WDS_SOCKET_PORT: process.env.WDS_SOCKET_PORT,
}
);
// Stringify all values so we can feed into webpack DefinePlugin
const stringified = {
'process.env': Object.keys(raw).reduce((env, key) => {
env[key] = JSON.stringify(raw[key]);
return env;
}, {}),
};
return { raw, stringified };
}
module.exports = getClientEnvironment;
+66
View File
@@ -0,0 +1,66 @@
'use strict';
const fs = require('fs');
const path = require('path');
const crypto = require('crypto');
const chalk = require('react-dev-utils/chalk');
const paths = require('./paths');
// Ensure the certificate and key provided are valid and if not
// throw an easy to debug error
function validateKeyAndCerts({ cert, key, keyFile, crtFile }) {
let encrypted;
try {
// publicEncrypt will throw an error with an invalid cert
encrypted = crypto.publicEncrypt(cert, Buffer.from('test'));
} catch (err) {
throw new Error(
`The certificate "${chalk.yellow(crtFile)}" is invalid.\n${err.message}`
);
}
try {
// privateDecrypt will throw an error with an invalid key
crypto.privateDecrypt(key, encrypted);
} catch (err) {
throw new Error(
`The certificate key "${chalk.yellow(keyFile)}" is invalid.\n${
err.message
}`
);
}
}
// Read file and throw an error if it doesn't exist
function readEnvFile(file, type) {
if (!fs.existsSync(file)) {
throw new Error(
`You specified ${chalk.cyan(
type
)} in your env, but the file "${chalk.yellow(file)}" can't be found.`
);
}
return fs.readFileSync(file);
}
// Get the https config
// Return cert files if provided in env, otherwise just true or false
function getHttpsConfig() {
const { SSL_CRT_FILE, SSL_KEY_FILE, HTTPS } = process.env;
const isHttps = HTTPS === 'true';
if (isHttps && SSL_CRT_FILE && SSL_KEY_FILE) {
const crtFile = path.resolve(paths.appPath, SSL_CRT_FILE);
const keyFile = path.resolve(paths.appPath, SSL_KEY_FILE);
const config = {
cert: readEnvFile(crtFile, 'SSL_CRT_FILE'),
key: readEnvFile(keyFile, 'SSL_KEY_FILE'),
};
validateKeyAndCerts({ ...config, keyFile, crtFile });
return config;
}
return isHttps;
}
module.exports = getHttpsConfig;
-51
View File
@@ -1,51 +0,0 @@
'use strict'
// Template version: 1.1.3
// see http://vuejs-templates.github.io/webpack for documentation.
const path = require('path')
module.exports = {
build: {
env: require('./prod.env'),
index: path.resolve(__dirname, '../dist/index.html'),
assetsRoot: path.resolve(__dirname, '../dist'),
assetsSubDirectory: 'static',
assetsPublicPath: '/',
productionSourceMap: true,
// Gzip off by default as many popular static hosts such as
// Surge or Netlify already gzip all static assets for you.
// Before setting to `true`, make sure to:
// npm install --save-dev compression-webpack-plugin
productionGzip: false,
productionGzipExtensions: ['js', 'css'],
// Run the build command with an extra argument to
// View the bundle analyzer report after build finishes:
// `npm run build --report`
// Set to `true` or `false` to always turn it on or off
bundleAnalyzerReport: process.env.npm_config_report
},
dev: {
env: require('./dev.env'),
port: 6015,
autoOpenBrowser: true,
assetsSubDirectory: 'static',
assetsPublicPath: '/',
proxyTable: {
'/api': {
//target: 'http://tank.eyeblue.cn',
target: 'http://localhost:6010',
changeOrigin: true,
pathRewrite: {
'^/api': '/api'
}
}
},
// CSS Sourcemaps off by default because relative paths are "buggy"
// with this option, according to the CSS-Loader README
// (https://github.com/webpack/css-loader#sourcemaps)
// In our experience, they generally work as expected,
// just be aware of this issue when enabling this option.
cssSourceMap: false
}
}
+14
View File
@@ -0,0 +1,14 @@
'use strict';
// This is a custom Jest transformer turning style imports into empty objects.
// http://facebook.github.io/jest/docs/en/webpack.html
module.exports = {
process() {
return 'module.exports = {};';
},
getCacheKey() {
// The output is always the same.
return 'cssTransform';
},
};
+40
View File
@@ -0,0 +1,40 @@
'use strict';
const path = require('path');
const camelcase = require('camelcase');
// This is a custom Jest transformer turning file imports into filenames.
// http://facebook.github.io/jest/docs/en/webpack.html
module.exports = {
process(src, filename) {
const assetFilename = JSON.stringify(path.basename(filename));
if (filename.match(/\.svg$/)) {
// Based on how SVGR generates a component name:
// https://github.com/smooth-code/svgr/blob/01b194cf967347d43d4cbe6b434404731b87cf27/packages/core/src/state.js#L6
const pascalCaseFilename = camelcase(path.parse(filename).name, {
pascalCase: true,
});
const componentName = `Svg${pascalCaseFilename}`;
return `const React = require('react');
module.exports = {
__esModule: true,
default: ${assetFilename},
ReactComponent: React.forwardRef(function ${componentName}(props, ref) {
return {
$$typeof: Symbol.for('react.element'),
type: 'svg',
ref: ref,
key: null,
props: Object.assign({}, props, {
children: ${assetFilename}
})
};
}),
};`;
}
return `module.exports = ${assetFilename};`;
},
};
+141
View File
@@ -0,0 +1,141 @@
'use strict';
const fs = require('fs');
const path = require('path');
const paths = require('./paths');
const chalk = require('react-dev-utils/chalk');
const resolve = require('resolve');
/**
* Get additional module paths based on the baseUrl of a compilerOptions object.
*
* @param {Object} options
*/
function getAdditionalModulePaths(options = {}) {
const baseUrl = options.baseUrl;
// We need to explicitly check for null and undefined (and not a falsy value) because
// TypeScript treats an empty string as `.`.
if (baseUrl == null) {
// If there's no baseUrl set we respect NODE_PATH
// Note that NODE_PATH is deprecated and will be removed
// in the next major release of create-react-app.
const nodePath = process.env.NODE_PATH || '';
return nodePath.split(path.delimiter).filter(Boolean);
}
const baseUrlResolved = path.resolve(paths.appPath, baseUrl);
// We don't need to do anything if `baseUrl` is set to `node_modules`. This is
// the default behavior.
if (path.relative(paths.appNodeModules, baseUrlResolved) === '') {
return null;
}
// Allow the user set the `baseUrl` to `appSrc`.
if (path.relative(paths.appSrc, baseUrlResolved) === '') {
return [paths.appSrc];
}
// If the path is equal to the root directory we ignore it here.
// We don't want to allow importing from the root directly as source files are
// not transpiled outside of `src`. We do allow importing them with the
// absolute path (e.g. `src/Components/Button.js`) but we set that up with
// an alias.
if (path.relative(paths.appPath, baseUrlResolved) === '') {
return null;
}
// Otherwise, throw an error.
throw new Error(
chalk.red.bold(
"Your project's `baseUrl` can only be set to `src` or `node_modules`." +
' Create React App does not support other values at this time.'
)
);
}
/**
* Get webpack aliases based on the baseUrl of a compilerOptions object.
*
* @param {*} options
*/
function getWebpackAliases(options = {}) {
const baseUrl = options.baseUrl;
if (!baseUrl) {
return {};
}
const baseUrlResolved = path.resolve(paths.appPath, baseUrl);
if (path.relative(paths.appPath, baseUrlResolved) === '') {
return {
src: paths.appSrc,
};
}
}
/**
* Get jest aliases based on the baseUrl of a compilerOptions object.
*
* @param {*} options
*/
function getJestAliases(options = {}) {
const baseUrl = options.baseUrl;
if (!baseUrl) {
return {};
}
const baseUrlResolved = path.resolve(paths.appPath, baseUrl);
if (path.relative(paths.appPath, baseUrlResolved) === '') {
return {
'^src/(.*)$': '<rootDir>/src/$1',
};
}
}
function getModules() {
// Check if TypeScript is setup
const hasTsConfig = fs.existsSync(paths.appTsConfig);
const hasJsConfig = fs.existsSync(paths.appJsConfig);
if (hasTsConfig && hasJsConfig) {
throw new Error(
'You have both a tsconfig.json and a jsconfig.json. If you are using TypeScript please remove your jsconfig.json file.'
);
}
let config;
// If there's a tsconfig.json we assume it's a
// TypeScript project and set up the config
// based on tsconfig.json
if (hasTsConfig) {
const ts = require(resolve.sync('typescript', {
basedir: paths.appNodeModules,
}));
config = ts.readConfigFile(paths.appTsConfig, ts.sys.readFile).config;
// Otherwise we'll check if there is jsconfig.json
// for non TS projects.
} else if (hasJsConfig) {
config = require(paths.appJsConfig);
}
config = config || {};
const options = config.compilerOptions || {};
const additionalModulePaths = getAdditionalModulePaths(options);
return {
additionalModulePaths: additionalModulePaths,
webpackAliases: getWebpackAliases(options),
jestAliases: getJestAliases(options),
hasTsConfig,
};
}
module.exports = getModules();
+72
View File
@@ -0,0 +1,72 @@
'use strict';
const path = require('path');
const fs = require('fs');
const getPublicUrlOrPath = require('react-dev-utils/getPublicUrlOrPath');
// Make sure any symlinks in the project folder are resolved:
// https://github.com/facebook/create-react-app/issues/637
const appDirectory = fs.realpathSync(process.cwd());
const resolveApp = relativePath => path.resolve(appDirectory, relativePath);
// We use `PUBLIC_URL` environment variable or "homepage" field to infer
// "public path" at which the app is served.
// webpack needs to know it to put the right <script> hrefs into HTML even in
// single-page apps that may serve index.html for nested URLs like /todos/42.
// We can't use a relative path in HTML because we don't want to load something
// like /todos/42/static/js/bundle.7289d.js. We have to know the root.
const publicUrlOrPath = getPublicUrlOrPath(
process.env.NODE_ENV === 'development',
require(resolveApp('package.json')).homepage,
process.env.PUBLIC_URL
);
const moduleFileExtensions = [
'web.mjs',
'mjs',
'web.js',
'js',
'web.ts',
'ts',
'web.tsx',
'tsx',
'json',
'web.jsx',
'jsx',
];
// Resolve file paths in the same order as webpack
const resolveModule = (resolveFn, filePath) => {
const extension = moduleFileExtensions.find(extension =>
fs.existsSync(resolveFn(`${filePath}.${extension}`))
);
if (extension) {
return resolveFn(`${filePath}.${extension}`);
}
return resolveFn(`${filePath}.js`);
};
// config after eject: we're in ./config/
module.exports = {
dotenv: resolveApp('.env'),
appPath: resolveApp('.'),
appBuild: resolveApp('build'),
appPublic: resolveApp('public'),
appHtml: resolveApp('public/index.html'),
appIndexJs: resolveModule(resolveApp, 'src/index'),
appPackageJson: resolveApp('package.json'),
appSrc: resolveApp('src'),
appTsConfig: resolveApp('tsconfig.json'),
appJsConfig: resolveApp('jsconfig.json'),
yarnLockFile: resolveApp('yarn.lock'),
testsSetup: resolveModule(resolveApp, 'src/setupTests'),
proxySetup: resolveApp('config/setupProxy.js'),
appNodeModules: resolveApp('node_modules'),
publicUrlOrPath,
};
module.exports.moduleFileExtensions = moduleFileExtensions;
+35
View File
@@ -0,0 +1,35 @@
'use strict';
const { resolveModuleName } = require('ts-pnp');
exports.resolveModuleName = (
typescript,
moduleName,
containingFile,
compilerOptions,
resolutionHost
) => {
return resolveModuleName(
moduleName,
containingFile,
compilerOptions,
resolutionHost,
typescript.resolveModuleName
);
};
exports.resolveTypeReferenceDirective = (
typescript,
moduleName,
containingFile,
compilerOptions,
resolutionHost
) => {
return resolveModuleName(
moduleName,
containingFile,
compilerOptions,
resolutionHost,
typescript.resolveTypeReferenceDirective
);
};
-4
View File
@@ -1,4 +0,0 @@
'use strict'
module.exports = {
NODE_ENV: '"production"'
}
+17
View File
@@ -0,0 +1,17 @@
const proxy = require('http-proxy-middleware');
module.exports = function (app) {
//为了解决前端开发时跨域问题,配置后台接口代理。
app.use(proxy(
'/api',
{
target: 'http://localhost:6010',
changeOrigin: true,
pathRewrite: {
'^/api': '/api'
}
}
));
};
-7
View File
@@ -1,7 +0,0 @@
'use strict'
const merge = require('webpack-merge')
const devEnv = require('./dev.env')
module.exports = merge(devEnv, {
NODE_ENV: '"testing"'
})
+691
View File
@@ -0,0 +1,691 @@
"use strict";
const fs = require("fs");
const path = require("path");
const webpack = require("webpack");
const resolve = require("resolve");
const PnpWebpackPlugin = require("pnp-webpack-plugin");
const HtmlWebpackPlugin = require("html-webpack-plugin");
const CaseSensitivePathsPlugin = require("case-sensitive-paths-webpack-plugin");
const InlineChunkHtmlPlugin = require("react-dev-utils/InlineChunkHtmlPlugin");
const TerserPlugin = require("terser-webpack-plugin");
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const OptimizeCSSAssetsPlugin = require("optimize-css-assets-webpack-plugin");
const safePostCssParser = require("postcss-safe-parser");
const ManifestPlugin = require("webpack-manifest-plugin");
const InterpolateHtmlPlugin = require("react-dev-utils/InterpolateHtmlPlugin");
const WatchMissingNodeModulesPlugin = require("react-dev-utils/WatchMissingNodeModulesPlugin");
const ModuleScopePlugin = require("react-dev-utils/ModuleScopePlugin");
const getCSSModuleLocalIdent = require("react-dev-utils/getCSSModuleLocalIdent");
const paths = require("./paths");
const modules = require("./modules");
const getClientEnvironment = require("./env");
const ModuleNotFoundPlugin = require("react-dev-utils/ModuleNotFoundPlugin");
const ForkTsCheckerWebpackPlugin = require("react-dev-utils/ForkTsCheckerWebpackPlugin");
const typescriptFormatter = require("react-dev-utils/typescriptFormatter");
const postcssNormalize = require("postcss-normalize");
const appPackageJson = require(paths.appPackageJson);
// Source maps are resource heavy and can cause out of memory issue for large source files.
const shouldUseSourceMap = process.env.GENERATE_SOURCEMAP !== "false";
// Some apps do not need the benefits of saving a web request, so not inlining the chunk
// makes for a smoother build process.
const shouldInlineRuntimeChunk = process.env.INLINE_RUNTIME_CHUNK !== "false";
const imageInlineSizeLimit = parseInt(
process.env.IMAGE_INLINE_SIZE_LIMIT || "10000"
);
// Check if TypeScript is setup
const useTypeScript = fs.existsSync(paths.appTsConfig);
// style files regexes
const cssRegex = /\.css$/;
const cssModuleRegex = /\.module\.css$/;
const sassRegex = /\.(scss|sass)$/;
const sassModuleRegex = /\.module\.(scss|sass)$/;
const lessRegex = /\.less$/;
const lessModuleRegex = /\.module\.less$/;
// This is the production and development configuration.
// It is focused on developer experience, fast rebuilds, and a minimal bundle.
module.exports = function (webpackEnv) {
const isEnvDevelopment = webpackEnv === "development";
const isEnvProduction = webpackEnv === "production";
// Variable used for enabling profiling in Production
// passed into alias object. Uses a flag if passed into the build command
const isEnvProductionProfile =
isEnvProduction && process.argv.includes("--profile");
// We will provide `paths.publicUrlOrPath` to our app
// as %PUBLIC_URL% in `index.html` and `process.env.PUBLIC_URL` in JavaScript.
// Omit trailing slash as %PUBLIC_URL%/xyz looks better than %PUBLIC_URL%xyz.
// Get environment variables to inject into our app.
const env = getClientEnvironment(paths.publicUrlOrPath.slice(0, -1));
// common function to get style loaders
const getStyleLoaders = (cssOptions, preProcessor) => {
const loaders = [
isEnvDevelopment && require.resolve("style-loader"),
isEnvProduction && {
loader: MiniCssExtractPlugin.loader,
// css is located in `static/css`, use '../../' to locate index.html folder
// in production `paths.publicUrlOrPath` can be a relative path
options: paths.publicUrlOrPath.startsWith(".")
? { publicPath: "../../" }
: {},
},
{
loader: require.resolve("css-loader"),
options: cssOptions,
},
{
// Options for PostCSS as we reference these options twice
// Adds vendor prefixing based on your specified browser support in
// package.json
loader: require.resolve("postcss-loader"),
options: {
// Necessary for external CSS imports to work
// https://github.com/facebook/create-react-app/issues/2677
ident: "postcss",
plugins: () => [
require("postcss-flexbugs-fixes"),
require("postcss-preset-env")({
autoprefixer: {
flexbox: "no-2009",
},
stage: 3,
}),
// Adds PostCSS Normalize as the reset css with default options,
// so that it honors browserslist config in package.json
// which in turn let's users customize the target behavior as per their needs.
postcssNormalize(),
],
sourceMap: isEnvProduction && shouldUseSourceMap,
},
},
].filter(Boolean);
if (preProcessor) {
loaders.push(
{
loader: require.resolve("resolve-url-loader"),
options: {
sourceMap: isEnvProduction && shouldUseSourceMap,
},
},
preProcessor
);
}
return loaders;
};
return {
mode: isEnvProduction ? "production" : isEnvDevelopment && "development",
// Stop compilation early in production
bail: isEnvProduction,
devtool: isEnvProduction
? shouldUseSourceMap
? "source-map"
: false
: isEnvDevelopment && "cheap-module-source-map",
// These are the "entry points" to our application.
// This means they will be the "root" imports that are included in JS bundle.
entry: [
// Include an alternative client for WebpackDevServer. A client's job is to
// connect to WebpackDevServer by a socket and get notified about changes.
// When you save a file, the client will either apply hot updates (in case
// of CSS changes), or refresh the page (in case of JS changes). When you
// make a syntax error, this client will display a syntax error overlay.
// Note: instead of the default WebpackDevServer client, we use a custom one
// to bring better experience for Create React App users. You can replace
// the line below with these two lines if you prefer the stock client:
// require.resolve('webpack-dev-server/client') + '?/',
// require.resolve('webpack/hot/dev-server'),
isEnvDevelopment &&
require.resolve("react-dev-utils/webpackHotDevClient"),
// Finally, this is your app's code:
paths.appIndexJs,
// We include the app code last so that if there is a runtime error during
// initialization, it doesn't blow up the WebpackDevServer client, and
// changing JS code would still trigger a refresh.
].filter(Boolean),
output: {
// The build folder.
path: isEnvProduction ? paths.appBuild : undefined,
// Add /* filename */ comments to generated require()s in the output.
pathinfo: isEnvDevelopment,
// There will be one main bundle, and one file per asynchronous chunk.
// In development, it does not produce real files.
filename: isEnvProduction
? "static/js/[name].[contenthash:8].js"
: isEnvDevelopment && "static/js/bundle.js",
// TODO: remove this when upgrading to webpack 5
futureEmitAssets: true,
// There are also additional JS chunk files if you use code splitting.
chunkFilename: isEnvProduction
? "static/js/[name].[contenthash:8].chunk.js"
: isEnvDevelopment && "static/js/[name].chunk.js",
// webpack uses `publicPath` to determine where the app is being served from.
// It requires a trailing slash, or the file assets will get an incorrect path.
// We inferred the "public path" (such as / or /my-project) from homepage.
publicPath: paths.publicUrlOrPath,
// Point sourcemap entries to original disk location (format as URL on Windows)
devtoolModuleFilenameTemplate: isEnvProduction
? (info) =>
path
.relative(paths.appSrc, info.absoluteResourcePath)
.replace(/\\/g, "/")
: isEnvDevelopment &&
((info) =>
path.resolve(info.absoluteResourcePath).replace(/\\/g, "/")),
// Prevents conflicts when multiple webpack runtimes (from different apps)
// are used on the same page.
jsonpFunction: `webpackJsonp${appPackageJson.name}`,
// this defaults to 'window', but by setting it to 'this' then
// module chunks which are built will work in web workers as well.
globalObject: "this",
},
optimization: {
minimize: isEnvProduction,
minimizer: [
// This is only used in production mode
new TerserPlugin({
terserOptions: {
parse: {
// We want terser to parse ecma 8 code. However, we don't want it
// to apply any minification steps that turns valid ecma 5 code
// into invalid ecma 5 code. This is why the 'compress' and 'output'
// sections only apply transformations that are ecma 5 safe
// https://github.com/facebook/create-react-app/pull/4234
ecma: 8,
},
compress: {
ecma: 5,
warnings: false,
// Disabled because of an issue with Uglify breaking seemingly valid code:
// https://github.com/facebook/create-react-app/issues/2376
// Pending further investigation:
// https://github.com/mishoo/UglifyJS2/issues/2011
comparisons: false,
// Disabled because of an issue with Terser breaking valid code:
// https://github.com/facebook/create-react-app/issues/5250
// Pending further investigation:
// https://github.com/terser-js/terser/issues/120
inline: 2,
//保持类名 by zicla
keep_fnames: true,
},
mangle: {
safari10: true,
//保持类名 by zicla
keep_fnames: true,
},
// Added for profiling in devtools
keep_classnames: isEnvProductionProfile,
keep_fnames: isEnvProductionProfile,
output: {
ecma: 5,
comments: false,
// Turned on because emoji and regex is not minified properly using default
// https://github.com/facebook/create-react-app/issues/2488
ascii_only: true,
},
},
sourceMap: shouldUseSourceMap,
}),
// This is only used in production mode
new OptimizeCSSAssetsPlugin({
cssProcessorOptions: {
parser: safePostCssParser,
map: shouldUseSourceMap
? {
// `inline: false` forces the sourcemap to be output into a
// separate file
inline: false,
// `annotation: true` appends the sourceMappingURL to the end of
// the css file, helping the browser find the sourcemap
annotation: true,
}
: false,
},
cssProcessorPluginOptions: {
preset: ["default", { minifyFontValues: { removeQuotes: false } }],
},
}),
],
// Automatically split vendor and commons
// https://twitter.com/wSokra/status/969633336732905474
// https://medium.com/webpack/webpack-4-code-splitting-chunk-graph-and-the-splitchunks-optimization-be739a861366
splitChunks: {
chunks: "all",
name: false,
},
// Keep the runtime chunk separated to enable long term caching
// https://twitter.com/wSokra/status/969679223278505985
// https://github.com/facebook/create-react-app/issues/5358
runtimeChunk: {
name: (entrypoint) => `runtime-${entrypoint.name}`,
},
},
resolve: {
// This allows you to set a fallback for where webpack should look for modules.
// We placed these paths second because we want `node_modules` to "win"
// if there are any conflicts. This matches Node resolution mechanism.
// https://github.com/facebook/create-react-app/issues/253
modules: ["node_modules", paths.appNodeModules].concat(
modules.additionalModulePaths || []
),
// These are the reasonable defaults supported by the Node ecosystem.
// We also include JSX as a common component filename extension to support
// some tools, although we do not recommend using it, see:
// https://github.com/facebook/create-react-app/issues/290
// `web` extension prefixes have been added for better support
// for React Native Web.
extensions: paths.moduleFileExtensions
.map((ext) => `.${ext}`)
.filter((ext) => useTypeScript || !ext.includes("ts")),
alias: {
// Support React Native Web
// https://www.smashingmagazine.com/2016/08/a-glimpse-into-the-future-with-react-native-for-web/
"react-native": "react-native-web",
// Allows for better profiling with ReactDevTools
...(isEnvProductionProfile && {
"react-dom$": "react-dom/profiling",
"scheduler/tracing": "scheduler/tracing-profiling",
}),
...(modules.webpackAliases || {}),
},
plugins: [
// Adds support for installing with Plug'n'Play, leading to faster installs and adding
// guards against forgotten dependencies and such.
PnpWebpackPlugin,
// Prevents users from importing files from outside of src/ (or node_modules/).
// This often causes confusion because we only process files within src/ with babel.
// To fix this, we prevent you from importing files out of src/ -- if you'd like to,
// please link the files into your node_modules/ and let module-resolution kick in.
// Make sure your source files are compiled, as they will not be processed in any way.
new ModuleScopePlugin(paths.appSrc, [paths.appPackageJson]),
],
},
resolveLoader: {
plugins: [
// Also related to Plug'n'Play, but this time it tells webpack to load its loaders
// from the current package.
PnpWebpackPlugin.moduleLoader(module),
],
},
module: {
strictExportPresence: true,
rules: [
// Disable require.ensure as it's not a standard language feature.
{ parser: { requireEnsure: false } },
{
// "oneOf" will traverse all following loaders until one will
// match the requirements. When no loader matches it will fall
// back to the "file" loader at the end of the loader list.
oneOf: [
// "url" loader works like "file" loader except that it embeds assets
// smaller than specified limit in bytes as data URLs to avoid requests.
// A missing `test` is equivalent to a match.
{
test: [/\.bmp$/, /\.gif$/, /\.jpe?g$/, /\.png$/],
loader: require.resolve("url-loader"),
options: {
limit: imageInlineSizeLimit,
name: "static/media/[name].[hash:8].[ext]",
},
},
// Process application JS with Babel.
// The preset includes JSX, Flow, TypeScript, and some ESnext features.
{
test: /\.(js|mjs|jsx|ts|tsx)$/,
include: paths.appSrc,
loader: require.resolve("babel-loader"),
options: {
customize: require.resolve(
"babel-preset-react-app/webpack-overrides"
),
plugins: [
[
require.resolve("babel-plugin-named-asset-import"),
{
loaderMap: {
svg: {
ReactComponent:
"@svgr/webpack?-svgo,+titleProp,+ref![path]",
},
},
},
],
],
// This is a feature of `babel-loader` for webpack (not Babel itself).
// It enables caching results in ./node_modules/.cache/babel-loader/
// directory for faster rebuilds.
cacheDirectory: true,
// See #6846 for context on why cacheCompression is disabled
cacheCompression: false,
compact: isEnvProduction,
},
},
// Process any JS outside of the app with Babel.
// Unlike the application JS, we only compile the standard ES features.
{
test: /\.(js|mjs)$/,
exclude: /@babel(?:\/|\\{1,2})runtime/,
loader: require.resolve("babel-loader"),
options: {
babelrc: false,
configFile: false,
compact: false,
presets: [
[
require.resolve("babel-preset-react-app/dependencies"),
{ helpers: true },
],
],
cacheDirectory: true,
// See #6846 for context on why cacheCompression is disabled
cacheCompression: false,
// Babel sourcemaps are needed for debugging into node_modules
// code. Without the options below, debuggers like VSCode
// show incorrect code and set breakpoints on the wrong lines.
sourceMaps: shouldUseSourceMap,
inputSourceMap: shouldUseSourceMap,
},
},
// "postcss" loader applies autoprefixer to our CSS.
// "css" loader resolves paths in CSS and adds assets as dependencies.
// "style" loader turns CSS into JS modules that inject <style> tags.
// In production, we use MiniCSSExtractPlugin to extract that CSS
// to a file, but in development "style" loader enables hot editing
// of CSS.
// By default we support CSS Modules with the extension .module.css
{
test: cssRegex,
exclude: cssModuleRegex,
use: getStyleLoaders({
importLoaders: 1,
sourceMap: isEnvProduction && shouldUseSourceMap,
}),
// Don't consider CSS imports dead code even if the
// containing package claims to have no side effects.
// Remove this when webpack adds a warning or an error for this.
// See https://github.com/webpack/webpack/issues/6571
sideEffects: true,
},
// Adds support for CSS Modules (https://github.com/css-modules/css-modules)
// using the extension .module.css
{
test: cssModuleRegex,
use: getStyleLoaders({
importLoaders: 1,
sourceMap: isEnvProduction && shouldUseSourceMap,
modules: {
getLocalIdent: getCSSModuleLocalIdent,
},
}),
},
// Opt-in support for SASS (using .scss or .sass extensions).
// By default we support SASS Modules with the
// extensions .module.scss or .module.sass
{
test: sassRegex,
exclude: sassModuleRegex,
use: getStyleLoaders(
{
importLoaders: 3,
sourceMap: isEnvProduction && shouldUseSourceMap,
},
{
loader: "sass-loader",
options: {
sourceMap: true,
},
}
),
// Don't consider CSS imports dead code even if the
// containing package claims to have no side effects.
// Remove this when webpack adds a warning or an error for this.
// See https://github.com/webpack/webpack/issues/6571
sideEffects: true,
},
// Adds support for CSS Modules, but using SASS
// using the extension .module.scss or .module.sass
{
test: sassModuleRegex,
use: getStyleLoaders(
{
importLoaders: 3,
sourceMap: isEnvProduction && shouldUseSourceMap,
modules: {
getLocalIdent: getCSSModuleLocalIdent,
},
},
{
loader: "sass-loader",
options: {
sourceMap: true,
},
}
),
},
// less-loader by zicla
{
test: lessRegex,
exclude: lessModuleRegex,
use: getStyleLoaders(
{
importLoaders: 2,
sourceMap: isEnvProduction && shouldUseSourceMap,
},
{
loader: "less-loader",
options: {
sourceMap: true,
lessOptions: {
modifyVars: {
'primary-color': '#215891',
},
javascriptEnabled: true,
}
},
}
),
sideEffects: true,
},
// less-loader by zicla
{
test: lessModuleRegex,
use: getStyleLoaders(
{
importLoaders: 2,
sourceMap: isEnvProduction && shouldUseSourceMap,
modules: true,
getLocalIdent: getCSSModuleLocalIdent,
},
{
loader: "less-loader",
options: {
sourceMap: true,
lessOptions: {
modifyVars: {
'primary-color': '#215891',
},
javascriptEnabled: true,
}
},
}
),
},
// "file" loader makes sure those assets get served by WebpackDevServer.
// When you `import` an asset, you get its (virtual) filename.
// In production, they would get copied to the `build` folder.
// This loader doesn't use a "test" so it will catch all modules
// that fall through the other loaders.
{
loader: require.resolve("file-loader"),
// Exclude `js` files to keep "css" loader working as it injects
// its runtime that would otherwise be processed through "file" loader.
// Also exclude `html` and `json` extensions so they get processed
// by webpacks internal loaders.
exclude: [/\.(js|mjs|jsx|ts|tsx)$/, /\.html$/, /\.json$/],
options: {
name: "static/media/[name].[hash:8].[ext]",
},
},
// ** STOP ** Are you adding a new loader?
// Make sure to add the new loader(s) before the "file" loader.
],
},
],
},
plugins: [
// Generates an `index.html` file with the <script> injected.
new HtmlWebpackPlugin(
Object.assign(
{},
{
inject: true,
template: paths.appHtml,
},
isEnvProduction
? {
minify: {
removeComments: true,
collapseWhitespace: true,
removeRedundantAttributes: true,
useShortDoctype: true,
removeEmptyAttributes: true,
removeStyleLinkTypeAttributes: true,
keepClosingSlash: true,
minifyJS: true,
minifyCSS: true,
minifyURLs: true,
},
}
: undefined
)
),
// Inlines the webpack runtime script. This script is too small to warrant
// a network request.
// https://github.com/facebook/create-react-app/issues/5358
isEnvProduction &&
shouldInlineRuntimeChunk &&
new InlineChunkHtmlPlugin(HtmlWebpackPlugin, [/runtime-.+[.]js/]),
// Makes some environment variables available in index.html.
// The public URL is available as %PUBLIC_URL% in index.html, e.g.:
// <link rel="icon" href="%PUBLIC_URL%/favicon.ico">
// It will be an empty string unless you specify "homepage"
// in `package.json`, in which case it will be the pathname of that URL.
new InterpolateHtmlPlugin(HtmlWebpackPlugin, env.raw),
// This gives some necessary context to module not found errors, such as
// the requesting resource.
new ModuleNotFoundPlugin(paths.appPath),
// Makes some environment variables available to the JS code, for example:
// if (process.env.NODE_ENV === 'production') { ... }. See `./env.js`.
// It is absolutely essential that NODE_ENV is set to production
// during a production build.
// Otherwise React will be compiled in the very slow development mode.
new webpack.DefinePlugin(env.stringified),
// This is necessary to emit hot updates (currently CSS only):
isEnvDevelopment && new webpack.HotModuleReplacementPlugin(),
// Watcher doesn't work well if you mistype casing in a path so we use
// a plugin that prints an error when you attempt to do this.
// See https://github.com/facebook/create-react-app/issues/240
isEnvDevelopment && new CaseSensitivePathsPlugin(),
// If you require a missing module and then `npm install` it, you still have
// to restart the development server for webpack to discover it. This plugin
// makes the discovery automatic so you don't have to restart.
// See https://github.com/facebook/create-react-app/issues/186
isEnvDevelopment &&
new WatchMissingNodeModulesPlugin(paths.appNodeModules),
isEnvProduction &&
new MiniCssExtractPlugin({
// Options similar to the same options in webpackOptions.output
// both options are optional
filename: "static/css/[name].[contenthash:8].css",
chunkFilename: "static/css/[name].[contenthash:8].chunk.css",
}),
// Generate an asset manifest file with the following content:
// - "files" key: Mapping of all asset filenames to their corresponding
// output file so that tools can pick it up without having to parse
// `index.html`
// - "entrypoints" key: Array of files which are included in `index.html`,
// can be used to reconstruct the HTML if necessary
new ManifestPlugin({
fileName: "asset-manifest.json",
publicPath: paths.publicUrlOrPath,
generate: (seed, files, entrypoints) => {
const manifestFiles = files.reduce((manifest, file) => {
manifest[file.name] = file.path;
return manifest;
}, seed);
const entrypointFiles = entrypoints.main.filter(
(fileName) => !fileName.endsWith(".map")
);
return {
files: manifestFiles,
entrypoints: entrypointFiles,
};
},
}),
// Moment.js is an extremely popular library that bundles large locale files
// by default due to how webpack interprets its code. This is a practical
// solution that requires the user to opt into importing specific locales.
// https://github.com/jmblog/how-to-optimize-momentjs-with-webpack
// You can remove this if you don't use Moment.js:
new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/),
// TypeScript type checking
useTypeScript &&
new ForkTsCheckerWebpackPlugin({
typescript: resolve.sync("typescript", {
basedir: paths.appNodeModules,
}),
async: isEnvDevelopment,
useTypescriptIncrementalApi: true,
checkSyntacticErrors: true,
resolveModuleNameModule: process.versions.pnp
? `${__dirname}/pnpTs.js`
: undefined,
resolveTypeReferenceDirectiveModule: process.versions.pnp
? `${__dirname}/pnpTs.js`
: undefined,
tsconfig: paths.appTsConfig,
reportFiles: [
"**",
"!**/__tests__/**",
"!**/?(*.)(spec|test).*",
"!**/src/setupProxy.*",
"!**/src/setupTests.*",
],
silent: true,
// The formatter is invoked directly in WebpackDevServerUtils during development
formatter: isEnvProduction ? typescriptFormatter : undefined,
}),
].filter(Boolean),
// Some libraries import Node modules but don't use them in the browser.
// Tell webpack to provide empty mocks for them so importing them works.
node: {
module: "empty",
dgram: "empty",
dns: "mock",
fs: "empty",
http2: "empty",
net: "empty",
tls: "empty",
child_process: "empty",
},
// Turn off performance processing because we utilize
// our own hints via the FileSizeReporter
performance: false,
};
};
+130
View File
@@ -0,0 +1,130 @@
'use strict';
const fs = require('fs');
const errorOverlayMiddleware = require('react-dev-utils/errorOverlayMiddleware');
const evalSourceMapMiddleware = require('react-dev-utils/evalSourceMapMiddleware');
const noopServiceWorkerMiddleware = require('react-dev-utils/noopServiceWorkerMiddleware');
const ignoredFiles = require('react-dev-utils/ignoredFiles');
const redirectServedPath = require('react-dev-utils/redirectServedPathMiddleware');
const paths = require('./paths');
const getHttpsConfig = require('./getHttpsConfig');
const host = process.env.HOST || '0.0.0.0';
const sockHost = process.env.WDS_SOCKET_HOST;
const sockPath = process.env.WDS_SOCKET_PATH; // default: '/sockjs-node'
const sockPort = process.env.WDS_SOCKET_PORT;
module.exports = function(proxy, allowedHost) {
return {
// WebpackDevServer 2.4.3 introduced a security fix that prevents remote
// websites from potentially accessing local content through DNS rebinding:
// https://github.com/webpack/webpack-dev-server/issues/887
// https://medium.com/webpack/webpack-dev-server-middleware-security-issues-1489d950874a
// However, it made several existing use cases such as development in cloud
// environment or subdomains in development significantly more complicated:
// https://github.com/facebook/create-react-app/issues/2271
// https://github.com/facebook/create-react-app/issues/2233
// While we're investigating better solutions, for now we will take a
// compromise. Since our WDS configuration only serves files in the `public`
// folder we won't consider accessing them a vulnerability. However, if you
// use the `proxy` feature, it gets more dangerous because it can expose
// remote code execution vulnerabilities in backends like Django and Rails.
// So we will disable the host check normally, but enable it if you have
// specified the `proxy` setting. Finally, we let you override it if you
// really know what you're doing with a special environment variable.
disableHostCheck:
!proxy || process.env.DANGEROUSLY_DISABLE_HOST_CHECK === 'true',
// Enable gzip compression of generated files.
compress: true,
// Silence WebpackDevServer's own logs since they're generally not useful.
// It will still show compile warnings and errors with this setting.
clientLogLevel: 'none',
// By default WebpackDevServer serves physical files from current directory
// in addition to all the virtual build products that it serves from memory.
// This is confusing because those files won’t automatically be available in
// production build folder unless we copy them. However, copying the whole
// project directory is dangerous because we may expose sensitive files.
// Instead, we establish a convention that only files in `public` directory
// get served. Our build script will copy `public` into the `build` folder.
// In `index.html`, you can get URL of `public` folder with %PUBLIC_URL%:
// <link rel="icon" href="%PUBLIC_URL%/favicon.ico">
// In JavaScript code, you can access it with `process.env.PUBLIC_URL`.
// Note that we only recommend to use `public` folder as an escape hatch
// for files like `favicon.ico`, `manifest.json`, and libraries that are
// for some reason broken when imported through webpack. If you just want to
// use an image, put it in `src` and `import` it from JavaScript instead.
contentBase: paths.appPublic,
contentBasePublicPath: paths.publicUrlOrPath,
// By default files from `contentBase` will not trigger a page reload.
watchContentBase: true,
// Enable hot reloading server. It will provide WDS_SOCKET_PATH endpoint
// for the WebpackDevServer client so it can learn when the files were
// updated. The WebpackDevServer client is included as an entry point
// in the webpack development configuration. Note that only changes
// to CSS are currently hot reloaded. JS changes will refresh the browser.
hot: true,
// Use 'ws' instead of 'sockjs-node' on server since we're using native
// websockets in `webpackHotDevClient`.
transportMode: 'ws',
// Prevent a WS client from getting injected as we're already including
// `webpackHotDevClient`.
injectClient: false,
// Enable custom sockjs pathname for websocket connection to hot reloading server.
// Enable custom sockjs hostname, pathname and port for websocket connection
// to hot reloading server.
sockHost,
sockPath,
sockPort,
// It is important to tell WebpackDevServer to use the same "publicPath" path as
// we specified in the webpack config. When homepage is '.', default to serving
// from the root.
// remove last slash so user can land on `/test` instead of `/test/`
publicPath: paths.publicUrlOrPath.slice(0, -1),
// WebpackDevServer is noisy by default so we emit custom message instead
// by listening to the compiler events with `compiler.hooks[...].tap` calls above.
quiet: true,
// Reportedly, this avoids CPU overload on some systems.
// https://github.com/facebook/create-react-app/issues/293
// src/node_modules is not ignored to support absolute imports
// https://github.com/facebook/create-react-app/issues/1065
watchOptions: {
ignored: ignoredFiles(paths.appSrc),
},
https: getHttpsConfig(),
host,
overlay: false,
historyApiFallback: {
// Paths with dots should still use the history fallback.
// See https://github.com/facebook/create-react-app/issues/387.
disableDotRule: true,
index: paths.publicUrlOrPath,
},
public: allowedHost,
// `proxy` is run between `before` and `after` `webpack-dev-server` hooks
proxy,
before(app, server) {
// Keep `evalSourceMapMiddleware` and `errorOverlayMiddleware`
// middlewares before `redirectServedPath` otherwise will not have any effect
// This lets us fetch source contents from webpack for the error overlay
app.use(evalSourceMapMiddleware(server));
// This lets us open files from the runtime error overlay.
app.use(errorOverlayMiddleware());
if (fs.existsSync(paths.proxySetup)) {
// This registers user provided middleware for proxy reasons
require(paths.proxySetup)(app);
}
},
after(app) {
// Redirect to `PUBLIC_URL` or `homepage` from `package.json` if url not match
app.use(redirectServedPath(paths.publicUrlOrPath));
// This service worker file is effectively a 'no-op' that will reset any
// previous service worker registered for the same host:port combination.
// We do this in development to avoid hitting the production cache if
// it used the same host and port.
// https://github.com/facebook/create-react-app/issues/2272#issuecomment-302832432
app.use(noopServiceWorkerMiddleware(paths.publicUrlOrPath));
},
};
};
Binary file not shown.

After

Width:  |  Height:  |  Size: 122 KiB

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 34 KiB

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 34 KiB

Before

Width:  |  Height:  |  Size: 55 KiB

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 135 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

-62
View File
@@ -1,62 +0,0 @@
# 使用vue-cli创建项目后配置
### 1.修改默认端口
`config/index.js` 8080变更为6010
### 2.Eslint语法检查太过严格,使用自己的规则。
`.eslintrc.js`修改成自己的规则
### 3.添加Less
a.引入less和less-loader库
```
cnpm install less less-loader --save-dev
```
b.不需要做任何操作了,因为只要安装了less,vue-cli就会把less配置到项目中去。
### 4.给项目添加favicon.ico
`build/webpack.dev.config.js` 中的`new HtmlWebpackPlugin({`节点内`inject: true`后,添加:
`favicon: 'src/assets/img/favicon.ico'`
文件`build/webpack.dev.config.js` 同样的位置添加。
### 5.设置http代理
`config/index.js`在dev节点下添加:
```
proxyTable: {
'/api': {
target: 'http://127.0.0.1:6010',
changeOrigin: true,
pathRewrite: {
'^/api': '/api'
}
}
},
```
### 6.UglifyJsPlugin 不需要压缩类名,因为接口中有直接使用类名。
```
new webpack.optimize.UglifyJsPlugin({
compress: {
warnings: false
},
sourceMap: true,
//我们的类名不希望被混淆,否则url获取会成单字母了。
mangle: {
except: ['$super', '$', 'exports', 'require', 'angular'],
keep_fnames: true//it works
}
})
```
-18
View File
@@ -1,18 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<title>蓝眼云盘</title>
<meta charset="utf-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="renderer" content="webkit">
<meta name="viewport" content="user-scalable=no,width=device-width,initial-scale=1,maximum-scale=1">
<meta name="msapplication-tap-highlight" content="no">
<meta name="apple-mobile-web-app-capable" content="yes">
</head>
<body>
<div id="app"></div>
<!-- built files will be auto injected -->
</body>
</html>
+96 -112
View File
@@ -1,118 +1,102 @@
{
"name": "blog-front",
"version": "1.0.0",
"description": "A Vue.js project",
"author": "zicla <lish516@126.com>",
"name": "tank-front",
"version": "3.1.2",
"private": true,
"scripts": {
"dev": "node build/dev-server.js",
"start": "npm run dev",
"build": "node build/build.js",
"unit": "cross-env BABEL_ENV=test karma start test/unit/karma.conf.js --single-run",
"e2e": "node test/e2e/runner.js",
"test": "npm run unit && npm run e2e",
"lint": "eslint --ext .js,.vue src test/unit/specs test/e2e/specs"
},
"dependencies": {
"animate.css": "^3.5.2",
"babel-polyfill": "^6.26.0",
"bootstrap": "^3.3.7",
"editor.md": "^1.5.0",
"element-ui": "^2.0.2",
"enquire.js": "^2.1.6",
"font-awesome": "^4.7.0",
"fs": "0.0.1-security",
"icheck": "^1.0.2",
"jquery": "^3.2.1",
"perfect-scrollbar": "^1.1.0",
"scriptjs": "^2.5.8",
"swiper": "^4.0.3",
"velocity-animate": "^1.5.0",
"vue": "^2.5.2",
"vue-nprogress": "^0.1.5",
"vue-resource": "^1.3.4",
"vue-router": "^3.0.1",
"vuex": "^3.0.1",
"vuex-router-sync": "^5.0.0"
"@ant-design/icons": "4.2.1",
"pretty-format": "25.5.0",
"@types/echarts": "^4.6.1",
"@types/photoswipe": "^4.1.0",
"antd": "4.4.3",
"axios": "^0.19.2",
"camelcase": "^5.3.1",
"comma-separated-values": "^3.6.4",
"dotenv": "8.2.0",
"dotenv-expand": "5.1.0",
"echarts": "^4.8.0",
"echarts-for-react": "^2.0.16",
"fs-extra": "^8.1.0",
"identity-obj-proxy": "3.0.0",
"photoswipe": "^4.1.3",
"qs": "^6.9.4",
"react": "^16.13.1",
"react-app-polyfill": "^1.0.6",
"react-dev-utils": "^10.2.1",
"react-dom": "^16.13.1",
"react-router": "^5.2.0",
"react-router-dom": "^5.2.0",
"semver": "6.3.0",
"ts-pnp": "1.1.6",
"velocity-react": "^1.4.3"
},
"scripts": {
"start": "node scripts/start.js",
"build": "node scripts/build.js"
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
},
"babel": {
"presets": [
"react-app"
],
"plugins": [
[
"import",
{
"libraryName": "antd",
"style": true
},
"antd"
]
]
},
"devDependencies": {
"autoprefixer": "^7.1.2",
"babel-core": "^6.22.1",
"babel-eslint": "^7.1.1",
"babel-loader": "^7.1.1",
"babel-plugin-istanbul": "^4.1.1",
"babel-plugin-transform-runtime": "^6.22.0",
"babel-preset-env": "^1.3.2",
"babel-preset-stage-2": "^6.22.0",
"babel-register": "^6.22.0",
"chai": "^4.1.2",
"chalk": "^2.0.1",
"chromedriver": "^2.27.2",
"connect-history-api-fallback": "^1.3.0",
"copy-webpack-plugin": "^4.0.1",
"cross-env": "^5.0.1",
"cross-spawn": "^5.0.1",
"css-loader": "^0.28.0",
"eslint": "^3.19.0",
"eslint-config-standard": "^10.2.1",
"eslint-friendly-formatter": "^3.0.0",
"eslint-loader": "^1.7.1",
"eslint-plugin-html": "^3.0.0",
"eslint-plugin-import": "^2.7.0",
"eslint-plugin-node": "^5.2.0",
"eslint-plugin-promise": "^3.4.0",
"eslint-plugin-standard": "^3.0.1",
"eventsource-polyfill": "^0.9.6",
"express": "^4.14.1",
"extract-text-webpack-plugin": "^3.0.0",
"file-loader": "^1.1.4",
"friendly-errors-webpack-plugin": "^1.6.1",
"html-webpack-plugin": "^2.30.1",
"http-proxy-middleware": "^0.17.3",
"imports-loader": "^0.7.1",
"inject-loader": "^3.0.0",
"karma": "^1.4.1",
"karma-coverage": "^1.1.1",
"karma-mocha": "^1.3.0",
"karma-phantomjs-launcher": "^1.0.2",
"karma-phantomjs-shim": "^1.4.0",
"karma-sinon-chai": "^1.3.1",
"karma-sourcemap-loader": "^0.3.7",
"karma-spec-reporter": "0.0.31",
"karma-webpack": "^2.0.2",
"less": "^2.7.3",
"less-loader": "^4.0.5",
"mocha": "^3.2.0",
"nightwatch": "^0.9.12",
"opn": "^5.1.0",
"optimize-css-assets-webpack-plugin": "^3.2.0",
"ora": "^1.2.0",
"phantomjs-prebuilt": "^2.1.14",
"portfinder": "^1.0.13",
"rimraf": "^2.6.0",
"selenium-server": "^3.0.1",
"semver": "^5.3.0",
"shelljs": "^0.7.6",
"sinon": "^4.0.0",
"sinon-chai": "^2.8.0",
"url-loader": "^0.5.8",
"vue-loader": "^13.3.0",
"vue-multiselect": "^2.0.8",
"vue-style-loader": "^3.0.1",
"vue-template-compiler": "^2.5.2",
"webpack": "^3.6.0",
"webpack-bundle-analyzer": "^2.9.0",
"webpack-dev-middleware": "^1.12.0",
"webpack-hot-middleware": "^2.18.2",
"webpack-merge": "^4.1.0"
},
"engines": {
"node": ">= 4.0.0",
"npm": ">= 3.0.0"
},
"browserslist": [
"> 1%",
"last 2 versions",
"not ie <= 8"
]
"@babel/core": "7.9.0",
"@svgr/webpack": "4.3.3",
"@types/node": "^12.0.0",
"@types/qs": "^6.9.3",
"@types/react": "^16.9.0",
"@types/react-dom": "^16.9.0",
"@types/react-router-dom": "^5.1.5",
"@types/react-transition-group": "^4.4.0",
"babel-loader": "8.1.0",
"babel-plugin-import": "^1.13.0",
"babel-plugin-named-asset-import": "^0.3.6",
"babel-preset-react-app": "^9.1.2",
"case-sensitive-paths-webpack-plugin": "2.3.0",
"css-loader": "3.4.2",
"file-loader": "4.3.0",
"html-webpack-plugin": "4.0.0-beta.11",
"less": "^3.11.2",
"less-loader": "^6.1.0",
"mini-css-extract-plugin": "0.9.0",
"optimize-css-assets-webpack-plugin": "5.0.3",
"pnp-webpack-plugin": "1.6.4",
"postcss-flexbugs-fixes": "4.1.0",
"postcss-loader": "3.0.0",
"postcss-normalize": "8.0.1",
"postcss-preset-env": "6.7.0",
"postcss-safe-parser": "4.0.1",
"prettier": "^2.0.5",
"resolve": "1.15.0",
"resolve-url-loader": "3.1.1",
"sass-loader": "8.0.2",
"style-loader": "0.23.1",
"terser-webpack-plugin": "2.3.5",
"typescript": "~3.7.2",
"url-loader": "2.3.0",
"webpack": "4.42.0",
"webpack-dev-server": "3.10.3",
"webpack-manifest-plugin": "2.2.0"
}
}

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

+18
View File
@@ -0,0 +1,18 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<link rel="icon" href="%PUBLIC_URL%/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="theme-color" content="#000000" />
<meta
name="description"
content="eyeblue tank"
/>
<title>EyeblueTank</title>
</head>
<body>
<noscript>You need to enable JavaScript to run EyeblueTank.</noscript>
<div id="root"></div>
</body>
</html>
+211
View File
@@ -0,0 +1,211 @@
'use strict';
// Do this as the first thing so that any code reading it knows the right env.
process.env.BABEL_ENV = 'production';
process.env.NODE_ENV = 'production';
// Makes the script crash on unhandled rejections instead of silently
// ignoring them. In the future, promise rejections that are not handled will
// terminate the Node.js process with a non-zero exit code.
process.on('unhandledRejection', err => {
throw err;
});
// Ensure environment variables are read.
require('../config/env');
const path = require('path');
const chalk = require('react-dev-utils/chalk');
const fs = require('fs-extra');
const webpack = require('webpack');
const configFactory = require('../config/webpack.config');
const paths = require('../config/paths');
const checkRequiredFiles = require('react-dev-utils/checkRequiredFiles');
const formatWebpackMessages = require('react-dev-utils/formatWebpackMessages');
const printHostingInstructions = require('react-dev-utils/printHostingInstructions');
const FileSizeReporter = require('react-dev-utils/FileSizeReporter');
const printBuildError = require('react-dev-utils/printBuildError');
const measureFileSizesBeforeBuild =
FileSizeReporter.measureFileSizesBeforeBuild;
const printFileSizesAfterBuild = FileSizeReporter.printFileSizesAfterBuild;
const useYarn = fs.existsSync(paths.yarnLockFile);
// These sizes are pretty large. We'll warn for bundles exceeding them.
const WARN_AFTER_BUNDLE_GZIP_SIZE = 512 * 1024;
const WARN_AFTER_CHUNK_GZIP_SIZE = 1024 * 1024;
const isInteractive = process.stdout.isTTY;
// Warn and crash if required files are missing
if (!checkRequiredFiles([paths.appHtml, paths.appIndexJs])) {
process.exit(1);
}
// Generate configuration
const config = configFactory('production');
// We require that you explicitly set browsers and do not fall back to
// browserslist defaults.
const { checkBrowsers } = require('react-dev-utils/browsersHelper');
checkBrowsers(paths.appPath, isInteractive)
.then(() => {
// First, read the current file sizes in build directory.
// This lets us display how much they changed later.
return measureFileSizesBeforeBuild(paths.appBuild);
})
.then(previousFileSizes => {
// Remove all content but keep the directory so that
// if you're in it, you don't end up in Trash
fs.emptyDirSync(paths.appBuild);
// Merge with the public folder
copyPublicFolder();
// Start the webpack build
return build(previousFileSizes);
})
.then(
({ stats, previousFileSizes, warnings }) => {
if (warnings.length) {
console.log(chalk.yellow('Compiled with warnings.\n'));
console.log(warnings.join('\n\n'));
console.log(
'\nSearch for the ' +
chalk.underline(chalk.yellow('keywords')) +
' to learn more about each warning.'
);
console.log(
'To ignore, add ' +
chalk.cyan('// eslint-disable-next-line') +
' to the line before.\n'
);
} else {
console.log(chalk.green('Compiled successfully.\n'));
}
console.log('File sizes after gzip:\n');
printFileSizesAfterBuild(
stats,
previousFileSizes,
paths.appBuild,
WARN_AFTER_BUNDLE_GZIP_SIZE,
WARN_AFTER_CHUNK_GZIP_SIZE
);
console.log();
const appPackage = require(paths.appPackageJson);
const publicUrl = paths.publicUrlOrPath;
const publicPath = config.output.publicPath;
const buildFolder = path.relative(process.cwd(), paths.appBuild);
printHostingInstructions(
appPackage,
publicUrl,
publicPath,
buildFolder,
useYarn
);
},
err => {
const tscCompileOnError = process.env.TSC_COMPILE_ON_ERROR === 'true';
if (tscCompileOnError) {
console.log(
chalk.yellow(
'Compiled with the following type errors (you may want to check these before deploying your app):\n'
)
);
printBuildError(err);
} else {
console.log(chalk.red('Failed to compile.\n'));
printBuildError(err);
process.exit(1);
}
}
)
.catch(err => {
if (err && err.message) {
console.log(err.message);
}
process.exit(1);
});
// Create the production build and print the deployment instructions.
function build(previousFileSizes) {
// We used to support resolving modules according to `NODE_PATH`.
// This now has been deprecated in favor of jsconfig/tsconfig.json
// This lets you use absolute paths in imports inside large monorepos:
if (process.env.NODE_PATH) {
console.log(
chalk.yellow(
'Setting NODE_PATH to resolve modules absolutely has been deprecated in favor of setting baseUrl in jsconfig.json (or tsconfig.json if you are using TypeScript) and will be removed in a future major release of create-react-app.'
)
);
console.log();
}
console.log('Creating an optimized production build...');
const compiler = webpack(config);
return new Promise((resolve, reject) => {
compiler.run((err, stats) => {
let messages;
if (err) {
if (!err.message) {
return reject(err);
}
let errMessage = err.message;
// Add additional information for postcss errors
if (Object.prototype.hasOwnProperty.call(err, 'postcssNode')) {
errMessage +=
'\nCompileError: Begins at CSS selector ' +
err['postcssNode'].selector;
}
messages = formatWebpackMessages({
errors: [errMessage],
warnings: [],
});
} else {
messages = formatWebpackMessages(
stats.toJson({ all: false, warnings: true, errors: true })
);
}
if (messages.errors.length) {
// Only keep the first error. Others are often indicative
// of the same problem, but confuse the reader with noise.
if (messages.errors.length > 1) {
messages.errors.length = 1;
}
return reject(new Error(messages.errors.join('\n\n')));
}
if (
process.env.CI &&
(typeof process.env.CI !== 'string' ||
process.env.CI.toLowerCase() !== 'false') &&
messages.warnings.length
) {
console.log(
chalk.yellow(
'\nTreating warnings as errors because process.env.CI = true.\n' +
'Most CI servers set it automatically.\n'
)
);
return reject(new Error(messages.warnings.join('\n\n')));
}
return resolve({
stats,
previousFileSizes,
warnings: messages.warnings,
});
});
});
}
function copyPublicFolder() {
fs.copySync(paths.appPublic, paths.appBuild, {
dereference: true,
filter: file => file !== paths.appHtml,
});
}
+166
View File
@@ -0,0 +1,166 @@
'use strict';
// Do this as the first thing so that any code reading it knows the right env.
process.env.BABEL_ENV = 'development';
process.env.NODE_ENV = 'development';
// Makes the script crash on unhandled rejections instead of silently
// ignoring them. In the future, promise rejections that are not handled will
// terminate the Node.js process with a non-zero exit code.
process.on('unhandledRejection', err => {
throw err;
});
// Ensure environment variables are read.
require('../config/env');
const fs = require('fs');
const chalk = require('react-dev-utils/chalk');
const webpack = require('webpack');
const WebpackDevServer = require('webpack-dev-server');
const clearConsole = require('react-dev-utils/clearConsole');
const checkRequiredFiles = require('react-dev-utils/checkRequiredFiles');
const {
choosePort,
createCompiler,
prepareProxy,
prepareUrls,
} = require('react-dev-utils/WebpackDevServerUtils');
const openBrowser = require('react-dev-utils/openBrowser');
const paths = require('../config/paths');
const configFactory = require('../config/webpack.config');
const createDevServerConfig = require('../config/webpackDevServer.config');
const useYarn = fs.existsSync(paths.yarnLockFile);
const isInteractive = process.stdout.isTTY;
// Warn and crash if required files are missing
if (!checkRequiredFiles([paths.appHtml, paths.appIndexJs])) {
process.exit(1);
}
// Tools like Cloud9 rely on this.
const DEFAULT_PORT = parseInt(process.env.PORT, 10) || 6015;
const HOST = process.env.HOST || '0.0.0.0';
if (process.env.HOST) {
console.log(
chalk.cyan(
`Attempting to bind to HOST environment variable: ${chalk.yellow(
chalk.bold(process.env.HOST)
)}`
)
);
console.log(
`If this was unintentional, check that you haven't mistakenly set it in your shell.`
);
console.log(
`Learn more here: ${chalk.yellow('https://bit.ly/CRA-advanced-config')}`
);
console.log();
}
// We require that you explicitly set browsers and do not fall back to
// browserslist defaults.
const { checkBrowsers } = require('react-dev-utils/browsersHelper');
checkBrowsers(paths.appPath, isInteractive)
.then(() => {
// We attempt to use the default port but if it is busy, we offer the user to
// run on a different port. `choosePort()` Promise resolves to the next free port.
return choosePort(HOST, DEFAULT_PORT);
})
.then(port => {
if (port == null) {
// We have not found a port.
return;
}
const config = configFactory('development');
const protocol = process.env.HTTPS === 'true' ? 'https' : 'http';
const appName = require(paths.appPackageJson).name;
const useTypeScript = fs.existsSync(paths.appTsConfig);
const tscCompileOnError = process.env.TSC_COMPILE_ON_ERROR === 'true';
const urls = prepareUrls(
protocol,
HOST,
port,
paths.publicUrlOrPath.slice(0, -1)
);
const devSocket = {
warnings: warnings =>
devServer.sockWrite(devServer.sockets, 'warnings', warnings),
errors: errors =>
devServer.sockWrite(devServer.sockets, 'errors', errors),
};
// Create a webpack compiler that is configured with custom messages.
const compiler = createCompiler({
appName,
config,
devSocket,
urls,
useYarn,
useTypeScript,
tscCompileOnError,
webpack,
});
// Load proxy config
const proxySetting = require(paths.appPackageJson).proxy;
const proxyConfig = prepareProxy(
proxySetting,
paths.appPublic,
paths.publicUrlOrPath
);
// Serve webpack assets generated by the compiler over a web server.
const serverConfig = createDevServerConfig(
proxyConfig,
urls.lanUrlForConfig
);
const devServer = new WebpackDevServer(compiler, serverConfig);
// Launch WebpackDevServer.
devServer.listen(port, HOST, err => {
if (err) {
return console.log(err);
}
if (isInteractive) {
clearConsole();
}
// We used to support resolving modules according to `NODE_PATH`.
// This now has been deprecated in favor of jsconfig/tsconfig.json
// This lets you use absolute paths in imports inside large monorepos:
if (process.env.NODE_PATH) {
console.log(
chalk.yellow(
'Setting NODE_PATH to resolve modules absolutely has been deprecated in favor of setting baseUrl in jsconfig.json (or tsconfig.json if you are using TypeScript) and will be removed in a future major release of create-react-app.'
)
);
console.log();
}
console.log(chalk.cyan('Starting the development server...\n'));
openBrowser(urls.localUrlForBrowser);
});
['SIGINT', 'SIGTERM'].forEach(function(sig) {
process.on(sig, function() {
devServer.close();
process.exit();
});
});
if (isInteractive || process.env.CI !== 'true') {
// Gracefully exit when stdin ends
process.stdin.on('end', function() {
devServer.close();
process.exit();
});
process.stdin.resume();
}
})
.catch(err => {
if (err && err.message) {
console.log(err.message);
}
process.exit(1);
});
+53
View File
@@ -0,0 +1,53 @@
'use strict';
// Do this as the first thing so that any code reading it knows the right env.
process.env.BABEL_ENV = 'test';
process.env.NODE_ENV = 'test';
process.env.PUBLIC_URL = '';
// Makes the script crash on unhandled rejections instead of silently
// ignoring them. In the future, promise rejections that are not handled will
// terminate the Node.js process with a non-zero exit code.
process.on('unhandledRejection', err => {
throw err;
});
// Ensure environment variables are read.
require('../config/env');
const jest = require('jest');
const execSync = require('child_process').execSync;
let argv = process.argv.slice(2);
function isInGitRepository() {
try {
execSync('git rev-parse --is-inside-work-tree', { stdio: 'ignore' });
return true;
} catch (e) {
return false;
}
}
function isInMercurialRepository() {
try {
execSync('hg --cwd . root', { stdio: 'ignore' });
return true;
} catch (e) {
return false;
}
}
// Watch unless on CI or explicitly running all tests
if (
!process.env.CI &&
argv.indexOf('--watchAll') === -1 &&
argv.indexOf('--watchAll=false') === -1
) {
// https://github.com/facebook/create-react-app/issues/5210
const hasSourceControl = isInGitRepository() || isInMercurialRepository();
argv.push(hasSourceControl ? '--watch' : '--watchAll');
}
jest.run(argv);
+2
View File
@@ -0,0 +1,2 @@
//import global style.
@import './assets/css/index.less';
+20
View File
@@ -0,0 +1,20 @@
import React from 'react';
import {BrowserRouter as Router} from "react-router-dom";
import {ConfigProvider} from 'antd';
import Frame from "./pages/Frame";
import en_US from 'antd/es/locale/en_US';
// global less 须放在Frame组件之后,不然会出现按需加载的less文件覆盖样式问题
import './App.less';
function App() {
return (
<Router>
<ConfigProvider locale={en_US}>
<Frame/>
</ConfigProvider>
</Router>
);
}
export default App;
-92
View File
@@ -1,92 +0,0 @@
<template>
<div class="nb-app">
<NprogressContainer/>
<router-view/>
</div>
</template>
<script>
import NprogressContainer from 'vue-nprogress/src/NprogressContainer'
export default {
data () {
return {
preference: this.$store.state.preference
}
},
computed: {},
components: {
NprogressContainer
},
mounted () {
let that = this
this.preference.httpFetch()
}
}
</script>
<style lang="less" rel="stylesheet/less">
@import "~font-awesome/css/font-awesome.css";
@import "./assets/css/app.less";
.nb-app {
height: 100%;
.nprogress-container {
position: fixed !important;
width: 100%;
height: 150px;
z-index: 2048;
pointer-events: none;
#nprogress {
//@color: #48e79a;
@color: #1ab394;
.bar {
background: @color;
}
.peg {
box-shadow: 0 0 10px @color, 0 0 5px @color;
}
.spinner-icon {
border-top-color: @color;
border-left-color: @color;
}
}
}
//所有的滚动条样式
::-webkit-scrollbar {
width: 6px;
height: 6px;
}
::-webkit-scrollbar-track-piece {
background-color: #eee;
margin: -2px;
}
::-webkit-scrollbar-thumb {
background: #aaa;
min-height: 150px;
min-width: 150px;
border-radius: 10px;
}
::-webkit-scrollbar-thumb:vertical:hover {
background: #555555
}
::-webkit-scrollbar-thumb:horizontal:hover {
background: #555555
}
}
</style>
-127
View File
@@ -1,127 +0,0 @@
//global css.
//Include font-awesome
//Include what we need in bootstrap.
@import "bootstrap/bootstrap.less";
@import "inspinia/style.less";
//Animated
@import "~animate.css/animate.min.css";
//element-ui
@import "~element-ui/lib/theme-chalk/index.css";
//使用自定义的主题
@import "global/border.less";
@import "global/button.less";
@import "global/color.less";
@import "global/font.less";
@import "global/layout.less";
@import "global/miscellaneous.less";
@import "global/responsive.less";
//h2被污染了
.el-notification__title {
margin-top: 0;
}
//手机端的弹出框太大了
@media (max-width: 768px) {
.el-message-box__wrapper {
.el-message-box {
width: 90%;
}
}
}
html, body {
font-family: "微软雅黑", Microsoft YaHei, "Helvetica Neue", Helvetica, Arial, sans-serif, "open sans";
font-size: 13px;
color: @text-color;
background-color: white;
img {
max-width: 100%;
}
}
//列表单元格的样式。
.nb-app {
//media-body下的p字体大小
.media-body {
p {
font-size: 13px;
}
}
.cell-title {
font-size: 17px;
color: @app-color-title;
.one-line;
a {
font-size: 17px;
color: @app-color-title;
&:hover {
color: @brand-primary;
}
}
}
.cell-content {
font-size: 12px;
color: @app-color-title;
letter-spacing: 0;
line-height: 18px;
}
.cell-description {
font-size: 12px;
color: @app-color-content;
letter-spacing: 0;
line-height: 24px;
}
}
//超链接颜色.
a {
color: @brand-primary;
&:hover, &:focus {
color: @brand-info;
}
}
//段落统一样式
p {
color: #333;
font-size: 15px;
padding: 0;
}
//每个页面导航处样式
.pedia-navigation {
margin-bottom: 10px;
border-bottom: 1px solid #E6E6E6;
.item, a {
font-size: 16px;
color: #778195;
margin-top: 15px;
margin-right: 20px;
display: inline-block;
box-sizing: content-box;
line-height: 30px;
&:hover, &.is-link-active, &.active {
color: @brand-primary;
border-bottom: 2px solid @brand-primary;
}
}
}
//markdown中默认图片剧中
p {
> img {
text-align: center;
}
}
-54
View File
@@ -1,54 +0,0 @@
/*!
* Bootstrap v3.3.7 (http://getbootstrap.com)
* Copyright 2011-2016 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/
// Core variables and mixins
@import "../inspinia/variables.less";
@import "~bootstrap/less/mixins.less";
// Reset and dependencies
@import "~bootstrap/less/normalize.less";
@import "~bootstrap/less/print.less";
//We DO NOT use bootstrap's icon. We use font-awesome
//@import "~bootstrap/less/glyphicons.less";
// Core CSS
@import "~bootstrap/less/scaffolding.less";
@import "~bootstrap/less/type.less";
@import "~bootstrap/less/code.less";
@import "~bootstrap/less/grid.less";
@import "~bootstrap/less/tables.less";
@import "~bootstrap/less/forms.less";
@import "~bootstrap/less/buttons.less";
// Components
@import "~bootstrap/less/component-animations.less";
@import "~bootstrap/less/dropdowns.less";
@import "~bootstrap/less/button-groups.less";
@import "~bootstrap/less/input-groups.less";
@import "~bootstrap/less/navs.less";
@import "~bootstrap/less/navbar.less";
@import "~bootstrap/less/breadcrumbs.less";
@import "~bootstrap/less/pagination.less";
@import "~bootstrap/less/pager.less";
@import "~bootstrap/less/labels.less";
@import "~bootstrap/less/badges.less";
@import "~bootstrap/less/jumbotron.less";
@import "~bootstrap/less/thumbnails.less";
@import "~bootstrap/less/alerts.less";
@import "~bootstrap/less/progress-bars.less";
@import "~bootstrap/less/media.less";
@import "~bootstrap/less/list-group.less";
@import "~bootstrap/less/panels.less";
@import "~bootstrap/less/responsive-embed.less";
@import "~bootstrap/less/wells.less";
@import "~bootstrap/less/close.less";
// Components w/ JavaScript
@import "~bootstrap/less/modals.less";
@import "~bootstrap/less/tooltip.less";
@import "~bootstrap/less/popovers.less";
@import "~bootstrap/less/carousel.less";
// Utility classes
@import "~bootstrap/less/utilities.less";
@import "~bootstrap/less/responsive-utilities.less";
+15 -19
View File
@@ -14,14 +14,11 @@
@gray-light: lighten(@gray-base, 46.7%); // #777
@gray-lighter: lighten(@gray-base, 93.5%); // #eee
//zhengxianqian Theme.
@brand-primary: #23B7E5;
@brand-success: #1ab394;
@brand-info: #5EC1C5;
@brand-warning: #FEC62E;
@brand-danger: #FE8768;
@brand-gray: #c2c2c2;
@brand-laxative: #B3EE3A;
@brand-primary: darken(#428bca, 6.5%); // #337ab7
@brand-success: #5cb85c;
@brand-info: #5bc0de;
@brand-warning: #f0ad4e;
@brand-danger: #d9534f;
//== Scaffolding
@@ -109,9 +106,9 @@
@border-radius-large: 6px;
@border-radius-small: 3px;
//** Global color for active items (e.g., navs or dropdowns).
//** Global color for active pendants (e.g., navs or dropdowns).
@component-active-color: #fff;
//** Global background color for active items (e.g., navs or dropdowns).
//** Global background color for active pendants (e.g., navs or dropdowns).
@component-active-bg: @brand-primary;
//** Width of the `border` for generating carets that indicate dropdowns.
@@ -193,7 +190,6 @@
//** `<input>` border color
@input-border: #ccc;
// TODO: Rename `@input-border-radius` to `@input-border-radius-base` in v4
//** Default `.form-control` border radius
// This has no effect on `<select>`s in some browsers, due to the limited stylability of `<select>`s in CSS.
@input-border-radius: @border-radius-base;
@@ -240,7 +236,7 @@
@dropdown-border: rgba(0,0,0,.15);
//** Dropdown menu `border-color` **for IE8**.
@dropdown-fallback-border: #ccc;
//** Divider color for between dropdown items.
//** Divider color for between dropdown pendants.
@dropdown-divider-bg: #e5e5e5;
//** Dropdown link text color.
@@ -678,22 +674,22 @@
//** List group border radius
@list-group-border-radius: @border-radius-base;
//** Background color of single list items on hover
//** Background color of single list pendants on hover
@list-group-hover-bg: #f5f5f5;
//** Text color of active list items
//** Text color of active list pendants
@list-group-active-color: @component-active-color;
//** Background color of active list items
//** Background color of active list pendants
@list-group-active-bg: @component-active-bg;
//** Border color of active list elements
@list-group-active-border: @list-group-active-bg;
//** Text color for content within active list items
//** Text color for content within active list pendants
@list-group-active-text-color: lighten(@list-group-active-bg, 40%);
//** Text color of disabled list items
//** Text color of disabled list pendants
@list-group-disabled-color: @gray-light;
//** Background color of disabled list items
//** Background color of disabled list pendants
@list-group-disabled-bg: @gray-lighter;
//** Text color for content within disabled list items
//** Text color for content within disabled list pendants
@list-group-disabled-text-color: @list-group-disabled-color;
@list-group-link-color: #555;
+1 -1
View File
@@ -36,6 +36,6 @@
}
.border-bottom {
border-bottom: 1px solid #eee;
border-bottom: 1px solid #F9F9F9;
}
+72 -20
View File
@@ -1,31 +1,83 @@
@import "variables";
.btn {
display: inline-block;
margin-bottom: 0;
font-weight: normal;
text-align: center;
white-space: nowrap;
vertical-align: middle;
-ms-touch-action: manipulation;
touch-action: manipulation;
cursor: pointer;
background-image: none;
border: 1px solid transparent;
padding: 6px 12px;
font-size: 14px;
line-height: 1.42857143;
border-radius: 4px;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.btn-action {
margin: 0 3px;
display: inline-block;
opacity: 0.85;
-webkit-transition: all 0.1s;
-o-transition: all 0.1s;
transition: all 0.1s;
cursor: pointer;
margin: 0 3px;
display: inline-block;
opacity: 0.85;
-webkit-transition: all 0.1s;
-o-transition: all 0.1s;
transition: all 0.1s;
cursor: pointer;
outline: none;
&:hover {
text-decoration: none;
opacity: 1;
-moz-transform: scale(1.2);
-webkit-transform: scale(1.2);
-o-transform: scale(1.2);
-ms-transform: scale(1.2);
transform: scale(1.2);
}
&:hover {
text-decoration: none;
opacity: 1;
-moz-transform: scale(1.2);
-webkit-transform: scale(1.2);
-o-transform: scale(1.2);
-ms-transform: scale(1.2);
transform: scale(1.2);
}
&:focus {
outline: none;
}
}
.btn-primary {
color: #fff;
background-color: #337ab7;
border-color: #2e6da4;
}
.btn-primary:focus,
.btn-primary.focus {
color: #fff;
background-color: #286090;
border-color: #122b40;
}
.btn-primary:hover {
color: #fff;
background-color: #286090;
border-color: #204d74;
}
.btn-sm {
padding: 5px 10px;
font-size: 12px;
line-height: 1.5;
border-radius: 3px;
}
//编辑区域按钮,鼠标一上去按钮变大
.action-buttons {
a {
.btn-action;
}
a {
.btn-action;
}
}
.cursor {
cursor: pointer;
cursor: pointer;
}
+94 -340
View File
@@ -1,359 +1,113 @@
@import "../inspinia/variables.less";
@import "./variables.less";
.bg-primary {
background-color: @brand-primary;
color: white;
}
.bg-primary{ background-color: @brand-primary; color: white;}
.bg-success{ background-color: @brand-success; color: white; }
.bg-info{ background-color: @brand-info; color: white; }
.bg-warning{ background-color: @brand-warning; color: white; }
.bg-danger{ background-color: @brand-danger; color: white; }
.bg-gray{ background-color: @brand-gray; color: white; }
.bg-laxative{ background-color: @brand-laxative; color: white; }
.bg-success {
background-color: @brand-success;
color: white;
}
.bg-info {
background-color: @brand-info;
color: white;
}
.bg-warning {
background-color: @brand-warning;
color: white;
}
.bg-danger {
background-color: @brand-danger;
color: white;
}
.bg-gray {
background-color: @brand-gray;
color: white;
}
.bg-laxative {
background-color: @brand-laxative;
color: white;
}
.text-primary {
color: @brand-primary;
}
.bg-navy {
background-color: #001F3F;
}
.bg-blue {
background-color: #0074D9;
}
.bg-aqua {
background-color: #7FDBFF;
}
.bg-aliceblue {
background-color: aliceblue;
}
.bg-pink {
background-color: pink;
}
.bg-azure {
background-color: azure;
}
.bg-teal {
background-color: #39CCCC;
}
.bg-olive {
background-color: #3D9970;
}
.bg-green {
background-color: #2ECC40;
}
.bg-lime {
background-color: #01FF70;
}
.bg-yellow {
background-color: #FFDC00;
}
.bg-pink {
color: pink;
}
.bg-orange {
background-color: #FF851B;
}
.bg-red {
background-color: #FF4136;
}
.bg-fuchsia {
background-color: #F012BE;
}
.bg-purple {
background-color: #B10DC9;
}
.bg-maroon {
background-color: #85144B;
}
.bg-white {
background-color: #FFFFFF;
}
.bg-gray {
background-color: #AAAAAA;
}
.bg-silver {
background-color: #DDDDDD;
}
.text-primary{ color: @brand-primary;}
.text-success{ color: @brand-success; }
.text-info{ color: @brand-info; }
.text-warning{ color: @brand-warning; }
.text-danger{ color: @brand-danger; }
.text-gray{ color: @brand-gray; }
.text-laxative{ color: @brand-laxative; }
.text-theme { color: @primary-color; }
.bg-navy { background-color: #001F3F;}
.bg-blue { background-color: #0074D9;}
.bg-aqua { background-color: #7FDBFF;}
.bg-aliceblue { background-color: aliceblue;}
.bg-pink { background-color: pink;}
.bg-azure { background-color: azure;}
.bg-teal { background-color: #39CCCC;}
.bg-olive { background-color: #3D9970;}
.bg-green { background-color: #2ECC40;}
.bg-lime { background-color: #01FF70;}
.bg-yellow { background-color: #FFDC00;}
.bg-pink { color: pink; }
.bg-orange { background-color: #FF851B;}
.bg-red { background-color: #FF4136;}
.bg-fuchsia { background-color: #F012BE;}
.bg-purple { background-color: #B10DC9;}
.bg-maroon { background-color: #85144B;}
.bg-white { background-color: #FFFFFF;}
.bg-gray { background-color: #AAAAAA;}
.bg-silver { background-color: #DDDDDD;}
.bg-silver-white {
background-color: #EEEEEE;
background-color: #EEEEEE;
}
.bg-black { background-color: #111111;}
.bg-black {
background-color: #111111;
}
.bg-111{ background-color:#111 }
.bg-222{ background-color:#222 }
.bg-333{ background-color:#333 }
.bg-444{ background-color:#444 }
.bg-555{ background-color:#555 }
.bg-666{ background-color:#666 }
.bg-777{ background-color:#777 }
.bg-888{ background-color:#888 }
.bg-999{ background-color:#999 }
.bg-aaa{ background-color:#aaa }
.bg-bbb{ background-color:#bbb }
.bg-ccc{ background-color:#ccc }
.bg-ddd{ background-color:#ddd }
.bg-eee{ background-color:#eee }
.bg-111 {
background-color: #111
}
.bg-222 {
background-color: #222
}
.bg-333 {
background-color: #333
}
.bg-444 {
background-color: #444
}
.bg-555 {
background-color: #555
}
.bg-666 {
background-color: #666
}
.bg-777 {
background-color: #777
}
.bg-888 {
background-color: #888
}
.bg-999 {
background-color: #999
}
.bg-aaa {
background-color: #aaa
}
.bg-bbb {
background-color: #bbb
}
.bg-ccc {
background-color: #ccc
}
.bg-ddd {
background-color: #ddd
}
.bg-eee {
background-color: #eee
}
/* Colors */
.navy {
color: #001F3F;
}
.navy { color: #001F3F;}
.blue { color: #0074D9;}
.aqua { color: #7FDBFF;}
.teal { color: #39CCCC;}
.olive { color: #3D9970;}
.green { color: #2ECC40;}
.lime { color: #01FF70;}
.yellow { color: #FFDC00;}
.pink { color: pink; }
.orange { color: #FF851B;}
.red { color: #FF4136;}
.fuchsia { color: #F012BE;}
.purple { color: #B10DC9;}
.maroon { color: #85144B;}
.white { color: #FFFFFF;}
.silver { color: #DDDDDD;}
.gray { color: #AAAAAA;}
.black { color: #111111;}
.blue {
color: #0074D9;
}
.aqua {
color: #7FDBFF;
}
.color-111{color:#111}
.color-222{color:#222}
.color-333{color:#333}
.color-444{color:#444}
.color-555{color:#555}
.color-666{color:#666}
.color-777{color:#777}
.color-888{color:#888}
.color-999{color:#999}
.color-aaa{color:#aaa}
.color-bbb{color:#bbb}
.color-ccc{color:#ccc}
.color-ddd{color:#ddd}
.color-eee{color:#eee}
.teal {
color: #39CCCC;
}
.olive {
color: #3D9970;
}
.color-text { color: #660E7A;}
.color-doc { color: #295496;}
.color-xls { color: #1E6C41;}
.color-ppt { color: #D04324;}
.color-pdf { color: #E40B0B;}
.color-audio { color: #5bc0de;}
.color-video { color: #5cb85c;}
.color-image { color: #0074D9;}
.color-archive { color: #4437f2;}
.green {
color: #2ECC40;
}
.color-light-active{ color: #ffc60c;}
.color-light-inactive{ color:#ccc;}
.lime {
color: #01FF70;
}
.yellow {
color: #FFDC00;
}
.pink {
color: pink;
}
.orange {
color: #FF851B;
}
.red {
color: #FF4136;
}
.fuchsia {
color: #F012BE;
}
.purple {
color: #B10DC9;
}
.maroon {
color: #85144B;
}
.white {
color: #FFFFFF;
}
.silver {
color: #DDDDDD;
}
.gray {
color: #AAAAAA;
}
.black {
color: #111111;
}
.color-111 {
color: #111
}
.color-222 {
color: #222
}
.color-333 {
color: #333
}
.color-444 {
color: #444
}
.color-555 {
color: #555
}
.color-666 {
color: #666
}
.color-777 {
color: #777
}
.color-888 {
color: #888
}
.color-999 {
color: #999
}
.color-aaa {
color: #aaa
}
.color-bbb {
color: #bbb
}
.color-ccc {
color: #ccc
}
.color-ddd {
color: #ddd
}
.color-eee {
color: #eee
}
.color-text {
color: #660E7A;
}
.color-doc {
color: #295496;
}
.color-xls {
color: #1E6C41;
}
.color-ppt {
color: #D04324;
}
.color-pdf {
color: #E40B0B;
}
.color-audio {
color: #5bc0de;
}
.color-video {
color: #5cb85c;
}
.color-image {
color: #0074D9;
}
.color-archive {
color: #4437f2;
}
.color-light-active {
color: #ffc60c;
}
.color-light-inactive {
color: #ccc;
}
+87 -76
View File
@@ -1,132 +1,143 @@
#layout{
.margin(@from,@end,@step){
.mX(@f,@e,@s) when (@e >= @f){
.m@{e}{
margin:@e*1px;
/**
全局常用样式定义
使用ml、pt等缩写表示常用的布局方式,数字表示像素值
比如ml10表示margin-left:10px;
*/
#layout {
.margin(@from,@end,@step) {
.mX(@f,@e,@s) when (@e >= @f) {
.m@{e} {
margin: @e*1px;
}
.mt@{e}{
margin-top:@e*1px;
.mt@{e} {
margin-top: @e*1px;
}
.mr@{e}{
margin-right:@e*1px;
.mr@{e} {
margin-right: @e*1px;
}
.mb@{e}{
.mb@{e} {
margin-bottom: @e*1px;
}
.ml@{e}{
.ml@{e} {
margin-left: @e*1px;
}
.mv@{e}{
.mv@{e} {
margin-top: @e*1px;
margin-bottom: @e*1px;
}
.mh@{e}{
.mh@{e} {
margin-left: @e*1px;
margin-right: @e*1px*1px;
}
.mX(@f,@e - @s,@s);
.mX(@f, @e - @s, @s);
}
.mX(@from,@end,@step);
.mX(@from, @end, @step);
}
.padding(@from,@end,@step){
.pX(@f,@e,@s) when (@e >= @f){
.p@{e}{
padding:@e*1px;
.padding(@from,@end,@step) {
.pX(@f,@e,@s) when (@e >= @f) {
.p@{e} {
padding: @e*1px;
}
.pt@{e}{
padding-top:@e*1px;
.pt@{e} {
padding-top: @e*1px;
}
.pr@{e}{
padding-right:@e*1px;
.pr@{e} {
padding-right: @e*1px;
}
.pb@{e}{
.pb@{e} {
padding-bottom: @e*1px;
}
.pl@{e}{
.pl@{e} {
padding-left: @e*1px;
}
.pv@{e}{
.pv@{e} {
padding-top: @e*1px;
padding-bottom: @e*1px;
}
.ph@{e}{
.ph@{e} {
padding-left: @e*1px;
padding-right: @e*1px;
}
.pX(@f,@e - @s,@s);
.pX(@f, @e - @s, @s);
}
.pX(@from,@end,@step);
.pX(@from, @end, @step);
}
.width(@from,@end,@step){
.wX(@f,@e,@s) when (@e >= @f){
.w@{e}{
width:@e*1px;
.width(@from,@end,@step) {
.wX(@f,@e,@s) when (@e >= @f) {
.w@{e} {
width: @e*1px;
}
.w@{e}m{
max-width:@e*1px;
.w@{e}m {
max-width: @e*1px;
}
.w@{e}n{
min-width:@e*1px;
.w@{e}n {
min-width: @e*1px;
}
.w@{e}i{
width:@e*1px!important;
.w@{e}i {
width: @e*1px !important;
}
.wX(@f,@e - @s,@s);
.wX(@f, @e - @s, @s);
}
.wX(@from,@end,@step);
.wX(@from, @end, @step);
}
.height(@from,@end,@step){
.hX(@f,@e,@s) when (@e >= @f){
.h@{e}{
height:@e*1px;
.height(@from,@end,@step) {
.hX(@f,@e,@s) when (@e >= @f) {
.h@{e} {
height: @e*1px;
}
.lh@{e}{
line-height:@e*1px;
.lh@{e} {
line-height: @e*1px;
}
.h@{e}m{
max-height:@e*1px;
.h@{e}m {
max-height: @e*1px;
}
.h@{e}n{
min-height:@e*1px;
.h@{e}n {
min-height: @e*1px;
}
.h@{e}i{
height:@e*1px!important;
.h@{e}i {
height: @e*1px !important;
}
.hX(@f,@e - @s,@s);
.hX(@f, @e - @s, @s);
}
.hX(@from,@end,@step);
.hX(@from, @end, @step);
}
}
.wp20{
width:20%;
.wp20 {
width: 20%;
}
.wp25{
width:25%;
.wp25 {
width: 25%;
}
.wp33{
width:33%;
.wp33 {
width: 33%;
}
.wp100{
width:100%;
.wp100 {
width: 100%;
}
.wp50{
width:50%;
.wp50 {
width: 50%;
}
.hp100{
height:100%;
.hp100 {
height: 100%;
}
.hp50{
.hp50 {
height: 50%;
}
#layout > .margin(20,200,5);
#layout > .margin(0,19,1);
#layout > .padding(20,200,5);
#layout > .padding(0,19,1);
#layout > .width(20,400,10);
#layout > .width(0,19,1);
#layout > .height(20,400,10);
#layout > .height(0,19,1);
#layout > .margin(20, 200, 5);
#layout > .margin(0, 19, 1);
#layout > .padding(20, 200, 5);
#layout > .padding(0, 19, 1);
#layout > .width(20, 400, 5);
#layout > .width(0, 19, 1);
#layout > .height(20, 400, 5);
#layout > .height(0, 19, 1);
+128 -44
View File
@@ -1,66 +1,150 @@
@import "variables";
.compulsory {
&:before {
content: "*";
color: red;
}
&:before {
content: "*";
color: red;
}
}
.limit-hints {
font-size: 10px;
color: #aaaaaa;
float: right;
font-size: 10px;
color: #aaaaaa;
float: right;
}
.hover-underline {
cursor: pointer;
&:hover {
text-decoration: underline;
}
cursor: pointer;
&:hover {
text-decoration: underline;
}
}
.btn-file {
overflow: hidden;
position: relative;
vertical-align: middle;
cursor: pointer;
> input {
position: absolute;
top: 0;
right: 0;
margin: 0;
opacity: 0;
filter: alpha(opacity=0);
font-size: 23px;
height: 100%;
width: 100%;
direction: ltr;
cursor: pointer;
}
}
//超出三行使用点点点
.list-text-restriction {
display: -webkit-box;
-webkit-box-orient: vertical;
overflow: hidden;
position: relative;
line-height: 17px;
max-height: 51px;
-webkit-line-clamp: 3;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-box-orient: vertical;
overflow: hidden;
position: relative;
line-height: 17px;
max-height: 51px;
-webkit-line-clamp: 3;
text-overflow: ellipsis;
}
.one-line {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.inline-block {
display: inline-block;
display: inline-block;
}
.overflow-hidden {
overflow: hidden;
}
overflow: hidden;
}
//讨厌的outline
a {
outline: none;
&:focus, &:hover, &:active {
outline: none;
}
}
//制造一个手机容器
.mobile-container {
max-width: 400px;
border: 1px solid #eee;
padding: 10px;
margin: 10px auto;
display: block;
background-color: white;
}
//按照字母来wrap,不然有些老长老长
.wrap-word {
word-wrap: break-word;
}
.text-left {
text-align: left;
}
.text-center {
text-align: center;
}
.text-right {
text-align: right;
}
.display-none {
display: none !important;
}
.pull-right {
float: right !important;
}
.pull-left {
float: left !important;
}
//超链接导航样式
.link {
color: #1890ff;
text-decoration: none;
background-color: transparent;
outline: none;
cursor: pointer;
transition: color 0.3s;
text-decoration-skip: objects;
}
//头像
.avatar-large {
border-radius: 50%;
width: 120px;
height: 120px;
cursor: pointer;
}
.avatar-middle {
border-radius: 50%;
width: 80px;
height: 80px;
cursor: pointer;
}
.avatar-small {
border-radius: 50%;
width: 60px;
height: 60px;
cursor: pointer;
}
.relative {
position: relative;
}
.hot-area {
position: relative;
&:after {
position: absolute;
top: -10px;
right: -10px;
bottom: -10px;
left: -10px;
content: '';
}
}
+11
View File
@@ -0,0 +1,11 @@
//超出三行使用点点点
.line-ellipsis(@rows,@line-height) {
display: -webkit-box;
-webkit-box-orient: vertical;
overflow: hidden;
position: relative;
line-height: @line-height;
max-height: @line-height * @rows;
-webkit-line-clamp: @rows;
text-overflow: ellipsis;
}
+20 -13
View File
@@ -19,18 +19,25 @@
}
//浏览器滚动条样式
.thin-scrollbar {
::-webkit-scrollbar {
width: 3px;
height: 3px;
}
::-webkit-scrollbar-track {
background: transparent;
}
::-webkit-scrollbar-thumb {
background: rgba(0, 0, 0, 0.3);
}
//滚动条样式
::-webkit-scrollbar {
width: 10px;
height: 10px
}
::-webkit-scrollbar-thumb {
transition: all .3s ease;
border-color: transparent;
background-color: rgba(0, 0, 0, .1);
z-index: 40
}
::-webkit-scrollbar-thumb:hover {
transition: all .3s ease;
background-color: rgba(0, 0, 0, .15)
}
::-webkit-scrollbar-corner {
background-color: #eaeaeb
}
+16 -7
View File
@@ -1,13 +1,22 @@
@import "../inspinia/variables.less";
@import "../bootstrap/variables.less";
//custom basic color
@brand-primary: #215891;
@brand-success: #67C23A;
@brand-info: #2DB7F5;
@brand-warning: #E6A23C;
@brand-danger: #FF756F;
@brand-gray: #c2c2c2;
@brand-laxative: #B3EE3A;
//主题默认颜色
@primary-color: @brand-primary;
//左侧菜单宽度
@sidebar-width: 200px;
//顶部导航栏宽度
@top-navigation-height: 45px;
@app-color-title: #474747;
@app-color-content: #8A8A8A;
//上方导航栏高度
@frame-header-height: 80px;
//下方蓝眼云盘高度
@power-footer-height: 40px;
+17
View File
@@ -0,0 +1,17 @@
//使用自定义的主题
@import "global/animation";
@import "global/border";
@import "global/button";
@import "global/color";
@import "global/font";
@import "global/layout";
@import "global/miscellaneous";
@import "global/responsive";
html, body {
font-family: "微软雅黑", Microsoft YaHei, "Helvetica Neue", Helvetica, Arial, sans-serif, "open sans";
font-size: 13px;
color: @text-color;
}
@@ -1,72 +0,0 @@
.label {
background-color: @light-gray;
color: @label-badget-color;
font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;
font-size: 10px;
font-weight: 600;
padding: 3px 8px;
text-shadow: none;
}
.badge {
background-color: @light-gray;
color: @label-badget-color;
font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;
font-size: 11px;
font-weight: 600;
padding-bottom: 4px;
padding-left: 6px;
padding-right: 6px;
text-shadow: none;
}
.label-primary, .badge-primary {
background-color: @navy;
color: #FFFFFF;
}
.label-success, .badge-success {
background-color: @blue;
color: #FFFFFF;
}
.label-warning, .badge-warning {
background-color: @yellow;
color: #FFFFFF;
}
.label-warning-light, .badge-warning-light {
background-color: @yellow;
color: #ffffff;
}
.label-danger, .badge-danger {
background-color: @red;
color: #FFFFFF;
}
.label-info, .badge-info {
background-color: @lazur;
color: #FFFFFF;
}
.label-inverse, .badge-inverse {
background-color: #262626;
color: #FFFFFF;
}
.label-laxative, .badge-laxative {
background-color: @green;
color: #FFFFFF;
}
.label-white, .badge-white {
background-color: #FFFFFF;
color: #5E5E5E;
}
.label-white, .badge-disable {
background-color: #2A2E36;
color: #8B91A0;
}
File diff suppressed because it is too large Load Diff
-309
View File
@@ -1,309 +0,0 @@
.btn {
border-radius: @btn-border-radius;
}
.float-e-margins .btn {
margin-bottom: 5px;
}
.btn-w-m {
min-width: 120px;
}
.btn-primary.btn-outline {
color: @navy;
}
.btn-success.btn-outline {
color: @blue;
}
.btn-info.btn-outline {
color: @lazur;
}
.btn-warning.btn-outline {
color: @yellow;
}
.btn-danger.btn-outline {
color: @red;
}
.btn-primary.btn-outline:hover,
.btn-success.btn-outline:hover,
.btn-info.btn-outline:hover,
.btn-warning.btn-outline:hover,
.btn-danger.btn-outline:hover {
color: #fff;
}
.btn-primary {
background-color: @navy;
border-color: @navy;
color: #FFFFFF;
}
.btn-primary:hover, .btn-primary:focus, .btn-primary:active, .btn-primary.active, .open .dropdown-toggle.btn-primary, .btn-primary:active:focus, .btn-primary:active:hover, .btn-primary.active:hover, .btn-primary.active:focus {
background-color: darken(@navy, 3%);
border-color: darken(@navy, 3%);
color: #FFFFFF;
}
.btn-primary:active, .btn-primary.active, .open .dropdown-toggle.btn-primary {
background-image: none;
}
.btn-primary.disabled, .btn-primary.disabled:hover, .btn-primary.disabled:focus, .btn-primary.disabled:active, .btn-primary.disabled.active, .btn-primary[disabled], .btn-primary[disabled]:hover, .btn-primary[disabled]:focus, .btn-primary[disabled]:active, .btn-primary.active[disabled], fieldset[disabled] .btn-primary, fieldset[disabled] .btn-primary:hover, fieldset[disabled] .btn-primary:focus, fieldset[disabled] .btn-primary:active, fieldset[disabled] .btn-primary.active {
background-color: lighten(@navy, 4%);
border-color: lighten(@navy, 4%);
}
.btn-success {
background-color: @blue;
border-color: @blue;
color: #FFFFFF;
}
.btn-success:hover, .btn-success:focus, .btn-success:active, .btn-success.active, .open .dropdown-toggle.btn-success, .btn-success:active:focus, .btn-success:active:hover, .btn-success.active:hover, .btn-success.active:focus {
background-color: darken(@blue, 3%);
border-color: darken(@blue, 3%);
color: #FFFFFF;
}
.btn-success:active, .btn-success.active, .open .dropdown-toggle.btn-success {
background-image: none;
}
.btn-success.disabled, .btn-success.disabled:hover, .btn-success.disabled:focus, .btn-success.disabled:active, .btn-success.disabled.active, .btn-success[disabled], .btn-success[disabled]:hover, .btn-success[disabled]:focus, .btn-success[disabled]:active, .btn-success.active[disabled], fieldset[disabled] .btn-success, fieldset[disabled] .btn-success:hover, fieldset[disabled] .btn-success:focus, fieldset[disabled] .btn-success:active, fieldset[disabled] .btn-success.active {
background-color: lighten(@blue, 4%);
border-color: lighten(@blue, 4%);
}
.btn-info {
background-color: @lazur;
border-color: @lazur;
color: #FFFFFF;
}
.btn-info:hover, .btn-info:focus, .btn-info:active, .btn-info.active, .open .dropdown-toggle.btn-info, .btn-info:active:focus, .btn-info:active:hover, .btn-info.active:hover, .btn-info.active:focus {
background-color: darken(@lazur, 3%);
border-color: darken(@lazur, 3%);
color: #FFFFFF;
}
.btn-info:active, .btn-info.active, .open .dropdown-toggle.btn-info {
background-image: none;
}
.btn-info.disabled, .btn-info.disabled:hover, .btn-info.disabled:focus, .btn-info.disabled:active, .btn-info.disabled.active, .btn-info[disabled], .btn-info[disabled]:hover, .btn-info[disabled]:focus, .btn-info[disabled]:active, .btn-info.active[disabled], fieldset[disabled] .btn-info, fieldset[disabled] .btn-info:hover, fieldset[disabled] .btn-info:focus, fieldset[disabled] .btn-info:active, fieldset[disabled] .btn-info.active {
background-color: lighten(@lazur, 4%);
border-color: lighten(@lazur, 4%);
}
.btn-default {
color: inherit;
background: white;
border: 1px solid @border-color;
}
.btn-default:hover, .btn-default:focus, .btn-default:active, .btn-default.active, .open .dropdown-toggle.btn-default, .btn-default:active:focus, .btn-default:active:hover, .btn-default.active:hover, .btn-default.active:focus {
color: inherit;
border: 1px solid #d2d2d2;
}
.btn-default:active, .btn-default.active, .open .dropdown-toggle.btn-default {
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.15) inset;
}
.btn-default.disabled, .btn-default.disabled:hover, .btn-default.disabled:focus, .btn-default.disabled:active, .btn-default.disabled.active, .btn-default[disabled], .btn-default[disabled]:hover, .btn-default[disabled]:focus, .btn-default[disabled]:active, .btn-default.active[disabled], fieldset[disabled] .btn-default, fieldset[disabled] .btn-default:hover, fieldset[disabled] .btn-default:focus, fieldset[disabled] .btn-default:active, fieldset[disabled] .btn-default.active {
color: #cacaca;
}
.btn-warning {
background-color: @yellow;
border-color: @yellow;
color: #FFFFFF;
}
.btn-warning:hover, .btn-warning:focus, .btn-warning:active, .btn-warning.active, .open .dropdown-toggle.btn-warning, .btn-warning:active:focus, .btn-warning:active:hover, .btn-warning.active:hover, .btn-warning.active:focus {
background-color: darken(@yellow, 3%);
border-color: darken(@yellow, 3%);
color: #FFFFFF;
}
.btn-warning:active, .btn-warning.active, .open .dropdown-toggle.btn-warning {
background-image: none;
}
.btn-warning.disabled, .btn-warning.disabled:hover, .btn-warning.disabled:focus, .btn-warning.disabled:active, .btn-warning.disabled.active, .btn-warning[disabled], .btn-warning[disabled]:hover, .btn-warning[disabled]:focus, .btn-warning[disabled]:active, .btn-warning.active[disabled], fieldset[disabled] .btn-warning, fieldset[disabled] .btn-warning:hover, fieldset[disabled] .btn-warning:focus, fieldset[disabled] .btn-warning:active, fieldset[disabled] .btn-warning.active {
background-color: lighten(@yellow, 4%);
border-color: lighten(@yellow, 4%);
}
.btn-danger {
background-color: @red;
border-color: @red;
color: #FFFFFF;
}
.btn-danger:hover, .btn-danger:focus, .btn-danger:active, .btn-danger.active, .open .dropdown-toggle.btn-danger, .btn-danger:active:focus, .btn-danger:active:hover, .btn-danger.active:hover, .btn-danger.active:focus {
background-color: darken(@red, 3%);
border-color: darken(@red, 3%);
color: #FFFFFF;
}
.btn-danger:active, .btn-danger.active, .open .dropdown-toggle.btn-danger {
background-image: none;
}
.btn-danger.disabled, .btn-danger.disabled:hover, .btn-danger.disabled:focus, .btn-danger.disabled:active, .btn-danger.disabled.active, .btn-danger[disabled], .btn-danger[disabled]:hover, .btn-danger[disabled]:focus, .btn-danger[disabled]:active, .btn-danger.active[disabled], fieldset[disabled] .btn-danger, fieldset[disabled] .btn-danger:hover, fieldset[disabled] .btn-danger:focus, fieldset[disabled] .btn-danger:active, fieldset[disabled] .btn-danger.active {
background-color: lighten(@red, 4%);
border-color: lighten(@red, 4%);
}
.btn-link {
color: inherit;
}
.btn-link:hover, .btn-link:focus, .btn-link:active, .btn-link.active, .open .dropdown-toggle.btn-link {
color: @navy;
text-decoration: none;
}
.btn-link:active, .btn-link.active, .open .dropdown-toggle.btn-link {
background-image: none;
}
.btn-link.disabled, .btn-link.disabled:hover, .btn-link.disabled:focus, .btn-link.disabled:active, .btn-link.disabled.active, .btn-link[disabled], .btn-link[disabled]:hover, .btn-link[disabled]:focus, .btn-link[disabled]:active, .btn-link.active[disabled], fieldset[disabled] .btn-link, fieldset[disabled] .btn-link:hover, fieldset[disabled] .btn-link:focus, fieldset[disabled] .btn-link:active, fieldset[disabled] .btn-link.active {
color: #cacaca;
}
.btn-white {
color: inherit;
background: white;
border: 1px solid @border-color;
}
.btn-white:hover, .btn-white:focus, .btn-white:active, .btn-white.active, .open .dropdown-toggle.btn-white, .btn-white:active:focus, .btn-white:active:hover, .btn-white.active:hover, .btn-white.active:focus {
color: inherit;
border: 1px solid #d2d2d2;
}
.btn-white:active, .btn-white.active {
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.15) inset;
}
.btn-white:active, .btn-white.active, .open .dropdown-toggle.btn-white {
background-image: none;
}
.btn-white.disabled, .btn-white.disabled:hover, .btn-white.disabled:focus, .btn-white.disabled:active, .btn-white.disabled.active, .btn-white[disabled], .btn-white[disabled]:hover, .btn-white[disabled]:focus, .btn-white[disabled]:active, .btn-white.active[disabled], fieldset[disabled] .btn-white, fieldset[disabled] .btn-white:hover, fieldset[disabled] .btn-white:focus, fieldset[disabled] .btn-white:active, fieldset[disabled] .btn-white.active {
color: #cacaca;
}
.form-control, .form-control:focus, .has-error .form-control:focus, .has-success .form-control:focus, .has-warning .form-control:focus, .navbar-collapse, .navbar-form, .navbar-form-custom .form-control:focus, .navbar-form-custom .form-control:hover, .open .btn.dropdown-toggle, .panel, .popover, .progress, .progress-bar {
box-shadow: none;
}
.btn-outline {
color: inherit;
background-color: transparent;
transition: all .5s;
}
.btn-rounded {
border-radius: 50px;
}
.btn-large-dim {
width: 90px;
height: 90px;
font-size: 42px;
}
button.dim {
display: inline-block;
text-decoration: none;
text-transform: uppercase;
text-align: center;
padding-top: 6px;
margin-right: 10px;
position: relative;
cursor: pointer;
border-radius: 5px;
font-weight: 600;
margin-bottom: 20px !important;
}
button.dim:active {
top: 3px;
}
button.btn-primary.dim {
box-shadow: inset 0 0 0 darken(@navy, 6%), 0 5px 0 0 darken(@navy, 6%), 0 10px 5px #999;
}
button.btn-primary.dim:active {
box-shadow: inset 0 0 0 darken(@navy, 6%), 0 2px 0 0 darken(@navy, 6%), 0 5px 3px #999;
}
button.btn-default.dim {
box-shadow: inset 0 0 0 darken(@dark-gray, 6%), 0 5px 0 0 darken(@dark-gray, 6%), 0 10px 5px #999;
}
button.btn-default.dim:active {
box-shadow: inset 0 0 0 darken(@dark-gray, 6%), 0 2px 0 0 darken(@dark-gray, 6%), 0 5px 3px #999;
}
button.btn-warning.dim {
box-shadow: inset 0 0 0 darken(@yellow, 6%), 0 5px 0 0 darken(@yellow, 6%), 0 10px 5px #999;
}
button.btn-warning.dim:active {
box-shadow: inset 0 0 0 darken(@yellow, 6%), 0 2px 0 0 darken(@yellow, 6%), 0 5px 3px #999;
}
button.btn-info.dim {
box-shadow: inset 0 0 0 darken(@lazur, 6%), 0 5px 0 0 darken(@lazur, 6%), 0 10px 5px #999;
}
button.btn-info.dim:active {
box-shadow: inset 0 0 0 darken(@lazur, 6%), 0 2px 0 0 darken(@lazur, 6%), 0 5px 3px #999;
}
button.btn-success.dim {
box-shadow: inset 0 0 0 darken(@blue, 6%), 0 5px 0 0 darken(@blue, 6%), 0 10px 5px #999;
}
button.btn-success.dim:active {
box-shadow: inset 0 0 0 darken(@blue, 6%), 0 2px 0 0 darken(@blue, 6%), 0 5px 3px #999;
}
button.btn-danger.dim {
box-shadow: inset 0 0 0 darken(@red, 6%), 0 5px 0 0 darken(@red, 6%), 0 10px 5px #999;
}
button.btn-danger.dim:active {
box-shadow: inset 0 0 0 darken(@red, 6%), 0 2px 0 0 darken(@red, 6%), 0 5px 3px #999;
}
button.dim:before {
font-size: 50px;
line-height: 1em;
font-weight: normal;
color: #fff;
display: block;
padding-top: 10px;
}
button.dim:active:before {
top: 7px;
font-size: 50px;
}
.btn:focus {
outline: none !important;
}
-119
View File
@@ -1,119 +0,0 @@
#small-chat {
position: fixed;
bottom: 20px;
right: 20px;
z-index: 100;
}
#small-chat .badge {
position: absolute;
top: -3px;
right: -4px;
}
.open-small-chat {
height: 38px;
width: 38px;
display: block;
background: #1ab394;
padding: 9px 8px;
text-align: center;
color: #fff;
border-radius: 50%;
}
.open-small-chat:hover {
color: white;
background: #1ab394;
}
.small-chat-box {
display: none;
position: fixed;
bottom: 20px;
right: 75px;
background: #fff;
border: 1px solid @border-color;
width: 230px;
height: 320px;
border-radius: 4px;
}
.small-chat-box.ng-small-chat {
display: block;
}
.small-chat-box.active {
display: block;
}
.small-chat-box {
.heading {
background: @nav-bg;
padding: 8px 15px;
font-weight: bold;
color: #fff;
}
.chat-date {
opacity: 0.6;
font-size: 10px;
font-weight: normal;
}
.content {
padding: 15px 15px;
.author-name {
font-weight: bold;
margin-bottom: 3px;
font-size: 11px;
}
> div {
padding-bottom: 20px;
}
.chat-message {
padding: 5px 10px;
border-radius: 6px;
font-size: 11px;
line-height: 14px;
max-width: 80%;
background: #f3f3f4;
margin-bottom: 10px;
}
.chat-message.active {
background: #1ab394;
color: #fff;
}
.left {
text-align: left;
clear: both;
.chat-message {
float: left;
}
}
.right {
text-align: right;
clear: both;
.chat-message {
float: right;
}
}
}
.form-chat {
padding: 10px 10px;
}
}
File diff suppressed because it is too large Load Diff
-15
View File
@@ -1,15 +0,0 @@
.border-radius (@radius: 3px) {
-webkit-border-radius: @radius;
-moz-border-radius: @radius;
border-radius: @radius;
-moz-background-clip: padding;
-webkit-background-clip: padding-box;
background-clip: padding-box;
}
.opacity (@opacity: 0.5) {
-webkit-opacity: @opacity;
-moz-opacity: @opacity;
opacity: @opacity;
}
File diff suppressed because it is too large Load Diff
-191
View File
@@ -1,191 +0,0 @@
.sidebard-panel {
width: 220px;
background: darken(@gray, 3%);
padding: 10px 20px;
position: absolute;
right: 0;
}
.sidebard-panel .feed-element img.img-circle {
width: 32px;
height: 32px;
}
.sidebard-panel .feed-element, .media-body, .sidebard-panel p {
font-size: 12px;
}
.sidebard-panel .feed-element {
margin-top: 20px;
padding-bottom: 0;
}
.sidebard-panel .list-group {
margin-bottom: 10px;
}
.sidebard-panel .list-group .list-group-item {
padding: 5px 0;
font-size: 12px;
border: 0;
}
.sidebar-content .wrapper, .wrapper.sidebar-content {
padding-right: 230px !important;
}
// Right sidebar
#right-sidebar {
background-color: #fff;
border-left: 1px solid #e7eaec;
border-top: 1px solid #e7eaec;
overflow: hidden;
position: fixed;
top: 60px;
width: 260px !important;
z-index: 1009;
bottom: 0;
right: -260px;
}
#right-sidebar.sidebar-open {
right: 0;
}
#right-sidebar.sidebar-open.sidebar-top {
top: 0;
border-top: none;
}
.sidebar-container {
ul.nav-tabs {
border: none;
}
ul.nav-tabs.navs-4 li {
width: 25%;
}
ul.nav-tabs.navs-3 li {
width: 33.3333%;
}
ul.nav-tabs.navs-2 li {
width: 50%;
}
ul.nav-tabs li {
border: none;
}
ul.nav-tabs li a {
border: none;
padding: 12px 10px;
margin: 0;
border-radius: 0;
background: @nav-bg;
color: #fff;
text-align: center;
border-right: 1px solid lighten(@nav-bg, 2%);
}
ul.nav-tabs li.active a {
border: none;
background: #f9f9f9;
color: @text-color;
font-weight: bold;
}
.nav-tabs > li.active > a:hover,
.nav-tabs > li.active > a:focus {
border: none;
}
ul.sidebar-list {
margin: 0;
padding: 0;
}
ul.sidebar-list li {
border-bottom: 1px solid @border-color;
padding: 15px 20px;
list-style: none;
font-size: 12px;
}
ul.sidebar-list li:nth-child(2n+2) {
// background: #f9f9f9;
}
.sidebar-message:nth-child(2n+2) {
background: #f9f9f9;
}
ul.sidebar-list li a {
text-decoration: none;
color: inherit;
}
.sidebar-content {
padding: 15px 20px;
font-size: 12px;
}
.date-item {
}
.sidebar-title {
background: #f9f9f9;
padding: 20px;
border-bottom: 1px solid @border-color;
h3 {
margin-bottom: 3px;
padding-left: 2px;
}
}
.tab-content {
h4 {
margin-bottom: 5px;
}
}
.sidebar-message > a > .pull-left {
margin-right: 10px;
}
.sidebar-message > a {
text-decoration: none;
color: inherit;
}
.sidebar-message {
padding: 15px 20px;
}
.sidebar-message:hover {
// background: #f9f9f9;
}
.sidebar-message .message-avatar {
height: 38px;
width: 38px;
border-radius: 50%;
}
.setings-item {
padding: 15px 20px;
border-bottom: 1px solid @border-color;
}
}
-997
View File
@@ -1,997 +0,0 @@
/*
* Usage:
*
* <div class="sk-spinner sk-spinner-rotating-plane"></div>
*
*/
.sk-spinner-rotating-plane.sk-spinner {
width: 30px;
height: 30px;
background-color: @spin-color;
margin: @spin-margin;
-webkit-animation: sk-rotatePlane 1.2s infinite ease-in-out;
animation: sk-rotatePlane 1.2s infinite ease-in-out;
}
@-webkit-keyframes sk-rotatePlane {
0% {
-webkit-transform: perspective(120px) rotateX(0deg) rotateY(0deg);
transform: perspective(120px) rotateX(0deg) rotateY(0deg);
}
50% {
-webkit-transform: perspective(120px) rotateX(-180.1deg) rotateY(0deg);
transform: perspective(120px) rotateX(-180.1deg) rotateY(0deg);
}
100% {
-webkit-transform: perspective(120px) rotateX(-180deg) rotateY(-179.9deg);
transform: perspective(120px) rotateX(-180deg) rotateY(-179.9deg);
}
}
@keyframes sk-rotatePlane {
0% {
-webkit-transform: perspective(120px) rotateX(0deg) rotateY(0deg);
transform: perspective(120px) rotateX(0deg) rotateY(0deg);
}
50% {
-webkit-transform: perspective(120px) rotateX(-180.1deg) rotateY(0deg);
transform: perspective(120px) rotateX(-180.1deg) rotateY(0deg);
}
100% {
-webkit-transform: perspective(120px) rotateX(-180deg) rotateY(-179.9deg);
transform: perspective(120px) rotateX(-180deg) rotateY(-179.9deg);
}
}
/*
* Usage:
*
* <div class="sk-spinner sk-spinner-double-bounce">
* <div class="sk-double-bounce1"></div>
* <div class="sk-double-bounce2"></div>
* </div>
*
*/
.sk-spinner-double-bounce.sk-spinner {
width: 40px;
height: 40px;
position: relative;
margin: @spin-margin;
}
.sk-spinner-double-bounce .sk-double-bounce1, .sk-spinner-double-bounce .sk-double-bounce2 {
width: 100%;
height: 100%;
border-radius: 50%;
background-color: @spin-color;
opacity: 0.6;
position: absolute;
top: 0;
left: 0;
-webkit-animation: sk-doubleBounce 2s infinite ease-in-out;
animation: sk-doubleBounce 2s infinite ease-in-out;
}
.sk-spinner-double-bounce .sk-double-bounce2 {
-webkit-animation-delay: -1s;
animation-delay: -1s;
}
@-webkit-keyframes sk-doubleBounce {
0%, 100% {
-webkit-transform: scale(0);
transform: scale(0);
}
50% {
-webkit-transform: scale(1);
transform: scale(1);
}
}
@keyframes sk-doubleBounce {
0%, 100% {
-webkit-transform: scale(0);
transform: scale(0);
}
50% {
-webkit-transform: scale(1);
transform: scale(1);
}
}
/*
* Usage:
*
* <div class="sk-spinner sk-spinner-wave">
* <div class="sk-rect1"></div>
* <div class="sk-rect2"></div>
* <div class="sk-rect3"></div>
* <div class="sk-rect4"></div>
* <div class="sk-rect5"></div>
* </div>
*
*/
.sk-spinner-wave.sk-spinner {
margin: @spin-margin;
width: 50px;
height: 30px;
text-align: center;
font-size: 10px;
}
.sk-spinner-wave div {
background-color: @spin-color;
height: 100%;
width: 6px;
display: inline-block;
-webkit-animation: sk-waveStretchDelay 1.2s infinite ease-in-out;
animation: sk-waveStretchDelay 1.2s infinite ease-in-out;
}
.sk-spinner-wave .sk-rect2 {
-webkit-animation-delay: -1.1s;
animation-delay: -1.1s;
}
.sk-spinner-wave .sk-rect3 {
-webkit-animation-delay: -1s;
animation-delay: -1s;
}
.sk-spinner-wave .sk-rect4 {
-webkit-animation-delay: -0.9s;
animation-delay: -0.9s;
}
.sk-spinner-wave .sk-rect5 {
-webkit-animation-delay: -0.8s;
animation-delay: -0.8s;
}
@-webkit-keyframes sk-waveStretchDelay {
0%, 40%, 100% {
-webkit-transform: scaleY(0.4);
transform: scaleY(0.4);
}
20% {
-webkit-transform: scaleY(1);
transform: scaleY(1);
}
}
@keyframes sk-waveStretchDelay {
0%, 40%, 100% {
-webkit-transform: scaleY(0.4);
transform: scaleY(0.4);
}
20% {
-webkit-transform: scaleY(1);
transform: scaleY(1);
}
}
/*
* Usage:
*
* <div class="sk-spinner sk-spinner-wandering-cubes">
* <div class="sk-cube1"></div>
* <div class="sk-cube2"></div>
* </div>
*
*/
.sk-spinner-wandering-cubes.sk-spinner {
margin: @spin-margin;
width: 32px;
height: 32px;
position: relative;
}
.sk-spinner-wandering-cubes .sk-cube1, .sk-spinner-wandering-cubes .sk-cube2 {
background-color: @spin-color;
width: 10px;
height: 10px;
position: absolute;
top: 0;
left: 0;
-webkit-animation: sk-wanderingCubeMove 1.8s infinite ease-in-out;
animation: sk-wanderingCubeMove 1.8s infinite ease-in-out;
}
.sk-spinner-wandering-cubes .sk-cube2 {
-webkit-animation-delay: -0.9s;
animation-delay: -0.9s;
}
@-webkit-keyframes sk-wanderingCubeMove {
25% {
-webkit-transform: translateX(42px) rotate(-90deg) scale(0.5);
transform: translateX(42px) rotate(-90deg) scale(0.5);
}
50% {
/* Hack to make FF rotate in the right direction */
-webkit-transform: translateX(42px) translateY(42px) rotate(-179deg);
transform: translateX(42px) translateY(42px) rotate(-179deg);
}
50.1% {
-webkit-transform: translateX(42px) translateY(42px) rotate(-180deg);
transform: translateX(42px) translateY(42px) rotate(-180deg);
}
75% {
-webkit-transform: translateX(0px) translateY(42px) rotate(-270deg) scale(0.5);
transform: translateX(0px) translateY(42px) rotate(-270deg) scale(0.5);
}
100% {
-webkit-transform: rotate(-360deg);
transform: rotate(-360deg);
}
}
@keyframes sk-wanderingCubeMove {
25% {
-webkit-transform: translateX(42px) rotate(-90deg) scale(0.5);
transform: translateX(42px) rotate(-90deg) scale(0.5);
}
50% {
/* Hack to make FF rotate in the right direction */
-webkit-transform: translateX(42px) translateY(42px) rotate(-179deg);
transform: translateX(42px) translateY(42px) rotate(-179deg);
}
50.1% {
-webkit-transform: translateX(42px) translateY(42px) rotate(-180deg);
transform: translateX(42px) translateY(42px) rotate(-180deg);
}
75% {
-webkit-transform: translateX(0px) translateY(42px) rotate(-270deg) scale(0.5);
transform: translateX(0px) translateY(42px) rotate(-270deg) scale(0.5);
}
100% {
-webkit-transform: rotate(-360deg);
transform: rotate(-360deg);
}
}
/*
* Usage:
*
* <div class="sk-spinner sk-spinner-pulse"></div>
*
*/
.sk-spinner-pulse.sk-spinner {
width: 40px;
height: 40px;
margin: @spin-margin;
background-color: @spin-color;
border-radius: 100%;
-webkit-animation: sk-pulseScaleOut 1s infinite ease-in-out;
animation: sk-pulseScaleOut 1s infinite ease-in-out;
}
@-webkit-keyframes sk-pulseScaleOut {
0% {
-webkit-transform: scale(0);
transform: scale(0);
}
100% {
-webkit-transform: scale(1);
transform: scale(1);
opacity: 0;
}
}
@keyframes sk-pulseScaleOut {
0% {
-webkit-transform: scale(0);
transform: scale(0);
}
100% {
-webkit-transform: scale(1);
transform: scale(1);
opacity: 0;
}
}
/*
* Usage:
*
* <div class="sk-spinner sk-spinner-chasing-dots">
* <div class="sk-dot1"></div>
* <div class="sk-dot2"></div>
* </div>
*
*/
.sk-spinner-chasing-dots.sk-spinner {
margin: @spin-margin;
width: 40px;
height: 40px;
position: relative;
text-align: center;
-webkit-animation: sk-chasingDotsRotate 2s infinite linear;
animation: sk-chasingDotsRotate 2s infinite linear;
}
.sk-spinner-chasing-dots .sk-dot1, .sk-spinner-chasing-dots .sk-dot2 {
width: 60%;
height: 60%;
display: inline-block;
position: absolute;
top: 0;
background-color: @spin-color;
border-radius: 100%;
-webkit-animation: sk-chasingDotsBounce 2s infinite ease-in-out;
animation: sk-chasingDotsBounce 2s infinite ease-in-out;
}
.sk-spinner-chasing-dots .sk-dot2 {
top: auto;
bottom: 0;
-webkit-animation-delay: -1s;
animation-delay: -1s;
}
@-webkit-keyframes sk-chasingDotsRotate {
100% {
-webkit-transform: rotate(360deg);
transform: rotate(360deg);
}
}
@keyframes sk-chasingDotsRotate {
100% {
-webkit-transform: rotate(360deg);
transform: rotate(360deg);
}
}
@-webkit-keyframes sk-chasingDotsBounce {
0%, 100% {
-webkit-transform: scale(0);
transform: scale(0);
}
50% {
-webkit-transform: scale(1);
transform: scale(1);
}
}
@keyframes sk-chasingDotsBounce {
0%, 100% {
-webkit-transform: scale(0);
transform: scale(0);
}
50% {
-webkit-transform: scale(1);
transform: scale(1);
}
}
/*
* Usage:
*
* <div class="sk-spinner sk-spinner-three-bounce">
* <div class="sk-bounce1"></div>
* <div class="sk-bounce2"></div>
* <div class="sk-bounce3"></div>
* </div>
*
*/
.sk-spinner-three-bounce.sk-spinner {
margin: @spin-margin;
width: 70px;
text-align: center;
}
.sk-spinner-three-bounce div {
width: 18px;
height: 18px;
background-color: @spin-color;
border-radius: 100%;
display: inline-block;
-webkit-animation: sk-threeBounceDelay 1.4s infinite ease-in-out;
animation: sk-threeBounceDelay 1.4s infinite ease-in-out;
/* Prevent first frame from flickering when animation starts */
-webkit-animation-fill-mode: both;
animation-fill-mode: both;
}
.sk-spinner-three-bounce .sk-bounce1 {
-webkit-animation-delay: -0.32s;
animation-delay: -0.32s;
}
.sk-spinner-three-bounce .sk-bounce2 {
-webkit-animation-delay: -0.16s;
animation-delay: -0.16s;
}
@-webkit-keyframes sk-threeBounceDelay {
0%, 80%, 100% {
-webkit-transform: scale(0);
transform: scale(0);
}
40% {
-webkit-transform: scale(1);
transform: scale(1);
}
}
@keyframes sk-threeBounceDelay {
0%, 80%, 100% {
-webkit-transform: scale(0);
transform: scale(0);
}
40% {
-webkit-transform: scale(1);
transform: scale(1);
}
}
/*
* Usage:
*
* <div class="sk-spinner sk-spinner-circle">
* <div class="sk-circle1 sk-circle"></div>
* <div class="sk-circle2 sk-circle"></div>
* <div class="sk-circle3 sk-circle"></div>
* <div class="sk-circle4 sk-circle"></div>
* <div class="sk-circle5 sk-circle"></div>
* <div class="sk-circle6 sk-circle"></div>
* <div class="sk-circle7 sk-circle"></div>
* <div class="sk-circle8 sk-circle"></div>
* <div class="sk-circle9 sk-circle"></div>
* <div class="sk-circle10 sk-circle"></div>
* <div class="sk-circle11 sk-circle"></div>
* <div class="sk-circle12 sk-circle"></div>
* </div>
*
*/
.sk-spinner-circle.sk-spinner {
margin: @spin-margin;
width: 22px;
height: 22px;
position: relative;
}
.sk-spinner-circle .sk-circle {
width: 100%;
height: 100%;
position: absolute;
left: 0;
top: 0;
}
.sk-spinner-circle .sk-circle:before {
content: '';
display: block;
margin: @spin-margin;
width: 20%;
height: 20%;
background-color: @spin-color;
border-radius: 100%;
-webkit-animation: sk-circleBounceDelay 1.2s infinite ease-in-out;
animation: sk-circleBounceDelay 1.2s infinite ease-in-out;
/* Prevent first frame from flickering when animation starts */
-webkit-animation-fill-mode: both;
animation-fill-mode: both;
}
.sk-spinner-circle .sk-circle2 {
-webkit-transform: rotate(30deg);
-ms-transform: rotate(30deg);
transform: rotate(30deg);
}
.sk-spinner-circle .sk-circle3 {
-webkit-transform: rotate(60deg);
-ms-transform: rotate(60deg);
transform: rotate(60deg);
}
.sk-spinner-circle .sk-circle4 {
-webkit-transform: rotate(90deg);
-ms-transform: rotate(90deg);
transform: rotate(90deg);
}
.sk-spinner-circle .sk-circle5 {
-webkit-transform: rotate(120deg);
-ms-transform: rotate(120deg);
transform: rotate(120deg);
}
.sk-spinner-circle .sk-circle6 {
-webkit-transform: rotate(150deg);
-ms-transform: rotate(150deg);
transform: rotate(150deg);
}
.sk-spinner-circle .sk-circle7 {
-webkit-transform: rotate(180deg);
-ms-transform: rotate(180deg);
transform: rotate(180deg);
}
.sk-spinner-circle .sk-circle8 {
-webkit-transform: rotate(210deg);
-ms-transform: rotate(210deg);
transform: rotate(210deg);
}
.sk-spinner-circle .sk-circle9 {
-webkit-transform: rotate(240deg);
-ms-transform: rotate(240deg);
transform: rotate(240deg);
}
.sk-spinner-circle .sk-circle10 {
-webkit-transform: rotate(270deg);
-ms-transform: rotate(270deg);
transform: rotate(270deg);
}
.sk-spinner-circle .sk-circle11 {
-webkit-transform: rotate(300deg);
-ms-transform: rotate(300deg);
transform: rotate(300deg);
}
.sk-spinner-circle .sk-circle12 {
-webkit-transform: rotate(330deg);
-ms-transform: rotate(330deg);
transform: rotate(330deg);
}
.sk-spinner-circle .sk-circle2:before {
-webkit-animation-delay: -1.1s;
animation-delay: -1.1s;
}
.sk-spinner-circle .sk-circle3:before {
-webkit-animation-delay: -1s;
animation-delay: -1s;
}
.sk-spinner-circle .sk-circle4:before {
-webkit-animation-delay: -0.9s;
animation-delay: -0.9s;
}
.sk-spinner-circle .sk-circle5:before {
-webkit-animation-delay: -0.8s;
animation-delay: -0.8s;
}
.sk-spinner-circle .sk-circle6:before {
-webkit-animation-delay: -0.7s;
animation-delay: -0.7s;
}
.sk-spinner-circle .sk-circle7:before {
-webkit-animation-delay: -0.6s;
animation-delay: -0.6s;
}
.sk-spinner-circle .sk-circle8:before {
-webkit-animation-delay: -0.5s;
animation-delay: -0.5s;
}
.sk-spinner-circle .sk-circle9:before {
-webkit-animation-delay: -0.4s;
animation-delay: -0.4s;
}
.sk-spinner-circle .sk-circle10:before {
-webkit-animation-delay: -0.3s;
animation-delay: -0.3s;
}
.sk-spinner-circle .sk-circle11:before {
-webkit-animation-delay: -0.2s;
animation-delay: -0.2s;
}
.sk-spinner-circle .sk-circle12:before {
-webkit-animation-delay: -0.1s;
animation-delay: -0.1s;
}
@-webkit-keyframes sk-circleBounceDelay {
0%, 80%, 100% {
-webkit-transform: scale(0);
transform: scale(0);
}
40% {
-webkit-transform: scale(1);
transform: scale(1);
}
}
@keyframes sk-circleBounceDelay {
0%, 80%, 100% {
-webkit-transform: scale(0);
transform: scale(0);
}
40% {
-webkit-transform: scale(1);
transform: scale(1);
}
}
/*
* Usage:
*
* <div class="sk-spinner sk-spinner-cube-grid">
* <div class="sk-cube"></div>
* <div class="sk-cube"></div>
* <div class="sk-cube"></div>
* <div class="sk-cube"></div>
* <div class="sk-cube"></div>
* <div class="sk-cube"></div>
* <div class="sk-cube"></div>
* <div class="sk-cube"></div>
* <div class="sk-cube"></div>
* </div>
*
*/
.sk-spinner-cube-grid {
/*
* Spinner positions
* 1 2 3
* 4 5 6
* 7 8 9
*/
}
.sk-spinner-cube-grid.sk-spinner {
width: 30px;
height: 30px;
margin: @spin-margin;
}
.sk-spinner-cube-grid .sk-cube {
width: 33%;
height: 33%;
background-color: @spin-color;
float: left;
-webkit-animation: sk-cubeGridScaleDelay 1.3s infinite ease-in-out;
animation: sk-cubeGridScaleDelay 1.3s infinite ease-in-out;
}
.sk-spinner-cube-grid .sk-cube:nth-child(1) {
-webkit-animation-delay: 0.2s;
animation-delay: 0.2s;
}
.sk-spinner-cube-grid .sk-cube:nth-child(2) {
-webkit-animation-delay: 0.3s;
animation-delay: 0.3s;
}
.sk-spinner-cube-grid .sk-cube:nth-child(3) {
-webkit-animation-delay: 0.4s;
animation-delay: 0.4s;
}
.sk-spinner-cube-grid .sk-cube:nth-child(4) {
-webkit-animation-delay: 0.1s;
animation-delay: 0.1s;
}
.sk-spinner-cube-grid .sk-cube:nth-child(5) {
-webkit-animation-delay: 0.2s;
animation-delay: 0.2s;
}
.sk-spinner-cube-grid .sk-cube:nth-child(6) {
-webkit-animation-delay: 0.3s;
animation-delay: 0.3s;
}
.sk-spinner-cube-grid .sk-cube:nth-child(7) {
-webkit-animation-delay: 0s;
animation-delay: 0s;
}
.sk-spinner-cube-grid .sk-cube:nth-child(8) {
-webkit-animation-delay: 0.1s;
animation-delay: 0.1s;
}
.sk-spinner-cube-grid .sk-cube:nth-child(9) {
-webkit-animation-delay: 0.2s;
animation-delay: 0.2s;
}
@-webkit-keyframes sk-cubeGridScaleDelay {
0%, 70%, 100% {
-webkit-transform: scale3D(1, 1, 1);
transform: scale3D(1, 1, 1);
}
35% {
-webkit-transform: scale3D(0, 0, 1);
transform: scale3D(0, 0, 1);
}
}
@keyframes sk-cubeGridScaleDelay {
0%, 70%, 100% {
-webkit-transform: scale3D(1, 1, 1);
transform: scale3D(1, 1, 1);
}
35% {
-webkit-transform: scale3D(0, 0, 1);
transform: scale3D(0, 0, 1);
}
}
/*
* Usage:
*
* <div class="sk-spinner sk-spinner-wordpress">
* <span class="sk-inner-circle"></span>
* </div>
*
*/
.sk-spinner-wordpress.sk-spinner {
background-color: @spin-color;
width: 30px;
height: 30px;
border-radius: 30px;
position: relative;
margin: @spin-margin;
-webkit-animation: sk-innerCircle 1s linear infinite;
animation: sk-innerCircle 1s linear infinite;
}
.sk-spinner-wordpress .sk-inner-circle {
display: block;
background-color: #fff;
width: 8px;
height: 8px;
position: absolute;
border-radius: 8px;
top: 5px;
left: 5px;
}
@-webkit-keyframes sk-innerCircle {
0% {
-webkit-transform: rotate(0);
transform: rotate(0);
}
100% {
-webkit-transform: rotate(360deg);
transform: rotate(360deg);
}
}
@keyframes sk-innerCircle {
0% {
-webkit-transform: rotate(0);
transform: rotate(0);
}
100% {
-webkit-transform: rotate(360deg);
transform: rotate(360deg);
}
}
/*
* Usage:
*
* <div class="sk-spinner sk-spinner-fading-circle">
* <div class="sk-circle1 sk-circle"></div>
* <div class="sk-circle2 sk-circle"></div>
* <div class="sk-circle3 sk-circle"></div>
* <div class="sk-circle4 sk-circle"></div>
* <div class="sk-circle5 sk-circle"></div>
* <div class="sk-circle6 sk-circle"></div>
* <div class="sk-circle7 sk-circle"></div>
* <div class="sk-circle8 sk-circle"></div>
* <div class="sk-circle9 sk-circle"></div>
* <div class="sk-circle10 sk-circle"></div>
* <div class="sk-circle11 sk-circle"></div>
* <div class="sk-circle12 sk-circle"></div>
* </div>
*
*/
.sk-spinner-fading-circle.sk-spinner {
margin: @spin-margin;
width: 22px;
height: 22px;
position: relative;
}
.sk-spinner-fading-circle .sk-circle {
width: 100%;
height: 100%;
position: absolute;
left: 0;
top: 0;
}
.sk-spinner-fading-circle .sk-circle:before {
content: '';
display: block;
margin: @spin-margin;
width: 18%;
height: 18%;
background-color: @spin-color;
border-radius: 100%;
-webkit-animation: sk-circleFadeDelay 1.2s infinite ease-in-out;
animation: sk-circleFadeDelay 1.2s infinite ease-in-out;
/* Prevent first frame from flickering when animation starts */
-webkit-animation-fill-mode: both;
animation-fill-mode: both;
}
.sk-spinner-fading-circle .sk-circle2 {
-webkit-transform: rotate(30deg);
-ms-transform: rotate(30deg);
transform: rotate(30deg);
}
.sk-spinner-fading-circle .sk-circle3 {
-webkit-transform: rotate(60deg);
-ms-transform: rotate(60deg);
transform: rotate(60deg);
}
.sk-spinner-fading-circle .sk-circle4 {
-webkit-transform: rotate(90deg);
-ms-transform: rotate(90deg);
transform: rotate(90deg);
}
.sk-spinner-fading-circle .sk-circle5 {
-webkit-transform: rotate(120deg);
-ms-transform: rotate(120deg);
transform: rotate(120deg);
}
.sk-spinner-fading-circle .sk-circle6 {
-webkit-transform: rotate(150deg);
-ms-transform: rotate(150deg);
transform: rotate(150deg);
}
.sk-spinner-fading-circle .sk-circle7 {
-webkit-transform: rotate(180deg);
-ms-transform: rotate(180deg);
transform: rotate(180deg);
}
.sk-spinner-fading-circle .sk-circle8 {
-webkit-transform: rotate(210deg);
-ms-transform: rotate(210deg);
transform: rotate(210deg);
}
.sk-spinner-fading-circle .sk-circle9 {
-webkit-transform: rotate(240deg);
-ms-transform: rotate(240deg);
transform: rotate(240deg);
}
.sk-spinner-fading-circle .sk-circle10 {
-webkit-transform: rotate(270deg);
-ms-transform: rotate(270deg);
transform: rotate(270deg);
}
.sk-spinner-fading-circle .sk-circle11 {
-webkit-transform: rotate(300deg);
-ms-transform: rotate(300deg);
transform: rotate(300deg);
}
.sk-spinner-fading-circle .sk-circle12 {
-webkit-transform: rotate(330deg);
-ms-transform: rotate(330deg);
transform: rotate(330deg);
}
.sk-spinner-fading-circle .sk-circle2:before {
-webkit-animation-delay: -1.1s;
animation-delay: -1.1s;
}
.sk-spinner-fading-circle .sk-circle3:before {
-webkit-animation-delay: -1s;
animation-delay: -1s;
}
.sk-spinner-fading-circle .sk-circle4:before {
-webkit-animation-delay: -0.9s;
animation-delay: -0.9s;
}
.sk-spinner-fading-circle .sk-circle5:before {
-webkit-animation-delay: -0.8s;
animation-delay: -0.8s;
}
.sk-spinner-fading-circle .sk-circle6:before {
-webkit-animation-delay: -0.7s;
animation-delay: -0.7s;
}
.sk-spinner-fading-circle .sk-circle7:before {
-webkit-animation-delay: -0.6s;
animation-delay: -0.6s;
}
.sk-spinner-fading-circle .sk-circle8:before {
-webkit-animation-delay: -0.5s;
animation-delay: -0.5s;
}
.sk-spinner-fading-circle .sk-circle9:before {
-webkit-animation-delay: -0.4s;
animation-delay: -0.4s;
}
.sk-spinner-fading-circle .sk-circle10:before {
-webkit-animation-delay: -0.3s;
animation-delay: -0.3s;
}
.sk-spinner-fading-circle .sk-circle11:before {
-webkit-animation-delay: -0.2s;
animation-delay: -0.2s;
}
.sk-spinner-fading-circle .sk-circle12:before {
-webkit-animation-delay: -0.1s;
animation-delay: -0.1s;
}
@-webkit-keyframes sk-circleFadeDelay {
0%, 39%, 100% {
opacity: 0;
}
40% {
opacity: 1;
}
}
@keyframes sk-circleFadeDelay {
0%, 39%, 100% {
opacity: 0;
}
40% {
opacity: 1;
}
}
-31
View File
@@ -1,31 +0,0 @@
/*
*
* INSPINIA - Responsive Admin Theme
* version 2.6.2
*
*/
// Variables, Mixins
@import "variables.less";
@import "mixins.less";
// INSPINIA Theme Elements
@import "typography.less";
@import "buttons.less";
@import "badgets_labels.less";
@import "elements.less";
@import "sidebar.less";
@import "base.less";
@import "pages.less";
@import "chat.less";
@import "spinners.less";
-32
View File
@@ -1,32 +0,0 @@
h1, h2, h3, h4, h5, h6 {
font-weight: 100;
}
h1 {
font-size: 30px;
}
h2 {
font-size: 24px;
}
h3 {
font-size: 16px;
}
h4 {
font-size: 14px;
}
h5 {
font-size: 12px;
}
h6 {
font-size: 10px;
}
h3, h4, h5 {
margin-top: 5px;
font-weight: 600;
}
-76
View File
@@ -1,76 +0,0 @@
@import "../bootstrap/variables.less";
//Bootstrap Theme.
//@brand-primary: darken(#428bca, 6.5%); // #337ab7
//@brand-success: #5cb85c;
//@brand-info: #5bc0de;
//@brand-warning: #f0ad4e;
//@brand-danger: #d9534f;
//@brand-gray: #c2c2c2;
//Angulr Theme.
//@brand-primary: #7266ba;
//@brand-info: #23b7e5;
//@brand-success: #27c24c;
//@brand-warning: #fad733;
//@brand-danger: #f05050;
//@brand-light: #edf1f2;
//@brand-dark: #3a3f51;
//@brand-black: #1c2b36;
//@brand-gray: #c2c2c2;
//@brand-laxative: #B3EE3A;
//Inspina Theme.
//@brand-primary: #1ab394;
//@brand-success: #1c84c6;
//@brand-info: #23c6c8;
//@brand-warning: #f8ac59;
//@brand-danger: #ED5565;
//@brand-gray: #c2c2c2;
//@brand-laxative: #B3EE3A;
@navy: @brand-primary; // Primary color
@dark-gray: @brand-gray; // Default color
@blue: @brand-success; // Success color
@lazur: @brand-info; // Info color
@yellow: @brand-warning; // Warrning color
@red: @brand-danger; // Danger color
@green: @brand-laxative; // Danger color
@gray-base: #000;
@gray-darker: lighten(@gray-base, 13.5%); // #222
@gray-dark: lighten(@gray-base, 20%); // #333
@gray: lighten(@gray-base, 33.5%); // #555
@gray-light: lighten(@gray-base, 46.7%); // #777
@gray-lighter: lighten(@gray-base, 93.5%); // #eee
// Various colors
@text-color: #676a6c; // Body text
@gray: #f3f3f4; // Background wrapper color
@light-gray: #D1DADE; // Default label, badget
@label-badget-color: #5E5E5E;
@light-blue: #f3f6fb;
// Spiner color and margin
@spin-color: @navy;
@spin-margin: 0 auto;
// IBOX colors ( default panel colors)
@border-color: #e7eaec; // IBox border
@ibox-title-bg: #ffffff; // IBox Background header
@ibox-content-bg: #ffffff; // IBox Background content
//Sidebar width
@sidebar-width: 170px;
// Boxed layout width
@boxed-width: 1200px;
//Border radius for buttons
@btn-border-radius: 3px;
//Navigation
@nav-bg: #2F4050;
@nav-text-color: #a7b1c2;
-1
View File
@@ -1 +0,0 @@
@import "~bootstrap/less/variables.less";

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.6 KiB

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 3.4 KiB

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Before

Width:  |  Height:  |  Size: 943 B

After

Width:  |  Height:  |  Size: 943 B

Before

Width:  |  Height:  |  Size: 828 B

After

Width:  |  Height:  |  Size: 828 B

+1
View File
@@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1543321997742" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3887" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M160 32c-12 0-24.8 4.8-33.6 14.4S112 68 112 80v864c0 12 4.8 24.8 14.4 33.6C136 987.2 148 992 160 992h704c12 0 24.8-4.8 33.6-14.4C907.2 968 912 956 912 944V304L640 32H160z" fill="#FF5562" p-id="3888"></path><path d="M912 304H688c-12 0-24.8-4.8-33.6-14.4-9.6-8.8-14.4-21.6-14.4-33.6V32l272 272z" fill="#FFBBC0" p-id="3889"></path><path d="M669.6 491.2c0-1.6 0.8-4 0-6.4V369.6c0-4.8-2.4-8.8-5.6-12-4-3.2-8-4-12.8-3.2l-250.4 70.4c-7.2 1.6-12 7.2-12 14.4v275.2c-9.6-4-20.8-6.4-32.8-6.4-8.8 0-17.6 0.8-26.4 3.2-40.8 11.2-66.4 43.2-58.4 72.8 6.4 23.2 30.4 37.6 60.8 37.6 8.8 0 17.6-1.6 26.4-3.2 36.8-10.4 60.8-36.8 60-63.2 0.8-1.6 0.8-3.2 0.8-5.6V570.4l220-61.6v136c-9.6-4-20.8-6.4-32.8-6.4-8.8 0-17.6 0.8-26.4 3.2-40.8 11.2-66.4 43.2-58.4 72.8C528 737.6 552 752 582.4 752c8.8 0 17.6-0.8 26.4-3.2 36-9.6 60-36 60-62.4 0.8-1.6 0.8-3.2 0.8-5.6V491.2z m-250.4 48v-53.6l220-61.6v53.6l-220 61.6z" fill="#FFFFFF" p-id="3890"></path></svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

+1
View File
@@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1543300132402" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2107" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M533.947184 38.36489h65.880106v88.119185c117.859409 0.660894 235.60867-1.211639 353.35793 0.660894 25.102953-2.533427 44.81962 16.962943 42.506492 42.07691 1.872533 216.993492-0.440596 434.097133 1.112505 651.090626-1.112505 22.250094 2.191965 46.923466-10.695466 66.640133-16.081751 11.455494-36.899909 10.023557-55.625236 10.904749-110.25913-0.550745-220.408111-0.330447-330.656225-0.330447v88.119185h-68.843113c-167.657764-30.621417-335.745108-58.709407-503.722304-88.119185-0.110149-256.977572 0-513.955144 0-770.822567 168.858388-29.519927 337.826924-58.268811 506.685311-88.339483z" fill="#2A5699" p-id="2108"></path><path d="M599.816275 159.528769h363.491637v704.953477h-363.491637v-88.119185h286.38735v-44.059592h-286.38735v-55.07449h286.38735v-44.059593h-286.38735v-55.07449h286.38735v-44.059592h-286.38735v-55.074491h286.38735v-44.059592h-286.38735v-55.074491h286.38735v-44.059592h-286.38735v-55.07449h286.38735v-44.059593h-286.38735v-77.104286zM254.829667 354.162018c20.928306-1.211639 41.856613-2.092831 62.784919-3.19432 14.649814 74.350562 29.619061 148.590975 45.491529 222.61109 12.446835-76.443393 26.215457-152.666487 39.543484-228.999731 22.029796-0.771043 44.059592-1.982682 65.97924-3.30447-24.89367 106.734362-46.703168 214.349917-73.909966 320.423385-18.39488 9.582961-45.932125-0.440596-67.741623 1.10149-14.649814-72.90761-31.722906-145.38564-44.819621-218.645727-12.898446 71.156242-29.641091 141.651589-44.390039 212.367235a4187.754101 4187.754101 0 0 1-63.666111-3.866229c-18.284731-96.931103-39.763782-193.190297-56.836874-290.341698 18.835476-0.881192 37.792115-1.652235 56.627591-2.313129 11.33433 70.164901 24.221761 139.999355 34.146184 210.274404 15.508976-72.037433 31.37043-144.074867 46.791287-216.1123z" fill="#FFFFFF" p-id="2109"></path></svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Before

Width:  |  Height:  |  Size: 943 B

After

Width:  |  Height:  |  Size: 943 B

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

+1
View File
@@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1543300178225" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5733" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M537.372818 38.36489h62.454472v99.134083c117.738246 0.660894 235.60867-1.211639 353.236766 0.550745 25.334266-2.423278 45.172097 17.29339 42.627656 42.627655 1.872533 205.758296-0.440596 411.626741 1.10149 617.506201-1.10149 22.250094 2.20298 46.923466-10.574302 66.640134-16.081751 11.664777-36.999043 10.133706-55.834519 11.014898-110.148981-0.550745-220.297962-0.330447-330.557091-0.330447v110.148981h-68.523681c-167.856032-30.621417-336.06454-58.599258-504.041736-88.119185-0.110149-256.977572 0-513.955144 0-770.822567 169.970892-29.420793 339.93077-59.381316 510.110945-88.350498z" fill="#D24625" p-id="5734"></path><path d="M599.82729 170.543667h363.491636v671.908783h-363.491636v-88.119185h264.357554v-44.059592h-264.357554v-55.074491h264.357554v-44.059592h-264.247405c-0.110149-21.5892-0.110149-43.1784-0.231313-64.767601 43.630011 13.53731 93.307202 13.217878 132.299941-13.008594 42.18706-25.003819 64.216856-72.698327 67.851772-120.271672-48.366417-0.330447-96.710805-0.220298-144.956059-0.220298-0.121164-47.914807 0.550745-95.829613-0.991341-143.634271-18.075448 3.524767-36.128866 7.269833-54.083149 11.125047v-109.818534z" fill="#FFFFFF" p-id="5735"></path><path d="M677.041725 246.216017c76.553542 3.524767 140.880546 67.961921 144.956059 144.295165-48.366417 0.550745-96.710805 0.330447-145.066208 0.330447 0-48.245254-0.121164-96.490507 0.110149-144.625612z" fill="#D24625" p-id="5736"></path><path d="M203.940838 329.378497c59.810897 2.863874 132.288926-23.682031 181.855967 21.148605 47.485226 57.607917 34.917227 163.571236-35.467972 198.047867-25.003819 12.777282-53.642554 11.014898-80.849351 10.133706-0.110149 43.068251-0.220298 86.136503-0.110149 129.19374-21.820513-1.872533-43.74016-3.745065-65.538644-5.507449-0.980326-117.628097-1.211639-235.377357 0.110149-353.016469z" fill="#FFFFFF" p-id="5737"></path><path d="M269.380347 388.969096c21.699349-0.991341 48.575701-4.956704 63.214501 15.420857 12.567999 21.5892 11.89609 50.007637 1.442951 72.257732-12.567999 22.69069-40.986436 20.48771-62.895068 23.131286-2.313129-36.899909-2.092831-73.799817-1.762384-110.809875z" fill="#D24625" p-id="5738"></path></svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

+1
View File
@@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1545064197737" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="14227" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M759.725253 0H134.464646v1024h817.131314V191.870707z" fill="#02007A" p-id="14228"></path><path d="M72.40404 708.525253h687.838384v258.585858H72.40404z" fill="#230091" p-id="14229"></path><path d="M82.747475 718.868687h667.151515v237.89899H82.747475zM755.070707 5.171717l191.353535 191.353536h-191.353535z" fill="#FFFFFF" p-id="14230"></path><path d="M506.828283 791.272727v93.090909h25.858586c28.444444 0 41.373737-12.929293 41.373737-45.511111s-12.929293-47.579798-41.373737-47.579798h-25.858586z m-25.858586-25.858586h51.717172c42.408081 0 67.232323 29.99596 67.232323 74.989899S575.612121 910.222222 532.686869 910.222222H480.969697v-144.808081z m-132.39596 104.468687c1.034343 26.375758 22.755556 42.408081 55.337374 42.408081 34.650505 0 55.854545-17.066667 55.854546-43.959596 0-21.20404-12.412121-33.09899-40.856566-39.822222l-16.549495-3.620202c-17.583838-4.137374-24.824242-9.826263-24.824242-19.135354 0-11.894949 10.860606-19.652525 26.892929-19.652525s27.410101 7.757576 28.444444 21.204041h24.307071c-0.517172-24.824242-21.20404-41.890909-52.751515-41.89091S351.676768 782.480808 351.676768 807.822222c0 20.169697 12.412121 33.09899 38.787878 38.787879l18.618182 4.137374c18.10101 4.137374 25.341414 10.343434 25.341414 20.169697 0 11.894949-11.894949 20.169697-28.961616 20.169697s-30.513131-8.791919-32.064646-21.721212l-24.824243 0.517171zM258.585859 788.686869v53.785858h20.686868c18.10101 0 31.030303-9.826263 31.030303-26.892929s-12.412121-26.892929-31.030303-26.892929h-20.686868z m-25.858586-23.272728h56.888889c28.444444 0 46.545455 20.686869 46.545454 49.131314s-17.583838 49.131313-46.545454 49.131313h-31.030303v46.545454h-25.858586v-144.808081z" fill="#230091" p-id="14231"></path><path d="M415.806061 443.216162h-31.030303v137.567676H321.163636V196.525253h93.090909c91.022222 0 140.670707 35.684848 140.670708 122.052525 0.517172 103.434343-92.573737 124.638384-139.119192 124.638384z m-5.688889-192.905051c-6.206061 0-14.99798 0.517172-26.89293 1.551515V387.878788h36.202021C461.834343 387.878788 491.313131 366.157576 491.313131 312.888889c0-40.856566-32.064646-62.577778-81.195959-62.577778z m258.068687 337.19596c70.852525 0 96.711111-50.165657 96.711111-84.816162 0-54.820202-35.684848-67.749495-66.19798-87.40202-25.858586-17.066667-49.648485-23.272727-49.648485-40.856566 0-22.755556 15.515152-27.410101 36.20202-27.410101 25.858586 0 54.820202 2.068687 67.232323 16.032323V306.682828c-12.929293-10.343434-37.236364-13.446465-68.783838-13.446464-67.749495 0-93.608081 44.993939-93.608081 84.29899 0 50.682828 33.616162 65.680808 66.19798 83.781818 21.20404 11.894949 46.545455 20.686869 46.545455 44.476767 0 13.963636-8.791919 27.927273-37.753536 27.927273-26.892929 0-59.991919-10.343434-74.989899-23.789899v59.991919c13.446465 10.343434 40.339394 17.583838 78.09293 17.583839z" fill="#7AB7FF" p-id="14232"></path></svg>

After

Width:  |  Height:  |  Size: 3.2 KiB

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

+1
View File
@@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1543300142282" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2233" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M534.310676 38.36489h65.428495v88.119185c110.25913 0 220.507245 0.220298 330.766374-0.330447 18.615178 0.771043 39.113903-0.550745 55.305803 10.574302 11.345345 16.302049 10.023557 37.010058 10.783586 55.746399-0.550745 191.218631-0.319432 382.327112-0.220298 573.435594-0.550745 32.053353 2.974022 64.767601-3.745066 96.380358-4.405959 22.910988-31.943204 23.461733-50.338084 24.232776-114.114344 0.330447-228.338837-0.220298-342.56333 0v99.134083h-68.402517c-167.867047-30.511268-336.075555-58.709407-504.151885-88.119185v-770.932716c169.0897-29.420793 338.168386-58.389975 507.136922-88.240349z" fill="#207245" p-id="2234"></path><path d="M599.739171 159.528769h363.491636v693.938579h-363.491636v-66.089389h88.119184v-77.104286h-88.119184v-44.059592h88.119184v-77.104287h-88.119184v-44.059592h88.119184v-77.104287h-88.119184v-44.059592h88.119184v-77.104287h-88.119184v-44.059592h88.119184v-77.104287h-88.119184v-66.089388z" fill="#FFFFFF" p-id="2235"></path><path d="M731.917948 225.618157h154.208573v77.104287h-154.208573v-77.104287z" fill="#207245" p-id="2236"></path><path d="M353.44605 328.827752c24.89367-1.762384 49.897488-3.304469 74.901307-4.516108-29.409778 60.251492-58.929705 120.502985-88.879213 180.53418 30.29097 61.683429 61.242833 122.926263 91.632937 184.609692-26.545904-1.553101-52.98166-3.19432-79.527564-5.066854-18.725327-45.932125-41.526166-90.322164-54.964342-138.358134-14.969246 44.731501-36.349164 86.918561-53.521389 130.74684-24.122627-0.330447-48.256268-1.321788-72.367881-2.313129 28.308288-55.404937 55.625235-111.250471 84.814716-166.324961-24.783521-56.726725-52.001334-112.35196-77.544883-168.748238 24.232776-1.431937 48.454537-2.863874 72.698327-4.185662 16.412198 43.068251 34.366482 85.585758 47.925822 129.7555 14.506621-46.802302 36.216985-90.861894 54.832163-136.133126z" fill="#FFFFFF" p-id="2237"></path><path d="M731.917948 346.782036h154.208573v77.104287h-154.208573v-77.104287zM731.917948 467.945915h154.208573v77.104287h-154.208573v-77.104287zM731.917948 589.109794h154.208573v77.104287h-154.208573v-77.104287zM731.917948 710.273673h154.208573v77.104286h-154.208573v-77.104286z" fill="#207245" p-id="2238"></path></svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

+1
View File
@@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1544085034574" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1828" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M0 512A512 512 0 1 0 512 0 512 512 0 0 0 0 512" fill="#36D49F" p-id="1829"></path><path d="M450.37037 552.580741l-115.105185-87.798519-50.820741 39.822222L483.365926 701.62963C517.499259 616.296296 625.777778 449.232593 758.518519 330.714074L746.382222 303.407407a1264.071111 1264.071111 0 0 0-296.011852 249.173334" fill="#FFFFFF" p-id="1830"></path></svg>

After

Width:  |  Height:  |  Size: 743 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

-1
View File
@@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1510209707527" class="icon" style="" viewBox="0 0 1219 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1016" xmlns:xlink="http://www.w3.org/1999/xlink" width="238.0859375" height="200"><defs><style type="text/css"></style></defs><path d="M1197.787429 327.192381a19.504762 19.504762 0 0 1 19.553523 19.407238v614.156191c0 34.913524-28.574476 63.24419-63.878095 63.24419H63.878095C28.623238 1024 0 995.718095 0 960.75581V346.599619a19.504762 19.504762 0 0 1 19.602286-19.358476h1178.185143z m-66.80381-213.089524C1179.550476 114.102857 1219.047619 153.209905 1219.047619 201.386667v80.213333H1.657905V88.259048C1.657905 39.497143 41.593905 0 90.794667 0h290.864762c17.408 0 33.987048 7.655619 45.104761 20.967619l78.214096 93.135238h626.005333z" fill="#23B7E5" p-id="1017"></path></svg>

Before

Width:  |  Height:  |  Size: 941 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

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