Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
K
kityminder-core
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
吴志俊
kityminder-core
Commits
f0709a44
Commit
f0709a44
authored
Oct 24, 2014
by
techird
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
文件移动及重命名功能
parent
a2cac974
Changes
17
Show whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
640 additions
and
701 deletions
+640
-701
zh-cn.js
lang/zh-cn/zh-cn.js
+5
-0
expand.js
src/module/expand.js
+0
-2
doc.js
ui/doc.js
+35
-16
draft.js
ui/menu/open/draft.js
+1
-0
netdisk.js
ui/menu/open/netdisk.js
+1
-1
recent.js
ui/menu/open/recent.js
+26
-0
netdisk.js
ui/menu/save/netdisk.js
+34
-13
share.js
ui/menu/share/share.js
+55
-4
_kityminder.less
ui/theme/default/css/_kityminder.less
+41
-0
_mainmenu.less
ui/theme/default/css/_mainmenu.less
+1
-1
_netdisk.less
ui/theme/default/css/_netdisk.less
+95
-17
_share.less
ui/theme/default/css/_share.less
+1
-0
finder.svg
ui/theme/default/images/finder.svg
+57
-586
icons.png
ui/theme/default/images/icons.png
+0
-0
title.js
ui/topbar/title.js
+97
-23
locallist.js
ui/widget/locallist.js
+1
-0
netdiskfinder.js
ui/widget/netdiskfinder.js
+190
-38
No files found.
lang/zh-cn/zh-cn.js
View file @
f0709a44
...
@@ -57,6 +57,7 @@ KityMinder.LANG['zh-cn'] = {
...
@@ -57,6 +57,7 @@ KityMinder.LANG['zh-cn'] = {
'err_share_data'
:
'加载分享内容出错'
,
'err_share_data'
:
'加载分享内容出错'
,
'err_share_sync_fail'
:
'分享内容同步失败'
,
'err_share_sync_fail'
:
'分享内容同步失败'
,
'err_move_file'
:
'文件移动失败'
,
'err_move_file'
:
'文件移动失败'
,
'err_rename'
:
'重命名失败'
,
'unknownreason'
:
'可能是外星人篡改了代码...'
,
'unknownreason'
:
'可能是外星人篡改了代码...'
,
'pcs_code'
:
{
'pcs_code'
:
{
...
@@ -131,12 +132,16 @@ KityMinder.LANG['zh-cn'] = {
...
@@ -131,12 +132,16 @@ KityMinder.LANG['zh-cn'] = {
'ui'
:
{
'ui'
:
{
'load_share_for_edit'
:
'正在加载分享的文件...'
,
'load_share_for_edit'
:
'正在加载分享的文件...'
,
'share_sync_success'
:
'分享内容已同步'
,
'share_sync_success'
:
'分享内容已同步'
,
'recycle_clear_confirm'
:
'确认清空回收站么?清空后的文件无法恢复。'
,
'fullscreen_exit_hint'
:
'按 Esc 或 F11 退出全屏'
,
'fullscreen_exit_hint'
:
'按 Esc 或 F11 退出全屏'
,
'error_detail'
:
'详细信息'
,
'error_detail'
:
'详细信息'
,
'copy_and_feedback'
:
'复制并反馈'
,
'copy_and_feedback'
:
'复制并反馈'
,
'move_file_confirm'
:
'确定把 "{0}" 移动到 "{1}" 吗?'
,
'move_file_confirm'
:
'确定把 "{0}" 移动到 "{1}" 吗?'
,
'rename'
:
'重命名'
,
'rename_success'
:
'<b>{0}</b> 重命名成功'
,
'move_success'
:
'<b>{0}</b> 移动成功'
,
'command'
:
{
'command'
:
{
'appendsiblingnode'
:
'插入同级主题'
,
'appendsiblingnode'
:
'插入同级主题'
,
...
...
src/module/expand.js
View file @
f0709a44
...
@@ -74,8 +74,6 @@ KityMinder.registerModule('Expand', function() {
...
@@ -74,8 +74,6 @@ KityMinder.registerModule('Expand', function() {
policy
=
policy
||
EXPAND_POLICY
.
KEEP_STATE
;
policy
=
policy
||
EXPAND_POLICY
.
KEEP_STATE
;
policy
(
node
,
state
,
policy
);
policy
(
node
,
state
,
policy
);
if
(
!
changed
)
return
;
node
.
renderTree
().
getMinder
().
layout
(
100
);
node
.
renderTree
().
getMinder
().
layout
(
100
);
/* 如何加展开效果:
/* 如何加展开效果:
...
...
ui/doc.js
View file @
f0709a44
...
@@ -13,6 +13,33 @@ KityMinder.registerUI('doc', function(minder) {
...
@@ -13,6 +13,33 @@ KityMinder.registerUI('doc', function(minder) {
var
current
=
{
saved
:
true
};
var
current
=
{
saved
:
true
};
var
loading
=
false
;
var
loading
=
false
;
var
notice
=
minder
.
getUI
(
'widget/notice'
);
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) {
...
@@ -46,9 +73,8 @@ KityMinder.registerUI('doc', function(minder) {
doc
.
data
=
data
;
doc
.
data
=
data
;
doc
.
json
=
JSON
.
stringify
(
data
);
doc
.
json
=
JSON
.
stringify
(
data
);
minder
.
getUI
(
'topbar/title'
).
setTitle
(
doc
.
title
,
doc
.
saved
);
ret
.
fire
(
'docload'
,
doc
);
ret
.
fire
(
'docload'
,
doc
);
ret
.
fire
(
'docchange'
,
doc
);
return
doc
;
return
doc
;
...
@@ -67,9 +93,10 @@ KityMinder.registerUI('doc', function(minder) {
...
@@ -67,9 +93,10 @@ KityMinder.registerUI('doc', function(minder) {
current
=
doc
;
current
=
doc
;
doc
.
data
=
minder
.
exportJson
();
doc
.
data
=
minder
.
exportJson
();
doc
.
json
=
JSON
.
stringify
(
doc
.
data
);
doc
.
json
=
JSON
.
stringify
(
doc
.
data
);
doc
.
saved
=
true
;
minder
.
getUI
(
'topbar/title'
).
setTitle
(
doc
.
title
,
doc
.
saved
=
true
);
ret
.
fire
(
'docsave'
,
doc
);
ret
.
fire
(
'docsave'
,
doc
);
ret
.
fire
(
'docchange'
,
doc
);
}
}
function
getCurrent
()
{
function
getCurrent
()
{
...
@@ -87,24 +114,16 @@ KityMinder.registerUI('doc', function(minder) {
...
@@ -87,24 +114,16 @@ KityMinder.registerUI('doc', function(minder) {
minder
.
on
(
'contentchange'
,
function
()
{
minder
.
on
(
'contentchange'
,
function
()
{
if
(
loading
)
return
;
if
(
loading
)
return
;
var
$title
=
minder
.
getUI
(
'topbar/title'
);
if
(
current
.
source
!=
'netdisk'
)
{
if
(
current
.
source
!=
'netdisk'
)
{
current
.
title
=
minder
.
getMinderTitle
();
current
.
title
=
minder
.
getMinderTitle
();
$title
.
setTitle
(
current
.
title
,
current
.
saved
=
false
);
current
.
saved
=
false
;
ret
.
fire
(
'docchange'
,
current
);
}
else
{
}
else
{
current
.
saved
=
current
.
json
==
JSON
.
stringify
(
minder
.
exportJson
());
if
(
current
.
json
!=
JSON
.
stringify
(
minder
.
exportJson
()))
{
$title
.
setSaved
(
current
.
saved
=
false
);
ret
.
fire
(
'docchange'
,
current
);
}
else
{
$title
.
setSaved
(
current
.
saved
=
true
);
}
}
}
ret
.
fire
(
'docchange'
,
current
);
});
});
},
1000
);
},
1000
);
...
...
ui/menu/open/draft.js
View file @
f0709a44
...
@@ -96,6 +96,7 @@ KityMinder.registerUI('menu/open/draft', function(minder) {
...
@@ -96,6 +96,7 @@ KityMinder.registerUI('menu/open/draft', function(minder) {
renderList
();
renderList
();
function
pushDraft
(
doc
)
{
function
pushDraft
(
doc
)
{
if
(
doc
.
saved
)
return
;
if
(
doc
==
lastDoc
)
{
if
(
doc
==
lastDoc
)
{
if
(
current
)
{
if
(
current
)
{
draftList
.
remove
(
0
);
draftList
.
remove
(
0
);
...
...
ui/menu/open/netdisk.js
View file @
f0709a44
...
@@ -18,7 +18,7 @@ KityMinder.registerUI('menu/open/netdisk', function(minder) {
...
@@ -18,7 +18,7 @@ KityMinder.registerUI('menu/open/netdisk', function(minder) {
var
notice
=
minder
.
getUI
(
'widget/notice'
);
var
notice
=
minder
.
getUI
(
'widget/notice'
);
/* 网盘面板 */
/* 网盘面板 */
var
$panel
=
$
(
$open
.
createSub
(
'netdisk'
));
var
$panel
=
$
(
$open
.
createSub
(
'netdisk'
))
.
addClass
(
'netdisk-open-panel'
)
;
/* extension => protocol */
/* extension => protocol */
var
supports
=
{};
var
supports
=
{};
...
...
ui/menu/open/recent.js
View file @
f0709a44
...
@@ -15,6 +15,7 @@ KityMinder.registerUI('menu/open/recent', function(minder) {
...
@@ -15,6 +15,7 @@ KityMinder.registerUI('menu/open/recent', function(minder) {
var
frdTime
=
minder
.
getUI
(
'widget/friendlytimespan'
);
var
frdTime
=
minder
.
getUI
(
'widget/friendlytimespan'
);
var
doc
=
minder
.
getUI
(
'doc'
);
var
doc
=
minder
.
getUI
(
'doc'
);
var
recentList
=
minder
.
getUI
(
'widget/locallist'
).
use
(
'recent'
);
var
recentList
=
minder
.
getUI
(
'widget/locallist'
).
use
(
'recent'
);
var
finder
=
minder
.
getUI
(
'widget/netdiskfinder'
);
/* 网盘面板 */
/* 网盘面板 */
var
$panel
=
$
(
$open
.
createSub
(
'recent'
)).
addClass
(
'recent-file-panel'
);
var
$panel
=
$
(
$open
.
createSub
(
'recent'
)).
addClass
(
'recent-file-panel'
);
...
@@ -59,8 +60,33 @@ KityMinder.registerUI('menu/open/recent', function(minder) {
...
@@ -59,8 +60,33 @@ KityMinder.registerUI('menu/open/recent', function(minder) {
doc
.
on
(
'docload'
,
addToList
);
doc
.
on
(
'docload'
,
addToList
);
doc
.
on
(
'docsave'
,
addToList
);
doc
.
on
(
'docsave'
,
addToList
);
finder
.
on
(
'mv'
,
trackFileMove
);
renderList
();
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
)
{
function
addToList
(
doc
)
{
if
(
doc
.
source
!=
'netdisk'
)
return
;
if
(
doc
.
source
!=
'netdisk'
)
return
;
...
...
ui/menu/save/netdisk.js
View file @
f0709a44
...
@@ -66,6 +66,8 @@ KityMinder.registerUI('menu/save/netdisk', function(minder) {
...
@@ -66,6 +66,8 @@ KityMinder.registerUI('menu/save/netdisk', function(minder) {
$format
.
val
(
'.km'
);
$format
.
val
(
'.km'
);
$format
.
on
(
'change'
,
normalizeFilename
);
/* 保存按钮 */
/* 保存按钮 */
var
$saveBtn
=
$
(
'<button></button>'
)
var
$saveBtn
=
$
(
'<button></button>'
)
.
addClass
(
'save-button'
)
.
addClass
(
'save-button'
)
...
@@ -73,7 +75,7 @@ KityMinder.registerUI('menu/save/netdisk', function(minder) {
...
@@ -73,7 +75,7 @@ KityMinder.registerUI('menu/save/netdisk', function(minder) {
.
click
(
save
)
.
click
(
save
)
.
appendTo
(
$selects
);
.
appendTo
(
$selects
);
$menu
.
on
(
'show'
,
setFile
N
ame
);
$menu
.
on
(
'show'
,
setFile
n
ame
);
$finder
.
on
(
'fileclick'
,
function
(
file
)
{
$finder
.
on
(
'fileclick'
,
function
(
file
)
{
$finder
.
select
(
file
.
path
);
$finder
.
select
(
file
.
path
);
...
@@ -98,7 +100,8 @@ KityMinder.registerUI('menu/save/netdisk', function(minder) {
...
@@ -98,7 +100,8 @@ KityMinder.registerUI('menu/save/netdisk', function(minder) {
var
autoSaveTimer
=
0
;
var
autoSaveTimer
=
0
;
function
autoSave
()
{
function
autoSave
()
{
function
lazySave
()
{
function
lazySave
(
doc
)
{
if
(
doc
.
saved
)
return
;
clearTimeout
(
autoSaveTimer
);
clearTimeout
(
autoSaveTimer
);
autoSaveTimer
=
setTimeout
(
saveCurrent
,
autoSaveDuration
);
autoSaveTimer
=
setTimeout
(
saveCurrent
,
autoSaveDuration
);
}
}
...
@@ -127,13 +130,26 @@ KityMinder.registerUI('menu/save/netdisk', function(minder) {
...
@@ -127,13 +130,26 @@ KityMinder.registerUI('menu/save/netdisk', function(minder) {
return
doSave
(
doc
.
path
,
doc
.
protocol
,
doc
,
$title
,
'leaveTheMenu'
);
return
doSave
(
doc
.
path
,
doc
.
protocol
,
doc
,
$title
,
'leaveTheMenu'
);
}
}
function
getSaveContext
()
{
function
normalizeFilename
()
{
var
filename
=
$filename
.
val
();
var
filename
=
$filename
.
val
();
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
();
}
if
(
fio
.
file
.
anlysisPath
(
filename
).
extension
!=
$format
.
val
())
{
return
$filename
.
val
();
$filename
.
val
(
filename
+=
$format
.
val
())[
0
].
select
();
}
}
function
getSaveContext
()
{
var
filename
=
normalizeFilename
();
var
path
=
$finder
.
pwd
()
+
filename
;
var
path
=
$finder
.
pwd
()
+
filename
;
var
doc
=
$doc
.
current
();
var
doc
=
$doc
.
current
();
var
protocol
=
supports
[
$format
.
val
()];
var
protocol
=
supports
[
$format
.
val
()];
...
@@ -212,22 +228,27 @@ KityMinder.registerUI('menu/save/netdisk', function(minder) {
...
@@ -212,22 +228,27 @@ KityMinder.registerUI('menu/save/netdisk', function(minder) {
});
});
}
}
function
setFile
N
ame
()
{
function
setFile
n
ame
()
{
var
doc
=
$doc
.
current
();
var
doc
=
$doc
.
current
();
switch
(
doc
.
source
)
{
switch
(
doc
.
source
)
{
case
'netdisk'
:
case
'netdisk'
:
setFile
N
ameForNetDiskSource
(
doc
);
setFile
n
ameForNetDiskSource
(
doc
);
break
;
break
;
default
:
default
:
setFile
N
ameForOtherSource
(
doc
);
setFile
n
ameForOtherSource
(
doc
);
break
;
break
;
}
}
$filename
[
0
].
select
();
$filename
[
0
].
select
();
}
}
function
setFileNameForNetDiskSource
(
doc
)
{
function
setFilenameInputValue
(
filename
)
{
$filename
.
val
(
filename
);
normalizeFilename
(
filename
);
}
function
setFilenameForNetDiskSource
(
doc
)
{
if
(
!
fio
.
user
.
current
())
return
;
if
(
!
fio
.
user
.
current
())
return
;
var
path
=
doc
.
path
;
var
path
=
doc
.
path
;
...
@@ -242,11 +263,11 @@ KityMinder.registerUI('menu/save/netdisk', function(minder) {
...
@@ -242,11 +263,11 @@ KityMinder.registerUI('menu/save/netdisk', function(minder) {
$finder
.
select
(
path
);
$finder
.
select
(
path
);
}
}
$filename
.
val
(
pathInfo
.
filename
);
setFilenameInputValue
(
pathInfo
.
filename
);
}
}
function
setFile
N
ameForOtherSource
(
doc
)
{
function
setFile
n
ameForOtherSource
(
doc
)
{
$filename
.
val
(
doc
.
title
);
setFilenameInputValue
(
doc
.
title
);
$finder
.
select
(
null
);
$finder
.
select
(
null
);
}
}
...
...
ui/menu/share/share.js
View file @
f0709a44
...
@@ -11,11 +11,19 @@ KityMinder.registerUI('menu/share/share', function(minder) {
...
@@ -11,11 +11,19 @@ KityMinder.registerUI('menu/share/share', function(minder) {
var
$share_menu
=
minder
.
getUI
(
'menu/menu'
).
createSubMenu
(
'share'
);
var
$share_menu
=
minder
.
getUI
(
'menu/menu'
).
createSubMenu
(
'share'
);
var
$create_menu
=
$
(
$share_menu
.
createSub
(
'createshare'
));
var
$create_menu
=
$
(
$share_menu
.
createSub
(
'createshare'
));
var
$manage_menu
=
$
(
$share_menu
.
createSub
(
'manageshare'
));
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
$doc
=
minder
.
getUI
(
'doc'
);
var
notice
=
minder
.
getUI
(
'widget/notice'
);
var
notice
=
minder
.
getUI
(
'widget/notice'
);
var
finder
=
minder
.
getUI
(
'widget/netdiskfinder'
);
var
BACKEND_URL
=
'http://naotu.baidu.com/share.php'
;
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
currentShare
=
null
;
var
shareList
=
[];
var
shareList
=
[];
...
@@ -67,6 +75,51 @@ KityMinder.registerUI('menu/share/share', function(minder) {
...
@@ -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
()
{
function
loadShareFile
()
{
var
pattern
=
/
(?:
shareId|share_id
)
=
(\w
+
)([
&#
]
|$
)
/
;
var
pattern
=
/
(?:
shareId|share_id
)
=
(\w
+
)([
&#
]
|$
)
/
;
...
@@ -424,12 +477,10 @@ KityMinder.registerUI('menu/share/share', function(minder) {
...
@@ -424,12 +477,10 @@ KityMinder.registerUI('menu/share/share', function(minder) {
function
renderShareList
(
list
)
{
function
renderShareList
(
list
)
{
var
frdTime
=
minder
.
getUI
(
'widget/friendlytimespan'
);
var
frdTime
=
minder
.
getUI
(
'widget/friendlytimespan'
);
var
$list
=
$
(
'<ul>'
)
.
attr
(
'id'
,
'manage-share-list'
)
.
appendTo
(
$manage_menu
);
if
(
!
list
)
return
;
if
(
!
list
)
return
;
$share_list
.
empty
();
list
.
forEach
(
function
(
share
)
{
list
.
forEach
(
function
(
share
)
{
$list
.
append
(
buildShareItem
(
share
));
$
share_
list
.
append
(
buildShareItem
(
share
));
});
});
}
}
...
...
ui/theme/default/css/_kityminder.less
View file @
f0709a44
...
@@ -71,6 +71,47 @@ html, body {
...
@@ -71,6 +71,47 @@ html, body {
text-align: center;
text-align: center;
font-weight: normal;
font-weight: normal;
color: @ui-fore;
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 {
&.loading {
&:before {
&:before {
...
...
ui/theme/default/css/_mainmenu.less
View file @
f0709a44
...
@@ -37,7 +37,7 @@
...
@@ -37,7 +37,7 @@
}
}
#main-menu {
#main-menu {
@left-width:
20
0px;
@left-width:
15
0px;
background: white;
background: white;
.dock;
.dock;
...
...
ui/theme/default/css/_netdisk.less
View file @
f0709a44
...
@@ -7,6 +7,13 @@
...
@@ -7,6 +7,13 @@
100% { transform: translate(0, 0); }
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 {
.netdisk-finder {
.dir.drag-enter {
.dir.drag-enter {
...
@@ -23,23 +30,44 @@
...
@@ -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 {
.head {
padding-bottom: 10px;
padding-bottom: 10px;
height: 30px;
height: 30px;
border-bottom: 1px solid #eee;
border-bottom: 1px solid #eee;
.control {
.control {
float: right;
float: right;
.mkdir {
}
.button {
.button {
vertical-align: middle;
vertical-align: middle;
font-size: 0;
font-size: 0;
background: url(../images/finder.svg) no-repeat;
background: url(../images/finder.svg) no-repeat;
box-sizing: border-box;
width: 30px;
width: 30px;
height: 30px;
height: 30px;
border-radius: 2px;
border-radius: 2px;
box-sizing: border-box;
border: 1px solid transparent;
border: 1px solid transparent;
&:hover {
border: 1px solid lighten(#717B94, 30%);
}
&:active {
box-shadow: inset 0 1px 3px fadeOut(#717B94, 80%);
}
&.recycle {
&.recycle {
background-position: -30px 0;
background-position: -30px 0;
...
@@ -48,12 +76,11 @@
...
@@ -48,12 +76,11 @@
}
}
}
}
&:hover {
&.recycle-clear {
border: 1px solid lighten(#717B94, 30%);
display: none;
}
background-position: -90px 0;
&:active {
box-shadow: inset 0 1px 3px fadeOut(#717B94, 80%);
}
}
}
}
}
}
.nav {
.nav {
...
@@ -111,6 +138,7 @@
...
@@ -111,6 +138,7 @@
}
}
.file-list {
.file-list {
.dock(41px, 0, 0, 0);
margin: 0;
margin: 0;
padding: 0;
padding: 0;
list-style: none;
list-style: none;
...
@@ -124,6 +152,7 @@
...
@@ -124,6 +152,7 @@
}
}
.file-list-item {
.file-list-item {
font-size: 14px;
font-size: 14px;
height: 20px;
line-height: 20px;
line-height: 20px;
padding: 10px 20px 10px 40px;
padding: 10px 20px 10px 40px;
cursor: default;
cursor: default;
...
@@ -131,13 +160,51 @@
...
@@ -131,13 +160,51 @@
-khtml-user-drag: element;
-khtml-user-drag: element;
border: 1px solid transparent;
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 {
&:hover {
/* background-color: lighten(@tab-hover, 55%); */
border: 1px solid lighten(#717B94, 30%);
}
}
&:active {
&:active {
background-color: lighten(@tab-hover, 50%);
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 {
.rename-button {
transition: transform,opacity ease .2s .5s;
transform: scale(1);
opacity: 1;
background: url(../images/icons.png) 1px -1130px;
}
}
}
&.selected {
&.selected {
&:hover .rename-button {
background: url(../images/icons.png) 1px -1110px;
}
background-color: lighten(@tab-active, 20%);
background-color: lighten(@tab-active, 20%);
color: white;
color: white;
&.dir .icon {
&.dir .icon {
...
@@ -165,6 +232,14 @@
...
@@ -165,6 +232,14 @@
background: url(../images/icons.png) 0 -445px no-repeat;
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 {
&.dir {
position: relative;
position: relative;
.icon {
.icon {
...
@@ -183,16 +258,19 @@
...
@@ -183,16 +258,19 @@
top: 20px;
top: 20px;
margin-top: -4px;
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
// for save
.netdisk-save-panel .netdisk-file-list {
.netdisk-save-panel .netdisk-file-list {
bottom: 50px;
bottom: 50px;
...
...
ui/theme/default/css/_share.less
View file @
f0709a44
...
@@ -30,6 +30,7 @@
...
@@ -30,6 +30,7 @@
overflow: auto;
overflow: auto;
overflow-x: hidden;
overflow-x: hidden;
overflow-y: auto;
overflow-y: auto;
padding-right: 10px;
&:empty:after {
&:empty:after {
content: '没有分享';
content: '没有分享';
...
...
ui/theme/default/images/finder.svg
View file @
f0709a44
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 17.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!-- 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" [
<!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/">
<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"
<!ENTITY ns_ai "http://ns.adobe.com/AdobeIllustrator/10.0/">
width=
"300px"
height=
"55px"
viewBox=
"0.5 0.5 300 55"
enable-background=
"new 0.5 0.5 300 55"
xml:space=
"preserve"
>
<!ENTITY ns_graphs "http://ns.adobe.com/Graphs/1.0/">
<g
id=
"参考线"
>
<!ENTITY ns_vars "http://ns.adobe.com/Variables/1.0/">
</g>
<!ENTITY ns_imrep "http://ns.adobe.com/ImageReplacement/1.0/">
<g
id=
"create"
>
<!ENTITY ns_sfw "http://ns.adobe.com/SaveForWeb/1.0/">
<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
<!ENTITY ns_custom "http://ns.adobe.com/GenericCustomNamespace/1.0/">
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"
/>
<!ENTITY ns_adobe_xpath "http://ns.adobe.com/XPath/1.0/">
</g>
]>
<g
id=
"recycle"
>
<svg
version=
"1.1"
id=
"图层_1"
xmlns:x=
"&ns_extend;"
xmlns:i=
"&ns_ai;"
xmlns:graph=
"&ns_graphs;"
<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 "
/>
xmlns=
"http://www.w3.org/2000/svg"
xmlns:xlink=
"http://www.w3.org/1999/xlink"
x=
"0px"
y=
"0px"
width=
"300px"
height=
"55px"
<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"
/>
viewBox=
"0.5 0.5 300 55"
style=
"enable-background:new 0.5 0.5 300 55;"
xml:space=
"preserve"
>
<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
<switch>
V19.5z"
/>
<foreignObject
requiredExtensions=
"&ns_ai;"
x=
"0"
y=
"0"
width=
"1"
height=
"1"
>
<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
<i:pgfRef
xlink:href=
"#adobe_illustrator_pgf"
>
V19.5z"
/>
</i:pgfRef>
<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 "
/>
</foreignObject>
<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
<g
i:extraneous=
"self"
>
l-4.822-1.321L67.769,4.5L83.2,8.729L83.729,6.8L78.907,5.478z"
/>
<g
id=
"参考线"
>
<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
</g>
V19.5z"
/>
<g
id=
"create"
>
<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
<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
V19.5z"
/>
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
</g>
V23.5z"
/>
<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"
</g>
/>
<g
id=
"recycle"
>
<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
<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 "
/>
H21.679z"
/>
<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
fill=
"#60687C"
d=
"M9.338,53.5h0.205c1.014,0,6.2-3,12.037,0h0.099l-6.164-12.786L9.338,53.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
<g>
c0.552,0,1,0.448,1,1V19.5z"
/>
<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
<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
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"
/>
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
<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
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"
/>
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
<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
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"
/>
s1.3-2.904,2.904-2.904s2.904,1.3,2.904,2.904S40.602,46.369,38.998,46.369z"
/>
</g>
</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
<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-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
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"
/>
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
<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
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
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
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.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
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"
/>
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>
<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
</switch>
c0,0-1,0-1,0C101.5,13.124,106.093,11.165,108.368,13.764z"
/>
<i:pgf
id=
"adobe_illustrator_pgf"
>
<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
<![CDATA[
C109.5,19.875,104.907,21.56,102.632,18.961z"
/>
eJzkvdl2K0t2IOYfwD8AJEHMQGZiHghiHgiQAAEQBAiSIIbEQIAYEsCtunroVZatVqnbai/30lLL
<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 "
/>
cvuhl1u9qh9U6vZDuyyppY9x3VulJ/+CIyLnRE4Yjkuy60o8ADIydsSOPcfeEWZTte5KDpd90uV1
<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"
/>
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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>
</svg>
</svg>
ui/theme/default/images/icons.png
View replaced file @
a2cac974
View file @
f0709a44
20.3 KB
|
W:
|
H:
20.6 KB
|
W:
|
H:
2-up
Swipe
Onion skin
ui/topbar/title.js
View file @
f0709a44
...
@@ -9,46 +9,120 @@
...
@@ -9,46 +9,120 @@
KityMinder
.
registerUI
(
'topbar/title'
,
function
(
minder
)
{
KityMinder
.
registerUI
(
'topbar/title'
,
function
(
minder
)
{
var
$title
=
$
(
'<h1>'
).
appendTo
(
'#panel'
);
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'
);
$doc
.
on
(
'docchange'
,
update
);
var
_saved
=
false
;
function
update
()
{
$title
.
on
(
'click'
,
rename
);
function
setTitle
(
title
)
{
function
rename
()
{
$title
.
text
(
title
);
if
(
!
renameEnabled
||
renameMode
)
return
;
document
.
title
=
title
+
' - 百度脑图'
;
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
);
if
(
_saved
)
{
function
exit
(
)
{
setTi
tle
(
_title
);
setTi
meout
(
function
()
{
}
else
{
renameMode
=
false
;
setTitle
(
'* '
+
_title
);
}
);
}
}
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
();
update
();
exit
();
});
}
}
return
{
function
enableRename
(
enabled
)
{
$title
:
$title
,
renameEnabled
=
enabled
;
if
(
enabled
)
$title
.
addClass
(
'rename-enabled'
);
else
$title
.
removeClass
(
'rename-enabled'
);
}
setTitle
:
function
(
title
,
saved
)
{
function
update
()
{
_title
=
title
;
return
this
.
setSaved
(
saved
);
var
doc
=
$doc
.
current
();
},
getTitle
:
function
()
{
function
setTitle
(
title
)
{
return
_title
;
title
=
title
||
minder
.
getLang
(
'ui.untitleddoc'
);
},
$title
.
empty
().
append
(
'<span class="title-content">'
+
title
+
'</span>'
);
document
.
title
=
title
?
title
+
' - 百度脑图'
:
'百度脑图'
;
}
setSaved
:
function
(
saved
)
{
if
(
doc
.
saved
)
{
setTitle
(
doc
.
title
);
}
else
{
setTitle
(
'* '
+
doc
.
title
);
}
_saved
=
saved
!==
false
;
enableRename
(
doc
.
source
==
'netdisk'
&&
doc
.
saved
);
}
update
();
update
();
return
this
;
return
{
$title
:
$title
,
getTitle
:
function
()
{
return
$doc
.
current
().
title
;
}
}
};
};
});
});
\ No newline at end of file
ui/widget/locallist.js
View file @
f0709a44
...
@@ -70,6 +70,7 @@ KityMinder.registerUI('widget/locallist', function() {
...
@@ -70,6 +70,7 @@ KityMinder.registerUI('widget/locallist', function() {
function
forEach
(
callback
)
{
function
forEach
(
callback
)
{
list
.
forEach
(
callback
);
list
.
forEach
(
callback
);
save
();
}
}
load
.
call
(
this
);
load
.
call
(
this
);
...
...
ui/widget/netdiskfinder.js
View file @
f0709a44
...
@@ -12,8 +12,23 @@ KityMinder.registerUI('widget/netdiskfinder', function(minder) {
...
@@ -12,8 +12,23 @@ KityMinder.registerUI('widget/netdiskfinder', function(minder) {
var
eve
=
minder
.
getUI
(
'eve'
);
var
eve
=
minder
.
getUI
(
'eve'
);
var
notice
=
minder
.
getUI
(
'widget/notice'
);
var
notice
=
minder
.
getUI
(
'widget/notice'
);
var
recycleReady
=
null
;
var
recycleReady
=
null
;
var
base
=
'/apps/kityminder'
;
var
recyclePath
=
base
+
'/.recycle'
;
var
moveConfirm
=
true
;
var
instances
=
[];
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) {
...
@@ -27,8 +42,6 @@ KityMinder.registerUI('widget/netdiskfinder', function(minder) {
instances
.
push
(
finder
);
instances
.
push
(
finder
);
var
base
=
'/apps/kityminder'
;
var
recyclePath
=
base
+
'/.recycle'
;
var
currentPath
=
base
;
var
currentPath
=
base
;
var
$finder
=
$
(
'<div class="netdisk-finder"></div>'
).
appendTo
(
$container
);
var
$finder
=
$
(
'<div class="netdisk-finder"></div>'
).
appendTo
(
$container
);
...
@@ -50,10 +63,21 @@ KityMinder.registerUI('widget/netdiskfinder', function(minder) {
...
@@ -50,10 +63,21 @@ KityMinder.registerUI('widget/netdiskfinder', function(minder) {
.
text
(
minder
.
getLang
(
'ui.recycle'
))
.
text
(
minder
.
getLang
(
'ui.recycle'
))
.
attr
(
'title'
,
minder
.
getLang
(
'ui.recycle'
))
.
attr
(
'title'
,
minder
.
getLang
(
'ui.recycle'
))
.
addClass
(
'button recycle dir'
)
.
addClass
(
'button recycle dir'
)
.
data
(
'file'
,
{
path
:
recyclePath
,
filename
:
minder
.
getLang
(
'ui.recycle'
)})
.
data
(
'file'
,
{
path
:
recyclePath
,
filename
:
minder
.
getLang
(
'ui.recycle'
)
})
.
appendTo
(
$control
)
.
appendTo
(
$control
)
.
click
(
recycle
);
.
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
$nav
=
$
(
'<div class="nav"></div>'
).
appendTo
(
$headbar
);
...
@@ -74,19 +98,102 @@ KityMinder.registerUI('widget/netdiskfinder', function(minder) {
...
@@ -74,19 +98,102 @@ KityMinder.registerUI('widget/netdiskfinder', function(minder) {
handleClick
();
handleClick
();
handleDrag
();
handleDrag
();
handleNav
();
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
()
{
function
handleClick
()
{
/* 点击目录中的项目时打开项目 */
/* 点击目录中的项目时打开项目 */
$list
.
delegate
(
'.file-list-item'
,
'dblclick'
,
function
(
e
)
{
$list
.
delegate
(
'.file-list-item'
,
'dblclick'
,
function
(
e
)
{
if
(
currentPath
==
recyclePath
+
'/'
)
return
;
if
(
mkdir
.
onprogress
)
return
mkdir
.
onprogress
.
select
();
if
(
mkdir
.
onprogress
)
return
mkdir
.
onprogress
.
select
();
var
$file
=
$
(
e
.
target
),
var
$file
=
$
(
e
.
target
)
.
closest
(
'li'
)
,
file
=
$file
.
data
(
'file'
);
file
=
$file
.
data
(
'file'
);
if
(
file
)
open
(
file
);
if
(
file
)
open
(
file
);
});
});
$list
.
delegate
(
'.file-list-item'
,
'mousedown'
,
function
(
e
)
{
$list
.
delegate
(
'.file-list-item'
,
'mousedown'
,
function
(
e
)
{
if
(
mkdir
.
onprogress
)
return
mkdir
.
onprogress
.
select
();
if
(
mkdir
.
onprogress
)
return
mkdir
.
onprogress
.
select
();
var
$file
=
$
(
e
.
target
),
var
$file
=
$
(
e
.
target
)
.
closest
(
'li'
)
,
file
=
$file
.
data
(
'file'
);
file
=
$file
.
data
(
'file'
);
if
(
!
file
)
return
;
select
(
file
&&
file
.
path
);
select
(
file
&&
file
.
path
);
});
});
}
}
...
@@ -123,6 +230,11 @@ KityMinder.registerUI('widget/netdiskfinder', function(minder) {
...
@@ -123,6 +230,11 @@ KityMinder.registerUI('widget/netdiskfinder', function(minder) {
.
delegate
(
dirSelector
,
'dragleave'
,
dirDragLeave
)
.
delegate
(
dirSelector
,
'dragleave'
,
dirDragLeave
)
.
delegate
(
dirSelector
,
'drop'
,
dirDrop
);
.
delegate
(
dirSelector
,
'drop'
,
dirDrop
);
$list
.
delegate
(
fileItemSelector
+
' input'
,
'dragstart'
,
function
(
e
)
{
e
.
stopPropagation
();
e
.
preventDefault
();
});
function
itemDragStart
(
e
)
{
function
itemDragStart
(
e
)
{
var
$target
=
$
(
e
.
target
);
var
$target
=
$
(
e
.
target
);
if
(
!
$target
.
hasClass
(
'file-list-item'
))
{
if
(
!
$target
.
hasClass
(
'file-list-item'
))
{
...
@@ -168,14 +280,17 @@ KityMinder.registerUI('widget/netdiskfinder', function(minder) {
...
@@ -168,14 +280,17 @@ KityMinder.registerUI('widget/netdiskfinder', function(minder) {
if
(
destinationPath
.
indexOf
(
sourcePath
)
===
0
)
return
;
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'
);
$container
.
addClass
(
'loading'
);
recycleReady
.
then
(
doMove
);
recycleReady
.
then
(
doMove
);
moveConfirm
=
false
;
}
}
function
doMove
()
{
function
doMove
()
{
mv
(
sourcePath
,
destinationPath
).
then
(
function
()
{
mv
(
sourcePath
,
destinationPath
).
then
(
function
()
{
$dragging
.
remove
();
$dragging
.
remove
();
Finder
.
fire
(
'mv'
,
sourcePath
,
destinationPath
,
SIGNATURE
);
notice
.
info
(
minder
.
getLang
(
'ui.move_success'
,
destination
.
filename
));
})[
'catch'
](
function
(
e
)
{
})[
'catch'
](
function
(
e
)
{
notice
.
error
(
'err_move_file'
,
e
);
notice
.
error
(
'err_move_file'
,
e
);
}).
then
(
function
()
{
}).
then
(
function
()
{
...
@@ -189,10 +304,32 @@ KityMinder.registerUI('widget/netdiskfinder', function(minder) {
...
@@ -189,10 +304,32 @@ KityMinder.registerUI('widget/netdiskfinder', function(minder) {
list
(
recyclePath
);
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
)
{
function
mv
(
source
,
destination
)
{
return
fio
.
file
.
move
({
return
fio
.
file
.
move
({
path
:
source
,
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) {
...
@@ -236,7 +373,7 @@ KityMinder.registerUI('widget/netdiskfinder', function(minder) {
}).
then
(
function
()
{
}).
then
(
function
()
{
return
new
Promise
(
function
(
resolve
)
{
return
new
Promise
(
function
(
resolve
)
{
setTimeout
(
function
()
{
setTimeout
(
function
()
{
resolve
(
list
(
currentPath
,
true
));
resolve
(
refresh
(
));
},
200
);
},
200
);
});
});
},
function
(
e
)
{
},
function
(
e
)
{
...
@@ -294,6 +431,10 @@ KityMinder.registerUI('widget/netdiskfinder', function(minder) {
...
@@ -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) {
...
@@ -311,8 +452,7 @@ KityMinder.registerUI('widget/netdiskfinder', function(minder) {
updateNav
();
updateNav
();
return
Promise
.
all
([
listPromise
,
transitPromise
]).
then
(
function
(
values
)
{
function
checkRecycleBin
(
files
)
{
var
files
=
values
[
0
];
if
(
!
recycleReady
&&
path
==
base
)
{
if
(
!
recycleReady
&&
path
==
base
)
{
for
(
var
i
=
0
;
i
<
files
.
length
;
i
++
)
{
for
(
var
i
=
0
;
i
<
files
.
length
;
i
++
)
{
if
(
files
[
i
].
path
==
recyclePath
)
{
if
(
files
[
i
].
path
==
recyclePath
)
{
...
@@ -320,11 +460,16 @@ KityMinder.registerUI('widget/netdiskfinder', function(minder) {
...
@@ -320,11 +460,16 @@ KityMinder.registerUI('widget/netdiskfinder', function(minder) {
}
}
break
;
break
;
}
}
recycleReady
=
recycleReady
||
fio
.
file
.
mkdir
({
recycleReady
=
recycleReady
||
createRecycleBin
();
path
:
base
+
'/.recycle'
});
}
}
}
return
Promise
.
all
([
listPromise
,
transitPromise
]).
then
(
function
(
values
)
{
var
files
=
values
[
0
];
checkRecycleBin
(
files
);
return
renderList
(
files
);
return
renderList
(
files
);
},
function
(
error
)
{
},
function
(
error
)
{
var
notice
=
minder
.
getUI
(
'widget/notice'
);
var
notice
=
minder
.
getUI
(
'widget/notice'
);
...
@@ -344,7 +489,8 @@ KityMinder.registerUI('widget/netdiskfinder', function(minder) {
...
@@ -344,7 +489,8 @@ KityMinder.registerUI('widget/netdiskfinder', function(minder) {
$
(
'<li></li>'
)
$
(
'<li></li>'
)
.
append
(
'<span class="icon"></span>'
)
.
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-list-item'
)
.
addClass
(
file
.
isDir
?
'dir'
:
'file'
)
.
addClass
(
file
.
isDir
?
'dir'
:
'file'
)
.
data
(
'file'
,
file
)
.
data
(
'file'
,
file
)
...
@@ -399,14 +545,18 @@ KityMinder.registerUI('widget/netdiskfinder', function(minder) {
...
@@ -399,14 +545,18 @@ KityMinder.registerUI('widget/netdiskfinder', function(minder) {
$a
.
text
(
minder
.
getLang
(
'ui.mydocument'
));
$a
.
text
(
minder
.
getLang
(
'ui.mydocument'
));
}
else
if
(
part
==
'.recycle'
)
{
}
else
if
(
part
==
'.recycle'
)
{
$a
.
text
(
minder
.
getLang
(
'ui.recycle'
));
$a
.
text
(
minder
.
getLang
(
'ui.recycle'
));
$finder
.
addClass
(
'recycle-bin'
);
}
else
{
}
else
{
$a
.
text
(
part
);
$a
.
text
(
part
);
}
}
return
$a
.
data
(
'path'
,
processPath
).
data
(
'file'
,
{
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
));
$nav
.
append
(
pathButton
(
base
));
parts
.
forEach
(
function
(
part
)
{
parts
.
forEach
(
function
(
part
)
{
...
@@ -428,6 +578,8 @@ KityMinder.registerUI('widget/netdiskfinder', function(minder) {
...
@@ -428,6 +578,8 @@ KityMinder.registerUI('widget/netdiskfinder', function(minder) {
if
(
file
&&
file
.
path
==
selected
)
{
if
(
file
&&
file
.
path
==
selected
)
{
$
(
this
).
addClass
(
'selected'
);
$
(
this
).
addClass
(
'selected'
);
hasSelect
=
true
;
hasSelect
=
true
;
$list
[
0
].
focus
();
finder
.
fire
(
'select'
,
file
,
this
);
}
}
});
});
if
(
!
hasSelect
)
selected
=
false
;
if
(
!
hasSelect
)
selected
=
false
;
...
@@ -441,11 +593,11 @@ KityMinder.registerUI('widget/netdiskfinder', function(minder) {
...
@@ -441,11 +593,11 @@ KityMinder.registerUI('widget/netdiskfinder', function(minder) {
finder
.
list
=
list
;
finder
.
list
=
list
;
finder
.
select
=
select
;
finder
.
select
=
select
;
finder
.
pwd
=
pwd
;
finder
.
pwd
=
pwd
;
finder
.
refresh
=
refresh
;
return
finder
;
return
finder
;
}
}
return
{
Finder
.
generate
=
generate
;
generate
:
generate
return
Finder
;
};
});
});
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment