Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit a9986af

Browse files
committed
保存草稿功能
1 parent 7bfbca8 commit a9986af

File tree

14 files changed

+190
-14
lines changed

14 files changed

+190
-14
lines changed

src/logic/book.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ const (
2727
WsMsgOnline // 发送在线用户数(和需要时也发历史最高)
2828
)
2929

30-
const MessageQueueLen = 10
30+
const MessageQueueLen = 5
3131

3232
type Message struct {
3333
Type int `json:"type"`

static/js/articles.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@
3737

3838
var articles = new SG.Articles();
3939
articles.publish(this, function(data) {
40+
purgeComposeDraft(uid, 'article');
41+
4042
setTimeout(function(){
4143
if (data.id) {
4244
window.location.href = '/articles/'+data.id;

static/js/comment.js

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,21 @@
1111
}
1212
});
1313

14+
$('#comment-content').on('change', function() {
15+
var content = $(this).val();
16+
17+
var objdata = {content: content};
18+
19+
saveReplyDraft(uid, keyprefix, objid, objdata);
20+
});
21+
22+
(function() {
23+
var draft = loadReplyDraft(uid, keyprefix, objid);
24+
if (draft) {
25+
$('#comment-content').val(draft.content);
26+
}
27+
})();
28+
1429
$('.page-comment .md-toolbar .edit').on('click', function(evt){
1530
evt.preventDefault();
1631

@@ -176,8 +191,10 @@
176191
var username = $('.md-toolbar .reply-to').data('username');
177192
content = '#'+floor+'楼 @'+username+' '+content;
178193
}
179-
postComment($(this), content, function(comment){
194+
postComment($(this), content, function(comment) {
180195
comTip("回复成功!");
196+
purgeReplyDraft(uid, keyprefix, objid);
197+
181198
$('#commentForm textarea').val('');
182199

183200
$('.md-toolbar .reply-to .close').click();

static/js/common.js

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -417,6 +417,46 @@ jQuery(document).ready(function($) {
417417
});
418418
});
419419

420+
window.saveComposeDraft = function(uid, keyprefix, objdata) {
421+
var key = keyprefix+':compose:by:' + uid;
422+
lscache.set(key, objdata, 525600);
423+
console.log('Compose draft for UID ' + uid + ' is saved');
424+
};
425+
426+
window.loadComposeDraft = function(uid, keyprefix) {
427+
var key = keyprefix+":compose:by:" + uid;
428+
var draft = lscache.get(key);
429+
console.log("Loaded compose draft for UID " + uid);
430+
431+
return draft;
432+
}
433+
434+
window.purgeComposeDraft = function(uid, keyprefix) {
435+
var key = keyprefix+":compose:by:" + uid;
436+
lscache.remove(key);
437+
console.log("Purged compose draft for UID " + uid);
438+
}
439+
440+
window.saveReplyDraft = function(uid, keyprefix, objid, objdata) {
441+
var key = keyprefix+':'+objid+':reply:by:' + uid;
442+
lscache.set(key, objdata, 525600);
443+
console.log('Reply draft for ' + keyprefix + ':' + objid + ' is saved');
444+
};
445+
446+
window.loadReplyDraft = function(uid, keyprefix, objid) {
447+
var key = keyprefix+':'+objid+':reply:by:' + uid;
448+
var draft = lscache.get(key);
449+
console.log('Loaded reply draft for ' + keyprefix + ':' + objid);
450+
451+
return draft;
452+
}
453+
454+
window.purgeReplyDraft = function(uid, keyprefix, objid) {
455+
var key = keyprefix+':'+objid+':reply:by:' + uid;
456+
lscache.remove(key);
457+
console.log('Purged reply draft for ' + keyprefix + ':' + objid);
458+
}
459+
420460
// 图片响应式
421461
setTimeout(function(){
422462
$('.page .content img').addClass('img-responsive');

static/js/topics.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@
4545

4646
var topics = new SG.Topics();
4747
topics.publish(this, function(data) {
48+
purgeComposeDraft(uid, 'topic');
49+
4850
setTimeout(function(){
4951
if (data.tid) {
5052
window.location.href = '/topics/'+data.tid;

template/articles/detail.html

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ <h1 id="title" data-id="{{.article.Id}}">
183183
<!-- <script type="text/javascript" src="//twemoji.maxcdn.com/twemoji.min.js"></script>
184184
<script type="text/javascript" src="/static/js/libs/twemojis.js"></script> -->
185185
<script type="text/javascript" src="/static/js/libs/plupload.full.min.js"></script>
186-
<script type="text/javascript" src="/static/js/comment.js?v=1.0"></script>
186+
<script type="text/javascript" src="/static/js/comment.js?v=1.25"></script>
187187
<script type="text/javascript" src="/static/js/puploader.js?v=1.1"></script>
188188
{{if .article.IsSelf}}
189189
<script type="text/javascript">
@@ -200,6 +200,9 @@ <h1 id="title" data-id="{{.article.Id}}">
200200
"/rank/view",
201201
];
202202

203+
var keyprefix = 'article';
204+
var objid = {{.article.Id}};
205+
203206
$(function(){
204207
{{if .article.Markdown}}
205208
new SG.Articles().parseContent($('.page .content'));

template/articles/new.html

Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -177,10 +177,40 @@ <h3 class="title"><i class="glyphicon glyphicon-list-alt"></i>&nbsp;发布文章
177177
CKEDITOR.replace( 'myeditor', MyEditorConfig );
178178
}
179179

180+
var isNew = {{.article.Id}} == '';
181+
var isMarkdown = true;
182+
180183
$(function() {
181184
// 文本框自动伸缩
182185
$('.need-autogrow').autoGrow();
183186

187+
function saveArticleComposeDraft() {
188+
if (!isNew || !isMarkdown) {
189+
return;
190+
}
191+
192+
var title = $('#title').val(),
193+
content = $('#markdown-content').val();
194+
195+
var objdata = {title: title, content: content};
196+
197+
saveComposeDraft(uid, 'article', objdata);
198+
}
199+
200+
(function() {
201+
if (isNew && isMarkdown) {
202+
var draft = loadComposeDraft(uid, 'article');
203+
if (draft) {
204+
$('#title').val(draft.title);
205+
$('#markdown-content').val(draft.content);
206+
}
207+
}
208+
})();
209+
210+
$('#title,#markdown-content').on('change', function() {
211+
saveArticleComposeDraft();
212+
});
213+
184214
$('#markdown-content').on('input propertychange', function() {
185215
var markdownString = $(this).val();
186216
// 配置 marked 语法高亮
@@ -195,8 +225,25 @@ <h3 class="title"><i class="glyphicon glyphicon-list-alt"></i>&nbsp;发布文章
195225
emojify.run($('#content-preview').get(0));
196226
});
197227

228+
$('#markdown-content').on('keydown', function(e) {
229+
if (e.keyCode == 9) {
230+
e.preventDefault();
231+
var indent = "\t";
232+
var start = this.selectionStart;
233+
var end = this.selectionEnd;
234+
var selected = window.getSelection().toString();
235+
selected = indent + selected.replace(/\n/g, '\n' + indent);
236+
this.value = this.value.substring(0, start) + selected
237+
+ this.value.substring(end);
238+
this.setSelectionRange(start + indent.length, start
239+
+ selected.length);
240+
}
241+
});
242+
198243
$('input[type=radio]').on('click', function() {
199244
if ($(this).val() == 0) {
245+
isMarkdown = false;
246+
200247
init();
201248
$('#cke_myeditor').show();
202249
$('#markdown-editor').hide();
@@ -206,6 +253,8 @@ <h3 class="title"><i class="glyphicon glyphicon-list-alt"></i>&nbsp;发布文章
206253

207254
$('.markdown-preview').hide();
208255
} else {
256+
isMarkdown = true;
257+
209258
$('#cke_myeditor').hide();
210259
$('#markdown-editor').show();
211260

@@ -217,5 +266,5 @@ <h3 class="title"><i class="glyphicon glyphicon-list-alt"></i>&nbsp;发布文章
217266
});
218267
});
219268
</script>
220-
<script type="text/javascript" src="/static/js/articles.js?v=0.3"></script>
269+
<script type="text/javascript" src="/static/js/articles.js?v=0.4"></script>
221270
{{end}}

template/books/detail.html

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,14 +149,17 @@ <h4>目录</h4>
149149
<!-- <script type="text/javascript" src="//twemoji.maxcdn.com/twemoji.min.js"></script>
150150
<script type="text/javascript" src="/static/js/libs/twemojis.js"></script> -->
151151
<script type="text/javascript" src="/static/js/libs/plupload.full.min.js"></script>
152-
<script type="text/javascript" src="/static/js/comment.js?v=1.1"></script>
152+
<script type="text/javascript" src="/static/js/comment.js?v=1.25"></script>
153153
<script type="text/javascript" src="/static/js/puploader.js?v=1.1"></script>
154154
<script type="text/javascript">
155155
// 需要加载的侧边栏
156156
SG.SIDE_BARS = [
157157
"/rank/view",
158158
];
159159

160+
var keyprefix = 'book';
161+
var objid = {{.book.Id}};
162+
160163
$(function(){
161164
// 文本框自动伸缩
162165
$('.need-autogrow').autoGrow();

template/common/comment.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
</div>
2727
<div class="submit" id="commentForm">
2828
<div class="text">
29-
<textarea name="content" class="main-textarea need-autogrow" rows="8"></textarea>
29+
<textarea id="comment-content" name="content" class="main-textarea need-autogrow" rows="8"></textarea>
3030
</div>
3131
<div class="content-preview cell"></div>
3232
<div class="sub row">

template/common/layout.html

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -247,16 +247,18 @@
247247
<script src="/static/js/libs/jquery.timeago.zh-CN.js?v=1.5.4"></script>
248248
<script src="/static/js/libs/md5.js"></script>
249249
<script type="text/javascript">
250+
var uid = {{.me.Uid}};
250251
var isHttps = {{.is_https}},
251252
cdnDomain = "{{.cdn_domain}}";
252253
if (isHttps) {
253-
var wsUrl = 'wss://{{.wshost}}/ws?uid={{.me.Uid}}';
254+
var wsUrl = 'wss://{{.wshost}}/ws?uid='+uid;
254255
} else {
255-
var wsUrl = 'ws://{{.wshost}}/ws?uid={{.me.Uid}}';
256+
var wsUrl = 'ws://{{.wshost}}/ws?uid='+uid;
256257
}
257258
var GLaunchTime = {{timestamp .app.LaunchTime}}*1000;
258259
</script>
259260
<script src="/static/js/common.js?v=1.2"></script>
261+
<script src="//cdn.bootcss.com/lscache/1.1.0/lscache.min.js"></script>
260262
{{template "js" .}}
261263
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jsrender/0.9.84/jsrender.min.js"></script>
262264
<script type="text/javascript">

template/projects/detail.html

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,14 +148,17 @@ <h1>
148148
<script type="text/javascript" src="/static/js/libs/emojis.js"></script>
149149
<script type="text/javascript" src="/static/js/libs/plupload.full.min.js"></script>
150150
<script type="text/javascript" src="/static/js/projects.js?v=1.1"></script>
151-
<script type="text/javascript" src="/static/js/comment.js?v=1.2"></script>
151+
<script type="text/javascript" src="/static/js/comment.js?v=1.25"></script>
152152
<script type="text/javascript" src="/static/js/puploader.js?v=1.1"></script>
153153
<script type="text/javascript">
154154
// 需要加载的侧边栏
155155
SG.SIDE_BARS = [
156156
"/rank/view",
157157
];
158158

159+
var keyprefix = 'project';
160+
var objid = {{.project.Id}};
161+
159162
$(function(){
160163
// 解析 desc
161164
new SG.Projects().parseDesc();

template/resources/detail.html

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ <h1>
127127
<script type="text/javascript" src="/static/js/libs/emojis.js"></script>
128128
<script type="text/javascript" src="/static/js/libs/plupload.full.min.js"></script>
129129
<script type="text/javascript" src="/static/js/resources.js?v=1.1"></script>
130-
<script type="text/javascript" src="/static/js/comment.js?v=1.2"></script>
130+
<script type="text/javascript" src="/static/js/comment.js?v=1.25"></script>
131131
<script type="text/javascript" src="/static/js/puploader.js?v=1.1"></script>
132132
<script type="text/javascript">
133133
// 需要加载的侧边栏
@@ -137,6 +137,9 @@ <h1>
137137
"/rank/view"
138138
];
139139

140+
var keyprefix = 'resource';
141+
var objid = {{.resource.id}};
142+
140143
$(function(){
141144
new SG.Resources().parseContent($('.page .content'));
142145

template/topics/detail.html

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ <h1>
130130
<script type="text/javascript" src="/static/js/libs/emojis.js"></script>
131131
<script type="text/javascript" src="/static/js/libs/plupload.full.min.js"></script>
132132
<script type="text/javascript" src="/static/js/topics.js?v=1.1"></script>
133-
<script type="text/javascript" src="/static/js/comment.js?v=1.24"></script>
133+
<script type="text/javascript" src="/static/js/comment.js?v=1.25"></script>
134134
<script type="text/javascript" src="/static/js/puploader.js?v=1.2"></script>
135135
<script type="text/javascript">
136136
// 需要加载的侧边栏
@@ -141,6 +141,9 @@ <h1>
141141
"/rank/view"
142142
];
143143

144+
var keyprefix = 'topic';
145+
var objid = {{.topic.tid}};
146+
144147
$(function(){
145148
new SG.Topics().parseContent($('.page .content'));
146149

0 commit comments

Comments
 (0)