Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
S
solo-1
Project overview
Project overview
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Administrator
solo-1
Commits
7ee15874
Unverified
Commit
7ee15874
authored
Feb 21, 2019
by
Van
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
♻
default-admin.css 重构 #12658
parent
bc4b1016
Changes
23
Show whitespace changes
Inline
Side-by-side
Showing
23 changed files
with
543 additions
and
352 deletions
+543
-352
gulpfile.js
gulpfile.js
+8
-2
package-lock.json
package-lock.json
+399
-73
package.json
package.json
+3
-1
src/main/webapp/admin/admin-about.ftl
src/main/webapp/admin/admin-about.ftl
+6
-6
src/main/webapp/admin/admin-article-list.ftl
src/main/webapp/admin/admin-article-list.ftl
+4
-4
src/main/webapp/admin/admin-article.ftl
src/main/webapp/admin/admin-article.ftl
+8
-8
src/main/webapp/admin/admin-category-list.ftl
src/main/webapp/admin/admin-category-list.ftl
+7
-7
src/main/webapp/admin/admin-comment-list.ftl
src/main/webapp/admin/admin-comment-list.ftl
+2
-2
src/main/webapp/admin/admin-draft-list.ftl
src/main/webapp/admin/admin-draft-list.ftl
+3
-3
src/main/webapp/admin/admin-index.ftl
src/main/webapp/admin/admin-index.ftl
+20
-22
src/main/webapp/admin/admin-link-list.ftl
src/main/webapp/admin/admin-link-list.ftl
+7
-7
src/main/webapp/admin/admin-others.ftl
src/main/webapp/admin/admin-others.ftl
+8
-8
src/main/webapp/admin/admin-page-list.ftl
src/main/webapp/admin/admin-page-list.ftl
+7
-7
src/main/webapp/admin/admin-plugin-list.ftl
src/main/webapp/admin/admin-plugin-list.ftl
+3
-3
src/main/webapp/admin/admin-preference.ftl
src/main/webapp/admin/admin-preference.ftl
+18
-18
src/main/webapp/admin/admin-user-list.ftl
src/main/webapp/admin/admin-user-list.ftl
+5
-5
src/main/webapp/admin/article-pwd.ftl
src/main/webapp/admin/article-pwd.ftl
+1
-1
src/main/webapp/js/admin/admin.js
src/main/webapp/js/admin/admin.js
+2
-2
src/main/webapp/js/admin/admin.min.js
src/main/webapp/js/admin/admin.min.js
+1
-1
src/main/webapp/js/admin/article.js
src/main/webapp/js/admin/article.js
+1
-1
src/main/webapp/js/admin/comment.js
src/main/webapp/js/admin/comment.js
+4
-4
src/main/webapp/js/admin/preference.js
src/main/webapp/js/admin/preference.js
+2
-2
src/main/webapp/scss/admin.scss
src/main/webapp/scss/admin.scss
+24
-165
No files found.
gulpfile.js
View file @
7ee15874
...
...
@@ -34,7 +34,10 @@ const del = require('del')
function
sassSkinProcess
()
{
return
gulp
.
src
(
'
./src/main/webapp/skins/*/css/*.scss
'
).
pipe
(
sass
({
outputStyle
:
'
compressed
'
}).
on
(
'
error
'
,
sass
.
logError
)).
pipe
(
sass
({
outputStyle
:
'
compressed
'
,
includePaths
:
[
'
node_modules
'
]
}).
on
(
'
error
'
,
sass
.
logError
)).
pipe
(
gulp
.
dest
(
'
./src/main/webapp/skins/
'
))
}
...
...
@@ -45,7 +48,10 @@ function sassWatch () {
function
sassCommonProcess
()
{
return
gulp
.
src
(
'
./src/main/webapp/scss/*.scss
'
).
pipe
(
sass
({
outputStyle
:
'
compressed
'
}).
on
(
'
error
'
,
sass
.
logError
)).
pipe
(
sass
({
outputStyle
:
'
compressed
'
,
includePaths
:
[
'
node_modules
'
]
}).
on
(
'
error
'
,
sass
.
logError
)).
pipe
(
gulp
.
dest
(
'
./src/main/webapp/scss/
'
))
}
...
...
package-lock.json
View file @
7ee15874
...
...
@@ -4,17 +4,47 @@
"lockfileVersion"
:
1
,
"requires"
:
true
,
"dependencies"
:
{
"abab"
:
{
"version"
:
"2.0.0"
,
"resolved"
:
"https://registry.npmjs.org/abab/-/abab-2.0.0.tgz"
,
"integrity"
:
"sha512-sY5AXXVZv4Y1VACTtR11UJCPHHudgY5i26Qj5TypE6DKlIApbwb5uqhXcJ5UUGbvZNRh7EeIoW+LrJumBsKp7w=="
},
"abbrev"
:
{
"version"
:
"1.1.1"
,
"resolved"
:
"https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz"
,
"integrity"
:
"sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="
,
"dev"
:
true
},
"acorn"
:
{
"version"
:
"5.7.3"
,
"resolved"
:
"https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz"
,
"integrity"
:
"sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw=="
},
"acorn-globals"
:
{
"version"
:
"4.3.0"
,
"resolved"
:
"https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.0.tgz"
,
"integrity"
:
"sha512-hMtHj3s5RnuhvHPowpBYvJVj3rAar82JiDQHvGs1zO0l10ocX/xEdBShNHTJaboucJUsScghp74pH3s7EnHHQw=="
,
"requires"
:
{
"acorn"
:
"^6.0.1"
,
"acorn-walk"
:
"^6.0.1"
},
"dependencies"
:
{
"acorn"
:
{
"version"
:
"6.1.0"
,
"resolved"
:
"https://registry.npmjs.org/acorn/-/acorn-6.1.0.tgz"
,
"integrity"
:
"sha512-MW/FjM+IvU9CgBzjO3UIPCE2pyEwUsoFl+VGdczOPEdxfGFjuKny/gN54mOuX7Qxmb9Rg9MCn2oKiSUeW+pjrw=="
}
}
},
"acorn-walk"
:
{
"version"
:
"6.1.1"
,
"resolved"
:
"https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.1.1.tgz"
,
"integrity"
:
"sha512-OtUw6JUTgxA2QoqqmrmQ7F2NYqiBPi/L2jqHyFtllhOUvXYQXf0Z1CYUinIfyT4bTCGmrA7gX9FvHA81uzCoVw=="
},
"ajv"
:
{
"version"
:
"5.5.2"
,
"resolved"
:
"https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz"
,
"integrity"
:
"sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU="
,
"dev"
:
true
,
"requires"
:
{
"co"
:
"^4.6.0"
,
"fast-deep-equal"
:
"^1.0.0"
,
...
...
@@ -179,6 +209,11 @@
"integrity"
:
"sha1-p5SvDAWrF1KEbudTofIRoFugxE8="
,
"dev"
:
true
},
"array-equal"
:
{
"version"
:
"1.0.0"
,
"resolved"
:
"https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz"
,
"integrity"
:
"sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM="
},
"array-find-index"
:
{
"version"
:
"1.0.2"
,
"resolved"
:
"https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz"
,
...
...
@@ -270,7 +305,6 @@
"version"
:
"0.2.4"
,
"resolved"
:
"https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz"
,
"integrity"
:
"sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg=="
,
"dev"
:
true
,
"requires"
:
{
"safer-buffer"
:
"~2.1.0"
}
...
...
@@ -278,8 +312,7 @@
"assert-plus"
:
{
"version"
:
"1.0.0"
,
"resolved"
:
"https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz"
,
"integrity"
:
"sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
,
"dev"
:
true
"integrity"
:
"sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
},
"assign-symbols"
:
{
"version"
:
"1.0.0"
,
...
...
@@ -319,6 +352,11 @@
"integrity"
:
"sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI="
,
"dev"
:
true
},
"async-limiter"
:
{
"version"
:
"1.0.0"
,
"resolved"
:
"https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz"
,
"integrity"
:
"sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg=="
},
"async-settle"
:
{
"version"
:
"1.0.0"
,
"resolved"
:
"https://registry.npmjs.org/async-settle/-/async-settle-1.0.0.tgz"
,
...
...
@@ -331,8 +369,7 @@
"asynckit"
:
{
"version"
:
"0.4.0"
,
"resolved"
:
"https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz"
,
"integrity"
:
"sha1-x57Zf380y48robyXkLzDZkdLS3k="
,
"dev"
:
true
"integrity"
:
"sha1-x57Zf380y48robyXkLzDZkdLS3k="
},
"atob"
:
{
"version"
:
"2.1.2"
,
...
...
@@ -343,14 +380,12 @@
"aws-sign2"
:
{
"version"
:
"0.7.0"
,
"resolved"
:
"https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz"
,
"integrity"
:
"sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
,
"dev"
:
true
"integrity"
:
"sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
},
"aws4"
:
{
"version"
:
"1.8.0"
,
"resolved"
:
"https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz"
,
"integrity"
:
"sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ=="
,
"dev"
:
true
"integrity"
:
"sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ=="
},
"bach"
:
{
"version"
:
"1.2.0"
,
...
...
@@ -434,7 +469,6 @@
"version"
:
"1.0.2"
,
"resolved"
:
"https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz"
,
"integrity"
:
"sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4="
,
"dev"
:
true
,
"optional"
:
true
,
"requires"
:
{
"tweetnacl"
:
"^0.14.3"
...
...
@@ -494,6 +528,11 @@
}
}
},
"browser-process-hrtime"
:
{
"version"
:
"0.1.3"
,
"resolved"
:
"https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz"
,
"integrity"
:
"sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw=="
},
"buffer-equal"
:
{
"version"
:
"1.0.0"
,
"resolved"
:
"https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz"
,
...
...
@@ -556,8 +595,7 @@
"caseless"
:
{
"version"
:
"0.12.0"
,
"resolved"
:
"https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz"
,
"integrity"
:
"sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
,
"dev"
:
true
"integrity"
:
"sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
},
"chalk"
:
{
"version"
:
"1.1.3"
,
...
...
@@ -679,8 +717,7 @@
"co"
:
{
"version"
:
"4.6.0"
,
"resolved"
:
"https://registry.npmjs.org/co/-/co-4.6.0.tgz"
,
"integrity"
:
"sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ="
,
"dev"
:
true
"integrity"
:
"sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ="
},
"code-point-at"
:
{
"version"
:
"1.1.0"
,
...
...
@@ -734,7 +771,6 @@
"version"
:
"1.0.6"
,
"resolved"
:
"https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz"
,
"integrity"
:
"sha1-cj599ugBrFYTETp+RFqbactjKBg="
,
"dev"
:
true
,
"requires"
:
{
"delayed-stream"
:
"~1.0.0"
}
...
...
@@ -846,8 +882,7 @@
"core-util-is"
:
{
"version"
:
"1.0.2"
,
"resolved"
:
"https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz"
,
"integrity"
:
"sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
,
"dev"
:
true
"integrity"
:
"sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
},
"cross-spawn"
:
{
"version"
:
"3.0.1"
,
...
...
@@ -871,6 +906,19 @@
}
}
},
"cssom"
:
{
"version"
:
"0.3.6"
,
"resolved"
:
"https://registry.npmjs.org/cssom/-/cssom-0.3.6.tgz"
,
"integrity"
:
"sha512-DtUeseGk9/GBW0hl0vVPpU22iHL6YB5BUX7ml1hB+GMpo0NX5G4voX3kdWiMSEguFtcW3Vh3djqNF4aIe6ne0A=="
},
"cssstyle"
:
{
"version"
:
"1.2.1"
,
"resolved"
:
"https://registry.npmjs.org/cssstyle/-/cssstyle-1.2.1.tgz"
,
"integrity"
:
"sha512-7DYm8qe+gPx/h77QlCyFmX80+fGaE/6A/Ekl0zaszYOubvySO2saYFdQ78P29D0UsULxFKCetDGNaNRUdSF+2A=="
,
"requires"
:
{
"cssom"
:
"0.3.x"
}
},
"currently-unhandled"
:
{
"version"
:
"0.4.1"
,
"resolved"
:
"https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz"
,
...
...
@@ -893,11 +941,32 @@
"version"
:
"1.14.1"
,
"resolved"
:
"https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz"
,
"integrity"
:
"sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA="
,
"dev"
:
true
,
"requires"
:
{
"assert-plus"
:
"^1.0.0"
}
},
"data-urls"
:
{
"version"
:
"1.1.0"
,
"resolved"
:
"https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz"
,
"integrity"
:
"sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ=="
,
"requires"
:
{
"abab"
:
"^2.0.0"
,
"whatwg-mimetype"
:
"^2.2.0"
,
"whatwg-url"
:
"^7.0.0"
},
"dependencies"
:
{
"whatwg-url"
:
{
"version"
:
"7.0.0"
,
"resolved"
:
"https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.0.0.tgz"
,
"integrity"
:
"sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ=="
,
"requires"
:
{
"lodash.sortby"
:
"^4.7.0"
,
"tr46"
:
"^1.0.1"
,
"webidl-conversions"
:
"^4.0.2"
}
}
}
},
"debug"
:
{
"version"
:
"2.6.9"
,
"resolved"
:
"https://registry.npmjs.org/debug/-/debug-2.6.9.tgz"
,
...
...
@@ -919,6 +988,11 @@
"integrity"
:
"sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU="
,
"dev"
:
true
},
"deep-is"
:
{
"version"
:
"0.1.3"
,
"resolved"
:
"https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz"
,
"integrity"
:
"sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ="
},
"default-compare"
:
{
"version"
:
"1.0.0"
,
"resolved"
:
"https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz"
,
...
...
@@ -1017,8 +1091,7 @@
"delayed-stream"
:
{
"version"
:
"1.0.0"
,
"resolved"
:
"https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz"
,
"integrity"
:
"sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
,
"dev"
:
true
"integrity"
:
"sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
},
"delegates"
:
{
"version"
:
"1.0.0"
,
...
...
@@ -1032,6 +1105,14 @@
"integrity"
:
"sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc="
,
"dev"
:
true
},
"domexception"
:
{
"version"
:
"1.0.1"
,
"resolved"
:
"https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz"
,
"integrity"
:
"sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug=="
,
"requires"
:
{
"webidl-conversions"
:
"^4.0.2"
}
},
"duplexify"
:
{
"version"
:
"3.6.0"
,
"resolved"
:
"https://registry.npmjs.org/duplexify/-/duplexify-3.6.0.tgz"
,
...
...
@@ -1090,7 +1171,6 @@
"version"
:
"0.1.2"
,
"resolved"
:
"https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz"
,
"integrity"
:
"sha1-OoOpBOVDUyh4dMVkt1SThoSamMk="
,
"dev"
:
true
,
"optional"
:
true
,
"requires"
:
{
"jsbn"
:
"~0.1.0"
,
...
...
@@ -1176,6 +1256,41 @@
"integrity"
:
"sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
,
"dev"
:
true
},
"escodegen"
:
{
"version"
:
"1.11.1"
,
"resolved"
:
"https://registry.npmjs.org/escodegen/-/escodegen-1.11.1.tgz"
,
"integrity"
:
"sha512-JwiqFD9KdGVVpeuRa68yU3zZnBEOcPs0nKW7wZzXky8Z7tffdYUHbe11bPCV5jYlK6DVdKLWLm0f5I/QlL0Kmw=="
,
"requires"
:
{
"esprima"
:
"^3.1.3"
,
"estraverse"
:
"^4.2.0"
,
"esutils"
:
"^2.0.2"
,
"optionator"
:
"^0.8.1"
,
"source-map"
:
"~0.6.1"
},
"dependencies"
:
{
"source-map"
:
{
"version"
:
"0.6.1"
,
"resolved"
:
"https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz"
,
"integrity"
:
"sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
,
"optional"
:
true
}
}
},
"esprima"
:
{
"version"
:
"3.1.3"
,
"resolved"
:
"https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz"
,
"integrity"
:
"sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM="
},
"estraverse"
:
{
"version"
:
"4.2.0"
,
"resolved"
:
"https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz"
,
"integrity"
:
"sha1-De4/7TH81GlhjOc0IJn8GvoL2xM="
},
"esutils"
:
{
"version"
:
"2.0.2"
,
"resolved"
:
"https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz"
,
"integrity"
:
"sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs="
},
"expand-brackets"
:
{
"version"
:
"2.1.4"
,
"resolved"
:
"https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz"
,
...
...
@@ -1223,8 +1338,7 @@
"extend"
:
{
"version"
:
"3.0.1"
,
"resolved"
:
"https://registry.npmjs.org/extend/-/extend-3.0.1.tgz"
,
"integrity"
:
"sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ="
,
"dev"
:
true
"integrity"
:
"sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ="
},
"extend-shallow"
:
{
"version"
:
"3.0.2"
,
...
...
@@ -1315,8 +1429,7 @@
"extsprintf"
:
{
"version"
:
"1.3.0"
,
"resolved"
:
"https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz"
,
"integrity"
:
"sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
,
"dev"
:
true
"integrity"
:
"sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
},
"fancy-log"
:
{
"version"
:
"1.3.2"
,
...
...
@@ -1332,14 +1445,17 @@
"fast-deep-equal"
:
{
"version"
:
"1.1.0"
,
"resolved"
:
"https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz"
,
"integrity"
:
"sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ="
,
"dev"
:
true
"integrity"
:
"sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ="
},
"fast-json-stable-stringify"
:
{
"version"
:
"2.0.0"
,
"resolved"
:
"https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz"
,
"integrity"
:
"sha1-1RQsDK7msRifh9OnYREGT4bIu/I="
,
"dev"
:
true
"integrity"
:
"sha1-1RQsDK7msRifh9OnYREGT4bIu/I="
},
"fast-levenshtein"
:
{
"version"
:
"2.0.6"
,
"resolved"
:
"https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz"
,
"integrity"
:
"sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc="
},
"fill-range"
:
{
"version"
:
"4.0.0"
,
...
...
@@ -1476,14 +1592,12 @@
"forever-agent"
:
{
"version"
:
"0.6.1"
,
"resolved"
:
"https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz"
,
"integrity"
:
"sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
,
"dev"
:
true
"integrity"
:
"sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
},
"form-data"
:
{
"version"
:
"2.3.2"
,
"resolved"
:
"https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz"
,
"integrity"
:
"sha1-SXBJi+YEwgwAXU9cI67NIda0kJk="
,
"dev"
:
true
,
"requires"
:
{
"asynckit"
:
"^0.4.0"
,
"combined-stream"
:
"1.0.6"
,
...
...
@@ -2135,7 +2249,6 @@
"version"
:
"0.1.7"
,
"resolved"
:
"https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz"
,
"integrity"
:
"sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo="
,
"dev"
:
true
,
"requires"
:
{
"assert-plus"
:
"^1.0.0"
}
...
...
@@ -2492,14 +2605,12 @@
"har-schema"
:
{
"version"
:
"2.0.0"
,
"resolved"
:
"https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz"
,
"integrity"
:
"sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
,
"dev"
:
true
"integrity"
:
"sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
},
"har-validator"
:
{
"version"
:
"5.0.3"
,
"resolved"
:
"https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz"
,
"integrity"
:
"sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0="
,
"dev"
:
true
,
"requires"
:
{
"ajv"
:
"^5.1.0"
,
"har-schema"
:
"^2.0.0"
...
...
@@ -2588,17 +2699,32 @@
"integrity"
:
"sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w=="
,
"dev"
:
true
},
"html-encoding-sniffer"
:
{
"version"
:
"1.0.2"
,
"resolved"
:
"https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz"
,
"integrity"
:
"sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw=="
,
"requires"
:
{
"whatwg-encoding"
:
"^1.0.1"
}
},
"http-signature"
:
{
"version"
:
"1.2.0"
,
"resolved"
:
"https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz"
,
"integrity"
:
"sha1-muzZJRFHcvPZW2WmCruPfBj7rOE="
,
"dev"
:
true
,
"requires"
:
{
"assert-plus"
:
"^1.0.0"
,
"jsprim"
:
"^1.2.2"
,
"sshpk"
:
"^1.7.0"
}
},
"iconv-lite"
:
{
"version"
:
"0.4.24"
,
"resolved"
:
"https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz"
,
"integrity"
:
"sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA=="
,
"requires"
:
{
"safer-buffer"
:
">= 2.1.2 < 3"
}
},
"in-publish"
:
{
"version"
:
"2.0.0"
,
"resolved"
:
"https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz"
,
...
...
@@ -2857,8 +2983,7 @@
"is-typedarray"
:
{
"version"
:
"1.0.0"
,
"resolved"
:
"https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz"
,
"integrity"
:
"sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
,
"dev"
:
true
"integrity"
:
"sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
},
"is-unc-path"
:
{
"version"
:
"1.0.0"
,
...
...
@@ -2902,8 +3027,7 @@
"isstream"
:
{
"version"
:
"0.1.2"
,
"resolved"
:
"https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz"
,
"integrity"
:
"sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
,
"dev"
:
true
"integrity"
:
"sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
},
"js-base64"
:
{
"version"
:
"2.4.9"
,
...
...
@@ -2915,20 +3039,50 @@
"version"
:
"0.1.1"
,
"resolved"
:
"https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz"
,
"integrity"
:
"sha1-peZUwuWi3rXyAdls77yoDA7y9RM="
,
"dev"
:
true
,
"optional"
:
true
},
"jsdom"
:
{
"version"
:
"11.12.0"
,
"resolved"
:
"https://registry.npmjs.org/jsdom/-/jsdom-11.12.0.tgz"
,
"integrity"
:
"sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw=="
,
"requires"
:
{
"abab"
:
"^2.0.0"
,
"acorn"
:
"^5.5.3"
,
"acorn-globals"
:
"^4.1.0"
,
"array-equal"
:
"^1.0.0"
,
"cssom"
:
">= 0.3.2 < 0.4.0"
,
"cssstyle"
:
"^1.0.0"
,
"data-urls"
:
"^1.0.0"
,
"domexception"
:
"^1.0.1"
,
"escodegen"
:
"^1.9.1"
,
"html-encoding-sniffer"
:
"^1.0.2"
,
"left-pad"
:
"^1.3.0"
,
"nwsapi"
:
"^2.0.7"
,
"parse5"
:
"4.0.0"
,
"pn"
:
"^1.1.0"
,
"request"
:
"^2.87.0"
,
"request-promise-native"
:
"^1.0.5"
,
"sax"
:
"^1.2.4"
,
"symbol-tree"
:
"^3.2.2"
,
"tough-cookie"
:
"^2.3.4"
,
"w3c-hr-time"
:
"^1.0.1"
,
"webidl-conversions"
:
"^4.0.2"
,
"whatwg-encoding"
:
"^1.0.3"
,
"whatwg-mimetype"
:
"^2.1.0"
,
"whatwg-url"
:
"^6.4.1"
,
"ws"
:
"^5.2.0"
,
"xml-name-validator"
:
"^3.0.0"
}
},
"json-schema"
:
{
"version"
:
"0.2.3"
,
"resolved"
:
"https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz"
,
"integrity"
:
"sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
,
"dev"
:
true
"integrity"
:
"sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
},
"json-schema-traverse"
:
{
"version"
:
"0.3.1"
,
"resolved"
:
"https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz"
,
"integrity"
:
"sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A="
,
"dev"
:
true
"integrity"
:
"sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A="
},
"json-stable-stringify"
:
{
"version"
:
"1.0.1"
,
...
...
@@ -2942,8 +3096,7 @@
"json-stringify-safe"
:
{
"version"
:
"5.0.1"
,
"resolved"
:
"https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz"
,
"integrity"
:
"sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
,
"dev"
:
true
"integrity"
:
"sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
},
"jsonify"
:
{
"version"
:
"0.0.0"
,
...
...
@@ -2955,7 +3108,6 @@
"version"
:
"1.4.1"
,
"resolved"
:
"https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz"
,
"integrity"
:
"sha1-MT5mvB5cwG5Di8G3SZwuXFastqI="
,
"dev"
:
true
,
"requires"
:
{
"assert-plus"
:
"1.0.0"
,
"extsprintf"
:
"1.3.0"
,
...
...
@@ -3044,6 +3196,20 @@
"flush-write-stream"
:
"^1.0.2"
}
},
"left-pad"
:
{
"version"
:
"1.3.0"
,
"resolved"
:
"https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz"
,
"integrity"
:
"sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA=="
},
"levn"
:
{
"version"
:
"0.3.0"
,
"resolved"
:
"https://registry.npmjs.org/levn/-/levn-0.3.0.tgz"
,
"integrity"
:
"sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4="
,
"requires"
:
{
"prelude-ls"
:
"~1.1.2"
,
"type-check"
:
"~0.3.2"
}
},
"liftoff"
:
{
"version"
:
"2.5.0"
,
"resolved"
:
"https://registry.npmjs.org/liftoff/-/liftoff-2.5.0.tgz"
,
...
...
@@ -3090,6 +3256,11 @@
}
}
},
"lodash"
:
{
"version"
:
"4.17.11"
,
"resolved"
:
"https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz"
,
"integrity"
:
"sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg=="
},
"lodash.assign"
:
{
"version"
:
"4.2.0"
,
"resolved"
:
"https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz"
,
...
...
@@ -3114,6 +3285,11 @@
"integrity"
:
"sha512-eWw5r+PYICtEBgrBE5hhlT6aAa75f411bgDz/ZL2KZqYV03USvucsxcHUIlGTDTECs1eunpI7HOV7U+WLDvNdQ=="
,
"dev"
:
true
},
"lodash.sortby"
:
{
"version"
:
"4.7.0"
,
"resolved"
:
"https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz"
,
"integrity"
:
"sha1-7dFMgk4sycHgsKG0K7UhBRakJDg="
},
"loud-rejection"
:
{
"version"
:
"1.6.0"
,
"resolved"
:
"https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz"
,
...
...
@@ -3231,14 +3407,12 @@
"mime-db"
:
{
"version"
:
"1.36.0"
,
"resolved"
:
"https://registry.npmjs.org/mime-db/-/mime-db-1.36.0.tgz"
,
"integrity"
:
"sha512-L+xvyD9MkoYMXb1jAmzI/lWYAxAMCPvIBSWur0PZ5nOf5euahRLVqH//FKW9mWp2lkqUgYiXPgkzfMUFi4zVDw=="
,
"dev"
:
true
"integrity"
:
"sha512-L+xvyD9MkoYMXb1jAmzI/lWYAxAMCPvIBSWur0PZ5nOf5euahRLVqH//FKW9mWp2lkqUgYiXPgkzfMUFi4zVDw=="
},
"mime-types"
:
{
"version"
:
"2.1.20"
,
"resolved"
:
"https://registry.npmjs.org/mime-types/-/mime-types-2.1.20.tgz"
,
"integrity"
:
"sha512-HrkrPaP9vGuWbLK1B1FfgAkbqNjIuy4eHlIYnFi7kamZyLLrGlo2mpcx0bBmNpKqBtYtAfGbodDddIgddSJC2A=="
,
"dev"
:
true
,
"requires"
:
{
"mime-db"
:
"~1.36.0"
}
...
...
@@ -3531,11 +3705,15 @@
"integrity"
:
"sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0="
,
"dev"
:
true
},
"nwsapi"
:
{
"version"
:
"2.1.0"
,
"resolved"
:
"https://registry.npmjs.org/nwsapi/-/nwsapi-2.1.0.tgz"
,
"integrity"
:
"sha512-ZG3bLAvdHmhIjaQ/Db1qvBxsGvFMLIRpQszyqbg31VJ53UP++uZX1/gf3Ut96pdwN9AuDwlMqIYLm0UPCdUeHg=="
},
"oauth-sign"
:
{
"version"
:
"0.8.2"
,
"resolved"
:
"https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz"
,
"integrity"
:
"sha1-Rqarfwrq2N6unsBWV4C31O/rnUM="
,
"dev"
:
true
"integrity"
:
"sha1-Rqarfwrq2N6unsBWV4C31O/rnUM="
},
"object-copy"
:
{
"version"
:
"0.1.0"
,
...
...
@@ -3645,6 +3823,19 @@
"wrappy"
:
"1"
}
},
"optionator"
:
{
"version"
:
"0.8.2"
,
"resolved"
:
"https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz"
,
"integrity"
:
"sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q="
,
"requires"
:
{
"deep-is"
:
"~0.1.3"
,
"fast-levenshtein"
:
"~2.0.4"
,
"levn"
:
"~0.3.0"
,
"prelude-ls"
:
"~1.1.2"
,
"type-check"
:
"~0.3.2"
,
"wordwrap"
:
"~1.0.0"
}
},
"ordered-read-streams"
:
{
"version"
:
"1.0.1"
,
"resolved"
:
"https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz"
,
...
...
@@ -3749,6 +3940,11 @@
"integrity"
:
"sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY="
,
"dev"
:
true
},
"parse5"
:
{
"version"
:
"4.0.0"
,
"resolved"
:
"https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz"
,
"integrity"
:
"sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA=="
},
"pascalcase"
:
{
"version"
:
"0.1.1"
,
"resolved"
:
"https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz"
,
...
...
@@ -3825,8 +4021,7 @@
"performance-now"
:
{
"version"
:
"2.1.0"
,
"resolved"
:
"https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz"
,
"integrity"
:
"sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
,
"dev"
:
true
"integrity"
:
"sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
},
"pify"
:
{
"version"
:
"2.3.0"
,
...
...
@@ -3861,12 +4056,22 @@
"extend-shallow"
:
"^3.0.2"
}
},
"pn"
:
{
"version"
:
"1.1.0"
,
"resolved"
:
"https://registry.npmjs.org/pn/-/pn-1.1.0.tgz"
,
"integrity"
:
"sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA=="
},
"posix-character-classes"
:
{
"version"
:
"0.1.1"
,
"resolved"
:
"https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz"
,
"integrity"
:
"sha1-AerA/jta9xoqbAL+q7jB/vfgDqs="
,
"dev"
:
true
},
"prelude-ls"
:
{
"version"
:
"1.1.2"
,
"resolved"
:
"https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz"
,
"integrity"
:
"sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ="
},
"pretty-hrtime"
:
{
"version"
:
"1.0.3"
,
"resolved"
:
"https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz"
,
...
...
@@ -3909,14 +4114,12 @@
"punycode"
:
{
"version"
:
"1.4.1"
,
"resolved"
:
"https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz"
,
"integrity"
:
"sha1-wNWmOycYgArY4esPpSachN1BhF4="
,
"dev"
:
true
"integrity"
:
"sha1-wNWmOycYgArY4esPpSachN1BhF4="
},
"qs"
:
{
"version"
:
"6.5.2"
,
"resolved"
:
"https://registry.npmjs.org/qs/-/qs-6.5.2.tgz"
,
"integrity"
:
"sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
,
"dev"
:
true
"integrity"
:
"sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
},
"read-pkg"
:
{
"version"
:
"1.1.0"
,
...
...
@@ -4074,7 +4277,6 @@
"version"
:
"2.87.0"
,
"resolved"
:
"https://registry.npmjs.org/request/-/request-2.87.0.tgz"
,
"integrity"
:
"sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw=="
,
"dev"
:
true
,
"requires"
:
{
"aws-sign2"
:
"~0.7.0"
,
"aws4"
:
"^1.6.0"
,
...
...
@@ -4098,6 +4300,24 @@
"uuid"
:
"^3.1.0"
}
},
"request-promise-core"
:
{
"version"
:
"1.1.2"
,
"resolved"
:
"https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.2.tgz"
,
"integrity"
:
"sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag=="
,
"requires"
:
{
"lodash"
:
"^4.17.11"
}
},
"request-promise-native"
:
{
"version"
:
"1.0.7"
,
"resolved"
:
"https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.7.tgz"
,
"integrity"
:
"sha512-rIMnbBdgNViL37nZ1b3L/VfPOpSi0TqVDQPAvO6U14lMzOLrt5nilxCQqtDKhZeDiW0/hkCXGoQjhgJd/tCh6w=="
,
"requires"
:
{
"request-promise-core"
:
"1.1.2"
,
"stealthy-require"
:
"^1.1.1"
,
"tough-cookie"
:
"^2.3.3"
}
},
"require-directory"
:
{
"version"
:
"2.1.1"
,
"resolved"
:
"https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz"
,
...
...
@@ -4187,8 +4407,7 @@
"safe-buffer"
:
{
"version"
:
"5.1.2"
,
"resolved"
:
"https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz"
,
"integrity"
:
"sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
,
"dev"
:
true
"integrity"
:
"sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
},
"safe-regex"
:
{
"version"
:
"1.1.0"
,
...
...
@@ -4202,8 +4421,7 @@
"safer-buffer"
:
{
"version"
:
"2.1.2"
,
"resolved"
:
"https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz"
,
"integrity"
:
"sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
,
"dev"
:
true
"integrity"
:
"sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
},
"sass-graph"
:
{
"version"
:
"2.2.4"
,
...
...
@@ -4286,6 +4504,11 @@
}
}
},
"sax"
:
{
"version"
:
"1.2.4"
,
"resolved"
:
"https://registry.npmjs.org/sax/-/sax-1.2.4.tgz"
,
"integrity"
:
"sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
},
"scss-tokenizer"
:
{
"version"
:
"0.2.3"
,
"resolved"
:
"https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz"
,
...
...
@@ -4540,7 +4763,6 @@
"version"
:
"1.14.2"
,
"resolved"
:
"https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz"
,
"integrity"
:
"sha1-xvxhZIo9nE52T9P8306hBeSSupg="
,
"dev"
:
true
,
"requires"
:
{
"asn1"
:
"~0.2.3"
,
"assert-plus"
:
"^1.0.0"
,
...
...
@@ -4621,6 +4843,11 @@
}
}
},
"stealthy-require"
:
{
"version"
:
"1.1.1"
,
"resolved"
:
"https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz"
,
"integrity"
:
"sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks="
},
"stream-exhaust"
:
{
"version"
:
"1.0.2"
,
"resolved"
:
"https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz"
,
...
...
@@ -4678,6 +4905,11 @@
"es6-symbol"
:
"^3.1.1"
}
},
"symbol-tree"
:
{
"version"
:
"3.2.2"
,
"resolved"
:
"https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.2.tgz"
,
"integrity"
:
"sha1-rifbOPZgp64uHDt9G8KQgZuFGeY="
},
"tar"
:
{
"version"
:
"2.2.1"
,
"resolved"
:
"https://registry.npmjs.org/tar/-/tar-2.2.1.tgz"
,
...
...
@@ -4812,11 +5044,25 @@
"version"
:
"2.3.4"
,
"resolved"
:
"https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz"
,
"integrity"
:
"sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA=="
,
"dev"
:
true
,
"requires"
:
{
"punycode"
:
"^1.4.1"
}
},
"tr46"
:
{
"version"
:
"1.0.1"
,
"resolved"
:
"https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz"
,
"integrity"
:
"sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk="
,
"requires"
:
{
"punycode"
:
"^2.1.0"
},
"dependencies"
:
{
"punycode"
:
{
"version"
:
"2.1.1"
,
"resolved"
:
"https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz"
,
"integrity"
:
"sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
}
}
},
"trim-newlines"
:
{
"version"
:
"1.0.0"
,
"resolved"
:
"https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz"
,
...
...
@@ -4861,18 +5107,37 @@
"version"
:
"0.6.0"
,
"resolved"
:
"https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz"
,
"integrity"
:
"sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0="
,
"dev"
:
true
,
"requires"
:
{
"safe-buffer"
:
"^5.0.1"
}
},
"turndown"
:
{
"version"
:
"5.0.3"
,
"resolved"
:
"https://registry.npmjs.org/turndown/-/turndown-5.0.3.tgz"
,
"integrity"
:
"sha512-popfGXEiedpq6F5saRIAThKxq/bbEPVFnsDnUdjaDGIre9f3/OL9Yi/yPbPcZ7RYUDpekghr666bBfZPrwNnhQ=="
,
"requires"
:
{
"jsdom"
:
"^11.9.0"
}
},
"turndown-plugin-gfm"
:
{
"version"
:
"1.0.2"
,
"resolved"
:
"https://registry.npmjs.org/turndown-plugin-gfm/-/turndown-plugin-gfm-1.0.2.tgz"
,
"integrity"
:
"sha512-vwz9tfvF7XN/jE0dGoBei3FXWuvll78ohzCZQuOb+ZjWrs3a0XhQVomJEb2Qh4VHTPNRO4GPZh0V7VRbiWwkRg=="
},
"tweetnacl"
:
{
"version"
:
"0.14.5"
,
"resolved"
:
"https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz"
,
"integrity"
:
"sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
,
"dev"
:
true
,
"optional"
:
true
},
"type-check"
:
{
"version"
:
"0.3.2"
,
"resolved"
:
"https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz"
,
"integrity"
:
"sha1-WITKtRLPHTVeP7eE8wgEsrUg23I="
,
"requires"
:
{
"prelude-ls"
:
"~1.1.2"
}
},
"typedarray"
:
{
"version"
:
"0.0.6"
,
"resolved"
:
"https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz"
,
...
...
@@ -5050,8 +5315,7 @@
"uuid"
:
{
"version"
:
"3.3.2"
,
"resolved"
:
"https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz"
,
"integrity"
:
"sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA=="
,
"dev"
:
true
"integrity"
:
"sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA=="
},
"v8flags"
:
{
"version"
:
"3.1.1"
,
...
...
@@ -5078,11 +5342,19 @@
"integrity"
:
"sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM="
,
"dev"
:
true
},
"vditor"
:
{
"version"
:
"0.2.5"
,
"resolved"
:
"https://registry.npmjs.org/vditor/-/vditor-0.2.5.tgz"
,
"integrity"
:
"sha512-dzpCDZzEu6kxcNqcPvB5t5PKF2k/BEFMajzGPBImPy2Yif0IPEFc8YhuR3twI3E+WCf8z/pBGczRP5uATMj//g=="
,
"requires"
:
{
"turndown"
:
"^5.0.3"
,
"turndown-plugin-gfm"
:
"^1.0.2"
}
},
"verror"
:
{
"version"
:
"1.10.0"
,
"resolved"
:
"https://registry.npmjs.org/verror/-/verror-1.10.0.tgz"
,
"integrity"
:
"sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA="
,
"dev"
:
true
,
"requires"
:
{
"assert-plus"
:
"^1.0.0"
,
"core-util-is"
:
"1.0.2"
,
...
...
@@ -5236,6 +5508,42 @@
"source-map"
:
"^0.5.1"
}
},
"w3c-hr-time"
:
{
"version"
:
"1.0.1"
,
"resolved"
:
"https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz"
,
"integrity"
:
"sha1-gqwr/2PZUOqeMYmlimViX+3xkEU="
,
"requires"
:
{
"browser-process-hrtime"
:
"^0.1.2"
}
},
"webidl-conversions"
:
{
"version"
:
"4.0.2"
,
"resolved"
:
"https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz"
,
"integrity"
:
"sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg=="
},
"whatwg-encoding"
:
{
"version"
:
"1.0.5"
,
"resolved"
:
"https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz"
,
"integrity"
:
"sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw=="
,
"requires"
:
{
"iconv-lite"
:
"0.4.24"
}
},
"whatwg-mimetype"
:
{
"version"
:
"2.3.0"
,
"resolved"
:
"https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz"
,
"integrity"
:
"sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g=="
},
"whatwg-url"
:
{
"version"
:
"6.5.0"
,
"resolved"
:
"https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz"
,
"integrity"
:
"sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ=="
,
"requires"
:
{
"lodash.sortby"
:
"^4.7.0"
,
"tr46"
:
"^1.0.1"
,
"webidl-conversions"
:
"^4.0.2"
}
},
"which"
:
{
"version"
:
"1.3.0"
,
"resolved"
:
"https://registry.npmjs.org/which/-/which-1.3.0.tgz"
,
...
...
@@ -5260,6 +5568,11 @@
"string-width"
:
"^1.0.2 || 2"
}
},
"wordwrap"
:
{
"version"
:
"1.0.0"
,
"resolved"
:
"https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz"
,
"integrity"
:
"sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus="
},
"wrap-ansi"
:
{
"version"
:
"2.1.0"
,
"resolved"
:
"https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz"
,
...
...
@@ -5276,6 +5589,19 @@
"integrity"
:
"sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
,
"dev"
:
true
},
"ws"
:
{
"version"
:
"5.2.2"
,
"resolved"
:
"https://registry.npmjs.org/ws/-/ws-5.2.2.tgz"
,
"integrity"
:
"sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA=="
,
"requires"
:
{
"async-limiter"
:
"~1.0.0"
}
},
"xml-name-validator"
:
{
"version"
:
"3.0.0"
,
"resolved"
:
"https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz"
,
"integrity"
:
"sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw=="
},
"xtend"
:
{
"version"
:
"4.0.1"
,
"resolved"
:
"https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz"
,
...
...
package.json
View file @
7ee15874
...
...
@@ -35,5 +35,7 @@
"
gulp-sass
"
:
"
^4.0.1
"
,
"
gulp-uglify
"
:
"
^3.0.1
"
},
"dependencies"
:
{}
"dependencies"
:
{
"
vditor
"
:
"
^0.2.5
"
}
}
src/main/webapp/admin/admin-about.ftl
View file @
7ee15874
...
...
@@ -27,16 +27,16 @@
<img width="128" src="${staticServePath}/images/logo.png" alt="Solo" title="Solo" />
</a>
</div>
<div class="left content-reset about__panel" style="margin-left: 20px;">
<div id="aboutLatest" class="about-margin left">
<div class="
fn__
left content-reset about__panel" style="margin-left: 20px;">
<div id="aboutLatest" class="about-margin
fn__
left">
${checkingVersionLabel}
</div>
<iframe src="https://ghbtns.com/github-btn.html?user=b3log&repo=solo&type=star&count=true&size=large"
frameborder="0" scrolling="0" width="160px" height="30px" class="about__iframe"
style="margin: 21px 0 0 20px;border: 0"
class="left"></iframe>
<div class="clear"></div>
class="
fn__
left"></iframe>
<div class="
fn__
clear"></div>
${aboutContentLabel}
<ul class="about-list">
...
...
@@ -44,9 +44,9 @@
<li><a target="_blank" href="https://hacpai.com/article/1537690756242">Solo 从设计到实现</a></li>
<li><a target="_blank" href="https://hacpai.com/article/1493814851007">皮肤开发指南</a></li>
</ul>
<button class="right" onclick="window.open('https://b3log.org/donate.html')">${sponsorLabel}</button>
<button class="
fn__
right" onclick="window.open('https://b3log.org/donate.html')">${sponsorLabel}</button>
</div>
<span class="clear" /> <br/>
<span class="
fn__
clear" /> <br/>
</div>
</div>
${plugins}
src/main/webapp/admin/admin-article-list.ftl
View file @
7ee15874
...
...
@@ -17,15 +17,15 @@
along with this program. If not, see <https://www.gnu.org/licenses/>.
-->
<div class="form margin12">
<div class="form
fn__
margin12">
<input type="text" id="articleListInput">
<button class="search-btn" id="articleListBtn">${searchLabel}</button>
</div>
<div id="articleTable">
</div>
<div id="articlePagination" class="
right
margin12">
<div id="articlePagination" class="
fn__right fn__
margin12">
</div>
<div id="articleComments" class="none">
<div id="articleComments" class="
fn__
none">
</div>
<div class="clear"></div>
<div class="
fn__
clear"></div>
${plugins}
src/main/webapp/admin/admin-article.ftl
View file @
7ee15874
...
...
@@ -24,14 +24,14 @@
</div>
<div>
<label>${content1Label}</label>
<div class="right">
<div class="
fn__
right">
<label for="articleThumbnail" style="margin-bottom: 0">
${useTumbnailLabel}
<input type="checkbox" style="vertical-align: middle;"
id="articleThumbnail" onclick="$('.article__thumbnail').slideToggle()" />
</label>
</div>
<div class="clear"></div>
<div class="
fn__
clear"></div>
<div class="article__thumbnail">
<div class="thumbnail__img"></div>
<button id="articleThumbnailBtn">${chageLabel}</button>
...
...
@@ -58,7 +58,7 @@
<label for="permalink" class="permalink__label" style="margin-bottom: 0">${permalink1Label}</label>
<input id="permalink" class="fn__flex1" type="text" style="margin: 0 12px 0 6px;" />
</div>
<div class="right viewpwd__panel">
<div class="
fn__
right viewpwd__panel">
<label for="viewPwd">${articleViewPwd1Label}</label>
<input id="viewPwd" type="text" style="width: 156px" />
</div>
...
...
@@ -71,7 +71,7 @@
<button id="articleSign3">${signLabel}3</button>
<button id="articleSign0">${noSignLabel}</button>
</span>
<div class="right article-commentable__panel">
<div class="
fn__
right article-commentable__panel">
<label class="checkbox">
<input type="checkbox" id="articleCommentable" checked />
${allowCommentLabel}
...
...
@@ -84,13 +84,13 @@
</label>
</span>
</div>
<div class="clear"></div>
<div class="
fn__
clear"></div>
</div>
<div class="right">
<button id="unSubmitArticle" class="none marginRight12" onclick="admin.article.unPublish();">${unPublishLabel}</button>
<div class="
fn__
right">
<button id="unSubmitArticle" class="
fn__
none marginRight12" onclick="admin.article.unPublish();">${unPublishLabel}</button>
<button class="marginRight12" id="saveArticle">${saveLabel}${draftListLabel}</button>
<button id="submitArticle">${publishLabel}</button>
</div>
<div class="clear"></div>
<div class="
fn__
clear"></div>
</div>
${plugins}
\ No newline at end of file
src/main/webapp/admin/admin-category-list.ftl
View file @
7ee15874
...
...
@@ -19,9 +19,9 @@
-->
<div>
<div id="categoryTable"></div>
<div id="categoryPagination" class="
margin12
right"></div>
<div id="categoryPagination" class="
fn__margin12 fn__
right"></div>
</div>
<div class="clear"></div>
<div class="
fn__
clear"></div>
<div class="form form__no-table">
${addCategoryLabel}
<label for="categoryName">${linkTitle1Label}</label>
...
...
@@ -34,10 +34,10 @@ ${addCategoryLabel}
<span class="tag__select">
<input id="categoryTags" type="text"/>
</span><br>
<button onclick="admin.categoryList.add();" class="right">${saveLabel}</button>
<div class="clear"></div>
<button onclick="admin.categoryList.add();" class="
fn__
right">${saveLabel}</button>
<div class="
fn__
clear"></div>
</div>
<div id="categoryUpdate" class="none form__no-table form" data-title="${updateCategoryLabel}">
<div id="categoryUpdate" class="
fn__
none form__no-table form" data-title="${updateCategoryLabel}">
<label for="categoryNameUpdate">${linkTitle1Label}</label>
<input id="categoryNameUpdate" type="text"/>
<label for="categoryURIUpdate">URI:</label>
...
...
@@ -46,7 +46,7 @@ ${addCategoryLabel}
<input id="categoryDescUpdate" type="text"/>
<label for="categoryTagsUpdate">${tags1Label}</label>
<input id="categoryTagsUpdate" type="text"/> <br><br>
<button onclick="admin.categoryList.update();" class="right">${updateLabel}</button>
<div class="clear"></div>
<button onclick="admin.categoryList.update();" class="
fn__
right">${updateLabel}</button>
<div class="
fn__
clear"></div>
</div>
${plugins}
src/main/webapp/admin/admin-comment-list.ftl
View file @
7ee15874
...
...
@@ -19,7 +19,7 @@
-->
<div id="commentTable">
</div>
<div id="commentPagination" class="
right
margin12">
<div id="commentPagination" class="
fn__right fn__
margin12">
</div>
<div class="clear"></div>
<div class="
fn__
clear"></div>
${plugins}
\ No newline at end of file
src/main/webapp/admin/admin-draft-list.ftl
View file @
7ee15874
...
...
@@ -19,9 +19,9 @@
-->
<div id="draftTable">
</div>
<div id="draftPagination" class="
right
margin12">
<div id="draftPagination" class="
fn__right fn__
margin12">
</div>
<div class="clear"></div>
<div id="draftComments" class="none">
<div class="
fn__
clear"></div>
<div id="draftComments" class="
fn__
none">
</div>
${plugins}
\ No newline at end of file
src/main/webapp/admin/admin-index.ftl
View file @
7ee15874
...
...
@@ -27,11 +27,9 @@
<meta
name=
"apple-mobile-web-app-capable"
content=
"yes"
>
<meta
name=
"apple-mobile-web-app-status-bar-style"
content=
"black"
>
<meta
http-equiv=
"Window-target"
content=
"_top"
>
<meta
name=
"robots"
content=
"none"
/>
<meta
name=
"robots"
content=
"
fn__
none"
/>
<title>
${adminConsoleLabel} - ${blogTitle}
</title>
<link
type=
"text/css"
rel=
"stylesheet"
href=
"${staticServePath}/scss/base.css?${staticResourceVersion}"
/>
<link
type=
"text/css"
rel=
"stylesheet"
href=
"${staticServePath}/scss/admin.css?${staticResourceVersion}"
/>
<link
type=
"text/css"
rel=
"stylesheet"
href=
"${staticServePath}/js/lib/vditor-0.2.5/index.classic.css"
/>
<link
type=
"text/css"
rel=
"stylesheet"
href=
"${staticServePath}/js/lib/highlight-9.13.1/styles/github.css?${staticResourceVersion}"
/>
<link
rel=
"icon"
type=
"image/png"
href=
"${staticServePath}/favicon.png"
/>
<link
rel=
"manifest"
href=
"${servePath}/manifest.json"
>
...
...
@@ -44,9 +42,9 @@
<a
href=
"${servePath}"
target=
"_blank"
class=
"hover"
>
Solo
</a>
<span
class=
"icon-unordered-list top__menu none"
<span
class=
"icon-unordered-list top__menu
fn__
none"
onclick=
"admin.toggleMenu()"
></span>
<span
class=
"
right"
>
<span
class=
"
fn__right"
>
<a
href=
"${servePath}"
title=
'${indexLabel}'
>
<div
class=
"avatar"
style=
"background-image: url(${gravatar})"
></div>
${userName}
...
...
@@ -67,7 +65,7 @@
<div
id=
"tabArticleTitle"
class=
"tab-current"
onclick=
"admin.collapseNav(this)"
>
<span
class=
"icon-article"
></span>
${articleLabel}
<span
class=
"icon-chevron-up right"
></span>
<span
class=
"icon-chevron-up
fn__
right"
></span>
</div>
<ul
id=
"tabArticleMgt"
>
<li>
...
...
@@ -98,9 +96,9 @@
<div
id=
"tabToolsTitle"
onclick=
"admin.collapseNav(this)"
>
<span
class=
"icon-setting"
></span>
${ToolLabel}
<span
class=
"icon-chevron-down right"
></span>
<span
class=
"icon-chevron-down
fn__
right"
></span>
</div>
<ul
class=
"none"
id=
"tabTools"
>
<ul
class=
"
fn__
none"
id=
"tabTools"
>
<li>
<div
id=
"tabs_preference"
>
<a
href=
"#tools/preference"
>
${preferenceLabel}
</a>
...
...
@@ -149,21 +147,21 @@
</div>
<div
class=
"tabs__bg"
onclick=
"admin.toggleMenu()"
></div>
<div
id=
"tabsPanel"
>
<div
id=
"tabsPanel_main"
class=
"none"
></div>
<div
id=
"tabsPanel_article"
class=
"none"
></div>
<div
id=
"tabsPanel_article-list"
class=
"none"
></div>
<div
id=
"tabsPanel_draft-list"
class=
"none"
></div>
<div
id=
"tabsPanel_link-list"
class=
"none"
></div>
<div
id=
"tabsPanel_preference"
class=
"none"
></div>
<div
id=
"tabsPanel_category-list"
class=
"none"
></div>
<div
id=
"tabsPanel_page-list"
class=
"none"
></div>
<div
id=
"tabsPanel_others"
class=
"none"
></div>
<div
id=
"tabsPanel_user-list"
class=
"none"
></div>
<div
id=
"tabsPanel_comment-list"
class=
"none"
></div>
<div
id=
"tabsPanel_plugin-list"
class=
"none"
></div>
<div
id=
"tabsPanel_about"
class=
"none"
></div>
</div>
<div
class=
"clear"
></div>
<div
id=
"tabsPanel_main"
class=
"
fn__
none"
></div>
<div
id=
"tabsPanel_article"
class=
"
fn__
none"
></div>
<div
id=
"tabsPanel_article-list"
class=
"
fn__
none"
></div>
<div
id=
"tabsPanel_draft-list"
class=
"
fn__
none"
></div>
<div
id=
"tabsPanel_link-list"
class=
"
fn__
none"
></div>
<div
id=
"tabsPanel_preference"
class=
"
fn__
none"
></div>
<div
id=
"tabsPanel_category-list"
class=
"
fn__
none"
></div>
<div
id=
"tabsPanel_page-list"
class=
"
fn__
none"
></div>
<div
id=
"tabsPanel_others"
class=
"
fn__
none"
></div>
<div
id=
"tabsPanel_user-list"
class=
"
fn__
none"
></div>
<div
id=
"tabsPanel_comment-list"
class=
"
fn__
none"
></div>
<div
id=
"tabsPanel_plugin-list"
class=
"
fn__
none"
></div>
<div
id=
"tabsPanel_about"
class=
"
fn__
none"
></div>
</div>
<div
class=
"
fn__
clear"
></div>
<div
class=
"footer"
>
Powered by
<a
href=
"https://b3log.org"
target=
"_blank"
>
B3log 开源
</a>
•
<a
href=
"https://solo.b3log.org"
target=
"_blank"
>
Solo
</a>
${version}
</div>
...
...
src/main/webapp/admin/admin-link-list.ftl
View file @
7ee15874
...
...
@@ -19,9 +19,9 @@
-->
<div>
<div id="linkTable"></div>
<div id="linkPagination" class="
margin12
right"></div>
<div id="linkPagination" class="
fn__margin12 fn__
right"></div>
</div>
<div class="clear"></div>
<div class="
fn__
clear"></div>
<div class="form form__no-table">
${addLinkLabel}
<label>${linkTitle1Label}</label>
...
...
@@ -30,17 +30,17 @@ ${addLinkLabel}
<input id="linkAddress" type="text"/>
<label>${linkDescription1Label}</label>
<input id="linkDescription" type="text"/> <br><br>
<button onclick="admin.linkList.add();" class="right">${saveLabel}</button>
<div class="clear"></div>
<button onclick="admin.linkList.add();" class="
fn__
right">${saveLabel}</button>
<div class="
fn__
clear"></div>
</div>
<div id="updateLink" class="none form form__no-table" data-title="${updateLinkLabel}">
<div id="updateLink" class="
fn__
none form form__no-table" data-title="${updateLinkLabel}">
<label>${linkTitle1Label}</label>
<input id="linkTitleUpdate" type="text"/>
<label>${url1Label}</label>
<input id="linkAddressUpdate" type="text"/>
<label>${linkDescription1Label}</label>
<input id="linkDescriptionUpdate" type="text"/><br><br>
<button onclick="admin.linkList.update();" class="right">${updateLabel}</button>
<div class="clear"></div>
<button onclick="admin.linkList.update();" class="
fn__
right">${updateLabel}</button>
<div class="
fn__
clear"></div>
</div>
${plugins}
\ No newline at end of file
src/main/webapp/admin/admin-others.ftl
View file @
7ee15874
...
...
@@ -42,21 +42,21 @@
<input id="replayEmailTemplateTitle" type="text"/>
<label for="replayEmailTemplateBody">${emailContent1Label}</label>
<textarea rows="9" id="replayEmailTemplateBody"></textarea><br><br>
<button onclick="admin.others.update()" class="right">${updateLabel}</button>
<div class="clear"></div>
<button onclick="admin.others.update()" class="
fn__
right">${updateLabel}</button>
<div class="
fn__
clear"></div>
<div class="content-reset">
${replayEmailExplanationLabel}
</div>
</div>
<div id="tabOthersPanel_tag" class="none">
<button class="margin12" onclick="admin.others.removeUnusedTags();">${removeUnusedTagsLabel}</button>
<div id="tabOthersPanel_tag" class="
fn__
none">
<button class="
fn__
margin12" onclick="admin.others.removeUnusedTags();">${removeUnusedTagsLabel}</button>
</div>
<div id="tabOthersPanel_data" class="none">
<div id="tabOthersPanel_data" class="
fn__
none">
<#if supportExport>
<button class="margin12" onclick="admin.others.exportSQL();">${exportSQLLabel}</button>
<button class="
fn__
margin12" onclick="admin.others.exportSQL();">${exportSQLLabel}</button>
</#if>
<button class="margin12" onclick="admin.others.exportJSON();">${exportJSONLabel}</button>
<button class="margin12" onclick="admin.others.exportHexo();">${exportHexoLabel}</button>
<button class="
fn__
margin12" onclick="admin.others.exportJSON();">${exportJSONLabel}</button>
<button class="
fn__
margin12" onclick="admin.others.exportHexo();">${exportHexoLabel}</button>
</div>
</div>
${plugins}
src/main/webapp/admin/admin-page-list.ftl
View file @
7ee15874
...
...
@@ -20,9 +20,9 @@
<div>
<div id="pageTable">
</div>
<div id="pagePagination" class="
margin12
right">
<div id="pagePagination" class="
fn__margin12 fn__
right">
</div>
<div class="clear"></div>
<div class="
fn__
clear"></div>
</div>
<div class="form">
<div>
...
...
@@ -49,16 +49,16 @@
<button data-type="link" class="selected fn-type">${pageLinkLabel}</button>
<button data-type="page" class="fn-type">${pageLabel}</button>
</div>
<div id="pagePagePanel" class="none">
<div id="pagePagePanel" class="
fn__
none">
<div id="pageContent" style="height: 430px;width: 100%;" name="pageContent"></div>
<label>${allowComment1Label}</label>
<input type="checkbox" id="pageCommentable" checked="checked" />
</div>
<div class="right">
<div class="
fn__
right">
<button onclick="admin.pageList.submit();">${saveLabel}</button>
</div>
<div class="clear"></div>
<div class="
fn__
clear"></div>
</div>
<div id="pageComments" class="none"></div>
<div class="clear"></div>
<div id="pageComments" class="
fn__
none"></div>
<div class="
fn__
clear"></div>
${plugins}
src/main/webapp/admin/admin-plugin-list.ftl
View file @
7ee15874
...
...
@@ -19,9 +19,9 @@
-->
<div id="pluginTable">
</div>
<div id="pluginPagination" class="
margin12
right">
<div id="pluginPagination" class="
fn__margin12 fn__
right">
</div>
<div id="pluginSetting" class="none">
<div id="pluginSetting" class="
fn__
none">
</div>
<div class="clear"></div>
<div class="
fn__
clear"></div>
${plugins}
src/main/webapp/admin/admin-preference.ftl
View file @
7ee15874
...
...
@@ -17,7 +17,7 @@
along with this program. If not, see <https://www.gnu.org/licenses/>.
-->
<div id="tabPreference" class="sub-tabs fn
-
clear">
<div id="tabPreference" class="sub-tabs fn
__
clear">
<ul>
<li>
<div id="tabPreference_config">
...
...
@@ -43,8 +43,8 @@
</div>
<div id="tabPreferencePanel" class="sub-tabs-main">
<div id="tabPreferencePanel_config" class="form">
<button onclick="admin.preference.update()" class="right">${updateLabel}</button>
<div class="clear"></div>
<button onclick="admin.preference.update()" class="
fn__
right">${updateLabel}</button>
<div class="
fn__
clear"></div>
<label for="blogTitle">${blogTitle1Label}</label>
<input id="blogTitle" type="text"/>
<label for="blogSubtitle">${blogSubtitle1Label}</label>
...
...
@@ -61,12 +61,12 @@
<textarea rows="6" id="noticeBoard"></textarea>
<label for="footerContent">${footerContent1Label}</label>
<textarea rows="2" id="footerContent"></textarea><br><br>
<button onclick="admin.preference.update()" class="right">${updateLabel}</button>
<div class="clear"></div>
<button onclick="admin.preference.update()" class="
fn__
right">${updateLabel}</button>
<div class="
fn__
clear"></div>
</div>
<div id="tabPreferencePanel_setting" class="none form">
<button class="right" onclick="admin.preference.update()">${updateLabel}</button>
<div class="clear"></div>
<div id="tabPreferencePanel_setting" class="
fn__
none form">
<button class="
fn__
right" onclick="admin.preference.update()">${updateLabel}</button>
<div class="
fn__
clear"></div>
<label for="localeString">${localeString1Label}</label>
<select id="localeString">
<option value="zh_CN">简体中文</option>
...
...
@@ -117,17 +117,17 @@
<input id="feedOutputCnt" class="normalInput" type="text"/>
<label for="customVars">${customVars1Label}</label>
<input id="customVars" class="normalInput" type="text"/><br/><br/>
<button class="right" onclick="admin.preference.update()">${updateLabel}</button>
<div class="clear"></div>
<button class="
fn__
right" onclick="admin.preference.update()">${updateLabel}</button>
<div class="
fn__
clear"></div>
</div>
<div id="tabPreferencePanel_skins" class="none form">
<div id="tabPreferencePanel_skins" class="
fn__
none form">
<table class="form" width="100%" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<a href="https://github.com/b3log/solo/issues/12449" target="_blank">新皮肤推荐</a> •
<a href="https://hacpai.com/article/1493814851007" target="_blank">皮肤开发指南</a>
<button
style="float:
right" onclick="admin.preference.update()">${updateLabel}</button>
<button
class="fn__
right" onclick="admin.preference.update()">${updateLabel}</button>
</td>
</tr>
<tr>
...
...
@@ -139,23 +139,23 @@
<td>
<a href="https://github.com/b3log/solo/issues/12449" target="_blank">新皮肤推荐</a> •
<a href="https://hacpai.com/article/1493814851007" target="_blank">皮肤开发指南</a>
<button
style="float:
right" onclick="admin.preference.update()">${updateLabel}</button>
<button
class="fn__
right" onclick="admin.preference.update()">${updateLabel}</button>
</td>
</tr>
</tbody>
</table>
</div>
<div id="tabPreferencePanel_signs" class="none form">
<button onclick="admin.preference.update()" class="right">${updateLabel}</button>
<div class="clear"></div>
<div id="tabPreferencePanel_signs" class="
fn__
none form">
<button onclick="admin.preference.update()" class="
fn__
right">${updateLabel}</button>
<div class="
fn__
clear"></div>
<button id="preferenceSignButton1">${signLabel}1</button>
<textarea rows="8" id="preferenceSign1"></textarea>
<button id="preferenceSignButton2">${signLabel}2</button>
<textarea rows="8" id="preferenceSign2"></textarea>
<button id="preferenceSignButton3">${signLabel}3</button>
<textarea rows="8" id="preferenceSign3"></textarea><br><br>
<button onclick="admin.preference.update()" class="right">${updateLabel}</button>
<div class="clear"></div>
<button onclick="admin.preference.update()" class="
fn__
right">${updateLabel}</button>
<div class="
fn__
clear"></div>
</div>
</div>
${plugins}
src/main/webapp/admin/admin-user-list.ftl
View file @
7ee15874
...
...
@@ -19,11 +19,11 @@
-->
<div>
<div id="userTable"></div>
<div id="userPagination" class="
margin12
right"></div>
<div id="userPagination" class="
fn__margin12 fn__
right"></div>
</div>
<div class="clear"></div>
<div class="
fn__
clear"></div>
<div class="form form__no-table">
<div id="userUpdate" class="none form form__no-table">
<div id="userUpdate" class="
fn__
none form form__no-table">
<label for="userNameUpdate">${userName1Label}</label>
<input id="userNameUpdate" type="text"/>
<label for="userEmailUpdate">${commentEmailLabel}</label>
...
...
@@ -35,7 +35,7 @@
<label for="userB3KeyUpdate">B3 Key</label>
<input id="userB3KeyUpdate" type="text"/>
<br><br>
<button onclick="admin.userList.update();" class="right">${updateLabel}</button>
<div class="clear"></div>
<button onclick="admin.userList.update();" class="
fn__
right">${updateLabel}</button>
<div class="
fn__
clear"></div>
</div>
${plugins}
src/main/webapp/admin/article-pwd.ftl
View file @
7ee15874
...
...
@@ -28,7 +28,7 @@ ${articleTitle}
<label for="pwdTyped">访问密码</label>
<input type="password" id="pwdTyped" name="pwdTyped" />
<input type="hidden" name="articleId" value="${articleId}" />
<div style="text-align: right">
<div style="text-align:
fn__
right">
<#if msg??>
<span class="error">${msg}</span>
</#if>
...
...
src/main/webapp/js/admin/admin.js
View file @
7ee15874
...
...
@@ -240,10 +240,10 @@ $.extend(Admin.prototype, {
var
subNav
=
$
(
it
).
next
();
subNav
.
slideToggle
(
"
normal
"
,
function
()
{
if
(
this
.
style
.
display
!==
"
none
"
)
{
$
(
it
).
find
(
"
.icon-chevron-down
"
)[
0
].
className
=
"
icon-chevron-up right
"
;
$
(
it
).
find
(
"
.icon-chevron-down
"
)[
0
].
className
=
"
icon-chevron-up
fn__
right
"
;
$
(
it
).
addClass
(
'
tab-current
'
);
}
else
{
$
(
it
).
find
(
"
.icon-chevron-up
"
)[
0
].
className
=
"
icon-chevron-down right
"
;
$
(
it
).
find
(
"
.icon-chevron-up
"
)[
0
].
className
=
"
icon-chevron-down
fn__
right
"
;
$
(
it
).
removeClass
(
'
tab-current
'
);
}
...
...
src/main/webapp/js/admin/admin.min.js
View file @
7ee15874
...
...
@@ -15,7 +15,7 @@
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
var
Admin
=
function
(){
this
.
register
=
{},
this
.
tools
=
[
"
#page-list
"
,
"
#file-list
"
,
"
#link-list
"
,
"
#preference
"
,
"
#user-list
"
,
"
#plugin-list
"
,
"
#others
"
,
"
#category-list
"
],
this
.
adTools
=
[
"
link-list
"
,
"
preference
"
,
"
file-list
"
,
"
page-list
"
,
"
user-list
"
,
"
plugin-list
"
,
"
others
"
,
"
category-list
"
]};
$
.
extend
(
Admin
.
prototype
,{
logout
:
function
(){
window
.
location
.
href
=
latkeConfig
.
servePath
+
"
/logout
"
},
toggleMenu
:
function
(){
"
-240px
"
===
$
(
"
#tabs
"
).
css
(
"
left
"
)?(
$
(
"
#tabs
"
).
css
(
"
left
"
,
0
),
$
(
"
.tabs__bg
"
).
show
()):(
$
(
"
#tabs
"
).
css
(
"
left
"
,
"
-240px
"
),
$
(
"
.tabs__bg
"
).
hide
())},
clearTip
:
function
(){
$
(
"
#tipMsg
"
).
text
(
""
),
$
(
"
#loadMsg
"
).
text
(
""
)},
setHashByPage
:
function
(
t
){
var
e
=
window
.
location
.
hash
.
split
(
"
/
"
);
/^
\d
*$/
.
test
(
e
[
e
.
length
-
1
])?
e
[
e
.
length
-
1
]
=
t
:
e
.
push
(
t
),
window
.
location
.
hash
=
e
.
join
(
"
/
"
)},
selectTab
:
function
(
t
){
window
.
location
.
hash
=
"
#
"
+
t
},
analyseHash
:
function
(){
for
(
var
t
=
window
.
location
.
hash
,
e
=
t
.
substr
(
1
,
t
.
length
-
1
).
split
(
"
/
"
),
i
=
{
page
:
1
,
hashList
:[]},
a
=
0
;
a
<
e
.
length
;
a
++
)
a
===
e
.
length
-
1
&&
/^
\d
+$/
.
test
(
e
[
a
])?
i
.
page
=
e
[
a
]:
i
.
hashList
.
push
(
e
[
a
]);
return
i
},
setCurByHash
:
function
(){
$
(
window
).
scrollTop
(
0
),
$
(
"
#tipMsg
"
).
text
(
""
);
var
t
=
admin
.
analyseHash
(),
e
=
t
.
hashList
[
1
],
i
=
t
.
hashList
[
2
];
if
(
1
===
t
.
hashList
.
length
&&
(
e
=
t
.
hashList
[
0
]),
""
!==
e
){
"
article
"
!==
e
?
admin
.
article
.
clearDraftTimer
():
"
article
"
===
e
&&
(
admin
.
article
.
autoSaveDraftTimer
=
setInterval
(
function
(){
admin
.
article
.
_autoSaveToDraft
()},
admin
.
article
.
AUTOSAVETIME
));
try
{
if
(
"
article
"
!==
e
&&
admin
.
article
.
isConfirm
&&
""
!==
admin
.
editors
.
articleEditor
.
getContent
().
replace
(
/
\s
/g
,
""
)
&&
admin
.
article
.
content
!==
admin
.
editors
.
articleEditor
.
getContent
()
&&!
confirm
(
Label
.
editorLeaveLabel
))
return
void
(
window
.
location
.
hash
=
"
#article/article
"
);
if
(
"
article
"
===
e
&&
admin
.
article
.
isConfirm
&&
""
!==
admin
.
editors
.
articleEditor
.
getContent
().
replace
(
/
\s
/g
,
""
)
&&
admin
.
article
.
content
!==
admin
.
editors
.
articleEditor
.
getContent
())
return
}
catch
(
t
){
var
a
=
$
(
"
#articleContent
"
);
if
(
0
<
a
.
length
){
if
(
"
article
"
!==
e
&&
admin
.
article
.
isConfirm
&&
""
!==
a
.
val
().
replace
(
/
\s
/g
,
""
)
&&
admin
.
article
.
content
!==
a
.
val
()
&&!
confirm
(
Label
.
editorLeaveLabel
))
return
void
(
window
.
location
.
hash
=
"
#article/article
"
);
if
(
"
article
"
===
e
&&
admin
.
article
.
isConfirm
&&
""
!==
a
.
val
().
replace
(
/
\s
/g
,
""
)
&&
admin
.
article
.
content
!==
a
.
val
())
return
}}
"
article
"
!==
e
&&
admin
.
editors
.
articleEditor
.
setContent
&&
admin
.
article
.
clear
(),
admin
.
article
.
isConfirm
=!
0
,
$
(
"
#tabs
"
).
tabs
(
"
setCurrent
"
,
e
),
$
(
"
#loadMsg
"
).
text
(
Label
.
loadingLabel
),
1
===
$
(
"
#tabsPanel_
"
+
e
).
length
?
""
===
$
(
"
#tabsPanel_
"
+
e
).
html
().
replace
(
/
\s
/g
,
""
)?
$
(
"
#tabsPanel_
"
+
e
).
load
(
"
admin-
"
+
e
+
"
.do
"
,
function
(){
"
article
"
===
e
&&
admin
.
article
.
status
.
id
?
admin
.
register
[
e
].
init
.
call
(
admin
.
register
[
e
].
obj
,
admin
.
article
.
getAndSet
):
admin
.
register
[
e
].
init
.
call
(
admin
.
register
[
e
].
obj
,
t
.
page
),
i
&&
$
(
"
#tab
"
+
e
.
substring
(
0
,
1
).
toUpperCase
()
+
e
.
substring
(
1
)).
tabs
(
"
setCurrent
"
,
i
),
admin
.
plugin
.
setCurByHash
(
t
)}):(
"
article
"
===
e
&&
admin
.
article
.
status
.
id
&&
admin
.
article
.
getAndSet
(),
admin
.
register
[
e
]
&&
admin
.
register
[
e
].
refresh
&&
admin
.
register
[
e
].
refresh
.
call
(
admin
.
register
[
e
].
obj
,
t
.
page
),
i
&&
$
(
"
#tab
"
+
e
.
substring
(
0
,
1
).
toUpperCase
()
+
e
.
substring
(
1
)).
tabs
(
"
setCurrent
"
,
i
),
admin
.
plugin
.
setCurByHash
(
t
)):(
$
(
"
#tipMsg
"
).
text
(
"
Error: No tab!
"
+
Label
.
reportIssueLabel
),
$
(
"
#loadMsg
"
).
text
(
""
))}},
init
:
function
(){
Util
.
killIE
(),
$
(
"
#loadMsg
"
).
text
(
Label
.
loadingLabel
),
$
(
"
#tabs
"
).
tabs
(),
setInterval
(
function
(){
""
!==
$
(
"
#tipMsg
"
).
text
()
&&
setTimeout
(
function
(){
$
(
"
#tipMsg
"
).
text
(
""
)},
7
e3
)},
6
e3
),
$
(
"
#loadMsg
"
).
text
(
""
)},
collapseNav
:
function
(
t
){
$
(
t
).
next
().
slideToggle
(
"
normal
"
,
function
(){
"
none
"
!==
this
.
style
.
display
?(
$
(
t
).
find
(
"
.icon-chevron-down
"
)[
0
].
className
=
"
icon-chevron-up right
"
,
$
(
t
).
addClass
(
"
tab-current
"
)):(
$
(
t
).
find
(
"
.icon-chevron-up
"
)[
0
].
className
=
"
icon-chevron-down right
"
,
$
(
t
).
removeClass
(
"
tab-current
"
)),
$
(
"
#tabs > ul
"
).
height
(
"
auto
"
),
$
(
"
#tabs > ul
"
).
height
(
$
(
"
#tabs > ul
"
).
height
()
+
80
)})},
inited
:
function
(){
if
(
"
adminRole
"
!==
Label
.
userRole
)
for
(
var
t
=
0
;
t
<
this
.
adTools
.
length
;
t
++
)
$
(
"
#tabs
"
).
tabs
(
"
remove
"
,
this
.
adTools
[
t
]);
else
for
(
var
e
=
0
;
e
<
this
.
tools
.
length
;
e
++
)
if
(
"
#
"
+
window
.
location
.
hash
.
split
(
"
/
"
)[
1
]
===
this
.
tools
[
e
]){
$
(
"
#tabToolsTitle
"
).
click
();
break
}
this
.
setCurByHash
()}});
var
admin
=
new
Admin
;
var
Admin
=
function
(){
this
.
register
=
{},
this
.
tools
=
[
"
#page-list
"
,
"
#file-list
"
,
"
#link-list
"
,
"
#preference
"
,
"
#user-list
"
,
"
#plugin-list
"
,
"
#others
"
,
"
#category-list
"
],
this
.
adTools
=
[
"
link-list
"
,
"
preference
"
,
"
file-list
"
,
"
page-list
"
,
"
user-list
"
,
"
plugin-list
"
,
"
others
"
,
"
category-list
"
]};
$
.
extend
(
Admin
.
prototype
,{
logout
:
function
(){
window
.
location
.
href
=
latkeConfig
.
servePath
+
"
/logout
"
},
toggleMenu
:
function
(){
"
-240px
"
===
$
(
"
#tabs
"
).
css
(
"
left
"
)?(
$
(
"
#tabs
"
).
css
(
"
left
"
,
0
),
$
(
"
.tabs__bg
"
).
show
()):(
$
(
"
#tabs
"
).
css
(
"
left
"
,
"
-240px
"
),
$
(
"
.tabs__bg
"
).
hide
())},
clearTip
:
function
(){
$
(
"
#tipMsg
"
).
text
(
""
),
$
(
"
#loadMsg
"
).
text
(
""
)},
setHashByPage
:
function
(
t
){
var
e
=
window
.
location
.
hash
.
split
(
"
/
"
);
/^
\d
*$/
.
test
(
e
[
e
.
length
-
1
])?
e
[
e
.
length
-
1
]
=
t
:
e
.
push
(
t
),
window
.
location
.
hash
=
e
.
join
(
"
/
"
)},
selectTab
:
function
(
t
){
window
.
location
.
hash
=
"
#
"
+
t
},
analyseHash
:
function
(){
for
(
var
t
=
window
.
location
.
hash
,
e
=
t
.
substr
(
1
,
t
.
length
-
1
).
split
(
"
/
"
),
i
=
{
page
:
1
,
hashList
:[]},
a
=
0
;
a
<
e
.
length
;
a
++
)
a
===
e
.
length
-
1
&&
/^
\d
+$/
.
test
(
e
[
a
])?
i
.
page
=
e
[
a
]:
i
.
hashList
.
push
(
e
[
a
]);
return
i
},
setCurByHash
:
function
(){
$
(
window
).
scrollTop
(
0
),
$
(
"
#tipMsg
"
).
text
(
""
);
var
t
=
admin
.
analyseHash
(),
e
=
t
.
hashList
[
1
],
i
=
t
.
hashList
[
2
];
if
(
1
===
t
.
hashList
.
length
&&
(
e
=
t
.
hashList
[
0
]),
""
!==
e
){
"
article
"
!==
e
?
admin
.
article
.
clearDraftTimer
():
"
article
"
===
e
&&
(
admin
.
article
.
autoSaveDraftTimer
=
setInterval
(
function
(){
admin
.
article
.
_autoSaveToDraft
()},
admin
.
article
.
AUTOSAVETIME
));
try
{
if
(
"
article
"
!==
e
&&
admin
.
article
.
isConfirm
&&
""
!==
admin
.
editors
.
articleEditor
.
getContent
().
replace
(
/
\s
/g
,
""
)
&&
admin
.
article
.
content
!==
admin
.
editors
.
articleEditor
.
getContent
()
&&!
confirm
(
Label
.
editorLeaveLabel
))
return
void
(
window
.
location
.
hash
=
"
#article/article
"
);
if
(
"
article
"
===
e
&&
admin
.
article
.
isConfirm
&&
""
!==
admin
.
editors
.
articleEditor
.
getContent
().
replace
(
/
\s
/g
,
""
)
&&
admin
.
article
.
content
!==
admin
.
editors
.
articleEditor
.
getContent
())
return
}
catch
(
t
){
var
a
=
$
(
"
#articleContent
"
);
if
(
0
<
a
.
length
){
if
(
"
article
"
!==
e
&&
admin
.
article
.
isConfirm
&&
""
!==
a
.
val
().
replace
(
/
\s
/g
,
""
)
&&
admin
.
article
.
content
!==
a
.
val
()
&&!
confirm
(
Label
.
editorLeaveLabel
))
return
void
(
window
.
location
.
hash
=
"
#article/article
"
);
if
(
"
article
"
===
e
&&
admin
.
article
.
isConfirm
&&
""
!==
a
.
val
().
replace
(
/
\s
/g
,
""
)
&&
admin
.
article
.
content
!==
a
.
val
())
return
}}
"
article
"
!==
e
&&
admin
.
editors
.
articleEditor
.
setContent
&&
admin
.
article
.
clear
(),
admin
.
article
.
isConfirm
=!
0
,
$
(
"
#tabs
"
).
tabs
(
"
setCurrent
"
,
e
),
$
(
"
#loadMsg
"
).
text
(
Label
.
loadingLabel
),
1
===
$
(
"
#tabsPanel_
"
+
e
).
length
?
""
===
$
(
"
#tabsPanel_
"
+
e
).
html
().
replace
(
/
\s
/g
,
""
)?
$
(
"
#tabsPanel_
"
+
e
).
load
(
"
admin-
"
+
e
+
"
.do
"
,
function
(){
"
article
"
===
e
&&
admin
.
article
.
status
.
id
?
admin
.
register
[
e
].
init
.
call
(
admin
.
register
[
e
].
obj
,
admin
.
article
.
getAndSet
):
admin
.
register
[
e
].
init
.
call
(
admin
.
register
[
e
].
obj
,
t
.
page
),
i
&&
$
(
"
#tab
"
+
e
.
substring
(
0
,
1
).
toUpperCase
()
+
e
.
substring
(
1
)).
tabs
(
"
setCurrent
"
,
i
),
admin
.
plugin
.
setCurByHash
(
t
)}):(
"
article
"
===
e
&&
admin
.
article
.
status
.
id
&&
admin
.
article
.
getAndSet
(),
admin
.
register
[
e
]
&&
admin
.
register
[
e
].
refresh
&&
admin
.
register
[
e
].
refresh
.
call
(
admin
.
register
[
e
].
obj
,
t
.
page
),
i
&&
$
(
"
#tab
"
+
e
.
substring
(
0
,
1
).
toUpperCase
()
+
e
.
substring
(
1
)).
tabs
(
"
setCurrent
"
,
i
),
admin
.
plugin
.
setCurByHash
(
t
)):(
$
(
"
#tipMsg
"
).
text
(
"
Error: No tab!
"
+
Label
.
reportIssueLabel
),
$
(
"
#loadMsg
"
).
text
(
""
))}},
init
:
function
(){
Util
.
killIE
(),
$
(
"
#loadMsg
"
).
text
(
Label
.
loadingLabel
),
$
(
"
#tabs
"
).
tabs
(),
setInterval
(
function
(){
""
!==
$
(
"
#tipMsg
"
).
text
()
&&
setTimeout
(
function
(){
$
(
"
#tipMsg
"
).
text
(
""
)},
7
e3
)},
6
e3
),
$
(
"
#loadMsg
"
).
text
(
""
)},
collapseNav
:
function
(
t
){
$
(
t
).
next
().
slideToggle
(
"
normal
"
,
function
(){
"
none
"
!==
this
.
style
.
display
?(
$
(
t
).
find
(
"
.icon-chevron-down
"
)[
0
].
className
=
"
icon-chevron-up
fn__
right
"
,
$
(
t
).
addClass
(
"
tab-current
"
)):(
$
(
t
).
find
(
"
.icon-chevron-up
"
)[
0
].
className
=
"
icon-chevron-down right
"
,
$
(
t
).
removeClass
(
"
tab-current
"
)),
$
(
"
#tabs > ul
"
).
height
(
"
auto
"
),
$
(
"
#tabs > ul
"
).
height
(
$
(
"
#tabs > ul
"
).
height
()
+
80
)})},
inited
:
function
(){
if
(
"
adminRole
"
!==
Label
.
userRole
)
for
(
var
t
=
0
;
t
<
this
.
adTools
.
length
;
t
++
)
$
(
"
#tabs
"
).
tabs
(
"
remove
"
,
this
.
adTools
[
t
]);
else
for
(
var
e
=
0
;
e
<
this
.
tools
.
length
;
e
++
)
if
(
"
#
"
+
window
.
location
.
hash
.
split
(
"
/
"
)[
1
]
===
this
.
tools
[
e
]){
$
(
"
#tabToolsTitle
"
).
click
();
break
}
this
.
setCurByHash
()}});
var
admin
=
new
Admin
;
admin
.
editors
=
{};
var
SoloEditor
=
function
(
e
){
this
.
conf
=
e
,
this
.
init
()};
$
.
extend
(
SoloEditor
.
prototype
,{
init
:
function
(){
this
.
editor
=
new
Vditor
(
this
.
conf
.
id
,{
cache
:
!
0
,
hint
:{
emojiPath
:
latkeConfig
.
staticServePath
+
"
/js/lib/emojify.js-1.1.0/images/basic
"
},
preview
:{
delay
:
500
,
show
:
this
.
conf
.
previewShow
,
url
:
latkeConfig
.
servePath
+
"
/console/markdown/2html
"
,
parse
:
function
(
e
){
"
none
"
!==
e
.
style
.
display
&&
(
Util
.
parseMarkdown
(
"
content-reset
"
),
Label
.
markedAvailable
||
(
hljs
.
initHighlighting
.
called
=!
1
,
hljs
.
initHighlighting
()))}},
upload
:{
max
:
10485760
,
url
:
Label
.
uploadURL
,
token
:
Label
.
uploadToken
,
filename
:
function
(
e
){
return
e
.
replace
(
/
\?
|
\\
|
\/
|:|
\|
|<|>|
\*
|
\[
|
\]
|
\s
+/g
,
"
-
"
)}},
height
:
this
.
conf
.
height
,
counter
:
102400
,
resize
:{
enable
:
this
.
conf
.
resize
},
lang
:
Label
.
localeString
,
classes
:{
preview
:
"
content-reset
"
}}),
"
function
"
==
typeof
this
.
conf
.
fun
&&
this
.
conf
.
fun
()},
getContent
:
function
(){
return
this
.
editor
.
getValue
()},
setContent
:
function
(
e
){
this
.
editor
.
setValue
(
e
)},
remove
:
function
(){
document
.
getElementById
(
this
.
editor
.
vditor
.
id
).
outerHTML
=
""
}}),
admin
.
editors
.
articleEditor
=
{},
admin
.
editors
.
abstractEditor
=
{},
admin
.
editors
.
pageEditor
=
{};
var
TablePaginate
=
function
(
a
){
this
.
id
=
a
,
this
.
currentPage
=
1
};
$
.
extend
(
TablePaginate
.
prototype
,{
buildTable
:
function
(
a
,
t
){
var
e
=
{
colModel
:
a
,
noDataTip
:
Label
.
noDataLabel
};
t
||
(
e
.
expendRow
=
{
index
:
"
expendRow
"
}),
$
(
"
#
"
+
this
.
id
+
"
Table
"
).
table
(
e
)},
initPagination
:
function
(){
var
a
=
this
.
id
;
$
(
"
#
"
+
a
+
"
Pagination
"
).
paginate
({
bind
:
function
(
a
,
t
){
t
?
$
(
"
#tipMsg
"
).
text
(
t
):
admin
.
setHashByPage
(
a
)},
currentPage
:
1
,
errorMessage
:
Label
.
inputErrorLabel
,
nextPageText
:
"
>
"
,
previousPageText
:
"
<
"
,
goText
:
Label
.
gotoLabel
,
type
:
"
custom
"
,
custom
:[
1
],
pageCount
:
1
})},
initCommentsDialog
:
function
(){
var
a
=
this
;
$
(
"
#
"
+
this
.
id
+
"
Comments
"
).
dialog
({
modal
:
!
0
,
hideFooter
:
!
0
,
close
:
function
(){
return
admin
[
a
.
id
+
"
List
"
].
getList
(
a
.
currentPage
),
!
0
}})},
updateTablePagination
:
function
(
a
,
t
,
e
){
if
((
t
=
parseInt
(
t
))
>
e
.
paginationPageCount
&&
1
<
t
)
return
$
(
"
#tipMsg
"
).
text
(
Label
.
pageLabel
+
t
+
Label
.
notFoundLabel
),
void
$
(
"
#loadMsg
"
).
text
(
""
);
$
(
"
#
"
+
this
.
id
+
"
Table
"
).
table
(
"
update
"
,{
data
:[{
groupName
:
"
all
"
,
groupData
:
a
}]}),
0
===
e
.
paginationPageCount
&&
(
e
.
paginationPageCount
=
1
),
$
(
"
#
"
+
this
.
id
+
"
Pagination
"
).
paginate
(
"
update
"
,{
pageCount
:
e
.
paginationPageCount
,
currentPage
:
t
,
custom
:
e
.
paginationPageNums
}),
this
.
currentPage
=
t
}});
function
getUUID
(){
var
a
=
(
new
Date
).
getTime
(),
t
=
"
xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx
"
.
replace
(
/
[
xy
]
/g
,
function
(
t
){
var
e
=
(
a
+
16
*
Math
.
random
())
%
16
|
0
;
return
a
=
Math
.
floor
(
a
/
16
),(
"
x
"
==
t
?
e
:
3
&
e
|
8
).
toString
(
16
)});
return
t
=
t
.
replace
(
new
RegExp
(
"
-
"
,
"
g
"
),
""
)}
admin
.
article
=
{
isConfirm
:
!
0
,
status
:{
id
:
void
0
,
isArticle
:
void
0
,
articleHadBeenPublished
:
void
0
},
content
:
""
,
autoSaveDraftTimer
:
""
,
AUTOSAVETIME
:
6
e4
,
get
:
function
(
t
,
e
){
this
.
status
.
id
=
t
,
this
.
status
.
isArticle
=
e
,
admin
.
selectTab
(
"
article/article
"
)},
getAndSet
:
function
(){
$
(
"
#loadMsg
"
).
text
(
Label
.
loadingLabel
),
$
(
"
#tipMsg
"
).
text
(
""
),
$
.
ajax
({
url
:
latkeConfig
.
servePath
+
"
/console/article/
"
+
admin
.
article
.
status
.
id
,
type
:
"
GET
"
,
cache
:
!
1
,
success
:
function
(
e
,
t
){
if
(
$
(
"
#tipMsg
"
).
text
(
e
.
msg
),
e
.
sc
){
$
(
"
#title
"
).
val
(
e
.
article
.
articleTitle
),
admin
.
article
.
status
.
articleHadBeenPublished
=
e
.
article
.
articleHadBeenPublished
,
admin
.
editors
.
articleEditor
.
setContent
(
e
.
article
.
articleContent
),
admin
.
editors
.
abstractEditor
.
setContent
(
e
.
article
.
articleAbstract
),
admin
.
article
.
content
=
admin
.
editors
.
articleEditor
.
getContent
();
for
(
var
a
=
e
.
article
.
articleTags
,
i
=
""
,
l
=
0
;
l
<
a
.
length
;
l
++
)
0
===
l
?
i
=
a
[
l
].
tagTitle
:
i
+=
"
,
"
+
a
[
l
].
tagTitle
;
$
(
"
#tag
"
).
val
(
i
),
$
(
"
#permalink
"
).
val
(
e
.
article
.
articlePermalink
),
$
(
"
#viewPwd
"
).
val
(
e
.
article
.
articleViewPwd
),
$
(
"
#articleCommentable
"
).
prop
(
"
checked
"
,
e
.
article
.
articleCommentable
);
var
s
=
e
.
article
.
signs
;
$
(
"
.signs button
"
).
each
(
function
(
t
){
parseInt
(
e
.
article
.
articleSignId
)
===
parseInt
(
s
[
t
].
oId
)?
$
(
"
#articleSign
"
+
s
[
t
].
oId
).
addClass
(
"
selected
"
):
$
(
"
#articleSign
"
+
s
[
t
].
oId
).
removeClass
(
"
selected
"
)}),
admin
.
article
.
setStatus
(),
$
(
"
#loadMsg
"
).
text
(
""
)}
else
$
(
"
#loadMsg
"
).
text
(
""
)}})},
del
:
function
(
t
,
a
,
e
){
confirm
(
Label
.
confirmRemoveLabel
+
Label
.
articleLabel
+
'
"
'
+
Util
.
htmlDecode
(
e
)
+
'
"?
'
)
&&
(
$
(
"
#loadMsg
"
).
text
(
Label
.
loadingLabel
),
$
(
"
#tipMsg
"
).
text
(
""
),
$
.
ajax
({
url
:
latkeConfig
.
servePath
+
"
/console/article/
"
+
t
,
type
:
"
DELETE
"
,
cache
:
!
1
,
success
:
function
(
t
,
e
){
$
(
"
#tipMsg
"
).
text
(
t
.
msg
),
t
.
sc
?
admin
[
a
+
"
List
"
].
getList
(
1
):
$
(
"
#loadMsg
"
).
text
(
""
)}}))},
add
:
function
(
a
,
i
){
if
(
admin
.
article
.
validate
()){
var
l
=
this
;
l
.
_addDisabled
(),
$
(
"
#loadMsg
"
).
text
(
Label
.
loadingLabel
),
$
(
"
#tipMsg
"
).
text
(
""
);
var
t
=
""
;
$
(
"
.signs button
"
).
each
(
function
(){
"
selected
"
===
this
.
className
&&
(
t
=
this
.
id
.
substr
(
this
.
id
.
length
-
1
,
1
))});
var
e
=
admin
.
editors
.
articleEditor
.
getContent
(),
s
=
admin
.
editors
.
abstractEditor
.
getContent
();
if
(
$
(
"
#articleThumbnail
"
).
prop
(
"
checked
"
)){
var
r
=
$
(
"
.thumbnail__img
"
).
css
(
"
background-image
"
);
e
=
"
.
replace
(
"
w/768
"
,
"
w/960
"
).
replace
(
"
h/432
"
,
"
h/540
"
)
+
"
)
\n\n
"
+
e
}
var
n
=
{
article
:{
articleTitle
:
$
(
"
#title
"
).
val
(),
articleContent
:
e
,
articleAbstract
:
s
,
articleTags
:
this
.
trimUniqueArray
(
$
(
"
#tag
"
).
val
()).
toString
(),
articlePermalink
:
$
(
"
#permalink
"
).
val
(),
articleIsPublished
:
a
,
articleSignId
:
t
,
postToCommunity
:
$
(
"
#postToCommunity
"
).
prop
(
"
checked
"
),
articleCommentable
:
$
(
"
#articleCommentable
"
).
prop
(
"
checked
"
),
articleViewPwd
:
$
(
"
#viewPwd
"
).
val
()}};
$
.
ajax
({
url
:
latkeConfig
.
servePath
+
"
/console/article/
"
,
type
:
"
POST
"
,
cache
:
!
1
,
data
:
JSON
.
stringify
(
n
),
success
:
function
(
t
,
e
){
if
(
i
)
return
$
(
"
#tipMsg
"
).
text
(
Label
.
autoSaveLabel
),
void
(
admin
.
article
.
status
.
id
=
t
.
oId
);
$
(
"
#tipMsg
"
).
text
(
t
.
msg
),
t
.
sc
&&
(
a
?(
admin
.
article
.
status
.
id
=
void
0
,
admin
.
selectTab
(
"
article/article-list
"
)):
admin
.
selectTab
(
"
article/draft-list
"
),
admin
.
article
.
isConfirm
=!
1
)},
complete
:
function
(
t
,
e
){
l
.
_removeDisabled
(),
$
(
"
#loadMsg
"
).
text
(
""
),
403
===
t
.
status
&&
(
$
.
get
(
"
/admin-index.do
"
),
l
.
add
(
a
))}})}},
update
:
function
(
a
,
i
){
if
(
admin
.
article
.
validate
()){
var
l
=
this
;
l
.
_addDisabled
(),
$
(
"
#loadMsg
"
).
text
(
Label
.
loadingLabel
),
$
(
"
#tipMsg
"
).
text
(
""
);
var
t
=
""
;
$
(
"
.signs button
"
).
each
(
function
(){
"
selected
"
===
this
.
className
&&
(
t
=
this
.
id
.
substr
(
this
.
id
.
length
-
1
,
1
))});
var
e
=
admin
.
editors
.
articleEditor
.
getContent
(),
s
=
admin
.
editors
.
abstractEditor
.
getContent
();
if
(
$
(
"
#articleThumbnail
"
).
prop
(
"
checked
"
)){
var
r
=
$
(
"
.thumbnail__img
"
).
css
(
"
background-image
"
);
e
=
"
.
replace
(
"
w/768
"
,
"
w/960
"
).
replace
(
"
h/432
"
,
"
h/540
"
)
+
"
)
\n\n
"
+
e
}
var
n
=
{
article
:{
oId
:
this
.
status
.
id
,
articleTitle
:
$
(
"
#title
"
).
val
(),
articleContent
:
e
,
articleAbstract
:
s
,
articleTags
:
this
.
trimUniqueArray
(
$
(
"
#tag
"
).
val
()).
toString
(),
articlePermalink
:
$
(
"
#permalink
"
).
val
(),
articleIsPublished
:
a
,
articleSignId
:
t
,
articleCommentable
:
$
(
"
#articleCommentable
"
).
prop
(
"
checked
"
),
articleViewPwd
:
$
(
"
#viewPwd
"
).
val
(),
postToCommunity
:
$
(
"
#postToCommunity
"
).
prop
(
"
checked
"
)}};
$
.
ajax
({
url
:
latkeConfig
.
servePath
+
"
/console/article/
"
,
type
:
"
PUT
"
,
cache
:
!
1
,
data
:
JSON
.
stringify
(
n
),
success
:
function
(
t
,
e
){
i
?
$
(
"
#tipMsg
"
).
text
(
Label
.
autoSaveLabel
):(
$
(
"
#tipMsg
"
).
text
(
t
.
msg
),
t
.
sc
&&
(
a
?
admin
.
selectTab
(
"
article/article-list
"
):
admin
.
selectTab
(
"
article/draft-list
"
),
$
(
"
#tipMsg
"
).
text
(
Label
.
updateSuccLabel
),
admin
.
article
.
status
.
id
=
void
0
,
admin
.
article
.
isConfirm
=!
1
))},
complete
:
function
(
t
,
e
){
l
.
_removeDisabled
(),
$
(
"
#loadMsg
"
).
text
(
""
),
403
===
t
.
status
&&
(
$
.
get
(
"
/admin-index.do
"
),
l
.
update
(
a
))}})}},
setStatus
:
function
(){
$
.
ajax
({
url
:
latkeConfig
.
servePath
+
"
/console/tags
"
,
type
:
"
GET
"
,
cache
:
!
1
,
success
:
function
(
t
,
e
){
if
(
$
(
"
#tipMsg
"
).
text
(
t
.
msg
),
t
.
sc
){
if
(
!
(
t
.
tags
.
length
<=
0
)){
$
(
"
#tagCheckboxPanel>span
"
).
remove
(
""
);
for
(
var
a
=
""
,
i
=
0
;
i
<
t
.
tags
.
length
;
i
++
)
a
+=
"
<span>
"
+
t
.
tags
[
i
].
tagTitle
+
"
</span>
"
;
$
(
"
#tagCheckboxPanel
"
).
html
(
a
+
'
<div class="clear"></div>
'
),
$
(
"
#loadMsg
"
).
text
(
""
)}}
else
$
(
"
#loadMsg
"
).
text
(
""
)}}),
this
.
status
?
this
.
status
.
isArticle
?(
$
(
"
#unSubmitArticle
"
).
show
(),
$
(
"
#saveArticle
"
).
hide
(),
$
(
"
#submitArticle
"
).
show
()):(
$
(
"
#submitArticle
"
).
show
(),
$
(
"
#unSubmitArticle
"
).
hide
(),
$
(
"
#saveArticle
"
).
show
()):(
$
(
"
#submitArticle
"
).
show
(),
$
(
"
#unSubmitArticle
"
).
hide
(),
$
(
"
#saveArticle
"
).
show
(),
$
(
"
#postToCommunityPanel
"
).
show
())},
clear
:
function
(){
this
.
status
=
{
id
:
void
0
,
isArticle
:
void
0
,
articleHadBeenPublished
:
void
0
},
this
.
setStatus
(),
$
(
"
#title
"
).
val
(
""
),
admin
.
editors
.
articleEditor
.
setContent
(
""
),
admin
.
editors
.
abstractEditor
.
setContent
(
""
),
$
(
"
#tag
"
).
val
(
""
),
$
(
"
#tagCheckboxPanel
"
).
hide
().
find
(
"
span
"
).
removeClass
(
"
selected
"
),
$
(
"
#permalink
"
).
val
(
""
),
$
(
"
#articleCammentable
"
).
prop
(
"
checked
"
,
!
0
),
$
(
"
#postToCommunity
"
).
prop
(
"
checked
"
,
!
0
),
$
(
"
.signs button
"
).
each
(
function
(
t
){
this
.
className
=
0
===
t
?
"
selected
"
:
""
}),
$
(
"
#articleThumbnail
"
).
prop
(
"
checked
"
)
&&
$
(
"
#articleThumbnail
"
).
click
()},
init
:
function
(
t
){
$
(
"
.signs button
"
).
click
(
function
(
t
){
$
(
"
.signs button
"
).
removeClass
(
"
selected
"
),
$
(
this
).
addClass
(
"
selected
"
)}),
$
(
"
#tipMsg
"
).
text
(
Label
.
uploadMsg
),
$
.
ajax
({
url
:
latkeConfig
.
servePath
+
"
/console/tags
"
,
type
:
"
GET
"
,
cache
:
!
1
,
success
:
function
(
t
,
e
){
if
(
$
(
"
#tipMsg
"
).
text
(
t
.
msg
),
t
.
sc
){
if
(
!
(
t
.
tags
.
length
<=
0
)){
for
(
var
a
=
[],
i
=
0
;
i
<
t
.
tags
.
length
;
i
++
)
a
.
push
(
t
.
tags
[
i
].
tagTitle
);
$
(
"
#tag
"
).
completed
({
height
:
160
,
buttonText
:
Label
.
selectLabel
,
data
:
a
}),
$
(
"
#loadMsg
"
).
text
(
""
)}}
else
$
(
"
#loadMsg
"
).
text
(
""
)}}),
$
(
"
#submitArticle
"
).
click
(
function
(){
admin
.
article
.
status
.
id
?
admin
.
article
.
update
(
!
0
):
admin
.
article
.
add
(
!
0
)}),
$
(
"
#saveArticle
"
).
click
(
function
(){
admin
.
article
.
status
.
id
?
admin
.
article
.
update
(
admin
.
article
.
status
.
isArticle
):
admin
.
article
.
add
(
!
1
)}),
admin
.
editors
.
articleEditor
=
new
SoloEditor
({
id
:
"
articleContent
"
,
height
:
500
,
fun
:
t
,
previewShow
:
!
0
,
resize
:
!
1
}),
admin
.
editors
.
abstractEditor
=
new
SoloEditor
({
id
:
"
abstract
"
,
height
:
200
,
previewShow
:
!
1
,
resize
:
!
0
}),
admin
.
article
.
clearDraftTimer
(),
admin
.
article
.
autoSaveDraftTimer
=
setInterval
(
function
(){
admin
.
article
.
_autoSaveToDraft
()},
admin
.
article
.
AUTOSAVETIME
),
$
(
"
#articleThumbnailBtn
"
).
click
(
function
(){
$
.
ajax
({
url
:
latkeConfig
.
servePath
+
"
/console/thumbs?n=1&w=768&h=432
"
,
type
:
"
GET
"
,
cache
:
!
1
,
success
:
function
(
t
,
e
){
t
.
sc
?
$
(
"
#articleThumbnailBtn
"
).
prev
().
css
(
"
background-image
"
,
"
url(
"
+
t
.
data
[
0
]
+
"
)
"
):
$
(
"
#loadMsg
"
).
text
(
t
.
msg
)}})}).
click
()},
_autoSaveToDraft
:
function
(){
""
!==
$
(
"
#title
"
).
val
().
replace
(
/
\s
/g
,
""
)
&&
""
!==
admin
.
editors
.
articleEditor
.
getContent
().
replace
(
/
\s
/g
,
""
)
&&
(
admin
.
article
.
status
.
id
?
admin
.
article
.
status
.
isArticle
||
admin
.
article
.
update
(
!
1
,
!
0
):(
admin
.
article
.
add
(
!
1
,
!
0
),
admin
.
article
.
status
.
isArticle
=!
1
))},
clearDraftTimer
:
function
(){
""
!==
admin
.
article
.
autoSaveDraftTimer
&&
(
window
.
clearInterval
(
admin
.
article
.
autoSaveDraftTimer
),
admin
.
article
.
autoSaveDraftTimer
=
""
)},
validate
:
function
(){
var
t
=
admin
.
editors
.
articleEditor
.
getContent
();
if
(
""
===
$
(
"
#title
"
).
val
().
replace
(
/
\s
/g
,
""
))
$
(
"
#tipMsg
"
).
text
(
Label
.
titleEmptyLabel
),
$
(
"
#title
"
).
focus
().
val
(
""
);
else
{
if
(
""
!==
t
.
replace
(
/
\s
/g
,
""
))
return
!
0
;
$
(
"
#tipMsg
"
).
text
(
Label
.
contentEmptyLabel
)}
return
!
1
},
unPublish
:
function
(
a
){
var
i
=
this
;
i
.
_addDisabled
(),
$
.
ajax
({
url
:
latkeConfig
.
servePath
+
"
/console/article/unpublish/
"
+
admin
.
article
.
status
.
id
,
type
:
"
PUT
"
,
cache
:
!
1
,
success
:
function
(
t
,
e
){
a
?
$
(
"
#tipMsg
"
).
text
(
Label
.
autoSaveLabel
):(
$
(
"
#tipMsg
"
).
text
(
t
.
msg
),
t
.
sc
&&
(
admin
.
selectTab
(
"
article/draft-list
"
),
admin
.
article
.
status
.
id
=
void
0
,
admin
.
article
.
isConfirm
=!
1
))},
complete
:
function
(
t
,
e
){
i
.
_removeDisabled
(),
$
(
"
#loadMsg
"
).
text
(
""
),
403
===
t
.
status
&&
(
$
.
get
(
"
/admin-index.do
"
),
i
.
unPublish
())}})},
trimUniqueArray
:
function
(
t
){
for
(
var
e
=
(
t
=
t
.
toString
()).
split
(
"
,
"
),
a
=
0
;
a
<
e
.
length
;
a
++
)
e
[
a
]
=
e
[
a
].
replace
(
/
(
^
\s
*
)
|
(\s
*$
)
/g
,
""
),
""
===
e
[
a
]
&&
(
e
.
splice
(
a
,
1
),
a
--
);
return
$
.
unique
(
e
).
toString
()},
prePost
:
function
(){
if
(
$
(
"
#loadMsg
"
).
text
(
Label
.
loadingLabel
),
admin
.
article
.
content
=
""
,
admin
.
editors
.
articleEditor
.
getContent
){
var
t
=
admin
.
editors
.
articleEditor
.
getContent
();
"
#article/article
"
===
window
.
location
.
hash
&&
""
!==
t
.
replace
(
/
\s
/g
,
""
)
&&
confirm
(
Label
.
editorPostLabel
)
&&
admin
.
article
.
clear
(),
$
(
"
#tipMsg
"
).
text
(
""
),
$
(
"
#loadMsg
"
).
text
(
""
)}},
_addDisabled
:
function
(){
$
(
"
#unSubmitArticle
"
).
attr
(
"
disabled
"
,
"
disabled
"
),
$
(
"
#saveArticle
"
).
attr
(
"
disabled
"
,
"
disabled
"
),
$
(
"
#submitArticle
"
).
attr
(
"
disabled
"
,
"
disabled
"
)},
_removeDisabled
:
function
(){
$
(
"
#unSubmitArticle
"
).
removeAttr
(
"
disabled
"
),
$
(
"
#saveArticle
"
).
removeAttr
(
"
disabled
"
),
$
(
"
#submitArticle
"
).
removeAttr
(
"
disabled
"
)}},
admin
.
register
.
article
=
{
obj
:
admin
.
article
,
init
:
admin
.
article
.
init
,
refresh
:
function
(){
admin
.
editors
.
abstractEditor
.
setContent
(
""
),
admin
.
editors
.
articleEditor
.
setContent
(
""
),
$
(
"
#loadMsg
"
).
text
(
""
),
$
(
"
#tipMsg
"
).
text
(
Label
.
uploadMsg
)}};
...
...
src/main/webapp/js/admin/article.js
View file @
7ee15874
...
...
@@ -317,7 +317,7 @@ admin.article = {
for
(
var
i
=
0
;
i
<
result
.
tags
.
length
;
i
++
)
{
spans
+=
'
<span>
'
+
result
.
tags
[
i
].
tagTitle
+
'
</span>
'
}
$
(
'
#tagCheckboxPanel
'
).
html
(
spans
+
'
<div class="clear"></div>
'
)
$
(
'
#tagCheckboxPanel
'
).
html
(
spans
+
'
<div class="
fn__
clear"></div>
'
)
$
(
'
#loadMsg
'
).
text
(
''
)
},
...
...
src/main/webapp/js/admin/comment.js
View file @
7ee15874
...
...
@@ -72,17 +72,17 @@ admin.comment = {
hrefHTML
=
"
<a target='_blank'>
"
;
}
commentsHTML
+=
"
<div class='comment-title'><span class='left'>
"
commentsHTML
+=
"
<div class='comment-title'><span class='
fn__
left'>
"
+
hrefHTML
+
comments
[
i
].
commentName
+
"
</a>
"
;
if
(
comments
[
i
].
commentOriginalCommentName
)
{
commentsHTML
+=
"
@
"
+
comments
[
i
].
commentOriginalCommentName
;
}
commentsHTML
+=
"
</span><span title='
"
+
Label
.
removeLabel
+
"
' class='right deleteIcon' onclick=
\"
admin.comment.del('
"
+
comments
[
i
].
oId
+
"
', '
"
+
fromId
+
"
', '
"
+
onId
+
"
')
\"
></span><span class='right'><a href='mailto:
"
commentsHTML
+=
"
</span><span title='
"
+
Label
.
removeLabel
+
"
' class='
fn__
right deleteIcon' onclick=
\"
admin.comment.del('
"
+
comments
[
i
].
oId
+
"
', '
"
+
fromId
+
"
', '
"
+
onId
+
"
')
\"
></span><span class='
fn__
right'><a href='mailto:
"
+
comments
[
i
].
commentEmail
+
"
'>
"
+
comments
[
i
].
commentEmail
+
"
</a>
"
+
$
.
bowknot
.
getDate
(
comments
[
i
].
commentTime
)
+
"
</span><div class='
clear'></div></div><div class='
margin12'>
"
+
"
</span><div class='
fn__clear'></div></div><div class='fn__
margin12'>
"
+
contentHTML
+
"
</div>
"
;
}
if
(
""
===
commentsHTML
)
{
...
...
src/main/webapp/js/admin/preference.js
View file @
7ee15874
...
...
@@ -83,11 +83,11 @@ admin.preference = {
selectedClass
+=
"
selected
"
;
}
skinsHTML
+=
"
<div title='
"
+
skins
[
i
].
skinDirName
+
"
' class='left skinItem
"
+
selectedClass
+
"
'><img class='skinPreview' src='
"
+
"
' class='
fn__
left skinItem
"
+
selectedClass
+
"
'><img class='skinPreview' src='
"
+
latkeConfig
.
staticServePath
+
"
/skins/
"
+
skins
[
i
].
skinDirName
+
"
/preview.png'/><div>
"
+
skins
[
i
].
skinName
+
"
</div></div>
"
;
}
$
(
"
#skinMain
"
).
append
(
skinsHTML
+
"
<div class='clear'></div>
"
);
$
(
"
#skinMain
"
).
append
(
skinsHTML
+
"
<div class='
fn__
clear'></div>
"
);
$
(
"
.skinItem
"
).
click
(
function
()
{
$
(
"
.skinItem
"
).
removeClass
(
"
selected
"
);
...
...
src/main/webapp/scss/admin.scss
View file @
7ee15874
...
...
@@ -20,178 +20,35 @@
*
* @author <a href="http://vanessa.b3log.org">Liyuan Li</a>
* @author <a href="http://88250.b3log.org">Liang Ding</a>
* @version
2.6.0.4, Feb 19
, 2019
* @version
3.0.0.0, Feb 21
, 2019
*/
@import
"../scss/reset"
;
@import
"../scss/reset-content"
;
@import
"reset"
;
@import
"reset-content"
;
@import
"tooltipped"
;
@import
"function"
;
@import
"vditor/src/assets/scss/classic"
;
.tooltipped
{
position
:
relative
;
cursor
:
pointer
;
}
.
tooltipped
:
:
after
{
position
:
absolute
;
z-index
:
1000000
;
display
:
none
;
padding
:
5px
8px
;
font-size
:
11px
;
font-weight
:
normal
;
-webkit-font-smoothing
:
subpixel-antialiased
;
color
:
#fff
;
text-align
:
center
;
text-decoration
:
none
;
text-shadow
:
none
;
text-transform
:
none
;
letter-spacing
:
normal
;
word-wrap
:
break-word
;
white-space
:
pre
;
pointer-events
:
none
;
content
:
attr
(
aria-label
);
background
:
rgba
(
0
,
0
,
0
,
0
.8
);
border-radius
:
3px
;
line-height
:
16px
;
opacity
:
0
}
.
tooltipped
:
:
before
{
position
:
absolute
;
z-index
:
1000001
;
display
:
none
;
width
:
0
;
height
:
0
;
color
:
rgba
(
0
,
0
,
0
,
0
.8
);
pointer-events
:
none
;
content
:
""
;
border
:
5px
solid
transparent
;
opacity
:
0
}
@-webkit-keyframes
tooltip-appear
{
from
{
opacity
:
0
}
to
{
opacity
:
1
}
}
@keyframes
tooltip-appear
{
from
{
opacity
:
0
}
to
{
opacity
:
1
}
}
.
tooltipped-hover
:
:
before
,
.
tooltipped-hover
::
after
,
.
tooltipped
:
hover
::
before
,
.
tooltipped
:
hover
::
after
,
.
tooltipped
:
active
::
before
,
.
tooltipped
:
active
::
after
,
.
tooltipped
:
focus
::
before
,
.
tooltipped
:
focus
::
after
{
display
:
inline-block
;
text-decoration
:
none
;
-webkit-animation-name
:
tooltip-appear
;
animation-name
:
tooltip-appear
;
-webkit-animation-duration
:
0
.1s
;
animation-duration
:
0
.1s
;
-webkit-animation-fill-mode
:
forwards
;
animation-fill-mode
:
forwards
;
-webkit-animation-timing-function
:
ease-in
;
animation-timing-function
:
ease-in
;
-webkit-animation-delay
:
0
.4s
;
animation-delay
:
0
.4s
}
.
tooltipped-s
:
:
after
,
.
tooltipped-se
::
after
,
.
tooltipped-sw
::
after
{
top
:
100%
;
right
:
50%
;
margin-top
:
5px
}
.
tooltipped-s
:
:
before
,
.
tooltipped-se
::
before
,
.
tooltipped-sw
::
before
{
top
:
auto
;
right
:
50%
;
bottom
:
-5px
;
margin-right
:
-5px
;
border-bottom-color
:
rgba
(
0
,
0
,
0
,
0
.8
)
}
.
tooltipped-se
:
:
after
{
right
:
auto
;
left
:
50%
;
margin-left
:
-15px
}
.
tooltipped-sw
:
:
after
{
margin-right
:
-15px
}
.
tooltipped-n
:
:
after
,
.
tooltipped-ne
::
after
,
.
tooltipped-nw
::
after
{
right
:
50%
;
bottom
:
100%
;
margin-bottom
:
5px
}
.
tooltipped-n
:
:
before
,
.
tooltipped-ne
::
before
,
.
tooltipped-nw
::
before
{
top
:
-5px
;
right
:
50%
;
bottom
:
auto
;
margin-right
:
-5px
;
border-top-color
:
rgba
(
0
,
0
,
0
,
0
.8
)
}
.
tooltipped-ne
:
:
after
{
right
:
auto
;
left
:
50%
;
margin-left
:
-15px
}
.
tooltipped-nw
:
:
after
{
margin-right
:
-15px
}
.
tooltipped-s
:
:
after
,
.
tooltipped-n
::
after
{
-webkit-transform
:
translateX
(
50%
);
transform
:
translateX
(
50%
)
body
{
color
:
#767676
;
background
:
#f1f2f7
;
font-size
:
13px
;
}
.
tooltipped-w
:
:
after
{
right
:
100%
;
bottom
:
50%
;
margin-right
:
5px
;
-webkit-transform
:
translateY
(
50%
);
transform
:
translateY
(
50%
);
a
{
color
:
#4183c4
;
text-decoration
:
none
}
.
tooltipped-w
:
:
before
{
top
:
50%
;
bottom
:
50%
;
left
:
-5px
;
margin-top
:
-5px
;
border-left-color
:
rgba
(
0
,
0
,
0
,
0
.8
);
a
:visited
{
color
:
#7ba9d6
}
.
tooltipped-e
:
:
after
{
bottom
:
50%
;
left
:
100%
;
margin-left
:
5px
;
-webkit-transform
:
translateY
(
50%
);
transform
:
translateY
(
50%
)
a
:active
{
color
:
#2c5d8d
}
.
tooltipped-e
:
:
before
{
top
:
50%
;
right
:
-5px
;
bottom
:
50%
;
margin-top
:
-5px
;
border-right-color
:
rgba
(
0
,
0
,
0
,
0
.8
)
a
:hover
{
text-decoration
:
underline
}
button
,
...
...
@@ -220,7 +77,9 @@ button:hover {
border-color
:
#1ca59e
;
}
/* end reset */
.fn__margin12
{
margin
:
12px
;
}
/* start ico */
@font-face
{
...
...
@@ -391,7 +250,7 @@ a[class*=" icon-"]:hover {
line-height
:
50px
;
}
#top
>
.right
a
{
#top
>
.
fn__
right
a
{
color
:
#555
;
line-height
:
32px
;
margin
:
8px
10px
;
...
...
@@ -403,7 +262,7 @@ a[class*=" icon-"]:hover {
display
:
inline-block
;
}
#top
>
.right
a
:hover
{
#top
>
.
fn__
right
a
:hover
{
color
:
#333
;
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment