Commit f0709a44 authored by techird's avatar techird

文件移动及重命名功能

parent a2cac974
......@@ -57,6 +57,7 @@ KityMinder.LANG['zh-cn'] = {
'err_share_data': '加载分享内容出错',
'err_share_sync_fail': '分享内容同步失败',
'err_move_file': '文件移动失败',
'err_rename': '重命名失败',
'unknownreason': '可能是外星人篡改了代码...',
'pcs_code': {
......@@ -131,12 +132,16 @@ KityMinder.LANG['zh-cn'] = {
'ui': {
'load_share_for_edit': '正在加载分享的文件...',
'share_sync_success': '分享内容已同步',
'recycle_clear_confirm': '确认清空回收站么?清空后的文件无法恢复。',
'fullscreen_exit_hint': '按 Esc 或 F11 退出全屏',
'error_detail': '详细信息',
'copy_and_feedback': '复制并反馈',
'move_file_confirm': '确定把 "{0}" 移动到 "{1}" 吗?',
'rename': '重命名',
'rename_success': '<b>{0}</b> 重命名成功',
'move_success': '<b>{0}</b> 移动成功',
'command': {
'appendsiblingnode': '插入同级主题',
......
......@@ -73,8 +73,6 @@ KityMinder.registerModule('Expand', function() {
var changed = node.isExpanded() ? (state == STATE_COLLAPSE) : (state == STATE_EXPAND);
policy = policy || EXPAND_POLICY.KEEP_STATE;
policy(node, state, policy);
if (!changed) return;
node.renderTree().getMinder().layout(100);
......
......@@ -13,6 +13,33 @@ KityMinder.registerUI('doc', function(minder) {
var current = { saved: true };
var loading = false;
var notice = minder.getUI('widget/notice');
var finder = minder.getUI('widget/netdiskfinder');
finder.on('mv', trackFileMove);
function trackFileMove(from, to) {
if (current.source != 'netdisk') return;
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;
}
var originPath = current.path.split('/');
var clen = preCommonLength(originPath, fromPath);
if (clen) {
var movedPath = toPath.concat(originPath.slice(clen));
current.path = movedPath.join('/');
current.title = movedPath.pop();
ret.fire('docchange', current);
}
}
/**
* 加载文档
......@@ -46,9 +73,8 @@ KityMinder.registerUI('doc', function(minder) {
doc.data = data;
doc.json = JSON.stringify(data);
minder.getUI('topbar/title').setTitle(doc.title, doc.saved);
ret.fire('docload', doc);
ret.fire('docchange', doc);
return doc;
......@@ -67,9 +93,10 @@ KityMinder.registerUI('doc', function(minder) {
current = doc;
doc.data = minder.exportJson();
doc.json = JSON.stringify(doc.data);
minder.getUI('topbar/title').setTitle(doc.title, doc.saved = true);
doc.saved = true;
ret.fire('docsave', doc);
ret.fire('docchange', doc);
}
function getCurrent() {
......@@ -87,24 +114,16 @@ KityMinder.registerUI('doc', function(minder) {
minder.on('contentchange', function() {
if (loading) return;
var $title = minder.getUI('topbar/title');
if (current.source != 'netdisk') {
current.title = minder.getMinderTitle();
$title.setTitle(current.title, current.saved = false);
ret.fire('docchange', current);
current.saved = false;
} else {
if (current.json != JSON.stringify(minder.exportJson())) {
$title.setSaved(current.saved = false);
ret.fire('docchange', current);
} else {
$title.setSaved(current.saved = true);
}
current.saved = current.json == JSON.stringify(minder.exportJson());
}
ret.fire('docchange', current);
});
}, 1000);
......
......@@ -96,6 +96,7 @@ KityMinder.registerUI('menu/open/draft', function(minder) {
renderList();
function pushDraft(doc) {
if (doc.saved) return;
if (doc == lastDoc) {
if (current) {
draftList.remove(0);
......
......@@ -18,7 +18,7 @@ KityMinder.registerUI('menu/open/netdisk', function(minder) {
var notice = minder.getUI('widget/notice');
/* 网盘面板 */
var $panel = $($open.createSub('netdisk'));
var $panel = $($open.createSub('netdisk')).addClass('netdisk-open-panel');
/* extension => protocol */
var supports = {};
......
......@@ -15,6 +15,7 @@ KityMinder.registerUI('menu/open/recent', function(minder) {
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');
......@@ -59,8 +60,33 @@ KityMinder.registerUI('menu/open/recent', function(minder) {
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;
......
......@@ -66,6 +66,8 @@ KityMinder.registerUI('menu/save/netdisk', function(minder) {
$format.val('.km');
$format.on('change', normalizeFilename);
/* 保存按钮 */
var $saveBtn = $('<button></button>')
.addClass('save-button')
......@@ -73,7 +75,7 @@ KityMinder.registerUI('menu/save/netdisk', function(minder) {
.click(save)
.appendTo($selects);
$menu.on('show', setFileName);
$menu.on('show', setFilename);
$finder.on('fileclick', function(file) {
$finder.select(file.path);
......@@ -98,7 +100,8 @@ KityMinder.registerUI('menu/save/netdisk', function(minder) {
var autoSaveTimer = 0;
function autoSave() {
function lazySave() {
function lazySave(doc) {
if (doc.saved) return;
clearTimeout(autoSaveTimer);
autoSaveTimer = setTimeout(saveCurrent, autoSaveDuration);
}
......@@ -127,13 +130,26 @@ KityMinder.registerUI('menu/save/netdisk', function(minder) {
return doSave(doc.path, doc.protocol, doc, $title, 'leaveTheMenu');
}
function getSaveContext() {
function normalizeFilename() {
var filename = $filename.val();
if (fio.file.anlysisPath(filename).extension != $format.val()) {
$filename.val(filename += $format.val())[0].select();
var info = fio.file.anlysisPath(filename);
var ext = info.extension;
if (ext != $format.val()) {
if (ext in supports) {
$filename.val(info.name + $format.val());
} else {
$filename.val(filename + $format.val());
}
$filename[0].select();
}
return $filename.val();
}
function getSaveContext() {
var filename = normalizeFilename();
var path = $finder.pwd() + filename;
var doc = $doc.current();
var protocol = supports[$format.val()];
......@@ -212,22 +228,27 @@ KityMinder.registerUI('menu/save/netdisk', function(minder) {
});
}
function setFileName() {
function setFilename() {
var doc = $doc.current();
switch (doc.source) {
case 'netdisk':
setFileNameForNetDiskSource(doc);
setFilenameForNetDiskSource(doc);
break;
default:
setFileNameForOtherSource(doc);
setFilenameForOtherSource(doc);
break;
}
$filename[0].select();
}
function setFileNameForNetDiskSource(doc) {
function setFilenameInputValue(filename) {
$filename.val(filename);
normalizeFilename(filename);
}
function setFilenameForNetDiskSource(doc) {
if (!fio.user.current()) return;
var path = doc.path;
......@@ -242,11 +263,11 @@ KityMinder.registerUI('menu/save/netdisk', function(minder) {
$finder.select(path);
}
$filename.val(pathInfo.filename);
setFilenameInputValue(pathInfo.filename);
}
function setFileNameForOtherSource(doc) {
$filename.val(doc.title);
function setFilenameForOtherSource(doc) {
setFilenameInputValue(doc.title);
$finder.select(null);
}
......
......@@ -11,11 +11,19 @@ KityMinder.registerUI('menu/share/share', function(minder) {
var $share_menu = minder.getUI('menu/menu').createSubMenu('share');
var $create_menu = $($share_menu.createSub('createshare'));
var $manage_menu = $($share_menu.createSub('manageshare'));
var $share_list = $('<ul>')
.attr('id', 'manage-share-list')
.appendTo($manage_menu);
var $doc = minder.getUI('doc');
var notice = minder.getUI('widget/notice');
var finder = minder.getUI('widget/netdiskfinder');
var BACKEND_URL = 'http://naotu.baidu.com/share.php';
if (window.location.host == 'local.host') {
BACKEND_URL = 'http://naotu.baidu.com/share_debug.php'; // 测试环境
}
var currentShare = null;
var shareList = [];
......@@ -67,6 +75,51 @@ KityMinder.registerUI('menu/share/share', function(minder) {
}
});
finder.on('mv', trackFileMove);
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;
}
shareListLoaded.then(function(list) {
var userChecked = fio.user.check();
list.forEach(function(item) {
var originPath = item.path.split('/');
var clen = preCommonLength(originPath, fromPath);
if (clen) {
var movedPath = toPath.concat(originPath.slice(clen));
userChecked.then(function(user) {
$.pajax({
url: BACKEND_URL,
type: 'POST',
data: {
action: 'move',
ak: user.access_token,
id: item.id || item.shareMinder.id,
path: movedPath.join('/')
}
}).then(function() {
notice.info(minder.getLang('ui.share_sync_success', item.title));
})['catch'](function(e) {
notice.error('err_share_sync_failed', e);
});
});
item.path = movedPath.join('/');
}
});
renderShareList(list);
});
}
function loadShareFile() {
var pattern = /(?:shareId|share_id)=(\w+)([&#]|$)/;
......@@ -424,12 +477,10 @@ KityMinder.registerUI('menu/share/share', function(minder) {
function renderShareList(list) {
var frdTime = minder.getUI('widget/friendlytimespan');
var $list = $('<ul>')
.attr('id', 'manage-share-list')
.appendTo($manage_menu);
if (!list) return;
$share_list.empty();
list.forEach(function(share) {
$list.append(buildShareItem(share));
$share_list.append(buildShareItem(share));
});
}
......
......@@ -71,6 +71,47 @@ html, body {
text-align: center;
font-weight: normal;
color: @ui-fore;
vertical-align: middle;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
span {
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
input {
outline: none;
font-size: 14px;
border: none;
border-radius: 2px;
box-shadow: 0 0 3px black;
padding: 3px 2px 3px 5px;
background: white;
}
&.rename-enabled{
cursor: text;
&:after {
content: ' ';
width: 20px;
height: 20px;
display: inline-block;
background: url(../images/icons.png) 1px -1110px;
vertical-align: middle;
position: relative;
top: -1px;
margin-left: 5px;
opacity: 0;
transition: opacity ease .3s;
}
}
&.rename-enabled:hover:after {
opacity: 0.6;
}
&.loading {
&:before {
......
......@@ -37,7 +37,7 @@
}
#main-menu {
@left-width: 200px;
@left-width: 150px;
background: white;
.dock;
......
......@@ -7,6 +7,13 @@
100% { transform: translate(0, 0); }
}
@keyframes shake-left-right {
0% { transform: translate(0, 0); }
25% { transform: translate(-3px, 0); }
75% { transform: translate(3px, 0); }
100% { transform: translate(0, 0); }
}
.netdisk-finder {
.dir.drag-enter {
......@@ -23,23 +30,44 @@
}
}
&.recycle-bin {
.head .control {
.button.mkdir {
display: none;
}
.button.recycle {
display: none;
}
.button.recycle-clear {
display: block;
}
}
.file-list .file-list-item.dir:after {
display: none;
}
}
.head {
padding-bottom: 10px;
height: 30px;
border-bottom: 1px solid #eee;
.control {
float: right;
.mkdir {
}
.button {
vertical-align: middle;
font-size: 0;
background: url(../images/finder.svg) no-repeat;
box-sizing: border-box;
width: 30px;
height: 30px;
border-radius: 2px;
box-sizing: border-box;
border: 1px solid transparent;
&:hover {
border: 1px solid lighten(#717B94, 30%);
}
&:active {
box-shadow: inset 0 1px 3px fadeOut(#717B94, 80%);
}
&.recycle {
background-position: -30px 0;
......@@ -48,12 +76,11 @@
}
}
&:hover {
border: 1px solid lighten(#717B94, 30%);
}
&:active {
box-shadow: inset 0 1px 3px fadeOut(#717B94, 80%);
&.recycle-clear {
display: none;
background-position: -90px 0;
}
}
}
.nav {
......@@ -111,6 +138,7 @@
}
.file-list {
.dock(41px, 0, 0, 0);
margin: 0;
padding: 0;
list-style: none;
......@@ -124,20 +152,59 @@
}
.file-list-item {
font-size: 14px;
height: 20px;
line-height: 20px;
padding: 10px 20px 10px 40px;
cursor: default;
-webkit-user-drag: element;
-khtml-user-drag: element;
border: 1px solid transparent;
.rename-button {
display: inline-block;
width: 20px;
height: 20px;
margin-left: 15px;
vertical-align: middle;
border-radius: 2px;
box-sizing: border-box;
border: 1px solid transparent;
opacity: 0;
transition: transform,opacity ease .2s;
transform: scale(0);
font-size: 0;
&:hover {
border: 1px solid lighten(#717B94, 30%);
}
&:active {
box-shadow: inset 0 1px 3px fadeOut(#717B94, 80%);
}
}
.filename {
height: 20px;
line-height: 20px;
vertical-align: middle;
}
input {
margin: 0;
outline: none;
width: 61.80%;
}
&:hover {
/* background-color: lighten(@tab-hover, 55%); */
}
&:active {
background-color: lighten(@tab-hover, 50%);
.rename-button {
transition: transform,opacity ease .2s .5s;
transform: scale(1);
opacity: 1;
background: url(../images/icons.png) 1px -1130px;
}
}
&.selected {
&:hover .rename-button {
background: url(../images/icons.png) 1px -1110px;
}
background-color: lighten(@tab-active, 20%);
color: white;
&.dir .icon {
......@@ -165,6 +232,14 @@
background: url(../images/icons.png) 0 -445px no-repeat;
}
}
&.renaming {
input.invalid-name {
animation: shake-left-right .3s ease;
}
.rename-button {
display: none !important;
}
}
&.dir {
position: relative;
.icon {
......@@ -183,16 +258,19 @@
top: 20px;
margin-top: -4px;
}
input {
margin: 0;
outline: none;
width: 61.80%;
}
}
}
}
}
.netdisk-open-panel .netdisk-finder {
.dock;
}
.netdisk-save-panel .netdisk-finder {
.dock(0, 0, 50px, 0);
}
// for save
.netdisk-save-panel .netdisk-file-list {
bottom: 50px;
......
......@@ -30,6 +30,7 @@
overflow: auto;
overflow-x: hidden;
overflow-y: auto;
padding-right: 10px;
&:empty:after {
content: '没有分享';
......
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 17.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
<!ENTITY ns_extend "http://ns.adobe.com/Extensibility/1.0/">
<!ENTITY ns_ai "http://ns.adobe.com/AdobeIllustrator/10.0/">
<!ENTITY ns_graphs "http://ns.adobe.com/Graphs/1.0/">
<!ENTITY ns_vars "http://ns.adobe.com/Variables/1.0/">
<!ENTITY ns_imrep "http://ns.adobe.com/ImageReplacement/1.0/">
<!ENTITY ns_sfw "http://ns.adobe.com/SaveForWeb/1.0/">
<!ENTITY ns_custom "http://ns.adobe.com/GenericCustomNamespace/1.0/">
<!ENTITY ns_adobe_xpath "http://ns.adobe.com/XPath/1.0/">
]>
<svg version="1.1" id="图层_1" xmlns:x="&ns_extend;" xmlns:i="&ns_ai;" xmlns:graph="&ns_graphs;"
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="300px" height="55px"
viewBox="0.5 0.5 300 55" style="enable-background:new 0.5 0.5 300 55;" xml:space="preserve">
<switch>
<foreignObject requiredExtensions="&ns_ai;" x="0" y="0" width="1" height="1">
<i:pgfRef xlink:href="#adobe_illustrator_pgf">
</i:pgfRef>
</foreignObject>
<g i:extraneous="self">
<g id="参考线">
</g>
<g id="create">
<path id="add-folder-2-icon" style="fill:#717B94;" d="M25.5,19.5h-2v-2h-2v2h-2v2h2v2h2v-2h2V19.5z M17.5,23.5h-12v-17h6.696
l1.645,1.638C14.296,8.591,14.912,8.5,15.555,8.5H25.5v6h-2v-4h-7.945c-1.183,0-2.296-0.108-3.134-0.943L11.365,8.5H7.5v13h10
V23.5z"/>
</g>
<g id="recycle">
<polygon style="fill:#717B94;" points="51.5,22.5 39.5,22.5 39.5,10.5 37.5,10.5 37.5,24.5 53.5,24.5 53.5,10.5 51.5,10.5 "/>
<path style="fill:#717B94;" d="M48.5,6.5c-0.823,0-2-1.222-2-2h-2c0,0.778-1.177,2-2,2h-5v2h16v-2H48.5z"/>
<path style="fill:#717B94;" d="M44.5,19.5c0,0.552-0.448,1-1,1l0,0c-0.552,0-1-0.448-1-1v-7c0-0.552,0.448-1,1-1l0,0
c0.552,0,1,0.448,1,1V19.5z"/>
<path style="fill:#717B94;" d="M48.5,19.5c0,0.552-0.448,1-1,1l0,0c-0.552,0-1-0.448-1-1v-7c0-0.552,0.448-1,1-1l0,0
c0.552,0,1,0.448,1,1V19.5z"/>
<polygon style="fill:#717B94;" points="81.5,22.5 69.5,22.5 69.5,10.5 67.5,10.5 67.5,24.5 83.5,24.5 83.5,10.5 81.5,10.5 "/>
<path style="fill:#717B94;" d="M78.907,5.478c-0.794-0.217-1.606-1.707-1.4-2.457l-1.929-0.529
c-0.206,0.75-1.664,1.618-2.457,1.4l-4.822-1.321L67.769,4.5L83.2,8.729L83.729,6.8L78.907,5.478z"/>
<path style="fill:#717B94;" d="M74.5,19.5c0,0.552-0.448,1-1,1l0,0c-0.552,0-1-0.448-1-1v-7c0-0.552,0.448-1,1-1l0,0
c0.552,0,1,0.448,1,1V19.5z"/>
<path style="fill:#717B94;" d="M78.5,19.5c0,0.552-0.448,1-1,1l0,0c-0.552,0-1-0.448-1-1v-7c0-0.552,0.448-1,1-1l0,0
c0.552,0,1,0.448,1,1V19.5z"/>
</g>
<path style="fill:#767E9C;" d="M9.543,53.5c1.014,0,6.2-3,12.037,0h5.672H27.5V32.61c0-0.107-0.14-0.11-0.247-0.11h-7.515
l-10.4,21H9.543z"/>
<path style="fill:#767E9C;" d="M21.679,53.5l-10.377-21H3.788c-0.107,0-0.288,0.003-0.288,0.11V53.5h0.288h5.755
c1.014,0,6.2-3,12.037,0H21.679z"/>
<path style="fill:#60687C;" d="M9.338,53.5h0.205c1.014,0,6.2-3,12.037,0h0.099l-6.164-12.786L9.338,53.5z"/>
<g>
<path style="fill:#76809B;" d="M54.836,38.828l1.056-5.778l-5.798,1.034c-1.391-0.687-2.957-1.074-4.614-1.074
c-1.651,0-3.212,0.384-4.599,1.067l-5.788-1.007l1.017,5.788l0,0c-0.677,1.382-1.057,2.936-1.057,4.579
c0,5.759,4.669,10.428,10.428,10.428s10.428-4.669,10.428-10.428C55.908,41.783,55.522,40.218,54.836,38.828z"/>
<path style="fill:#FFFFFF;" d="M51.901,38.878c-2.514,0-4.552,2.038-4.552,4.552c0,2.514,2.038,4.552,4.552,4.552
c2.514,0,4.552-2.038,4.552-4.552C56.453,40.916,54.415,38.878,51.901,38.878z M51.896,46.389c-1.604,0-2.904-1.3-2.904-2.904
s1.3-2.904,2.904-2.904s2.904,1.3,2.904,2.904S53.5,46.389,51.896,46.389z"/>
<path style="fill:#FFFFFF;" d="M39.003,38.878c-2.514,0-4.552,2.038-4.552,4.552c0,2.514,2.038,4.552,4.552,4.552
c2.514,0,4.552-2.038,4.552-4.552C43.555,40.916,41.517,38.878,39.003,38.878z M38.998,46.369c-1.604,0-2.904-1.3-2.904-2.904
s1.3-2.904,2.904-2.904s2.904,1.3,2.904,2.904S40.602,46.369,38.998,46.369z"/>
</g>
<path style="fill-rule:evenodd;clip-rule:evenodd;fill:#76809B;" d="M86.888,31.842c0,0-2.398,0.852-7.73,0.852
c-2.871,0-7.383,0-7.383,0s-5.806-0.631-5.995,4.828c-0.189,5.459,0,11.043,0,11.864s0.126,3.818-0.41,4.354
c-0.536,0.536,1.988-0.82,5.837-0.757c3.849,0.063,10.98-0.095,10.98-0.095s3.926,0.273,4.354-4.922
C86.983,42.602,85.91,35.786,86.888,31.842z"/>
<path style="fill-rule:evenodd;clip-rule:evenodd;fill:#FFFFFF;" d="M82.393,44.851c-0.244-0.239-0.424-0.414-0.556-0.543
c-0.036-0.017-0.066-0.039-0.091-0.067c-4.761-2.931-1.457-1.898,0.413-2.666c1.871-0.769,1.237-3.208,1.237-3.208
s-4.913-0.201-4.779,0.167c0.134,0.368,0.602,3.108-2.473,2.506c-3.075-0.602-3.409-4.612-3.409-4.612l-5.648-0.167
c0,0-0.501,2.874,3.509,4.913c3.564,1.812,0.714,1.749-0.55,1.948c-0.01,0.004-0.019,0.009-0.029,0.012
c-0.051,0.015-0.105,0.021-0.158,0.022c-0.031,0.007-0.061,0.014-0.088,0.021c-0.029,0.015-0.061,0.025-0.097,0.031
c-0.004,0.002-0.009,0.003-0.013,0.005c-0.835,0.334-3.175,0.602-3.542,3.442l4.411-0.067c0,0,0.568-2.707,2.339-2.974
c1.771-0.267,5.38,1.003,5.815,4.979l5.481,0.134C84.164,48.728,83.897,46.321,82.393,44.851z"/>
</g>
</switch>
<i:pgf id="adobe_illustrator_pgf">
<![CDATA[
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
]]>
<![CDATA[
+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
]]>
<![CDATA[
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
]]>
<![CDATA[
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
]]>
<![CDATA[
zcoUnWyo+4Y79frKttoW+QE7nEzt29nYUP6GuwOt8SNvuJOrfMxoCE89ZC/OsDjppryz1CXBO+7O
MitpXZL+a+lkOlM+vUsoYXTWTxxxw53+U81hksqxCBTJsUMSNtTNHNBVV5BlKDrb9vDC2t5F/1KH
E6px1/Pz6edT0ZWP5yisfV2rR7N05lzBfo4rrBXLMdTP6YW1sBe1c+EOq29/Vt2ikhYxsZFeNTZ0
ybBh66C4Fp1xp8CGEavOkhWtIiakxbqU3jImXUVq+2679Lw+nRk2oLND3Haa9xUd95auMLVmEROD
Mb1lTNo1kG45B17Jr1TQSQCfTWXBrGgYKkQV4KB0UoQewxCeRJF2u/ZMw7Rb885vXYZhGxmGijfl
HVrjmmpNpGec8KIAyuSDalzTbg23SG7HRmld0m5dxeI6jqYCXQV01VbrqXGVZm8o7SXpuinv4Ose
5U5vgJfkneu6xzafP6Vd9axmo/Hci3lyXZccPC4/uUumKeoWN9NFeo3bYDvzkms3Mi9ZKpEsBBp3
6ZR7kE6nPCWYxllfsYrHPBcPjokuiSunLp9W846wTlxcmtZRrocLPUaqQlIS1cM5ooOKtAgPcSV7
D5s5Zloq1P61W2pFeEOPIlAs10g9ivwXSWmasEpMCvRD7Zo7V1gAFNaIoawb7h62iGPDAZWWpvla
k3JU4R62C6tiaRq1+8Ddomp0yUV3seiX8o1zKnfr+dodCVA6I4JD8JdywSGWWzYaikCvy+RkqASU
NJjVyvAeW8pAsw+dvCJ6+csLmbilGOzj3qoC1mTAo08MnUd0touidgIJo9DS91rW1aPPVqXbMWqy
HJDN7mBZN7ebS1WnUpwYiSM5bSdJmxSfePDh2D9frnq9PCSLSe0WM61UGGmERLn6Zy03JOEtZnpv
+TooFQZtdMnezJI5MrVKbkgojqR6M4veSFLVopGAZtCNJx2pVXqr0g5KrVIpAJNkaCqdbqqLnpZ6
s7Q0cnsyOlI2dcwPQoGDOpg4FYYkn6Ul3EvSXQp4UJaWGr+o5Gkl6NHs+zli19q95IWV8Oavc7gS
71m57csDY7BHnhoni7Hs2fat37Nn2OUBU3s9PT72nj1DXAusONzlOfEYaB2RZYPOKsDTDqFFuhJW
AeqrF9P0WmBX+1lah8THJEkjfWIprZntXZRl53ywhOkTu3P5yJJw8AnB4BySoMpZN4cddgUPIVM+
7Aryi3bQThxVoU+GECUQ5NVPXaDj/Lqr21SUo54zIgTNZ6Htec45kDl/7JTyIy3jzW4QxfCUB0Uq
nnOgwxoX3y8mkfc6SwHl1k+8nShbv6+7FFDzdl12/bhTm5SR1XSdTAzsLTOgM42qnwMoqyndWd+7
X+yQzjQv/z0EY5r3+xyCMc3CIP2TlF7xcxLGfIrjkpQLS3d4D6sC1OvMyt+VpvucDnmu3KsBVDtV
Q6mLw2/UU7ofWV8VoN4aQMNJVYB6awBV7kfWUQWotwZQ3x2pSiuktwZQOVdBTxWg3hpAXTVWiujQ
WwMouyuquwpQbw0ghKJeBciMZ29WEutJ9VK+k29k03Upn/ZtWee4lA95Fp/Fb3wpnzAKp1toHHwp
n4IcO/OlfOI8pW91KZ80CvdtLuUTauRvdynfKfdX6r+UT31/Hw6q7HtVsp2f9JwNBW/12zsb6sh7
/WSq9wTMfEIl19nOhtJ/r5921fM57vU7x9lQ2vf66Tob6uR7/diquzOcDaVyr99B9ZVH3+sn4VnJ
rX4qlHzQvX7Cse7f6ifjWRx1r98xVTaH3+unFHOgb/VTzFQ58F4/9fsH9N1fqX2vn4645Rnu9VO/
1U98O8Px9/rpzlA96V4/foXkwrniXLjj7/VT5176nKvT7/VTV3RKfuWh9/oplVy5JP7L0eXu6F4/
fXF+HclTqvf66c+CPuVeP5aG5G/1O/I+vgMLcBXv4zv5KlvhrX4a9ybovtdPPZ1Mz/n8eu71U6/C
FecpHX+vn7qnxudan3avn2RcOm8yOvReP/V9GoNwp+aEe/3UE665GOyJ9/rpqEo7w71+bCmY/K1+
Utvy2Hv9juD9I+71kytH5I2JE+/j03mKh/Z9fMfXPfC9wCzoc9zrp36rn+BUwJPu9VNPbBXkKpx0
r5/6eR4y9/Icda+flNjF+RmyFUNH3Ot3gBw74V4/Hdb4Ge71c6je6nfofXwHH6Yjl9F99L1+e72I
mPDI0xv27vVTvIqPt2DPcK+frhN1Tr7XT7XY4pmuSzr9Xj91M8egPySteq+fupkjV1l/zL1+e3JK
dKvfSffx6S5i17iP7wxyE97qd6b7+DTcJz05VzL3+h1YDC+KKZ1wr598MTx7q58YyvH3+qnf6ieR
Y0ff66ee6MTcx6dd06YRO1V326UYO/ZeP5lx6ePKg+71O92v1HOvn1zNkzg+do57/URD2ot/KZ02
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
]]>
<![CDATA[
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
]]>
<![CDATA[
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
bd3+9M7i/wDW2yQ9
]]>
</i:pgf>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="300px" height="55px" viewBox="0.5 0.5 300 55" enable-background="new 0.5 0.5 300 55" xml:space="preserve">
<g id="参考线">
</g>
<g id="create">
<path id="add-folder-2-icon" fill="#717B94" d="M25.5,19.5h-2v-2h-2v2h-2v2h2v2h2v-2h2V19.5z M17.5,23.5h-12v-17h6.696l1.645,1.638
C14.296,8.591,14.912,8.5,15.555,8.5H25.5v6h-2v-4h-7.945c-1.183,0-2.296-0.108-3.134-0.943L11.365,8.5H7.5v13h10V23.5z"/>
</g>
<g id="recycle">
<polygon fill="#717B94" points="51.5,22.5 39.5,22.5 39.5,10.5 37.5,10.5 37.5,24.5 53.5,24.5 53.5,10.5 51.5,10.5 "/>
<path fill="#717B94" d="M48.5,6.5c-0.823,0-2-1.222-2-2h-2c0,0.778-1.177,2-2,2h-5v2h16v-2H48.5z"/>
<path fill="#717B94" d="M44.5,19.5c0,0.552-0.448,1-1,1l0,0c-0.552,0-1-0.448-1-1v-7c0-0.552,0.448-1,1-1l0,0c0.552,0,1,0.448,1,1
V19.5z"/>
<path fill="#717B94" d="M48.5,19.5c0,0.552-0.448,1-1,1l0,0c-0.552,0-1-0.448-1-1v-7c0-0.552,0.448-1,1-1l0,0c0.552,0,1,0.448,1,1
V19.5z"/>
<polygon fill="#717B94" points="81.5,22.5 69.5,22.5 69.5,10.5 67.5,10.5 67.5,24.5 83.5,24.5 83.5,10.5 81.5,10.5 "/>
<path fill="#717B94" d="M78.907,5.478c-0.794-0.217-1.606-1.707-1.4-2.457l-1.929-0.529c-0.206,0.75-1.664,1.618-2.457,1.4
l-4.822-1.321L67.769,4.5L83.2,8.729L83.729,6.8L78.907,5.478z"/>
<path fill="#717B94" d="M74.5,19.5c0,0.552-0.448,1-1,1l0,0c-0.552,0-1-0.448-1-1v-7c0-0.552,0.448-1,1-1l0,0c0.552,0,1,0.448,1,1
V19.5z"/>
<path fill="#717B94" d="M78.5,19.5c0,0.552-0.448,1-1,1l0,0c-0.552,0-1-0.448-1-1v-7c0-0.552,0.448-1,1-1l0,0c0.552,0,1,0.448,1,1
V19.5z"/>
</g>
<path fill="#767E9C" d="M9.543,53.5c1.014,0,6.2-3,12.037,0h5.672H27.5V32.61c0-0.107-0.14-0.11-0.247-0.11h-7.515l-10.4,21H9.543z"
/>
<path fill="#767E9C" d="M21.679,53.5l-10.377-21H3.788c-0.107,0-0.288,0.003-0.288,0.11V53.5h0.288h5.755c1.014,0,6.2-3,12.037,0
H21.679z"/>
<path fill="#60687C" d="M9.338,53.5h0.205c1.014,0,6.2-3,12.037,0h0.099l-6.164-12.786L9.338,53.5z"/>
<g>
<path fill="#76809B" d="M54.836,38.828l1.056-5.778l-5.798,1.034c-1.391-0.687-2.957-1.074-4.614-1.074
c-1.651,0-3.212,0.384-4.599,1.067l-5.788-1.007l1.017,5.788l0,0c-0.677,1.382-1.057,2.936-1.057,4.579
c0,5.759,4.669,10.428,10.428,10.428s10.428-4.669,10.428-10.428C55.908,41.783,55.522,40.218,54.836,38.828z"/>
<path fill="#FFFFFF" d="M51.901,38.878c-2.514,0-4.552,2.038-4.552,4.552c0,2.514,2.038,4.552,4.552,4.552
c2.514,0,4.552-2.038,4.552-4.552C56.453,40.916,54.415,38.878,51.901,38.878z M51.896,46.389c-1.604,0-2.904-1.3-2.904-2.904
s1.3-2.904,2.904-2.904s2.904,1.3,2.904,2.904S53.5,46.389,51.896,46.389z"/>
<path fill="#FFFFFF" d="M39.003,38.878c-2.514,0-4.552,2.038-4.552,4.552c0,2.514,2.038,4.552,4.552,4.552
c2.514,0,4.552-2.038,4.552-4.552C43.555,40.916,41.517,38.878,39.003,38.878z M38.998,46.369c-1.604,0-2.904-1.3-2.904-2.904
s1.3-2.904,2.904-2.904s2.904,1.3,2.904,2.904S40.602,46.369,38.998,46.369z"/>
</g>
<path fill-rule="evenodd" clip-rule="evenodd" fill="#76809B" d="M86.888,31.842c0,0-2.398,0.852-7.73,0.852
c-2.871,0-7.383,0-7.383,0s-5.806-0.631-5.995,4.828c-0.189,5.459,0,11.043,0,11.864s0.126,3.818-0.41,4.354
c-0.536,0.536,1.988-0.82,5.837-0.757c3.849,0.063,10.98-0.095,10.98-0.095s3.926,0.273,4.354-4.922
C86.983,42.602,85.91,35.786,86.888,31.842z"/>
<path fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" d="M82.393,44.851c-0.244-0.239-0.424-0.414-0.556-0.543
c-0.036-0.017-0.066-0.039-0.091-0.067c-4.761-2.931-1.457-1.898,0.413-2.666c1.871-0.769,1.237-3.208,1.237-3.208
s-4.913-0.201-4.779,0.167c0.134,0.368,0.602,3.108-2.473,2.506c-3.075-0.602-3.409-4.612-3.409-4.612l-5.648-0.167
c0,0-0.501,2.874,3.509,4.913c3.564,1.812,0.714,1.749-0.55,1.948c-0.01,0.004-0.019,0.009-0.029,0.012
c-0.051,0.015-0.105,0.021-0.158,0.022c-0.031,0.007-0.061,0.014-0.088,0.021c-0.029,0.015-0.061,0.025-0.097,0.031
c-0.004,0.002-0.009,0.003-0.013,0.005c-0.835,0.334-3.175,0.602-3.542,3.442l4.411-0.067c0,0,0.568-2.707,2.339-2.974
c1.771-0.267,5.38,1.003,5.815,4.979l5.481,0.134C84.164,48.728,83.897,46.321,82.393,44.851z"/>
<path fill="#707995" d="M108.368,13.764c-1.853-1.464-4.868,0.027-4.868,2.736c0,0,0.091-0.001,0.091,0h0.896l-1.987,2l-2-2h2
c0,0-1,0-1,0C101.5,13.124,106.093,11.165,108.368,13.764z"/>
<path fill="#707995" d="M102.632,18.961c1.853,1.464,4.868,0.247,4.868-2.461c0-0.001-0.021,0-0.021,0H106.5l2-2l2,2h-1c0,0,0,0,0,0
C109.5,19.875,104.907,21.56,102.632,18.961z"/>
<polygon fill="#717B94" points="111.5,22.5 99.5,22.5 99.5,10.5 97.5,10.5 97.5,24.5 113.5,24.5 113.5,10.5 111.5,10.5 "/>
<path fill="#717B94" d="M108.5,6.5c-0.823,0-2-1.222-2-2h-2c0,0.778-1.177,2-2,2h-5v2h16v-2H108.5z"/>
</svg>
ui/theme/default/images/icons.png

20.3 KB | W: | H:

ui/theme/default/images/icons.png

20.6 KB | W: | H:

ui/theme/default/images/icons.png
ui/theme/default/images/icons.png
ui/theme/default/images/icons.png
ui/theme/default/images/icons.png
  • 2-up
  • Swipe
  • Onion skin
......@@ -9,22 +9,111 @@
KityMinder.registerUI('topbar/title', function(minder) {
var $title = $('<h1>').appendTo('#panel');
var $doc = minder.getUI('doc');
var finder = minder.getUI('widget/netdiskfinder');
var notice = minder.getUI('widget/notice');
var renameEnabled = false;
var renameMode = false;
var _title = minder.getLang('ui.untitleddoc');
var _saved = false;
$doc.on('docchange', update);
$title.on('click', rename);
function rename() {
if (!renameEnabled || renameMode) return;
var doc = $doc.current();
var $input = $('<input>').width($title.find('.title-content').width());
var oldFilename = doc.title;
var oldPath = doc.path;
$input.val(oldFilename);
setTimeout(function() {
$input[0].select();
});
$title.addClass('rename-mode');
$title.empty();
$title.append($input);
renameMode = true;
$input.on('keydown', function(e) {
if (e.keyCode == 13) confirm();
else if (e.keyCode == 27) {
cancel();
e.stopPropagation();
}
}).on('blur', cancel);
function exit() {
setTimeout(function() {
renameMode = false;
});
}
function cancel() {
update();
exit();
}
function confirm() {
var newFilename = $input.val();
var oldFilenameInfo = fio.file.anlysisPath(oldFilename);
var newFilenameInfo = fio.file.anlysisPath(newFilename);
if (!newFilenameInfo.name.length) return cancel();
newFilename = newFilenameInfo.name + oldFilenameInfo.extension;
var newPath = fio.file.anlysisPath(oldPath).parentPath + newFilename;
if (newPath == oldPath) return cancel();
$title.addClass('loading');
fio.file.move({
path: oldPath,
newPath: newPath
}).then(function() {
doc.path = newPath;
doc.title = newFilename;
finder.fire('mv', oldPath, newPath);
notice.info(minder.getLang('ui.rename_success', newFilename));
})['catch'](function(e) {
notice.error('err_rename', e);
}).then(function() {
$title.removeClass('loading');
update();
exit();
});
}
}
function enableRename(enabled) {
renameEnabled = enabled;
if (enabled) $title.addClass('rename-enabled');
else $title.removeClass('rename-enabled');
}
function update() {
var doc = $doc.current();
function setTitle(title) {
$title.text(title);
document.title = title + ' - 百度脑图';
title = title || minder.getLang('ui.untitleddoc');
$title.empty().append('<span class="title-content">' + title + '</span>');
document.title = title ? title + ' - 百度脑图' : '百度脑图';
}
if (_saved) {
setTitle(_title);
if (doc.saved) {
setTitle(doc.title);
} else {
setTitle('* ' + _title);
setTitle('* ' + doc.title);
}
enableRename(doc.source == 'netdisk' && doc.saved);
}
update();
......@@ -32,23 +121,8 @@ KityMinder.registerUI('topbar/title', function(minder) {
return {
$title: $title,
setTitle: function(title, saved) {
_title = title;
return this.setSaved(saved);
},
getTitle: function() {
return _title;
},
setSaved: function(saved) {
_saved = saved !== false;
update();
return this;
return $doc.current().title;
}
};
});
\ No newline at end of file
......@@ -70,6 +70,7 @@ KityMinder.registerUI('widget/locallist', function() {
function forEach(callback) {
list.forEach(callback);
save();
}
load.call(this);
......
......@@ -12,8 +12,23 @@ KityMinder.registerUI('widget/netdiskfinder', function(minder) {
var eve = minder.getUI('eve');
var notice = minder.getUI('widget/notice');
var recycleReady = null;
var base = '/apps/kityminder';
var recyclePath = base + '/.recycle';
var moveConfirm = true;
var instances = [];
var Finder = eve.setup({});
Finder.BASE_PATH = base + '/';
Finder.RECYCLE_PATH = recyclePath + '/';
var SIGNATURE = +new Date();
Finder.on('mv', function(from, to, signature) {
if (signature == SIGNATURE) return;
instances.forEach(function(instance) {
instance.refresh();
});
});
/**
* 生成一个网盘的目录访问组件
......@@ -27,8 +42,6 @@ KityMinder.registerUI('widget/netdiskfinder', function(minder) {
instances.push(finder);
var base = '/apps/kityminder';
var recyclePath = base + '/.recycle';
var currentPath = base;
var $finder = $('<div class="netdisk-finder"></div>').appendTo($container);
......@@ -36,26 +49,37 @@ KityMinder.registerUI('widget/netdiskfinder', function(minder) {
/* 顶部工具栏 */
var $headbar = $('<div class="head"></div>').appendTo($finder);
/* 控制按钮 */
var $control = $('<div class="control"></div>').appendTo($headbar);
var $mkdir = $('<a></a>')
.text(minder.getLang('ui.mkdir'))
.attr('title', minder.getLang('ui.mkdir'))
.addClass('button mkdir')
.appendTo($control)
.click(mkdir);
var $recycle = $('<a></a>')
.text(minder.getLang('ui.recycle'))
.attr('title', minder.getLang('ui.recycle'))
.addClass('button recycle dir')
.data('file', { path: recyclePath, filename: minder.getLang('ui.recycle')})
.appendTo($control)
.click(recycle);
/* 路径导航 */
var $nav = $('<div class="nav"></div>').appendTo($headbar);
/* 控制按钮 */
var $control = $('<div class="control"></div>').appendTo($headbar);
var $mkdir = $('<a></a>')
.text(minder.getLang('ui.mkdir'))
.attr('title', minder.getLang('ui.mkdir'))
.addClass('button mkdir')
.appendTo($control)
.click(mkdir);
var $recycle = $('<a></a>')
.text(minder.getLang('ui.recycle'))
.attr('title', minder.getLang('ui.recycle'))
.addClass('button recycle dir')
.data('file', {
path: recyclePath,
filename: minder.getLang('ui.recycle')
})
.appendTo($control)
.click(recycle);
var $recycleClear = $('<a></a>')
.text(minder.getLang('ui.recycle_clear'))
.attr('title', minder.getLang('ui.recycle_clear'))
.addClass('button recycle-clear')
.appendTo($control)
.click(clearRecycle);
/* 路径导航 */
var $nav = $('<div class="nav"></div>').appendTo($headbar);
/* 显示当前目录文件列表 */
var $list = $('<ul class="file-list"></ul>')
......@@ -74,19 +98,102 @@ KityMinder.registerUI('widget/netdiskfinder', function(minder) {
handleClick();
handleDrag();
handleNav();
handleRename();
function handleRename() {
$list.delegate('.file-list-item a.rename-button', 'click', function(e) {
var $li = $(e.target).closest('li');
$li.find('span.filename').remove();
rename($li);
$li.addClass('renaming');
e.stopPropagation();
});
function rename($li) {
rename.onprogress = true;
var file = $li.data('file');
var $input = $('<input>')
.attr('type', 'text')
.addClass('new-dir-name fui-widget fui-selectable')
.val(file.filename)
.appendTo($li);
$input.on('keydown', function (e) {
if (e.keyCode == 13) return confirm();
if (e.keyCode == 27) {
e.stopPropagation();
return cancel();
}
}).on('blur', cancel);
setTimeout(function() {
$input[0].select();
});
function reset(filename) {
$input.remove();
$li.find('.icon').after('<span class="filename">' + filename + '</span>');
$li.removeClass('renaming');
}
function cancel() {
reset(file.filename);
}
function confirm() {
var newFilename = $input.val();
var newPath = file.parentPath + newFilename;
if (file.filename == newFilename) return cancel();
if (fio.file.anlysisPath(newFilename).extension != file.extension) {
$input.addClass('invalid-name');
setTimeout(function () {
$input.removeClass('invalid-name');
}, 500);
return $input.select();
}
$container.addClass('loading');
mv(file.path, newPath).then(function () {
var oldPath = file.path;
file.filename = newFilename;
file.path = newPath;
reset(newFilename);
Finder.fire('mv', oldPath, newPath, SIGNATURE);
notice.info(minder.getLang('ui.rename_success', newFilename));
})['catch'](function(e) {
notice.error('err_rename', e);
cancel();
}).then(function() {
$container.removeClass('loading');
});
}
}
}
function handleClick() {
/* 点击目录中的项目时打开项目 */
$list.delegate('.file-list-item', 'dblclick', function(e) {
if (currentPath == recyclePath + '/') return;
if (mkdir.onprogress) return mkdir.onprogress.select();
var $file = $(e.target),
var $file = $(e.target).closest('li'),
file = $file.data('file');
if (file) open(file);
});
$list.delegate('.file-list-item', 'mousedown', function(e) {
if (mkdir.onprogress) return mkdir.onprogress.select();
var $file = $(e.target),
var $file = $(e.target).closest('li'),
file = $file.data('file');
if (!file) return;
select(file && file.path);
});
}
......@@ -123,6 +230,11 @@ KityMinder.registerUI('widget/netdiskfinder', function(minder) {
.delegate(dirSelector, 'dragleave', dirDragLeave)
.delegate(dirSelector, 'drop', dirDrop);
$list.delegate(fileItemSelector + ' input', 'dragstart', function(e) {
e.stopPropagation();
e.preventDefault();
});
function itemDragStart(e) {
var $target = $(e.target);
if (!$target.hasClass('file-list-item')) {
......@@ -168,14 +280,17 @@ KityMinder.registerUI('widget/netdiskfinder', function(minder) {
if (destinationPath.indexOf(sourcePath) === 0) return;
if (window.confirm(minder.getLang('ui.move_file_confirm', source.filename, destination.filename))) {
if (!moveConfirm || window.confirm(minder.getLang('ui.move_file_confirm', source.filename, destination.filename))) {
$container.addClass('loading');
recycleReady.then(doMove);
moveConfirm = false;
}
function doMove() {
mv(sourcePath, destinationPath).then(function() {
$dragging.remove();
Finder.fire('mv', sourcePath, destinationPath, SIGNATURE);
notice.info(minder.getLang('ui.move_success', destination.filename));
})['catch'](function(e) {
notice.error('err_move_file', e);
}).then(function() {
......@@ -189,10 +304,32 @@ KityMinder.registerUI('widget/netdiskfinder', function(minder) {
list(recyclePath);
}
function createRecycleBin() {
return fio.file.mkdir({
path: recyclePath
});
}
function clearRecycle() {
if (!window.confirm(minder.getLang('ui.recycle_clear_confirm'))) return;
$container.addClass('loading');
fio.file['delete']({
path: recyclePath
}).then(function() {
return recycleReady = createRecycleBin();
}).then(function() {
renderList([]);
$container.removeClass('loading');
});
}
function mv(source, destination) {
return fio.file.move({
path: source,
newPath: destination
newPath: destination,
ondup: destination.indexOf(recyclePath) === 0 ? fio.file.DUP_RENAME : fio.file.DUP_FAIL
});
}
......@@ -236,7 +373,7 @@ KityMinder.registerUI('widget/netdiskfinder', function(minder) {
}).then(function() {
return new Promise(function(resolve) {
setTimeout(function() {
resolve(list(currentPath, true));
resolve(refresh());
}, 200);
});
}, function(e) {
......@@ -294,6 +431,10 @@ KityMinder.registerUI('widget/netdiskfinder', function(minder) {
});
}
function refresh() {
return list(currentPath, true);
}
/**
* 列出指定目录的文件
*/
......@@ -311,8 +452,7 @@ KityMinder.registerUI('widget/netdiskfinder', function(minder) {
updateNav();
return Promise.all([listPromise, transitPromise]).then(function(values) {
var files = values[0];
function checkRecycleBin(files) {
if (!recycleReady && path == base) {
for (var i = 0; i < files.length; i++) {
if (files[i].path == recyclePath) {
......@@ -320,11 +460,16 @@ KityMinder.registerUI('widget/netdiskfinder', function(minder) {
}
break;
}
recycleReady = recycleReady || fio.file.mkdir({
path: base + '/.recycle'
});
recycleReady = recycleReady || createRecycleBin();
}
}
return Promise.all([listPromise, transitPromise]).then(function(values) {
var files = values[0];
checkRecycleBin(files);
return renderList(files);
}, function(error) {
var notice = minder.getUI('widget/notice');
......@@ -344,7 +489,8 @@ KityMinder.registerUI('widget/netdiskfinder', function(minder) {
$('<li></li>')
.append('<span class="icon"></span>')
.append(file.filename)
.append('<span class="filename">' + file.filename + '</span>')
.append('<a class="rename-button" title="' + minder.getLang('ui.rename') + '">"' + minder.getLang('ui.rename') + '"</a>')
.addClass('file-list-item')
.addClass(file.isDir ? 'dir' : 'file')
.data('file', file)
......@@ -399,14 +545,18 @@ KityMinder.registerUI('widget/netdiskfinder', function(minder) {
$a.text(minder.getLang('ui.mydocument'));
} else if (part == '.recycle') {
$a.text(minder.getLang('ui.recycle'));
$finder.addClass('recycle-bin');
} else {
$a.text(part);
}
return $a.data('path', processPath).data('file', {
path: processPath.substr(0, processPath.length - 1)
path: processPath.substr(0, processPath.length - 1),
filename: part == base ? minder.getLang('ui.mydocument') : part
});
}
$finder.removeClass('recycle-bin');
$nav.append(pathButton(base));
parts.forEach(function(part) {
......@@ -428,6 +578,8 @@ KityMinder.registerUI('widget/netdiskfinder', function(minder) {
if (file && file.path == selected) {
$(this).addClass('selected');
hasSelect = true;
$list[0].focus();
finder.fire('select', file, this);
}
});
if (!hasSelect) selected = false;
......@@ -441,11 +593,11 @@ KityMinder.registerUI('widget/netdiskfinder', function(minder) {
finder.list = list;
finder.select = select;
finder.pwd = pwd;
finder.refresh = refresh;
return finder;
}
return {
generate: generate
};
Finder.generate = generate;
return Finder;
});
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment