文章自动保存
上线之后才发现我的博客没有自动保存功能,不过具体实现应该不复杂。
参考ckeditor5官方文档Getting and saving data - CKEditor 5 Documentation,config配置信息如下:
ClassicEditor
.create( document.querySelector( '#editor' ), {
plugins: [
Autosave,
// ... other plugins
],
autosave: {
save( editor ) {
waitingTime: 5000, // in ms
return saveData( editor.getData() );
}
},
// ... other configuration options
} );
ckeditor5-Autosave插件会根据config配置信息,在文章发生更改或者waitingTime之后,运行autosave后的js方法。后边文章的保存、前端状态的更新等就有我们自己来实现。
ckeditor5处理逻辑清晰了,后续实现就并不困难。前端获取文章信息,并使用ajax向服务器发出请求。服务器接收请求后分两种情况:
- 未保存过此文章。则new article,并将 保存/发布 状态标记置为保存,然后向前端返回保存成功的HttpResponse;
- 已保存过此文章。则update article,然后向前端返回保存成功的HttpResponse;
前端使用ajax代替submit,后端整合new article和uptate article方法,形成save方法,这就是实现自动保存的大致思路。
题外话
还想到两个比较有意思的功能:
- 使用jQuery监听用户输入,实现 Ctrl+Enter 快捷发布以及Ctrl+S 快捷保存或其它快捷键;
- 使用js在 document.ready() 之后,更改ckeditor的工具栏,实现ckeditor自由布局,或者向工具栏中插入按钮或其它元素。