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
d556be44
Commit
d556be44
authored
Sep 16, 2015
by
Van
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add file upload function
养宝宝不容易啊,终于抽出时间打
🐎
了
parent
b3314020
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
1020 additions
and
1045 deletions
+1020
-1045
war/src/main/resources/lang_en_US.properties
war/src/main/resources/lang_en_US.properties
+2
-1
war/src/main/resources/lang_zh_CN.properties
war/src/main/resources/lang_zh_CN.properties
+2
-1
war/src/main/webapp/admin-article.ftl
war/src/main/webapp/admin-article.ftl
+6
-0
war/src/main/webapp/admin-index.ftl
war/src/main/webapp/admin-index.ftl
+3
-0
war/src/main/webapp/js/admin/article.js
war/src/main/webapp/js/admin/article.js
+34
-1
war/src/main/webapp/js/admin/latkeAdmin.js
war/src/main/webapp/js/admin/latkeAdmin.js
+662
-662
war/src/main/webapp/js/lib/KindEditor/plugins/image/image.js
war/src/main/webapp/js/lib/KindEditor/plugins/image/image.js
+310
-322
war/src/main/webapp/js/lib/tiny_mce/plugins/advimage/image.htm
...rc/main/webapp/js/lib/tiny_mce/plugins/advimage/image.htm
+1
-13
war/src/main/webapp/js/lib/tiny_mce/plugins/advimage/js/image.js
.../main/webapp/js/lib/tiny_mce/plugins/advimage/js/image.js
+0
-45
No files found.
war/src/main/resources/lang_en_US.properties
View file @
d556be44
...
...
@@ -16,12 +16,13 @@
#
# Description: Solo language configurations(en_US).
# Version: 2.
4.2.3, Sep 12
, 2015
# Version: 2.
5.2.3, Sep 16
, 2015
# Author: Liang Ding
# Author: Liyuan Li
# Author: Dongxu Wang
#
uploadFileLabel
=
Upload()
\u
ff08Please add the QiNiu link to the reference
\u
ff09
accessKey1Label
=
Access Key:
secretKey1Label
=
Secret Key:
domain1Label
=
\u
57df
\u
540d:
...
...
war/src/main/resources/lang_zh_CN.properties
View file @
d556be44
...
...
@@ -16,12 +16,13 @@
#
# Description: Solo default language configurations(zh_CN).
# Version: 2.
4.4.11, Sep 12
, 2015
# Version: 2.
5.4.11, Sep 16
, 2015
# Author: Liang Ding
# Author: Liyuan Li
# Author: Dongxu Wang
#
uploadFileLabel
=
\u6587\u
4ef6
\u
4e0a
\u
4f20
\u
ff08
\u
8bf7
\u
5c06
\u
751f
\u6210\u7684\u
4e03
\u
725b
\u
94fe
\u
63a5
\u
6dfb
\u
52a0
\u5230\u
5f15
\u7528\u5904\u
ff09
accessKey1Label
=
Access Key
\u
ff1a
secretKey1Label
=
Secret Key
\u
ff1a
domain1Label
=
\u
57df
\u
540d
\u
ff1a
...
...
war/src/main/webapp/admin-article.ftl
View file @
d556be44
...
...
@@ -10,6 +10,12 @@
<textarea id="articleContent" name="articleContent"
style="height: 500px;width:100%;"></textarea>
</div>
<div>
<label>${uploadFileLabel}</label>
<form id="articleUpload" method="POST" enctype="multipart/form-data">
<input type="file" name="file" multiple=""/>
</form>
</div>
<div>
<label>${tags1WithTips1Label}</label>
<input id="tag" type="text"/>
...
...
war/src/main/webapp/admin-index.ftl
View file @
d556be44
...
...
@@ -130,6 +130,9 @@
</div>
</div>
<script
src=
"${staticServePath}/js/lib/jquery/jquery.min.js"
></script>
<script
src=
"${staticServePath}/js/lib/jquery/file-upload-9.10.1/vendor/jquery.ui.widget.js"
></script>
<script
src=
"${staticServePath}/js/lib/jquery/file-upload-9.10.1/jquery.iframe-transport.js"
></script>
<script
src=
"${staticServePath}/js/lib/jquery/file-upload-9.10.1/jquery.fileupload.js"
></script>
<script
src=
"${staticServePath}/js/lib/jquery/jquery.bowknot.min.js?${staticResourceVersion}"
></script>
<script
src=
"${servePath}/js/lib/tiny_mce/tiny_mce.js"
></script>
<script
src=
"${staticServePath}/js/lib/KindEditor/kindeditor-min.js"
></script>
...
...
war/src/main/webapp/js/admin/article.js
View file @
d556be44
...
...
@@ -18,7 +18,7 @@
*
* @author <a href="http://vanessa.b3log.org">Liyuan Li</a>
* @author <a href="http://88250.b3log.org">Liang Ding</a>
* @version 1.
1.3.3, May 30
, 2015
* @version 1.
2.3.3, Sep 16
, 2015
*/
admin
.
article
=
{
currentEditorType
:
''
,
...
...
@@ -439,6 +439,39 @@ admin.article = {
}
});
// upload
var
qiniu
=
window
.
qiniu
;
$
(
'
#articleUpload
'
).
fileupload
({
multipart
:
true
,
url
:
"
http://upload.qiniu.com/
"
,
formData
:
function
(
form
)
{
var
data
=
form
.
serializeArray
();
data
.
push
({
name
:
'
token
'
,
value
:
qiniu
.
qiniuUploadToken
});
return
data
;
},
done
:
function
(
e
,
data
)
{
var
qiniuKey
=
data
.
result
.
key
;
if
(
!
qiniuKey
)
{
alert
(
"
Upload error
"
);
return
;
}
var
t
=
new
Date
().
getTime
();
$
(
'
#articleUpload
'
).
after
(
'
<div><a target="_blank" href="http://
'
+
qiniu
.
qiniuDomain
+
qiniuKey
+
'
?
'
+
t
+
'
">[
'
+
data
.
files
[
0
].
name
+
'
]</a> http://
'
+
qiniu
.
qiniuDomain
+
qiniuKey
+
'
?
'
+
t
+
'
</div>
'
);
},
fail
:
function
(
e
,
data
)
{
alert
(
"
Upload error:
"
+
data
.
errorThrown
);
}
}).
on
(
'
fileuploadprocessalways
'
,
function
(
e
,
data
)
{
var
currentFile
=
data
.
files
[
data
.
index
];
if
(
data
.
files
.
error
&&
currentFile
.
error
)
{
alert
(
currentFile
.
error
);
}
});
// editor
admin
.
editors
.
articleEditor
=
new
Editor
({
id
:
"
articleContent
"
,
...
...
war/src/main/webapp/js/admin/latkeAdmin.js
View file @
d556be44
...
...
@@ -2814,309 +2814,309 @@ admin.register["link-list"] = {
"
obj
"
:
admin
.
linkList
,
"
init
"
:
admin
.
linkList
.
init
,
"
refresh
"
:
admin
.
linkList
.
getList
}
/*
* Copyright (c) 2010-2015, b3log.org
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* preference for admin.
*
* @author <a href="http://vanessa.b3log.org">Liyuan Li</a>
* @author <a href="http://88250.b3log.org">Liang Ding</a>
* @version 1.1.1.8, Sep 12, 2015
*/
/* preference 相关操作 */
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
);
$
(
"
#htmlHead
"
).
val
(
preference
.
htmlHead
);
$
(
"
#externalRelevantArticlesDisplayCount
"
).
val
(
preference
.
externalRelevantArticlesDisplayCount
);
$
(
"
#relevantArticlesDisplayCount
"
).
val
(
preference
.
relevantArticlesDisplayCount
);
$
(
"
#randomArticlesDisplayCount
"
).
val
(
preference
.
randomArticlesDisplayCount
);
$
(
"
#keyOfSolo
"
).
val
(
preference
.
keyOfSolo
);
preference
.
enableArticleUpdateHint
?
$
(
"
#enableArticleUpdateHint
"
).
attr
(
"
checked
"
,
"
checked
"
)
:
$
(
"
#enableArticleUpdateHint
"
).
removeAttr
(
"
checked
"
);
preference
.
allowVisitDraftViaPermalink
?
$
(
"
#allowVisitDraftViaPermalink
"
).
attr
(
"
checked
"
,
"
checked
"
)
:
$
(
"
allowVisitDraftViaPermalink
"
).
removeAttr
(
"
checked
"
);
admin
.
preference
.
locale
=
preference
.
localeString
;
admin
.
preference
.
editorType
=
preference
.
editorType
;
// skin
$
(
"
#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
);
});
// sign
var
signs
=
eval
(
'
(
'
+
preference
.
signs
+
'
)
'
);
for
(
var
j
=
1
;
j
<
signs
.
length
;
j
++
)
{
$
(
"
#preferenceSign
"
+
j
).
val
(
signs
[
j
].
signHTML
);
$
(
"
#preferenceSignButton
"
+
j
).
tip
({
content
:
signs
[
j
].
signHTML
===
""
?
Label
.
signIsNullLabel
:
signs
[
j
].
signHTML
.
replace
(
/
\n
/g
,
""
).
replace
(
/<script.*<
\/
script>/ig
,
""
),
position
:
"
bottom
"
});
}
// Article list style
$
(
"
#articleListDisplay
"
).
val
(
preference
.
articleListStyle
);
// Editor Type
$
(
"
#editorType
"
).
val
(
preference
.
editorType
);
// Feed output
$
(
"
#feedOutputMode
"
).
val
(
preference
.
feedOutputMode
);
$
(
"
#feedOutputCnt
"
).
val
(
preference
.
feedOutputCnt
);
// Commentable
preference
.
commentable
?
$
(
"
#commentable
"
).
attr
(
"
checked
"
,
"
checked
"
)
:
$
(
"
commentable
"
).
removeAttr
(
"
checked
"
);
$
(
"
#loadMsg
"
).
text
(
""
);
}
});
$
.
ajax
({
url
:
latkeConfig
.
servePath
+
"
/console/preference/qiniu
"
,
type
:
"
GET
"
,
cache
:
false
,
success
:
function
(
result
,
textStatus
)
{
$
(
"
#tipMsg
"
).
text
(
result
.
msg
);
if
(
!
result
.
sc
)
{
$
(
"
#loadMsg
"
).
text
(
""
);
return
;
}
$
(
"
#qiniuAccessKey
"
).
val
(
result
.
qiniu
.
qiniuAccessKey
);
$
(
"
#qiniuSecretKey
"
).
val
(
result
.
qiniu
.
qiniuSecretKey
);
$
(
"
#qiniuDomain
"
).
val
(
result
.
qiniu
.
qiniuDomain
);
$
(
"
#qiniuBucket
"
).
val
(
result
.
qiniu
.
qiniuBucket
);
}
});
},
/*
* @description 参数校验
*/
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
;
},
/*
* @description 更新
*/
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
(),
"
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
"
)
}
};
$
.
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
();
}
// update article and preferences signs
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
,
""
));
}
$
(
"
#preferenceSignButton
"
+
signs
[
i
].
oId
).
tip
(
"
option
"
,
"
content
"
,
signs
[
i
].
signHTML
===
""
?
Label
.
signIsNullLabel
:
signs
[
i
].
signHTML
.
replace
(
/
\n
/g
,
""
).
replace
(
/<script.*<
\/
script>/ig
,
""
));
}
$
(
"
#loadMsg
"
).
text
(
""
);
}
});
},
/*
* @description 更新 Qiniu 参数
*/
updateQiniu
:
function
()
{
$
(
"
#tipMsg
"
).
text
(
""
);
$
(
"
#loadMsg
"
).
text
(
Label
.
loadingLabel
);
var
requestJSONObject
=
{
"
qiniuAccessKey
"
:
$
(
"
#qiniuAccessKey
"
).
val
(),
"
qiniuSecretKey
"
:
$
(
"
#qiniuSecretKey
"
).
val
(),
"
qiniuDomain
"
:
$
(
"
#qiniuDomain
"
).
val
(),
"
qiniuBucket
"
:
$
(
"
#qiniuBucket
"
).
val
()
};
$
.
ajax
({
url
:
latkeConfig
.
servePath
+
"
/console/preference/qiniu
"
,
type
:
"
PUT
"
,
cache
:
false
,
data
:
JSON
.
stringify
(
requestJSONObject
),
success
:
function
(
result
,
textStatus
)
{
$
(
"
#tipMsg
"
).
text
(
result
.
msg
);
$
(
"
#loadMsg
"
).
text
(
""
);
}
});
}
};
/*
* 注册到 admin 进行管理
*/
admin
.
register
[
"
preference
"
]
=
{
"
obj
"
:
admin
.
preference
,
"
init
"
:
admin
.
preference
.
init
,
"
refresh
"
:
function
()
{
admin
.
clearTip
();
}
};
}
/*
* Copyright (c) 2010-2015, b3log.org
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* preference for admin.
*
* @author <a href="http://vanessa.b3log.org">Liyuan Li</a>
* @author <a href="http://88250.b3log.org">Liang Ding</a>
* @version 1.1.1.8, Sep 12, 2015
*/
/* preference 相关操作 */
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
);
$
(
"
#htmlHead
"
).
val
(
preference
.
htmlHead
);
$
(
"
#externalRelevantArticlesDisplayCount
"
).
val
(
preference
.
externalRelevantArticlesDisplayCount
);
$
(
"
#relevantArticlesDisplayCount
"
).
val
(
preference
.
relevantArticlesDisplayCount
);
$
(
"
#randomArticlesDisplayCount
"
).
val
(
preference
.
randomArticlesDisplayCount
);
$
(
"
#keyOfSolo
"
).
val
(
preference
.
keyOfSolo
);
preference
.
enableArticleUpdateHint
?
$
(
"
#enableArticleUpdateHint
"
).
attr
(
"
checked
"
,
"
checked
"
)
:
$
(
"
#enableArticleUpdateHint
"
).
removeAttr
(
"
checked
"
);
preference
.
allowVisitDraftViaPermalink
?
$
(
"
#allowVisitDraftViaPermalink
"
).
attr
(
"
checked
"
,
"
checked
"
)
:
$
(
"
allowVisitDraftViaPermalink
"
).
removeAttr
(
"
checked
"
);
admin
.
preference
.
locale
=
preference
.
localeString
;
admin
.
preference
.
editorType
=
preference
.
editorType
;
// skin
$
(
"
#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
);
});
// sign
var
signs
=
eval
(
'
(
'
+
preference
.
signs
+
'
)
'
);
for
(
var
j
=
1
;
j
<
signs
.
length
;
j
++
)
{
$
(
"
#preferenceSign
"
+
j
).
val
(
signs
[
j
].
signHTML
);
$
(
"
#preferenceSignButton
"
+
j
).
tip
({
content
:
signs
[
j
].
signHTML
===
""
?
Label
.
signIsNullLabel
:
signs
[
j
].
signHTML
.
replace
(
/
\n
/g
,
""
).
replace
(
/<script.*<
\/
script>/ig
,
""
),
position
:
"
bottom
"
});
}
// Article list style
$
(
"
#articleListDisplay
"
).
val
(
preference
.
articleListStyle
);
// Editor Type
$
(
"
#editorType
"
).
val
(
preference
.
editorType
);
// Feed output
$
(
"
#feedOutputMode
"
).
val
(
preference
.
feedOutputMode
);
$
(
"
#feedOutputCnt
"
).
val
(
preference
.
feedOutputCnt
);
// Commentable
preference
.
commentable
?
$
(
"
#commentable
"
).
attr
(
"
checked
"
,
"
checked
"
)
:
$
(
"
commentable
"
).
removeAttr
(
"
checked
"
);
$
(
"
#loadMsg
"
).
text
(
""
);
}
});
$
.
ajax
({
url
:
latkeConfig
.
servePath
+
"
/console/preference/qiniu
"
,
type
:
"
GET
"
,
cache
:
false
,
success
:
function
(
result
,
textStatus
)
{
$
(
"
#tipMsg
"
).
text
(
result
.
msg
);
if
(
!
result
.
sc
)
{
$
(
"
#loadMsg
"
).
text
(
""
);
return
;
}
$
(
"
#qiniuAccessKey
"
).
val
(
result
.
qiniu
.
qiniuAccessKey
);
$
(
"
#qiniuSecretKey
"
).
val
(
result
.
qiniu
.
qiniuSecretKey
);
$
(
"
#qiniuDomain
"
).
val
(
result
.
qiniu
.
qiniuDomain
);
$
(
"
#qiniuBucket
"
).
val
(
result
.
qiniu
.
qiniuBucket
);
}
});
},
/*
* @description 参数校验
*/
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
;
},
/*
* @description 更新
*/
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
(),
"
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
"
)
}
};
$
.
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
();
}
// update article and preferences signs
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
,
""
));
}
$
(
"
#preferenceSignButton
"
+
signs
[
i
].
oId
).
tip
(
"
option
"
,
"
content
"
,
signs
[
i
].
signHTML
===
""
?
Label
.
signIsNullLabel
:
signs
[
i
].
signHTML
.
replace
(
/
\n
/g
,
""
).
replace
(
/<script.*<
\/
script>/ig
,
""
));
}
$
(
"
#loadMsg
"
).
text
(
""
);
}
});
},
/*
* @description 更新 Qiniu 参数
*/
updateQiniu
:
function
()
{
$
(
"
#tipMsg
"
).
text
(
""
);
$
(
"
#loadMsg
"
).
text
(
Label
.
loadingLabel
);
var
requestJSONObject
=
{
"
qiniuAccessKey
"
:
$
(
"
#qiniuAccessKey
"
).
val
(),
"
qiniuSecretKey
"
:
$
(
"
#qiniuSecretKey
"
).
val
(),
"
qiniuDomain
"
:
$
(
"
#qiniuDomain
"
).
val
(),
"
qiniuBucket
"
:
$
(
"
#qiniuBucket
"
).
val
()
};
$
.
ajax
({
url
:
latkeConfig
.
servePath
+
"
/console/preference/qiniu
"
,
type
:
"
PUT
"
,
cache
:
false
,
data
:
JSON
.
stringify
(
requestJSONObject
),
success
:
function
(
result
,
textStatus
)
{
$
(
"
#tipMsg
"
).
text
(
result
.
msg
);
$
(
"
#loadMsg
"
).
text
(
""
);
}
});
}
};
/*
* 注册到 admin 进行管理
*/
admin
.
register
[
"
preference
"
]
=
{
"
obj
"
:
admin
.
preference
,
"
init
"
:
admin
.
preference
.
init
,
"
refresh
"
:
function
()
{
admin
.
clearTip
();
}
};
/*
* Copyright (c) 2010-2015, b3log.org
*
...
...
@@ -3293,365 +3293,365 @@ admin.register["plugin-list"] = {
admin
.
claerTip
();
}
};
/*
* Copyright (c) 2010-2015, b3log.org
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* user list for admin
*
* @author <a href="http://vanessa.b3log.org">Liyuan Li</a>
* @author <a href="http://88250.b3log.org">Liang Ding</a>
* @version 1.0.1.7, May 28, 2013
*/
/* user-list 相关操作 */
admin
.
userList
=
{
tablePagination
:
new
TablePaginate
(
"
user
"
),
pageInfo
:
{
currentCount
:
1
,
pageCount
:
1
,
currentPage
:
1
},
userInfo
:
{
'
oId
'
:
""
,
"
userRole
"
:
""
},
/*
* 初始化 table, pagination
*/
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
:
230
,
"
modal
"
:
true
,
"
hideFooter
"
:
true
});
},
/*
* 根据当前页码获取列表
* @pagNum 当前页码
*/
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
+
"
', '
"
+
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
()
};
$
.
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
(
""
);
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
(
""
);
}
});
}
},
/*
* 获取用户
* @id 用户 id
*/
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
);
if
(
"
adminRole
"
===
userRole
)
{
$userEmailUpdate
.
attr
(
"
disabled
"
,
"
disabled
"
);
}
else
{
$userEmailUpdate
.
removeAttr
(
"
disabled
"
);
}
$
(
"
#userURLUpdate
"
).
val
(
result
.
user
.
userURL
);
$
(
"
#userPasswordUpdate
"
).
val
(
result
.
user
.
userPassword
);
$
(
"
#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
()
};
$
.
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
(
""
);
}
});
}
},
/*
* 删除用户
* @id 用户 id
* @userName 用户名称
*/
del
:
function
(
id
,
userName
)
{
var
isDelete
=
confirm
(
Label
.
confirmRemoveLabel
+
Label
.
userLabel
+
'
"
'
+
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
(
""
);
}
});
}
},
/**
* 修改角色
* @param id
*/
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
(
""
);
}
});
},
/*
* 验证字段
* @status 更新或者添加时进行验证
*/
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 进行管理
*/
admin
.
register
[
"
user-list
"
]
=
{
"
obj
"
:
admin
.
userList
,
"
init
"
:
admin
.
userList
.
init
,
"
refresh
"
:
function
()
{
admin
.
clearTip
();
}
/*
* Copyright (c) 2010-2015, b3log.org
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* user list for admin
*
* @author <a href="http://vanessa.b3log.org">Liyuan Li</a>
* @author <a href="http://88250.b3log.org">Liang Ding</a>
* @version 1.0.1.7, May 28, 2013
*/
/* user-list 相关操作 */
admin
.
userList
=
{
tablePagination
:
new
TablePaginate
(
"
user
"
),
pageInfo
:
{
currentCount
:
1
,
pageCount
:
1
,
currentPage
:
1
},
userInfo
:
{
'
oId
'
:
""
,
"
userRole
"
:
""
},
/*
* 初始化 table, pagination
*/
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
:
230
,
"
modal
"
:
true
,
"
hideFooter
"
:
true
});
},
/*
* 根据当前页码获取列表
* @pagNum 当前页码
*/
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
+
"
', '
"
+
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
()
};
$
.
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
(
""
);
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
(
""
);
}
});
}
},
/*
* 获取用户
* @id 用户 id
*/
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
);
if
(
"
adminRole
"
===
userRole
)
{
$userEmailUpdate
.
attr
(
"
disabled
"
,
"
disabled
"
);
}
else
{
$userEmailUpdate
.
removeAttr
(
"
disabled
"
);
}
$
(
"
#userURLUpdate
"
).
val
(
result
.
user
.
userURL
);
$
(
"
#userPasswordUpdate
"
).
val
(
result
.
user
.
userPassword
);
$
(
"
#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
()
};
$
.
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
(
""
);
}
});
}
},
/*
* 删除用户
* @id 用户 id
* @userName 用户名称
*/
del
:
function
(
id
,
userName
)
{
var
isDelete
=
confirm
(
Label
.
confirmRemoveLabel
+
Label
.
userLabel
+
'
"
'
+
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
(
""
);
}
});
}
},
/**
* 修改角色
* @param id
*/
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
(
""
);
}
});
},
/*
* 验证字段
* @status 更新或者添加时进行验证
*/
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 进行管理
*/
admin
.
register
[
"
user-list
"
]
=
{
"
obj
"
:
admin
.
userList
,
"
init
"
:
admin
.
userList
.
init
,
"
refresh
"
:
function
()
{
admin
.
clearTip
();
}
}
/*
* Copyright (c) 2010-2015, b3log.org
*
...
...
war/src/main/webapp/js/lib/KindEditor/plugins/image/image.js
View file @
d556be44
/*******************************************************************************
* KindEditor - WYSIWYG HTML Editor for Internet
* Copyright (C) 2006-2011 kindsoft.net
*
* @author Roddy <luolonghao@gmail.com>
* @site http://www.kindsoft.net/
* @licence http://www.kindsoft.net/license.php
*******************************************************************************/
* KindEditor - WYSIWYG HTML Editor for Internet
* Copyright (C) 2006-2011 kindsoft.net
*
* @author Roddy <luolonghao@gmail.com>
* @site http://www.kindsoft.net/
* @licence http://www.kindsoft.net/license.php
*******************************************************************************/
KindEditor
.
plugin
(
'
image
'
,
function
(
K
)
{
var
self
=
this
,
name
=
'
image
'
,
allowImageUpload
=
K
.
undef
(
self
.
allowImageUpload
,
true
),
allowImageRemote
=
K
.
undef
(
self
.
allowImageRemote
,
true
),
formatUploadUrl
=
K
.
undef
(
self
.
formatUploadUrl
,
true
),
allowFileManager
=
K
.
undef
(
self
.
allowFileManager
,
false
),
uploadJson
=
K
.
undef
(
self
.
uploadJson
,
self
.
basePath
+
'
php/upload_json.php
'
),
imageTabIndex
=
K
.
undef
(
self
.
imageTabIndex
,
0
),
imgPath
=
self
.
pluginsPath
+
'
image/images/
'
,
extraParams
=
K
.
undef
(
self
.
extraFileUploadParams
,
{}),
filePostName
=
K
.
undef
(
self
.
filePostName
,
'
imgFile
'
),
fillDescAfterUploadImage
=
K
.
undef
(
self
.
fillDescAfterUploadImage
,
false
),
lang
=
self
.
lang
(
name
+
'
.
'
);
KindEditor
.
plugin
(
'
image
'
,
function
(
K
)
{
var
self
=
this
,
name
=
'
image
'
,
allowImageUpload
=
K
.
undef
(
self
.
allowImageUpload
,
true
),
formatUploadUrl
=
K
.
undef
(
self
.
formatUploadUrl
,
true
),
allowFileManager
=
K
.
undef
(
self
.
allowFileManager
,
false
),
uploadJson
=
K
.
undef
(
self
.
uploadJson
,
self
.
basePath
+
'
php/upload_json.php
'
),
imageTabIndex
=
K
.
undef
(
self
.
imageTabIndex
,
0
),
imgPath
=
self
.
pluginsPath
+
'
image/images/
'
,
extraParams
=
K
.
undef
(
self
.
extraFileUploadParams
,
{}),
filePostName
=
K
.
undef
(
self
.
filePostName
,
'
imgFile
'
),
fillDescAfterUploadImage
=
K
.
undef
(
self
.
fillDescAfterUploadImage
,
false
),
lang
=
self
.
lang
(
name
+
'
.
'
);
self
.
plugin
.
imageDialog
=
function
(
options
)
{
var
imageUrl
=
options
.
imageUrl
,
imageWidth
=
K
.
undef
(
options
.
imageWidth
,
''
),
imageHeight
=
K
.
undef
(
options
.
imageHeight
,
''
),
imageTitle
=
K
.
undef
(
options
.
imageTitle
,
''
),
imageAlign
=
K
.
undef
(
options
.
imageAlign
,
''
),
showRemote
=
K
.
undef
(
options
.
showRemote
,
true
),
showLocal
=
K
.
undef
(
options
.
showLocal
,
true
),
tabIndex
=
K
.
undef
(
options
.
tabIndex
,
0
),
clickFn
=
options
.
clickFn
;
var
target
=
'
kindeditor_upload_iframe_
'
+
new
Date
().
getTime
();
var
hiddenElements
=
[];
for
(
var
k
in
extraParams
)
{
hiddenElements
.
push
(
'
<input type="hidden" name="
'
+
k
+
'
" value="
'
+
extraParams
[
k
]
+
'
" />
'
);
}
var
html
=
[
'
<div style="padding:20px;">
'
,
//tabs
'
<div class="tabs"></div>
'
,
//remote image - start
'
<div class="tab1" style="display:none;">
'
,
//url
'
<div class="ke-dialog-row">
'
,
'
<label for="remoteUrl" style="width:60px;">
'
+
lang
.
remoteUrl
+
'
</label>
'
,
'
<input type="text" id="remoteUrl" class="ke-input-text" name="url" value="" style="width:200px;" />
'
,
'
<span class="ke-button-common ke-button-outer">
'
,
'
<input type="button" class="ke-button-common ke-button" name="viewServer" value="
'
+
lang
.
viewServer
+
'
" />
'
,
'
</span>
'
,
'
</div>
'
,
//size
'
<div class="ke-dialog-row">
'
,
'
<label for="remoteWidth" style="width:60px;">
'
+
lang
.
size
+
'
</label>
'
,
lang
.
width
+
'
<input type="text" id="remoteWidth" class="ke-input-text ke-input-number" name="width" value="" maxlength="4" />
'
,
lang
.
height
+
'
<input type="text" class="ke-input-text ke-input-number" name="height" value="" maxlength="4" />
'
,
'
<img class="ke-refresh-btn" src="
'
+
imgPath
+
'
refresh.png" width="16" height="16" alt="" style="cursor:pointer;" title="
'
+
lang
.
resetSize
+
'
" />
'
,
'
</div>
'
,
//align
'
<div class="ke-dialog-row">
'
,
'
<label style="width:60px;">
'
+
lang
.
align
+
'
</label>
'
,
'
<input type="radio" name="align" class="ke-inline-block" value="" checked="checked" /> <img name="defaultImg" src="
'
+
imgPath
+
'
align_top.gif" width="23" height="25" alt="" />
'
,
'
<input type="radio" name="align" class="ke-inline-block" value="left" /> <img name="leftImg" src="
'
+
imgPath
+
'
align_left.gif" width="23" height="25" alt="" />
'
,
'
<input type="radio" name="align" class="ke-inline-block" value="right" /> <img name="rightImg" src="
'
+
imgPath
+
'
align_right.gif" width="23" height="25" alt="" />
'
,
'
</div>
'
,
//title
'
<div class="ke-dialog-row">
'
,
'
<label for="remoteTitle" style="width:60px;">
'
+
lang
.
imgTitle
+
'
</label>
'
,
'
<input type="text" id="remoteTitle" class="ke-input-text" name="title" value="" style="width:200px;" />
'
,
'
</div>
'
,
'
</div>
'
,
//remote image - end
//local upload - start
'
<div class="tab2" style="display:none;
">
'
,
'
<iframe name="
'
+
target
+
'
" style="display:none;
"></iframe>
'
,
'
<form class="ke-upload-area ke-form" method="post" enctype="multipart/form-data" target="
'
+
target
+
'
" action="
'
+
K
.
addParam
(
uploadJson
,
'
dir=image
'
)
+
'
">
'
,
//file
'
<div class="ke-dialog-row">
'
,
hiddenElements
.
join
(
''
),
'
<label style="width:60px;">
'
+
lang
.
localUrl
+
'
</label>
'
,
'
<input type="text" name="localUrl" class="ke-input-text" tabindex="-1" style="width:200px;" readonly="true" />
'
,
'
<input type="button" class="ke-upload-button" value="
'
+
lang
.
upload
+
'
" />
'
,
'
</div>
'
,
'
</form>
'
,
'
</div>
'
,
//local upload - end
'
</div>
'
].
join
(
''
);
var
dialogWidth
=
showLocal
||
allowFileManager
?
450
:
400
,
dialogHeight
=
showLocal
&&
showRemote
?
300
:
250
;
var
dialog
=
self
.
createDialog
({
name
:
name
,
width
:
dialogWidth
,
height
:
dialogHeight
,
title
:
self
.
lang
(
name
),
body
:
html
,
yesBtn
:
{
name
:
self
.
lang
(
'
yes
'
),
click
:
function
(
e
)
{
// Bugfix: http://code.google.com/p/kindeditor/issues/detail?id=319
if
(
dialog
.
isLoading
)
{
return
;
}
// insert local image
if
(
showLocal
&&
showRemote
&&
tabs
&&
tabs
.
selectedIndex
===
1
||
!
showRemote
)
{
if
(
uploadbutton
.
fileBox
.
val
()
==
''
)
{
alert
(
self
.
lang
(
'
pleaseSelectFile
'
));
return
;
}
dialog
.
showLoading
(
self
.
lang
(
'
uploadLoading
'
));
uploadbutton
.
submit
();
localUrlBox
.
val
(
''
);
return
;
}
// insert remote image
var
url
=
K
.
trim
(
urlBox
.
val
()),
width
=
widthBox
.
val
(),
height
=
heightBox
.
val
(),
title
=
titleBox
.
val
(),
align
=
''
;
alignBox
.
each
(
function
()
{
if
(
this
.
checked
)
{
align
=
this
.
value
;
return
false
;
}
});
if
(
url
==
'
http://
'
||
K
.
invalidUrl
(
url
))
{
alert
(
self
.
lang
(
'
invalidUrl
'
));
urlBox
[
0
].
focus
();
return
;
}
if
(
!
/^
\d
*$/
.
test
(
width
))
{
alert
(
self
.
lang
(
'
invalidWidth
'
));
widthBox
[
0
].
focus
();
return
;
}
if
(
!
/^
\d
*$/
.
test
(
height
))
{
alert
(
self
.
lang
(
'
invalidHeight
'
));
heightBox
[
0
].
focus
();
return
;
}
clickFn
.
call
(
self
,
url
,
title
,
width
,
height
,
0
,
align
);
}
},
beforeRemove
:
function
()
{
viewServerBtn
.
unbind
();
widthBox
.
unbind
();
heightBox
.
unbind
();
refreshBtn
.
unbind
();
}
}),
div
=
dialog
.
div
;
self
.
plugin
.
imageDialog
=
function
(
options
)
{
var
imageUrl
=
options
.
imageUrl
,
imageWidth
=
K
.
undef
(
options
.
imageWidth
,
''
),
imageHeight
=
K
.
undef
(
options
.
imageHeight
,
''
),
imageTitle
=
K
.
undef
(
options
.
imageTitle
,
''
),
imageAlign
=
K
.
undef
(
options
.
imageAlign
,
''
),
showRemote
=
K
.
undef
(
options
.
showRemote
,
true
),
showLocal
=
K
.
undef
(
options
.
showLocal
,
true
),
tabIndex
=
K
.
undef
(
options
.
tabIndex
,
0
),
clickFn
=
options
.
clickFn
;
var
target
=
'
kindeditor_upload_iframe_
'
+
new
Date
().
getTime
();
var
hiddenElements
=
[];
for
(
var
k
in
extraParams
)
{
hiddenElements
.
push
(
'
<input type="hidden" name="
'
+
k
+
'
" value="
'
+
extraParams
[
k
]
+
'
" />
'
);
}
var
html
=
[
'
<div style="padding:20px;">
'
,
//tabs
'
<div class="tabs"></div>
'
,
//remote image - start
'
<div class="tab1" style="display:none;">
'
,
//url
'
<div class="ke-dialog-row">
'
,
'
<label for="remoteUrl" style="width:60px;">
'
+
lang
.
remoteUrl
+
'
</label>
'
,
'
<input type="text" id="remoteUrl" class="ke-input-text" name="url" value="" style="width:200px;" />
'
,
'
<span class="ke-button-common ke-button-outer">
'
,
'
<input type="button" class="ke-button-common ke-button" name="viewServer" value="
'
+
lang
.
viewServer
+
'
" />
'
,
'
</span>
'
,
'
</div>
'
,
//size
'
<div class="ke-dialog-row">
'
,
'
<label for="remoteWidth" style="width:60px;">
'
+
lang
.
size
+
'
</label>
'
,
lang
.
width
+
'
<input type="text" id="remoteWidth" class="ke-input-text ke-input-number" name="width" value="" maxlength="4" />
'
,
lang
.
height
+
'
<input type="text" class="ke-input-text ke-input-number" name="height" value="" maxlength="4" />
'
,
'
<img class="ke-refresh-btn" src="
'
+
imgPath
+
'
refresh.png" width="16" height="16" alt="" style="cursor:pointer;" title="
'
+
lang
.
resetSize
+
'
" />
'
,
'
</div>
'
,
//align
'
<div class="ke-dialog-row">
'
,
'
<label style="width:60px;">
'
+
lang
.
align
+
'
</label>
'
,
'
<input type="radio" name="align" class="ke-inline-block" value="" checked="checked" /> <img name="defaultImg" src="
'
+
imgPath
+
'
align_top.gif" width="23" height="25" alt="" />
'
,
'
<input type="radio" name="align" class="ke-inline-block" value="left" /> <img name="leftImg" src="
'
+
imgPath
+
'
align_left.gif" width="23" height="25" alt="" />
'
,
'
<input type="radio" name="align" class="ke-inline-block" value="right" /> <img name="rightImg" src="
'
+
imgPath
+
'
align_right.gif" width="23" height="25" alt="" />
'
,
'
</div>
'
,
//title
'
<div class="ke-dialog-row">
'
,
'
<label for="remoteTitle" style="width:60px;">
'
+
lang
.
imgTitle
+
'
</label>
'
,
'
<input type="text" id="remoteTitle" class="ke-input-text" name="title" value="" style="width:200px;" />
'
,
'
</div>
'
,
'
</div>
'
,
//remote image - end
//local upload - start
'
<div class="tab2
">
'
,
'
<iframe name="
'
+
target
+
'
"></iframe>
'
,
'
<form class="ke-upload-area ke-form" method="post" enctype="multipart/form-data" target="
'
+
target
+
'
" action="
'
+
K
.
addParam
(
uploadJson
,
'
dir=image
'
)
+
'
">
'
,
//file
'
<div class="ke-dialog-row">
'
,
hiddenElements
.
join
(
''
),
'
<label style="width:60px;">
'
+
lang
.
localUrl
+
'
</label>
'
,
'
<input type="text" name="localUrl" class="ke-input-text" tabindex="-1" style="width:200px;" readonly="true" />
'
,
'
<input type="button" class="ke-upload-button" value="
'
+
lang
.
upload
+
'
" />
'
,
'
</div>
'
,
'
</form>
'
,
'
</div>
'
,
//local upload - end
'
</div>
'
].
join
(
''
);
var
dialogWidth
=
showLocal
||
allowFileManager
?
450
:
400
,
dialogHeight
=
showLocal
&&
showRemote
?
300
:
250
;
var
dialog
=
self
.
createDialog
({
name
:
name
,
width
:
dialogWidth
,
height
:
dialogHeight
,
title
:
self
.
lang
(
name
),
body
:
html
,
yesBtn
:
{
name
:
self
.
lang
(
'
yes
'
),
click
:
function
(
e
)
{
// Bugfix: http://code.google.com/p/kindeditor/issues/detail?id=319
if
(
dialog
.
isLoading
)
{
return
;
}
// insert local image
if
(
showLocal
&&
showRemote
&&
tabs
&&
tabs
.
selectedIndex
===
1
||
!
showRemote
)
{
if
(
uploadbutton
.
fileBox
.
val
()
==
''
)
{
alert
(
self
.
lang
(
'
pleaseSelectFile
'
));
return
;
}
dialog
.
showLoading
(
self
.
lang
(
'
uploadLoading
'
));
uploadbutton
.
submit
();
localUrlBox
.
val
(
''
);
return
;
}
// insert remote image
var
url
=
K
.
trim
(
urlBox
.
val
()),
width
=
widthBox
.
val
(),
height
=
heightBox
.
val
(),
title
=
titleBox
.
val
(),
align
=
''
;
alignBox
.
each
(
function
()
{
if
(
this
.
checked
)
{
align
=
this
.
value
;
return
false
;
}
});
if
(
url
==
'
http://
'
||
K
.
invalidUrl
(
url
))
{
alert
(
self
.
lang
(
'
invalidUrl
'
));
urlBox
[
0
].
focus
();
return
;
}
if
(
!
/^
\d
*$/
.
test
(
width
))
{
alert
(
self
.
lang
(
'
invalidWidth
'
));
widthBox
[
0
].
focus
();
return
;
}
if
(
!
/^
\d
*$/
.
test
(
height
))
{
alert
(
self
.
lang
(
'
invalidHeight
'
));
heightBox
[
0
].
focus
();
return
;
}
clickFn
.
call
(
self
,
url
,
title
,
width
,
height
,
0
,
align
);
}
},
beforeRemove
:
function
()
{
viewServerBtn
.
unbind
();
widthBox
.
unbind
();
heightBox
.
unbind
();
refreshBtn
.
unbind
();
}
}),
div
=
dialog
.
div
;
var
urlBox
=
K
(
'
[name="url"]
'
,
div
),
localUrlBox
=
K
(
'
[name="localUrl"]
'
,
div
),
viewServerBtn
=
K
(
'
[name="viewServer"]
'
,
div
),
widthBox
=
K
(
'
.tab1 [name="width"]
'
,
div
),
heightBox
=
K
(
'
.tab1 [name="height"]
'
,
div
),
refreshBtn
=
K
(
'
.ke-refresh-btn
'
,
div
),
titleBox
=
K
(
'
.tab1 [name="title"]
'
,
div
),
alignBox
=
K
(
'
.tab1 [name="align"]
'
,
div
);
var
urlBox
=
K
(
'
[name="url"]
'
,
div
),
localUrlBox
=
K
(
'
[name="localUrl"]
'
,
div
),
viewServerBtn
=
K
(
'
[name="viewServer"]
'
,
div
),
widthBox
=
K
(
'
.tab1 [name="width"]
'
,
div
),
heightBox
=
K
(
'
.tab1 [name="height"]
'
,
div
),
refreshBtn
=
K
(
'
.ke-refresh-btn
'
,
div
),
titleBox
=
K
(
'
.tab1 [name="title"]
'
,
div
),
alignBox
=
K
(
'
.tab1 [name="align"]
'
,
div
);
var
tabs
;
if
(
showRemote
&&
showLocal
)
{
tabs
=
K
.
tabs
({
src
:
K
(
'
.tabs
'
,
div
),
afterSelect
:
function
(
i
)
{}
});
tabs
.
add
({
title
:
lang
.
remoteImage
,
panel
:
K
(
'
.tab1
'
,
div
)
});
tabs
.
add
({
title
:
lang
.
localImage
,
panel
:
K
(
'
.tab2
'
,
div
)
});
tabs
.
select
(
tabIndex
);
}
else
if
(
showRemote
)
{
K
(
'
.tab1
'
,
div
).
show
();
}
else
if
(
showLocal
)
{
K
(
'
.tab2
'
,
div
).
show
();
}
var
tabs
;
if
(
showRemote
&&
showLocal
)
{
tabs
=
K
.
tabs
({
src
:
K
(
'
.tabs
'
,
div
),
afterSelect
:
function
(
i
)
{}
});
tabs
.
add
({
title
:
lang
.
remoteImage
,
panel
:
K
(
'
.tab1
'
,
div
)
});
//
tabs.add({
// title
: lang.localImage,
// panel
: K('.tab2', div)
//
});
tabs
.
select
(
tabIndex
);
}
else
if
(
showRemote
)
{
K
(
'
.tab1
'
,
div
).
show
();
}
else
if
(
showLocal
)
{
K
(
'
.tab2
'
,
div
).
show
();
}
var
uploadbutton
=
K
.
uploadbutton
({
button
:
K
(
'
.ke-upload-button
'
,
div
)[
0
],
fieldName
:
filePostName
,
form
:
K
(
'
.ke-form
'
,
div
),
target
:
target
,
width
:
60
,
afterUpload
:
function
(
data
)
{
dialog
.
hideLoading
();
if
(
data
.
error
===
0
)
{
var
url
=
data
.
url
;
if
(
formatUploadUrl
)
{
url
=
K
.
formatUrl
(
url
,
'
absolute
'
);
}
if
(
self
.
afterUpload
)
{
self
.
afterUpload
.
call
(
self
,
url
,
data
,
name
);
}
if
(
!
fillDescAfterUploadImage
)
{
clickFn
.
call
(
self
,
url
,
data
.
title
,
data
.
width
,
data
.
height
,
data
.
border
,
data
.
align
);
}
else
{
K
(
"
.ke-dialog-row #remoteUrl
"
,
div
).
val
(
url
);
K
(
"
.ke-tabs-li
"
,
div
)[
0
].
click
();
K
(
"
.ke-refresh-btn
"
,
div
).
click
();
}
}
else
{
alert
(
data
.
message
);
}
},
afterError
:
function
(
html
)
{
dialog
.
hideLoading
();
self
.
errorDialog
(
html
);
}
});
uploadbutton
.
fileBox
.
change
(
function
(
e
)
{
localUrlBox
.
val
(
uploadbutton
.
fileBox
.
val
());
});
if
(
allowFileManager
)
{
viewServerBtn
.
click
(
function
(
e
)
{
self
.
loadPlugin
(
'
filemanager
'
,
function
()
{
self
.
plugin
.
filemanagerDialog
({
viewType
:
'
VIEW
'
,
dirName
:
'
image
'
,
clickFn
:
function
(
url
,
title
)
{
if
(
self
.
dialogs
.
length
>
1
)
{
K
(
'
[name="url"]
'
,
div
).
val
(
url
);
if
(
self
.
afterSelectFile
)
{
self
.
afterSelectFile
.
call
(
self
,
url
);
}
self
.
hideDialog
();
}
}
});
});
});
}
else
{
viewServerBtn
.
hide
();
}
var
originalWidth
=
0
,
originalHeight
=
0
;
function
setSize
(
width
,
height
)
{
widthBox
.
val
(
width
);
heightBox
.
val
(
height
);
originalWidth
=
width
;
originalHeight
=
height
;
}
refreshBtn
.
click
(
function
(
e
)
{
var
tempImg
=
K
(
'
<img src="
'
+
urlBox
.
val
()
+
'
" />
'
,
document
).
css
({
position
:
'
absolute
'
,
visibility
:
'
hidden
'
,
top
:
0
,
left
:
'
-1000px
'
});
tempImg
.
bind
(
'
load
'
,
function
()
{
setSize
(
tempImg
.
width
(),
tempImg
.
height
());
tempImg
.
remove
();
});
K
(
document
.
body
).
append
(
tempImg
);
});
widthBox
.
change
(
function
(
e
)
{
if
(
originalWidth
>
0
)
{
heightBox
.
val
(
Math
.
round
(
originalHeight
/
originalWidth
*
parseInt
(
this
.
value
,
10
)));
}
});
heightBox
.
change
(
function
(
e
)
{
if
(
originalHeight
>
0
)
{
widthBox
.
val
(
Math
.
round
(
originalWidth
/
originalHeight
*
parseInt
(
this
.
value
,
10
)));
}
});
urlBox
.
val
(
options
.
imageUrl
);
setSize
(
options
.
imageWidth
,
options
.
imageHeight
);
titleBox
.
val
(
options
.
imageTitle
);
alignBox
.
each
(
function
()
{
if
(
this
.
value
===
options
.
imageAlign
)
{
this
.
checked
=
true
;
return
false
;
}
});
if
(
showRemote
&&
tabIndex
===
0
)
{
urlBox
[
0
].
focus
();
urlBox
[
0
].
select
();
}
return
dialog
;
};
self
.
plugin
.
image
=
{
edit
:
function
()
{
var
img
=
self
.
plugin
.
getSelectedImage
();
self
.
plugin
.
imageDialog
({
imageUrl
:
img
?
img
.
attr
(
'
data-ke-src
'
)
:
'
http://
'
,
imageWidth
:
img
?
img
.
width
()
:
''
,
imageHeight
:
img
?
img
.
height
()
:
''
,
imageTitle
:
img
?
img
.
attr
(
'
title
'
)
:
''
,
imageAlign
:
img
?
img
.
attr
(
'
align
'
)
:
''
,
showRemote
:
allowImageRemote
,
showLocal
:
allowImageUpload
,
tabIndex
:
img
?
0
:
imageTabIndex
,
clickFn
:
function
(
url
,
title
,
width
,
height
,
border
,
align
)
{
if
(
img
)
{
img
.
attr
(
'
src
'
,
url
);
img
.
attr
(
'
data-ke-src
'
,
url
);
img
.
attr
(
'
width
'
,
width
);
img
.
attr
(
'
height
'
,
height
);
img
.
attr
(
'
title
'
,
title
);
img
.
attr
(
'
align
'
,
align
);
img
.
attr
(
'
alt
'
,
title
);
}
else
{
self
.
exec
(
'
insertimage
'
,
url
,
title
,
width
,
height
,
border
,
align
);
}
// Bugfix: [Firefox] 上传图片后,总是出现正在加载的样式,需要延迟执行hideDialog
setTimeout
(
function
()
{
self
.
hideDialog
().
focus
();
},
0
);
}
});
},
'
delete
'
:
function
()
{
var
target
=
self
.
plugin
.
getSelectedImage
();
if
(
target
.
parent
().
name
==
'
a
'
)
{
target
=
target
.
parent
();
}
target
.
remove
();
// [IE] 删除图片后立即点击图片按钮出错
self
.
addBookmark
();
}
};
self
.
clickToolbar
(
name
,
self
.
plugin
.
image
.
edit
);
});
\ No newline at end of file
var
uploadbutton
=
K
.
uploadbutton
({
button
:
K
(
'
.ke-upload-button
'
,
div
)[
0
],
fieldName
:
filePostName
,
url
:
K
.
addParam
(
uploadJson
,
'
dir=image
'
),
form
:
K
(
'
.ke-form
'
,
div
),
target
:
target
,
width
:
60
,
afterUpload
:
function
(
data
)
{
dialog
.
hideLoading
();
if
(
data
.
error
===
0
)
{
var
url
=
data
.
url
;
if
(
formatUploadUrl
)
{
url
=
K
.
formatUrl
(
url
,
'
absolute
'
);
}
if
(
self
.
afterUpload
)
{
self
.
afterUpload
.
call
(
self
,
url
,
data
,
name
);
}
if
(
!
fillDescAfterUploadImage
)
{
clickFn
.
call
(
self
,
url
,
data
.
title
,
data
.
width
,
data
.
height
,
data
.
border
,
data
.
align
);
}
else
{
K
(
"
.ke-dialog-row #remoteUrl
"
,
div
).
val
(
url
);
K
(
"
.ke-tabs-li
"
,
div
)[
0
].
click
();
K
(
"
.ke-refresh-btn
"
,
div
).
click
();
}
}
else
{
alert
(
data
.
message
);
}
},
afterError
:
function
(
html
)
{
dialog
.
hideLoading
();
self
.
errorDialog
(
html
);
}
});
uploadbutton
.
fileBox
.
change
(
function
(
e
)
{
localUrlBox
.
val
(
uploadbutton
.
fileBox
.
val
());
});
if
(
allowFileManager
)
{
viewServerBtn
.
click
(
function
(
e
)
{
self
.
loadPlugin
(
'
filemanager
'
,
function
()
{
self
.
plugin
.
filemanagerDialog
({
viewType
:
'
VIEW
'
,
dirName
:
'
image
'
,
clickFn
:
function
(
url
,
title
)
{
if
(
self
.
dialogs
.
length
>
1
)
{
K
(
'
[name="url"]
'
,
div
).
val
(
url
);
if
(
self
.
afterSelectFile
)
{
self
.
afterSelectFile
.
call
(
self
,
url
);
}
self
.
hideDialog
();
}
}
});
});
});
}
else
{
viewServerBtn
.
hide
();
}
var
originalWidth
=
0
,
originalHeight
=
0
;
function
setSize
(
width
,
height
)
{
widthBox
.
val
(
width
);
heightBox
.
val
(
height
);
originalWidth
=
width
;
originalHeight
=
height
;
}
refreshBtn
.
click
(
function
(
e
)
{
var
tempImg
=
K
(
'
<img src="
'
+
urlBox
.
val
()
+
'
" />
'
,
document
).
css
({
position
:
'
absolute
'
,
visibility
:
'
hidden
'
,
top
:
0
,
left
:
'
-1000px
'
});
tempImg
.
bind
(
'
load
'
,
function
()
{
setSize
(
tempImg
.
width
(),
tempImg
.
height
());
tempImg
.
remove
();
});
K
(
document
.
body
).
append
(
tempImg
);
});
widthBox
.
change
(
function
(
e
)
{
if
(
originalWidth
>
0
)
{
heightBox
.
val
(
Math
.
round
(
originalHeight
/
originalWidth
*
parseInt
(
this
.
value
,
10
)));
}
});
heightBox
.
change
(
function
(
e
)
{
if
(
originalHeight
>
0
)
{
widthBox
.
val
(
Math
.
round
(
originalWidth
/
originalHeight
*
parseInt
(
this
.
value
,
10
)));
}
});
urlBox
.
val
(
options
.
imageUrl
);
setSize
(
options
.
imageWidth
,
options
.
imageHeight
);
titleBox
.
val
(
options
.
imageTitle
);
alignBox
.
each
(
function
()
{
if
(
this
.
value
===
options
.
imageAlign
)
{
this
.
checked
=
true
;
return
false
;
}
});
if
(
tabIndex
===
0
)
{
urlBox
[
0
].
focus
();
urlBox
[
0
].
select
();
}
return
dialog
;
};
self
.
plugin
.
image
=
{
edit
:
function
()
{
var
img
=
self
.
plugin
.
getSelectedImage
();
self
.
plugin
.
imageDialog
({
imageUrl
:
img
?
img
.
attr
(
'
data-ke-src
'
)
:
'
http://
'
,
imageWidth
:
img
?
img
.
width
()
:
''
,
imageHeight
:
img
?
img
.
height
()
:
''
,
imageTitle
:
img
?
img
.
attr
(
'
title
'
)
:
''
,
imageAlign
:
img
?
img
.
attr
(
'
align
'
)
:
''
,
showRemote
:
true
,
showLocal
:
allowImageUpload
,
tabIndex
:
img
?
0
:
imageTabIndex
,
clickFn
:
function
(
url
,
title
,
width
,
height
,
border
,
align
)
{
self
.
exec
(
'
insertimage
'
,
url
,
title
,
width
,
height
,
border
,
align
);
// Bugfix: [Firefox] 上传图片后,总是出现正在加载的样式,需要延迟执行hideDialog
setTimeout
(
function
()
{
self
.
hideDialog
().
focus
();
},
0
);
}
});
},
'
delete
'
:
function
()
{
var
target
=
self
.
plugin
.
getSelectedImage
();
if
(
target
.
parent
().
name
==
'
a
'
)
{
target
=
target
.
parent
();
}
target
.
remove
();
}
};
self
.
clickToolbar
(
name
,
self
.
plugin
.
image
.
edit
);
});
war/src/main/webapp/js/lib/tiny_mce/plugins/advimage/image.htm
View file @
d556be44
...
...
@@ -2,11 +2,6 @@
<html
xmlns=
"http://www.w3.org/1999/xhtml"
>
<head>
<title>
{#advimage_dlg.dialog_title}
</title>
<script
type=
"text/javascript"
src=
"../../../jquery/jquery.min.js"
></script>
<script
type=
"text/javascript"
src=
"../../../jquery/file-upload-9.10.1/vendor/jquery.ui.widget.js"
></script>
<script
type=
"text/javascript"
src=
"../../../jquery/file-upload-9.10.1/jquery.iframe-transport.js"
></script>
<script
type=
"text/javascript"
src=
"../../../jquery/file-upload-9.10.1/jquery.fileupload.js"
></script>
<script
type=
"text/javascript"
src=
"../../../jquery/file-upload-9.10.1/jquery.fileupload-process.js"
></script>
<script
type=
"text/javascript"
src=
"../../tiny_mce_popup.js"
></script>
<script
type=
"text/javascript"
src=
"../../utils/mctabs.js"
></script>
<script
type=
"text/javascript"
src=
"../../utils/form_utils.js"
></script>
...
...
@@ -35,7 +30,7 @@
<table
role=
"presentation"
class=
"properties"
>
<tr>
<td
class=
"column1"
><label
id=
"srclabel"
for=
"src"
>
{#advimage_dlg.src}
</label></td>
<td>
<td
colspan=
"2"
>
<table
role=
"presentation"
border=
"0"
cellspacing=
"0"
cellpadding=
"0"
>
<tr>
<td><input
name=
"src"
type=
"text"
id=
"src"
value=
""
class=
"mceFocus"
onchange=
"ImageDialog.showPreviewImage(this.value);"
aria-required=
"true"
/></td>
...
...
@@ -43,13 +38,6 @@
</tr>
</table>
</td>
<td>
<label>
Upload
<input
type=
"file"
style=
"width: 1px;opacity: .001;"
id=
"imageUpload"
accept=
"image/gif, image/jpeg, image/png"
/>
</label>
</td>
</tr>
<tr>
<td><label
for=
"src_list"
>
{#advimage_dlg.image_list}
</label></td>
...
...
war/src/main/webapp/js/lib/tiny_mce/plugins/advimage/js/image.js
View file @
d556be44
...
...
@@ -6,8 +6,6 @@ var ImageDialog = {
if
(
url
=
tinyMCEPopup
.
getParam
(
"
external_image_list_url
"
))
document
.
write
(
'
<script language="javascript" type="text/javascript" src="
'
+
tinyMCEPopup
.
editor
.
documentBaseURI
.
toAbsolute
(
url
)
+
'
"></script>
'
);
ImageDialog
.
uploadImage
();
},
init
:
function
(
ed
)
{
var
f
=
document
.
forms
[
0
],
nl
=
f
.
elements
,
ed
=
tinyMCEPopup
.
editor
,
dom
=
ed
.
dom
,
n
=
ed
.
selection
.
getNode
(),
fl
=
tinyMCEPopup
.
getParam
(
'
external_image_list
'
,
'
tinyMCEImageList
'
);
...
...
@@ -476,49 +474,6 @@ var ImageDialog = {
},
changeMouseMove
:
function
()
{
},
uploadImage
:
function
()
{
$
(
function
()
{
var
qiniu
=
window
.
parent
.
qiniu
;
console
.
log
(
qiniu
);
$
(
'
#imageUpload
'
).
fileupload
({
multipart
:
true
,
pasteZone
:
null
,
dropZone
:
null
,
url
:
"
http://upload.qiniu.com/
"
,
formData
:
function
(
form
)
{
var
data
=
form
.
serializeArray
();
data
.
push
({
name
:
'
token
'
,
value
:
qiniu
.
qiniuUploadToken
});
return
data
;
},
submit
:
function
(
e
,
data
)
{
},
done
:
function
(
e
,
data
)
{
// console.log(data.result)
var
qiniuKey
=
data
.
result
.
key
;
if
(
!
qiniuKey
)
{
alert
(
"
Upload error
"
);
return
;
}
var
t
=
new
Date
().
getTime
();
$
(
'
#src
'
).
val
(
qiniu
.
qiniuDomain
+
qiniuKey
+
'
?
'
+
t
);
ImageDialog
.
showPreviewImage
(
qiniu
.
qiniuDomain
+
qiniuKey
+
'
?
'
+
t
);
},
fail
:
function
(
e
,
data
)
{
alert
(
"
Upload error:
"
+
data
.
errorThrown
);
}
}).
on
(
'
fileuploadprocessalways
'
,
function
(
e
,
data
)
{
var
currentFile
=
data
.
files
[
data
.
index
];
if
(
data
.
files
.
error
&&
currentFile
.
error
)
{
alert
(
currentFile
.
error
);
}
});
});
},
showPreviewImage
:
function
(
u
,
st
)
{
if
(
!
u
)
{
tinyMCEPopup
.
dom
.
setHTML
(
'
prev
'
,
''
);
...
...
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