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
15c7520d
Unverified
Commit
15c7520d
authored
Dec 24, 2018
by
Liang Ding
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
🐛
Fix #12604
parent
2f913258
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
5 additions
and
38 deletions
+5
-38
src/main/webapp/js/admin/latkeAdmin.js
src/main/webapp/js/admin/latkeAdmin.js
+2
-2
src/main/webapp/js/admin/latkeAdmin.min.js
src/main/webapp/js/admin/latkeAdmin.min.js
+1
-0
src/main/webapp/js/admin/preference.js
src/main/webapp/js/admin/preference.js
+2
-2
src/main/webapp/js/common.min.js
src/main/webapp/js/common.min.js
+0
-17
src/main/webapp/js/page.min.js
src/main/webapp/js/page.min.js
+0
-17
No files found.
src/main/webapp/js/admin/latkeAdmin.js
View file @
15c7520d
...
@@ -3391,14 +3391,14 @@ admin.preference = {
...
@@ -3391,14 +3391,14 @@ admin.preference = {
});
});
},
},
//服务商radio change事件
//
服务商radio change事件
ossServerChange
:
function
()
{
ossServerChange
:
function
()
{
var
ossServer
=
$
(
'
input[name=ossServer]:checked
'
).
val
()
var
ossServer
=
$
(
'
input[name=ossServer]:checked
'
).
val
()
$
.
ajax
({
$
.
ajax
({
url
:
latkeConfig
.
servePath
+
"
/console/preference/oss?ossServer=
"
+
ossServer
,
url
:
latkeConfig
.
servePath
+
"
/console/preference/oss?ossServer=
"
+
ossServer
,
type
:
"
GET
"
,
type
:
"
GET
"
,
cache
:
false
,
cache
:
false
,
success
:
function
(
result
,
)
{
success
:
function
(
result
)
{
if
(
!
result
.
sc
)
{
if
(
!
result
.
sc
)
{
$
(
"
#loadMsg
"
).
text
(
""
);
$
(
"
#loadMsg
"
).
text
(
""
);
$
(
"
#tipMsg
"
).
text
(
result
.
msg
);
$
(
"
#tipMsg
"
).
text
(
result
.
msg
);
...
...
src/main/webapp/js/admin/latkeAdmin.min.js
View file @
15c7520d
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?goto=
"
+
latkeConfig
.
servePath
},
toggleMenu
:
function
(){
if
(
$
(
"
#tabs
"
).
css
(
"
left
"
)
===
"
-240px
"
){
$
(
"
#tabs
"
).
css
(
"
left
"
,
0
);
$
(
"
.tabs__bg
"
).
show
()}
else
{
$
(
"
#tabs
"
).
css
(
"
left
"
,
"
-240px
"
);
$
(
"
.tabs__bg
"
).
hide
()}},
clearTip
:
function
(){
$
(
"
#tipMsg
"
).
text
(
""
);
$
(
"
#loadMsg
"
).
text
(
""
)},
setHashByPage
:
function
(
currentPage
){
var
hash
=
window
.
location
.
hash
,
hashList
=
hash
.
split
(
"
/
"
);
if
(
/^
\d
*$/
.
test
(
hashList
[
hashList
.
length
-
1
])){
hashList
[
hashList
.
length
-
1
]
=
currentPage
}
else
{
hashList
.
push
(
currentPage
)}
window
.
location
.
hash
=
hashList
.
join
(
"
/
"
)},
selectTab
:
function
(
id
){
window
.
location
.
hash
=
"
#
"
+
id
},
analyseHash
:
function
(){
var
hash
=
window
.
location
.
hash
;
var
tag
=
hash
.
substr
(
1
,
hash
.
length
-
1
);
var
tagList
=
tag
.
split
(
"
/
"
);
var
tags
=
{};
tags
.
page
=
1
,
tags
.
hashList
=
[];
for
(
var
i
=
0
;
i
<
tagList
.
length
;
i
++
){
if
(
i
===
tagList
.
length
-
1
&&
(
/^
\d
+$/
.
test
(
tagList
[
i
]))){
tags
.
page
=
tagList
[
i
]}
else
{
tags
.
hashList
.
push
(
tagList
[
i
])}}
return
tags
},
setCurByHash
:
function
(){
$
(
window
).
scrollTop
(
0
);
$
(
"
#tipMsg
"
).
text
(
""
);
var
tags
=
admin
.
analyseHash
();
var
tab
=
tags
.
hashList
[
1
],
subTab
=
tags
.
hashList
[
2
];
if
(
tags
.
hashList
.
length
===
1
){
tab
=
tags
.
hashList
[
0
]}
if
(
tab
===
""
){
return
}
if
(
tab
!==
"
article
"
){
admin
.
article
.
clearDraftTimer
()}
else
{
if
(
tab
===
"
article
"
){
admin
.
article
.
autoSaveDraftTimer
=
setInterval
(
function
(){
admin
.
article
.
_autoSaveToDraft
()},
admin
.
article
.
AUTOSAVETIME
)}}
try
{
if
(
tab
!==
"
article
"
&&
admin
.
article
.
isConfirm
&&
admin
.
editors
.
articleEditor
.
getContent
().
replace
(
/
\s
/g
,
""
)
!==
""
&&
admin
.
article
.
content
!==
admin
.
editors
.
articleEditor
.
getContent
()){
if
(
!
confirm
(
Label
.
editorLeaveLabel
)){
window
.
location
.
hash
=
"
#article/article
"
;
return
}}
if
(
tab
===
"
article
"
&&
admin
.
article
.
isConfirm
&&
admin
.
editors
.
articleEditor
.
getContent
().
replace
(
/
\s
/g
,
""
)
!==
""
&&
admin
.
article
.
content
!==
admin
.
editors
.
articleEditor
.
getContent
()){
return
}}
catch
(
e
){
var
$articleContent
=
$
(
"
#articleContent
"
);
if
(
$articleContent
.
length
>
0
){
if
(
tab
!==
"
article
"
&&
admin
.
article
.
isConfirm
&&
$articleContent
.
val
().
replace
(
/
\s
/g
,
""
)
!==
""
&&
admin
.
article
.
content
!==
$articleContent
.
val
()){
if
(
!
confirm
(
Label
.
editorLeaveLabel
)){
window
.
location
.
hash
=
"
#article/article
"
;
return
}}
if
(
tab
===
"
article
"
&&
admin
.
article
.
isConfirm
&&
$articleContent
.
val
().
replace
(
/
\s
/g
,
""
)
!==
""
&&
admin
.
article
.
content
!==
$articleContent
.
val
()){
return
}}}
if
(
tab
!==
"
article
"
&&
admin
.
editors
.
articleEditor
.
setContent
){
admin
.
article
.
clear
()}
admin
.
article
.
isConfirm
=
true
;
$
(
"
#tabs
"
).
tabs
(
"
setCurrent
"
,
tab
);
$
(
"
#loadMsg
"
).
text
(
Label
.
loadingLabel
);
if
(
$
(
"
#tabsPanel_
"
+
tab
).
length
===
1
){
if
(
$
(
"
#tabsPanel_
"
+
tab
).
html
().
replace
(
/
\s
/g
,
""
)
===
""
){
$
(
"
#tabsPanel_
"
+
tab
).
load
(
"
admin-
"
+
tab
+
"
.do
"
,
function
(){
if
(
tab
===
"
article
"
&&
admin
.
article
.
status
.
id
){
admin
.
register
[
tab
].
init
.
call
(
admin
.
register
[
tab
].
obj
,
admin
.
article
.
getAndSet
)}
else
{
admin
.
register
[
tab
].
init
.
call
(
admin
.
register
[
tab
].
obj
,
tags
.
page
)}
if
(
subTab
){
$
(
"
#tab
"
+
tab
.
substring
(
0
,
1
).
toUpperCase
()
+
tab
.
substring
(
1
)).
tabs
(
"
setCurrent
"
,
subTab
)}
admin
.
plugin
.
setCurByHash
(
tags
)})}
else
{
if
(
tab
===
"
article
"
&&
admin
.
article
.
status
.
id
){
admin
.
article
.
getAndSet
()}
if
(
admin
.
register
[
tab
]
&&
admin
.
register
[
tab
].
refresh
){
admin
.
register
[
tab
].
refresh
.
call
(
admin
.
register
[
tab
].
obj
,
tags
.
page
)}
if
(
subTab
){
$
(
"
#tab
"
+
tab
.
substring
(
0
,
1
).
toUpperCase
()
+
tab
.
substring
(
1
)).
tabs
(
"
setCurrent
"
,
subTab
)}
admin
.
plugin
.
setCurByHash
(
tags
)}}
else
{
$
(
"
#tipMsg
"
).
text
(
"
Error: No tab!
"
+
Label
.
reportIssueLabel
);
$
(
"
#loadMsg
"
).
text
(
""
)}},
init
:
function
(){
Util
.
killIE
();
$
(
"
#loadMsg
"
).
text
(
Label
.
loadingLabel
);
$
(
"
#tabs
"
).
tabs
();
setInterval
(
function
(){
if
(
$
(
"
#tipMsg
"
).
text
()
!==
""
){
setTimeout
(
function
(){
$
(
"
#tipMsg
"
).
text
(
""
)},
7000
)}},
6000
);
$
(
"
#loadMsg
"
).
text
(
""
)},
collapseNav
:
function
(
it
){
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
).
addClass
(
"
tab-current
"
)}
else
{
$
(
it
).
find
(
"
.icon-chevron-up
"
)[
0
].
className
=
"
icon-chevron-down right
"
;
$
(
it
).
removeClass
(
"
tab-current
"
)}
$
(
"
#tabs > ul
"
).
height
(
"
auto
"
);
$
(
"
#tabs > ul
"
).
height
(
$
(
"
#tabs > ul
"
).
height
()
+
80
)})},
inited
:
function
(){
if
(
Label
.
userRole
!==
"
adminRole
"
){
for
(
var
i
=
0
;
i
<
this
.
adTools
.
length
;
i
++
){
$
(
"
#tabs
"
).
tabs
(
"
remove
"
,
this
.
adTools
[
i
])}}
else
{
for
(
var
j
=
0
;
j
<
this
.
tools
.
length
;
j
++
){
if
(
"
#
"
+
window
.
location
.
hash
.
split
(
"
/
"
)[
1
]
===
this
.
tools
[
j
]){
$
(
"
#tabToolsTitle
"
).
click
();
break
}}}
this
.
setCurByHash
()}});
var
admin
=
new
Admin
();
admin
.
editors
=
{};
var
SoloEditor
=
function
(
conf
){
this
.
_defaults
=
{
type
:
"
tinyMCE
"
,
kind
:
""
,
id
:
""
,
language
:
""
};
conf
.
type
=
Label
.
editorType
;
this
.
conf
=
conf
;
this
.
_init
()};
$
.
extend
(
SoloEditor
.
prototype
,{
_init
:
function
(){
this
.
init
()},
init
:
function
(
type
){
var
conf
=
this
.
conf
;
if
(
type
){
conf
.
type
=
type
}
var
types
=
conf
.
type
.
split
(
"
-
"
);
if
(
types
.
length
===
2
){
conf
.
codeMirrorLanguage
=
types
[
1
];
conf
.
type
=
types
[
0
]}
admin
.
editors
[
conf
.
type
].
init
(
conf
)},
getContent
:
function
(){
var
conf
=
this
.
conf
;
return
admin
.
editors
[
conf
.
type
].
getContent
(
conf
.
id
)},
setContent
:
function
(
content
){
var
conf
=
this
.
conf
;
admin
.
editors
[
conf
.
type
].
setContent
(
conf
.
id
,
content
)},
remove
:
function
(){
var
conf
=
this
.
conf
;
admin
.
editors
[
conf
.
type
].
remove
(
conf
.
id
)}});
admin
.
editors
.
articleEditor
=
{};
admin
.
editors
.
abstractEditor
=
{};
admin
.
editors
.
pageEditor
=
{};
admin
.
editors
.
tinyMCE
=
{
init
:
function
(
conf
){
var
language
=
Label
.
localeString
.
substring
(
0
,
2
);
if
(
language
===
"
zh
"
){
language
=
"
zh-cn
"
}
if
(
conf
.
kind
&&
conf
.
kind
===
"
simple
"
){
try
{
tinyMCE
.
init
({
language
:
language
,
mode
:
"
exact
"
,
elements
:
conf
.
id
,
theme
:
"
advanced
"
,
plugins
:
"
media
"
,
theme_advanced_buttons1
:
"
bold,italic,underline,strikethrough,|,undo,redo,|,bullist,numlist,|,code
"
,
theme_advanced_buttons2
:
""
,
theme_advanced_buttons3
:
""
,
theme_advanced_toolbar_location
:
"
top
"
,
theme_advanced_toolbar_align
:
"
left
"
,
valid_children
:
"
+body[style]
"
})}
catch
(
e
){
$
(
"
#tipMsg
"
).
text
(
"
TinyMCE load fail
"
)}}
else
{
try
{
tinyMCE
.
init
({
language
:
language
,
mode
:
"
exact
"
,
elements
:
conf
.
id
,
theme
:
"
advanced
"
,
plugins
:
"
autosave,style,advhr,advimage,advlink,preview,inlinepopups,media,paste,syntaxhl,wordcount
"
,
theme_advanced_buttons1
:
"
formatselect,fontselect,fontsizeselect,|,bold,italic,underline,strikethrough,forecolor,|,advhr,blockquote,syntaxhl,
"
,
theme_advanced_buttons2
:
"
undo,redo,|,bullist,numlist,outdent,indent,|,justifyleft,justifycenter,justifyright,justifyfull,|,pastetext,pasteword,|,link,unlink,image,iespell,media,|,cleanup,code,preview,
"
,
theme_advanced_buttons3
:
""
,
theme_advanced_toolbar_location
:
"
top
"
,
theme_advanced_toolbar_align
:
"
left
"
,
theme_advanced_resizing
:
true
,
theme_advanced_statusbar_location
:
"
bottom
"
,
extended_valid_elements
:
"
link[type|rel|href|charset],pre[name|class],iframe[src|width|height|name|align],+a[*]
"
,
valid_children
:
"
+body[style]
"
,
relative_urls
:
false
,
remove_script_host
:
false
,
oninit
:
function
(){
if
(
typeof
(
conf
.
fun
)
===
"
function
"
){
conf
.
fun
()}}})}
catch
(
e
){
$
(
"
#tipMsg
"
).
text
(
"
TinyMCE load fail
"
)}}},
getContent
:
function
(
id
){
var
content
=
""
;
try
{
content
=
tinyMCE
.
get
(
id
).
getContent
()}
catch
(
e
){
content
=
$
(
"
#
"
+
id
).
val
()}
return
content
},
setContent
:
function
(
id
,
content
){
try
{
if
(
tinyMCE
.
get
(
id
)){
tinyMCE
.
get
(
id
).
setContent
(
content
)}
else
{
$
(
"
#
"
+
id
).
val
(
content
)}}
catch
(
e
){
$
(
"
#
"
+
id
).
val
(
content
)}},
remove
:
function
(
id
){
tinyMCE
.
get
(
id
).
remove
()}};
admin
.
editors
.
KindEditor
=
{
init
:
function
(
conf
){
var
language
=
"
zh_CN
"
;
if
(
"
en_US
"
===
Label
.
localeString
){
language
=
"
en
"
}
if
(
conf
.
kind
&&
conf
.
kind
===
"
simple
"
){
try
{
this
[
conf
.
id
]
=
KindEditor
.
create
(
"
#
"
+
conf
.
id
,{
langType
:
language
,
resizeType
:
0
,
items
:[
"
bold
"
,
"
italic
"
,
"
underline
"
,
"
strikethrough
"
,
"
|
"
,
"
undo
"
,
"
redo
"
,
"
|
"
,
"
insertunorderedlist
"
,
"
insertorderedlist
"
,
"
|
"
,
"
source
"
]})}
catch
(
e
){
$
(
"
#tipMsg
"
).
text
(
"
KindEditor load fail
"
)}}
else
{
try
{
this
[
conf
.
id
]
=
KindEditor
.
create
(
"
#
"
+
conf
.
id
,{
uploadJson
:
"
kindeditor/php/upyunUpload.php
"
,
langType
:
language
,
items
:[
"
formatblock
"
,
"
fontname
"
,
"
fontsize
"
,
"
|
"
,
"
bold
"
,
"
italic
"
,
"
underline
"
,
"
strikethrough
"
,
"
forecolor
"
,
"
|
"
,
"
link
"
,
"
unlink
"
,
"
image
"
,
"
media
"
,
"
|
"
,
"
pagebreak
"
,
"
emoticons
"
,
"
code
"
,
"
/
"
,
"
undo
"
,
"
redo
"
,
"
|
"
,
"
insertunorderedlist
"
,
"
insertorderedlist
"
,
"
indent
"
,
"
outdent
"
,
"
|
"
,
"
justifyleft
"
,
"
justifycenter
"
,
"
justifyright
"
,
"
justifyfull
"
,
"
|
"
,
"
plainpaste
"
,
"
wordpaste
"
,
"
|
"
,
"
clearhtml
"
,
"
source
"
,
"
preview
"
],
afterCreate
:
function
(){
if
(
typeof
(
conf
.
fun
)
===
"
function
"
){
conf
.
fun
()}}})}
catch
(
e
){
$
(
"
#tipMsg
"
).
text
(
"
KindEditor load fail
"
)}}},
getContent
:
function
(
id
){
var
content
=
""
;
try
{
content
=
this
[
id
].
html
()}
catch
(
e
){
content
=
$
(
"
#
"
+
id
).
val
()}
return
content
},
setContent
:
function
(
id
,
content
){
try
{
this
[
id
].
html
(
content
)}
catch
(
e
){
$
(
"
#
"
+
id
).
val
(
content
)}},
remove
:
function
(
id
){
this
[
id
].
remove
()}};
Util
.
processClipBoard
=
function
(
text
,
cm
){
var
text
=
toMarkdown
(
text
,{
converters
:[],
gfm
:
true
});
text
=
$
(
"
<div>
"
+
text
+
"
</div>
"
).
text
().
replace
(
/
\n{2,}
/g
,
"
\n\n
"
).
replace
(
/ /g
,
"
"
);
return
$
.
trim
(
text
)};
Util
.
startsWith
=
function
(
string
,
prefix
){
return
(
string
.
match
(
"
^
"
+
prefix
)
==
prefix
)};
Util
.
processClipBoard
=
function
(
clipboardData
,
cm
){
if
(
clipboardData
.
getData
(
"
text/html
"
)
===
""
&&
clipboardData
.
items
.
length
===
2
){
return
""
}
var
text
=
toMarkdown
(
clipboardData
.
getData
(
"
text/html
"
),{
converters
:[{
filter
:
"
img
"
,
replacement
:
function
(
innerHTML
,
node
){
if
(
1
===
node
.
attributes
.
length
){
return
""
}
return
"

"
}}],
gfm
:
true
});
var
codes
=
text
.
split
(
"
```
"
);
if
(
codes
.
length
>
1
){
for
(
var
i
=
0
,
iMax
=
codes
.
length
;
i
<
iMax
;
i
++
){
if
(
i
%
2
===
1
){
codes
[
i
]
=
codes
[
i
].
replace
(
/<
\/
span><span style="color:#
\w{6}
;">/g
,
""
).
replace
(
/</g
,
"
<
"
).
replace
(
/>/g
,
"
>
"
)}}}
text
=
codes
.
join
(
"
```
"
);
text
=
$
(
"
<div>
"
+
text
+
"
</div>
"
).
text
().
replace
(
/
\n{2,}
/g
,
"
\n\n
"
).
replace
(
/ /g
,
"
"
);
return
$
.
trim
(
text
)};
Util
.
initUploadFile
=
function
(
obj
){
var
cursor
;
$
(
"
#
"
+
obj
.
id
).
fileupload
({
multipart
:
true
,
pasteZone
:
obj
.
pasteZone
,
dropZone
:
obj
.
pasteZone
,
url
:
latkeConfig
.
servePath
+
"
/upload
"
,
paramName
:
"
file[]
"
,
add
:
function
(
e
,
data
){
obj
.
uploadingLabel
=
""
;
data
.
submit
()},
submit
:
function
(
e
,
data
){
if
(
obj
.
editor
.
replaceRange
){
data
.
files
.
forEach
(
function
(
item
){
if
(
item
.
type
.
indexOf
(
"
image
"
)
>-
1
){
obj
.
uploadingLabel
+=
"

"
}
else
{
obj
.
uploadingLabel
+=
"
[
"
+
item
.
name
.
replace
(
/
\W
/g
,
""
)
+
"
](Uploading...)
"
}});
cursor
=
obj
.
editor
.
getCursor
();
obj
.
editor
.
replaceRange
(
obj
.
uploadingLabel
,
cursor
,
cursor
)}},
done
:
function
(
e
,
data
){
if
(
!
data
.
result
.
sc
){
var
msg
=
""
;
data
.
files
.
forEach
(
function
(
item
){
if
(
item
.
type
.
indexOf
(
"
image
"
)
>-
1
){
msg
+=
"

"
}
else
{
msg
+=
"
[
"
+
item
.
name
.
replace
(
/
\W
/g
,
""
)
+
"
](
"
+
data
.
result
.
msg
+
"
)
"
}});
obj
.
editor
.
replaceRange
(
msg
,
cursor
,
CodeMirror
.
Pos
(
cursor
.
line
,
cursor
.
ch
+
obj
.
uploadingLabel
.
length
));
return
}
var
resultMsg
=
""
;
Object
.
keys
(
data
.
result
.
data
.
succMap
).
forEach
(
function
(
key
){
var
isImage
=
false
;
data
.
files
.
forEach
(
function
(
item
){
isImage
=
item
.
type
.
indexOf
(
"
image
"
)
>-
1
});
resultMsg
+=
(
isImage
?
"

\n\n
"
});
data
.
result
.
data
.
errFiles
.
forEach
(
function
(
name
){
var
isImage
=
false
;
data
.
files
.
forEach
(
function
(
item
){
isImage
=
item
.
type
.
indexOf
(
"
image
"
)
>-
1
});
resultMsg
+=
(
isImage
?
"

"
});
obj
.
editor
.
replaceRange
(
resultMsg
,
cursor
,
CodeMirror
.
Pos
(
cursor
.
line
,
cursor
.
ch
+
obj
.
uploadingLabel
.
length
))},
fail
:
function
(
e
,
data
){
if
(
obj
.
editor
.
replaceRange
){
var
msg
=
""
;
data
.
files
.
forEach
(
function
(
item
){
if
(
item
.
type
.
indexOf
(
"
image
"
)
>-
1
){
msg
+=
"

"
}
else
{
msg
+=
"
[
"
+
item
.
name
.
replace
(
/
\W
/g
,
""
)
+
"
](
"
+
data
.
errorThrown
+
"
)
"
}});
obj
.
editor
.
replaceRange
(
msg
,
cursor
,
CodeMirror
.
Pos
(
cursor
.
line
,
cursor
.
ch
+
obj
.
uploadingLabel
.
length
))}}})};
admin
.
editors
.
CodeMirror
=
{
init
:
function
(
conf
){
var
emojis
=
"
+1,-1,100,1234,8ball,a,ab,abc,abcd,accept,aerial_tramway,airplane,alarm_clock,alien,ambulance,anchor,angel,anger,angry,anguished,ant,apple,aquarius,aries,arrow_backward,arrow_double_down,arrow_double_up,arrow_down,arrow_down_small,arrow_forward,arrow_heading_down,arrow_heading_up,arrow_left,arrow_lower_left,arrow_lower_right,arrow_right,arrow_right_hook,arrow_up,arrow_up_down,arrow_up_small,arrow_upper_left,arrow_upper_right,arrows_clockwise,arrows_counterclockwise,art,articulated_lorry,astonished,atm,b,baby,baby_bottle,baby_chick,baby_symbol,back,baggage_claim,balloon,ballot_box_with_check,bamboo,banana,bangbang,bank,bar_chart,barber,baseball,basketball,bath,bathtub,battery,bear,bee,beer,beers,beetle,beginner,bell,bento,bicyclist,bike,bikini,bird,birthday,black_circle,black_joker,black_medium_small_square,black_medium_square,black_nib,black_small_square,black_square,black_square_button,blossom,blowfish,blue_book,blue_car,blue_heart,blush,boar,boat,bomb,book,bookmark,bookmark_tabs,books,boom,boot,bouquet,bow,bowling,bowtie,boy,bread,bride_with_veil,bridge_at_night,briefcase,broken_heart,bug,bulb,bullettrain_front,bullettrain_side,bus,busstop,bust_in_silhouette,busts_in_silhouette,cactus,cake,calendar,calling,camel,camera,cancer,candy,capital_abcd,capricorn,car,card_index,carousel_horse,cat,cat2,cd,chart,chart_with_downwards_trend,chart_with_upwards_trend,checkered_flag,cherries,cherry_blossom,chestnut,chicken,children_crossing,chocolate_bar,christmas_tree,church,cinema,circus_tent,city_sunrise,city_sunset,cl,clap,clapper,clipboard,clock1,clock10,clock1030,clock11,clock1130,clock12,clock1230,clock130,clock2,clock230,clock3,clock330,clock4,clock430,clock5,clock530,clock6,clock630,clock7,clock730,clock8,clock830,clock9,clock930,closed_book,closed_lock_with_key,closed_umbrella,cloud,clubs,cn,cocktail,coffee,cold_sweat,collision,computer,confetti_ball,confounded,confused,congratulations,construction,construction_worker,convenience_store,cookie,cool,cop,copyright,corn,couple,couple_with_heart,couplekiss,cow,cow2,credit_card,crescent_moon,crocodile,crossed_flags,crown,cry,crying_cat_face,crystal_ball,cupid,curly_loop,currency_exchange,curry,custard,customs,cyclone,dancer,dancers,dango,dart,dash,date,de,deciduous_tree,department_store,diamond_shape_with_a_dot_inside,diamonds,disappointed,disappointed_relieved,dizzy,dizzy_face,do_not_litter,dog,dog2,dollar,dolls,dolphin,donut,door,doughnut,dragon,dragon_face,dress,dromedary_camel,droplet,dvd,e-mail,ear,ear_of_rice,earth_africa,earth_americas,earth_asia,egg,eggplant,eight,eight_pointed_black_star,eight_spoked_asterisk,electric_plug,elephant,email,end,envelope,es,euro,european_castle,european_post_office,evergreen_tree,exclamation,expressionless,eyeglasses,eyes,facepunch,factory,fallen_leaf,family,fast_forward,fax,fearful,feelsgood,feet,ferris_wheel,file_folder,finnadie,fire,fire_engine,fireworks,first_quarter_moon,first_quarter_moon_with_face,fish,fish_cake,fishing_pole_and_fish,fist,five,flags,flashlight,floppy_disk,flower_playing_cards,flushed,foggy,football,fork_and_knife,fountain,four,four_leaf_clover,fr,free,fried_shrimp,fries,frog,frowning,fu,fuelpump,full_moon,full_moon_with_face,game_die,gb,gem,gemini,ghost,gift,gift_heart,girl,globe_with_meridians,goat,goberserk,godmode,golf,grapes,green_apple,green_book,green_heart,grey_exclamation,grey_question,grimacing,grin,grinning,guardsman,guitar,gun,haircut,hamburger,hammer,hamster,hand,handbag,hankey,hash,hatched_chick,hatching_chick,headphones,hear_no_evil,heart,heart_decoration,heart_eyes,heart_eyes_cat,heartbeat,heartpulse,hearts,heavy_check_mark,heavy_division_sign,heavy_dollar_sign,heavy_exclamation_mark,heavy_minus_sign,heavy_multiplication_x,heavy_plus_sign,helicopter,herb,hibiscus,high_brightness,high_heel,hocho,honey_pot,honeybee,horse,horse_racing,hospital,hotel,hotsprings,hourglass,hourglass_flowing_sand,house,house_with_garden,hurtrealbad,hushed,ice_cream,icecream,id,ideograph_advantage,imp,inbox_tray,incoming_envelope,information_desk_person,information_source,innocent,interrobang,iphone,it,izakaya_lantern,jack_o_lantern,japan,japanese_castle,japanese_goblin,japanese_ogre,jeans,joy,joy_cat,jp,key,keycap_ten,kimono,kiss,kissing,kissing_cat,kissing_closed_eyes,kissing_face,kissing_heart,kissing_smiling_eyes,koala,koko,kr,large_blue_circle,large_blue_diamond,large_orange_diamond,last_quarter_moon,last_quarter_moon_with_face,laughing,leaves,ledger,left_luggage,left_right_arrow,leftwards_arrow_with_hook,lemon,leo,leopard,libra,light_rail,link,lips,lipstick,lock,lock_with_ink_pen,lollipop,loop,loudspeaker,love_hotel,love_letter,low_brightness,m,mag,mag_right,mahjong,mailbox,mailbox_closed,mailbox_with_mail,mailbox_with_no_mail,man,man_with_gua_pi_mao,man_with_turban,mans_shoe,maple_leaf,mask,massage,meat_on_bone,mega,melon,memo,mens,metal,metro,microphone,microscope,milky_way,minibus,minidisc,mobile_phone_off,money_with_wings,moneybag,monkey,monkey_face,monorail,mortar_board,mount_fuji,mountain_bicyclist,mountain_cableway,mountain_railway,mouse,mouse2,movie_camera,moyai,muscle,mushroom,musical_keyboard,musical_note,musical_score,mute,nail_care,name_badge,neckbeard,necktie,negative_squared_cross_mark,neutral_face,new,new_moon,new_moon_with_face,newspaper,ng,nine,no_bell,no_bicycles,no_entry,no_entry_sign,no_good,no_mobile_phones,no_mouth,no_pedestrians,no_smoking,non-potable_water,nose,notebook,notebook_with_decorative_cover,notes,nut_and_bolt,o,o2,ocean,octocat,octopus,oden,office,ok,ok_hand,ok_woman,older_man,older_woman,on,oncoming_automobile,oncoming_bus,oncoming_police_car,oncoming_taxi,one,open_file_folder,open_hands,open_mouth,ophiuchus,orange_book,outbox_tray,ox,package,page_facing_up,page_with_curl,pager,palm_tree,panda_face,paperclip,parking,part_alternation_mark,partly_sunny,passport_control,paw_prints,peach,pear,pencil,pencil2,penguin,pensive,performing_arts,persevere,person_frowning,person_with_blond_hair,person_with_pouting_face,phone,pig,pig2,pig_nose,pill,pineapple,pisces,pizza,plus1,point_down,point_left,point_right,point_up,point_up_2,police_car,poodle,poop,post_office,postal_horn,postbox,potable_water,pouch,poultry_leg,pound,pouting_cat,pray,princess,punch,purple_heart,purse,pushpin,put_litter_in_its_place,question,rabbit,rabbit2,racehorse,radio,radio_button,rage,rage1,rage2,rage3,rage4,railway_car,rainbow,raised_hand,raised_hands,raising_hand,ram,ramen,rat,recycle,red_car,red_circle,registered,relaxed,relieved,repeat,repeat_one,restroom,revolving_hearts,rewind,ribbon,rice,rice_ball,rice_cracker,rice_scene,ring,rocket,roller_coaster,rooster,rose,rotating_light,round_pushpin,rowboat,ru,rugby_football,runner,running,running_shirt_with_sash,sa,sagittarius,sailboat,sake,sandal,santa,satellite,satisfied,saxophone,school,school_satchel,scissors,scorpius,scream,scream_cat,scroll,seat,secret,see_no_evil,seedling,seven,shaved_ice,sheep,shell,ship,shipit,shirt,shit,shoe,shower,signal_strength,six,six_pointed_star,ski,skull,sleeping,sleepy,slot_machine,small_blue_diamond,small_orange_diamond,small_red_triangle,small_red_triangle_down,smile,smile_cat,smiley,smiley_cat,smiling_imp,smirk,smirk_cat,smoking,snail,snake,snowboarder,snowflake,snowman,sob,soccer,soon,sos,sound,space_invader,spades,spaghetti,sparkle,sparkler,sparkles,sparkling_heart,speak_no_evil,speaker,speech_balloon,speedboat,squirrel,star,star2,stars,station,statue_of_liberty,steam_locomotive,stew,straight_ruler,strawberry,stuck_out_tongue,stuck_out_tongue_closed_eyes,stuck_out_tongue_winking_eye,sun_with_face,sunflower,sunglasses,sunny,sunrise,sunrise_over_mountains,surfer,sushi,suspect,suspension_railway,sweat,sweat_drops,sweat_smile,sweet_potato,swimmer,symbols,syringe,tada,tanabata_tree,tangerine,taurus,taxi,tea,telephone,telephone_receiver,telescope,tennis,tent,thought_balloon,three,thumbsdown,thumbsup,ticket,tiger,tiger2,tired_face,tm,toilet,tokyo_tower,tomato,tongue,top,tophat,tractor,traffic_light,train,train2,tram,triangular_flag_on_post,triangular_ruler,trident,triumph,trolleybus,trollface,trophy,tropical_drink,tropical_fish,truck,trumpet,tshirt,tulip,turtle,tv,twisted_rightwards_arrows,two,two_hearts,two_men_holding_hands,two_women_holding_hands,u5272,u5408,u55b6,u6307,u6708,u6709,u6e80,u7121,u7533,u7981,u7a7a,uk,umbrella,unamused,underage,unlock,up,us,v,vertical_traffic_light,vhs,vibration_mode,video_camera,video_game,violin,virgo,volcano,vs,walking,waning_crescent_moon,waning_gibbous_moon,warning,watch,water_buffalo,watermelon,wave,wavy_dash,waxing_crescent_moon,waxing_gibbous_moon,wc,weary,wedding,whale,whale2,wheelchair,white_check_mark,white_circle,white_flower,white_large_square,white_medium_small_square,white_medium_square,white_small_square,white_square_button,wind_chime,wine_glass,wink,wolf,woman,womans_clothes,womans_hat,womens,worried,wrench,x,yellow_heart,yen,yum,zap,zero,zzz
"
.
split
(
"
,
"
);
CodeMirror
.
registerHelper
(
"
hint
"
,
"
emoji
"
,
function
(
cm
){
var
word
=
/
[\w
$
]
+/
;
var
cur
=
cm
.
getCursor
(),
curLine
=
cm
.
getLine
(
cur
.
line
);
var
start
=
cur
.
ch
,
end
=
start
;
while
(
end
<
curLine
.
length
&&
word
.
test
(
curLine
.
charAt
(
end
))){
++
end
}
while
(
start
&&
word
.
test
(
curLine
.
charAt
(
start
-
1
))){
--
start
}
var
tok
=
cm
.
getTokenAt
(
cur
);
var
autocompleteHints
=
[];
var
input
=
tok
.
string
.
trim
();
var
matchCnt
=
0
;
for
(
var
i
=
0
;
i
<
emojis
.
length
;
i
++
){
var
displayText
=
emojis
[
i
];
var
text
=
emojis
[
i
];
if
(
Util
.
startsWith
(
text
,
input
)){
autocompleteHints
.
push
({
displayText
:
'
<span style="font-size: 1rem;line-height:22px"><img style="width: 1rem;margin:3px 0;float:left" src="
'
+
latkeConfig
.
servePath
+
"
/js/lib/emojify.js-1.1.0/images/basic/
"
+
text
+
'
.png">
'
+
displayText
.
toString
()
+
"
</span>
"
,
text
:
"
:
"
+
text
+
"
:
"
});
matchCnt
++
}
if
(
matchCnt
>
10
){
break
}}
return
{
list
:
autocompleteHints
,
from
:
CodeMirror
.
Pos
(
cur
.
line
,
start
),
to
:
CodeMirror
.
Pos
(
cur
.
line
,
end
)}});
CodeMirror
.
commands
.
autocompleteEmoji
=
function
(
cm
){
cm
.
showHint
({
hint
:
CodeMirror
.
hint
.
emoji
,
completeSingle
:
false
});
return
CodeMirror
.
Pass
};
var
commentEditor
=
new
Editor
({
element
:
document
.
getElementById
(
conf
.
id
),
dragDrop
:
false
,
lineWrapping
:
true
,
status
:
false
,
htmlURL
:
latkeConfig
.
servePath
+
"
/console/markdown/2html
"
,
toolbar
:[{
name
:
"
bold
"
},{
name
:
"
italic
"
},{
name
:
"
quote
"
},{
name
:
"
link
"
},{
name
:
"
unordered-list
"
},{
name
:
"
ordered-list
"
},{
name
:
"
image
"
,
html
:
'
<span style="display: inline-block;top:1px" class="tooltipped tooltipped-n" aria-label="
'
+
Label
.
uploadFilesLabel
+
'
" ><form id="
'
+
conf
.
id
+
'
fileUpload" method="POST" enctype="multipart/form-data"><label class="icon-upload"><input type="file"/></label></form></span>
'
},{
name
:
"
redo
"
},{
name
:
"
undo
"
},{
name
:
"
preview
"
},{
name
:
"
fullscreen
"
}],
extraKeys
:{
"
Cmd-/
"
:
"
autocompleteEmoji
"
,
"
Ctrl-/
"
:
"
autocompleteEmoji
"
}});
commentEditor
.
render
();
Util
.
initUploadFile
({
id
:
conf
.
id
+
"
fileUpload
"
,
pasteZone
:
$
(
"
#
"
+
conf
.
id
).
next
().
next
(),
editor
:
commentEditor
.
codemirror
,
uploadingLabel
:
""
});
this
[
conf
.
id
]
=
commentEditor
.
codemirror
;
this
[
conf
.
id
].
on
(
"
changes
"
,
function
(
cm
){
if
(
$
(
"
#
"
+
conf
.
id
).
parent
().
find
(
"
.CodeMirror-preview
"
).
length
===
0
){
return
false
}
$
.
ajax
({
url
:
latkeConfig
.
servePath
+
"
/console/markdown/2html
"
,
type
:
"
POST
"
,
cache
:
false
,
data
:{
markdownText
:
cm
.
getValue
()},
success
:
function
(
result
,
textStatus
){
$
(
"
#
"
+
conf
.
id
).
parent
().
find
(
"
.CodeMirror-preview
"
).
html
(
result
.
html
);
Util
.
parseMarkdown
(
"
content-reset
"
);
hljs
.
initHighlighting
.
called
=
false
;
hljs
.
initHighlighting
()}})});
if
(
typeof
(
conf
.
fun
)
===
"
function
"
){
conf
.
fun
()}},
getContent
:
function
(
id
){
return
this
[
id
].
getValue
()},
setContent
:
function
(
id
,
content
){
this
[
id
].
setValue
(
content
);
var
$preview
=
$
(
"
#
"
+
id
).
parent
().
find
(
"
.markdown-preivew
"
);
$preview
.
find
(
"
.markdown-preview-main
"
).
html
(
content
)},
remove
:
function
(
id
){
this
[
id
].
toTextArea
();
$
(
"
.editor-toolbar
"
).
remove
()}};
var
TablePaginate
=
function
(
id
){
this
.
id
=
id
;
this
.
currentPage
=
1
};
$
.
extend
(
TablePaginate
.
prototype
,{
buildTable
:
function
(
colModel
,
noExpend
){
var
tableData
=
{
colModel
:
colModel
,
noDataTip
:
Label
.
noDataLabel
};
if
(
!
noExpend
){
tableData
.
expendRow
=
{
index
:
"
expendRow
"
}}
$
(
"
#
"
+
this
.
id
+
"
Table
"
).
table
(
tableData
)},
initPagination
:
function
(){
var
id
=
this
.
id
;
$
(
"
#
"
+
id
+
"
Pagination
"
).
paginate
({
bind
:
function
(
currentPage
,
errorMessage
){
if
(
errorMessage
){
$
(
"
#tipMsg
"
).
text
(
errorMessage
)}
else
{
admin
.
setHashByPage
(
currentPage
)}},
currentPage
:
1
,
errorMessage
:
Label
.
inputErrorLabel
,
nextPageText
:
"
>
"
,
previousPageText
:
"
<
"
,
goText
:
Label
.
gotoLabel
,
type
:
"
custom
"
,
custom
:[
1
],
pageCount
:
1
})},
initCommentsDialog
:
function
(){
var
that
=
this
;
$
(
"
#
"
+
this
.
id
+
"
Comments
"
).
dialog
({
modal
:
true
,
hideFooter
:
true
,
close
:
function
(){
admin
[
that
.
id
+
"
List
"
].
getList
(
that
.
currentPage
);
return
true
}})},
updateTablePagination
:
function
(
data
,
currentPage
,
pageInfo
){
currentPage
=
parseInt
(
currentPage
);
if
(
currentPage
>
pageInfo
.
paginationPageCount
&&
currentPage
>
1
){
$
(
"
#tipMsg
"
).
text
(
Label
.
pageLabel
+
currentPage
+
Label
.
notFoundLabel
);
$
(
"
#loadMsg
"
).
text
(
""
);
return
}
$
(
"
#
"
+
this
.
id
+
"
Table
"
).
table
(
"
update
"
,{
data
:[{
groupName
:
"
all
"
,
groupData
:
data
}]});
if
(
pageInfo
.
paginationPageCount
===
0
){
pageInfo
.
paginationPageCount
=
1
}
$
(
"
#
"
+
this
.
id
+
"
Pagination
"
).
paginate
(
"
update
"
,{
pageCount
:
pageInfo
.
paginationPageCount
,
currentPage
:
currentPage
,
custom
:
pageInfo
.
paginationPageNums
});
this
.
currentPage
=
currentPage
}});
admin
.
article
=
{
currentEditorType
:
""
,
isConfirm
:
true
,
status
:{
id
:
undefined
,
isArticle
:
undefined
,
articleHadBeenPublished
:
undefined
},
content
:
""
,
autoSaveDraftTimer
:
""
,
AUTOSAVETIME
:
1000
*
60
,
get
:
function
(
id
,
isArticle
){
this
.
status
.
id
=
id
;
this
.
status
.
isArticle
=
isArticle
;
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
:
false
,
success
:
function
(
result
,
textStatus
){
$
(
"
#tipMsg
"
).
text
(
result
.
msg
);
if
(
!
result
.
sc
){
$
(
"
#loadMsg
"
).
text
(
""
);
return
}
$
(
"
#title
"
).
val
(
result
.
article
.
articleTitle
);
admin
.
article
.
status
.
articleHadBeenPublished
=
result
.
article
.
articleHadBeenPublished
;
if
(
admin
.
article
.
currentEditorType
!==
result
.
article
.
articleEditorType
){
admin
.
editors
.
articleEditor
.
remove
();
admin
.
editors
.
abstractEditor
.
remove
();
admin
.
article
.
currentEditorType
=
result
.
article
.
articleEditorType
;
admin
.
editors
.
articleEditor
.
init
(
result
.
article
.
articleEditorType
);
admin
.
editors
.
abstractEditor
.
init
(
result
.
article
.
articleEditorType
)}
admin
.
editors
.
articleEditor
.
setContent
(
result
.
article
.
articleContent
);
admin
.
editors
.
abstractEditor
.
setContent
(
result
.
article
.
articleAbstract
);
admin
.
article
.
content
=
admin
.
editors
.
articleEditor
.
getContent
();
var
tags
=
result
.
article
.
articleTags
,
tagsString
=
""
;
for
(
var
i
=
0
;
i
<
tags
.
length
;
i
++
){
if
(
0
===
i
){
tagsString
=
tags
[
i
].
tagTitle
}
else
{
tagsString
+=
"
,
"
+
tags
[
i
].
tagTitle
}}
$
(
"
#tag
"
).
val
(
tagsString
);
$
(
"
#permalink
"
).
val
(
result
.
article
.
articlePermalink
);
$
(
"
#viewPwd
"
).
val
(
result
.
article
.
articleViewPwd
);
$
(
"
#articleCommentable
"
).
prop
(
"
checked
"
,
result
.
article
.
articleCommentable
);
var
signs
=
result
.
article
.
signs
;
$
(
"
.signs button
"
).
each
(
function
(
i
){
if
(
parseInt
(
result
.
article
.
articleSignId
)
===
parseInt
(
signs
[
i
].
oId
)){
$
(
"
#articleSign
"
+
signs
[
i
].
oId
).
addClass
(
"
selected
"
)}
else
{
$
(
"
#articleSign
"
+
signs
[
i
].
oId
).
removeClass
(
"
selected
"
)}});
admin
.
article
.
setStatus
();
$
(
"
#loadMsg
"
).
text
(
""
)}})},
del
:
function
(
id
,
fromId
,
title
){
var
isDelete
=
confirm
(
Label
.
confirmRemoveLabel
+
Label
.
articleLabel
+
'
"
'
+
Util
.
htmlDecode
(
title
)
+
'
"?
'
);
if
(
isDelete
){
$
(
"
#loadMsg
"
).
text
(
Label
.
loadingLabel
);
$
(
"
#tipMsg
"
).
text
(
""
);
$
.
ajax
({
url
:
latkeConfig
.
servePath
+
"
/console/article/
"
+
id
,
type
:
"
DELETE
"
,
cache
:
false
,
success
:
function
(
result
,
textStatus
){
$
(
"
#tipMsg
"
).
text
(
result
.
msg
);
if
(
!
result
.
sc
){
$
(
"
#loadMsg
"
).
text
(
""
);
return
}
admin
[
fromId
+
"
List
"
].
getList
(
1
)}})}},
add
:
function
(
articleIsPublished
,
isAuto
){
if
(
admin
.
article
.
validate
()){
var
that
=
this
;
that
.
_addDisabled
();
$
(
"
#loadMsg
"
).
text
(
Label
.
loadingLabel
);
$
(
"
#tipMsg
"
).
text
(
""
);
var
signId
=
""
;
$
(
"
.signs button
"
).
each
(
function
(){
if
(
this
.
className
===
"
selected
"
){
signId
=
this
.
id
.
substr
(
this
.
id
.
length
-
1
,
1
)}});
var
articleContent
=
admin
.
editors
.
articleEditor
.
getContent
(),
articleAbstract
=
admin
.
editors
.
abstractEditor
.
getContent
();
if
(
$
(
"
#articleThumbnail
"
).
prop
(
"
checked
"
)){
var
bgImage
=
$
(
"
.thumbnail__img
"
).
css
(
"
background-image
"
);
articleContent
=
"

+
"
)
\n\n
"
+
articleContent
}
var
requestJSONObject
=
{
article
:{
articleTitle
:
$
(
"
#title
"
).
val
(),
articleContent
:
articleContent
,
articleAbstract
:
articleAbstract
,
articleTags
:
this
.
trimUniqueArray
(
$
(
"
#tag
"
).
val
()).
toString
(),
articlePermalink
:
$
(
"
#permalink
"
).
val
(),
articleIsPublished
:
articleIsPublished
,
articleSignId
:
signId
,
postToCommunity
:
$
(
"
#postToCommunity
"
).
prop
(
"
checked
"
),
articleCommentable
:
$
(
"
#articleCommentable
"
).
prop
(
"
checked
"
),
articleViewPwd
:
$
(
"
#viewPwd
"
).
val
()}};
$
.
ajax
({
url
:
latkeConfig
.
servePath
+
"
/console/article/
"
,
type
:
"
POST
"
,
cache
:
false
,
data
:
JSON
.
stringify
(
requestJSONObject
),
success
:
function
(
result
,
textStatus
){
if
(
isAuto
){
$
(
"
#tipMsg
"
).
text
(
Label
.
autoSaveLabel
);
admin
.
article
.
status
.
id
=
result
.
oId
;
return
}
$
(
"
#tipMsg
"
).
text
(
result
.
msg
);
if
(
!
result
.
sc
){
return
}
if
(
articleIsPublished
){
admin
.
article
.
status
.
id
=
undefined
;
admin
.
selectTab
(
"
article/article-list
"
)}
else
{
admin
.
selectTab
(
"
article/draft-list
"
)}
admin
.
article
.
isConfirm
=
false
},
complete
:
function
(
jqXHR
,
textStatus
){
that
.
_removeDisabled
();
$
(
"
#loadMsg
"
).
text
(
""
);
if
(
jqXHR
.
status
===
403
){
$
.
get
(
"
/admin-index.do
"
);
that
.
add
(
articleIsPublished
)}}})}},
update
:
function
(
articleIsPublished
,
isAuto
){
if
(
admin
.
article
.
validate
()){
var
that
=
this
;
that
.
_addDisabled
();
$
(
"
#loadMsg
"
).
text
(
Label
.
loadingLabel
);
$
(
"
#tipMsg
"
).
text
(
""
);
var
signId
=
""
;
$
(
"
.signs button
"
).
each
(
function
(){
if
(
this
.
className
===
"
selected
"
){
signId
=
this
.
id
.
substr
(
this
.
id
.
length
-
1
,
1
)}});
var
articleContent
=
admin
.
editors
.
articleEditor
.
getContent
(),
articleAbstract
=
admin
.
editors
.
abstractEditor
.
getContent
();
if
(
$
(
"
#articleThumbnail
"
).
prop
(
"
checked
"
)){
var
bgImage
=
$
(
"
.thumbnail__img
"
).
css
(
"
background-image
"
);
articleContent
=
"

+
"
)
\n\n
"
+
articleContent
}
var
requestJSONObject
=
{
article
:{
oId
:
this
.
status
.
id
,
articleTitle
:
$
(
"
#title
"
).
val
(),
articleContent
:
articleContent
,
articleAbstract
:
articleAbstract
,
articleTags
:
this
.
trimUniqueArray
(
$
(
"
#tag
"
).
val
()).
toString
(),
articlePermalink
:
$
(
"
#permalink
"
).
val
(),
articleIsPublished
:
articleIsPublished
,
articleSignId
:
signId
,
articleCommentable
:
$
(
"
#articleCommentable
"
).
prop
(
"
checked
"
),
articleViewPwd
:
$
(
"
#viewPwd
"
).
val
(),
postToCommunity
:
$
(
"
#postToCommunity
"
).
prop
(
"
checked
"
),
articleEditorType
:
admin
.
article
.
currentEditorType
}};
$
.
ajax
({
url
:
latkeConfig
.
servePath
+
"
/console/article/
"
,
type
:
"
PUT
"
,
cache
:
false
,
data
:
JSON
.
stringify
(
requestJSONObject
),
success
:
function
(
result
,
textStatus
){
if
(
isAuto
){
$
(
"
#tipMsg
"
).
text
(
Label
.
autoSaveLabel
);
return
}
$
(
"
#tipMsg
"
).
text
(
result
.
msg
);
if
(
!
result
.
sc
){
return
}
if
(
articleIsPublished
){
admin
.
selectTab
(
"
article/article-list
"
)}
else
{
admin
.
selectTab
(
"
article/draft-list
"
)}
$
(
"
#tipMsg
"
).
text
(
Label
.
updateSuccLabel
);
admin
.
article
.
status
.
id
=
undefined
;
admin
.
article
.
isConfirm
=
false
},
complete
:
function
(
jqXHR
,
textStatus
){
that
.
_removeDisabled
();
$
(
"
#loadMsg
"
).
text
(
""
);
if
(
jqXHR
.
status
===
403
){
$
.
get
(
"
/admin-index.do
"
);
that
.
update
(
articleIsPublished
)}}})}},
setStatus
:
function
(){
$
.
ajax
({
url
:
latkeConfig
.
servePath
+
"
/console/tags
"
,
type
:
"
GET
"
,
cache
:
false
,
success
:
function
(
result
,
textStatus
){
$
(
"
#tipMsg
"
).
text
(
result
.
msg
);
if
(
!
result
.
sc
){
$
(
"
#loadMsg
"
).
text
(
""
);
return
}
if
(
0
>=
result
.
tags
.
length
){
return
}
$
(
"
#tagCheckboxPanel>span
"
).
remove
(
""
);
var
spans
=
""
;
for
(
var
i
=
0
;
i
<
result
.
tags
.
length
;
i
++
){
spans
+=
"
<span>
"
+
result
.
tags
[
i
].
tagTitle
+
"
</span>
"
}
$
(
"
#tagCheckboxPanel
"
).
html
(
spans
+
'
<div class="clear"></div>
'
);
$
(
"
#loadMsg
"
).
text
(
""
)}});
if
(
this
.
status
){
if
(
this
.
status
.
isArticle
){
$
(
"
#unSubmitArticle
"
).
show
();
$
(
"
#saveArticle
"
).
hide
();
$
(
"
#submitArticle
"
).
show
()}
else
{
$
(
"
#submitArticle
"
).
show
();
$
(
"
#unSubmitArticle
"
).
hide
();
$
(
"
#saveArticle
"
).
show
()}
if
(
this
.
status
.
articleHadBeenPublished
){
$
(
"
#postToCommunityPanel
"
).
hide
()}
else
{}}
else
{
$
(
"
#submitArticle
"
).
show
();
$
(
"
#unSubmitArticle
"
).
hide
();
$
(
"
#saveArticle
"
).
show
()}
$
(
"
#postToCommunity
"
).
attr
(
"
checked
"
,
"
checked
"
)},
clear
:
function
(){
this
.
status
=
{
id
:
undefined
,
isArticle
:
undefined
,
articleHadBeenPublished
:
undefined
};
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
"
,
true
);
$
(
"
#postToCommunity
"
).
prop
(
"
checked
"
,
true
);
$
(
"
.signs button
"
).
each
(
function
(
i
){
if
(
i
===
0
){
this
.
className
=
"
selected
"
}
else
{
this
.
className
=
""
}});
$
(
"
.editor-preview-active
"
).
html
(
""
).
removeClass
(
"
editor-preview-active
"
);
$
(
"
#uploadContent
"
).
remove
();
if
(
$
(
"
#articleThumbnail
"
).
prop
(
"
checked
"
)){
$
(
"
#articleThumbnail
"
).
click
()}},
init
:
function
(
fun
){
this
.
currentEditorType
=
Label
.
editorType
;
$
(
"
.signs button
"
).
click
(
function
(
i
){
$
(
"
.signs button
"
).
removeClass
(
"
selected
"
);
$
(
this
).
addClass
(
"
selected
"
)});
$
.
ajax
({
url
:
latkeConfig
.
servePath
+
"
/console/tags
"
,
type
:
"
GET
"
,
cache
:
false
,
success
:
function
(
result
,
textStatus
){
$
(
"
#tipMsg
"
).
text
(
result
.
msg
);
if
(
!
result
.
sc
){
$
(
"
#loadMsg
"
).
text
(
""
);
return
}
if
(
0
>=
result
.
tags
.
length
){
return
}
var
tags
=
[];
for
(
var
i
=
0
;
i
<
result
.
tags
.
length
;
i
++
){
tags
.
push
(
result
.
tags
[
i
].
tagTitle
)}
$
(
"
#tag
"
).
completed
({
height
:
160
,
buttonText
:
Label
.
selectLabel
,
data
:
tags
});
$
(
"
#loadMsg
"
).
text
(
""
)}});
$
(
"
#submitArticle
"
).
click
(
function
(){
if
(
admin
.
article
.
status
.
id
){
admin
.
article
.
update
(
true
)}
else
{
admin
.
article
.
add
(
true
)}});
$
(
"
#saveArticle
"
).
click
(
function
(){
if
(
admin
.
article
.
status
.
id
){
admin
.
article
.
update
(
admin
.
article
.
status
.
isArticle
)}
else
{
admin
.
article
.
add
(
false
)}});
admin
.
editors
.
articleEditor
=
new
SoloEditor
({
id
:
"
articleContent
"
,
kind
:
"
all
"
,
fun
:
fun
,
height
:
500
});
admin
.
editors
.
abstractEditor
=
new
SoloEditor
({
id
:
"
abstract
"
,
kind
:
"
simple
"
,
height
:
200
});
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
"
,
type
:
"
GET
"
,
cache
:
false
,
success
:
function
(
result
,
textStatus
){
if
(
!
result
.
sc
){
$
(
"
#loadMsg
"
).
text
(
result
.
msg
);
return
}
$
(
"
#articleThumbnailBtn
"
).
prev
().
css
(
"
background-image
"
,
"
url(
"
+
result
.
data
[
0
]
+
"
)
"
)}})}).
click
()},
_autoSaveToDraft
:
function
(){
if
(
$
(
"
#title
"
).
val
().
replace
(
/
\s
/g
,
""
)
===
""
||
admin
.
editors
.
articleEditor
.
getContent
().
replace
(
/
\s
/g
,
""
)
===
""
){
return
}
if
(
admin
.
article
.
status
.
id
){
if
(
!
admin
.
article
.
status
.
isArticle
){
admin
.
article
.
update
(
false
,
true
)}}
else
{
admin
.
article
.
add
(
false
,
true
);
admin
.
article
.
status
.
isArticle
=
false
}},
clearDraftTimer
:
function
(){
if
(
admin
.
article
.
autoSaveDraftTimer
!==
""
){
window
.
clearInterval
(
admin
.
article
.
autoSaveDraftTimer
);
admin
.
article
.
autoSaveDraftTimer
=
""
}},
validate
:
function
(){
var
articleContent
=
admin
.
editors
.
articleEditor
.
getContent
();
if
(
$
(
"
#title
"
).
val
().
replace
(
/
\s
/g
,
""
)
===
""
){
$
(
"
#tipMsg
"
).
text
(
Label
.
titleEmptyLabel
);
$
(
"
#title
"
).
focus
().
val
(
""
)}
else
{
if
(
articleContent
.
replace
(
/
\s
/g
,
""
)
===
""
){
$
(
"
#tipMsg
"
).
text
(
Label
.
contentEmptyLabel
)}
else
{
return
true
}}
return
false
},
unPublish
:
function
(
isAuto
){
var
that
=
this
;
that
.
_addDisabled
();
$
.
ajax
({
url
:
latkeConfig
.
servePath
+
"
/console/article/unpublish/
"
+
admin
.
article
.
status
.
id
,
type
:
"
PUT
"
,
cache
:
false
,
success
:
function
(
result
,
textStatus
){
if
(
isAuto
){
$
(
"
#tipMsg
"
).
text
(
Label
.
autoSaveLabel
);
return
}
$
(
"
#tipMsg
"
).
text
(
result
.
msg
);
if
(
!
result
.
sc
){
return
}
admin
.
selectTab
(
"
article/draft-list
"
);
admin
.
article
.
status
.
id
=
undefined
;
admin
.
article
.
isConfirm
=
false
},
complete
:
function
(
jqXHR
,
textStatus
){
that
.
_removeDisabled
();
$
(
"
#loadMsg
"
).
text
(
""
);
if
(
jqXHR
.
status
===
403
){
$
.
get
(
"
/admin-index.do
"
);
that
.
unPublish
()}}})},
trimUniqueArray
:
function
(
str
){
str
=
str
.
toString
();
var
arr
=
str
.
split
(
"
,
"
);
for
(
var
i
=
0
;
i
<
arr
.
length
;
i
++
){
arr
[
i
]
=
arr
[
i
].
replace
(
/
(
^
\s
*
)
|
(\s
*$
)
/g
,
""
);
if
(
arr
[
i
]
===
""
){
arr
.
splice
(
i
,
1
);
i
--
}}
var
unique
=
$
.
unique
(
arr
);
return
unique
.
toString
()},
prePost
:
function
(){
$
(
"
#loadMsg
"
).
text
(
Label
.
loadingLabel
);
admin
.
article
.
content
=
""
;
if
(
!
admin
.
editors
.
articleEditor
.
getContent
){
return
}
var
articleContent
=
admin
.
editors
.
articleEditor
.
getContent
();
if
(
window
.
location
.
hash
===
"
#article/article
"
&&
articleContent
.
replace
(
/
\s
/g
,
""
)
!==
""
){
if
(
confirm
(
Label
.
editorPostLabel
)){
admin
.
article
.
clear
()}}
$
(
"
#tipMsg
"
).
text
(
""
);
$
(
"
#loadMsg
"
).
text
(
""
);
if
(
admin
.
article
.
currentEditorType
!==
Label
.
editorType
){
admin
.
editors
.
articleEditor
.
remove
();
admin
.
editors
.
abstractEditor
.
remove
();
admin
.
article
.
currentEditorType
=
Label
.
editorType
;
admin
.
editors
.
articleEditor
.
init
(
Label
.
editorType
);
admin
.
editors
.
abstractEditor
.
init
(
Label
.
editorType
)}},
_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
(
""
)}};
function
getUUID
(){
var
d
=
new
Date
().
getTime
();
var
ret
=
"
xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx
"
.
replace
(
/
[
xy
]
/g
,
function
(
c
){
var
r
=
(
d
+
Math
.
random
()
*
16
)
%
16
|
0
;
d
=
Math
.
floor
(
d
/
16
);
return
(
c
==
"
x
"
?
r
:(
r
&
3
|
8
)).
toString
(
16
)});
ret
=
ret
.
replace
(
new
RegExp
(
"
-
"
,
"
g
"
),
""
);
return
ret
}
admin
.
comment
=
{
open
:
function
(
id
,
fromId
){
this
.
getList
(
id
,
fromId
);
$
(
"
#
"
+
fromId
+
"
Comments
"
).
dialog
(
"
open
"
)},
getList
:
function
(
onId
,
fromId
){
$
(
"
#loadMsg
"
).
text
(
Label
.
loadingLabel
);
$
(
"
#tipMsg
"
).
text
(
""
);
$
(
"
#
"
+
fromId
+
"
Comments
"
).
html
(
""
);
var
from
=
"
article
"
;
if
(
fromId
===
"
page
"
){
from
=
"
page
"
}
$
.
ajax
({
url
:
latkeConfig
.
servePath
+
"
/console/comments/
"
+
from
+
"
/
"
+
onId
,
type
:
"
GET
"
,
cache
:
false
,
success
:
function
(
result
,
textStatus
){
$
(
"
#tipMsg
"
).
text
(
result
.
msg
);
if
(
!
result
.
sc
){
$
(
"
#loadMsg
"
).
text
(
""
);
return
}
var
comments
=
result
.
comments
,
commentsHTML
=
""
;
for
(
var
i
=
0
;
i
<
comments
.
length
;
i
++
){
var
hrefHTML
=
"
<a target='_blank' href='
"
+
comments
[
i
].
commentURL
+
"
'>
"
,
content
=
comments
[
i
].
commentContent
,
contentHTML
=
Util
.
replaceEmString
(
content
);
if
(
comments
[
i
].
commentURL
===
"
http://
"
){
hrefHTML
=
"
<a target='_blank'>
"
}
commentsHTML
+=
"
<div class='comment-title'><span class='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:
"
+
comments
[
i
].
commentEmail
+
"
'>
"
+
comments
[
i
].
commentEmail
+
"
</a>
"
+
$
.
bowknot
.
getDate
(
comments
[
i
].
commentTime
)
+
"
</span><div class='clear'></div></div><div class='margin12'>
"
+
contentHTML
+
"
</div>
"
}
if
(
""
===
commentsHTML
){
commentsHTML
=
Label
.
noCommentLabel
}
$
(
"
#
"
+
fromId
+
"
Comments
"
).
html
(
commentsHTML
);
$
(
"
#loadMsg
"
).
text
(
""
)}})},
del
:
function
(
id
,
fromId
,
articleId
){
var
isDelete
=
confirm
(
Label
.
confirmRemoveLabel
+
Label
.
commentLabel
+
"
?
"
);
if
(
isDelete
){
$
(
"
#loadMsg
"
).
text
(
Label
.
loadingLabel
);
var
from
=
"
article
"
;
if
(
fromId
===
"
page
"
){
from
=
"
page
"
}
$
.
ajax
({
url
:
latkeConfig
.
servePath
+
"
/console/
"
+
from
+
"
/comment/
"
+
id
,
type
:
"
DELETE
"
,
cache
:
false
,
success
:
function
(
result
,
textStatus
){
$
(
"
#tipMsg
"
).
text
(
result
.
msg
);
if
(
!
result
.
sc
){
$
(
"
#loadMsg
"
).
text
(
""
);
return
}
admin
.
comment
.
getList
(
articleId
,
fromId
);
$
(
"
#loadMsg
"
).
text
(
""
)}})}}};
admin
.
articleList
=
{
tablePagination
:
new
TablePaginate
(
"
article
"
),
init
:
function
(
page
){
this
.
tablePagination
.
buildTable
([{
text
:
Label
.
titleLabel
,
index
:
"
title
"
,
minWidth
:
110
,
style
:
"
padding-left: 12px;font-size:14px;
"
},{
text
:
Label
.
authorLabel
,
index
:
"
author
"
,
width
:
150
,
style
:
"
padding-left: 12px;
"
},{
text
:
Label
.
commentLabel
,
index
:
"
comments
"
,
width
:
80
,
style
:
"
padding-left: 12px;
"
},{
text
:
Label
.
viewLabel
,
width
:
60
,
index
:
"
articleViewCount
"
,
style
:
"
padding-left: 12px;
"
},{
text
:
Label
.
dateLabel
,
index
:
"
date
"
,
width
:
90
,
style
:
"
padding-left: 12px;
"
}]);
this
.
tablePagination
.
initPagination
();
this
.
tablePagination
.
initCommentsDialog
();
this
.
getList
(
page
);
const
that
=
this
;
$
(
"
#articleListBtn
"
).
click
(
function
(){
that
.
getList
(
page
)})},
getList
:
function
(
pageNum
){
var
that
=
this
;
$
(
"
#loadMsg
"
).
text
(
Label
.
loadingLabel
);
$
.
ajax
({
url
:
latkeConfig
.
servePath
+
"
/console/articles/status/published/
"
+
pageNum
+
"
/
"
+
Label
.
PAGE_SIZE
+
"
/
"
+
Label
.
WINDOW_SIZE
+
"
?k=
"
+
$
(
"
#articleListInput
"
).
val
(),
type
:
"
GET
"
,
cache
:
false
,
success
:
function
(
result
,
textStatus
){
$
(
"
#tipMsg
"
).
text
(
result
.
msg
);
if
(
!
result
.
sc
){
$
(
"
#loadMsg
"
).
text
(
""
);
return
}
var
articles
=
result
.
articles
,
articleData
=
[];
for
(
var
i
=
0
;
i
<
articles
.
length
;
i
++
){
articleData
[
i
]
=
{};
articleData
[
i
].
title
=
'
<a href="
'
+
latkeConfig
.
servePath
+
articles
[
i
].
articlePermalink
+
"
\"
target='_blank' title='
"
+
articles
[
i
].
articleTitle
+
"
' class='no-underline'>
"
+
articles
[
i
].
articleTitle
+
"
</a><span class='table-tag'>
"
+
articles
[
i
].
articleTags
+
"
</span>
"
;
articleData
[
i
].
date
=
$
.
bowknot
.
getDate
(
articles
[
i
].
articleCreateTime
);
articleData
[
i
].
comments
=
articles
[
i
].
articleCommentCount
;
articleData
[
i
].
articleViewCount
=
articles
[
i
].
articleViewCount
;
articleData
[
i
].
author
=
articles
[
i
].
authorName
;
var
topClass
=
articles
[
i
].
articlePutTop
?
Label
.
cancelPutTopLabel
:
Label
.
putTopLabel
;
articleData
[
i
].
expendRow
=
"
<a target='_blank' href='
"
+
latkeConfig
.
servePath
+
articles
[
i
].
articlePermalink
+
"
'>
"
+
Label
.
viewLabel
+
"
</a> <a href='javascript:void(0)' onclick=
\"
admin.article.get('
"
+
articles
[
i
].
oId
+
"
', true)
\"
>
"
+
Label
.
updateLabel
+
"
</a> <a href='javascript:void(0)' onclick=
\"
admin.article.del('
"
+
articles
[
i
].
oId
+
"
', 'article', '
"
+
encodeURIComponent
(
articles
[
i
].
articleTitle
)
+
"
')
\"
>
"
+
Label
.
removeLabel
+
"
</a> <a href='javascript:void(0)' onclick=
\"
admin.articleList.popTop(this, '
"
+
articles
[
i
].
oId
+
"
')
\"
>
"
+
topClass
+
"
</a> <a href='javascript:void(0)' onclick=
\"
admin.comment.open('
"
+
articles
[
i
].
oId
+
"
', 'article')
\"
>
"
+
Label
.
commentLabel
+
"
</a>
"
}
that
.
tablePagination
.
updateTablePagination
(
articleData
,
pageNum
,
result
.
pagination
);
$
(
"
#loadMsg
"
).
text
(
""
)}})},
popTop
:
function
(
it
,
id
){
$
(
"
#loadMsg
"
).
text
(
Label
.
loadingLabel
);
$
(
"
#tipMsg
"
).
text
(
""
);
var
$it
=
$
(
it
),
ajaxUrl
=
"
canceltop
"
,
tip
=
Label
.
putTopLabel
;
if
(
$it
.
html
()
===
Label
.
putTopLabel
){
ajaxUrl
=
"
puttop
"
;
tip
=
Label
.
cancelPutTopLabel
}
$
.
ajax
({
url
:
latkeConfig
.
servePath
+
"
/console/article/
"
+
ajaxUrl
+
"
/
"
+
id
,
type
:
"
PUT
"
,
cache
:
false
,
success
:
function
(
result
,
textStatus
){
$
(
"
#tipMsg
"
).
text
(
result
.
msg
);
if
(
!
result
.
sc
){
$
(
"
#loadMsg
"
).
text
(
""
);
return
}
$it
.
html
(
tip
);
$
(
"
#loadMsg
"
).
text
(
""
)}})}};
admin
.
register
[
"
article-list
"
]
=
{
obj
:
admin
.
articleList
,
init
:
admin
.
articleList
.
init
,
refresh
:
admin
.
articleList
.
getList
};
admin
.
draftList
=
{
tablePagination
:
new
TablePaginate
(
"
draft
"
),
init
:
function
(
page
){
this
.
tablePagination
.
buildTable
([{
text
:
Label
.
titleLabel
,
index
:
"
title
"
,
minWidth
:
110
,
style
:
"
padding-left: 12px;font-size:14px;
"
},{
text
:
Label
.
authorLabel
,
index
:
"
author
"
,
width
:
150
,
style
:
"
padding-left: 12px;
"
},{
text
:
Label
.
commentLabel
,
index
:
"
comments
"
,
width
:
80
,
style
:
"
padding-left: 12px;
"
},{
text
:
Label
.
viewLabel
,
width
:
60
,
index
:
"
articleViewCount
"
,
style
:
"
padding-left: 12px;
"
},{
text
:
Label
.
dateLabel
,
index
:
"
date
"
,
width
:
90
,
style
:
"
padding-left: 12px;
"
}]);
this
.
tablePagination
.
initPagination
();
this
.
tablePagination
.
initCommentsDialog
();
this
.
getList
(
page
)},
getList
:
function
(
pageNum
){
$
(
"
#loadMsg
"
).
text
(
Label
.
loadingLabel
);
var
that
=
this
;
$
.
ajax
({
url
:
latkeConfig
.
servePath
+
"
/console/articles/status/unpublished/
"
+
pageNum
+
"
/
"
+
Label
.
PAGE_SIZE
+
"
/
"
+
Label
.
WINDOW_SIZE
,
type
:
"
GET
"
,
cache
:
false
,
success
:
function
(
result
,
textStatus
){
$
(
"
#tipMsg
"
).
text
(
result
.
msg
);
if
(
!
result
.
sc
){
$
(
"
#loadMsg
"
).
text
(
""
);
return
}
var
articles
=
result
.
articles
,
articleData
=
[];
for
(
var
i
=
0
;
i
<
articles
.
length
;
i
++
){
articleData
[
i
]
=
{};
articleData
[
i
].
tags
=
articles
[
i
].
articleTags
;
articleData
[
i
].
date
=
$
.
bowknot
.
getDate
(
articles
[
i
].
articleCreateTime
);
articleData
[
i
].
comments
=
articles
[
i
].
articleCommentCount
;
articleData
[
i
].
articleViewCount
=
articles
[
i
].
articleViewCount
;
articleData
[
i
].
author
=
articles
[
i
].
authorName
;
articleData
[
i
].
title
=
"
<a class='no-underline' href='
"
+
latkeConfig
.
servePath
+
articles
[
i
].
articlePermalink
+
"
' target='_blank'>
"
+
articles
[
i
].
articleTitle
+
"
</a><span class='table-tag'>
"
+
articles
[
i
].
articleTags
+
"
</span>
"
;
articleData
[
i
].
expendRow
=
"
<a href='javascript:void(0)' onclick=
\"
admin.article.get('
"
+
articles
[
i
].
oId
+
"
', false);
\"
>
"
+
Label
.
updateLabel
+
"
</a> <a href='javascript:void(0)' onclick=
\"
admin.article.del('
"
+
articles
[
i
].
oId
+
"
', 'draft', '
"
+
encodeURIComponent
(
articles
[
i
].
articleTitle
)
+
"
')
\"
>
"
+
Label
.
removeLabel
+
"
</a> <a href='javascript:void(0)' onclick=
\"
admin.comment.open('
"
+
articles
[
i
].
oId
+
"
', 'draft')
\"
>
"
+
Label
.
commentLabel
+
"
</a>
"
}
that
.
tablePagination
.
updateTablePagination
(
articleData
,
pageNum
,
result
.
pagination
);
$
(
"
#loadMsg
"
).
text
(
""
)}})}};
admin
.
register
[
"
draft-list
"
]
=
{
obj
:
admin
.
draftList
,
init
:
admin
.
draftList
.
init
,
refresh
:
admin
.
draftList
.
getList
};
admin
.
pageList
=
{
currentEditorType
:
""
,
tablePagination
:
new
TablePaginate
(
"
page
"
),
pageInfo
:{
currentCount
:
1
,
pageCount
:
1
,
currentPage
:
1
},
id
:
""
,
type
:
"
link
"
,
init
:
function
(
page
){
this
.
tablePagination
.
buildTable
([{
text
:
""
,
index
:
"
pageOrder
"
,
width
:
60
,
style
:
"
padding-left: 12px;font-size:14px;
"
},{
style
:
"
padding-left: 12px;
"
,
text
:
Label
.
titleLabel
,
index
:
"
pageTitle
"
,
width
:
300
},{
style
:
"
padding-left: 12px;
"
,
text
:
Label
.
permalinkLabel
,
index
:
"
pagePermalink
"
,
minWidth
:
100
},{
style
:
"
padding-left: 12px;
"
,
text
:
Label
.
openMethodLabel
,
index
:
"
pageTarget
"
,
width
:
120
},{
style
:
"
padding-left: 12px;
"
,
text
:
Label
.
typeLabel
,
index
:
"
pageType
"
,
width
:
80
},{
text
:
Label
.
commentLabel
,
index
:
"
comments
"
,
width
:
80
,
style
:
"
padding-left: 12px;
"
}]);
this
.
tablePagination
.
initPagination
();
this
.
tablePagination
.
initCommentsDialog
();
this
.
getList
(
page
);
var
language
=
Label
.
localeString
.
substring
(
0
,
2
);
if
(
language
===
"
zh
"
){
language
=
"
zh-cn
"
}
admin
.
pageList
.
currentEditorType
=
Label
.
editorType
;
admin
.
editors
.
pageEditor
=
new
SoloEditor
({
language
:
language
,
kind
:
"
all
"
,
id
:
"
pageContent
"
});
$
(
"
.fn-type
"
).
click
(
function
(){
var
$it
=
$
(
this
);
if
(
$it
.
hasClass
(
"
selected
"
)){
return
}
$
(
"
.fn-type
"
).
removeClass
(
"
selected
"
);
$it
.
addClass
(
"
selected
"
);
admin
.
pageList
.
type
=
$it
.
data
(
"
type
"
);
if
(
admin
.
pageList
.
type
===
"
page
"
){
$
(
"
#pagePagePanel
"
).
slideDown
();
if
(
Label
.
editorType
===
"
CodeMirror-Markdown
"
&&
admin
.
editors
.
pageEditor
.
getContent
()
===
""
){
admin
.
editors
.
pageEditor
.
setContent
(
""
)}}
else
{
$
(
"
#pagePagePanel
"
).
slideUp
()}})},
getList
:
function
(
pageNum
){
$
(
"
#loadMsg
"
).
text
(
Label
.
loadingLabel
);
$
(
"
#tipMsg
"
).
text
(
""
);
var
that
=
this
;
$
.
ajax
({
url
:
latkeConfig
.
servePath
+
"
/console/pages/
"
+
pageNum
+
"
/
"
+
Label
.
PAGE_SIZE
+
"
/
"
+
Label
.
WINDOW_SIZE
,
type
:
"
GET
"
,
cache
:
false
,
success
:
function
(
result
,
textStatus
){
$
(
"
#tipMsg
"
).
text
(
result
.
msg
);
if
(
!
result
.
sc
){
$
(
"
#loadMsg
"
).
text
(
""
);
return
}
var
pages
=
result
.
pages
;
var
pageData
=
[];
admin
.
pageList
.
pageInfo
.
currentCount
=
pages
.
length
;
admin
.
pageList
.
pageInfo
.
pageCount
=
result
.
pagination
.
paginationPageCount
===
0
?
1
:
result
.
pagination
.
paginationPageCount
;
for
(
var
i
=
0
;
i
<
pages
.
length
;
i
++
){
pageData
[
i
]
=
{};
if
(
i
===
0
){
if
(
pages
.
length
===
1
){
pageData
[
i
].
pageOrder
=
""
}
else
{
pageData
[
i
].
pageOrder
=
'
<div class="table-center" style="width:14px"> <span onclick="admin.pageList.changeOrder(
'
+
pages
[
i
].
oId
+
"
,
"
+
i
+
'
,
\'
down
\'
);" class="icon-move-down"></span></div>
'
}}
else
{
if
(
i
===
pages
.
length
-
1
){
pageData
[
i
].
pageOrder
=
'
<div class="table-center" style="width:14px"> <span onclick="admin.pageList.changeOrder(
'
+
pages
[
i
].
oId
+
"
,
"
+
i
+
'
,
\'
up
\'
);" class="icon-move-up"></span> </div>
'
}
else
{
pageData
[
i
].
pageOrder
=
'
<div class="table-center" style="width:38px"> <span onclick="admin.pageList.changeOrder(
'
+
pages
[
i
].
oId
+
"
,
"
+
i
+
'
,
\'
up
\'
);" class="icon-move-up"></span> <span onclick="admin.pageList.changeOrder(
'
+
pages
[
i
].
oId
+
"
,
"
+
i
+
'
,
\'
down
\'
);" class="icon-move-down"></span> </div>
'
}}
var
pageIcon
=
""
;
if
(
pages
[
i
].
pageIcon
!==
""
){
pageIcon
=
"
<img class='navigation-icon' src='
"
+
pages
[
i
].
pageIcon
+
"
'/>
"
}
pageData
[
i
].
pageTitle
=
pageIcon
+
"
<a class='no-underline' href='
"
+
pages
[
i
].
pagePermalink
+
"
' target='_blank'>
"
+
pages
[
i
].
pageTitle
+
"
</a>
"
;
pageData
[
i
].
pagePermalink
=
"
<a class='no-underline' href='
"
+
pages
[
i
].
pagePermalink
+
"
' target='_blank'>
"
+
pages
[
i
].
pagePermalink
+
"
</a>
"
;
pageData
[
i
].
pageTarget
=
pages
[
i
].
pageOpenTarget
;
pageData
[
i
].
pageType
=
pages
[
i
].
pageType
;
pageData
[
i
].
comments
=
pages
[
i
].
pageCommentCount
;
pageData
[
i
].
expendRow
=
"
<span><a href='
"
+
pages
[
i
].
pagePermalink
+
"
' target='_blank'>
"
+
Label
.
viewLabel
+
"
</a> <a href='javascript:void(0)' onclick=
\"
admin.pageList.get('
"
+
pages
[
i
].
oId
+
"
')
\"
>
"
+
Label
.
updateLabel
+
"
</a> <a href='javascript:void(0)' onclick=
\"
admin.pageList.del('
"
+
pages
[
i
].
oId
+
"
', '
"
+
encodeURIComponent
(
pages
[
i
].
pageTitle
)
+
"
')
\"
>
"
+
Label
.
removeLabel
+
"
</a> <a href='javascript:void(0)' onclick=
\"
admin.comment.open('
"
+
pages
[
i
].
oId
+
"
', 'page')
\"
>
"
+
Label
.
commentLabel
+
"
</a></span>
"
}
that
.
tablePagination
.
updateTablePagination
(
pageData
,
pageNum
,
result
.
pagination
);
$
(
"
#loadMsg
"
).
text
(
""
)}})},
get
:
function
(
id
){
$
(
"
#loadMsg
"
).
text
(
Label
.
loadingLabel
);
$
(
"
#tipMsg
"
).
text
(
""
);
$
.
ajax
({
url
:
latkeConfig
.
servePath
+
"
/console/page/
"
+
id
,
type
:
"
GET
"
,
cache
:
false
,
success
:
function
(
result
,
textStatus
){
$
(
"
#tipMsg
"
).
text
(
result
.
msg
);
if
(
!
result
.
sc
){
$
(
"
#loadMsg
"
).
text
(
""
);
return
}
admin
.
pageList
.
id
=
id
;
$
(
"
#pageTitle
"
).
val
(
result
.
page
.
pageTitle
);
$
(
"
#pagePermalink
"
).
val
(
result
.
page
.
pagePermalink
);
$
(
"
#pageTarget
"
).
val
(
result
.
page
.
pageOpenTarget
);
$
(
"
#pageIcon
"
).
val
(
result
.
page
.
pageIcon
);
if
(
result
.
page
.
pageType
===
"
page
"
){
$
(
$
(
"
.fn-type
"
).
get
(
1
)).
click
()}
else
{
$
(
$
(
"
.fn-type
"
).
get
(
0
)).
click
()}
$
(
"
#pageCommentable
"
).
prop
(
"
checked
"
,
result
.
page
.
pageCommentable
);
if
(
admin
.
pageList
.
currentEditorType
!==
result
.
page
.
pageEditorType
){
admin
.
editors
.
pageEditor
.
remove
();
admin
.
pageList
.
currentEditorType
=
result
.
page
.
pageEditorType
;
admin
.
editors
.
pageEditor
.
init
(
result
.
page
.
pageEditorType
)}
admin
.
editors
.
pageEditor
.
setContent
(
result
.
page
.
pageContent
);
$
(
"
#loadMsg
"
).
text
(
""
)}})},
del
:
function
(
id
,
title
){
var
isDelete
=
confirm
(
Label
.
confirmRemoveLabel
+
Label
.
navLabel
+
'
"
'
+
Util
.
htmlDecode
(
title
)
+
'
"?
'
);
if
(
isDelete
){
$
(
"
#loadMsg
"
).
text
(
Label
.
loadingLabel
);
$
(
"
#tipMsg
"
).
text
(
""
);
$
.
ajax
({
url
:
latkeConfig
.
servePath
+
"
/console/page/
"
+
id
,
type
:
"
DELETE
"
,
cache
:
false
,
success
:
function
(
result
,
textStatus
){
$
(
"
#tipMsg
"
).
text
(
result
.
msg
);
if
(
!
result
.
sc
){
$
(
"
#loadMsg
"
).
text
(
""
);
return
}
var
pageNum
=
admin
.
pageList
.
pageInfo
.
currentPage
;
if
(
admin
.
pageList
.
pageInfo
.
currentCount
===
1
&&
admin
.
pageList
.
pageInfo
.
pageCount
!==
1
&&
admin
.
pageList
.
pageInfo
.
currentPage
===
admin
.
pageList
.
pageInfo
.
pageCount
){
admin
.
pageList
.
pageInfo
.
pageCount
--
;
pageNum
=
admin
.
pageList
.
pageInfo
.
pageCount
}
var
hashList
=
window
.
location
.
hash
.
split
(
"
/
"
);
if
(
pageNum
==
hashList
[
hashList
.
length
-
1
]){
admin
.
pageList
.
getList
(
pageNum
)}
else
{
admin
.
setHashByPage
(
pageNum
)}
$
(
"
#loadMsg
"
).
text
(
""
)}})}},
add
:
function
(){
if
(
this
.
validate
()){
$
(
"
#loadMsg
"
).
text
(
Label
.
loadingLabel
);
$
(
"
#tipMsg
"
).
text
(
""
);
var
pageContent
=
admin
.
editors
.
pageEditor
.
getContent
();
var
pagePermalink
=
$
(
"
#pagePermalink
"
).
val
().
replace
(
/
(
^
\s
*
)
|
(\s
*$
)
/g
,
""
);
if
(
admin
.
pageList
.
type
===
"
link
"
){
pagePermalink
=
Util
.
proessURL
(
pagePermalink
)}
var
requestJSONObject
=
{
page
:{
pageTitle
:
$
(
"
#pageTitle
"
).
val
(),
pageContent
:
pageContent
,
pagePermalink
:
pagePermalink
,
pageCommentable
:
$
(
"
#pageCommentable
"
).
prop
(
"
checked
"
),
pageType
:
admin
.
pageList
.
type
,
pageOpenTarget
:
$
(
"
#pageTarget
"
).
val
(),
pageIcon
:
$
(
"
#pageIcon
"
).
val
()}};
$
.
ajax
({
url
:
latkeConfig
.
servePath
+
"
/console/page/
"
,
type
:
"
POST
"
,
cache
:
false
,
data
:
JSON
.
stringify
(
requestJSONObject
),
success
:
function
(
result
,
textStatus
){
$
(
"
#tipMsg
"
).
text
(
result
.
msg
);
if
(
!
result
.
sc
){
$
(
"
#loadMsg
"
).
text
(
""
);
return
}
admin
.
pageList
.
id
=
""
;
$
(
"
#pagePermalink
"
).
val
(
""
);
$
(
"
#pageTitle
"
).
val
(
""
);
$
(
"
#pageIcon
"
).
val
(
""
);
$
(
"
#pageCommentable
"
).
prop
(
"
cheked
"
,
false
);
$
(
"
#pageTarget
"
).
val
(
"
_self
"
);
$
(
$
(
"
.fn-type
"
).
get
(
0
)).
click
();
admin
.
editors
.
pageEditor
.
setContent
(
""
);
if
(
admin
.
pageList
.
pageInfo
.
currentCount
===
Label
.
PAGE_SIZE
&&
admin
.
pageList
.
pageInfo
.
currentPage
===
admin
.
pageList
.
pageInfo
.
pageCount
){
admin
.
pageList
.
pageInfo
.
pageCount
++
}
var
hashList
=
window
.
location
.
hash
.
split
(
"
/
"
);
if
(
admin
.
pageList
.
pageInfo
.
pageCount
==
hashList
[
hashList
.
length
-
1
]){
admin
.
pageList
.
getList
(
admin
.
pageList
.
pageInfo
.
pageCount
)}
else
{
admin
.
setHashByPage
(
admin
.
pageList
.
pageInfo
.
pageCount
)}
$
(
"
#loadMsg
"
).
text
(
""
)}})}},
update
:
function
(){
if
(
this
.
validate
()){
$
(
"
#loadMsg
"
).
text
(
Label
.
loadingLabel
);
$
(
"
#tipMsg
"
).
text
(
""
);
var
pageContent
=
admin
.
editors
.
pageEditor
.
getContent
();
var
pagePermalink
=
$
(
"
#pagePermalink
"
).
val
().
replace
(
/
(
^
\s
*
)
|
(\s
*$
)
/g
,
""
);
if
(
admin
.
pageList
.
type
===
"
link
"
){
pagePermalink
=
Util
.
proessURL
(
pagePermalink
)}
var
requestJSONObject
=
{
page
:{
pageTitle
:
$
(
"
#pageTitle
"
).
val
(),
oId
:
this
.
id
,
pageContent
:
pageContent
,
pagePermalink
:
pagePermalink
,
pageCommentable
:
$
(
"
#pageCommentable
"
).
prop
(
"
checked
"
),
pageType
:
admin
.
pageList
.
type
,
pageOpenTarget
:
$
(
"
#pageTarget
"
).
val
(),
pageEditorType
:
admin
.
pageList
.
currentEditorType
,
pageIcon
:
$
(
"
#pageIcon
"
).
val
()}};
$
.
ajax
({
url
:
latkeConfig
.
servePath
+
"
/console/page/
"
,
type
:
"
PUT
"
,
cache
:
false
,
data
:
JSON
.
stringify
(
requestJSONObject
),
success
:
function
(
result
,
textStatus
){
$
(
"
#tipMsg
"
).
text
(
result
.
msg
);
if
(
!
result
.
sc
){
$
(
"
#loadMsg
"
).
text
(
""
);
return
}
admin
.
pageList
.
id
=
""
;
admin
.
pageList
.
getList
(
admin
.
pageList
.
pageInfo
.
currentPage
);
$
(
"
#pageTitle
"
).
val
(
""
);
$
(
"
#pageIcon
"
).
val
(
""
);
$
(
"
#pagePermalink
"
).
val
(
""
);
$
(
"
#pageCommentable
"
).
prop
(
"
cheked
"
,
false
);
$
(
"
#pageTarget
"
).
val
(
"
_self
"
);
$
(
$
(
"
.fn-type
"
).
get
(
0
)).
click
();
admin
.
editors
.
pageEditor
.
setContent
(
""
);
$
(
"
#loadMsg
"
).
text
(
""
)}})}},
validate
:
function
(){
if
(
$
(
"
#pageTitle
"
).
val
().
replace
(
/
\s
/g
,
""
)
===
""
){
$
(
"
#tipMsg
"
).
text
(
Label
.
titleEmptyLabel
);
$
(
"
#pageTitle
"
).
focus
()}
else
{
if
(
admin
.
pageList
.
type
===
"
link
"
&&
$
(
"
#pagePermalink
"
).
val
().
replace
(
/
\s
/g
,
""
)
===
""
){
$
(
"
#tipMsg
"
).
text
(
Label
.
linkEmptyLabel
)}
else
{
return
true
}}
return
false
},
submit
:
function
(){
if
(
this
.
id
!==
""
){
this
.
update
()}
else
{
this
.
add
()}
if
(
admin
.
pageList
.
currentEditorType
!==
Label
.
editorType
){
admin
.
editors
.
pageEditor
.
remove
();
admin
.
pageList
.
currentEditorType
=
Label
.
editorType
;
admin
.
editors
.
pageEditor
.
init
(
Label
.
editorType
)}},
changeOrder
:
function
(
id
,
order
,
status
){
$
(
"
#loadMsg
"
).
text
(
Label
.
loadingLabel
);
$
(
"
#tipMsg
"
).
text
(
""
);
var
requestJSONObject
=
{
oId
:
id
.
toString
(),
direction
:
status
};
$
.
ajax
({
url
:
latkeConfig
.
servePath
+
"
/console/page/order/
"
,
type
:
"
PUT
"
,
cache
:
false
,
data
:
JSON
.
stringify
(
requestJSONObject
),
success
:
function
(
result
,
textStatus
){
$
(
"
#tipMsg
"
).
text
(
result
.
msg
);
admin
.
pageList
.
getList
(
admin
.
pageList
.
pageInfo
.
currentPage
);
$
(
"
#loadMsg
"
).
text
(
""
)}})}};
admin
.
register
[
"
page-list
"
]
=
{
obj
:
admin
.
pageList
,
init
:
admin
.
pageList
.
init
,
refresh
:
admin
.
pageList
.
getList
};
admin
.
others
=
{
init
:
function
(){
$
(
"
#tabOthers
"
).
tabs
();
$
.
ajax
({
url
:
latkeConfig
.
servePath
+
"
/console/reply/notification/template
"
,
type
:
"
GET
"
,
cache
:
false
,
success
:
function
(
result
,
textStatus
){
$
(
"
#tipMsg
"
).
text
(
result
.
msg
);
if
(
!
result
.
sc
){
$
(
"
#loadMsg
"
).
text
(
""
);
return
}
$
(
"
#replayEmailTemplateTitle
"
).
val
(
result
.
replyNotificationTemplate
.
subject
);
$
(
"
#replayEmailTemplateBody
"
).
val
(
result
.
replyNotificationTemplate
.
body
);
$
(
"
#loadMsg
"
).
text
(
""
)}})},
removeUnusedTags
:
function
(){
$
(
"
#tipMsg
"
).
text
(
""
);
$
.
ajax
({
url
:
latkeConfig
.
servePath
+
"
/console/tag/unused
"
,
type
:
"
DELETE
"
,
cache
:
false
,
success
:
function
(
result
,
textStatus
){
$
(
"
#tipMsg
"
).
text
(
result
.
msg
)}})},
exportSQL
:
function
(){
$
(
"
#tipMsg
"
).
text
(
""
);
$
.
ajax
({
url
:
latkeConfig
.
servePath
+
"
/console/export/sql
"
,
type
:
"
GET
"
,
cache
:
false
,
success
:
function
(
result
,
textStatus
){
if
(
!
result
.
sc
){
window
.
location
=
latkeConfig
.
servePath
+
"
/console/export/sql
"
}
else
{
$
(
"
#tipMsg
"
).
text
(
result
.
msg
)}}})},
exportJSON
:
function
(){
$
(
"
#tipMsg
"
).
text
(
""
);
$
.
ajax
({
url
:
latkeConfig
.
servePath
+
"
/console/export/json
"
,
type
:
"
GET
"
,
cache
:
false
,
success
:
function
(
result
,
textStatus
){
if
(
!
result
.
sc
){
window
.
location
=
latkeConfig
.
servePath
+
"
/console/export/json
"
}
else
{
$
(
"
#tipMsg
"
).
text
(
result
.
msg
)}}})},
exportHexo
:
function
(){
$
(
"
#tipMsg
"
).
text
(
""
);
$
.
ajax
({
url
:
latkeConfig
.
servePath
+
"
/console/export/hexo
"
,
type
:
"
GET
"
,
cache
:
false
,
success
:
function
(
result
,
textStatus
){
if
(
!
result
.
sc
){
window
.
location
=
latkeConfig
.
servePath
+
"
/console/export/hexo
"
}
else
{
$
(
"
#tipMsg
"
).
text
(
result
.
msg
)}}})},
getUnusedTags
:
function
(){
$
.
ajax
({
url
:
latkeConfig
.
servePath
+
"
/console/tag/unused
"
,
type
:
"
GET
"
,
cache
:
false
,
success
:
function
(
result
,
textStatus
){
$
(
"
#tipMsg
"
).
text
(
result
.
msg
);
if
(
!
result
.
sc
){
$
(
"
#loadMsg
"
).
text
(
""
);
return
}
var
unusedTags
=
result
.
unusedTags
;
if
(
0
===
unusedTags
.
length
){
return
}}})},
update
:
function
(){
$
(
"
#loadMsg
"
).
text
(
Label
.
loadingLabel
);
$
(
"
#tipMsg
"
).
text
(
""
);
var
requestJSONObject
=
{
replyNotificationTemplate
:{
subject
:
$
(
"
#replayEmailTemplateTitle
"
).
val
(),
body
:
$
(
"
#replayEmailTemplateBody
"
).
val
()}};
$
.
ajax
({
url
:
latkeConfig
.
servePath
+
"
/console/reply/notification/template
"
,
type
:
"
PUT
"
,
cache
:
false
,
data
:
JSON
.
stringify
(
requestJSONObject
),
success
:
function
(
result
,
textStatus
){
$
(
"
#tipMsg
"
).
text
(
result
.
msg
);
$
(
"
#loadMsg
"
).
text
(
""
)}})}};
admin
.
register
.
others
=
{
obj
:
admin
.
others
,
init
:
admin
.
others
.
init
,
refresh
:
function
(){
admin
.
clearTip
()}};
admin
.
linkList
=
{
tablePagination
:
new
TablePaginate
(
"
link
"
),
pageInfo
:{
currentCount
:
1
,
pageCount
:
1
,
currentPage
:
1
},
id
:
""
,
init
:
function
(
page
){
this
.
tablePagination
.
buildTable
([{
text
:
""
,
index
:
"
linkOrder
"
,
width
:
60
},{
style
:
"
padding-left: 12px;
"
,
text
:
Label
.
linkTitleLabel
,
index
:
"
linkTitle
"
,
width
:
230
},{
style
:
"
padding-left: 12px;
"
,
text
:
Label
.
urlLabel
,
index
:
"
linkAddress
"
,
minWidth
:
180
},{
style
:
"
padding-left: 12px;
"
,
text
:
Label
.
linkDescriptionLabel
,
index
:
"
linkDescription
"
,
width
:
360
}]);
this
.
tablePagination
.
initPagination
();
this
.
getList
(
page
);
$
(
"
#updateLink
"
).
dialog
({
title
:
$
(
"
#updateLink
"
).
data
(
"
title
"
),
width
:
700
,
height
:
290
,
modal
:
true
,
hideFooter
:
true
})},
getList
:
function
(
pageNum
){
$
(
"
#loadMsg
"
).
text
(
Label
.
loadingLabel
);
if
(
pageNum
===
0
){
pageNum
=
1
}
this
.
pageInfo
.
currentPage
=
pageNum
;
var
that
=
this
;
$
.
ajax
({
url
:
latkeConfig
.
servePath
+
"
/console/links/
"
+
pageNum
+
"
/
"
+
Label
.
PAGE_SIZE
+
"
/
"
+
Label
.
WINDOW_SIZE
,
type
:
"
GET
"
,
cache
:
false
,
success
:
function
(
result
,
textStatus
){
$
(
"
#tipMsg
"
).
text
(
result
.
msg
);
if
(
!
result
.
sc
){
$
(
"
#loadMsg
"
).
text
(
""
);
return
}
var
links
=
result
.
links
;
var
linkData
=
[];
admin
.
linkList
.
pageInfo
.
currentCount
=
links
.
length
;
admin
.
linkList
.
pageInfo
.
pageCount
=
result
.
pagination
.
paginationPageCount
===
0
?
1
:
result
.
pagination
.
paginationPageCount
;
for
(
var
i
=
0
;
i
<
links
.
length
;
i
++
){
linkData
[
i
]
=
{};
if
(
i
===
0
){
if
(
links
.
length
===
1
){
linkData
[
i
].
linkOrder
=
""
}
else
{
linkData
[
i
].
linkOrder
=
'
<div class="table-center" style="width:14px"> <span onclick="admin.linkList.changeOrder(
'
+
links
[
i
].
oId
+
"
,
"
+
i
+
'
,
\'
down
\'
);" class="icon-move-down"></span> </div>
'
}}
else
{
if
(
i
===
links
.
length
-
1
){
linkData
[
i
].
linkOrder
=
'
<div class="table-center" style="width:14px"> <span onclick="admin.linkList.changeOrder(
'
+
links
[
i
].
oId
+
"
,
"
+
i
+
'
,
\'
up
\'
);" class="icon-move-up"></span> </div>
'
}
else
{
linkData
[
i
].
linkOrder
=
'
<div class="table-center" style="width:38px"> <span onclick="admin.linkList.changeOrder(
'
+
links
[
i
].
oId
+
"
,
"
+
i
+
'
,
\'
up
\'
);" class="icon-move-up"></span> <span onclick="admin.linkList.changeOrder(
'
+
links
[
i
].
oId
+
"
,
"
+
i
+
'
,
\'
down
\'
);" class="icon-move-down"></span> </div>
'
}}
linkData
[
i
].
linkTitle
=
links
[
i
].
linkTitle
;
linkData
[
i
].
linkAddress
=
"
<a target='_blank' class='no-underline' href='
"
+
links
[
i
].
linkAddress
+
"
'>
"
+
links
[
i
].
linkAddress
+
"
</a>
"
;
linkData
[
i
].
linkDescription
=
links
[
i
].
linkDescription
;
linkData
[
i
].
expendRow
=
"
<span><a href='
"
+
links
[
i
].
linkAddress
+
"
' target='_blank'>
"
+
Label
.
viewLabel
+
"
</a> <a href='javascript:void(0)' onclick=
\"
admin.linkList.get('
"
+
links
[
i
].
oId
+
"
')
\"
>
"
+
Label
.
updateLabel
+
"
</a> <a href='javascript:void(0)' onclick=
\"
admin.linkList.del('
"
+
links
[
i
].
oId
+
"
', '
"
+
encodeURIComponent
(
links
[
i
].
linkTitle
)
+
"
')
\"
>
"
+
Label
.
removeLabel
+
"
</a></span>
"
}
that
.
tablePagination
.
updateTablePagination
(
linkData
,
pageNum
,
result
.
pagination
);
$
(
"
#loadMsg
"
).
text
(
""
)}})},
add
:
function
(){
if
(
this
.
validate
()){
$
(
"
#loadMsg
"
).
text
(
Label
.
loadingLabel
);
$
(
"
#tipMsg
"
).
text
(
""
);
var
requestJSONObject
=
{
link
:{
linkTitle
:
$
(
"
#linkTitle
"
).
val
(),
linkAddress
:
$
(
"
#linkAddress
"
).
val
(),
linkDescription
:
$
(
"
#linkDescription
"
).
val
()}};
$
.
ajax
({
url
:
latkeConfig
.
servePath
+
"
/console/link/
"
,
type
:
"
POST
"
,
cache
:
false
,
data
:
JSON
.
stringify
(
requestJSONObject
),
success
:
function
(
result
,
textStatus
){
$
(
"
#tipMsg
"
).
text
(
result
.
msg
);
if
(
!
result
.
sc
){
$
(
"
#loadMsg
"
).
text
(
""
);
return
}
$
(
"
#linkTitle
"
).
val
(
""
);
$
(
"
#linkAddress
"
).
val
(
""
);
$
(
"
#linkDescription
"
).
val
(
""
);
if
(
admin
.
linkList
.
pageInfo
.
currentCount
===
Label
.
PAGE_SIZE
&&
admin
.
linkList
.
pageInfo
.
currentPage
===
admin
.
linkList
.
pageInfo
.
pageCount
){
admin
.
linkList
.
pageInfo
.
pageCount
++
}
var
hashList
=
window
.
location
.
hash
.
split
(
"
/
"
);
if
(
admin
.
linkList
.
pageInfo
.
pageCount
!==
parseInt
(
hashList
[
hashList
.
length
-
1
])){
admin
.
setHashByPage
(
admin
.
linkList
.
pageInfo
.
pageCount
)}
admin
.
linkList
.
getList
(
admin
.
linkList
.
pageInfo
.
pageCount
);
$
(
"
#loadMsg
"
).
text
(
""
)}})}},
get
:
function
(
id
){
$
(
"
#loadMsg
"
).
text
(
Label
.
loadingLabel
);
$
(
"
#updateLink
"
).
dialog
(
"
open
"
);
$
.
ajax
({
url
:
latkeConfig
.
servePath
+
"
/console/link/
"
+
id
,
type
:
"
GET
"
,
cache
:
false
,
success
:
function
(
result
,
textStatus
){
$
(
"
#tipMsg
"
).
text
(
result
.
msg
);
if
(
!
result
.
sc
){
$
(
"
#loadMsg
"
).
text
(
""
);
return
}
admin
.
linkList
.
id
=
id
;
$
(
"
#linkTitleUpdate
"
).
val
(
result
.
link
.
linkTitle
);
$
(
"
#linkAddressUpdate
"
).
val
(
result
.
link
.
linkAddress
);
$
(
"
#linkDescriptionUpdate
"
).
val
(
result
.
link
.
linkDescription
);
$
(
"
#loadMsg
"
).
text
(
""
)}})},
update
:
function
(){
if
(
this
.
validate
(
"
Update
"
)){
$
(
"
#loadMsg
"
).
text
(
Label
.
loadingLabel
);
$
(
"
#tipMsg
"
).
text
(
""
);
var
requestJSONObject
=
{
link
:{
linkTitle
:
$
(
"
#linkTitleUpdate
"
).
val
(),
oId
:
this
.
id
,
linkAddress
:
$
(
"
#linkAddressUpdate
"
).
val
(),
linkDescription
:
$
(
"
#linkDescriptionUpdate
"
).
val
()}};
$
.
ajax
({
url
:
latkeConfig
.
servePath
+
"
/console/link/
"
,
type
:
"
PUT
"
,
cache
:
false
,
data
:
JSON
.
stringify
(
requestJSONObject
),
success
:
function
(
result
,
textStatus
){
$
(
"
#updateLink
"
).
dialog
(
"
close
"
);
$
(
"
#tipMsg
"
).
text
(
result
.
msg
);
if
(
!
result
.
sc
){
$
(
"
#loadMsg
"
).
text
(
""
);
return
}
admin
.
linkList
.
getList
(
admin
.
linkList
.
pageInfo
.
currentPage
);
$
(
"
#loadMsg
"
).
text
(
""
)}})}},
del
:
function
(
id
,
title
){
var
isDelete
=
confirm
(
Label
.
confirmRemoveLabel
+
Label
.
permalinkLabel
+
'
"
'
+
Util
.
htmlDecode
(
title
)
+
'
"?
'
);
if
(
isDelete
){
$
(
"
#loadMsg
"
).
text
(
Label
.
loadingLabel
);
$
(
"
#tipMsg
"
).
text
(
""
);
$
.
ajax
({
url
:
latkeConfig
.
servePath
+
"
/console/link/
"
+
id
,
type
:
"
DELETE
"
,
cache
:
false
,
success
:
function
(
result
,
textStatus
){
$
(
"
#tipMsg
"
).
text
(
result
.
msg
);
if
(
!
result
.
sc
){
$
(
"
#loadMsg
"
).
text
(
""
);
return
}
var
pageNum
=
admin
.
linkList
.
pageInfo
.
currentPage
;
if
(
admin
.
linkList
.
pageInfo
.
currentCount
===
1
&&
admin
.
linkList
.
pageInfo
.
pageCount
!==
1
&&
admin
.
linkList
.
pageInfo
.
currentPage
===
admin
.
linkList
.
pageInfo
.
pageCount
){
admin
.
linkList
.
pageInfo
.
pageCount
--
;
pageNum
=
admin
.
linkList
.
pageInfo
.
pageCount
}
var
hashList
=
window
.
location
.
hash
.
split
(
"
/
"
);
if
(
pageNum
!==
parseInt
(
hashList
[
hashList
.
length
-
1
])){
admin
.
setHashByPage
(
pageNum
)}
admin
.
linkList
.
getList
(
pageNum
);
$
(
"
#loadMsg
"
).
text
(
""
)}})}},
validate
:
function
(
status
){
if
(
!
status
){
status
=
""
}
if
(
$
(
"
#linkTitle
"
+
status
).
val
().
replace
(
/
\s
/g
,
""
)
===
""
){
$
(
"
#tipMsg
"
).
text
(
Label
.
titleEmptyLabel
);
$
(
"
#linkTitle
"
+
status
).
focus
().
val
(
""
)}
else
{
if
(
$
(
"
#linkAddress
"
+
status
).
val
().
replace
(
/
\s
/g
,
""
)
===
""
){
$
(
"
#tipMsg
"
).
text
(
Label
.
addressEmptyLabel
);
$
(
"
#linkAddress
"
+
status
).
focus
().
val
(
""
)}
else
{
if
(
!
/^
\w
+:
\/\/
/
.
test
(
$
(
"
#linkAddress
"
+
status
).
val
())){
$
(
"
#tipMsg
"
).
text
(
Label
.
addressInvalidLabel
);
$
(
"
#linkAddress
"
+
status
).
focus
().
val
(
""
)}
else
{
return
true
}}}
return
false
},
changeOrder
:
function
(
id
,
order
,
status
){
$
(
"
#loadMsg
"
).
text
(
Label
.
loadingLabel
);
$
(
"
#tipMsg
"
).
text
(
""
);
var
requestJSONObject
=
{
oId
:
id
.
toString
(),
direction
:
status
};
$
.
ajax
({
url
:
latkeConfig
.
servePath
+
"
/console/link/order/
"
,
type
:
"
PUT
"
,
cache
:
false
,
data
:
JSON
.
stringify
(
requestJSONObject
),
success
:
function
(
result
,
textStatus
){
$
(
"
#tipMsg
"
).
text
(
result
.
msg
);
admin
.
linkList
.
getList
(
admin
.
linkList
.
pageInfo
.
currentPage
);
$
(
"
#loadMsg
"
).
text
(
""
)}})}};
admin
.
register
[
"
link-list
"
]
=
{
obj
:
admin
.
linkList
,
init
:
admin
.
linkList
.
init
,
refresh
:
admin
.
linkList
.
getList
};
admin
.
preference
=
{
locale
:
""
,
editorType
:
""
,
init
:
function
(){
$
(
"
#tabPreference
"
).
tabs
();
$
.
ajax
({
url
:
latkeConfig
.
servePath
+
"
/console/preference/
"
,
type
:
"
GET
"
,
cache
:
false
,
success
:
function
(
result
,
textStatus
){
$
(
"
#tipMsg
"
).
text
(
result
.
msg
);
if
(
!
result
.
sc
){
$
(
"
#loadMsg
"
).
text
(
""
);
return
}
var
preference
=
result
.
preference
;
$
(
"
#metaKeywords
"
).
val
(
preference
.
metaKeywords
);
$
(
"
#metaDescription
"
).
val
(
preference
.
metaDescription
);
$
(
"
#blogTitle
"
).
val
(
preference
.
blogTitle
);
$
(
"
#blogSubtitle
"
).
val
(
preference
.
blogSubtitle
);
$
(
"
#mostCommentArticleDisplayCount
"
).
val
(
preference
.
mostCommentArticleDisplayCount
);
$
(
"
#mostViewArticleDisplayCount
"
).
val
(
preference
.
mostViewArticleDisplayCount
);
$
(
"
#recentCommentDisplayCount
"
).
val
(
preference
.
recentCommentDisplayCount
);
$
(
"
#mostUsedTagDisplayCount
"
).
val
(
preference
.
mostUsedTagDisplayCount
);
$
(
"
#articleListDisplayCount
"
).
val
(
preference
.
articleListDisplayCount
);
$
(
"
#articleListPaginationWindowSize
"
).
val
(
preference
.
articleListPaginationWindowSize
);
$
(
"
#localeString
"
).
val
(
preference
.
localeString
);
$
(
"
#timeZoneId
"
).
val
(
preference
.
timeZoneId
);
$
(
"
#noticeBoard
"
).
val
(
preference
.
noticeBoard
);
$
(
"
#footerContent
"
).
val
(
preference
.
footerContent
);
$
(
"
#htmlHead
"
).
val
(
preference
.
htmlHead
);
$
(
"
#externalRelevantArticlesDisplayCount
"
).
val
(
preference
.
externalRelevantArticlesDisplayCount
);
$
(
"
#relevantArticlesDisplayCount
"
).
val
(
preference
.
relevantArticlesDisplayCount
);
$
(
"
#randomArticlesDisplayCount
"
).
val
(
preference
.
randomArticlesDisplayCount
);
$
(
"
#keyOfSolo
"
).
val
(
preference
.
keyOfSolo
);
$
(
"
#customVars
"
).
val
(
preference
.
customVars
);
"
true
"
===
preference
.
enableArticleUpdateHint
?
$
(
"
#enableArticleUpdateHint
"
).
attr
(
"
checked
"
,
"
checked
"
):
$
(
"
#enableArticleUpdateHint
"
).
removeAttr
(
"
checked
"
);
"
true
"
===
preference
.
allowVisitDraftViaPermalink
?
$
(
"
#allowVisitDraftViaPermalink
"
).
attr
(
"
checked
"
,
"
checked
"
):
$
(
"
allowVisitDraftViaPermalink
"
).
removeAttr
(
"
checked
"
);
"
true
"
===
preference
.
allowRegister
?
$
(
"
#allowRegister
"
).
attr
(
"
checked
"
,
"
checked
"
):
$
(
"
#allowRegister
"
).
removeAttr
(
"
checked
"
);
"
true
"
===
preference
.
commentable
?
$
(
"
#commentable
"
).
attr
(
"
checked
"
,
"
checked
"
):
$
(
"
commentable
"
).
removeAttr
(
"
checked
"
);
admin
.
preference
.
locale
=
preference
.
localeString
;
admin
.
preference
.
editorType
=
preference
.
editorType
;
$
(
"
#skinMain
"
).
data
(
"
skinDirName
"
,
preference
.
skinDirName
);
var
skins
=
eval
(
"
(
"
+
preference
.
skins
+
"
)
"
);
var
skinsHTML
=
""
;
for
(
var
i
=
0
;
i
<
skins
.
length
;
i
++
){
var
selectedClass
=
""
;
if
(
skins
[
i
].
skinName
===
preference
.
skinName
&&
skins
[
i
].
skinDirName
===
preference
.
skinDirName
){
selectedClass
+=
"
selected
"
}
skinsHTML
+=
"
<div title='
"
+
skins
[
i
].
skinDirName
+
"
' class='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>
"
);
$
(
"
.skinItem
"
).
click
(
function
(){
$
(
"
.skinItem
"
).
removeClass
(
"
selected
"
);
$
(
this
).
addClass
(
"
selected
"
);
$
(
"
#skinMain
"
).
data
(
"
skinDirName
"
,
this
.
title
)});
var
signs
=
eval
(
"
(
"
+
preference
.
signs
+
"
)
"
);
for
(
var
j
=
1
;
j
<
signs
.
length
;
j
++
){
$
(
"
#preferenceSign
"
+
j
).
val
(
signs
[
j
].
signHTML
)}
$
(
"
#articleListDisplay
"
).
val
(
preference
.
articleListStyle
);
$
(
"
#editorType
"
).
val
(
preference
.
editorType
);
$
(
"
#feedOutputMode
"
).
val
(
preference
.
feedOutputMode
);
$
(
"
#feedOutputCnt
"
).
val
(
preference
.
feedOutputCnt
);
$
(
"
#loadMsg
"
).
text
(
""
)}});
$
.
ajax
({
url
:
latkeConfig
.
servePath
+
"
/console/preference/oss
"
,
type
:
"
GET
"
,
cache
:
false
,
success
:
function
(
result
){
if
(
!
result
.
sc
){
$
(
"
#tipMsg
"
).
text
(
result
.
msg
);
$
(
"
#loadMsg
"
).
text
(
""
);
return
}
$
(
"
input[name=ossServer][value=
"
+
result
.
oss
.
ossServer
+
"
]
"
)[
0
].
checked
=
true
;
$
(
"
#ossAccessKey
"
).
val
(
result
.
oss
.
ossAccessKey
);
$
(
"
#ossSecretKey
"
).
val
(
result
.
oss
.
ossSecretKey
);
$
(
"
#ossDomain
"
).
val
(
result
.
oss
.
ossDomain
);
$
(
"
#ossBucket
"
).
val
(
result
.
oss
.
ossBucket
)}})},
validate
:
function
(){
if
(
!
/^
\d
+$/
.
test
(
$
(
"
#mostUsedTagDisplayCount
"
).
val
())){
$
(
"
#tipMsg
"
).
text
(
"
[
"
+
Label
.
paramSettingsLabel
+
"
-
"
+
Label
.
indexTagDisplayCntLabel
+
"
]
"
+
Label
.
nonNegativeIntegerOnlyLabel
);
$
(
"
#mostUsedTagDisplayCount
"
).
focus
();
return
false
}
else
{
if
(
!
/^
\d
+$/
.
test
(
$
(
"
#recentCommentDisplayCount
"
).
val
())){
$
(
"
#tipMsg
"
).
text
(
"
[
"
+
Label
.
paramSettingsLabel
+
"
-
"
+
Label
.
indexRecentCommentDisplayCntLabel
+
"
]
"
+
Label
.
nonNegativeIntegerOnlyLabel
);
$
(
"
#recentCommentDisplayCount
"
).
focus
();
return
false
}
else
{
if
(
!
/^
\d
+$/
.
test
(
$
(
"
#mostCommentArticleDisplayCount
"
).
val
())){
$
(
"
#tipMsg
"
).
text
(
"
[
"
+
Label
.
paramSettingsLabel
+
"
-
"
+
Label
.
indexMostCommentArticleDisplayCntLabel
+
"
]
"
+
Label
.
nonNegativeIntegerOnlyLabel
);
$
(
"
#mostCommentArticleDisplayCount
"
).
focus
();
return
false
}
else
{
if
(
!
/^
\d
+$/
.
test
(
$
(
"
#mostViewArticleDisplayCount
"
).
val
())){
$
(
"
#tipMsg
"
).
text
(
"
[
"
+
Label
.
paramSettingsLabel
+
"
-
"
+
Label
.
indexMostViewArticleDisplayCntLabel
+
"
]
"
+
Label
.
nonNegativeIntegerOnlyLabel
);
$
(
"
#mostViewArticleDisplayCount
"
).
focus
();
return
false
}
else
{
if
(
!
/^
\d
+$/
.
test
(
$
(
"
#articleListDisplayCount
"
).
val
())){
$
(
"
#tipMsg
"
).
text
(
"
[
"
+
Label
.
paramSettingsLabel
+
"
-
"
+
Label
.
pageSizeLabel
+
"
]
"
+
Label
.
nonNegativeIntegerOnlyLabel
);
$
(
"
#articleListDisplayCount
"
).
focus
();
return
false
}
else
{
if
(
!
/^
\d
+$/
.
test
(
$
(
"
#articleListPaginationWindowSize
"
).
val
())){
$
(
"
#tipMsg
"
).
text
(
"
[
"
+
Label
.
paramSettingsLabel
+
"
-
"
+
Label
.
windowSizeLabel
+
"
]
"
+
Label
.
nonNegativeIntegerOnlyLabel
);
$
(
"
#articleListPaginationWindowSize
"
).
focus
();
return
false
}
else
{
if
(
!
/^
\d
+$/
.
test
(
$
(
"
#randomArticlesDisplayCount
"
).
val
())){
$
(
"
#tipMsg
"
).
text
(
"
[
"
+
Label
.
paramSettingsLabel
+
"
-
"
+
Label
.
randomArticlesDisplayCntLabel
+
"
]
"
+
Label
.
nonNegativeIntegerOnlyLabel
);
$
(
"
#randomArticlesDisplayCount
"
).
focus
();
return
false
}
else
{
if
(
!
/^
\d
+$/
.
test
(
$
(
"
#relevantArticlesDisplayCount
"
).
val
())){
$
(
"
#tipMsg
"
).
text
(
"
[
"
+
Label
.
paramSettingsLabel
+
"
-
"
+
Label
.
relevantArticlesDisplayCntLabel
+
"
]
"
+
Label
.
nonNegativeIntegerOnlyLabel
);
$
(
"
#relevantArticlesDisplayCount
"
).
focus
();
return
false
}
else
{
if
(
!
/^
\d
+$/
.
test
(
$
(
"
#externalRelevantArticlesDisplayCount
"
).
val
())){
$
(
"
#tipMsg
"
).
text
(
"
[
"
+
Label
.
paramSettingsLabel
+
"
-
"
+
Label
.
externalRelevantArticlesDisplayCntLabel
+
"
]
"
+
Label
.
nonNegativeIntegerOnlyLabel
);
$
(
"
#externalRelevantArticlesDisplayCount
"
).
focus
();
return
false
}}}}}}}}}
return
true
},
update
:
function
(){
if
(
!
admin
.
preference
.
validate
()){
return
}
$
(
"
#tipMsg
"
).
text
(
""
);
$
(
"
#loadMsg
"
).
text
(
Label
.
loadingLabel
);
var
signs
=
[{
oId
:
0
,
signHTML
:
""
},{
oId
:
1
,
signHTML
:
$
(
"
#preferenceSign1
"
).
val
()},{
oId
:
2
,
signHTML
:
$
(
"
#preferenceSign2
"
).
val
()},{
oId
:
3
,
signHTML
:
$
(
"
#preferenceSign3
"
).
val
()}];
var
requestJSONObject
=
{
preference
:{
metaKeywords
:
$
(
"
#metaKeywords
"
).
val
(),
metaDescription
:
$
(
"
#metaDescription
"
).
val
(),
blogTitle
:
$
(
"
#blogTitle
"
).
val
(),
blogSubtitle
:
$
(
"
#blogSubtitle
"
).
val
(),
mostCommentArticleDisplayCount
:
$
(
"
#mostCommentArticleDisplayCount
"
).
val
(),
mostViewArticleDisplayCount
:
$
(
"
#mostViewArticleDisplayCount
"
).
val
(),
recentCommentDisplayCount
:
$
(
"
#recentCommentDisplayCount
"
).
val
(),
mostUsedTagDisplayCount
:
$
(
"
#mostUsedTagDisplayCount
"
).
val
(),
articleListDisplayCount
:
$
(
"
#articleListDisplayCount
"
).
val
(),
articleListPaginationWindowSize
:
$
(
"
#articleListPaginationWindowSize
"
).
val
(),
skinDirName
:
$
(
"
#skinMain
"
).
data
(
"
skinDirName
"
),
localeString
:
$
(
"
#localeString
"
).
val
(),
timeZoneId
:
$
(
"
#timeZoneId
"
).
val
(),
noticeBoard
:
$
(
"
#noticeBoard
"
).
val
(),
footerContent
:
$
(
"
#footerContent
"
).
val
(),
htmlHead
:
$
(
"
#htmlHead
"
).
val
(),
externalRelevantArticlesDisplayCount
:
$
(
"
#externalRelevantArticlesDisplayCount
"
).
val
(),
relevantArticlesDisplayCount
:
$
(
"
#relevantArticlesDisplayCount
"
).
val
(),
randomArticlesDisplayCount
:
$
(
"
#randomArticlesDisplayCount
"
).
val
(),
enableArticleUpdateHint
:
$
(
"
#enableArticleUpdateHint
"
).
prop
(
"
checked
"
),
signs
:
signs
,
keyOfSolo
:
$
(
"
#keyOfSolo
"
).
val
(),
allowVisitDraftViaPermalink
:
$
(
"
#allowVisitDraftViaPermalink
"
).
prop
(
"
checked
"
),
articleListStyle
:
$
(
"
#articleListDisplay
"
).
val
(),
editorType
:
$
(
"
#editorType
"
).
val
(),
feedOutputMode
:
$
(
"
#feedOutputMode
"
).
val
(),
feedOutputCnt
:
$
(
"
#feedOutputCnt
"
).
val
(),
commentable
:
$
(
"
#commentable
"
).
prop
(
"
checked
"
),
allowRegister
:
$
(
"
#allowRegister
"
).
prop
(
"
checked
"
),
customVars
:
$
(
"
#customVars
"
).
val
()}};
$
.
ajax
({
url
:
latkeConfig
.
servePath
+
"
/console/preference/
"
,
type
:
"
PUT
"
,
cache
:
false
,
data
:
JSON
.
stringify
(
requestJSONObject
),
success
:
function
(
result
,
textStatus
){
$
(
"
#tipMsg
"
).
text
(
result
.
msg
);
if
(
!
result
.
sc
){
$
(
"
#loadMsg
"
).
text
(
""
);
return
}
if
(
$
(
"
#localeString
"
).
val
()
!==
admin
.
preference
.
locale
||
$
(
"
#editorType
"
).
val
()
!==
admin
.
preference
.
editorType
){
window
.
location
.
reload
()}
for
(
var
i
=
1
;
i
<
signs
.
length
;
i
++
){
if
(
$
(
"
#articleSign
"
+
signs
[
i
].
oId
).
length
===
1
){
$
(
"
#articleSign
"
+
signs
[
i
].
oId
).
tip
(
"
option
"
,
"
content
"
,
signs
[
i
].
signHTML
===
""
?
Label
.
signIsNullLabel
:
signs
[
i
].
signHTML
.
replace
(
/
\n
/g
,
""
).
replace
(
/<script.*<
\/
script>/ig
,
""
))}}
$
(
"
#loadMsg
"
).
text
(
""
)}})},
updateOss
:
function
(){
$
(
"
#tipMsg
"
).
text
(
""
);
$
(
"
#loadMsg
"
).
text
(
Label
.
loadingLabel
);
var
requestJSONObject
=
{
ossServer
:
$
(
"
input[name=ossServer]:checked
"
).
val
(),
ossAccessKey
:
$
(
"
#ossAccessKey
"
).
val
(),
ossSecretKey
:
$
(
"
#ossSecretKey
"
).
val
(),
ossDomain
:
$
(
"
#ossDomain
"
).
val
(),
ossBucket
:
$
(
"
#ossBucket
"
).
val
()};
$
.
ajax
({
url
:
latkeConfig
.
servePath
+
"
/console/preference/oss
"
,
type
:
"
PUT
"
,
cache
:
false
,
data
:
JSON
.
stringify
(
requestJSONObject
),
success
:
function
(
result
){
$
(
"
#tipMsg
"
).
html
(
result
.
msg
);
$
(
"
#loadMsg
"
).
text
(
""
)}})},
ossServerChange
:
function
(){
var
ossServer
=
$
(
"
input[name=ossServer]:checked
"
).
val
();
$
.
ajax
({
url
:
latkeConfig
.
servePath
+
"
/console/preference/oss?ossServer=
"
+
ossServer
,
type
:
"
GET
"
,
cache
:
false
,
success
:
function
(
result
){
if
(
!
result
.
sc
){
$
(
"
#loadMsg
"
).
text
(
""
);
$
(
"
#tipMsg
"
).
text
(
result
.
msg
);
return
}
$
(
"
#ossAccessKey
"
).
val
(
result
.
oss
.
ossAccessKey
);
$
(
"
#ossSecretKey
"
).
val
(
result
.
oss
.
ossSecretKey
);
$
(
"
#ossDomain
"
).
val
(
result
.
oss
.
ossDomain
);
$
(
"
#ossBucket
"
).
val
(
result
.
oss
.
ossBucket
)}})}};
admin
.
register
.
preference
=
{
obj
:
admin
.
preference
,
init
:
admin
.
preference
.
init
,
refresh
:
function
(){
admin
.
clearTip
()}};
admin
.
pluginList
=
{
tablePagination
:
new
TablePaginate
(
"
plugin
"
),
pageInfo
:{
currentCount
:
1
,
pageCount
:
1
,
currentPage
:
1
},
init
:
function
(
page
){
this
.
tablePagination
.
buildTable
([{
style
:
"
padding-left: 12px;
"
,
text
:
Label
.
pluginNameLabel
,
index
:
"
name
"
,
width
:
230
},{
style
:
"
padding-left: 12px;
"
,
text
:
Label
.
statusLabel
,
index
:
"
status
"
,
minWidth
:
80
},{
style
:
"
padding-left: 12px;
"
,
text
:
Label
.
authorLabel
,
index
:
"
author
"
,
width
:
200
},{
style
:
"
padding-left: 12px;
"
,
text
:
Label
.
versionLabel
,
index
:
"
version
"
,
width
:
120
}]);
this
.
tablePagination
.
initPagination
();
$
(
"
#pluginSetting
"
).
dialog
({
width
:
700
,
height
:
180
,
modal
:
true
,
hideFooter
:
true
});
this
.
getList
(
page
)},
getList
:
function
(
pageNum
){
$
(
"
#loadMsg
"
).
text
(
Label
.
loadingLabel
);
$
(
"
#tipMsg
"
).
text
(
""
);
var
that
=
this
;
$
.
ajax
({
url
:
latkeConfig
.
servePath
+
"
/console/plugins/
"
+
pageNum
+
"
/
"
+
Label
.
PAGE_SIZE
+
"
/
"
+
Label
.
WINDOW_SIZE
,
type
:
"
GET
"
,
cache
:
false
,
success
:
function
(
result
,
textStatus
){
$
(
"
#tipMsg
"
).
text
(
result
.
msg
);
if
(
!
result
.
sc
){
$
(
"
#loadMsg
"
).
text
(
""
);
return
}
admin
.
pluginList
.
pageInfo
.
currentPage
=
pageNum
;
var
datas
=
result
.
plugins
;
for
(
var
i
=
0
;
i
<
datas
.
length
;
i
++
){
datas
[
i
].
expendRow
=
"
<a href='javascript:void(0)' onclick=
\"
admin.pluginList.changeStatus('
"
+
datas
[
i
].
oId
+
"
', '
"
+
datas
[
i
].
status
+
"
')
\"
>
"
;
if
(
datas
[
i
].
status
===
"
ENABLED
"
){
datas
[
i
].
status
=
Label
.
enabledLabel
;
datas
[
i
].
expendRow
+=
Label
.
disableLabel
}
else
{
datas
[
i
].
status
=
Label
.
disabledLabel
;
datas
[
i
].
expendRow
+=
Label
.
enableLabel
}
datas
[
i
].
expendRow
+=
"
</a>
"
;
if
(
datas
[
i
].
setting
!=
"
{}
"
){
datas
[
i
].
expendRow
+=
"
<a href='javascript:void(0)' onclick=
\"
admin.pluginList.toSetting('
"
+
datas
[
i
].
oId
+
"
')
\"
>
"
+
Label
.
settingLabel
+
"
</a>
"
}}
that
.
tablePagination
.
updateTablePagination
(
result
.
plugins
,
pageNum
,
result
.
pagination
);
$
(
"
#loadMsg
"
).
text
(
""
)}})},
toSetting
:
function
(
pluginId
){
$
(
"
#loadMsg
"
).
text
(
Label
.
loadingLabel
);
$
(
"
#tipMsg
"
).
text
(
""
);
var
requestJSONObject
=
{
oId
:
pluginId
};
$
.
ajax
({
url
:
latkeConfig
.
servePath
+
"
/console/plugin/toSetting
"
,
type
:
"
POST
"
,
cache
:
false
,
data
:
JSON
.
stringify
(
requestJSONObject
),
success
:
function
(
result
,
textStatus
){
$
(
"
#tipMsg
"
).
text
(
result
.
msg
);
$
(
"
#pluginSetting
"
).
html
(
result
);
$
(
"
#pluginSetting
"
).
dialog
(
"
open
"
);
$
(
"
#loadMsg
"
).
text
(
""
)}})},
changeStatus
:
function
(
pluginId
,
status
){
$
(
"
#loadMsg
"
).
text
(
Label
.
loadingLabel
);
$
(
"
#tipMsg
"
).
text
(
""
);
if
(
status
===
"
ENABLED
"
){
status
=
"
DISABLED
"
}
else
{
status
=
"
ENABLED
"
}
var
requestJSONObject
=
{
oId
:
pluginId
,
status
:
status
};
$
.
ajax
({
url
:
latkeConfig
.
servePath
+
"
/console/plugin/status/
"
,
type
:
"
PUT
"
,
cache
:
false
,
data
:
JSON
.
stringify
(
requestJSONObject
),
success
:
function
(
result
,
textStatus
){
$
(
"
#tipMsg
"
).
text
(
result
.
msg
);
if
(
!
result
.
sc
){
$
(
"
#loadMsg
"
).
text
(
""
);
return
}
$
(
"
#loadMsg
"
).
text
(
""
);
window
.
location
.
reload
()}})}};
admin
.
register
[
"
plugin-list
"
]
=
{
obj
:
admin
.
pluginList
,
init
:
admin
.
pluginList
.
init
,
refresh
:
function
(){
$
(
"
#loadMsg
"
).
text
(
""
)}};
admin
.
userList
=
{
tablePagination
:
new
TablePaginate
(
"
user
"
),
pageInfo
:{
currentCount
:
1
,
pageCount
:
1
,
currentPage
:
1
},
userInfo
:{
oId
:
""
,
userRole
:
""
},
init
:
function
(
page
){
this
.
tablePagination
.
buildTable
([{
style
:
"
padding-left: 12px;
"
,
text
:
Label
.
commentNameLabel
,
index
:
"
userName
"
,
width
:
230
},{
style
:
"
padding-left: 12px;
"
,
text
:
Label
.
commentEmailLabel
,
index
:
"
userEmail
"
,
minWidth
:
180
},{
style
:
"
padding-left: 12px;
"
,
text
:
Label
.
roleLabel
,
index
:
"
isAdmin
"
,
width
:
120
}]);
this
.
tablePagination
.
initPagination
();
this
.
getList
(
page
);
$
(
"
#userUpdate
"
).
dialog
({
width
:
700
,
height
:
450
,
modal
:
true
,
hideFooter
:
true
})},
getList
:
function
(
pageNum
){
$
(
"
#loadMsg
"
).
text
(
Label
.
loadingLabel
);
$
(
"
#tipMsg
"
).
text
(
""
);
this
.
pageInfo
.
currentPage
=
pageNum
;
var
that
=
this
;
$
.
ajax
({
url
:
latkeConfig
.
servePath
+
"
/console/users/
"
+
pageNum
+
"
/
"
+
Label
.
PAGE_SIZE
+
"
/
"
+
Label
.
WINDOW_SIZE
,
type
:
"
GET
"
,
cache
:
false
,
success
:
function
(
result
,
textStatus
){
$
(
"
#tipMsg
"
).
text
(
result
.
msg
);
if
(
!
result
.
sc
){
$
(
"
#loadMsg
"
).
text
(
""
);
return
}
var
users
=
result
.
users
;
var
userData
=
[];
admin
.
userList
.
pageInfo
.
currentCount
=
users
.
length
;
admin
.
userList
.
pageInfo
.
pageCount
=
result
.
pagination
.
paginationPageCount
;
if
(
users
.
length
<
1
){
$
(
"
#tipMsg
"
).
text
(
"
No user
"
+
Label
.
reportIssueLabel
);
$
(
"
#loadMsg
"
).
text
(
""
);
return
}
for
(
var
i
=
0
;
i
<
users
.
length
;
i
++
){
userData
[
i
]
=
{};
userData
[
i
].
userName
=
users
[
i
].
userName
;
userData
[
i
].
userEmail
=
users
[
i
].
userEmail
;
if
(
"
adminRole
"
===
users
[
i
].
userRole
){
userData
[
i
].
isAdmin
=
"
"
+
Label
.
administratorLabel
;
userData
[
i
].
expendRow
=
"
<a href='javascript:void(0)' onclick=
\"
admin.userList.get('
"
+
users
[
i
].
oId
+
"
', '
"
+
users
[
i
].
userRole
+
"
')
\"
>
"
+
Label
.
updateLabel
+
"
</a>
"
}
else
{
userData
[
i
].
expendRow
=
"
<a href='javascript:void(0)' onclick=
\"
admin.userList.get('
"
+
users
[
i
].
oId
+
"
', '
"
+
users
[
i
].
userRole
+
"
')
\"
>
"
+
Label
.
updateLabel
+
"
</a> <a href='javascript:void(0)' onclick=
\"
admin.userList.del('
"
+
users
[
i
].
oId
+
"
', '
"
+
encodeURIComponent
(
users
[
i
].
userName
)
+
"
')
\"
>
"
+
Label
.
removeLabel
+
"
</a> <a href='javascript:void(0)' onclick=
\"
admin.userList.changeRole('
"
+
users
[
i
].
oId
+
"
')
\"
>
"
+
Label
.
changeRoleLabel
+
"
</a>
"
;
if
(
"
defaultRole
"
===
users
[
i
].
userRole
){
userData
[
i
].
isAdmin
=
Label
.
commonUserLabel
}
else
{
userData
[
i
].
isAdmin
=
Label
.
visitorUserLabel
}}
that
.
tablePagination
.
updateTablePagination
(
userData
,
pageNum
,
result
.
pagination
);
$
(
"
#loadMsg
"
).
text
(
""
)}}})},
add
:
function
(){
if
(
this
.
validate
()){
$
(
"
#loadMsg
"
).
text
(
Label
.
loadingLabel
);
$
(
"
#tipMsg
"
).
text
(
""
);
var
requestJSONObject
=
{
userName
:
$
(
"
#userName
"
).
val
(),
userEmail
:
$
(
"
#userEmail
"
).
val
(),
userURL
:
$
(
"
#userURL
"
).
val
(),
userPassword
:
$
(
"
#userPassword
"
).
val
(),
userAvatar
:
$
(
"
#userAvatar
"
).
val
()};
$
.
ajax
({
url
:
latkeConfig
.
servePath
+
"
/console/user/
"
,
type
:
"
POST
"
,
cache
:
false
,
data
:
JSON
.
stringify
(
requestJSONObject
),
success
:
function
(
result
,
textStatus
){
$
(
"
#tipMsg
"
).
text
(
result
.
msg
);
if
(
!
result
.
sc
){
$
(
"
#loadMsg
"
).
text
(
""
);
return
}
$
(
"
#userName
"
).
val
(
""
);
$
(
"
#userEmail
"
).
val
(
""
);
$
(
"
#userURL
"
).
val
(
""
);
$
(
"
#userPassword
"
).
val
(
""
);
$
(
"
#userAvatar
"
).
val
(
""
);
if
(
admin
.
userList
.
pageInfo
.
currentCount
===
Label
.
PAGE_SIZE
&&
admin
.
userList
.
pageInfo
.
currentPage
===
admin
.
userList
.
pageInfo
.
pageCount
){
admin
.
userList
.
pageInfo
.
pageCount
++
}
var
hashList
=
window
.
location
.
hash
.
split
(
"
/
"
);
if
(
admin
.
userList
.
pageInfo
.
pageCount
!==
parseInt
(
hashList
[
hashList
.
length
-
1
])){
admin
.
setHashByPage
(
admin
.
userList
.
pageInfo
.
pageCount
)}
admin
.
userList
.
getList
(
admin
.
userList
.
pageInfo
.
pageCount
);
$
(
"
#loadMsg
"
).
text
(
""
)}})}},
get
:
function
(
id
,
userRole
){
$
(
"
#loadMsg
"
).
text
(
Label
.
loadingLabel
);
$
(
"
#tipMsg
"
).
text
(
""
);
$
(
"
#userUpdate
"
).
dialog
(
"
open
"
);
$
.
ajax
({
url
:
latkeConfig
.
servePath
+
"
/console/user/
"
+
id
,
type
:
"
GET
"
,
cache
:
false
,
success
:
function
(
result
,
textStatus
){
$
(
"
#tipMsg
"
).
text
(
result
.
msg
);
if
(
!
result
.
sc
){
$
(
"
#loadMsg
"
).
text
(
""
);
return
}
var
$userEmailUpdate
=
$
(
"
#userEmailUpdate
"
);
$
(
"
#userNameUpdate
"
).
val
(
result
.
user
.
userName
).
data
(
"
userInfo
"
,{
oId
:
id
,
userRole
:
userRole
});
$userEmailUpdate
.
val
(
result
.
user
.
userEmail
);
$
(
"
#userURLUpdate
"
).
val
(
result
.
user
.
userURL
);
$
(
"
#userPasswordUpdate
"
).
val
(
result
.
user
.
userPassword
);
$
(
"
#userAvatarUpdate
"
).
val
(
result
.
user
.
userAvatar
);
$
(
"
#loadMsg
"
).
text
(
""
)}})},
update
:
function
(){
if
(
this
.
validate
(
"
Update
"
)){
$
(
"
#loadMsg
"
).
text
(
Label
.
loadingLabel
);
$
(
"
#tipMsg
"
).
text
(
""
);
var
userInfo
=
$
(
"
#userNameUpdate
"
).
data
(
"
userInfo
"
);
var
requestJSONObject
=
{
userName
:
$
(
"
#userNameUpdate
"
).
val
(),
oId
:
userInfo
.
oId
,
userEmail
:
$
(
"
#userEmailUpdate
"
).
val
(),
userURL
:
$
(
"
#userURLUpdate
"
).
val
(),
userRole
:
userInfo
.
userRole
,
userPassword
:
$
(
"
#userPasswordUpdate
"
).
val
(),
userAvatar
:
$
(
"
#userAvatarUpdate
"
).
val
()};
$
.
ajax
({
url
:
latkeConfig
.
servePath
+
"
/console/user/
"
,
type
:
"
PUT
"
,
cache
:
false
,
data
:
JSON
.
stringify
(
requestJSONObject
),
success
:
function
(
result
,
textStatus
){
$
(
"
#userUpdate
"
).
dialog
(
"
close
"
);
$
(
"
#tipMsg
"
).
text
(
result
.
msg
);
if
(
!
result
.
sc
){
$
(
"
#loadMsg
"
).
text
(
""
);
return
}
admin
.
userList
.
getList
(
admin
.
userList
.
pageInfo
.
currentPage
);
$
(
"
#loadMsg
"
).
text
(
""
)}})}},
del
:
function
(
id
,
userName
){
var
isDelete
=
confirm
(
Label
.
confirmRemoveLabel
+
Label
.
userLabel
+
'
"
'
+
Util
.
htmlDecode
(
userName
)
+
'
"?
'
);
if
(
isDelete
){
$
(
"
#loadMsg
"
).
text
(
Label
.
loadingLabel
);
$
(
"
#tipMsg
"
).
text
(
""
);
$
.
ajax
({
url
:
latkeConfig
.
servePath
+
"
/console/user/
"
+
id
,
type
:
"
DELETE
"
,
cache
:
false
,
success
:
function
(
result
,
textStatus
){
$
(
"
#tipMsg
"
).
text
(
result
.
msg
);
if
(
!
result
.
sc
){
$
(
"
#loadMsg
"
).
text
(
""
);
return
}
var
pageNum
=
admin
.
userList
.
pageInfo
.
currentPage
;
if
(
admin
.
userList
.
pageInfo
.
currentCount
===
1
&&
admin
.
userList
.
pageInfo
.
pageCount
!==
1
&&
admin
.
userList
.
pageInfo
.
currentPage
===
admin
.
userList
.
pageInfo
.
pageCount
){
admin
.
userList
.
pageInfo
.
pageCount
--
;
pageNum
=
admin
.
userList
.
pageInfo
.
pageCount
}
var
hashList
=
window
.
location
.
hash
.
split
(
"
/
"
);
if
(
pageNum
!==
parseInt
(
hashList
[
hashList
.
length
-
1
])){
admin
.
setHashByPage
(
pageNum
)}
admin
.
userList
.
getList
(
pageNum
);
$
(
"
#loadMsg
"
).
text
(
""
)}})}},
changeRole
:
function
(
id
){
$
(
"
#tipMsg
"
).
text
(
""
);
$
.
ajax
({
url
:
latkeConfig
.
servePath
+
"
/console/changeRole/
"
+
id
,
type
:
"
GET
"
,
cache
:
false
,
success
:
function
(
result
,
textStatus
){
$
(
"
#tipMsg
"
).
text
(
result
.
msg
);
if
(
!
result
.
sc
){
$
(
"
#loadMsg
"
).
text
(
""
);
return
}
var
pageNum
=
admin
.
userList
.
pageInfo
.
currentPage
;
if
(
admin
.
userList
.
pageInfo
.
currentCount
===
1
&&
admin
.
userList
.
pageInfo
.
pageCount
!==
1
&&
admin
.
userList
.
pageInfo
.
currentPage
===
admin
.
userList
.
pageInfo
.
pageCount
){
admin
.
userList
.
pageInfo
.
pageCount
--
;
pageNum
=
admin
.
userList
.
pageInfo
.
pageCount
}
var
hashList
=
window
.
location
.
hash
.
split
(
"
/
"
);
if
(
pageNum
!==
parseInt
(
hashList
[
hashList
.
length
-
1
])){
admin
.
setHashByPage
(
pageNum
)}
admin
.
userList
.
getList
(
pageNum
);
$
(
"
#loadMsg
"
).
text
(
""
)}})},
validate
:
function
(
status
){
if
(
!
status
){
status
=
""
}
var
userName
=
$
(
"
#userName
"
+
status
).
val
().
replace
(
/
(
^
\s
*
)
|
(\s
*$
)
/g
,
""
);
if
(
2
>
userName
.
length
||
userName
.
length
>
20
){
$
(
"
#tipMsg
"
).
text
(
Label
.
nameTooLongLabel
);
$
(
"
#userName
"
+
status
).
focus
()}
else
{
if
(
$
(
"
#userEmail
"
+
status
).
val
().
replace
(
/
\s
/g
,
""
)
===
""
){
$
(
"
#tipMsg
"
).
text
(
Label
.
mailCannotEmptyLabel
);
$
(
"
#userEmail
"
+
status
).
focus
()}
else
{
if
(
!
/^
((([
a-z
]
|
\d
|
[
!#
\$
%&'
\*\+\-\/
=
\?\^
_`{
\|
}~
]
|
[\u
00A0-
\u
D7FF
\u
F900-
\u
FDCF
\u
FDF0-
\u
FFEF
])
+
(\.([
a-z
]
|
\d
|
[
!#
\$
%&'
\*\+\-\/
=
\?\^
_`{
\|
}~
]
|
[\u
00A0-
\u
D7FF
\u
F900-
\u
FDCF
\u
FDF0-
\u
FFEF
])
+
)
*
)
|
((\x
22
)((((\x
20|
\x
09
)
*
(\x
0d
\x
0a
))?(\x
20|
\x
09
)
+
)?(([\x
01-
\x
08
\x
0b
\x
0c
\x
0e-
\x
1f
\x
7f
]
|
\x
21|
[\x
23-
\x
5b
]
|
[\x
5d-
\x
7e
]
|
[\u
00A0-
\u
D7FF
\u
F900-
\u
FDCF
\u
FDF0-
\u
FFEF
])
|
(\\([\x
01-
\x
09
\x
0b
\x
0c
\x
0d-
\x
7f
]
|
[\u
00A0-
\u
D7FF
\u
F900-
\u
FDCF
\u
FDF0-
\u
FFEF
]))))
*
(((\x
20|
\x
09
)
*
(\x
0d
\x
0a
))?(\x
20|
\x
09
)
+
)?(\x
22
)))
@
((([
a-z
]
|
\d
|
[\u
00A0-
\u
D7FF
\u
F900-
\u
FDCF
\u
FDF0-
\u
FFEF
])
|
(([
a-z
]
|
\d
|
[\u
00A0-
\u
D7FF
\u
F900-
\u
FDCF
\u
FDF0-
\u
FFEF
])([
a-z
]
|
\d
|-|
\.
|_|~|
[\u
00A0-
\u
D7FF
\u
F900-
\u
FDCF
\u
FDF0-
\u
FFEF
])
*
([
a-z
]
|
\d
|
[\u
00A0-
\u
D7FF
\u
F900-
\u
FDCF
\u
FDF0-
\u
FFEF
])))\.)
+
(([
a-z
]
|
[\u
00A0-
\u
D7FF
\u
F900-
\u
FDCF
\u
FDF0-
\u
FFEF
])
|
(([
a-z
]
|
[\u
00A0-
\u
D7FF
\u
F900-
\u
FDCF
\u
FDF0-
\u
FFEF
])([
a-z
]
|
\d
|-|
\.
|_|~|
[\u
00A0-
\u
D7FF
\u
F900-
\u
FDCF
\u
FDF0-
\u
FFEF
])
*
([
a-z
]
|
[\u
00A0-
\u
D7FF
\u
F900-
\u
FDCF
\u
FDF0-
\u
FFEF
])))\.?
$/i
.
test
(
$
(
"
#userEmail
"
+
status
).
val
())){
$
(
"
#tipMsg
"
).
text
(
Label
.
mailInvalidLabel
);
$
(
"
#userEmail
"
+
status
).
focus
()}
else
{
if
(
$
(
"
#userPassword
"
+
status
).
val
()
===
""
){
$
(
"
#tipMsg
"
).
text
(
Label
.
passwordEmptyLabel
);
$
(
"
#userPassword
"
+
status
).
focus
()}
else
{
return
true
}}}}
return
false
}};
admin
.
register
[
"
user-list
"
]
=
{
obj
:
admin
.
userList
,
init
:
admin
.
userList
.
init
,
refresh
:
admin
.
userList
.
getList
};
admin
.
categoryList
=
{
tablePagination
:
new
TablePaginate
(
"
category
"
),
pageInfo
:{
currentCount
:
1
,
pageCount
:
1
,
currentPage
:
1
},
init
:
function
(
page
){
this
.
tablePagination
.
buildTable
([{
text
:
""
,
index
:
"
linkOrder
"
,
width
:
60
},{
style
:
"
padding-left: 12px;
"
,
text
:
Label
.
titleLabel
,
index
:
"
categoryTitle
"
,
width
:
230
},{
style
:
"
padding-left: 12px;
"
,
text
:
"
URI
"
,
index
:
"
categoryURI
"
,
width
:
230
},{
style
:
"
padding-left: 12px;
"
,
text
:
Label
.
descriptionLabel
,
index
:
"
categoryDesc
"
,
minWidth
:
180
}]);
this
.
tablePagination
.
initPagination
();
this
.
getList
(
page
);
$
(
"
#categoryUpdate
"
).
dialog
({
title
:
$
(
"
#categoryUpdate
"
).
data
(
"
title
"
),
width
:
700
,
height
:
358
,
modal
:
true
,
hideFooter
:
true
});
$
.
ajax
({
url
:
latkeConfig
.
servePath
+
"
/console/tags
"
,
type
:
"
GET
"
,
cache
:
false
,
success
:
function
(
result
,
textStatus
){
$
(
"
#tipMsg
"
).
text
(
result
.
msg
);
if
(
!
result
.
sc
){
$
(
"
#loadMsg
"
).
text
(
""
);
return
}
if
(
0
>=
result
.
tags
.
length
){
return
}
var
tags
=
[];
for
(
var
i
=
0
;
i
<
result
.
tags
.
length
;
i
++
){
tags
.
push
(
result
.
tags
[
i
].
tagTitle
)}
$
(
"
#categoryTags
"
).
completed
({
height
:
160
,
buttonText
:
Label
.
selectLabel
,
data
:
tags
});
$
(
"
#loadMsg
"
).
text
(
""
)}})},
getList
:
function
(
pageNum
){
$
(
"
#loadMsg
"
).
text
(
Label
.
loadingLabel
);
$
(
"
#tipMsg
"
).
text
(
""
);
this
.
pageInfo
.
currentPage
=
pageNum
;
var
that
=
this
;
$
.
ajax
({
url
:
latkeConfig
.
servePath
+
"
/console/categories/
"
+
pageNum
+
"
/
"
+
Label
.
PAGE_SIZE
+
"
/
"
+
Label
.
WINDOW_SIZE
,
type
:
"
GET
"
,
cache
:
false
,
success
:
function
(
result
,
textStatus
){
$
(
"
#tipMsg
"
).
text
(
result
.
msg
);
if
(
!
result
.
sc
){
$
(
"
#loadMsg
"
).
text
(
""
);
return
}
var
categories
=
result
.
categories
;
var
categoryData
=
[];
admin
.
categoryList
.
pageInfo
.
currentCount
=
categories
.
length
;
admin
.
categoryList
.
pageInfo
.
pageCount
=
result
.
pagination
.
paginationPageCount
===
0
?
1
:
result
.
pagination
.
paginationPageCount
;
for
(
var
i
=
0
;
i
<
categories
.
length
;
i
++
){
categoryData
[
i
]
=
{};
if
(
i
===
0
){
if
(
categories
.
length
===
1
){
categoryData
[
i
].
linkOrder
=
""
}
else
{
categoryData
[
i
].
linkOrder
=
'
<div class="table-center" style="width:14px"> <span onclick="admin.categoryList.changeOrder(
'
+
categories
[
i
].
oId
+
"
,
"
+
i
+
'
,
\'
down
\'
);" class="icon-move-down"></span> </div>
'
}}
else
{
if
(
i
===
categories
.
length
-
1
){
categoryData
[
i
].
linkOrder
=
'
<div class="table-center" style="width:14px"> <span onclick="admin.categoryList.changeOrder(
'
+
categories
[
i
].
oId
+
"
,
"
+
i
+
'
,
\'
up
\'
);" class="icon-move-up"></span> </div>
'
}
else
{
categoryData
[
i
].
linkOrder
=
'
<div class="table-center" style="width:38px"> <span onclick="admin.categoryList.changeOrder(
'
+
categories
[
i
].
oId
+
"
,
"
+
i
+
'
,
\'
up
\'
);" class="icon-move-up"></span> <span onclick="admin.categoryList.changeOrder(
'
+
categories
[
i
].
oId
+
"
,
"
+
i
+
'
,
\'
down
\'
);" class="icon-move-down"></span> </div>
'
}}
categoryData
[
i
].
categoryTitle
=
categories
[
i
].
categoryTitle
;
categoryData
[
i
].
categoryURI
=
categories
[
i
].
categoryURI
;
categoryData
[
i
].
categoryDesc
=
categories
[
i
].
categoryDescription
;
categoryData
[
i
].
expendRow
=
"
<a href='javascript:void(0)' onclick=
\"
admin.categoryList.get('
"
+
categories
[
i
].
oId
+
"
')
\"
>
"
+
Label
.
updateLabel
+
"
</a> <a href='javascript:void(0)' onclick=
\"
admin.categoryList.del('
"
+
categories
[
i
].
oId
+
"
', '
"
+
encodeURIComponent
(
categories
[
i
].
categoryTitle
)
+
"
')
\"
>
"
+
Label
.
removeLabel
+
"
</a>
"
}
that
.
tablePagination
.
updateTablePagination
(
categoryData
,
pageNum
,
result
.
pagination
);
$
(
"
#loadMsg
"
).
text
(
""
)}})},
add
:
function
(){
if
(
this
.
validate
()){
$
(
"
#loadMsg
"
).
text
(
Label
.
loadingLabel
);
$
(
"
#tipMsg
"
).
text
(
""
);
var
requestJSONObject
=
{
categoryTitle
:
$
(
"
#categoryName
"
).
val
(),
categoryTags
:
$
(
"
#categoryTags
"
).
val
(),
categoryURI
:
$
(
"
#categoryURI
"
).
val
(),
categoryDescription
:
$
(
"
#categoryDesc
"
).
val
()};
$
.
ajax
({
url
:
latkeConfig
.
servePath
+
"
/console/category/
"
,
type
:
"
POST
"
,
cache
:
false
,
data
:
JSON
.
stringify
(
requestJSONObject
),
success
:
function
(
result
,
textStatus
){
$
(
"
#tipMsg
"
).
text
(
result
.
msg
);
if
(
!
result
.
sc
){
$
(
"
#loadMsg
"
).
text
(
""
);
return
}
$
(
"
#categoryName
"
).
val
(
""
);
$
(
"
#categoryTags
"
).
val
(
""
);
$
(
"
#categoryURI
"
).
val
(
""
);
$
(
"
#categoryDesc
"
).
val
(
""
);
if
(
admin
.
categoryList
.
pageInfo
.
currentCount
===
Label
.
PAGE_SIZE
&&
admin
.
categoryList
.
pageInfo
.
currentPage
===
admin
.
categoryList
.
pageInfo
.
pageCount
){
admin
.
categoryList
.
pageInfo
.
pageCount
++
}
var
hashList
=
window
.
location
.
hash
.
split
(
"
/
"
);
if
(
admin
.
categoryList
.
pageInfo
.
pageCount
!==
parseInt
(
hashList
[
hashList
.
length
-
1
])){
admin
.
setHashByPage
(
admin
.
categoryList
.
pageInfo
.
pageCount
)}
admin
.
categoryList
.
getList
(
admin
.
categoryList
.
pageInfo
.
pageCount
);
$
(
"
#loadMsg
"
).
text
(
""
)}})}},
get
:
function
(
id
){
$
(
"
#loadMsg
"
).
text
(
Label
.
loadingLabel
);
$
(
"
#tipMsg
"
).
text
(
""
);
$
(
"
#categoryUpdate
"
).
dialog
(
"
open
"
);
$
.
ajax
({
url
:
latkeConfig
.
servePath
+
"
/console/category/
"
+
id
,
type
:
"
GET
"
,
cache
:
false
,
success
:
function
(
result
,
textStatus
){
$
(
"
#tipMsg
"
).
text
(
result
.
msg
);
if
(
!
result
.
sc
){
$
(
"
#loadMsg
"
).
text
(
""
);
return
}
$
(
"
#categoryNameUpdate
"
).
val
(
result
.
categoryTitle
).
data
(
"
oId
"
,
id
);
$
(
"
#categoryURIUpdate
"
).
val
(
result
.
categoryURI
);
$
(
"
#categoryDescUpdate
"
).
val
(
result
.
categoryDescription
);
$
(
"
#categoryTagsUpdate
"
).
val
(
result
.
categoryTags
);
$
(
"
#loadMsg
"
).
text
(
""
)}})},
update
:
function
(){
if
(
this
.
validate
(
"
Update
"
)){
$
(
"
#loadMsg
"
).
text
(
Label
.
loadingLabel
);
$
(
"
#tipMsg
"
).
text
(
""
);
var
requestJSONObject
=
{
categoryTitle
:
$
(
"
#categoryNameUpdate
"
).
val
(),
oId
:
$
(
"
#categoryNameUpdate
"
).
data
(
"
oId
"
),
categoryTags
:
$
(
"
#categoryTagsUpdate
"
).
val
(),
categoryURI
:
$
(
"
#categoryURIUpdate
"
).
val
(),
categoryDescription
:
$
(
"
#categoryDescUpdate
"
).
val
()};
$
.
ajax
({
url
:
latkeConfig
.
servePath
+
"
/console/category/
"
,
type
:
"
PUT
"
,
cache
:
false
,
data
:
JSON
.
stringify
(
requestJSONObject
),
success
:
function
(
result
,
textStatus
){
$
(
"
#categoryUpdate
"
).
dialog
(
"
close
"
);
$
(
"
#tipMsg
"
).
text
(
result
.
msg
);
if
(
!
result
.
sc
){
$
(
"
#loadMsg
"
).
text
(
""
);
return
}
admin
.
categoryList
.
getList
(
admin
.
categoryList
.
pageInfo
.
currentPage
);
$
(
"
#loadMsg
"
).
text
(
""
)}})}},
del
:
function
(
id
,
categoryName
){
var
isDelete
=
confirm
(
Label
.
confirmRemoveLabel
+
Label
.
categoryLabel
+
'
"
'
+
Util
.
htmlDecode
(
categoryName
)
+
'
"?
'
);
if
(
isDelete
){
$
(
"
#loadMsg
"
).
text
(
Label
.
loadingLabel
);
$
(
"
#tipMsg
"
).
text
(
""
);
$
.
ajax
({
url
:
latkeConfig
.
servePath
+
"
/console/category/
"
+
id
,
type
:
"
DELETE
"
,
cache
:
false
,
success
:
function
(
result
,
textStatus
){
$
(
"
#tipMsg
"
).
text
(
result
.
msg
);
if
(
!
result
.
sc
){
$
(
"
#loadMsg
"
).
text
(
""
);
return
}
var
pageNum
=
admin
.
categoryList
.
pageInfo
.
currentPage
;
if
(
admin
.
categoryList
.
pageInfo
.
currentCount
===
1
&&
admin
.
categoryList
.
pageInfo
.
pageCount
!==
1
&&
admin
.
categoryList
.
pageInfo
.
currentPage
===
admin
.
categoryList
.
pageInfo
.
pageCount
){
admin
.
categoryList
.
pageInfo
.
pageCount
--
;
pageNum
=
admin
.
categoryList
.
pageInfo
.
pageCount
}
var
hashList
=
window
.
location
.
hash
.
split
(
"
/
"
);
if
(
pageNum
!==
parseInt
(
hashList
[
hashList
.
length
-
1
])){
admin
.
setHashByPage
(
pageNum
)}
admin
.
categoryList
.
getList
(
pageNum
);
$
(
"
#loadMsg
"
).
text
(
""
)}})}},
validate
:
function
(
status
){
if
(
!
status
){
status
=
""
}
var
categoryName
=
$
(
"
#categoryName
"
+
status
).
val
().
replace
(
/
(
^
\s
*
)
|
(\s
*$
)
/g
,
""
);
if
(
2
>
categoryName
.
length
||
categoryName
.
length
>
32
){
$
(
"
#tipMsg
"
).
text
(
Label
.
categoryTooLongLabel
);
$
(
"
#categoryName
"
+
status
).
focus
()}
else
{
if
(
$
.
trim
(
$
(
"
#categoryTags
"
+
status
).
val
())
===
""
){
$
(
"
#tipMsg
"
).
text
(
Label
.
tagsEmptyLabel
);
$
(
"
#categoryTags
"
+
status
).
focus
()}
else
{
return
true
}}
return
false
},
changeOrder
:
function
(
id
,
order
,
status
){
$
(
"
#loadMsg
"
).
text
(
Label
.
loadingLabel
);
$
(
"
#tipMsg
"
).
text
(
""
);
var
requestJSONObject
=
{
oId
:
id
.
toString
(),
direction
:
status
};
$
.
ajax
({
url
:
latkeConfig
.
servePath
+
"
/console/category/order/
"
,
type
:
"
PUT
"
,
cache
:
false
,
data
:
JSON
.
stringify
(
requestJSONObject
),
success
:
function
(
result
,
textStatus
){
$
(
"
#tipMsg
"
).
text
(
result
.
msg
);
admin
.
categoryList
.
getList
(
admin
.
categoryList
.
pageInfo
.
currentPage
);
$
(
"
#loadMsg
"
).
text
(
""
)}})}};
admin
.
register
[
"
category-list
"
]
=
{
obj
:
admin
.
categoryList
,
init
:
admin
.
categoryList
.
init
,
refresh
:
admin
.
categoryList
.
getList
};
admin
.
commentList
=
{
tablePagination
:
new
TablePaginate
(
"
comment
"
),
pageInfo
:{
currentPage
:
1
},
init
:
function
(
page
){
this
.
tablePagination
.
buildTable
([{
text
:
Label
.
commentContentLabel
,
index
:
"
content
"
,
minWidth
:
174
,
style
:
"
padding-left: 12px;
"
},{
text
:
Label
.
authorLabel
,
index
:
"
title
"
,
style
:
"
padding-left: 12px;
"
},{
text
:
Label
.
dateLabel
,
index
:
"
date
"
,
width
:
60
,
style
:
"
padding-left: 12px;
"
}]);
this
.
tablePagination
.
initPagination
();
this
.
getList
(
page
)},
getList
:
function
(
pageNum
){
var
that
=
this
;
$
(
"
#loadMsg
"
).
text
(
Label
.
loadingLabel
);
$
.
ajax
({
url
:
latkeConfig
.
servePath
+
"
/console/comments/
"
+
pageNum
+
"
/
"
+
Label
.
PAGE_SIZE
+
"
/
"
+
Label
.
WINDOW_SIZE
,
type
:
"
GET
"
,
cache
:
false
,
success
:
function
(
result
,
textStatus
){
$
(
"
#tipMsg
"
).
text
(
result
.
msg
);
if
(
!
result
.
sc
){
$
(
"
#loadMsg
"
).
text
(
""
);
return
}
that
.
pageInfo
.
currentPage
=
pageNum
;
var
comments
=
result
.
comments
,
commentsData
=
[];
for
(
var
i
=
0
;
i
<
comments
.
length
;
i
++
){
var
type
=
"
Article
"
;
if
(
comments
[
i
].
type
===
"
pageComment
"
){
type
=
"
Page
"
}
commentsData
[
i
]
=
{};
commentsData
[
i
].
content
=
'
<div class="content-reset">
'
+
Util
.
replaceEmString
(
comments
[
i
].
commentContent
)
+
"
</div><span class='table-tag'> on </span><a href='
"
+
latkeConfig
.
servePath
+
comments
[
i
].
commentSharpURL
+
"
' target='_blank'>
"
+
comments
[
i
].
commentTitle
+
"
</a>
"
;
commentsData
[
i
].
expendRow
=
"
<a href='javascript:void(0)' onclick=
\"
admin.commentList.del('
"
+
comments
[
i
].
oId
+
"
', '
"
+
type
+
"
')
\"
>
"
+
Label
.
removeLabel
+
"
</a>
"
;
commentsData
[
i
].
title
=
"
<img class='small-head' src='
"
+
comments
[
i
].
commentThumbnailURL
+
"
'/>
"
;
if
(
"
http://
"
===
comments
[
i
].
commentURL
){
commentsData
[
i
].
title
+=
comments
[
i
].
commentName
}
else
{
commentsData
[
i
].
title
+=
"
<a href='
"
+
comments
[
i
].
commentURL
+
"
' target='_blank' class='no-underline'>
"
+
comments
[
i
].
commentName
+
"
</a>
"
}
commentsData
[
i
].
title
+=
"
<br/><a href='mailto:
"
+
comments
[
i
].
commentEmail
+
"
'>
"
+
comments
[
i
].
commentEmail
+
"
</a>
"
;
commentsData
[
i
].
date
=
$
.
bowknot
.
getDate
(
comments
[
i
].
commentTime
)}
that
.
tablePagination
.
updateTablePagination
(
commentsData
,
pageNum
,
result
.
pagination
);
$
(
"
#loadMsg
"
).
text
(
""
)}})},
del
:
function
(
id
,
type
){
if
(
confirm
(
Label
.
confirmRemoveLabel
+
Label
.
commentLabel
+
"
?
"
)){
$
(
"
#loadMsg
"
).
text
(
Label
.
loadingLabel
);
$
.
ajax
({
url
:
latkeConfig
.
servePath
+
"
/console/
"
+
type
.
toLowerCase
()
+
"
/comment/
"
+
id
,
type
:
"
DELETE
"
,
cache
:
false
,
success
:
function
(
result
,
textStatus
){
$
(
"
#tipMsg
"
).
text
(
result
.
msg
);
if
(
!
result
.
sc
){
$
(
"
#loadMsg
"
).
text
(
""
);
return
}
admin
.
commentList
.
getList
(
admin
.
commentList
.
pageInfo
.
currentPage
);
$
(
"
#loadMsg
"
).
text
(
""
)}})}}};
admin
.
register
[
"
comment-list
"
]
=
{
obj
:
admin
.
commentList
,
init
:
admin
.
commentList
.
init
,
refresh
:
admin
.
commentList
.
getList
};
var
plugins
=
{};
admin
.
plugin
=
{
plugins
:[],
add
:
function
(
data
){
data
.
isInit
=
false
;
data
.
hash
=
data
.
path
.
replace
(
"
/
"
,
"
#
"
)
+
"
/
"
+
data
.
id
;
this
.
plugins
.
push
(
data
);
var
pathList
=
this
.
_analysePath
(
data
.
path
);
if
(
data
.
index
&&
pathList
.
length
<
2
){
this
.
_addNew
(
data
,
pathList
)}},
setCurByHash
:
function
(
tags
){
var
pluginList
=
this
.
plugins
;
for
(
var
i
=
0
;
i
<
pluginList
.
length
;
i
++
){
var
data
=
pluginList
[
i
];
var
pathList
=
this
.
_analysePath
(
data
.
path
),
isCurrentPlugin
=
false
;
if
(
data
.
index
&&
window
.
location
.
hash
.
indexOf
(
data
.
hash
)
>-
1
){
isCurrentPlugin
=
true
}
else
{
if
(
data
.
path
.
replace
(
"
/
"
,
"
#
"
)
===
window
.
location
.
hash
||
(
window
.
location
.
hash
===
"
#main
"
&&
data
.
path
.
indexOf
(
"
/main/panel
"
)
>-
1
)){
isCurrentPlugin
=
true
}}
if
(
isCurrentPlugin
){
if
(
data
.
isInit
){
if
(
plugins
[
data
.
id
].
refresh
){
plugins
[
data
.
id
].
refresh
(
tags
.
page
)}}
else
{
if
(
!
data
.
index
){
this
.
_addToExist
(
data
,
pathList
)}
else
{
if
(
pathList
.
length
===
2
){
this
.
_addNew
(
data
,
pathList
)}}
plugins
[
data
.
id
].
init
(
tags
.
page
);
data
.
isInit
=
true
}}}},
_analysePath
:
function
(
path
){
var
paths
=
path
.
split
(
"
/
"
);
paths
.
splice
(
0
,
1
);
return
paths
},
_addNew
:
function
(
data
,
pathList
){
if
(
pathList
.
length
===
2
){
data
.
target
=
$
(
"
#tabPreference li
"
).
get
(
data
.
index
-
1
);
$
(
"
#tabPreference
"
).
tabs
(
"
add
"
,
data
);
return
}
else
{
if
(
pathList
[
0
]
===
""
){
data
.
target
=
$
(
"
#tabs>ul>li
"
).
get
(
data
.
index
-
1
)}
else
{
if
(
pathList
[
0
]
===
"
article
"
){
data
.
target
=
$
(
"
#tabArticleMgt>li
"
).
get
(
data
.
index
-
1
)}
else
{
if
(
pathList
[
0
]
===
"
tools
"
){
admin
.
tools
.
push
(
"
#
"
+
data
.
id
);
data
.
target
=
$
(
"
#tabTools>li
"
).
get
(
data
.
index
-
1
)}}}}
if
(
!
data
.
target
){
alert
(
"
data.index is error!
"
)}
$
(
"
#tabs
"
).
tabs
(
"
add
"
,
data
)},
_addToExist
:
function
(
data
,
pathList
){
switch
(
pathList
[
0
]){
case
"
main
"
:
$
(
"
#mainPanel
"
+
pathList
[
1
].
charAt
(
5
)).
append
(
data
.
content
);
break
;
case
"
tools
"
:
case
"
article
"
:
if
(
pathList
.
length
===
2
){
$
(
"
#tabsPanel_
"
+
pathList
[
1
]).
append
(
data
.
content
)}
else
{
$
(
"
#tabPreferencePanel_
"
+
pathList
[
2
]).
append
(
data
.
content
)}
break
;
case
"
comment-list
"
:
$
(
"
#tabsPanel_comment-list
"
).
append
(
data
.
content
);
break
}}};
admin
.
main
=
{};
admin
.
register
.
main
=
{
obj
:
admin
.
main
,
init
:
function
(){
admin
.
clearTip
()},
refresh
:
function
(){
admin
.
clearTip
()}};
admin
.
about
=
{
init
:
function
(){
$
.
ajax
({
url
:
"
https://rhythm.b3log.org/version/solo/latest/
"
+
Label
.
version
,
type
:
"
GET
"
,
cache
:
false
,
dataType
:
"
jsonp
"
,
success
:
function
(
data
,
textStatus
){
var
version
=
data
.
soloVersion
;
if
(
version
===
Label
.
version
){
$
(
"
#aboutLatest
"
).
text
(
Label
.
upToDateLabel
)}
else
{
$
(
"
#aboutLatest
"
).
html
(
Label
.
outOfDateLabel
+
"
<a href='
"
+
data
.
soloDownload
+
"
'>
"
+
version
+
"
</a>
"
)}},
complete
:
function
(
XHR
,
TS
){
admin
.
clearTip
()}})}};
admin
.
register
.
about
=
{
obj
:
admin
.
about
,
init
:
admin
.
about
.
init
,
refresh
:
function
(){
admin
.
clearTip
()}};
\ No newline at end of file
src/main/webapp/js/admin/preference.js
View file @
15c7520d
...
@@ -290,14 +290,14 @@ admin.preference = {
...
@@ -290,14 +290,14 @@ admin.preference = {
});
});
},
},
//服务商radio change事件
//
服务商radio change事件
ossServerChange
:
function
()
{
ossServerChange
:
function
()
{
var
ossServer
=
$
(
'
input[name=ossServer]:checked
'
).
val
()
var
ossServer
=
$
(
'
input[name=ossServer]:checked
'
).
val
()
$
.
ajax
({
$
.
ajax
({
url
:
latkeConfig
.
servePath
+
"
/console/preference/oss?ossServer=
"
+
ossServer
,
url
:
latkeConfig
.
servePath
+
"
/console/preference/oss?ossServer=
"
+
ossServer
,
type
:
"
GET
"
,
type
:
"
GET
"
,
cache
:
false
,
cache
:
false
,
success
:
function
(
result
,
)
{
success
:
function
(
result
)
{
if
(
!
result
.
sc
)
{
if
(
!
result
.
sc
)
{
$
(
"
#loadMsg
"
).
text
(
""
);
$
(
"
#loadMsg
"
).
text
(
""
);
$
(
"
#tipMsg
"
).
text
(
result
.
msg
);
$
(
"
#tipMsg
"
).
text
(
result
.
msg
);
...
...
src/main/webapp/js/common.min.js
View file @
15c7520d
/*
* Solo - A small and beautiful blogging system written in Java.
* Copyright (c) 2010-2018, b3log.org & hacpai.com
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* 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
Util
=
{
htmlDecode
:
function
(
code
){
var
div
=
document
.
createElement
(
"
div
"
);
div
.
innerHTML
=
decodeURIComponent
(
code
);
return
div
.
innerText
},
isArticlePage
:
function
(
href
){
var
isArticle
=
true
;
if
(
href
.
indexOf
(
latkeConfig
.
servePath
+
"
/tags/
"
)
>-
1
){
isArticle
=
false
}
if
(
href
.
indexOf
(
latkeConfig
.
servePath
+
"
/tags.html
"
)
>-
1
){
isArticle
=
false
}
if
(
href
.
indexOf
(
latkeConfig
.
servePath
+
"
/category/
"
)
>-
1
){
isArticle
=
false
}
if
(
href
.
indexOf
(
latkeConfig
.
servePath
+
"
/archives.html
"
)
>-
1
){
isArticle
=
false
}
if
(
href
.
indexOf
(
latkeConfig
.
servePath
+
"
/archives/
"
)
>-
1
){
isArticle
=
false
}
if
(
href
.
indexOf
(
latkeConfig
.
servePath
+
"
/links.html
"
)
>-
1
){
isArticle
=
false
}
if
(
href
===
latkeConfig
.
servePath
){
isArticle
=
false
}
if
(
/^
[
0-9
]
*$/
.
test
(
href
.
replace
(
latkeConfig
.
servePath
+
"
/
"
,
""
))){
isArticle
=
false
}
return
isArticle
},
initPjax
:
function
(
cb
){
if
(
$
(
"
#pjax
"
).
length
===
1
){
$
.
pjax
({
selector
:
"
a
"
,
container
:
"
#pjax
"
,
show
:
""
,
cache
:
false
,
storage
:
true
,
titleSuffix
:
""
,
filter
:
function
(
href
){
if
(
href
===
latkeConfig
.
servePath
+
"
/rss.xml
"
||
href
.
indexOf
(
latkeConfig
.
servePath
+
"
/admin-index.do
"
)
>-
1
){
return
true
}
if
(
href
.
indexOf
(
latkeConfig
.
servePath
)
>-
1
){
return
false
}
return
true
},
callback
:
function
(){
cb
&&
cb
()}});
NProgress
.
configure
({
showSpinner
:
false
});
$
(
"
#pjax
"
).
bind
(
"
pjax.start
"
,
function
(){
NProgress
.
start
()});
$
(
"
#pjax
"
).
bind
(
"
pjax.end
"
,
function
(){
window
.
scroll
(
window
.
scrollX
,
0
);
NProgress
.
done
()})}},
parseMarkdown
:
function
(
className
){
var
hasMathJax
=
false
;
var
hasFlow
=
false
;
var
className
=
className
||
"
article-body
"
;
$
(
"
.
"
+
className
).
each
(
function
(){
$
(
this
).
find
(
"
p
"
).
each
(
function
(){
if
(
$
(
this
).
text
().
split
(
"
$
"
).
length
>
2
||
(
$
(
this
).
text
().
split
(
"
\\
(
"
).
length
>
1
&&
$
(
this
).
text
().
split
(
"
\\
)
"
).
length
>
1
)){
hasMathJax
=
true
;
return
false
}});
if
(
$
(
this
).
find
(
"
code.lang-flow, code.language-flow
"
).
length
>
0
){
hasFlow
=
true
;
return
false
}});
if
(
hasMathJax
){
var
initMathJax
=
function
(){
MathJax
.
Hub
.
Config
({
tex2jax
:{
inlineMath
:[[
"
$
"
,
"
$
"
],[
"
\\
(
"
,
"
\\
)
"
]],
displayMath
:[[
"
$$
"
,
"
$$
"
]],
processEscapes
:
true
,
processEnvironments
:
true
,
skipTags
:[
"
pre
"
,
"
code
"
,
"
script
"
]}});
MathJax
.
Hub
.
Typeset
()};
if
(
typeof
MathJax
!==
"
undefined
"
){
initMathJax
()}
else
{
$
.
ajax
({
method
:
"
GET
"
,
url
:
"
https://cdn.staticfile.org/MathJax/MathJax-2.6-latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML&_=1473258780393
"
,
dataType
:
"
script
"
,
cache
:
true
}).
done
(
function
(){
initMathJax
()})}}
if
(
hasFlow
){
var
initFlow
=
function
(){
$
(
"
.
"
+
className
+
"
code.lang-flow, .
"
+
className
+
"
code.language-flow
"
).
each
(
function
(
index
){
var
$it
=
$
(
this
);
var
id
=
"
symFlow
"
+
(
new
Date
()).
getTime
()
+
index
;
$it
.
hide
();
var
diagram
=
flowchart
.
parse
(
$
.
trim
(
$it
.
text
()));
$it
.
parent
().
after
(
'
<div style="text-align: center" id="
'
+
id
+
'
"></div>
'
);
diagram
.
drawSVG
(
id
);
$it
.
parent
().
remove
();
$
(
"
#
"
+
id
).
find
(
"
svg
"
).
height
(
"
auto
"
).
width
(
"
auto
"
)})};
if
(
typeof
(
flowchart
)
!==
"
undefined
"
){
initFlow
()}
else
{
$
.
ajax
({
method
:
"
GET
"
,
url
:
latkeConfig
.
staticServePath
+
"
/js/lib/flowchart/flowchart.min.js
"
,
dataType
:
"
script
"
,
cache
:
true
}).
done
(
function
(){
initFlow
()})}}},
isLoggedIn
:
function
(){
if
((
$
(
"
#admin
"
).
length
===
1
&&
$
(
"
#admin
"
).
data
(
"
login
"
))
||
latkeConfig
.
isLoggedIn
===
"
true
"
){
return
true
}
else
{
return
false
}},
getUserName
:
function
(){
if
(
$
(
"
#adminName
"
).
length
===
1
){
return
$
(
"
#adminName
"
).
text
()}
else
{
return
latkeConfig
.
userName
}},
error
:
function
(){
$
(
"
#tipMsg
"
).
text
(
"
Error:
"
+
arguments
[
0
]
+
"
File:
"
+
arguments
[
1
]
+
"
\n
Line:
"
+
arguments
[
2
]
+
"
please report this issue on https://github.com/b3log/solo/issues/new
"
);
$
(
"
#loadMsg
"
).
text
(
""
)},
killIE
:
function
(
ieVersion
){
var
addKillPanel
=
function
(){
if
(
Cookie
.
readCookie
(
"
showKill
"
)
===
""
){
try
{
var
left
=
(
$
(
window
).
width
()
-
781
)
/
2
,
top1
=
(
$
(
window
).
height
()
-
680
)
/
2
;
var
killIEHTML
=
"
<div style='display: block; height: 100%; width: 100%; position: fixed; background-color: rgb(0, 0, 0); opacity: 0.6;filter: alpha(opacity=60); top: 0px;z-index:110'></div><iframe style='left:
"
+
left
+
"
px;z-index:120;top:
"
+
top1
+
"
px; position: fixed; border: 0px none; width: 781px; height: 680px;' src='
"
+
latkeConfig
.
servePath
+
"
/kill-browser'></iframe>
"
;
$
(
"
body
"
).
append
(
killIEHTML
)}
catch
(
e
){
var
left
=
10
,
top1
=
0
;
var
killIEHTML
=
"
<div style='display: block; height: 100%; width: 100%; position: fixed; background-color: rgb(0, 0, 0); opacity: 0.6;filter: alpha(opacity=60); top: 0px;z-index:110'></div><iframe style='left:
"
+
left
+
"
px;z-index:120;top:
"
+
top1
+
"
px; position: fixed; border: 0px none; width: 781px; height: 680px;' src='
"
+
latkeConfig
.
servePath
+
"
/kill-browser'></iframe>
"
;
document
.
body
.
innerHTML
=
document
.
body
.
innerHTML
+
killIEHTML
}}};
var
ua
=
navigator
.
userAgent
.
split
(
"
MSIE
"
)[
1
];
if
(
ua
){
if
(
!
ieVersion
){
ieVersion
=
7
}
if
(
parseFloat
(
ua
.
split
(
"
;
"
))
<=
ieVersion
){
addKillPanel
()}}},
replaceEmString
:
function
(
str
){
var
commentSplited
=
str
.
split
(
"
[em
"
);
if
(
commentSplited
.
length
===
1
){
return
str
}
str
=
commentSplited
[
0
];
for
(
var
j
=
1
;
j
<
commentSplited
.
length
;
j
++
){
var
key
=
commentSplited
[
j
].
substr
(
0
,
2
);
str
+=
"
<img width='20' src='
"
+
latkeConfig
.
staticServePath
+
"
/images/emotions/em
"
+
key
+
"
.png' alt='
"
+
Label
[
"
em
"
+
key
+
"
Label
"
]
+
"
' title='
"
+
Label
[
"
em
"
+
key
+
"
Label
"
]
+
"
'/>
"
+
commentSplited
[
j
].
substr
(
3
)}
return
str
},
proessURL
:
function
(
url
){
if
(
!
/^
\w
+:
\/\/
/
.
test
(
url
)){
url
=
"
http://
"
+
url
}
return
url
},
switchMobile
:
function
(
skin
){
Cookie
.
createCookie
(
"
btouch_switch_toggle
"
,
skin
,
365
);
setTimeout
(
function
(){
location
.
reload
()},
1250
)},
setTopBar
:
function
(){
var
$top
=
$
(
"
#top
"
);
if
(
$top
.
length
===
1
){
var
$showTop
=
$
(
"
#showTop
"
);
$showTop
.
click
(
function
(){
$top
.
slideDown
();
$showTop
.
hide
()});
$
(
"
#hideTop
"
).
click
(
function
(){
$top
.
slideUp
();
$showTop
.
show
()})}},
goTop
:
function
(){
$
(
"
html, body
"
).
animate
({
scrollTop
:
0
},
800
)},
goBottom
:
function
(
bottom
){
if
(
!
bottom
){
bottom
=
0
}
var
wHeight
=
$
(
"
body
"
).
height
()
>
$
(
document
).
height
()?
$
(
"
body
"
).
height
():
$
(
document
).
height
();
window
.
scrollTo
(
0
,
wHeight
-
$
(
window
).
height
()
-
bottom
)},
init
:
function
(){
Util
.
killIE
();
Util
.
setTopBar
();
Util
.
parseMarkdown
()},
replaceSideEm
:
function
(
comments
){
for
(
var
i
=
0
;
i
<
comments
.
length
;
i
++
){
var
$comment
=
$
(
comments
[
i
]);
$comment
.
html
(
Util
.
replaceEmString
(
$comment
.
html
()))}},
buildTags
:
function
(
id
){
id
=
id
||
"
tags
"
;
var
classes
=
[
"
tags1
"
,
"
tags2
"
,
"
tags3
"
,
"
tags4
"
,
"
tags5
"
],
bList
=
$
(
"
#
"
+
id
+
"
b
"
).
get
();
var
max
=
parseInt
(
$
(
"
#
"
+
id
+
"
b
"
).
last
().
text
());
var
distance
=
Math
.
ceil
(
max
/
classes
.
length
);
for
(
var
i
=
0
;
i
<
bList
.
length
;
i
++
){
var
num
=
parseInt
(
bList
[
i
].
innerHTML
);
for
(
var
j
=
0
;
j
<
classes
.
length
;
j
++
){
if
(
num
>
j
*
distance
&&
num
<=
(
j
+
1
)
*
distance
){
bList
[
i
].
parentNode
.
className
=
classes
[
j
];
break
}}}
$
(
"
#
"
+
id
).
html
(
$
(
"
#
"
+
id
+
"
li
"
).
get
().
sort
(
function
(
a
,
b
){
var
valA
=
$
(
a
).
find
(
"
span
"
).
text
().
toLowerCase
();
var
valB
=
$
(
b
).
find
(
"
span
"
).
text
().
toLowerCase
();
return
valA
.
localeCompare
(
valB
)}))},
toDate
:
function
(
time
,
format
){
var
dateTime
=
new
Date
(
time
);
var
o
=
{
"
M+
"
:
dateTime
.
getMonth
()
+
1
,
"
d+
"
:
dateTime
.
getDate
(),
"
H+
"
:
dateTime
.
getHours
(),
"
m+
"
:
dateTime
.
getMinutes
(),
"
s+
"
:
dateTime
.
getSeconds
(),
"
q+
"
:
Math
.
floor
((
dateTime
.
getMonth
()
+
3
)
/
3
),
S
:
dateTime
.
getMilliseconds
()};
if
(
/
(
y+
)
/
.
test
(
format
)){
format
=
format
.
replace
(
RegExp
.
$1
,(
dateTime
.
getFullYear
()
+
""
).
substr
(
4
-
RegExp
.
$1
.
length
))}
for
(
var
k
in
o
){
if
(
new
RegExp
(
"
(
"
+
k
+
"
)
"
).
test
(
format
)){
format
=
format
.
replace
(
RegExp
.
$1
,
RegExp
.
$1
.
length
==
1
?
o
[
k
]:(
"
00
"
+
o
[
k
]).
substr
((
""
+
o
[
k
]).
length
))}}
return
format
},
getWinHeight
:
function
(){
if
(
window
.
innerHeight
){
return
window
.
innerHeight
}
if
(
document
.
compatMode
===
"
CSS1Compat
"
){
return
window
.
document
.
documentElement
.
clientHeight
}
return
window
.
document
.
body
.
clientHeight
}};
if
(
!
Cookie
){
var
Cookie
=
{
readCookie
:
function
(
name
){
var
nameEQ
=
name
+
"
=
"
;
var
ca
=
document
.
cookie
.
split
(
"
;
"
);
for
(
var
i
=
0
;
i
<
ca
.
length
;
i
++
){
var
c
=
ca
[
i
];
while
(
c
.
charAt
(
0
)
==
"
"
){
c
=
c
.
substring
(
1
,
c
.
length
)}
if
(
c
.
indexOf
(
nameEQ
)
==
0
){
return
decodeURIComponent
(
c
.
substring
(
nameEQ
.
length
,
c
.
length
))}}
return
""
},
eraseCookie
:
function
(
name
){
this
.
createCookie
(
name
,
""
,
-
1
)},
createCookie
:
function
(
name
,
value
,
days
){
var
expires
=
""
;
if
(
days
){
var
date
=
new
Date
();
date
.
setTime
(
date
.
getTime
()
+
(
days
*
24
*
60
*
60
*
1000
));
expires
=
"
; expires=
"
+
date
.
toGMTString
()}
document
.
cookie
=
name
+
"
=
"
+
encodeURIComponent
(
value
)
+
expires
+
"
; path=/
"
}}};
var
Util
=
{
htmlDecode
:
function
(
code
){
var
div
=
document
.
createElement
(
"
div
"
);
div
.
innerHTML
=
decodeURIComponent
(
code
);
return
div
.
innerText
},
isArticlePage
:
function
(
href
){
var
isArticle
=
true
;
if
(
href
.
indexOf
(
latkeConfig
.
servePath
+
"
/tags/
"
)
>-
1
){
isArticle
=
false
}
if
(
href
.
indexOf
(
latkeConfig
.
servePath
+
"
/tags.html
"
)
>-
1
){
isArticle
=
false
}
if
(
href
.
indexOf
(
latkeConfig
.
servePath
+
"
/category/
"
)
>-
1
){
isArticle
=
false
}
if
(
href
.
indexOf
(
latkeConfig
.
servePath
+
"
/archives.html
"
)
>-
1
){
isArticle
=
false
}
if
(
href
.
indexOf
(
latkeConfig
.
servePath
+
"
/archives/
"
)
>-
1
){
isArticle
=
false
}
if
(
href
.
indexOf
(
latkeConfig
.
servePath
+
"
/links.html
"
)
>-
1
){
isArticle
=
false
}
if
(
href
===
latkeConfig
.
servePath
){
isArticle
=
false
}
if
(
/^
[
0-9
]
*$/
.
test
(
href
.
replace
(
latkeConfig
.
servePath
+
"
/
"
,
""
))){
isArticle
=
false
}
return
isArticle
},
initPjax
:
function
(
cb
){
if
(
$
(
"
#pjax
"
).
length
===
1
){
$
.
pjax
({
selector
:
"
a
"
,
container
:
"
#pjax
"
,
show
:
""
,
cache
:
false
,
storage
:
true
,
titleSuffix
:
""
,
filter
:
function
(
href
){
if
(
href
===
latkeConfig
.
servePath
+
"
/rss.xml
"
||
href
.
indexOf
(
latkeConfig
.
servePath
+
"
/admin-index.do
"
)
>-
1
){
return
true
}
if
(
href
.
indexOf
(
latkeConfig
.
servePath
)
>-
1
){
return
false
}
return
true
},
callback
:
function
(){
cb
&&
cb
()}});
NProgress
.
configure
({
showSpinner
:
false
});
$
(
"
#pjax
"
).
bind
(
"
pjax.start
"
,
function
(){
NProgress
.
start
()});
$
(
"
#pjax
"
).
bind
(
"
pjax.end
"
,
function
(){
window
.
scroll
(
window
.
scrollX
,
0
);
NProgress
.
done
()})}},
parseMarkdown
:
function
(
className
){
var
hasMathJax
=
false
;
var
hasFlow
=
false
;
var
className
=
className
||
"
article-body
"
;
$
(
"
.
"
+
className
).
each
(
function
(){
$
(
this
).
find
(
"
p
"
).
each
(
function
(){
if
(
$
(
this
).
text
().
split
(
"
$
"
).
length
>
2
||
(
$
(
this
).
text
().
split
(
"
\\
(
"
).
length
>
1
&&
$
(
this
).
text
().
split
(
"
\\
)
"
).
length
>
1
)){
hasMathJax
=
true
;
return
false
}});
if
(
$
(
this
).
find
(
"
code.lang-flow, code.language-flow
"
).
length
>
0
){
hasFlow
=
true
;
return
false
}});
if
(
hasMathJax
){
var
initMathJax
=
function
(){
MathJax
.
Hub
.
Config
({
tex2jax
:{
inlineMath
:[[
"
$
"
,
"
$
"
],[
"
\\
(
"
,
"
\\
)
"
]],
displayMath
:[[
"
$$
"
,
"
$$
"
]],
processEscapes
:
true
,
processEnvironments
:
true
,
skipTags
:[
"
pre
"
,
"
code
"
,
"
script
"
]}});
MathJax
.
Hub
.
Typeset
()};
if
(
typeof
MathJax
!==
"
undefined
"
){
initMathJax
()}
else
{
$
.
ajax
({
method
:
"
GET
"
,
url
:
"
https://cdn.staticfile.org/MathJax/MathJax-2.6-latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML&_=1473258780393
"
,
dataType
:
"
script
"
,
cache
:
true
}).
done
(
function
(){
initMathJax
()})}}
if
(
hasFlow
){
var
initFlow
=
function
(){
$
(
"
.
"
+
className
+
"
code.lang-flow, .
"
+
className
+
"
code.language-flow
"
).
each
(
function
(
index
){
var
$it
=
$
(
this
);
var
id
=
"
symFlow
"
+
(
new
Date
()).
getTime
()
+
index
;
$it
.
hide
();
var
diagram
=
flowchart
.
parse
(
$
.
trim
(
$it
.
text
()));
$it
.
parent
().
after
(
'
<div style="text-align: center" id="
'
+
id
+
'
"></div>
'
);
diagram
.
drawSVG
(
id
);
$it
.
parent
().
remove
();
$
(
"
#
"
+
id
).
find
(
"
svg
"
).
height
(
"
auto
"
).
width
(
"
auto
"
)})};
if
(
typeof
(
flowchart
)
!==
"
undefined
"
){
initFlow
()}
else
{
$
.
ajax
({
method
:
"
GET
"
,
url
:
latkeConfig
.
staticServePath
+
"
/js/lib/flowchart/flowchart.min.js
"
,
dataType
:
"
script
"
,
cache
:
true
}).
done
(
function
(){
initFlow
()})}}},
isLoggedIn
:
function
(){
if
((
$
(
"
#admin
"
).
length
===
1
&&
$
(
"
#admin
"
).
data
(
"
login
"
))
||
latkeConfig
.
isLoggedIn
===
"
true
"
){
return
true
}
else
{
return
false
}},
getUserName
:
function
(){
if
(
$
(
"
#adminName
"
).
length
===
1
){
return
$
(
"
#adminName
"
).
text
()}
else
{
return
latkeConfig
.
userName
}},
error
:
function
(){
$
(
"
#tipMsg
"
).
text
(
"
Error:
"
+
arguments
[
0
]
+
"
File:
"
+
arguments
[
1
]
+
"
\n
Line:
"
+
arguments
[
2
]
+
"
please report this issue on https://github.com/b3log/solo/issues/new
"
);
$
(
"
#loadMsg
"
).
text
(
""
)},
killIE
:
function
(
ieVersion
){
var
addKillPanel
=
function
(){
if
(
Cookie
.
readCookie
(
"
showKill
"
)
===
""
){
try
{
var
left
=
(
$
(
window
).
width
()
-
781
)
/
2
,
top1
=
(
$
(
window
).
height
()
-
680
)
/
2
;
var
killIEHTML
=
"
<div style='display: block; height: 100%; width: 100%; position: fixed; background-color: rgb(0, 0, 0); opacity: 0.6;filter: alpha(opacity=60); top: 0px;z-index:110'></div><iframe style='left:
"
+
left
+
"
px;z-index:120;top:
"
+
top1
+
"
px; position: fixed; border: 0px none; width: 781px; height: 680px;' src='
"
+
latkeConfig
.
servePath
+
"
/kill-browser'></iframe>
"
;
$
(
"
body
"
).
append
(
killIEHTML
)}
catch
(
e
){
var
left
=
10
,
top1
=
0
;
var
killIEHTML
=
"
<div style='display: block; height: 100%; width: 100%; position: fixed; background-color: rgb(0, 0, 0); opacity: 0.6;filter: alpha(opacity=60); top: 0px;z-index:110'></div><iframe style='left:
"
+
left
+
"
px;z-index:120;top:
"
+
top1
+
"
px; position: fixed; border: 0px none; width: 781px; height: 680px;' src='
"
+
latkeConfig
.
servePath
+
"
/kill-browser'></iframe>
"
;
document
.
body
.
innerHTML
=
document
.
body
.
innerHTML
+
killIEHTML
}}};
var
ua
=
navigator
.
userAgent
.
split
(
"
MSIE
"
)[
1
];
if
(
ua
){
if
(
!
ieVersion
){
ieVersion
=
7
}
if
(
parseFloat
(
ua
.
split
(
"
;
"
))
<=
ieVersion
){
addKillPanel
()}}},
replaceEmString
:
function
(
str
){
var
commentSplited
=
str
.
split
(
"
[em
"
);
if
(
commentSplited
.
length
===
1
){
return
str
}
str
=
commentSplited
[
0
];
for
(
var
j
=
1
;
j
<
commentSplited
.
length
;
j
++
){
var
key
=
commentSplited
[
j
].
substr
(
0
,
2
);
str
+=
"
<img width='20' src='
"
+
latkeConfig
.
staticServePath
+
"
/images/emotions/em
"
+
key
+
"
.png' alt='
"
+
Label
[
"
em
"
+
key
+
"
Label
"
]
+
"
' title='
"
+
Label
[
"
em
"
+
key
+
"
Label
"
]
+
"
'/>
"
+
commentSplited
[
j
].
substr
(
3
)}
return
str
},
proessURL
:
function
(
url
){
if
(
!
/^
\w
+:
\/\/
/
.
test
(
url
)){
url
=
"
http://
"
+
url
}
return
url
},
switchMobile
:
function
(
skin
){
Cookie
.
createCookie
(
"
btouch_switch_toggle
"
,
skin
,
365
);
setTimeout
(
function
(){
location
.
reload
()},
1250
)},
setTopBar
:
function
(){
var
$top
=
$
(
"
#top
"
);
if
(
$top
.
length
===
1
){
var
$showTop
=
$
(
"
#showTop
"
);
$showTop
.
click
(
function
(){
$top
.
slideDown
();
$showTop
.
hide
()});
$
(
"
#hideTop
"
).
click
(
function
(){
$top
.
slideUp
();
$showTop
.
show
()})}},
goTop
:
function
(){
$
(
"
html, body
"
).
animate
({
scrollTop
:
0
},
800
)},
goBottom
:
function
(
bottom
){
if
(
!
bottom
){
bottom
=
0
}
var
wHeight
=
$
(
"
body
"
).
height
()
>
$
(
document
).
height
()?
$
(
"
body
"
).
height
():
$
(
document
).
height
();
window
.
scrollTo
(
0
,
wHeight
-
$
(
window
).
height
()
-
bottom
)},
init
:
function
(){
Util
.
killIE
();
Util
.
setTopBar
();
Util
.
parseMarkdown
()},
replaceSideEm
:
function
(
comments
){
for
(
var
i
=
0
;
i
<
comments
.
length
;
i
++
){
var
$comment
=
$
(
comments
[
i
]);
$comment
.
html
(
Util
.
replaceEmString
(
$comment
.
html
()))}},
buildTags
:
function
(
id
){
id
=
id
||
"
tags
"
;
var
classes
=
[
"
tags1
"
,
"
tags2
"
,
"
tags3
"
,
"
tags4
"
,
"
tags5
"
],
bList
=
$
(
"
#
"
+
id
+
"
b
"
).
get
();
var
max
=
parseInt
(
$
(
"
#
"
+
id
+
"
b
"
).
last
().
text
());
var
distance
=
Math
.
ceil
(
max
/
classes
.
length
);
for
(
var
i
=
0
;
i
<
bList
.
length
;
i
++
){
var
num
=
parseInt
(
bList
[
i
].
innerHTML
);
for
(
var
j
=
0
;
j
<
classes
.
length
;
j
++
){
if
(
num
>
j
*
distance
&&
num
<=
(
j
+
1
)
*
distance
){
bList
[
i
].
parentNode
.
className
=
classes
[
j
];
break
}}}
$
(
"
#
"
+
id
).
html
(
$
(
"
#
"
+
id
+
"
li
"
).
get
().
sort
(
function
(
a
,
b
){
var
valA
=
$
(
a
).
find
(
"
span
"
).
text
().
toLowerCase
();
var
valB
=
$
(
b
).
find
(
"
span
"
).
text
().
toLowerCase
();
return
valA
.
localeCompare
(
valB
)}))},
toDate
:
function
(
time
,
format
){
var
dateTime
=
new
Date
(
time
);
var
o
=
{
"
M+
"
:
dateTime
.
getMonth
()
+
1
,
"
d+
"
:
dateTime
.
getDate
(),
"
H+
"
:
dateTime
.
getHours
(),
"
m+
"
:
dateTime
.
getMinutes
(),
"
s+
"
:
dateTime
.
getSeconds
(),
"
q+
"
:
Math
.
floor
((
dateTime
.
getMonth
()
+
3
)
/
3
),
S
:
dateTime
.
getMilliseconds
()};
if
(
/
(
y+
)
/
.
test
(
format
)){
format
=
format
.
replace
(
RegExp
.
$1
,(
dateTime
.
getFullYear
()
+
""
).
substr
(
4
-
RegExp
.
$1
.
length
))}
for
(
var
k
in
o
){
if
(
new
RegExp
(
"
(
"
+
k
+
"
)
"
).
test
(
format
)){
format
=
format
.
replace
(
RegExp
.
$1
,
RegExp
.
$1
.
length
==
1
?
o
[
k
]:(
"
00
"
+
o
[
k
]).
substr
((
""
+
o
[
k
]).
length
))}}
return
format
},
getWinHeight
:
function
(){
if
(
window
.
innerHeight
){
return
window
.
innerHeight
}
if
(
document
.
compatMode
===
"
CSS1Compat
"
){
return
window
.
document
.
documentElement
.
clientHeight
}
return
window
.
document
.
body
.
clientHeight
}};
if
(
!
Cookie
){
var
Cookie
=
{
readCookie
:
function
(
name
){
var
nameEQ
=
name
+
"
=
"
;
var
ca
=
document
.
cookie
.
split
(
"
;
"
);
for
(
var
i
=
0
;
i
<
ca
.
length
;
i
++
){
var
c
=
ca
[
i
];
while
(
c
.
charAt
(
0
)
==
"
"
){
c
=
c
.
substring
(
1
,
c
.
length
)}
if
(
c
.
indexOf
(
nameEQ
)
==
0
){
return
decodeURIComponent
(
c
.
substring
(
nameEQ
.
length
,
c
.
length
))}}
return
""
},
eraseCookie
:
function
(
name
){
this
.
createCookie
(
name
,
""
,
-
1
)},
createCookie
:
function
(
name
,
value
,
days
){
var
expires
=
""
;
if
(
days
){
var
date
=
new
Date
();
date
.
setTime
(
date
.
getTime
()
+
(
days
*
24
*
60
*
60
*
1000
));
expires
=
"
; expires=
"
+
date
.
toGMTString
()}
document
.
cookie
=
name
+
"
=
"
+
encodeURIComponent
(
value
)
+
expires
+
"
; path=/
"
}}};
\ No newline at end of file
src/main/webapp/js/page.min.js
View file @
15c7520d
/*
* Solo - A small and beautiful blogging system written in Java.
* Copyright (c) 2010-2018, b3log.org & hacpai.com
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* 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
Page
=
function
(
tips
){
this
.
currentCommentId
=
""
;
this
.
tips
=
tips
};
$
.
extend
(
Page
.
prototype
,{
insertEmotions
:
function
(
name
){
var
_it
=
this
;
if
(
name
===
undefined
){
name
=
""
}
$
(
"
#emotions
"
+
name
+
"
span
"
).
click
(
function
(){
var
$comment
=
$
(
"
#comment
"
+
name
);
var
endPosition
=
_it
.
_getCursorEndPosition
(
$comment
[
0
]);
var
key
=
this
.
title
+
"
"
,
textValue
=
$comment
[
0
].
value
;
textValue
=
textValue
.
substring
(
0
,
endPosition
)
+
key
+
textValue
.
substring
(
endPosition
,
textValue
.
length
);
$
(
"
#comment
"
+
name
).
val
(
textValue
);
if
(
!!
window
.
ActiveXObject
||
"
ActiveXObject
"
in
window
){
endPosition
-=
textValue
.
split
(
"
\n
"
).
length
-
1
;
var
oR
=
$comment
[
0
].
createTextRange
();
oR
.
collapse
(
true
);
oR
.
moveStart
(
"
character
"
,
endPosition
+
key
.
length
);
oR
.
select
()}
else
{
$comment
[
0
].
setSelectionRange
(
endPosition
+
key
.
length
,
endPosition
+
key
.
length
)}})},
_getCursorEndPosition
:
function
(
textarea
){
textarea
.
focus
();
if
(
textarea
.
setSelectionRange
){
return
textarea
.
selectionEnd
}
else
{
if
(
document
.
selection
){
var
i
=
0
,
oS
=
document
.
selection
.
createRange
(),
oR
=
document
.
body
.
createTextRange
();
oR
.
moveToElementText
(
textarea
);
oS
.
getBookmark
();
for
(
i
=
0
;
oR
.
compareEndPoints
(
"
StartToStart
"
,
oS
)
<
0
&&
oS
.
moveStart
(
"
character
"
,
-
1
)
!==
0
;
i
++
){
if
(
textarea
.
value
.
charAt
(
i
)
===
"
\n
"
){
i
++
}}
return
i
}}},
validateComment
:
function
(
state
){
if
(
Util
.
isLoggedIn
()){
var
commenterContent
=
$
(
"
#comment
"
+
state
).
val
().
replace
(
/
(
^
\s
*
)
|
(\s
*$
)
/g
,
""
);
if
(
2
>
commenterContent
.
length
||
commenterContent
.
length
>
500
){
$
(
"
#commentErrorTip
"
+
state
).
html
(
this
.
tips
.
commentContentCannotEmptyLabel
);
$
(
"
#comment
"
+
state
).
focus
()}
else
{
return
true
}
$
(
"
#commentErrorTip
"
+
state
).
show
();
return
false
}
var
commentName
=
$
(
"
#commentName
"
+
state
).
val
().
replace
(
/
(
^
\s
*
)
|
(\s
*$
)
/g
,
""
),
commenterContent
=
$
(
"
#comment
"
+
state
).
val
().
replace
(
/
(
^
\s
*
)
|
(\s
*$
)
/g
,
""
);
if
(
2
>
commentName
.
length
||
commentName
.
length
>
20
){
$
(
"
#commentErrorTip
"
+
state
).
html
(
this
.
tips
.
nameTooLongLabel
);
$
(
"
#commentName
"
+
state
).
focus
()}
else
{
if
(
$
(
"
#commentEmail
"
+
state
).
val
().
replace
(
/
\s
/g
,
""
)
===
""
){
$
(
"
#commentErrorTip
"
+
state
).
html
(
this
.
tips
.
mailCannotEmptyLabel
);
$
(
"
#commentEmail
"
+
state
).
focus
()}
else
{
if
(
!
/^
((([
a-z
]
|
\d
|
[
!#
\$
%&'
\*\+\-\/
=
\?\^
_`{
\|
}~
]
|
[\u
00A0-
\u
D7FF
\u
F900-
\u
FDCF
\u
FDF0-
\u
FFEF
])
+
(\.([
a-z
]
|
\d
|
[
!#
\$
%&'
\*\+\-\/
=
\?\^
_`{
\|
}~
]
|
[\u
00A0-
\u
D7FF
\u
F900-
\u
FDCF
\u
FDF0-
\u
FFEF
])
+
)
*
)
|
((\x
22
)((((\x
20|
\x
09
)
*
(\x
0d
\x
0a
))?(\x
20|
\x
09
)
+
)?(([\x
01-
\x
08
\x
0b
\x
0c
\x
0e-
\x
1f
\x
7f
]
|
\x
21|
[\x
23-
\x
5b
]
|
[\x
5d-
\x
7e
]
|
[\u
00A0-
\u
D7FF
\u
F900-
\u
FDCF
\u
FDF0-
\u
FFEF
])
|
(\\([\x
01-
\x
09
\x
0b
\x
0c
\x
0d-
\x
7f
]
|
[\u
00A0-
\u
D7FF
\u
F900-
\u
FDCF
\u
FDF0-
\u
FFEF
]))))
*
(((\x
20|
\x
09
)
*
(\x
0d
\x
0a
))?(\x
20|
\x
09
)
+
)?(\x
22
)))
@
((([
a-z
]
|
\d
|
[\u
00A0-
\u
D7FF
\u
F900-
\u
FDCF
\u
FDF0-
\u
FFEF
])
|
(([
a-z
]
|
\d
|
[\u
00A0-
\u
D7FF
\u
F900-
\u
FDCF
\u
FDF0-
\u
FFEF
])([
a-z
]
|
\d
|-|
\.
|_|~|
[\u
00A0-
\u
D7FF
\u
F900-
\u
FDCF
\u
FDF0-
\u
FFEF
])
*
([
a-z
]
|
\d
|
[\u
00A0-
\u
D7FF
\u
F900-
\u
FDCF
\u
FDF0-
\u
FFEF
])))\.)
+
(([
a-z
]
|
[\u
00A0-
\u
D7FF
\u
F900-
\u
FDCF
\u
FDF0-
\u
FFEF
])
|
(([
a-z
]
|
[\u
00A0-
\u
D7FF
\u
F900-
\u
FDCF
\u
FDF0-
\u
FFEF
])([
a-z
]
|
\d
|-|
\.
|_|~|
[\u
00A0-
\u
D7FF
\u
F900-
\u
FDCF
\u
FDF0-
\u
FFEF
])
*
([
a-z
]
|
[\u
00A0-
\u
D7FF
\u
F900-
\u
FDCF
\u
FDF0-
\u
FFEF
])))\.?
$/i
.
test
(
$
(
"
#commentEmail
"
+
state
).
val
())){
$
(
"
#commentErrorTip
"
+
state
).
html
(
this
.
tips
.
mailInvalidLabel
);
$
(
"
#commentEmail
"
+
state
).
focus
()}
else
{
if
(
2
>
commenterContent
.
length
||
commenterContent
.
length
>
500
){
$
(
"
#commentErrorTip
"
+
state
).
html
(
this
.
tips
.
commentContentCannotEmptyLabel
);
$
(
"
#comment
"
+
state
).
focus
()}
else
{
if
(
$
(
"
#commentValidate
"
+
state
).
val
().
replace
(
/
\s
/g
,
""
)
===
""
){
$
(
"
#commentErrorTip
"
+
state
).
html
(
this
.
tips
.
captchaCannotEmptyLabel
);
$
(
"
#commentValidate
"
+
state
).
focus
()}
else
{
return
true
}}}}}
$
(
"
#commentErrorTip
"
+
state
).
show
();
return
false
},
replaceCommentsEm
:
function
(
selector
){
var
$commentContents
=
$
(
selector
);
for
(
var
i
=
0
;
i
<
$commentContents
.
length
;
i
++
){
var
str
=
$commentContents
[
i
].
innerHTML
;
$commentContents
[
i
].
innerHTML
=
Util
.
replaceEmString
(
str
)}},
_initSyntaxHighlighter
:
function
(
languages
){
for
(
var
i
=
0
;
i
<
languages
.
length
;
i
++
){
switch
(
languages
[
i
]){
case
"
groovy
"
:
languages
[
i
]
=
"
groovy
"
+
latkeConfig
.
staticServePath
+
"
/js/lib/SyntaxHighlighter/scripts/shBrushGroovy.js
"
;
break
;
case
"
java
"
:
languages
[
i
]
=
"
java
"
+
latkeConfig
.
staticServePath
+
"
/js/lib/SyntaxHighlighter/scripts/shBrushJava.js
"
;
break
;
case
"
php
"
:
languages
[
i
]
=
"
php
"
+
latkeConfig
.
staticServePath
+
"
/js/lib/SyntaxHighlighter/scripts/shBrushPhp.js
"
;
break
;
case
"
scala
"
:
languages
[
i
]
=
"
scala
"
+
latkeConfig
.
staticServePath
+
"
/js/lib/SyntaxHighlighter/scripts/shBrushScala.js
"
;
break
;
case
"
sql
"
:
languages
[
i
]
=
"
sql
"
+
latkeConfig
.
staticServePath
+
"
/js/lib/SyntaxHighlighter/scripts/shBrushSql.js
"
;
break
;
case
"
applescript
"
:
languages
[
i
]
=
"
applescript
"
+
latkeConfig
.
staticServePath
+
"
/js/lib/SyntaxHighlighter/scripts/shBrushAppleScript.js
"
;
break
;
case
"
as3
"
:
case
"
actionscript3
"
:
languages
[
i
]
=
"
actionscript3 as3
"
+
latkeConfig
.
staticServePath
+
"
/js/lib/SyntaxHighlighter/scripts/shBrushAS3.js
"
;
break
;
case
"
bash
"
:
case
"
shell
"
:
languages
[
i
]
=
"
bash shell
"
+
latkeConfig
.
staticServePath
+
"
/js/lib/SyntaxHighlighter/scripts/shBrushBash.js
"
;
break
;
case
"
coldfusion
"
:
case
"
cf
"
:
languages
[
i
]
=
"
coldfusion cf
"
+
latkeConfig
.
staticServePath
+
"
/js/lib/SyntaxHighlighter/scripts/shBrushColdFusion.js
"
;
break
;
case
"
c#
"
:
case
"
c-sharp
"
:
case
"
csharp
"
:
languages
[
i
]
=
"
c# c-sharp csharp
"
+
latkeConfig
.
staticServePath
+
"
/js/lib/SyntaxHighlighter/scripts/shBrushCSharp.js
"
;
break
;
case
"
cpp
"
:
case
"
c
"
:
languages
[
i
]
=
"
cpp c
"
+
latkeConfig
.
staticServePath
+
"
/js/lib/SyntaxHighlighter/scripts/shBrushCpp.js
"
;
break
;
case
"
css
"
:
languages
[
i
]
=
"
css
"
+
latkeConfig
.
staticServePath
+
"
/js/lib/SyntaxHighlighter/scripts/shBrushCss.js
"
;
break
;
case
"
delphi
"
:
case
"
pascal
"
:
languages
[
i
]
=
"
delphi pascal
"
+
latkeConfig
.
staticServePath
+
"
/js/lib/SyntaxHighlighter/scripts/shBrushDelphi.js
"
;
break
;
case
"
diff
"
:
case
"
patch
"
:
case
"
pas
"
:
languages
[
i
]
=
"
diff patch pas
"
+
latkeConfig
.
staticServePath
+
"
/js/lib/SyntaxHighlighter/scripts/shBrushDiff.js
"
;
break
;
case
"
erl
"
:
case
"
erlang
"
:
languages
[
i
]
=
"
erl erlang
"
+
latkeConfig
.
staticServePath
+
"
/js/lib/SyntaxHighlighter/scripts/shBrushErlang.js
"
;
break
;
case
"
js
"
:
case
"
jscript
"
:
case
"
javascript
"
:
languages
[
i
]
=
"
js jscript javascript
"
+
latkeConfig
.
staticServePath
+
"
/js/lib/SyntaxHighlighter/scripts/shBrushJScript.js
"
;
break
;
case
"
jfx
"
:
case
"
javafx
"
:
languages
[
i
]
=
"
jfx javafx
"
+
latkeConfig
.
staticServePath
+
"
/js/lib/SyntaxHighlighter/scripts/shBrushJavaFX.js
"
;
break
;
case
"
perl
"
:
case
"
pl
"
:
languages
[
i
]
=
"
perl pl
"
+
latkeConfig
.
staticServePath
+
"
/js/lib/SyntaxHighlighter/scripts/shBrushPerl.js
"
;
break
;
case
"
plain
"
:
case
"
text
"
:
languages
[
i
]
=
"
text plain
"
+
latkeConfig
.
staticServePath
+
"
/js/lib/SyntaxHighlighter/scripts/shBrushPlain.js
"
;
break
;
case
"
ps
"
:
case
"
powershell
"
:
languages
[
i
]
=
"
ps powershell
"
+
latkeConfig
.
staticServePath
+
"
/js/lib/SyntaxHighlighter/scripts/shBrushPowerShell.js
"
;
break
;
case
"
py
"
:
case
"
python
"
:
languages
[
i
]
=
"
py python
"
+
latkeConfig
.
staticServePath
+
"
/js/lib/SyntaxHighlighter/scripts/shBrushPython.js
"
;
break
;
case
"
rails
"
:
case
"
ror
"
:
case
"
ruby
"
:
case
"
rb
"
:
languages
[
i
]
=
"
ruby rails ror rb
"
+
latkeConfig
.
staticServePath
+
"
/js/lib/SyntaxHighlighter/scripts/shBrushRuby.js
"
;
break
;
case
"
sass
"
:
case
"
scss
"
:
languages
[
i
]
=
"
sass scss
"
+
latkeConfig
.
staticServePath
+
"
/js/lib/SyntaxHighlighter/scripts/shBrushSass.js
"
;
break
;
case
"
vb
"
:
case
"
vbnet
"
:
languages
[
i
]
=
"
vb vbnet
"
+
latkeConfig
.
staticServePath
+
"
/js/lib/SyntaxHighlighter/scripts/shBrushVb.js
"
;
break
;
case
"
xml
"
:
case
"
xhtml
"
:
case
"
xslt
"
:
case
"
html
"
:
languages
[
i
]
=
"
xml xhtml xslt html
"
+
latkeConfig
.
staticServePath
+
"
/js/lib/SyntaxHighlighter/scripts/shBrushXml.js
"
;
break
;
default
:
break
}}
SyntaxHighlighter
.
autoloader
.
apply
(
null
,
languages
);
SyntaxHighlighter
.
config
.
stripBrs
=
true
;
SyntaxHighlighter
.
all
()},
_loadSyntaxHighlighter
:
function
(
SHTheme
){
var
cssName
=
SHTheme
?
SHTheme
:
"
shCoreEclipse
"
,
that
=
this
;
if
(
document
.
createStyleSheet
){
document
.
createStyleSheet
(
latkeConfig
.
staticServePath
+
"
/js/lib/SyntaxHighlighter/styles/
"
+
cssName
+
"
.css
"
)}
else
{
$
(
"
head
"
).
append
(
$
(
"
<link rel='stylesheet' href='
"
+
latkeConfig
.
staticServePath
+
"
/js/lib/SyntaxHighlighter/styles/
"
+
cssName
+
"
.css' type='text/css' charset='utf-8' />
"
))}
$
.
ajax
({
url
:
latkeConfig
.
staticServePath
+
"
/js/lib/SyntaxHighlighter/scripts/shCore.js
"
,
dataType
:
"
script
"
,
cache
:
true
,
success
:
function
(){
var
languages
=
[],
isScrip
=
false
;
$
(
"
.article-body pre, .code-highlight pre
"
).
each
(
function
(){
var
name
=
this
.
className
.
split
(
"
;
"
)[
0
];
var
language
=
name
.
substr
(
7
,
name
.
length
-
1
);
if
(
this
.
className
.
indexOf
(
"
html-script: true
"
)
>-
1
&&
(
language
!==
"
xml
"
&&
language
!==
"
xhtml
"
&&
language
!==
"
xslt
"
&&
language
!=
"
html
"
)){
isScrip
=
true
}
languages
.
push
(
language
)});
if
(
isScrip
){
$
.
ajax
({
url
:
latkeConfig
.
staticServePath
+
"
/js/lib/SyntaxHighlighter/scripts/shBrushXml.js
"
,
dataType
:
"
script
"
,
cache
:
true
,
success
:
function
(){
that
.
_initSyntaxHighlighter
(
languages
)}})}
else
{
that
.
_initSyntaxHighlighter
(
languages
)}}})},
parseLanguage
:
function
(
obj
){
var
isPrettify
=
false
,
isSH
=
false
;
$
(
"
.article-body pre, .code-highlight pre
"
).
each
(
function
(){
if
(
this
.
className
.
indexOf
(
"
brush
"
)
>-
1
){
isSH
=
true
}
if
(
this
.
className
.
indexOf
(
"
prettyprint
"
)
>-
1
){
isPrettify
=
true
}});
if
(
isSH
){
this
.
_loadSyntaxHighlighter
(
obj
?(
obj
.
SHTheme
?
obj
.
SHTheme
:
undefined
):
undefined
);
return
false
}
if
(
isPrettify
){
if
(
document
.
createStyleSheet
){
document
.
createStyleSheet
(
latkeConfig
.
staticServePath
+
"
/js/lib/google-code-prettify/prettify.css
"
)}
else
{
$
(
"
head
"
).
append
(
$
(
"
<link rel='stylesheet' href='
"
+
latkeConfig
.
staticServePath
+
"
/js/lib/google-code-prettify/prettify.css'>
"
))}
$
.
ajax
({
url
:
latkeConfig
.
staticServePath
+
"
/js/lib/google-code-prettify/prettify.js
"
,
dataType
:
"
script
"
,
cache
:
true
,
success
:
function
(){
prettyPrint
()}});
return
false
}
if
(
document
.
createStyleSheet
){
document
.
createStyleSheet
(
latkeConfig
.
staticServePath
+
"
/js/lib/highlight.js-9.6.0/styles/default.css
"
)}
else
{
$
(
"
head
"
).
append
(
$
(
"
<link rel='stylesheet' href='
"
+
latkeConfig
.
staticServePath
+
"
/js/lib/highlight.js-9.6.0/styles/
"
+
((
obj
&&
obj
.
theme
)
||
"
github
"
)
+
"
.css'>
"
))}
$
.
ajax
({
url
:
latkeConfig
.
staticServePath
+
"
/js/lib/highlight.js-9.6.0/highlight.pack.js
"
,
dataType
:
"
script
"
,
cache
:
true
,
success
:
function
(){
hljs
.
initHighlighting
.
called
=
false
;
hljs
.
initHighlighting
()}})},
load
:
function
(
obj
){
var
that
=
this
;
that
.
insertEmotions
();
that
.
parseLanguage
(
obj
?(
obj
.
language
?
obj
.
language
:
undefined
):
undefined
);
$
(
"
#commentValidate
"
).
keypress
(
function
(
event
){
if
(
event
.
keyCode
===
13
){
that
.
submitComment
()}});
$
(
"
#comment
"
).
keypress
(
function
(
event
){
if
(
event
.
keyCode
===
13
&&
event
.
ctrlKey
){
that
.
submitComment
()}});
$
(
"
#captcha
"
).
click
(
function
(){
$
(
this
).
attr
(
"
src
"
,
latkeConfig
.
servePath
+
"
/captcha?code=
"
+
Math
.
random
())});
if
(
!
Util
.
isLoggedIn
()){
$
(
"
#commentEmail
"
).
val
(
Cookie
.
readCookie
(
"
commentEmail
"
));
$
(
"
#commentURL
"
).
val
(
Cookie
.
readCookie
(
"
commentURL
"
));
$
(
"
#commentName
"
).
val
(
Cookie
.
readCookie
(
"
commentName
"
))}
try
{
JSON
}
catch
(
e
){
$
.
ajax
({
url
:
latkeConfig
.
staticServePath
+
"
/js/lib/json2.js
"
,
dataType
:
"
script
"
,
cache
:
true
})}},
loadRandomArticles
:
function
(
headTitle
){
var
randomArticles1Label
=
this
.
tips
.
randomArticles1Label
;
$
.
ajax
({
url
:
latkeConfig
.
servePath
+
"
/articles/random
"
,
type
:
"
POST
"
,
success
:
function
(
result
,
textStatus
){
var
randomArticles
=
result
.
randomArticles
;
if
(
!
randomArticles
||
0
===
randomArticles
.
length
){
$
(
"
#randomArticles
"
).
remove
();
return
}
var
listHtml
=
""
;
for
(
var
i
=
0
;
i
<
randomArticles
.
length
;
i
++
){
var
article
=
randomArticles
[
i
];
var
title
=
article
.
articleTitle
;
var
randomArticleLiHtml
=
"
<li><a rel='nofollow' title='
"
+
title
+
"
' href='
"
+
latkeConfig
.
servePath
+
article
.
articlePermalink
+
"
'>
"
+
title
+
"
</a></li>
"
;
listHtml
+=
randomArticleLiHtml
}
var
titleHTML
=
headTitle
?
headTitle
:
"
<h4>
"
+
randomArticles1Label
+
"
</h4>
"
;
var
randomArticleListHtml
=
titleHTML
+
"
<ul class='marginLeft12'>
"
+
listHtml
+
"
</ul>
"
;
$
(
"
#randomArticles
"
).
append
(
randomArticleListHtml
)}})},
loadRelevantArticles
:
function
(
id
,
headTitle
){
$
.
ajax
({
url
:
latkeConfig
.
servePath
+
"
/article/id/
"
+
id
+
"
/relevant/articles
"
,
type
:
"
GET
"
,
success
:
function
(
data
,
textStatus
){
var
articles
=
data
.
relevantArticles
;
if
(
!
articles
||
0
===
articles
.
length
){
$
(
"
#relevantArticles
"
).
remove
();
return
}
var
listHtml
=
""
;
for
(
var
i
=
0
;
i
<
articles
.
length
;
i
++
){
var
article
=
articles
[
i
];
var
title
=
article
.
articleTitle
;
var
articleLiHtml
=
"
<li><a rel='nofollow' title='
"
+
title
+
"
' href='
"
+
latkeConfig
.
servePath
+
article
.
articlePermalink
+
"
'>
"
+
title
+
"
</a></li>
"
;
listHtml
+=
articleLiHtml
}
var
relevantArticleListHtml
=
headTitle
+
"
<ul class='marginLeft12'>
"
+
listHtml
+
"
</ul>
"
;
$
(
"
#relevantArticles
"
).
append
(
relevantArticleListHtml
)},
error
:
function
(){
$
(
"
#relevantArticles
"
).
remove
()}})},
loadExternalRelevantArticles
:
function
(
tags
,
headTitle
){
var
tips
=
this
.
tips
;
try
{
$
.
ajax
({
url
:
"
https://rhythm.b3log.org/get-articles-by-tags.do?tags=
"
+
tags
+
"
&blogHost=
"
+
tips
.
blogHost
+
"
&paginationPageSize=
"
+
tips
.
externalRelevantArticlesDisplayCount
,
type
:
"
GET
"
,
cache
:
true
,
dataType
:
"
jsonp
"
,
error
:
function
(){
$
(
"
#externalRelevantArticles
"
).
remove
()},
success
:
function
(
data
,
textStatus
){
var
articles
=
data
.
articles
;
if
(
!
articles
||
0
===
articles
.
length
){
$
(
"
#externalRelevantArticles
"
).
remove
();
return
}
var
listHtml
=
""
;
for
(
var
i
=
0
;
i
<
articles
.
length
;
i
++
){
var
article
=
articles
[
i
];
var
title
=
article
.
articleTitle
;
var
articleLiHtml
=
"
<li><a rel='nofollow' title='
"
+
title
+
"
' target='_blank' href='
"
+
article
.
articlePermalink
+
"
'>
"
+
title
+
"
</a></li>
"
;
listHtml
+=
articleLiHtml
}
var
titleHTML
=
headTitle
?
headTitle
:
"
<h4>
"
+
tips
.
externalRelevantArticles1Label
+
"
</h4>
"
;
var
randomArticleListHtml
=
titleHTML
+
"
<ul class='marginLeft12'>
"
+
listHtml
+
"
</ul>
"
;
$
(
"
#externalRelevantArticles
"
).
append
(
randomArticleListHtml
)}})}
catch
(
e
){}},
submitComment
:
function
(
commentId
,
state
){
if
(
!
state
){
state
=
""
}
var
that
=
this
,
tips
=
this
.
tips
,
type
=
"
article
"
;
if
(
tips
.
externalRelevantArticlesDisplayCount
===
undefined
){
type
=
"
page
"
}
if
(
this
.
validateComment
(
state
)){
$
(
"
#submitCommentButton
"
+
state
).
attr
(
"
disabled
"
,
"
disabled
"
);
$
(
"
#commentErrorTip
"
+
state
).
show
().
html
(
this
.
tips
.
loadingLabel
);
var
requestJSONObject
=
{
oId
:
tips
.
oId
,
commentContent
:
$
(
"
#comment
"
+
state
).
val
().
replace
(
/
(
^
\s
*
)
|
(\s
*$
)
/g
,
""
)};
if
(
!
Util
.
isLoggedIn
()){
requestJSONObject
=
{
oId
:
tips
.
oId
,
commentContent
:
$
(
"
#comment
"
+
state
).
val
().
replace
(
/
(
^
\s
*
)
|
(\s
*$
)
/g
,
""
),
commentEmail
:
$
(
"
#commentEmail
"
+
state
).
val
(),
commentURL
:
Util
.
proessURL
(
$
(
"
#commentURL
"
+
state
).
val
().
replace
(
/
(
^
\s
*
)
|
(\s
*$
)
/g
,
""
)),
commentName
:
$
(
"
#commentName
"
+
state
).
val
().
replace
(
/
(
^
\s
*
)
|
(\s
*$
)
/g
,
""
),
captcha
:
$
(
"
#commentValidate
"
+
state
).
val
()};
Cookie
.
createCookie
(
"
commentName
"
,
requestJSONObject
.
commentName
,
365
);
Cookie
.
createCookie
(
"
commentEmail
"
,
requestJSONObject
.
commentEmail
,
365
);
Cookie
.
createCookie
(
"
commentURL
"
,
$
(
"
#commentURL
"
+
state
).
val
().
replace
(
/
(
^
\s
*
)
|
(\s
*$
)
/g
,
""
),
365
)}
if
(
state
===
"
Reply
"
){
requestJSONObject
.
commentOriginalCommentId
=
commentId
}
$
.
ajax
({
type
:
"
POST
"
,
url
:
latkeConfig
.
servePath
+
"
/
"
+
type
+
"
/comments
"
,
cache
:
false
,
contentType
:
"
application/json
"
,
data
:
JSON
.
stringify
(
requestJSONObject
),
success
:
function
(
result
){
$
(
"
#submitCommentButton
"
+
state
).
removeAttr
(
"
disabled
"
);
if
(
!
result
.
sc
){
$
(
"
#commentErrorTip
"
+
state
).
html
(
result
.
msg
);
$
(
"
#commentValidate
"
+
state
).
val
(
""
);
$
(
"
#captcha
"
+
state
).
click
();
if
(
!
Util
.
isLoggedIn
()){
$
(
"
#captcha
"
+
state
).
attr
(
"
src
"
,
latkeConfig
.
servePath
+
"
/captcha?code=
"
+
Math
.
random
())}
return
}
$
(
"
#comment
"
+
state
).
val
(
result
.
commentContent
);
$
(
"
#commentName
"
+
state
).
val
(
result
.
commentName
);
result
.
replyNameHTML
=
""
;
if
(
!
Util
.
isLoggedIn
()){
$
(
"
#captcha
"
+
state
).
attr
(
"
src
"
,
latkeConfig
.
servePath
+
"
/captcha?code=
"
+
Math
.
random
());
if
(
$
(
"
#commentURL
"
+
state
).
val
().
replace
(
/
\s
/g
,
""
)
===
""
){
result
.
replyNameHTML
=
"
<a>
"
+
$
(
"
#commentName
"
+
state
).
val
()
+
"
</a>
"
}
else
{
result
.
replyNameHTML
=
'
<a href="
'
+
Util
.
proessURL
(
$
(
"
#commentURL
"
+
state
).
val
())
+
'
" target="_blank">
'
+
$
(
"
#commentName
"
+
state
).
val
()
+
"
</a>
"
}
result
.
userName
=
result
.
commentName
}
else
{
result
.
replyNameHTML
=
'
<a href="
'
+
window
.
location
.
host
+
'
" target="_blank">
'
+
Util
.
getUserName
()
+
"
</a>
"
;
result
.
userName
=
Util
.
getUserName
()}
that
.
addCommentAjax
(
Util
.
replaceEmString
(
result
.
cmtTpl
),
state
)}})}},
addReplyForm
:
function
(
id
,
commentFormHTML
,
endHTML
){
var
that
=
this
;
if
(
id
===
this
.
currentCommentId
){
if
(
$
(
"
#commentNameReply
"
).
val
()
===
""
){
$
(
"
#commentNameReply
"
).
focus
()}
else
{
if
(
$
(
"
#commentEmailReply
"
).
val
()
===
""
){
$
(
"
#commentEmailReply
"
).
focus
()}
else
{
$
(
"
#commentReply
"
).
focus
()}}
return
}
$
(
"
#replyForm
"
).
remove
();
endHTML
=
endHTML
?
endHTML
:
""
;
if
(
endHTML
===
"
</div>
"
){
$
(
"
#
"
+
id
).
append
(
commentFormHTML
+
$
(
"
#commentForm
"
).
html
()
+
endHTML
)}
else
{
$
(
"
#
"
+
id
).
append
(
commentFormHTML
+
$
(
"
#commentForm
"
).
html
()
+
"
</table>
"
+
endHTML
)}
$
(
"
#replyForm input, #replyForm textarea
"
).
each
(
function
(){
this
.
id
=
this
.
id
+
"
Reply
"
});
$
(
"
#commentNameReply
"
).
val
(
Cookie
.
readCookie
(
"
commentName
"
));
$
(
"
#commentEmailReply
"
).
val
(
Cookie
.
readCookie
(
"
commentEmail
"
));
var
$label
=
$
(
"
#replyForm #commentURLLabel
"
);
if
(
$label
.
length
===
1
){
$label
.
attr
(
"
id
"
,
"
commentURLLabelReply
"
)}
$
(
"
#commentURLReply
"
).
val
(
Cookie
.
readCookie
(
"
commentURL
"
));
$
(
"
#replyForm #emotions
"
).
attr
(
"
id
"
,
"
emotionsReply
"
);
this
.
insertEmotions
(
"
Reply
"
);
$
(
"
#commentReply
"
).
unbind
().
keypress
(
function
(
event
){
if
(
event
.
keyCode
===
13
&&
event
.
ctrlKey
){
that
.
submitComment
(
id
,
"
Reply
"
);
event
.
preventDefault
()}});
$
(
"
#commentValidateReply
"
).
unbind
().
keypress
(
function
(
event
){
if
(
event
.
keyCode
===
13
){
that
.
submitComment
(
id
,
"
Reply
"
);
event
.
preventDefault
()}});
$
(
"
#replyForm #captcha
"
).
attr
(
"
id
"
,
"
captchaReply
"
).
attr
(
"
src
"
,
latkeConfig
.
servePath
+
"
/captcha?
"
+
new
Date
().
getTime
()).
click
(
function
(){
$
(
this
).
attr
(
"
src
"
,
latkeConfig
.
servePath
+
"
/captcha?code=
"
+
Math
.
random
())});
$
(
"
#replyForm #commentErrorTip
"
).
attr
(
"
id
"
,
"
commentErrorTipReply
"
).
html
(
""
).
hide
();
$
(
"
#replyForm #submitCommentButton
"
).
attr
(
"
id
"
,
"
submitCommentButtonReply
"
);
$
(
"
#replyForm #submitCommentButtonReply
"
).
unbind
(
"
click
"
).
removeAttr
(
"
onclick
"
).
click
(
function
(){
that
.
submitComment
(
id
,
"
Reply
"
)});
$
(
"
#replyForm #cancelCommentButton
"
).
show
();
if
(
$
(
"
#commentNameReply
"
).
val
()
===
""
){
$
(
"
#commentNameReply
"
).
focus
()}
else
{
if
(
$
(
"
#commentEmailReply
"
).
val
()
===
""
){
$
(
"
#commentEmailReply
"
).
focus
()}
else
{
$
(
"
#commentReply
"
).
focus
()}}
this
.
currentCommentId
=
id
},
hideComment
:
function
(
id
){
$
(
"
#commentRef
"
+
id
).
hide
()},
showComment
:
function
(
it
,
id
,
top
,
parentTag
){
var
positionTop
=
parseInt
(
$
(
it
).
position
().
top
);
if
(
parentTag
){
positionTop
=
parseInt
(
$
(
it
).
parents
(
parentTag
).
position
().
top
)}
if
(
$
(
"
#commentRef
"
+
id
).
length
>
0
){
$
(
"
#commentRef
"
+
id
).
show
().
css
(
"
top
"
,(
positionTop
+
top
)
+
"
px
"
)}
else
{
var
$refComment
=
$
(
"
#
"
+
id
).
clone
();
$refComment
.
addClass
(
"
comment-body-ref
"
).
attr
(
"
id
"
,
"
commentRef
"
+
id
);
$refComment
.
find
(
"
#replyForm
"
).
remove
();
$
(
"
#comments
"
).
append
(
$refComment
);
$
(
"
#commentRef
"
+
id
).
css
(
"
top
"
,(
positionTop
+
top
)
+
"
px
"
)}},
addCommentAjax
:
function
(
commentHTML
,
state
){
if
(
$
(
"
#comments
"
).
children
().
length
>
0
){
$
(
$
(
"
#comments
"
).
children
()[
0
]).
before
(
commentHTML
)}
else
{
$
(
"
#comments
"
).
html
(
commentHTML
)}
if
(
state
===
""
){
$
(
"
#commentErrorTip
"
).
html
(
""
).
hide
();
$
(
"
#comment
"
).
val
(
""
);
$
(
"
#commentValidate
"
).
val
(
""
);
$
(
"
#captcha
"
).
attr
(
"
src
"
,
latkeConfig
.
servePath
+
"
/captcha?code=
"
+
Math
.
random
())}
else
{
$
(
"
#replyForm
"
).
remove
()}
window
.
location
.
hash
=
"
#comments
"
}});
var
Page
=
function
(
tips
){
this
.
currentCommentId
=
""
;
this
.
tips
=
tips
};
$
.
extend
(
Page
.
prototype
,{
insertEmotions
:
function
(
name
){
var
_it
=
this
;
if
(
name
===
undefined
){
name
=
""
}
$
(
"
#emotions
"
+
name
+
"
span
"
).
click
(
function
(){
var
$comment
=
$
(
"
#comment
"
+
name
);
var
endPosition
=
_it
.
_getCursorEndPosition
(
$comment
[
0
]);
var
key
=
this
.
title
+
"
"
,
textValue
=
$comment
[
0
].
value
;
textValue
=
textValue
.
substring
(
0
,
endPosition
)
+
key
+
textValue
.
substring
(
endPosition
,
textValue
.
length
);
$
(
"
#comment
"
+
name
).
val
(
textValue
);
if
(
!!
window
.
ActiveXObject
||
"
ActiveXObject
"
in
window
){
endPosition
-=
textValue
.
split
(
"
\n
"
).
length
-
1
;
var
oR
=
$comment
[
0
].
createTextRange
();
oR
.
collapse
(
true
);
oR
.
moveStart
(
"
character
"
,
endPosition
+
key
.
length
);
oR
.
select
()}
else
{
$comment
[
0
].
setSelectionRange
(
endPosition
+
key
.
length
,
endPosition
+
key
.
length
)}})},
_getCursorEndPosition
:
function
(
textarea
){
textarea
.
focus
();
if
(
textarea
.
setSelectionRange
){
return
textarea
.
selectionEnd
}
else
{
if
(
document
.
selection
){
var
i
=
0
,
oS
=
document
.
selection
.
createRange
(),
oR
=
document
.
body
.
createTextRange
();
oR
.
moveToElementText
(
textarea
);
oS
.
getBookmark
();
for
(
i
=
0
;
oR
.
compareEndPoints
(
"
StartToStart
"
,
oS
)
<
0
&&
oS
.
moveStart
(
"
character
"
,
-
1
)
!==
0
;
i
++
){
if
(
textarea
.
value
.
charAt
(
i
)
===
"
\n
"
){
i
++
}}
return
i
}}},
validateComment
:
function
(
state
){
if
(
Util
.
isLoggedIn
()){
var
commenterContent
=
$
(
"
#comment
"
+
state
).
val
().
replace
(
/
(
^
\s
*
)
|
(\s
*$
)
/g
,
""
);
if
(
2
>
commenterContent
.
length
||
commenterContent
.
length
>
500
){
$
(
"
#commentErrorTip
"
+
state
).
html
(
this
.
tips
.
commentContentCannotEmptyLabel
);
$
(
"
#comment
"
+
state
).
focus
()}
else
{
return
true
}
$
(
"
#commentErrorTip
"
+
state
).
show
();
return
false
}
var
commentName
=
$
(
"
#commentName
"
+
state
).
val
().
replace
(
/
(
^
\s
*
)
|
(\s
*$
)
/g
,
""
),
commenterContent
=
$
(
"
#comment
"
+
state
).
val
().
replace
(
/
(
^
\s
*
)
|
(\s
*$
)
/g
,
""
);
if
(
2
>
commentName
.
length
||
commentName
.
length
>
20
){
$
(
"
#commentErrorTip
"
+
state
).
html
(
this
.
tips
.
nameTooLongLabel
);
$
(
"
#commentName
"
+
state
).
focus
()}
else
{
if
(
$
(
"
#commentEmail
"
+
state
).
val
().
replace
(
/
\s
/g
,
""
)
===
""
){
$
(
"
#commentErrorTip
"
+
state
).
html
(
this
.
tips
.
mailCannotEmptyLabel
);
$
(
"
#commentEmail
"
+
state
).
focus
()}
else
{
if
(
!
/^
((([
a-z
]
|
\d
|
[
!#
\$
%&'
\*\+\-\/
=
\?\^
_`{
\|
}~
]
|
[\u
00A0-
\u
D7FF
\u
F900-
\u
FDCF
\u
FDF0-
\u
FFEF
])
+
(\.([
a-z
]
|
\d
|
[
!#
\$
%&'
\*\+\-\/
=
\?\^
_`{
\|
}~
]
|
[\u
00A0-
\u
D7FF
\u
F900-
\u
FDCF
\u
FDF0-
\u
FFEF
])
+
)
*
)
|
((\x
22
)((((\x
20|
\x
09
)
*
(\x
0d
\x
0a
))?(\x
20|
\x
09
)
+
)?(([\x
01-
\x
08
\x
0b
\x
0c
\x
0e-
\x
1f
\x
7f
]
|
\x
21|
[\x
23-
\x
5b
]
|
[\x
5d-
\x
7e
]
|
[\u
00A0-
\u
D7FF
\u
F900-
\u
FDCF
\u
FDF0-
\u
FFEF
])
|
(\\([\x
01-
\x
09
\x
0b
\x
0c
\x
0d-
\x
7f
]
|
[\u
00A0-
\u
D7FF
\u
F900-
\u
FDCF
\u
FDF0-
\u
FFEF
]))))
*
(((\x
20|
\x
09
)
*
(\x
0d
\x
0a
))?(\x
20|
\x
09
)
+
)?(\x
22
)))
@
((([
a-z
]
|
\d
|
[\u
00A0-
\u
D7FF
\u
F900-
\u
FDCF
\u
FDF0-
\u
FFEF
])
|
(([
a-z
]
|
\d
|
[\u
00A0-
\u
D7FF
\u
F900-
\u
FDCF
\u
FDF0-
\u
FFEF
])([
a-z
]
|
\d
|-|
\.
|_|~|
[\u
00A0-
\u
D7FF
\u
F900-
\u
FDCF
\u
FDF0-
\u
FFEF
])
*
([
a-z
]
|
\d
|
[\u
00A0-
\u
D7FF
\u
F900-
\u
FDCF
\u
FDF0-
\u
FFEF
])))\.)
+
(([
a-z
]
|
[\u
00A0-
\u
D7FF
\u
F900-
\u
FDCF
\u
FDF0-
\u
FFEF
])
|
(([
a-z
]
|
[\u
00A0-
\u
D7FF
\u
F900-
\u
FDCF
\u
FDF0-
\u
FFEF
])([
a-z
]
|
\d
|-|
\.
|_|~|
[\u
00A0-
\u
D7FF
\u
F900-
\u
FDCF
\u
FDF0-
\u
FFEF
])
*
([
a-z
]
|
[\u
00A0-
\u
D7FF
\u
F900-
\u
FDCF
\u
FDF0-
\u
FFEF
])))\.?
$/i
.
test
(
$
(
"
#commentEmail
"
+
state
).
val
())){
$
(
"
#commentErrorTip
"
+
state
).
html
(
this
.
tips
.
mailInvalidLabel
);
$
(
"
#commentEmail
"
+
state
).
focus
()}
else
{
if
(
2
>
commenterContent
.
length
||
commenterContent
.
length
>
500
){
$
(
"
#commentErrorTip
"
+
state
).
html
(
this
.
tips
.
commentContentCannotEmptyLabel
);
$
(
"
#comment
"
+
state
).
focus
()}
else
{
if
(
$
(
"
#commentValidate
"
+
state
).
val
().
replace
(
/
\s
/g
,
""
)
===
""
){
$
(
"
#commentErrorTip
"
+
state
).
html
(
this
.
tips
.
captchaCannotEmptyLabel
);
$
(
"
#commentValidate
"
+
state
).
focus
()}
else
{
return
true
}}}}}
$
(
"
#commentErrorTip
"
+
state
).
show
();
return
false
},
replaceCommentsEm
:
function
(
selector
){
var
$commentContents
=
$
(
selector
);
for
(
var
i
=
0
;
i
<
$commentContents
.
length
;
i
++
){
var
str
=
$commentContents
[
i
].
innerHTML
;
$commentContents
[
i
].
innerHTML
=
Util
.
replaceEmString
(
str
)}},
_initSyntaxHighlighter
:
function
(
languages
){
for
(
var
i
=
0
;
i
<
languages
.
length
;
i
++
){
switch
(
languages
[
i
]){
case
"
groovy
"
:
languages
[
i
]
=
"
groovy
"
+
latkeConfig
.
staticServePath
+
"
/js/lib/SyntaxHighlighter/scripts/shBrushGroovy.js
"
;
break
;
case
"
java
"
:
languages
[
i
]
=
"
java
"
+
latkeConfig
.
staticServePath
+
"
/js/lib/SyntaxHighlighter/scripts/shBrushJava.js
"
;
break
;
case
"
php
"
:
languages
[
i
]
=
"
php
"
+
latkeConfig
.
staticServePath
+
"
/js/lib/SyntaxHighlighter/scripts/shBrushPhp.js
"
;
break
;
case
"
scala
"
:
languages
[
i
]
=
"
scala
"
+
latkeConfig
.
staticServePath
+
"
/js/lib/SyntaxHighlighter/scripts/shBrushScala.js
"
;
break
;
case
"
sql
"
:
languages
[
i
]
=
"
sql
"
+
latkeConfig
.
staticServePath
+
"
/js/lib/SyntaxHighlighter/scripts/shBrushSql.js
"
;
break
;
case
"
applescript
"
:
languages
[
i
]
=
"
applescript
"
+
latkeConfig
.
staticServePath
+
"
/js/lib/SyntaxHighlighter/scripts/shBrushAppleScript.js
"
;
break
;
case
"
as3
"
:
case
"
actionscript3
"
:
languages
[
i
]
=
"
actionscript3 as3
"
+
latkeConfig
.
staticServePath
+
"
/js/lib/SyntaxHighlighter/scripts/shBrushAS3.js
"
;
break
;
case
"
bash
"
:
case
"
shell
"
:
languages
[
i
]
=
"
bash shell
"
+
latkeConfig
.
staticServePath
+
"
/js/lib/SyntaxHighlighter/scripts/shBrushBash.js
"
;
break
;
case
"
coldfusion
"
:
case
"
cf
"
:
languages
[
i
]
=
"
coldfusion cf
"
+
latkeConfig
.
staticServePath
+
"
/js/lib/SyntaxHighlighter/scripts/shBrushColdFusion.js
"
;
break
;
case
"
c#
"
:
case
"
c-sharp
"
:
case
"
csharp
"
:
languages
[
i
]
=
"
c# c-sharp csharp
"
+
latkeConfig
.
staticServePath
+
"
/js/lib/SyntaxHighlighter/scripts/shBrushCSharp.js
"
;
break
;
case
"
cpp
"
:
case
"
c
"
:
languages
[
i
]
=
"
cpp c
"
+
latkeConfig
.
staticServePath
+
"
/js/lib/SyntaxHighlighter/scripts/shBrushCpp.js
"
;
break
;
case
"
css
"
:
languages
[
i
]
=
"
css
"
+
latkeConfig
.
staticServePath
+
"
/js/lib/SyntaxHighlighter/scripts/shBrushCss.js
"
;
break
;
case
"
delphi
"
:
case
"
pascal
"
:
languages
[
i
]
=
"
delphi pascal
"
+
latkeConfig
.
staticServePath
+
"
/js/lib/SyntaxHighlighter/scripts/shBrushDelphi.js
"
;
break
;
case
"
diff
"
:
case
"
patch
"
:
case
"
pas
"
:
languages
[
i
]
=
"
diff patch pas
"
+
latkeConfig
.
staticServePath
+
"
/js/lib/SyntaxHighlighter/scripts/shBrushDiff.js
"
;
break
;
case
"
erl
"
:
case
"
erlang
"
:
languages
[
i
]
=
"
erl erlang
"
+
latkeConfig
.
staticServePath
+
"
/js/lib/SyntaxHighlighter/scripts/shBrushErlang.js
"
;
break
;
case
"
js
"
:
case
"
jscript
"
:
case
"
javascript
"
:
languages
[
i
]
=
"
js jscript javascript
"
+
latkeConfig
.
staticServePath
+
"
/js/lib/SyntaxHighlighter/scripts/shBrushJScript.js
"
;
break
;
case
"
jfx
"
:
case
"
javafx
"
:
languages
[
i
]
=
"
jfx javafx
"
+
latkeConfig
.
staticServePath
+
"
/js/lib/SyntaxHighlighter/scripts/shBrushJavaFX.js
"
;
break
;
case
"
perl
"
:
case
"
pl
"
:
languages
[
i
]
=
"
perl pl
"
+
latkeConfig
.
staticServePath
+
"
/js/lib/SyntaxHighlighter/scripts/shBrushPerl.js
"
;
break
;
case
"
plain
"
:
case
"
text
"
:
languages
[
i
]
=
"
text plain
"
+
latkeConfig
.
staticServePath
+
"
/js/lib/SyntaxHighlighter/scripts/shBrushPlain.js
"
;
break
;
case
"
ps
"
:
case
"
powershell
"
:
languages
[
i
]
=
"
ps powershell
"
+
latkeConfig
.
staticServePath
+
"
/js/lib/SyntaxHighlighter/scripts/shBrushPowerShell.js
"
;
break
;
case
"
py
"
:
case
"
python
"
:
languages
[
i
]
=
"
py python
"
+
latkeConfig
.
staticServePath
+
"
/js/lib/SyntaxHighlighter/scripts/shBrushPython.js
"
;
break
;
case
"
rails
"
:
case
"
ror
"
:
case
"
ruby
"
:
case
"
rb
"
:
languages
[
i
]
=
"
ruby rails ror rb
"
+
latkeConfig
.
staticServePath
+
"
/js/lib/SyntaxHighlighter/scripts/shBrushRuby.js
"
;
break
;
case
"
sass
"
:
case
"
scss
"
:
languages
[
i
]
=
"
sass scss
"
+
latkeConfig
.
staticServePath
+
"
/js/lib/SyntaxHighlighter/scripts/shBrushSass.js
"
;
break
;
case
"
vb
"
:
case
"
vbnet
"
:
languages
[
i
]
=
"
vb vbnet
"
+
latkeConfig
.
staticServePath
+
"
/js/lib/SyntaxHighlighter/scripts/shBrushVb.js
"
;
break
;
case
"
xml
"
:
case
"
xhtml
"
:
case
"
xslt
"
:
case
"
html
"
:
languages
[
i
]
=
"
xml xhtml xslt html
"
+
latkeConfig
.
staticServePath
+
"
/js/lib/SyntaxHighlighter/scripts/shBrushXml.js
"
;
break
;
default
:
break
}}
SyntaxHighlighter
.
autoloader
.
apply
(
null
,
languages
);
SyntaxHighlighter
.
config
.
stripBrs
=
true
;
SyntaxHighlighter
.
all
()},
_loadSyntaxHighlighter
:
function
(
SHTheme
){
var
cssName
=
SHTheme
?
SHTheme
:
"
shCoreEclipse
"
,
that
=
this
;
if
(
document
.
createStyleSheet
){
document
.
createStyleSheet
(
latkeConfig
.
staticServePath
+
"
/js/lib/SyntaxHighlighter/styles/
"
+
cssName
+
"
.css
"
)}
else
{
$
(
"
head
"
).
append
(
$
(
"
<link rel='stylesheet' href='
"
+
latkeConfig
.
staticServePath
+
"
/js/lib/SyntaxHighlighter/styles/
"
+
cssName
+
"
.css' type='text/css' charset='utf-8' />
"
))}
$
.
ajax
({
url
:
latkeConfig
.
staticServePath
+
"
/js/lib/SyntaxHighlighter/scripts/shCore.js
"
,
dataType
:
"
script
"
,
cache
:
true
,
success
:
function
(){
var
languages
=
[],
isScrip
=
false
;
$
(
"
.article-body pre, .code-highlight pre
"
).
each
(
function
(){
var
name
=
this
.
className
.
split
(
"
;
"
)[
0
];
var
language
=
name
.
substr
(
7
,
name
.
length
-
1
);
if
(
this
.
className
.
indexOf
(
"
html-script: true
"
)
>-
1
&&
(
language
!==
"
xml
"
&&
language
!==
"
xhtml
"
&&
language
!==
"
xslt
"
&&
language
!=
"
html
"
)){
isScrip
=
true
}
languages
.
push
(
language
)});
if
(
isScrip
){
$
.
ajax
({
url
:
latkeConfig
.
staticServePath
+
"
/js/lib/SyntaxHighlighter/scripts/shBrushXml.js
"
,
dataType
:
"
script
"
,
cache
:
true
,
success
:
function
(){
that
.
_initSyntaxHighlighter
(
languages
)}})}
else
{
that
.
_initSyntaxHighlighter
(
languages
)}}})},
parseLanguage
:
function
(
obj
){
var
isPrettify
=
false
,
isSH
=
false
;
$
(
"
.article-body pre, .code-highlight pre
"
).
each
(
function
(){
if
(
this
.
className
.
indexOf
(
"
brush
"
)
>-
1
){
isSH
=
true
}
if
(
this
.
className
.
indexOf
(
"
prettyprint
"
)
>-
1
){
isPrettify
=
true
}});
if
(
isSH
){
this
.
_loadSyntaxHighlighter
(
obj
?(
obj
.
SHTheme
?
obj
.
SHTheme
:
undefined
):
undefined
);
return
false
}
if
(
isPrettify
){
if
(
document
.
createStyleSheet
){
document
.
createStyleSheet
(
latkeConfig
.
staticServePath
+
"
/js/lib/google-code-prettify/prettify.css
"
)}
else
{
$
(
"
head
"
).
append
(
$
(
"
<link rel='stylesheet' href='
"
+
latkeConfig
.
staticServePath
+
"
/js/lib/google-code-prettify/prettify.css'>
"
))}
$
.
ajax
({
url
:
latkeConfig
.
staticServePath
+
"
/js/lib/google-code-prettify/prettify.js
"
,
dataType
:
"
script
"
,
cache
:
true
,
success
:
function
(){
prettyPrint
()}});
return
false
}
if
(
document
.
createStyleSheet
){
document
.
createStyleSheet
(
latkeConfig
.
staticServePath
+
"
/js/lib/highlight.js-9.6.0/styles/default.css
"
)}
else
{
$
(
"
head
"
).
append
(
$
(
"
<link rel='stylesheet' href='
"
+
latkeConfig
.
staticServePath
+
"
/js/lib/highlight.js-9.6.0/styles/
"
+
((
obj
&&
obj
.
theme
)
||
"
github
"
)
+
"
.css'>
"
))}
$
.
ajax
({
url
:
latkeConfig
.
staticServePath
+
"
/js/lib/highlight.js-9.6.0/highlight.pack.js
"
,
dataType
:
"
script
"
,
cache
:
true
,
success
:
function
(){
hljs
.
initHighlighting
.
called
=
false
;
hljs
.
initHighlighting
()}})},
load
:
function
(
obj
){
var
that
=
this
;
that
.
insertEmotions
();
that
.
parseLanguage
(
obj
?(
obj
.
language
?
obj
.
language
:
undefined
):
undefined
);
$
(
"
#commentValidate
"
).
keypress
(
function
(
event
){
if
(
event
.
keyCode
===
13
){
that
.
submitComment
()}});
$
(
"
#comment
"
).
keypress
(
function
(
event
){
if
(
event
.
keyCode
===
13
&&
event
.
ctrlKey
){
that
.
submitComment
()}});
$
(
"
#captcha
"
).
click
(
function
(){
$
(
this
).
attr
(
"
src
"
,
latkeConfig
.
servePath
+
"
/captcha?code=
"
+
Math
.
random
())});
if
(
!
Util
.
isLoggedIn
()){
$
(
"
#commentEmail
"
).
val
(
Cookie
.
readCookie
(
"
commentEmail
"
));
$
(
"
#commentURL
"
).
val
(
Cookie
.
readCookie
(
"
commentURL
"
));
$
(
"
#commentName
"
).
val
(
Cookie
.
readCookie
(
"
commentName
"
))}
try
{
JSON
}
catch
(
e
){
$
.
ajax
({
url
:
latkeConfig
.
staticServePath
+
"
/js/lib/json2.js
"
,
dataType
:
"
script
"
,
cache
:
true
})}},
loadRandomArticles
:
function
(
headTitle
){
var
randomArticles1Label
=
this
.
tips
.
randomArticles1Label
;
$
.
ajax
({
url
:
latkeConfig
.
servePath
+
"
/articles/random
"
,
type
:
"
POST
"
,
success
:
function
(
result
,
textStatus
){
var
randomArticles
=
result
.
randomArticles
;
if
(
!
randomArticles
||
0
===
randomArticles
.
length
){
$
(
"
#randomArticles
"
).
remove
();
return
}
var
listHtml
=
""
;
for
(
var
i
=
0
;
i
<
randomArticles
.
length
;
i
++
){
var
article
=
randomArticles
[
i
];
var
title
=
article
.
articleTitle
;
var
randomArticleLiHtml
=
"
<li><a rel='nofollow' title='
"
+
title
+
"
' href='
"
+
latkeConfig
.
servePath
+
article
.
articlePermalink
+
"
'>
"
+
title
+
"
</a></li>
"
;
listHtml
+=
randomArticleLiHtml
}
var
titleHTML
=
headTitle
?
headTitle
:
"
<h4>
"
+
randomArticles1Label
+
"
</h4>
"
;
var
randomArticleListHtml
=
titleHTML
+
"
<ul class='marginLeft12'>
"
+
listHtml
+
"
</ul>
"
;
$
(
"
#randomArticles
"
).
append
(
randomArticleListHtml
)}})},
loadRelevantArticles
:
function
(
id
,
headTitle
){
$
.
ajax
({
url
:
latkeConfig
.
servePath
+
"
/article/id/
"
+
id
+
"
/relevant/articles
"
,
type
:
"
GET
"
,
success
:
function
(
data
,
textStatus
){
var
articles
=
data
.
relevantArticles
;
if
(
!
articles
||
0
===
articles
.
length
){
$
(
"
#relevantArticles
"
).
remove
();
return
}
var
listHtml
=
""
;
for
(
var
i
=
0
;
i
<
articles
.
length
;
i
++
){
var
article
=
articles
[
i
];
var
title
=
article
.
articleTitle
;
var
articleLiHtml
=
"
<li><a rel='nofollow' title='
"
+
title
+
"
' href='
"
+
latkeConfig
.
servePath
+
article
.
articlePermalink
+
"
'>
"
+
title
+
"
</a></li>
"
;
listHtml
+=
articleLiHtml
}
var
relevantArticleListHtml
=
headTitle
+
"
<ul class='marginLeft12'>
"
+
listHtml
+
"
</ul>
"
;
$
(
"
#relevantArticles
"
).
append
(
relevantArticleListHtml
)},
error
:
function
(){
$
(
"
#relevantArticles
"
).
remove
()}})},
loadExternalRelevantArticles
:
function
(
tags
,
headTitle
){
var
tips
=
this
.
tips
;
try
{
$
.
ajax
({
url
:
"
https://rhythm.b3log.org/get-articles-by-tags.do?tags=
"
+
tags
+
"
&blogHost=
"
+
tips
.
blogHost
+
"
&paginationPageSize=
"
+
tips
.
externalRelevantArticlesDisplayCount
,
type
:
"
GET
"
,
cache
:
true
,
dataType
:
"
jsonp
"
,
error
:
function
(){
$
(
"
#externalRelevantArticles
"
).
remove
()},
success
:
function
(
data
,
textStatus
){
var
articles
=
data
.
articles
;
if
(
!
articles
||
0
===
articles
.
length
){
$
(
"
#externalRelevantArticles
"
).
remove
();
return
}
var
listHtml
=
""
;
for
(
var
i
=
0
;
i
<
articles
.
length
;
i
++
){
var
article
=
articles
[
i
];
var
title
=
article
.
articleTitle
;
var
articleLiHtml
=
"
<li><a rel='nofollow' title='
"
+
title
+
"
' target='_blank' href='
"
+
article
.
articlePermalink
+
"
'>
"
+
title
+
"
</a></li>
"
;
listHtml
+=
articleLiHtml
}
var
titleHTML
=
headTitle
?
headTitle
:
"
<h4>
"
+
tips
.
externalRelevantArticles1Label
+
"
</h4>
"
;
var
randomArticleListHtml
=
titleHTML
+
"
<ul class='marginLeft12'>
"
+
listHtml
+
"
</ul>
"
;
$
(
"
#externalRelevantArticles
"
).
append
(
randomArticleListHtml
)}})}
catch
(
e
){}},
submitComment
:
function
(
commentId
,
state
){
if
(
!
state
){
state
=
""
}
var
that
=
this
,
tips
=
this
.
tips
,
type
=
"
article
"
;
if
(
tips
.
externalRelevantArticlesDisplayCount
===
undefined
){
type
=
"
page
"
}
if
(
this
.
validateComment
(
state
)){
$
(
"
#submitCommentButton
"
+
state
).
attr
(
"
disabled
"
,
"
disabled
"
);
$
(
"
#commentErrorTip
"
+
state
).
show
().
html
(
this
.
tips
.
loadingLabel
);
var
requestJSONObject
=
{
oId
:
tips
.
oId
,
commentContent
:
$
(
"
#comment
"
+
state
).
val
().
replace
(
/
(
^
\s
*
)
|
(\s
*$
)
/g
,
""
)};
if
(
!
Util
.
isLoggedIn
()){
requestJSONObject
=
{
oId
:
tips
.
oId
,
commentContent
:
$
(
"
#comment
"
+
state
).
val
().
replace
(
/
(
^
\s
*
)
|
(\s
*$
)
/g
,
""
),
commentEmail
:
$
(
"
#commentEmail
"
+
state
).
val
(),
commentURL
:
Util
.
proessURL
(
$
(
"
#commentURL
"
+
state
).
val
().
replace
(
/
(
^
\s
*
)
|
(\s
*$
)
/g
,
""
)),
commentName
:
$
(
"
#commentName
"
+
state
).
val
().
replace
(
/
(
^
\s
*
)
|
(\s
*$
)
/g
,
""
),
captcha
:
$
(
"
#commentValidate
"
+
state
).
val
()};
Cookie
.
createCookie
(
"
commentName
"
,
requestJSONObject
.
commentName
,
365
);
Cookie
.
createCookie
(
"
commentEmail
"
,
requestJSONObject
.
commentEmail
,
365
);
Cookie
.
createCookie
(
"
commentURL
"
,
$
(
"
#commentURL
"
+
state
).
val
().
replace
(
/
(
^
\s
*
)
|
(\s
*$
)
/g
,
""
),
365
)}
if
(
state
===
"
Reply
"
){
requestJSONObject
.
commentOriginalCommentId
=
commentId
}
$
.
ajax
({
type
:
"
POST
"
,
url
:
latkeConfig
.
servePath
+
"
/
"
+
type
+
"
/comments
"
,
cache
:
false
,
contentType
:
"
application/json
"
,
data
:
JSON
.
stringify
(
requestJSONObject
),
success
:
function
(
result
){
$
(
"
#submitCommentButton
"
+
state
).
removeAttr
(
"
disabled
"
);
if
(
!
result
.
sc
){
$
(
"
#commentErrorTip
"
+
state
).
html
(
result
.
msg
);
$
(
"
#commentValidate
"
+
state
).
val
(
""
);
$
(
"
#captcha
"
+
state
).
click
();
if
(
!
Util
.
isLoggedIn
()){
$
(
"
#captcha
"
+
state
).
attr
(
"
src
"
,
latkeConfig
.
servePath
+
"
/captcha?code=
"
+
Math
.
random
())}
return
}
$
(
"
#comment
"
+
state
).
val
(
result
.
commentContent
);
$
(
"
#commentName
"
+
state
).
val
(
result
.
commentName
);
result
.
replyNameHTML
=
""
;
if
(
!
Util
.
isLoggedIn
()){
$
(
"
#captcha
"
+
state
).
attr
(
"
src
"
,
latkeConfig
.
servePath
+
"
/captcha?code=
"
+
Math
.
random
());
if
(
$
(
"
#commentURL
"
+
state
).
val
().
replace
(
/
\s
/g
,
""
)
===
""
){
result
.
replyNameHTML
=
"
<a>
"
+
$
(
"
#commentName
"
+
state
).
val
()
+
"
</a>
"
}
else
{
result
.
replyNameHTML
=
'
<a href="
'
+
Util
.
proessURL
(
$
(
"
#commentURL
"
+
state
).
val
())
+
'
" target="_blank">
'
+
$
(
"
#commentName
"
+
state
).
val
()
+
"
</a>
"
}
result
.
userName
=
result
.
commentName
}
else
{
result
.
replyNameHTML
=
'
<a href="
'
+
window
.
location
.
host
+
'
" target="_blank">
'
+
Util
.
getUserName
()
+
"
</a>
"
;
result
.
userName
=
Util
.
getUserName
()}
that
.
addCommentAjax
(
Util
.
replaceEmString
(
result
.
cmtTpl
),
state
)}})}},
addReplyForm
:
function
(
id
,
commentFormHTML
,
endHTML
){
var
that
=
this
;
if
(
id
===
this
.
currentCommentId
){
if
(
$
(
"
#commentNameReply
"
).
val
()
===
""
){
$
(
"
#commentNameReply
"
).
focus
()}
else
{
if
(
$
(
"
#commentEmailReply
"
).
val
()
===
""
){
$
(
"
#commentEmailReply
"
).
focus
()}
else
{
$
(
"
#commentReply
"
).
focus
()}}
return
}
$
(
"
#replyForm
"
).
remove
();
endHTML
=
endHTML
?
endHTML
:
""
;
if
(
endHTML
===
"
</div>
"
){
$
(
"
#
"
+
id
).
append
(
commentFormHTML
+
$
(
"
#commentForm
"
).
html
()
+
endHTML
)}
else
{
$
(
"
#
"
+
id
).
append
(
commentFormHTML
+
$
(
"
#commentForm
"
).
html
()
+
"
</table>
"
+
endHTML
)}
$
(
"
#replyForm input, #replyForm textarea
"
).
each
(
function
(){
this
.
id
=
this
.
id
+
"
Reply
"
});
$
(
"
#commentNameReply
"
).
val
(
Cookie
.
readCookie
(
"
commentName
"
));
$
(
"
#commentEmailReply
"
).
val
(
Cookie
.
readCookie
(
"
commentEmail
"
));
var
$label
=
$
(
"
#replyForm #commentURLLabel
"
);
if
(
$label
.
length
===
1
){
$label
.
attr
(
"
id
"
,
"
commentURLLabelReply
"
)}
$
(
"
#commentURLReply
"
).
val
(
Cookie
.
readCookie
(
"
commentURL
"
));
$
(
"
#replyForm #emotions
"
).
attr
(
"
id
"
,
"
emotionsReply
"
);
this
.
insertEmotions
(
"
Reply
"
);
$
(
"
#commentReply
"
).
unbind
().
keypress
(
function
(
event
){
if
(
event
.
keyCode
===
13
&&
event
.
ctrlKey
){
that
.
submitComment
(
id
,
"
Reply
"
);
event
.
preventDefault
()}});
$
(
"
#commentValidateReply
"
).
unbind
().
keypress
(
function
(
event
){
if
(
event
.
keyCode
===
13
){
that
.
submitComment
(
id
,
"
Reply
"
);
event
.
preventDefault
()}});
$
(
"
#replyForm #captcha
"
).
attr
(
"
id
"
,
"
captchaReply
"
).
attr
(
"
src
"
,
latkeConfig
.
servePath
+
"
/captcha?
"
+
new
Date
().
getTime
()).
click
(
function
(){
$
(
this
).
attr
(
"
src
"
,
latkeConfig
.
servePath
+
"
/captcha?code=
"
+
Math
.
random
())});
$
(
"
#replyForm #commentErrorTip
"
).
attr
(
"
id
"
,
"
commentErrorTipReply
"
).
html
(
""
).
hide
();
$
(
"
#replyForm #submitCommentButton
"
).
attr
(
"
id
"
,
"
submitCommentButtonReply
"
);
$
(
"
#replyForm #submitCommentButtonReply
"
).
unbind
(
"
click
"
).
removeAttr
(
"
onclick
"
).
click
(
function
(){
that
.
submitComment
(
id
,
"
Reply
"
)});
$
(
"
#replyForm #cancelCommentButton
"
).
show
();
if
(
$
(
"
#commentNameReply
"
).
val
()
===
""
){
$
(
"
#commentNameReply
"
).
focus
()}
else
{
if
(
$
(
"
#commentEmailReply
"
).
val
()
===
""
){
$
(
"
#commentEmailReply
"
).
focus
()}
else
{
$
(
"
#commentReply
"
).
focus
()}}
this
.
currentCommentId
=
id
},
hideComment
:
function
(
id
){
$
(
"
#commentRef
"
+
id
).
hide
()},
showComment
:
function
(
it
,
id
,
top
,
parentTag
){
var
positionTop
=
parseInt
(
$
(
it
).
position
().
top
);
if
(
parentTag
){
positionTop
=
parseInt
(
$
(
it
).
parents
(
parentTag
).
position
().
top
)}
if
(
$
(
"
#commentRef
"
+
id
).
length
>
0
){
$
(
"
#commentRef
"
+
id
).
show
().
css
(
"
top
"
,(
positionTop
+
top
)
+
"
px
"
)}
else
{
var
$refComment
=
$
(
"
#
"
+
id
).
clone
();
$refComment
.
addClass
(
"
comment-body-ref
"
).
attr
(
"
id
"
,
"
commentRef
"
+
id
);
$refComment
.
find
(
"
#replyForm
"
).
remove
();
$
(
"
#comments
"
).
append
(
$refComment
);
$
(
"
#commentRef
"
+
id
).
css
(
"
top
"
,(
positionTop
+
top
)
+
"
px
"
)}},
addCommentAjax
:
function
(
commentHTML
,
state
){
if
(
$
(
"
#comments
"
).
children
().
length
>
0
){
$
(
$
(
"
#comments
"
).
children
()[
0
]).
before
(
commentHTML
)}
else
{
$
(
"
#comments
"
).
html
(
commentHTML
)}
if
(
state
===
""
){
$
(
"
#commentErrorTip
"
).
html
(
""
).
hide
();
$
(
"
#comment
"
).
val
(
""
);
$
(
"
#commentValidate
"
).
val
(
""
);
$
(
"
#captcha
"
).
attr
(
"
src
"
,
latkeConfig
.
servePath
+
"
/captcha?code=
"
+
Math
.
random
())}
else
{
$
(
"
#replyForm
"
).
remove
()}
window
.
location
.
hash
=
"
#comments
"
}});
\ No newline at end of file
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