| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- /**
- * @fileOverview
- *
- * 草稿箱功能
- *
- * @author: techird
- * @copyright: Baidu FEX, 2014
- */
- KityMinder.registerUI('menu/open/draft', function(minder) {
- var $menu = minder.getUI('menu/menu');
- var $open = minder.getUI('menu/open/open');
- var $loader = minder.getUI('widget/fileloader');
- var frdTime = minder.getUI('widget/friendlytimespan');
- var $doc = minder.getUI('doc');
- // 旧数据迁移
- if (localStorage.drafts) {
- var oldDrafts = JSON.parse(localStorage.drafts);
- var list = oldDrafts.map(function(draft) {
- var ret = {};
- ret.json = draft.data;
- ret.time = +new Date(draft.update);
- ret.title = JSON.parse(draft.data).data.text;
- return ret;
- });
- delete localStorage.drafts;
- localStorage.draft = JSON.stringify(list);
- }
- var draftList = minder.getUI('widget/locallist').use('draft');
- /* 网盘面板 */
- var $panel = $($open.createSub('draft')).addClass('draft-panel');
- /* 标题 */
- var $title = $('<h2></h2>')
- .text(minder.getLang('ui.menu.draftheader'))
- .appendTo($panel);
- var $clear = $('<button></button>')
- .addClass('clear-draft')
- .text(minder.getLang('ui.cleardraft'))
- .appendTo($panel);
- /* 最近文件列表容器 */
- var $ul = $('<ul></ul>')
- .addClass('draft-list')
- .appendTo($panel);
- var current = null,
- lastDoc = null;
- $ul.delegate('.draft-list-item', 'click', function(e) {
- if (!$doc.checkSaved()) return;
- var item = $(e.target).closest('.draft-list-item').data('item');
- var index = draftList.findIndex(function(finding) {
- return finding == item;
- });
- if (index > -1) {
- current = item;
- draftList.remove(index);
- draftList.unshift(current);
- lastDoc = {
- title: current.title,
- protocol: 'json',
- content: current.json,
- path: current.path,
- source: current.source,
- saved: false
- };
- $doc.load(lastDoc);
- }
- $menu.hide();
- });
- $clear.on('click', function() {
- if (!window.confirm(minder.getLang('ui.cleardraftconfirm'))) return;
- draftList.clear();
- current = null;
- renderList();
- });
- $doc.on('docsave', popDraft);
- $doc.on('docchange', pushDraft);
- renderList();
- function pushDraft(doc) {
- if (doc.saved) return;
- if (doc == lastDoc) {
- if (current) {
- draftList.remove(0);
- }
- } else {
- current = null;
- }
- lastDoc = doc;
- current = current || {};
- current.json = JSON.stringify(minder.exportJson());
- current.title = doc.title;
- current.time = +new Date();
- current.path = doc.path;
- current.source = doc.source;
- draftList.unshift(current);
- renderList();
- }
- function popDraft() {
- if (current) {
- draftList.remove(0);
- current = null;
- }
- renderList();
- }
- function renderList() {
- $ul.empty();
- draftList.forEach(function(item) {
- var $li = $('<li></li>')
- .addClass('draft-list-item')
- .data('item', item)
- .appendTo($ul);
- $('<h4></h4>')
- .addClass('draft-title')
- .text(item.title)
- .appendTo($li);
- $('<span></span>')
- .addClass('file-time')
- .displayFriendlyTime(item.time)
- .appendTo($li);
- });
- }
- return {
- hasDraft: function() {
- return draftList.length;
- },
- openLast: function() {
- $ul.find('.draft-list-item').eq(0).click();
- },
- last: function() {
- return draftList.get(0) || null;
- }
- };
- });
|