Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
S
solo
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
Commits
ee7df903
Commit
ee7df903
authored
Dec 13, 2012
by
Liang Ding
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
格式化
parent
b8464070
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
297 additions
and
340 deletions
+297
-340
core/src/main/java/org/b3log/solo/event/comment/ArticleCommentReplyNotifier.java
...b3log/solo/event/comment/ArticleCommentReplyNotifier.java
+24
-46
core/src/main/java/org/b3log/solo/event/comment/PageCommentReplyNotifier.java
...rg/b3log/solo/event/comment/PageCommentReplyNotifier.java
+23
-44
core/src/main/java/org/b3log/solo/service/CommentMgmtService.java
.../main/java/org/b3log/solo/service/CommentMgmtService.java
+3
-3
war/src/main/webapp/js/admin/latkeAdmin.js
war/src/main/webapp/js/admin/latkeAdmin.js
+247
-247
No files found.
core/src/main/java/org/b3log/solo/event/comment/ArticleCommentReplyNotifier.java
View file @
ee7df903
...
...
@@ -27,10 +27,10 @@ import org.b3log.latke.mail.MailServiceFactory;
import
org.b3log.latke.util.Strings
;
import
org.b3log.solo.SoloServletListener
;
import
org.b3log.solo.event.EventTypes
;
import
org.b3log.solo.model.Article
;
import
org.b3log.solo.model.Comment
;
import
org.b3log.solo.model.Preference
;
import
org.b3log.solo.repository.CommentRepository
;
import
org.b3log.solo.model.Article
;
import
org.b3log.solo.repository.impl.CommentRepositoryImpl
;
import
org.b3log.solo.service.PreferenceQueryService
;
import
org.json.JSONObject
;
...
...
@@ -39,22 +39,19 @@ import org.json.JSONObject;
* This listener is responsible for processing article comment reply.
*
* @author <a href="mailto:DL88250@gmail.com">Liang Ding</a>
* @version 1.0.1.
4, Oct 31, 2011
* @version 1.0.1.
5, Dec 13, 2012
* @since 0.3.1
*/
public
final
class
ArticleCommentReplyNotifier
extends
AbstractEventListener
<
JSONObject
>
{
public
final
class
ArticleCommentReplyNotifier
extends
AbstractEventListener
<
JSONObject
>
{
/**
* Logger.
*/
private
static
final
Logger
LOGGER
=
Logger
.
getLogger
(
ArticleCommentReplyNotifier
.
class
.
getName
());
private
static
final
Logger
LOGGER
=
Logger
.
getLogger
(
ArticleCommentReplyNotifier
.
class
.
getName
());
/**
* Comment repository.
*/
private
CommentRepository
commentRepository
=
CommentRepositoryImpl
.
getInstance
();
private
CommentRepository
commentRepository
=
CommentRepositoryImpl
.
getInstance
();
/**
* Mail service.
*/
...
...
@@ -62,33 +59,25 @@ public final class ArticleCommentReplyNotifier
/**
* Preference query service.
*/
private
PreferenceQueryService
preferenceQueryService
=
PreferenceQueryService
.
getInstance
();
private
PreferenceQueryService
preferenceQueryService
=
PreferenceQueryService
.
getInstance
();
@Override
public
void
action
(
final
Event
<
JSONObject
>
event
)
throws
EventException
{
final
JSONObject
eventData
=
event
.
getData
();
final
JSONObject
comment
=
eventData
.
optJSONObject
(
Comment
.
COMMENT
);
final
JSONObject
article
=
eventData
.
optJSONObject
(
Article
.
ARTICLE
);
LOGGER
.
log
(
Level
.
FINER
,
"Processing an event[type={0}, data={1}] in listener[className={2}]"
,
new
Object
[]{
event
.
getType
(),
eventData
,
ArticleCommentReplyNotifier
.
class
.
getName
()});
final
String
originalCommentId
=
comment
.
optString
(
Comment
.
COMMENT_ORIGINAL_COMMENT_ID
);
LOGGER
.
log
(
Level
.
FINER
,
"Processing an event[type={0}, data={1}] in listener[className={2}]"
,
new
Object
[]{
event
.
getType
(),
eventData
,
ArticleCommentReplyNotifier
.
class
.
getName
()});
final
String
originalCommentId
=
comment
.
optString
(
Comment
.
COMMENT_ORIGINAL_COMMENT_ID
);
if
(
Strings
.
isEmptyOrNull
(
originalCommentId
))
{
LOGGER
.
log
(
Level
.
FINER
,
"This comment[id={0}] is not a reply"
,
comment
.
optString
(
Keys
.
OBJECT_ID
));
LOGGER
.
log
(
Level
.
FINER
,
"This comment[id={0}] is not a reply"
,
comment
.
optString
(
Keys
.
OBJECT_ID
));
return
;
}
try
{
final
String
commentEmail
=
comment
.
getString
(
Comment
.
COMMENT_EMAIL
);
final
JSONObject
originalComment
=
commentRepository
.
get
(
originalCommentId
);
final
String
originalCommentEmail
=
originalComment
.
getString
(
Comment
.
COMMENT_EMAIL
);
final
JSONObject
originalComment
=
commentRepository
.
get
(
originalCommentId
);
final
String
originalCommentEmail
=
originalComment
.
getString
(
Comment
.
COMMENT_EMAIL
);
if
(
originalCommentEmail
.
equalsIgnoreCase
(
commentEmail
))
{
return
;
}
...
...
@@ -98,34 +87,25 @@ public final class ArticleCommentReplyNotifier
throw
new
EventException
(
"Not found preference"
);
}
final
String
blogTitle
=
preference
.
getString
(
Preference
.
BLOG_TITLE
);
final
String
adminEmail
=
preference
.
getString
(
Preference
.
ADMIN_EMAIL
);
final
String
blogTitle
=
preference
.
getString
(
Preference
.
BLOG_TITLE
);
final
String
adminEmail
=
preference
.
getString
(
Preference
.
ADMIN_EMAIL
);
final
String
commentContent
=
comment
.
getString
(
Comment
.
COMMENT_CONTENT
).
replaceAll
(
SoloServletListener
.
ENTER_ESC
,
"<br/>"
);
final
String
commentSharpURL
=
comment
.
getString
(
Comment
.
COMMENT_SHARP_URL
);
final
String
commentContent
=
comment
.
getString
(
Comment
.
COMMENT_CONTENT
).
replaceAll
(
SoloServletListener
.
ENTER_ESC
,
"<br/>"
);
final
String
commentSharpURL
=
comment
.
getString
(
Comment
.
COMMENT_SHARP_URL
);
final
Message
message
=
new
Message
();
message
.
setFrom
(
adminEmail
);
message
.
addRecipient
(
originalCommentEmail
);
final
JSONObject
replyNotificationTemplate
=
preferenceQueryService
.
getReplyNotificationTemplate
();
final
String
mailSubject
=
replyNotificationTemplate
.
getString
(
"subject"
).
replace
(
"${blogTitle}"
,
blogTitle
);
final
JSONObject
replyNotificationTemplate
=
preferenceQueryService
.
getReplyNotificationTemplate
();
final
String
mailSubject
=
replyNotificationTemplate
.
getString
(
"subject"
).
replace
(
"${blogTitle}"
,
blogTitle
);
message
.
setSubject
(
mailSubject
);
final
String
articleTitle
=
article
.
getString
(
Article
.
ARTICLE_TITLE
);
final
String
blogHost
=
preference
.
getString
(
Preference
.
BLOG_HOST
);
final
String
articleLink
=
"http://"
+
blogHost
+
article
.
getString
(
Article
.
ARTICLE_PERMALINK
);
final
String
articleLink
=
"http://"
+
blogHost
+
article
.
getString
(
Article
.
ARTICLE_PERMALINK
);
final
String
commentName
=
comment
.
getString
(
Comment
.
COMMENT_NAME
);
final
String
commentURL
=
comment
.
getString
(
Comment
.
COMMENT_URL
);
String
commenter
=
null
;
String
commenter
;
if
(!
"http://"
.
equals
(
commentURL
))
{
commenter
=
"<a target=\"_blank\" "
+
"href=\""
+
commentURL
+
"\">"
+
commentName
+
"</a>"
;
commenter
=
"<a target=\"_blank\" "
+
"href=\""
+
commentURL
+
"\">"
+
commentName
+
"</a>"
;
}
else
{
commenter
=
commentName
;
}
...
...
@@ -135,13 +115,11 @@ public final class ArticleCommentReplyNotifier
replace
(
"${postTitle}"
,
articleTitle
).
replace
(
"${replier}"
,
commenter
).
replace
(
"${replyURL}"
,
"http://"
+
blogHost
+
commentSharpURL
).
+
commentSharpURL
).
replace
(
"${replyContent}"
,
commentContent
);
message
.
setHtmlBody
(
mailBody
);
LOGGER
.
log
(
Level
.
FINER
,
"Sending a mail[mailSubject={0}, mailBody=[{1}] to [{2}]"
,
new
Object
[]{
mailSubject
,
mailBody
,
originalCommentEmail
});
LOGGER
.
log
(
Level
.
FINER
,
"Sending a mail[mailSubject={0}, mailBody=[{1}] to [{2}]"
,
new
Object
[]{
mailSubject
,
mailBody
,
originalCommentEmail
});
mailService
.
send
(
message
);
}
catch
(
final
Exception
e
)
{
...
...
core/src/main/java/org/b3log/solo/event/comment/PageCommentReplyNotifier.java
View file @
ee7df903
...
...
@@ -28,9 +28,9 @@ import org.b3log.latke.util.Strings;
import
org.b3log.solo.SoloServletListener
;
import
org.b3log.solo.event.EventTypes
;
import
org.b3log.solo.model.Comment
;
import
org.b3log.solo.model.Page
;
import
org.b3log.solo.model.Preference
;
import
org.b3log.solo.repository.CommentRepository
;
import
org.b3log.solo.model.Page
;
import
org.b3log.solo.repository.impl.CommentRepositoryImpl
;
import
org.b3log.solo.service.PreferenceQueryService
;
import
org.json.JSONObject
;
...
...
@@ -42,19 +42,16 @@ import org.json.JSONObject;
* @version 1.0.1.1, Oct 31, 2011
* @since 0.3.1
*/
public
final
class
PageCommentReplyNotifier
extends
AbstractEventListener
<
JSONObject
>
{
public
final
class
PageCommentReplyNotifier
extends
AbstractEventListener
<
JSONObject
>
{
/**
* Logger.
*/
private
static
final
Logger
LOGGER
=
Logger
.
getLogger
(
PageCommentReplyNotifier
.
class
.
getName
());
private
static
final
Logger
LOGGER
=
Logger
.
getLogger
(
PageCommentReplyNotifier
.
class
.
getName
());
/**
* Comment repository.
*/
private
CommentRepository
commentRepository
=
CommentRepositoryImpl
.
getInstance
();
private
CommentRepository
commentRepository
=
CommentRepositoryImpl
.
getInstance
();
/**
* Mail service.
*/
...
...
@@ -62,33 +59,25 @@ public final class PageCommentReplyNotifier
/**
* Preference query service.
*/
private
PreferenceQueryService
preferenceQueryService
=
PreferenceQueryService
.
getInstance
();
private
PreferenceQueryService
preferenceQueryService
=
PreferenceQueryService
.
getInstance
();
@Override
public
void
action
(
final
Event
<
JSONObject
>
event
)
throws
EventException
{
final
JSONObject
eventData
=
event
.
getData
();
final
JSONObject
comment
=
eventData
.
optJSONObject
(
Comment
.
COMMENT
);
final
JSONObject
page
=
eventData
.
optJSONObject
(
Page
.
PAGE
);
LOGGER
.
log
(
Level
.
FINER
,
"Processing an event[type={0}, data={1}] in listener[className={2}]"
,
new
Object
[]{
event
.
getType
(),
eventData
,
PageCommentReplyNotifier
.
class
.
getName
()});
final
String
originalCommentId
=
comment
.
optString
(
Comment
.
COMMENT_ORIGINAL_COMMENT_ID
);
LOGGER
.
log
(
Level
.
FINER
,
"Processing an event[type={0}, data={1}] in listener[className={2}]"
,
new
Object
[]{
event
.
getType
(),
eventData
,
PageCommentReplyNotifier
.
class
.
getName
()});
final
String
originalCommentId
=
comment
.
optString
(
Comment
.
COMMENT_ORIGINAL_COMMENT_ID
);
if
(
Strings
.
isEmptyOrNull
(
originalCommentId
))
{
LOGGER
.
log
(
Level
.
FINER
,
"This comment[id={0}] is not a reply"
,
comment
.
optString
(
Keys
.
OBJECT_ID
));
LOGGER
.
log
(
Level
.
FINER
,
"This comment[id={0}] is not a reply"
,
comment
.
optString
(
Keys
.
OBJECT_ID
));
return
;
}
try
{
final
String
commentEmail
=
comment
.
getString
(
Comment
.
COMMENT_EMAIL
);
final
JSONObject
originalComment
=
commentRepository
.
get
(
originalCommentId
);
final
String
originalCommentEmail
=
originalComment
.
getString
(
Comment
.
COMMENT_EMAIL
);
final
JSONObject
originalComment
=
commentRepository
.
get
(
originalCommentId
);
final
String
originalCommentEmail
=
originalComment
.
getString
(
Comment
.
COMMENT_EMAIL
);
if
(
originalCommentEmail
.
equalsIgnoreCase
(
commentEmail
))
{
return
;
}
...
...
@@ -98,34 +87,26 @@ public final class PageCommentReplyNotifier
throw
new
EventException
(
"Not found preference"
);
}
final
String
blogTitle
=
preference
.
getString
(
Preference
.
BLOG_TITLE
);
final
String
adminEmail
=
preference
.
getString
(
Preference
.
ADMIN_EMAIL
);
final
String
blogTitle
=
preference
.
getString
(
Preference
.
BLOG_TITLE
);
final
String
adminEmail
=
preference
.
getString
(
Preference
.
ADMIN_EMAIL
);
final
String
commentContent
=
comment
.
getString
(
Comment
.
COMMENT_CONTENT
).
final
String
commentContent
=
comment
.
getString
(
Comment
.
COMMENT_CONTENT
).
replaceAll
(
SoloServletListener
.
ENTER_ESC
,
"<br/>"
);
final
String
commentSharpURL
=
comment
.
getString
(
Comment
.
COMMENT_SHARP_URL
);
final
String
commentSharpURL
=
comment
.
getString
(
Comment
.
COMMENT_SHARP_URL
);
final
Message
message
=
new
Message
();
message
.
setFrom
(
adminEmail
);
message
.
addRecipient
(
originalCommentEmail
);
final
JSONObject
replyNotificationTemplate
=
preferenceQueryService
.
getReplyNotificationTemplate
();
final
String
mailSubject
=
replyNotificationTemplate
.
getString
(
"subject"
).
replace
(
"${blogTitle}"
,
blogTitle
);
final
JSONObject
replyNotificationTemplate
=
preferenceQueryService
.
getReplyNotificationTemplate
();
final
String
mailSubject
=
replyNotificationTemplate
.
getString
(
"subject"
).
replace
(
"${blogTitle}"
,
blogTitle
);
message
.
setSubject
(
mailSubject
);
final
String
pageTitle
=
page
.
getString
(
Page
.
PAGE_TITLE
);
final
String
blogHost
=
preference
.
getString
(
Preference
.
BLOG_HOST
);
final
String
pageLink
=
"http://"
+
blogHost
+
page
.
getString
(
Page
.
PAGE_PERMALINK
);
final
String
pageLink
=
"http://"
+
blogHost
+
page
.
getString
(
Page
.
PAGE_PERMALINK
);
final
String
commentName
=
comment
.
getString
(
Comment
.
COMMENT_NAME
);
final
String
commentURL
=
comment
.
getString
(
Comment
.
COMMENT_URL
);
String
commenter
=
null
;
String
commenter
;
if
(!
"http://"
.
equals
(
commentURL
))
{
commenter
=
"<a target=\"_blank\" "
+
"href=\""
+
commentURL
+
"\">"
+
commentName
+
"</a>"
;
commenter
=
"<a target=\"_blank\" "
+
"href=\""
+
commentURL
+
"\">"
+
commentName
+
"</a>"
;
}
else
{
commenter
=
commentName
;
}
...
...
@@ -135,13 +116,11 @@ public final class PageCommentReplyNotifier
replace
(
"${postTitle}"
,
pageTitle
).
replace
(
"${replier}"
,
commenter
).
replace
(
"${replyURL}"
,
"http://"
+
blogHost
+
commentSharpURL
).
+
commentSharpURL
).
replace
(
"${replyContent}"
,
commentContent
);
message
.
setHtmlBody
(
mailBody
);
LOGGER
.
log
(
Level
.
FINER
,
"Sending a mail[mailSubject={0}, mailBody=[{1}] to [{2}]"
,
new
Object
[]{
mailSubject
,
mailBody
,
originalCommentEmail
});
LOGGER
.
log
(
Level
.
FINER
,
"Sending a mail[mailSubject={0}, mailBody=[{1}] to [{2}]"
,
new
Object
[]{
mailSubject
,
mailBody
,
originalCommentEmail
});
mailService
.
send
(
message
);
}
catch
(
final
Exception
e
)
{
LOGGER
.
log
(
Level
.
SEVERE
,
e
.
getMessage
(),
e
);
...
...
core/src/main/java/org/b3log/solo/service/CommentMgmtService.java
View file @
ee7df903
...
...
@@ -163,7 +163,7 @@ public final class CommentMgmtService {
ret
.
put
(
Comment
.
COMMENT_ORIGINAL_COMMENT_NAME
,
originalCommentName
);
}
else
{
LOGGER
.
log
(
Level
.
WARNING
,
"Not found orginal comment[id={0}] of reply[name={1}, content={2}]"
,
new
String
[]{
originalCommentId
,
commentName
,
commentContent
});
new
String
[]{
originalCommentId
,
commentName
,
commentContent
});
}
}
setCommentThumbnailURL
(
comment
);
...
...
@@ -276,7 +276,7 @@ public final class CommentMgmtService {
ret
.
put
(
Comment
.
COMMENT_ORIGINAL_COMMENT_NAME
,
originalCommentName
);
}
else
{
LOGGER
.
log
(
Level
.
WARNING
,
"Not found orginal comment[id={0}] of reply[name={1}, content={2}]"
,
new
String
[]{
originalCommentId
,
commentName
,
commentContent
});
new
String
[]{
originalCommentId
,
commentName
,
commentContent
});
}
}
CommentMgmtService
.
setCommentThumbnailURL
(
comment
);
...
...
@@ -455,7 +455,7 @@ public final class CommentMgmtService {
final
String
hashedEmail
=
MD5
.
hash
(
commentEmail
.
toLowerCase
());
String
thumbnailURL
=
"http://secure.gravatar.com/avatar/"
+
hashedEmail
+
"?s=60&d="
+
Latkes
.
getStaticServePath
()
+
"/images/default-user-thumbnail.png"
;
+
Latkes
.
getStaticServePath
()
+
"/images/default-user-thumbnail.png"
;
final
URL
gravatarURL
=
new
URL
(
thumbnailURL
);
...
...
war/src/main/webapp/js/admin/latkeAdmin.js
View file @
ee7df903
/*
* Copyright (c) 2009, 2010, 2011, 2012, B3log Team
*
* 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.
*/
/**
* index for admin
*
* @author <a href="mailto:LLY219@gmail.com">Liyuan Li</a>
* @version 1.0.2.0, Aug 30, 2012
*/
var
Admin
=
function
()
{
this
.
register
=
{};
// 工具栏下的工具
this
.
tools
=
[
'
#page-list
'
,
'
#file-list
'
,
'
#link-list
'
,
'
#preference
'
,
'
#user-list
'
,
'
#plugin-list
'
,
'
#others
'
];
// 多用户时,一般用户不能使用的功能
this
.
adTools
=
[
'
link-list
'
,
'
preference
'
,
'
file-list
'
,
'
page-list
'
,
'
user-list
'
,
'
plugin-list
'
,
'
others
'
];
};
$
.
extend
(
Admin
.
prototype
,
{
/*
* 登出
*/
logout
:
function
()
{
window
.
location
.
href
=
latkeConfig
.
servePath
+
"
/logout?goto=
"
+
latkeConfig
.
servePath
;
},
/*
* 根据当前页数设置 hash
* @currentPage {string} 当前页
*/
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
(
"
/
"
);
},
/*
* 设置某个 tab 被选择
* @id tab id
*/
selectTab
:
function
(
id
)
{
window
.
location
.
hash
=
"
#
"
+
id
;
},
/*
* 根据当前 hash 解析出当前页数及 hash 数组。
*/
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
;
},
/*
* 根据当前 hash 设置当前 tab
*/
setCurByHash
:
function
()
{
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
;
}
// 离开编辑器时进行提示
try
{
// 除更新、发布、取消发布文章,编辑器中无内容外,离开编辑器需进行提示。
if
(
tab
!==
"
article
"
&&
admin
.
article
.
isConfirm
&&
admin
.
editorArticle
.
getContent
().
replace
(
/
\s
/g
,
''
)
!==
""
)
{
if
(
!
confirm
(
Label
.
editorLeaveLabel
))
{
window
.
location
.
hash
=
"
#article/article
"
;
return
;
}
}
// 不离开编辑器,hash 需变为 "#article/article",此时不需要做任何处理。
if
(
tab
===
"
article
"
&&
admin
.
article
.
isConfirm
&&
admin
.
editorArticle
.
getContent
().
replace
(
/
\s
/g
,
''
)
!==
""
)
{
return
;
}
}
catch
(
e
)
{
var
$articleContent
=
$
(
'
#articleContent
'
);
if
(
$articleContent
.
length
>
0
)
{
if
(
tab
!==
"
article
"
&&
admin
.
article
.
isConfirm
&&
$articleContent
.
val
().
replace
(
/
\s
/g
,
''
)
!==
""
)
{
if
(
!
confirm
(
Label
.
editorLeaveLabel
))
{
window
.
location
.
hash
=
"
#article/article
"
;
return
;
}
}
// 不离开编辑器,hash 需变为 "#article/article",此时不需要做任何处理。
if
(
tab
===
"
article
"
&&
admin
.
article
.
isConfirm
&&
$articleContent
.
val
().
replace
(
/
\s
/g
,
''
)
!==
""
)
{
return
;
}
}
}
// clear article
if
(
tab
!==
"
article
"
&&
admin
.
editorArticle
.
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
,
""
)
===
""
)
{
// 还未加载 HTML
$
(
"
#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
);
}
// 页面包含子 tab,需根据 hash 定位到相应的 tab
if
(
subTab
)
{
$
(
"
#tab
"
+
tab
.
substring
(
0
,
1
).
toUpperCase
()
+
tab
.
substring
(
1
)).
tabs
(
"
setCurrent
"
,
subTab
);
}
// 根据 hash 调用现有的插件函数
admin
.
plugin
.
setCurByHash
(
tags
);
});
}
else
{
if
(
tab
===
"
article
"
&&
admin
.
article
.
status
.
id
)
{
admin
.
article
.
getAndSet
();
}
// 已加载过 HTML,只需调用刷新函数
if
(
admin
.
register
[
tab
]
&&
admin
.
register
[
tab
].
refresh
)
{
admin
.
register
[
tab
].
refresh
.
call
(
admin
.
register
[
tab
].
obj
,
tags
.
page
);
}
// 页面包含子 tab,需根据 hash 定位到相应的 tab
if
(
subTab
)
{
$
(
"
#tab
"
+
tab
.
substring
(
0
,
1
).
toUpperCase
()
+
tab
.
substring
(
1
)).
tabs
(
"
setCurrent
"
,
subTab
);
}
// 根据 hash 调用现有的插件函数
admin
.
plugin
.
setCurByHash
(
tags
);
}
}
else
{
$
(
"
#tipMsg
"
).
text
(
"
Error: No tab!
"
+
Label
.
reportIssueLabel
);
$
(
"
#loadMsg
"
).
text
(
""
);
}
},
/*
* 初始化整个后台
*/
init
:
function
()
{
//window.onerror = Util.error;
Util
.
killIE
();
$
(
"
#loadMsg
"
).
text
(
Label
.
loadingLabel
);
// 构建 tabs
$
(
"
#tabs
"
).
tabs
();
// tipMsg
setInterval
(
function
()
{
if
(
$
(
"
#tipMsg
"
).
text
()
!==
""
)
{
setTimeout
(
function
()
{
$
(
"
#tipMsg
"
).
text
(
""
);
},
7000
);
}
},
6000
);
$
(
"
#loadMsg
"
).
text
(
""
);
},
/*
* @description tools and article collapse
* @param {bom} it 触发事件对象
*/
collapseNav
:
function
(
it
)
{
var
subNav
=
$
(
it
).
next
();
subNav
.
slideToggle
(
"
normal
"
,
function
()
{
if
(
this
.
style
.
display
!==
"
none
"
)
{
$
(
it
).
find
(
"
.ico-arrow-down
"
)[
0
].
className
=
"
ico-arrow-up
"
;
}
else
{
$
(
it
).
find
(
"
.ico-arrow-up
"
)[
0
].
className
=
"
ico-arrow-down
"
;
}
});
},
/*
* 后台及当前页面所需插件初始化完后,对权限进行控制及当前页面属于 tools 时,tools 选项需展开。
*/
inited
:
function
()
{
// Removes functions with the current user role
if
(
Label
.
userRole
!==
"
adminRole
"
)
{
for
(
var
i
=
0
;
i
<
this
.
adTools
.
length
;
i
++
)
{
$
(
"
#tabs
"
).
tabs
(
"
remove
"
,
this
.
adTools
[
i
]);
}
}
else
{
// 当前 tab 属于 Tools 时,设其展开
for
(
var
j
=
0
;
j
<
this
.
tools
.
length
;
j
++
)
{
if
(
"
#
"
+
window
.
location
.
hash
.
split
(
"
/
"
)[
1
]
===
this
.
tools
[
j
])
{
$
(
"
#tabToolsTitle
"
).
click
();
break
;
}
}
}
this
.
setCurByHash
();
}
});
/*
* Copyright (c) 2009, 2010, 2011, 2012, B3log Team
*
* 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.
*/
/**
* index for admin
*
* @author <a href="mailto:LLY219@gmail.com">Liyuan Li</a>
* @version 1.0.2.0, Aug 30, 2012
*/
var
Admin
=
function
()
{
this
.
register
=
{};
// 工具栏下的工具
this
.
tools
=
[
'
#page-list
'
,
'
#file-list
'
,
'
#link-list
'
,
'
#preference
'
,
'
#user-list
'
,
'
#plugin-list
'
,
'
#others
'
];
// 多用户时,一般用户不能使用的功能
this
.
adTools
=
[
'
link-list
'
,
'
preference
'
,
'
file-list
'
,
'
page-list
'
,
'
user-list
'
,
'
plugin-list
'
,
'
others
'
];
};
$
.
extend
(
Admin
.
prototype
,
{
/*
* 登出
*/
logout
:
function
()
{
window
.
location
.
href
=
latkeConfig
.
servePath
+
"
/logout?goto=
"
+
latkeConfig
.
servePath
;
},
/*
* 根据当前页数设置 hash
* @currentPage {string} 当前页
*/
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
(
"
/
"
);
},
/*
* 设置某个 tab 被选择
* @id tab id
*/
selectTab
:
function
(
id
)
{
window
.
location
.
hash
=
"
#
"
+
id
;
},
/*
* 根据当前 hash 解析出当前页数及 hash 数组。
*/
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
;
},
/*
* 根据当前 hash 设置当前 tab
*/
setCurByHash
:
function
()
{
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
;
}
// 离开编辑器时进行提示
try
{
// 除更新、发布、取消发布文章,编辑器中无内容外,离开编辑器需进行提示。
if
(
tab
!==
"
article
"
&&
admin
.
article
.
isConfirm
&&
admin
.
editorArticle
.
getContent
().
replace
(
/
\s
/g
,
''
)
!==
""
)
{
if
(
!
confirm
(
Label
.
editorLeaveLabel
))
{
window
.
location
.
hash
=
"
#article/article
"
;
return
;
}
}
// 不离开编辑器,hash 需变为 "#article/article",此时不需要做任何处理。
if
(
tab
===
"
article
"
&&
admin
.
article
.
isConfirm
&&
admin
.
editorArticle
.
getContent
().
replace
(
/
\s
/g
,
''
)
!==
""
)
{
return
;
}
}
catch
(
e
)
{
var
$articleContent
=
$
(
'
#articleContent
'
);
if
(
$articleContent
.
length
>
0
)
{
if
(
tab
!==
"
article
"
&&
admin
.
article
.
isConfirm
&&
$articleContent
.
val
().
replace
(
/
\s
/g
,
''
)
!==
""
)
{
if
(
!
confirm
(
Label
.
editorLeaveLabel
))
{
window
.
location
.
hash
=
"
#article/article
"
;
return
;
}
}
// 不离开编辑器,hash 需变为 "#article/article",此时不需要做任何处理。
if
(
tab
===
"
article
"
&&
admin
.
article
.
isConfirm
&&
$articleContent
.
val
().
replace
(
/
\s
/g
,
''
)
!==
""
)
{
return
;
}
}
}
// clear article
if
(
tab
!==
"
article
"
&&
admin
.
editorArticle
.
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
,
""
)
===
""
)
{
// 还未加载 HTML
$
(
"
#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
);
}
// 页面包含子 tab,需根据 hash 定位到相应的 tab
if
(
subTab
)
{
$
(
"
#tab
"
+
tab
.
substring
(
0
,
1
).
toUpperCase
()
+
tab
.
substring
(
1
)).
tabs
(
"
setCurrent
"
,
subTab
);
}
// 根据 hash 调用现有的插件函数
admin
.
plugin
.
setCurByHash
(
tags
);
});
}
else
{
if
(
tab
===
"
article
"
&&
admin
.
article
.
status
.
id
)
{
admin
.
article
.
getAndSet
();
}
// 已加载过 HTML,只需调用刷新函数
if
(
admin
.
register
[
tab
]
&&
admin
.
register
[
tab
].
refresh
)
{
admin
.
register
[
tab
].
refresh
.
call
(
admin
.
register
[
tab
].
obj
,
tags
.
page
);
}
// 页面包含子 tab,需根据 hash 定位到相应的 tab
if
(
subTab
)
{
$
(
"
#tab
"
+
tab
.
substring
(
0
,
1
).
toUpperCase
()
+
tab
.
substring
(
1
)).
tabs
(
"
setCurrent
"
,
subTab
);
}
// 根据 hash 调用现有的插件函数
admin
.
plugin
.
setCurByHash
(
tags
);
}
}
else
{
$
(
"
#tipMsg
"
).
text
(
"
Error: No tab!
"
+
Label
.
reportIssueLabel
);
$
(
"
#loadMsg
"
).
text
(
""
);
}
},
/*
* 初始化整个后台
*/
init
:
function
()
{
//window.onerror = Util.error;
Util
.
killIE
();
$
(
"
#loadMsg
"
).
text
(
Label
.
loadingLabel
);
// 构建 tabs
$
(
"
#tabs
"
).
tabs
();
// tipMsg
setInterval
(
function
()
{
if
(
$
(
"
#tipMsg
"
).
text
()
!==
""
)
{
setTimeout
(
function
()
{
$
(
"
#tipMsg
"
).
text
(
""
);
},
7000
);
}
},
6000
);
$
(
"
#loadMsg
"
).
text
(
""
);
},
/*
* @description tools and article collapse
* @param {bom} it 触发事件对象
*/
collapseNav
:
function
(
it
)
{
var
subNav
=
$
(
it
).
next
();
subNav
.
slideToggle
(
"
normal
"
,
function
()
{
if
(
this
.
style
.
display
!==
"
none
"
)
{
$
(
it
).
find
(
"
.ico-arrow-down
"
)[
0
].
className
=
"
ico-arrow-up
"
;
}
else
{
$
(
it
).
find
(
"
.ico-arrow-up
"
)[
0
].
className
=
"
ico-arrow-down
"
;
}
});
},
/*
* 后台及当前页面所需插件初始化完后,对权限进行控制及当前页面属于 tools 时,tools 选项需展开。
*/
inited
:
function
()
{
// Removes functions with the current user role
if
(
Label
.
userRole
!==
"
adminRole
"
)
{
for
(
var
i
=
0
;
i
<
this
.
adTools
.
length
;
i
++
)
{
$
(
"
#tabs
"
).
tabs
(
"
remove
"
,
this
.
adTools
[
i
]);
}
}
else
{
// 当前 tab 属于 Tools 时,设其展开
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
();
/*
* Copyright (c) 2009, 2010, 2011, 2012, B3log Team
*
...
...
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