| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
- /**
- * @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 = $('<h2></h2>')
- .text(minder.getLang('ui.recent'))
- .appendTo($panel);
- var $clear = $('<button></button>')
- .addClass('clear-recent-list')
- .text(minder.getLang('ui.clearrecent'))
- .appendTo($panel);
- /* 最近文件列表容器 */
- var $ul = $('<ul></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 = $('<li></li>')
- .addClass('recent-file-item')
- .data('path', item.path)
- .appendTo($ul);
- $('<h4></h4>')
- .addClass('file-name')
- .text(item.filename)
- .appendTo($li);
- $('<p></p>')
- .addClass('file-title')
- .text(item.title)
- .appendTo($li);
- $('<span></span>')
- .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;
- }
- };
- });
|