/** * @fileOverview * * 最近文件功能 * * @author: techird * @copyright: Baidu FEX, 2014 */ KityMinder.registerUI('menu/open/recent', 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'); var recentList = minder.getUI('widget/locallist').use('recent'); var finder = minder.getUI('widget/netdiskfinder'); /* 网盘面板 */ var $panel = $($open.createSub('recent')).addClass('recent-file-panel'); minder.on('uiready', function() { minder.getUI('topbar/user').requireLogin($panel); }); /* 标题 */ var $title = $('

') .text(minder.getLang('ui.recent')) .appendTo($panel); var $clear = $('') .addClass('clear-recent-list') .text(minder.getLang('ui.clearrecent')) .appendTo($panel); /* 最近文件列表容器 */ var $ul = $('') .addClass('recent-file-list') .appendTo($panel); $ul.delegate('.recent-file-item', 'click', function(e) { if (!doc.checkSaved()) return; var netdisk = minder.getUI('menu/open/netdisk'); var path = $(e.target) .closest('.recent-file-item') .data('path'); netdisk.open(path); }); $clear.on('click', function() { if (!window.confirm(minder.getLang('ui.clearrecentconfirm'))) return; recentList.clear(); renderList(); }); doc.on('docload', addToList); doc.on('docsave', addToList); finder.on('mv', trackFileMove); renderList(); function trackFileMove(from, to) { var fromPath = from.split('/'); var toPath = to.split('/'); function preCommonLength(a, b) { var i = 0; while((i in a) && (i in b) && a[i] == b[i]) i++; return (i in b) ? 0 : i; } recentList.forEach(function(item) { var originPath = item.path.split('/'); var clen = preCommonLength(originPath, fromPath); if (clen) { var movedPath = toPath.concat(originPath.slice(clen)); item.path = movedPath.join('/'); item.filename = toPath.pop(); } }); renderList(); } function addToList(doc) { if (doc.source != 'netdisk') return; var exist = recentList.findIndex('path', doc.path); if (~exist) { recentList.remove(exist); } recentList.unshift({ path: doc.path, filename: fio.file.anlysisPath(doc.path).filename, title: minder.getMinderTitle(), time: +new Date() }); renderList(); } function renderList() { $ul.empty(); recentList.forEach(function(item) { var $li = $('
  • ') .addClass('recent-file-item') .data('path', item.path) .appendTo($ul); $('

    ') .addClass('file-name') .text(item.filename) .appendTo($li); $('

    ') .addClass('file-title') .text(item.title) .appendTo($li); $('') .addClass('file-time') .displayFriendlyTime(item.time) .appendTo($li); }); } return { hasRecent: function() { return recentList.length; }, loadLast: function() { $ul.find('.recent-file-item').eq(0).click(); }, last: function() { return recentList.get(0) || null; } }; });