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
4df4d7e2
Commit
4df4d7e2
authored
Jan 15, 2017
by
Liang Ding
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'refs/remotes/origin/1.8.0-dev'
parents
523b7a62
833e48c8
Changes
7
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
38 additions
and
51 deletions
+38
-51
src/main/java/org/b3log/solo/api/symphony/ArticleReceiver.java
...ain/java/org/b3log/solo/api/symphony/ArticleReceiver.java
+31
-45
src/main/webapp/js/admin/about.js
src/main/webapp/js/admin/about.js
+1
-1
src/main/webapp/js/admin/latkeAdmin.js
src/main/webapp/js/admin/latkeAdmin.js
+1
-1
src/main/webapp/skins/next/css/next.css
src/main/webapp/skins/next/css/next.css
+1
-0
src/main/webapp/skins/next/css/next.min.css
src/main/webapp/skins/next/css/next.min.css
+2
-2
src/main/webapp/skins/next/js/next.js
src/main/webapp/skins/next/js/next.js
+1
-1
src/main/webapp/skins/next/js/next.min.js
src/main/webapp/skins/next/js/next.min.js
+1
-1
No files found.
src/main/java/org/b3log/solo/api/symphony/ArticleReceiver.java
View file @
4df4d7e2
...
@@ -15,9 +15,6 @@
...
@@ -15,9 +15,6 @@
*/
*/
package
org
.
b3log
.
solo
.
api
.
symphony
;
package
org
.
b3log
.
solo
.
api
.
symphony
;
import
javax.inject.Inject
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
org.b3log.latke.Keys
;
import
org.b3log.latke.Keys
;
import
org.b3log.latke.logging.Level
;
import
org.b3log.latke.logging.Level
;
import
org.b3log.latke.logging.Logger
;
import
org.b3log.latke.logging.Logger
;
...
@@ -42,11 +39,15 @@ import org.json.JSONObject;
...
@@ -42,11 +39,15 @@ import org.json.JSONObject;
import
org.jsoup.Jsoup
;
import
org.jsoup.Jsoup
;
import
org.jsoup.safety.Whitelist
;
import
org.jsoup.safety.Whitelist
;
import
javax.inject.Inject
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
/**
/**
* Article receiver (from B3log Symphony).
* Article receiver (from B3log Symphony).
*
*
* @author <a href="http://88250.b3log.org">Liang Ding</a>
* @author <a href="http://88250.b3log.org">Liang Ding</a>
* @version 1.0.
2.7, Nov 8, 2016
* @version 1.0.
3.7, Jan 15, 2017
* @since 0.5.5
* @since 0.5.5
*/
*/
@RequestProcessor
@RequestProcessor
...
@@ -56,39 +57,33 @@ public class ArticleReceiver {
...
@@ -56,39 +57,33 @@ public class ArticleReceiver {
* Logger.
* Logger.
*/
*/
private
static
final
Logger
LOGGER
=
Logger
.
getLogger
(
ArticleReceiver
.
class
.
getName
());
private
static
final
Logger
LOGGER
=
Logger
.
getLogger
(
ArticleReceiver
.
class
.
getName
());
/**
* Article abstract length.
*/
private
static
final
int
ARTICLE_ABSTRACT_LENGTH
=
500
;
/**
/**
* Preference query service.
* Preference query service.
*/
*/
@Inject
@Inject
private
PreferenceQueryService
preferenceQueryService
;
private
PreferenceQueryService
preferenceQueryService
;
/**
/**
* Article management service.
* Article management service.
*/
*/
@Inject
@Inject
private
ArticleMgmtService
articleMgmtService
;
private
ArticleMgmtService
articleMgmtService
;
/**
/**
* Article query service.
* Article query service.
*/
*/
@Inject
@Inject
private
ArticleQueryService
articleQueryService
;
private
ArticleQueryService
articleQueryService
;
/**
/**
* User query service.
* User query service.
*/
*/
@Inject
@Inject
private
UserQueryService
userQueryService
;
private
UserQueryService
userQueryService
;
/**
* Article abstract length.
*/
private
static
final
int
ARTICLE_ABSTRACT_LENGTH
=
500
;
/**
/**
* Adds an article with the specified request.
* Adds an article with the specified request.
*
* <p>
* <p>
* Renders the response with a json object, for example,
* Renders the response with a json object, for example,
* <pre>
* <pre>
...
@@ -100,21 +95,17 @@ public class ArticleReceiver {
...
@@ -100,21 +95,17 @@ public class ArticleReceiver {
* </pre>
* </pre>
* </p>
* </p>
*
*
* @param request the specified http servlet request, for example, <pre>
* @param request the specified http servlet request, for example,
* {
* "article": {
* "article": {
* "oId": "",
* "oId": "",
* "articleTitle": "",
* "articleTitle": "",
* "articleContent": "",
* "articleContent": "",
* "articleTags": "tag1,tag2,tag3",
* "articleTags": "tag1,tag2,tag3",
* "userB3Key": "",
* "userB3Key": "",
* "articleEditorType": ""
* "articleEditorType": ""
* }
* }
* }
* </pre>
*
* @param response the specified http servlet response
* @param response the specified http servlet response
* @param context the specified http request context
* @param context
the specified http request context
* @throws Exception exception
* @throws Exception exception
*/
*/
@RequestProcessing
(
value
=
"/apis/symphony/article"
,
method
=
HTTPRequestMethod
.
POST
)
@RequestProcessing
(
value
=
"/apis/symphony/article"
,
method
=
HTTPRequestMethod
.
POST
)
...
@@ -179,7 +170,6 @@ public class ArticleReceiver {
...
@@ -179,7 +170,6 @@ public class ArticleReceiver {
/**
/**
* Updates an article with the specified request.
* Updates an article with the specified request.
*
* <p>
* <p>
* Renders the response with a json object, for example,
* Renders the response with a json object, for example,
* <pre>
* <pre>
...
@@ -190,21 +180,17 @@ public class ArticleReceiver {
...
@@ -190,21 +180,17 @@ public class ArticleReceiver {
* </pre>
* </pre>
* </p>
* </p>
*
*
* @param request the specified http servlet request, for example, <pre>
* @param request the specified http servlet request, for example,
* {
* "article": {
* "article": {
* "oId": "", // Symphony Article#clientArticleId
* "oId": "", // Symphony Article#clientArticleId
* "articleTitle": "",
* "articleTitle": "",
* "articleContent": "",
* "articleContent": "",
* "articleTags": "tag1,tag2,tag3",
* "articleTags": "tag1,tag2,tag3",
* "userB3Key": "",
* "userB3Key": "",
* "articleEditorType": ""
* "articleEditorType": ""
* }
* }
* }
* </pre>
*
* @param response the specified http servlet response
* @param response the specified http servlet response
* @param context the specified http request context
* @param context
the specified http request context
* @throws Exception exception
* @throws Exception exception
*/
*/
@RequestProcessing
(
value
=
"/apis/symphony/article"
,
method
=
HTTPRequestMethod
.
PUT
)
@RequestProcessing
(
value
=
"/apis/symphony/article"
,
method
=
HTTPRequestMethod
.
PUT
)
...
@@ -240,8 +226,8 @@ public class ArticleReceiver {
...
@@ -240,8 +226,8 @@ public class ArticleReceiver {
return
;
return
;
}
}
final
String
plainTextContent
=
Jsoup
.
parse
(
article
.
optString
(
Article
.
ARTICLE_CONTENT
)).
text
(
);
final
String
articleContent
=
article
.
optString
(
Article
.
ARTICLE_CONTENT
);
final
String
plainTextContent
=
Jsoup
.
clean
(
Markdowns
.
toHTML
(
articleContent
),
Whitelist
.
none
());
if
(
plainTextContent
.
length
()
>
ARTICLE_ABSTRACT_LENGTH
)
{
if
(
plainTextContent
.
length
()
>
ARTICLE_ABSTRACT_LENGTH
)
{
article
.
put
(
Article
.
ARTICLE_ABSTRACT
,
plainTextContent
.
substring
(
0
,
ARTICLE_ABSTRACT_LENGTH
)
+
"...."
);
article
.
put
(
Article
.
ARTICLE_ABSTRACT
,
plainTextContent
.
substring
(
0
,
ARTICLE_ABSTRACT_LENGTH
)
+
"...."
);
}
else
{
}
else
{
...
...
src/main/webapp/js/admin/about.js
View file @
4df4d7e2
...
@@ -25,7 +25,7 @@
...
@@ -25,7 +25,7 @@
admin
.
about
=
{
admin
.
about
=
{
init
:
function
()
{
init
:
function
()
{
$
.
ajax
({
$
.
ajax
({
url
:
"
http://
rhythm.b3log.org/version/solo/latest/
"
+
Label
.
version
,
url
:
window
.
location
.
protocol
+
'
://
'
+
"
rhythm.b3log.org/version/solo/latest/
"
+
Label
.
version
,
type
:
"
GET
"
,
type
:
"
GET
"
,
cache
:
false
,
cache
:
false
,
dataType
:
"
jsonp
"
,
dataType
:
"
jsonp
"
,
...
...
src/main/webapp/js/admin/latkeAdmin.js
View file @
4df4d7e2
...
@@ -4105,7 +4105,7 @@ admin.register.main = {
...
@@ -4105,7 +4105,7 @@ admin.register.main = {
admin
.
about
=
{
admin
.
about
=
{
init
:
function
()
{
init
:
function
()
{
$
.
ajax
({
$
.
ajax
({
url
:
"
http://
rhythm.b3log.org/version/solo/latest/
"
+
Label
.
version
,
url
:
window
.
location
.
protocol
+
'
://
'
+
"
rhythm.b3log.org/version/solo/latest/
"
+
Label
.
version
,
type
:
"
GET
"
,
type
:
"
GET
"
,
cache
:
false
,
cache
:
false
,
dataType
:
"
jsonp
"
,
dataType
:
"
jsonp
"
,
...
...
src/main/webapp/skins/next/css/next.css
View file @
4df4d7e2
...
@@ -579,6 +579,7 @@ img {
...
@@ -579,6 +579,7 @@ img {
.sidebar
section
{
.sidebar
section
{
opacity
:
0
;
opacity
:
0
;
position
:
relative
;
position
:
relative
;
overflow
:
auto
;
}
}
.sidebar
>
ul
>
li
{
.sidebar
>
ul
>
li
{
...
...
src/main/webapp/skins/next/css/next.min.css
View file @
4df4d7e2
This diff is collapsed.
Click to expand it.
src/main/webapp/skins/next/js/next.js
View file @
4df4d7e2
...
@@ -99,7 +99,7 @@ var NexT = {
...
@@ -99,7 +99,7 @@ var NexT = {
$
(
'
.sidebar
'
).
prepend
(
articleTocHTML
);
$
(
'
.sidebar
'
).
prepend
(
articleTocHTML
);
var
$sectionF
=
$
(
'
.sidebar section:first
'
).
html
(
$
(
'
.b3-solo-list
'
)),
var
$sectionF
=
$
(
'
.sidebar section:first
'
).
html
(
$
(
'
.b3-solo-list
'
)),
$sectionL
=
$
(
'
.sidebar section:last
'
);
$sectionL
=
$
(
'
.sidebar section:last
'
);
$sectionF
.
height
(
$
(
window
).
height
()
-
90
);
// 切换 tab
// 切换 tab
$
(
'
.sidebar > ul > li
'
).
click
(
function
()
{
$
(
'
.sidebar > ul > li
'
).
click
(
function
()
{
if
(
$
(
this
).
data
(
'
tab
'
)
===
'
toc
'
)
{
if
(
$
(
this
).
data
(
'
tab
'
)
===
'
toc
'
)
{
...
...
src/main/webapp/skins/next/js/next.min.js
View file @
4df4d7e2
...
@@ -13,4 +13,4 @@
...
@@ -13,4 +13,4 @@
* See the License for the specific language governing permissions and
* See the License for the specific language governing permissions and
* limitations under the License.
* limitations under the License.
*/
*/
var
NexT
=
{
init
:
function
(){
$
(
"
.sidebar-toggle
"
).
click
(
function
(){
var
i
=
$
(
"
.sidebar
"
);
$
(
this
).
hasClass
(
"
sidebar-active
"
)?(
$
(
this
).
removeClass
(
"
sidebar-active
"
),
$
(
"
body
"
).
animate
({
"
padding-right
"
:
0
}),
i
.
animate
({
right
:
-
320
}),
i
.
find
(
"
section
"
).
css
(
"
opacity
"
,
0
)):(
$
(
this
).
addClass
(
"
sidebar-active
"
),
$
(
"
body
"
).
animate
({
"
padding-right
"
:
320
}),
i
.
animate
({
right
:
0
},
function
(){
i
.
find
(
"
section:first
"
).
animate
({
opacity
:
1
})}))}),
$
(
"
.site-nav-toggle
"
).
click
(
function
(){
$
(
"
.site-nav
"
).
slideToggle
()}),
$
(
document
).
ready
(
function
(){
setTimeout
(
function
(){
$
(
"
.logo-wrap
"
).
css
(
"
opacity
"
,
1
),
$
(
"
.logo-line-before i
"
).
animate
({
left
:
"
0
"
},
function
(){
$
(
"
.site-title
"
).
css
(
"
opacity
"
,
1
).
animate
({
top
:
0
},
function
(){
$
(
"
.menu
"
).
css
(
"
opacity
"
,
1
).
animate
({
"
margin-top
"
:
"
15px
"
}),
$
(
"
.main
"
).
css
(
"
opacity
"
,
1
).
animate
({
top
:
"
0
"
},
function
(){
$
(
"
.b3-solo-list li
"
).
length
>
0
&&
$
(
window
).
width
()
>
1
e3
&&
$
(
"
.sidebar-toggle
"
).
click
()})})}),
$
(
"
.logo-line-after i
"
).
animate
({
right
:
"
0
"
})},
500
)})},
initArticle
:
function
(){
if
(
$
(
"
.b3-solo-list li
"
).
length
>
0
&&
$
(
window
).
width
()
>
1
e3
){
$
(
"
.sidebar-toggle
"
).
addClass
(
"
has-toc
"
);
var
i
=
'
<ul><li class="current" data-tab="toc">
'
+
Label
.
tocLabel
+
'
</li><li data-tab="site">
'
+
Label
.
siteViewLabel
+
"
</li></ul><section></section>
"
;
$
(
"
.sidebar
"
).
prepend
(
i
);
var
t
=
$
(
"
.sidebar section:first
"
).
html
(
$
(
"
.b3-solo-list
"
)),
a
=
$
(
"
.sidebar section:last
"
);
$
(
"
.sidebar > ul > li
"
).
click
(
function
(){
"
toc
"
===
$
(
this
).
data
(
"
tab
"
)?
a
.
animate
({
opacity
:
"
0
"
,
top
:
"
-50px
"
},
300
,
function
(){
t
.
show
().
css
(
"
top
"
,
"
-50px
"
),
t
.
animate
({
opacity
:
"
1
"
,
top
:
"
0
"
},
300
)}):
t
.
animate
({
opacity
:
"
0
"
,
top
:
"
-50px
"
},
300
,
function
(){
t
.
hide
().
css
(
"
top
"
,
"
-50px
"
),
a
.
animate
({
opacity
:
"
1
"
,
top
:
"
0
"
},
300
)}),
$
(
"
.sidebar > ul > li
"
).
removeClass
(
"
current
"
),
$
(
this
).
addClass
(
"
current
"
)})}}};
NexT
.
init
();
var
NexT
=
{
init
:
function
(){
$
(
"
.sidebar-toggle
"
).
click
(
function
(){
var
i
=
$
(
"
.sidebar
"
);
$
(
this
).
hasClass
(
"
sidebar-active
"
)?(
$
(
this
).
removeClass
(
"
sidebar-active
"
),
$
(
"
body
"
).
animate
({
"
padding-right
"
:
0
}),
i
.
animate
({
right
:
-
320
}),
i
.
find
(
"
section
"
).
css
(
"
opacity
"
,
0
)):(
$
(
this
).
addClass
(
"
sidebar-active
"
),
$
(
"
body
"
).
animate
({
"
padding-right
"
:
320
}),
i
.
animate
({
right
:
0
},
function
(){
i
.
find
(
"
section:first
"
).
animate
({
opacity
:
1
})}))}),
$
(
"
.site-nav-toggle
"
).
click
(
function
(){
$
(
"
.site-nav
"
).
slideToggle
()}),
$
(
document
).
ready
(
function
(){
setTimeout
(
function
(){
$
(
"
.logo-wrap
"
).
css
(
"
opacity
"
,
1
),
$
(
"
.logo-line-before i
"
).
animate
({
left
:
"
0
"
},
function
(){
$
(
"
.site-title
"
).
css
(
"
opacity
"
,
1
).
animate
({
top
:
0
},
function
(){
$
(
"
.menu
"
).
css
(
"
opacity
"
,
1
).
animate
({
"
margin-top
"
:
"
15px
"
}),
$
(
"
.main
"
).
css
(
"
opacity
"
,
1
).
animate
({
top
:
"
0
"
},
function
(){
$
(
"
.b3-solo-list li
"
).
length
>
0
&&
$
(
window
).
width
()
>
1
e3
&&
$
(
"
.sidebar-toggle
"
).
click
()})})}),
$
(
"
.logo-line-after i
"
).
animate
({
right
:
"
0
"
})},
500
)})},
initArticle
:
function
(){
if
(
$
(
"
.b3-solo-list li
"
).
length
>
0
&&
$
(
window
).
width
()
>
1
e3
){
$
(
"
.sidebar-toggle
"
).
addClass
(
"
has-toc
"
);
var
i
=
'
<ul><li class="current" data-tab="toc">
'
+
Label
.
tocLabel
+
'
</li><li data-tab="site">
'
+
Label
.
siteViewLabel
+
"
</li></ul><section></section>
"
;
$
(
"
.sidebar
"
).
prepend
(
i
);
var
t
=
$
(
"
.sidebar section:first
"
).
html
(
$
(
"
.b3-solo-list
"
)),
a
=
$
(
"
.sidebar section:last
"
);
t
.
height
(
$
(
window
).
height
()
-
90
),
$
(
"
.sidebar > ul > li
"
).
click
(
function
(){
"
toc
"
===
$
(
this
).
data
(
"
tab
"
)?
a
.
animate
({
opacity
:
"
0
"
,
top
:
"
-50px
"
},
300
,
function
(){
t
.
show
().
css
(
"
top
"
,
"
-50px
"
),
t
.
animate
({
opacity
:
"
1
"
,
top
:
"
0
"
},
300
)}):
t
.
animate
({
opacity
:
"
0
"
,
top
:
"
-50px
"
},
300
,
function
(){
t
.
hide
().
css
(
"
top
"
,
"
-50px
"
),
a
.
animate
({
opacity
:
"
1
"
,
top
:
"
0
"
},
300
)}),
$
(
"
.sidebar > ul > li
"
).
removeClass
(
"
current
"
),
$
(
this
).
addClass
(
"
current
"
)})}}};
NexT
.
init
();
\ No newline at end of file
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment