2.4 version

pull/19/head
kalcaddle 2014-06-08 14:47:38 +08:00
parent a8f86a3689
commit de692316c5
31 changed files with 555 additions and 400 deletions

442
README.md
View File

@ -1,34 +1,34 @@
#KODexplorer (http://kalcaddle.com/) #KODexplorer (http://kalcaddle.com/)
###ver2.2(2014.4.19) power by warlee ###ver2.4(2014.6.8) power by warlee
商业版授权请联系QQ:kalcaddle@qq.com 商业版授权请联系QQ:kalcaddle#qq.com
##是什么: ##是什么:
Kodexplorer为千帆网络工作室开发的一款服务器文件管理程序。 Kodexplorer为千帆网络工作室开发的一款服务器文件管理程序。
完美取代落后的FTP管理可用于服务器文件管理,支持图片、音乐、视频预览,在线解压缩,文件夹拖拽上传……。 完美取代落后的FTP管理可用于服务器文件管理,支持图片、音乐、视频预览,在线解压缩,文件夹拖拽上传……。
在线编程:支持几乎所有编程语言的在线编辑(高亮,多光标编辑.堪比本地的sublime) 在线编程:支持几乎所有编程语言的在线编辑(高亮,多光标编辑.堪比本地的sublime)
极佳的操作体验:及其便捷的快捷键支持,让你拥有本地化的体验 极佳的操作体验:及其便捷的快捷键支持,让你拥有本地化的体验
中文等多语言支持:中文编码全面兼容,文件编辑自动适配。 中文等多语言支持:中文编码全面兼容,文件编辑自动适配。
超快的速度全面采用Ajax+Json进行数据通信,毫秒级的响应速度; 超快的速度全面采用Ajax+Json进行数据通信,毫秒级的响应速度;
全平台兼容性Win Linux Mac (Apache、Nginx、IIS) 全平台兼容性Win Linux Mac (Apache、Nginx、IIS)
###使用场景: ###使用场景:
取代古老的FTP,服务端、客户端软件等复杂的安装配置。kod可以一键安装随处使用. 取代古老的FTP,服务端、客户端软件等复杂的安装配置。kod可以一键安装随处使用.
你可以用它来管理你的服务器(备份,在线解压缩,版本发布....) 你可以用它来管理你的服务器(备份,在线解压缩,版本发布....)
你可以把他当做管理linux的一个操作系统界面 你可以把他当做管理linux的一个操作系统界面
可以用来作为私有云存储系统,存储你的文件... 可以用来作为私有云存储系统,存储你的文件...
当然你也可以用来分享文件 当然你也可以用来分享文件
更多场景等你来挖掘!…… 更多场景等你来挖掘!……
#### 觉得程序好用的话请尽量购买商业版 #### 觉得程序好用的话请尽量购买商业版
####------------------【使用说明】------------------ ####------------------【使用说明】------------------
管理员: admin/admin 管理员: admin/admin
普通用户demo/demo 普通用户demo/demo
游客用户guest/guest 游客用户guest/guest
【如何使用】下载程序,上传到你的服务器路径下,解压。访问即可,体验超便捷的服务吧! 【如何使用】下载程序,上传到你的服务器路径下,解压,data目录设置777权限。访问体验超便捷的服务吧!
【关于上传问题】 程序没有做任何限制,如果需要上传大文件,则修改php.iniupload_max_filesize = 1000M post_max_size = 1000M 【关于上传问题】 程序没有做任何限制,如果需要上传大文件,则修改php.iniupload_max_filesize = 1000M post_max_size = 1000M
【关于解压缩问题】 程序不做任何限制,如若失败请设置php内存限制。memory_limit 1000M 【关于解压缩问题】 程序不做任何限制,如若失败请设置php内存限制。memory_limit 1000M
【关于兼容性】建议使用chrome firefox ie9+ 体验更完整。ie8以下基本上不做兼容处理。chrome才支持文件夹拖拽上传。 【关于兼容性】建议使用chrome firefox ie9+ 体验更完整。ie8以下基本上不做兼容处理。chrome才支持文件夹拖拽上传。
【文件打开】office文件在线预览功能,服务器必须在公网(外部能访问该服务器) 【文件打开】office文件在线预览功能,服务器必须在公网(外部能访问该服务器)
####-------------------------------------------- ####--------------------------------------------
@ -36,238 +36,270 @@
![](https://cloud.githubusercontent.com/assets/3761968/2583304/764f562a-b9cf-11e3-8e59-afdbdffc20eb.png) ![](https://cloud.githubusercontent.com/assets/3761968/2583304/764f562a-b9cf-11e3-8e59-afdbdffc20eb.png)
ver2.2 `2014/4/19`
ver2.4 `2014/6/8`
=====================
##update:
语言选择
远程下载文件名优化
树目录事件优化
收藏夹点击 undefined
没权限建立文件夹错误提示 红色
打开dialog 不显示问题。先显示后打开
ajax error 系统错误 对话框提示内容
懒加载优化
ver2.3 `2014/6/2`
=====================
##update:
拖动url——创建ext app
文件管理,树目录变化后(增删改)自动同步到文件列表
文件管理,文件列表变化后(增删改)自动同步到树目录
中文用户名限制
对话框打开关闭动画
其他多处优化
##fix bug:bug解决和程序优化
文件名限制bug
同目录多个程序cookie bug修复
地址栏 最后显示宽度问题
服务器路径下 编辑器预览404修复
树目录显示优化
登陆记住密码优化
ver2.2 `2014/5/11`
===================== =====================
##update: ##update:
公共目录支持(多个用户可以共享目录,写权限跟随用户组权限设定) 公共目录支持(多个用户可以共享目录,写权限跟随用户组权限设定)
自动升级优化 自动升级优化
文件管理工具栏 增加菜单选项,方便移动设备操作 文件管理工具栏 增加菜单选项,方便移动设备操作
文件编辑器,文件树目录 上下左右键盘切换 快捷键加入 文件编辑器,文件树目录 上下左右键盘切换 快捷键加入
树目录去掉库,改为个人目录等多处文案修改 树目录去掉库,改为个人目录等多处文案修改
默认打开用户目录 默认打开用户目录
##fix bug:bug解决和程序优化 ##fix bug:bug解决和程序优化
桌面任务栏点不中bug 桌面任务栏点不中bug
部分文案问题 部分文案问题
众多细节优化
ver2.1 `2014/4/2` ver2.1 `2014/4/2`
===================== =====================
##update: ##update:
文件夹拖拽上传,完美解决(保持原始目录结构) 文件夹拖拽上传,完美解决(保持原始目录结构)
解压缩优化;解压中文问题。解压缩整体速度 解压缩优化;解压中文问题。解压缩整体速度
树目录增加快捷键支持(上下、左右展开树目录;复制、粘贴、剪切、删除、打开、搜索、新建文件(夹)、) 树目录增加快捷键支持(上下、左右展开树目录;复制、粘贴、剪切、删除、打开、搜索、新建文件(夹)、)
pdf预览支持 pdf预览支持
mac快捷键 ctrl 一一对应command mac快捷键 ctrl 一一对应command
音乐播放器和视频播放器相互独立 音乐播放器和视频播放器相互独立
图片懒加载、图片较多的情况下只加载首屏图片缩略图; 图片懒加载、图片较多的情况下只加载首屏图片缩略图;
编辑文件打开出错,自动关闭标签;文件打开20M限制(大于20M则不处理,浏览器会卡死) 编辑文件打开出错,自动关闭标签;文件打开20M限制(大于20M则不处理,浏览器会卡死)
标签关闭提示:检测是否有未保存文件,文件修改实时修改是否修修改的按钮状态 标签关闭提示:检测是否有未保存文件,文件修改实时修改是否修修改的按钮状态
##fix bug:bug解决和程序优化 ##fix bug:bug解决和程序优化
文本文件编辑 文件名含有url编码则出错bug 文本文件编辑 文件名含有url编码则出错bug
右键菜单在最下面时,右键位置重叠导致点击菜单问题 右键菜单在最下面时,右键位置重叠导致点击菜单问题
编辑器打开文件时光标问题处理移动到行尾编辑器enter建不显示自动提示 编辑器打开文件时光标问题处理移动到行尾编辑器enter建不显示自动提示
iframe 打开url 优化。解决canvas问题 iframe 打开url 优化。解决canvas问题
文件编辑器,载入loading去掉 文件编辑器,载入loading去掉
删除错误时,或上传错误时也刷新目录。删除提示颜色错误 删除错误时,或上传错误时也刷新目录。删除提示颜色错误
对话框右键 点击右键菜单隐藏修复 对话框右键 点击右键菜单隐藏修复
手机端 touch =双击 手机端 touch =双击
文件列表 explorer 右键 不清除选才· 文件列表 explorer 右键 不清除选才·
树目录中文展开问题。 树目录中文展开问题。
ie 重命名状态textarea不可选则问题 ie 重命名状态textarea不可选则问题
修复mac 下 ctrl连选出现右键菜单。 修复mac 下 ctrl连选出现右键菜单。
ie 树目录右键兼容性 ie 树目录右键兼容性
ver2.0 `2014/3/2` ver2.0 `2014/3/2`
===================== =====================
##fix bug:bug解决和程序优化 ##fix bug:bug解决和程序优化
body右键屏蔽(保留input、textarea) body右键屏蔽(保留input、textarea)
重命名&新建时 右键(编辑内容系统菜单) 重命名&新建时 右键(编辑内容系统菜单)
对话框 不显示边框(位移处理,opacity0 对话框 不显示边框(位移处理,opacity0
esc 退出程序 屏蔽该功能。 esc 退出程序 屏蔽该功能。
关闭播放器,还在播放bug 关闭播放器,还在播放bug
增加资源管理器任务栏。任务栏加入右键功能。 增加资源管理器任务栏。任务栏加入右键功能。
对话框增加右键功能 对话框增加右键功能
guest [三类用户 root/default/guest] guest登陆处加链接。20min guest [三类用户 root/default/guest] guest登陆处加链接。20min
打包程序[update user_add,admin/demo; 删除webuploader.js thumb less] 打包程序[update user_add,admin/demo; 删除webuploader.js thumb less]
编辑添加应用权限只能是root用户才可以。 编辑添加应用权限只能是root用户才可以。
保存文件不可写提示! 保存文件不可写提示!
解压缩结果提示。(对话框) 解压缩结果提示。(对话框)
upload dialog display upload dialog display
root登陆 目录修改为服务器路径 root登陆 目录修改为服务器路径
artdialog 已经打开的窗口 (设了id) 最小化时,再次打开则显示 artdialog 已经打开的窗口 (设了id) 最小化时,再次打开则显示
最小化窗口后,再次打开 dialog display (setting-display) 最小化窗口后,再次打开 dialog display (setting-display)
上传进度加入大小 上传进度加入大小
上传窗口关闭,自动停止所有上传队列 上传窗口关闭,自动停止所有上传队列
拖拽后,更新上传地址为当前地址。(之前上传队列也会这样。bug) 拖拽后,更新上传地址为当前地址。(之前上传队列也会这样。bug)
root用户非服务器路径下文件预览图片、mp3、视频、html、swf、……php代理输出文件内容,http方式 root用户非服务器路径下文件预览图片、mp3、视频、html、swf、……php代理输出文件内容,http方式
对话框最小化或关闭,重置最大index为焦点窗口 对话框最小化或关闭,重置最大index为焦点窗口
图片缩略图生成小于5k则不生成直接输出 图片缩略图生成小于5k则不生成直接输出
加载文件列表改为异步方式,数据返回采用回调函数方式。增强体验 加载文件列表改为异步方式,数据返回采用回调函数方式。增强体验
选中优化,文件&文件夹重命名、文件&文件夹新建 后自动选中。(f5增加回调。) 选中优化,文件&文件夹重命名、文件&文件夹新建 后自动选中。(f5增加回调。)
选中保持,选中后如果调整排序等等,保持选中状态。 选中保持,选中后如果调整排序等等,保持选中状态。
上传文件选中当前。 上传文件选中当前。
f5改为异步(加入mask loading) 优化文件夹打开体验 f5改为异步(加入mask loading) 优化文件夹打开体验
键盘按键选中文件 增加字符搜索定位功能(单个字符,增加到多个字符选中。两次响应直接延迟250ms) 键盘按键选中文件 增加字符搜索定位功能(单个字符,增加到多个字符选中。两次响应直接延迟250ms)
幻灯片播放[优化成fancybox或者 重写动画部分、打开时关不掉问题] 幻灯片播放[优化成fancybox或者 重写动画部分、打开时关不掉问题]
编辑器backspace、delete时不提示。 编辑器backspace、delete时不提示。
编辑器,增加选中效果 编辑器,增加选中效果
增加不自动提示功能,配置项作为全局配置。影响后续建立的文件。选中标记状态。 增加不自动提示功能,配置项作为全局配置。影响后续建立的文件。选中标记状态。
更换桌面背景图片【load后替换】 更换桌面背景图片【load后替换】
更换主题【css load 后载入】 更换主题【css load 后载入】
删除。不清除选中。提前准备数据 删除。不清除选中。提前准备数据
构建打包,合并压缩。添加版本、版权 构建打包,合并压缩。添加版本、版权
自动升级(本地记录版本,服务器js调用 参数 url、version忽略此版本。cookie。统计用户) 自动升级(本地记录版本,服务器js调用 参数 url、version忽略此版本。cookie。统计用户)
ver2.0debug `2014/3/2` ver2.0debug `2014/3/2`
===================== =====================
##fix bug:bug解决和程序优化 ##fix bug:bug解决和程序优化
优化文件打开处理 优化文件打开处理
文件&文件夹:含有%、+号的处理(显示不出等问题,encoenURIComponent——rawurldecode) 文件&文件夹:含有%、+号的处理(显示不出等问题,encoenURIComponent——rawurldecode)
文件下载,支持大文件下载、断点续传。 文件下载,支持大文件下载、断点续传。
解决更改排序方式后 ——对应右键菜单不同步问题。 解决更改排序方式后 ——对应右键菜单不同步问题。
优化右键更改列表状态,同步保存配置到服务端。 优化右键更改列表状态,同步保存配置到服务端。
文件浏览器打开(a点击新窗口跳转,a不支持click,用子元素冒泡来实现点击) 文件浏览器打开(a点击新窗口跳转,a不支持click,用子元素冒泡来实现点击)
优化配置文件存储方案。直接由前端操作后端key,value 优化配置文件存储方案。直接由前端操作后端key,value
修复添加收藏夹问题(已打开设置窗口再添加失败问题) 修复添加收藏夹问题(已打开设置窗口再添加失败问题)
修复树目录中文文件名bug 修复树目录中文文件名bug
优化pic图片幻灯片播放 优化pic图片幻灯片播放
优化新建文件&文件夹 清空选择状态 优化新建文件&文件夹 清空选择状态
对话框组件 ie8 优化tips不显示任务栏 对话框组件 ie8 优化tips不显示任务栏
优化地址栏过长编辑状态问题 优化地址栏过长编辑状态问题
优化新建、重命名文件(夹) 高度自适应问题 优化新建、重命名文件(夹) 高度自适应问题
firefox ctrl+s 系统对话框屏蔽 firefox ctrl+s 系统对话框屏蔽
树目录:收藏夹优化(右键绑定);右键操作优化,拖拽优化(文件管理&编辑器) 树目录:收藏夹优化(右键绑定);右键操作优化,拖拽优化(文件管理&编辑器)
收藏夹优化(右键 >编辑删除) 收藏夹优化(右键 >编辑删除)
##update: ##update:
###新增功能 ###新增功能
多用户、权限控制: 多用户、权限控制:
可以建立权限组,将功能分配给权限组 可以建立权限组,将功能分配给权限组
添加用户,选择所属的权限组。 添加用户,选择所属的权限组。
权限按功能划分成颗粒,可以任意配置,例如普通使用者、游客等 权限按功能划分成颗粒,可以任意配置,例如普通使用者、游客等
搜索:支持递归搜索,可选择是否搜索文件内容。 搜索:支持递归搜索,可选择是否搜索文件内容。
增加桌面自定义壁纸。 增加桌面自定义壁纸。
皮肤优化 ok 多色彩支持。 皮肤优化 ok 多色彩支持。
应用商店,root用户可以管理应用。安装、修改、删除。普通用户可以安装应用。 应用商店,root用户可以管理应用。安装、修改、删除。普通用户可以安装应用。
应用添加了图标。对应右键功能。 应用添加了图标。对应右键功能。
office文档在线预览。 office文档在线预览。
###上传下载 ###上传下载
采用全新上传控件,跟安全,更好的体验。 采用全新上传控件,跟安全,更好的体验。
拖拽支持文件夹,多个文件。上传自动过滤不允许的文件类型 拖拽支持文件夹,多个文件。上传自动过滤不允许的文件类型
拖拽上传 和上统一优化,修复webuploader的文件判断火狐拖拽上传,ie9+拖拽上传。 拖拽上传 和上统一优化,修复webuploader的文件判断火狐拖拽上传,ie9+拖拽上传。
上传时自动过滤不合格的文件,上传失败错误返回。 上传时自动过滤不合格的文件,上传失败错误返回。
###文件编辑 ###文件编辑
编辑器支持多光标 编辑器支持多光标
支持几乎所有编程语言的代码高亮 支持几乎所有编程语言的代码高亮
支持代码自动补全(基于文档、或自定义的代码快照) 支持代码自动补全(基于文档、或自定义的代码快照)
快速预览功能 快速预览功能
优化文件保存完美解决。编码自动识别转换。字符串转义问题。1&#'[{'"+~%25\\\\ //// 优化文件保存完美解决。编码自动识别转换。字符串转义问题。1&#'[{'"+~%25\\\\ ////
文件编辑,添加收藏夹 文件编辑,添加收藏夹
优化音乐播放器,添加音乐后自动播放新添加的第一首;解决之前添加列表后暂停问题。 优化音乐播放器,添加音乐后自动播放新添加的第一首;解决之前添加列表后暂停问题。
优化任务栏,多标签最小化flash问题left+10000 visiable 优化任务栏,多标签最小化flash问题left+10000 visiable
ctrl,shift 多选时拖拽优化(按住这两个键时,不能拖动拖动加入延迟200ms ctrl,shift 多选时拖拽优化(按住这两个键时,不能拖动拖动加入延迟200ms
编辑器在没打开文件的情况下工具栏不可用问题。 编辑器在没打开文件的情况下工具栏不可用问题。
搜索、替换vim模式 搜索、替换vim模式
…… ……
###登陆退出 ###登陆退出
登陆优化 ok【页面&验证码&记住密码】 登陆优化 ok【页面&验证码&记住密码】
三次错误需要输入验证码,保证系统的安全性 三次错误需要输入验证码,保证系统的安全性
优化自动登录安全性,客户端保存cookie自动登录信息。【tooken加入本地ip】 优化自动登录安全性,客户端保存cookie自动登录信息。【tooken加入本地ip】
###系统优化 ###系统优化
解决较慢操作,阻塞其他操作问题。同一个用户session会加锁,入口处做释放) 解决较慢操作,阻塞其他操作问题。同一个用户session会加锁,入口处做释放)
前后端代码基本全部重构,前端采用模块化方法sea.js|require.js 模块化。 前后端代码基本全部重构,前端采用模块化方法sea.js|require.js 模块化。
凡是有模板调用的display——页面部分php解析。并将配置注入到页面js变量,便于js使用 凡是有模板调用的display——页面部分php解析。并将配置注入到页面js变量,便于js使用
加入模板机制;通用模块采用懒加载模式使用artTemplate 对模板绑定数据。 加入模板机制;通用模块采用懒加载模式使用artTemplate 对模板绑定数据。
kv结构存储 kv结构存储
路由权限控制 路由权限控制
后端统一json输出。 后端统一json输出。
ver1.21 `2013/11/6` ver1.21 `2013/11/6`
===================== =====================
##fix bug: ##fix bug:
* 修复文件下载bug * 修复文件下载bug
* 修复编辑器自动补全问题,<aa bb /> ——> <aa bb></a> * 修复编辑器自动补全问题,<aa bb /> ——> <aa bb></a>
* 兼容部分服务器问题。 * 兼容部分服务器问题。
ver1.2 `2013/10/16` ver1.2 `2013/10/16`
===================== =====================
##fix bug: ##fix bug:
* 设置,外部通用调用方式 * 设置,外部通用调用方式
* 打包中文乱码问题。 * 打包中文乱码问题。
* simple,default主题,navbar 下拉菜单右边位置问题。 * simple,default主题,navbar 下拉菜单右边位置问题。
* 文件管理:有滚动条时,上下超过可视区域框选问题修复,统一和win操作一致。 * 文件管理:有滚动条时,上下超过可视区域框选问题修复,统一和win操作一致。
* 文件大小写不敏感设置,扩展名获取bug * 文件大小写不敏感设置,扩展名获取bug
* 目录读取权限判断,解决“系统错误”相关问题。 * 目录读取权限判断,解决“系统错误”相关问题。
##update: ##update:
* 地址栏宽度自适应优化,支持浏览器窗口调整 * 地址栏宽度自适应优化,支持浏览器窗口调整
* 增加远程下载功能;上传功能优化, * 增加远程下载功能;上传功能优化,
* 整体样式风格优化, * 整体样式风格优化,
* 右键菜单优化(可持续粘贴,剪切后粘贴清空剪贴板)。 * 右键菜单优化(可持续粘贴,剪切后粘贴清空剪贴板)。
* 新建文件、文件重命名高度自适应优化 * 新建文件、文件重命名高度自适应优化
* 关闭调试状态错误信息 * 关闭调试状态错误信息
* 图片播放幻灯片优化,支持浏览器窗口调整,解决事件绑定bug,添加图片倒影;添加关闭按钮,关闭动画等功能 * 图片播放幻灯片优化,支持浏览器窗口调整,解决事件绑定bug,添加图片倒影;添加关闭按钮,关闭动画等功能
* 优化桌面,弹出层层级问题;任务栏为最上层 * 优化桌面,弹出层层级问题;任务栏为最上层
* 优化多标签,没有标签时不显示标签容器,放至层级覆盖 * 优化多标签,没有标签时不显示标签容器,放至层级覆盖
* 地址栏超出宽度,自动隐藏最左边内容 * 地址栏超出宽度,自动隐藏最左边内容
* 右键菜单状态同步,排序方式初始化当前值,设置后标记当前值。 * 右键菜单状态同步,排序方式初始化当前值,设置后标记当前值。
* 优化编辑器:拖动内容&文件到编辑区,内容处理。 * 优化编辑器:拖动内容&文件到编辑区,内容处理。
* 拖拽上传,信息框自动隐出后关闭 * 拖拽上传,信息框自动隐出后关闭
* setting,editor,player最小化时,再次调用则显示出弹出层 * setting,editor,player最小化时,再次调用则显示出弹出层
* 优化影音播放器,皮肤及相关配置信息存储于js中,不用之前的服务器请求方式,修改皮肤后可以直接更新到界面上。 * 优化影音播放器,皮肤及相关配置信息存储于js中,不用之前的服务器请求方式,修改皮肤后可以直接更新到界面上。
ver1.01 `2013/9/10` ver1.01 `2013/9/10`
===================== =====================
##fix bug: ##fix bug:
* 添加到收藏 * 添加到收藏
* simple,default主题,navbar 下拉菜单右边位置问题。 * simple,default主题,navbar 下拉菜单右边位置问题。
##update: ##update:
* 添加到收藏夹,修改收藏夹,更新文件管理收藏夹部分。 * 添加到收藏夹,修改收藏夹,更新文件管理收藏夹部分。
* 修改主题,同时修改编辑器主题。【编辑区,文件管理,桌面】 * 修改主题,同时修改编辑器主题。【编辑区,文件管理,桌面】
* 优化setting部分代码,整合为一个整体。 * 优化setting部分代码,整合为一个整体。
* 优化debug,增加less编译,导出功能优化,先编译后复制再操作 * 优化debug,增加less编译,导出功能优化,先编译后复制再操作
ver1.0 `2013.9.1` ver1.0 `2013.9.1`
===================== =====================
##update: ##update:
* 代码模块化优化,静态文件分离,可以分开部署 * 代码模块化优化,静态文件分离,可以分开部署
* 编辑器单独逻辑提取,完整融合到文件管理,树目录融合文件管理,懒加载语法高亮 * 编辑器单独逻辑提取,完整融合到文件管理,树目录融合文件管理,懒加载语法高亮
* 多标签实现,弹层对话框多标签支持,桌面任务栏实现;编辑器多标签支持 * 多标签实现,弹层对话框多标签支持,桌面任务栏实现;编辑器多标签支持
* 弹层功能优化,实现最大最小化,最小化关联多标签任务栏管理 * 弹层功能优化,实现最大最小化,最小化关联多标签任务栏管理
##fix bug: ##fix bug:
* linux 下浏览器打开文件和文件夹,中文问题 * linux 下浏览器打开文件和文件夹,中文问题
* 重命名&新建&上传 刷新列表使用动画,当前选中失效问题,不使用动画加载方式。 * 重命名&新建&上传 刷新列表使用动画,当前选中失效问题,不使用动画加载方式。
* html5拖拽上传优化 * html5拖拽上传优化
ver0.8 `2013.6.15` ver0.8 `2013.6.15`
===================== =====================
##update: ##update:
* 整体优化,实现全部操作ajax本地化 ,进一步提升体验 * 整体优化,实现全部操作ajax本地化 ,进一步提升体验
* 浏览器强刷新,保持之前最后所在路径 * 浏览器强刷新,保持之前最后所在路径
* 重命名,新建,粘贴操作后添加选中状态 * 重命名,新建,粘贴操作后添加选中状态
* 代码主题列表优化,重新设计,提高可配置性 * 代码主题列表优化,重新设计,提高可配置性
* 优化代码,添加getTplList模版,简化关联配置获取 * 优化代码,添加getTplList模版,简化关联配置获取
* 增加设置功能,ajax刷新设置。缩略图片增加tips预览(被注释frame/setting.php) * 增加设置功能,ajax刷新设置。缩略图片增加tips预览(被注释frame/setting.php)
* 增加重命名只选择名称部分功能 * 增加重命名只选择名称部分功能
* 增加iframe js api互操作ie支持。四大浏览器内核皆支持。 * 增加iframe js api互操作ie支持。四大浏览器内核皆支持。
* 文件夹打开,采用ajax实现。包括头部地址栏,父级目录,左边树目录以及收藏夹 * 文件夹打开,采用ajax实现。包括头部地址栏,父级目录,左边树目录以及收藏夹
* 历史记录完美实现,前进后退按钮实时变化状态。 * 历史记录完美实现,前进后退按钮实时变化状态。
* 快捷键backspace实现后退(left header main 分别加入函数,屏蔽默认history(-1)操作) * 快捷键backspace实现后退(left header main 分别加入函数,屏蔽默认history(-1)操作)
##fix bug: ##fix bug:
* 完善修改windows以及linux获取文件列表,中文路径属性获取失败问题。 * 完善修改windows以及linux获取文件列表,中文路径属性获取失败问题。
* 复制,剪切。剪贴板内容覆盖判空处理 * 复制,剪切。剪贴板内容覆盖判空处理
* 修复一些地方ajax线程同步问题,重命名后选中失效问题解决 * 修复一些地方ajax线程同步问题,重命名后选中失效问题解决
* 修复返回上层目录,根目录检测 * 修复返回上层目录,根目录检测
* 修复linux下 音视频播放,中文路径问题 * 修复linux下 音视频播放,中文路径问题
* 修复文件右键菜单位置出错问题 * 修复文件右键菜单位置出错问题
* 修复ie下frame js相互通信问题 * 修复ie下frame js相互通信问题
* ajax更新文件列表下,各种bug修复。进一步提升操作友好性 * ajax更新文件列表下,各种bug修复。进一步提升操作友好性
* 修复当前目录改变的情况下,播放器消失的问题。现在能使播放器始终保留 * 修复当前目录改变的情况下,播放器消失的问题。现在能使播放器始终保留
## editor ## editor

View File

@ -5,10 +5,12 @@
* @copyright warlee 2014.(Shanghai)Co.,Ltd * @copyright warlee 2014.(Shanghai)Co.,Ltd
* @license http://kalcaddle.com/tools/licenses/license.txt * @license http://kalcaddle.com/tools/licenses/license.txt
*/ */
date_default_timezone_set('PRC'); date_default_timezone_set('PRC');
@ini_set('display_errors',0);
@ini_set('session.cache_expire',600); @ini_set('session.cache_expire',600);
@set_time_limit(600);//30min pathInfoMuti,search,upload,download... @set_time_limit(600);//30min pathInfoMuti,search,upload,download...
@ini_set('display_errors',0);
function P($path){return str_replace('\\','/',$path);} function P($path){return str_replace('\\','/',$path);}
define('WEB_ROOT',str_replace(P($_SERVER['SCRIPT_NAME']),'',P(dirname(dirname(__FILE__))).'/index.php').'/'); define('WEB_ROOT',str_replace(P($_SERVER['SCRIPT_NAME']),'',P(dirname(dirname(__FILE__))).'/index.php').'/');

View File

@ -1,2 +1,2 @@
<?php <?php
define('KOD_VERSION','2.2');//2014.4.2 define('KOD_VERSION','2.4');//2014.6.8

View File

@ -87,7 +87,17 @@ class app extends Controller{
show_json($this->L['error'],false); show_json($this->L['error'],false);
} }
public function get_url_title(){
$html = curl_get_contents($this->in['url']);
$result = match($html,"<title>(.*)<\/title>");
if (strlen($result)>50) {
$result = mb_substr($result,0,50,'utf-8');
}
if (strlen($result) == 0) {
$result = urlencode($this->in['url']);
}
show_json($result);
}
private function _init(){ private function _init(){
return json_decode(rawurldecode($this->in['data'])); return json_decode(rawurldecode($this->in['data']));

View File

@ -47,15 +47,16 @@ class debug extends Controller{
$this->_remove(); $this->_remove();
echo '删除成功!<br/><h3>开始替换模板种less相关内容</h3><hr/>';flush(); echo '删除成功!<br/><h3>开始替换模板种less相关内容</h3><hr/>';flush();
$this->_fileReplace(); $this->_fileReplace();
echo '替换成功!<br/><h3>打包程序</h3><hr/>';flush(); echo '替换成功!<br/><h3>初始化默认用户数据...</h3><hr/>';flush();
$this->_initUser();
echo '初始化默认用户成功!<br/><h3>打包程序</h3><hr/>';flush();
load_class('pclzip'); load_class('pclzip');
ini_set('memory_limit', '2028M');//2G; ini_set('memory_limit', '2028M');//2G;
$archive = new PclZip($this->zip_to); $archive = new PclZip($this->zip_to);
$v_list = $archive->create($this->path_to,PCLZIP_OPT_REMOVE_PATH,$this->path_to); $v_list = $archive->create($this->path_to,PCLZIP_OPT_REMOVE_PATH,$this->path_to);
echo '打包成功!<br/><h3>初始化配置文件</h3><hr/>';flush(); echo '打包成功!<br/><h3>初始化配置文件</h3><hr/>';flush();
$this->_initUser();
echo '更新成功!<br/><h1>导出处理完成!^_^</h1>';flush(); echo '更新成功!<br/><h1>导出处理完成!^_^</h1>';flush();
} }
@ -156,6 +157,8 @@ class debug extends Controller{
); );
$path_list = array( $path_list = array(
$this->path_to.'/data/log', $this->path_to.'/data/log',
$this->path_to.'/data/User',
$this->path_to.'/data/public/',
$this->path_to.'/data/thumb', $this->path_to.'/data/thumb',
$this->path_to.'/static/js/_dev', $this->path_to.'/static/js/_dev',
$this->path_to.'/static/js/app/update', $this->path_to.'/static/js/app/update',
@ -222,7 +225,8 @@ class debug extends Controller{
'guest'=>array('guest','guest') 'guest'=>array('guest','guest')
); );
foreach ($user as $name => $v) { mk_dir($this->path_to.'/data/public/test/');//创建公共目录
foreach ($user as $name => $v) {//创建用户目录及初始化
$user_path = $this->path_to.'/data/User/'.$name.'/'; $user_path = $this->path_to.'/data/User/'.$name.'/';
mk_dir($user_path); mk_dir($user_path);
foreach ($root as $dir) { foreach ($root as $dir) {
@ -231,8 +235,7 @@ class debug extends Controller{
foreach ($home as $dir) { foreach ($home as $dir) {
mk_dir($user_path.'home/'.$dir); mk_dir($user_path.'home/'.$dir);
} }
fileCache::save($user_path.'data/config.php',$this->config['setting_default']); fileCache::save($user_path.'data/config.php',$this->config['setting_default']);
} }
$this->_initUserData(); $this->_initUserData();
} }

View File

@ -245,7 +245,7 @@ class explorer extends Controller{
if(mkdir($new,0777)){ if(mkdir($new,0777)){
show_json($this->L['create_success']); show_json($this->L['create_success']);
}else{ }else{
show_json($this->L['create_error']); show_json($this->L['create_error'],false);
} }
} }
public function pathCopy(){ public function pathCopy(){
@ -448,7 +448,16 @@ class explorer extends Controller{
public function serverDownload() { public function serverDownload() {
$url = rawurldecode($this->in['url']); $url = rawurldecode($this->in['url']);
$save_path = _DIR($this->in['save_path']); $save_path = _DIR($this->in['save_path']);
$save_path = $save_path.'download_'.rand(100,999).'.tmp';
$name = get_path_this($url);
if (stripos($name,'?')) $name = substr($name,0,stripos($name,'?'));
if (!$name) $name = 'index.html';
$ext = get_path_ext($name);
$ext_arr = explode('|',$GLOBALS['auth']['ext_not_allow']);
if (in_array($ext,$ext_arr)){
$name .= '.tmp';
}
$save_path = $save_path.$name;
$result = file_download_this($url,$save_path); $result = file_download_this($url,$save_path);
if ($result == 1){ if ($result == 1){
show_json($this->L['download_success'],true,$save_path); show_json($this->L['download_success'],true,$save_path);

View File

@ -45,6 +45,10 @@ class user extends Controller
$this->authApi();//api方式验证 $this->authApi();//api方式验证
if($_SESSION['isLogin'] === true){ if($_SESSION['isLogin'] === true){
define('USER',USER_PATH.$this->user['name'].'/'); define('USER',USER_PATH.$this->user['name'].'/');
if (!file_exists(USER)) {
$this->logout();
return;
}
if ($this->user['role'] == 'root') { if ($this->user['role'] == 'root') {
define('MYHOME',USER.'home/'); define('MYHOME',USER.'home/');
define('HOME',''); define('HOME','');
@ -66,7 +70,7 @@ class user extends Controller
$member = new fileCache($this->config['system_file']['member']); $member = new fileCache($this->config['system_file']['member']);
$user = $member->get($_COOKIE['kod_name']); $user = $member->get($_COOKIE['kod_name']);
if(md5($user['password'].get_client_ip()) == $_COOKIE['kod_token']){ if(md5($user['password'].get_client_ip()) == $_COOKIE['kod_token']){
session_start();//re start
$_SESSION['isLogin'] = true; $_SESSION['isLogin'] = true;
$_SESSION['user']= $user; $_SESSION['user']= $user;
setcookie('kod_name', $_COOKIE['kod_name'], time()+3600*24*365); setcookie('kod_name', $_COOKIE['kod_name'], time()+3600*24*365);
@ -180,12 +184,11 @@ class user extends Controller
} }
//扩展名限制:新建文件&上传文件&重命名文件&保存文件&zip解压文件 //扩展名限制:新建文件&上传文件&重命名文件&保存文件&zip解压文件
$check_arr = array( $check_arr = array(
'mkfile' => $this->in['path'], 'mkfile' => trim($this->in['path']),
'pathRname' => $this->in['rname_to'], 'pathRname' => trim($this->in['rname_to']),
'fileUpload'=> $_FILES['file']['name'], 'fileUpload'=> trim($_FILES['file']['name']),
'fileSave' => $this->in['path'], 'fileSave' => trim($this->in['path'])
); );
if (array_key_exists(ACT,$check_arr)){ if (array_key_exists(ACT,$check_arr)){
$ext = get_path_ext($check_arr[ACT]); $ext = get_path_ext($check_arr[ACT]);
$ext_arr = explode('|',$auth['ext_not_allow']); $ext_arr = explode('|',$auth['ext_not_allow']);

View File

@ -1 +1 @@
<?php exit;?>{"list_type":"icon","list_sort_field":"name","list_sort_order":"up","theme":"simple\/","codetheme":"crimson_editor","wall":"1","musictheme":"mp3player","movietheme":"webplayer"} <?php exit;?>{"list_type":"icon","list_sort_field":"name","list_sort_order":"up","theme":"metro\/","codetheme":"github","wall":"8","musictheme":"qqmusic","movietheme":"webplayer"}

View File

@ -1 +1 @@
<?php exit;?>{"0.000":{"name":"0.000","path":"D:\/wwwroot\/0.000\/"},"config":{"name":"config","path":"D:\/wwwroot\/tools\/eXtplorer\/config"},"kod":{"name":"kod","path":"D:\/wwwroot\/www\/kod"}} <?php exit;?>{"0.000":{"name":"0.000","path":"D:\/wwwroot\/0.000\/"},"config":{"name":"config","path":"D:\/wwwroot\/tools\/eXtplorer\/config"},"kod":{"name":"kod","path":"D:\/wwwroot\/www\/kod"},"\u5e7b\u4e61":{"name":"\u5e7b\u4e61","path":"D:\/wwwroot\/www\/kod\/dev\/data\/public\/images\/\u6211\u7684\u6536\u85cf\/\u5e7b\u4e61"}}

View File

@ -1 +1 @@
<?php exit;?>{"list_type":"icon","list_sort_field":"mtime","list_sort_order":"up","theme":"metro\/","codetheme":"github","wall":"1","musictheme":"kuwo","movietheme":"webplayer"} <?php exit;?>{"list_type":"icon","list_sort_field":"mtime","list_sort_order":"up","theme":"metro\/","codetheme":"github","wall":"1","musictheme":"mp3player","movietheme":"webplayer"}

View File

@ -14,11 +14,11 @@ define(function(require, exports) {
'bindary':['pdf','bin','zip','swf','gzip','rar','arj','tar','gz','cab','tbz','tbz2','lzh','uue','bz2' 'bindary':['pdf','bin','zip','swf','gzip','rar','arj','tar','gz','cab','tbz','tbz2','lzh','uue','bz2'
,'ace','exe','so','dll','chm','rtf','odp','odt','pages','class','psd','ttf'] ,'ace','exe','so','dll','chm','rtf','odp','odt','pages','class','psd','ttf']
}, },
contextmenu:function(){ contextmenu:function(event){
rightMenu.hidden(); rightMenu.hidden();
var e = event || window.event; var e = event || window.event;
if ($.nodeName(e.target,'TEXTAREA') || if (e && ($.nodeName(e.target,'TEXTAREA') ||
$.nodeName(e.target,'INPUT')){ $.nodeName(e.target,'INPUT'))){
return true; return true;
} }
//return false; //return false;
@ -70,6 +70,24 @@ define(function(require, exports) {
return G.web_host+G.web_root+path; return G.web_host+G.web_root+path;
} }
}, },
ajaxError:function(XMLHttpRequest, textStatus, errorThrown){
core.tips.close(LNG.system_error,false);
var error = '<div style="color:#f60;">'+XMLHttpRequest.responseText+'</div>';
var dialog = $.dialog.list['ajaxErrorDialog'];
if (dialog) {
dialog.content(error);
}else{
$.dialog({
id:'ajaxErrorDialog',
fixed:true,
resize:true,
title:'ajax error',
width:450,
height:200,
content:error
});
}
},
// setting 对话框 // setting 对话框
setting:function(setting){ setting:function(setting){
if (setting == undefined) setting = ''; if (setting == undefined) setting = '';
@ -279,6 +297,7 @@ define(function(require, exports) {
beforeSend:function(){ beforeSend:function(){
$message.hide().html(LNG.searching+'<img src="'+G.static_path+'images/loading.gif">').fadeIn(fade); $message.hide().html(LNG.searching+'<img src="'+G.static_path+'images/loading.gif">').fadeIn(fade);
}, },
error:core.ajaxError,
success:function(data){ success:function(data){
if (!data.code) { if (!data.code) {
$message.hide().html(data.data).fadeIn(fade); $message.hide().html(data.data).fadeIn(fade);
@ -292,9 +311,6 @@ define(function(require, exports) {
var render = template.compile(tpl.list); var render = template.compile(tpl.list);
data.data.LNG = LNG; data.data.LNG = LNG;
$(render(data.data)).insertAfter('.search_result .message').fadeIn(fade); $(render(data.data)).insertAfter('.search_result .message').fadeIn(fade);
},
error:function(data){
$message.hide().html(LNG.system_error).fadeIn(fade);
} }
}); });
} }
@ -370,14 +386,12 @@ define(function(require, exports) {
$.ajax({ $.ajax({
url:'?explorer/serverDownload&save_path='+path+'&url='+urlEncode2(urls[i]), url:'?explorer/serverDownload&save_path='+path+'&url='+urlEncode2(urls[i]),
dataType:'json', dataType:'json',
error:core.ajaxError,
success:function(data){ success:function(data){
if (data.code) { if (data.code) {
FrameCall.father('ui.f5',""); FrameCall.father('ui.f5',"");
} }
core.tips.tips(data); core.tips.tips(data);
},
error:function(data){
core.tips.tips(LNG.system_error,false);
} }
}); });
} }
@ -447,10 +461,13 @@ define(function(require, exports) {
}).on('uploadError', function(file,reason){ }).on('uploadError', function(file,reason){
$('#'+file.id).find(state).addClass('error').text(LNG.upload_error); $('#'+file.id).find(state).addClass('error').text(LNG.upload_error);
}).on('uploadFinished', function(file){ }).on('uploadFinished', function(file){
$(list).find('.item').delay(2000).each(function(index){ $(list).find('.item').delay(2000).each(function(index){
$(this).delay(index*300).slideUp(600); $(this).delay(index*300).slideUp(600);
}); });
select_name_arr = []; select_name_arr = [];
if (Config.pageApp == 'explorer') {
ui.tree.checkIfChange(G.this_path);
}
}).on('error',function(a,b){ }).on('error',function(a,b){
//console.log(a,b); //console.log(a,b);
}); });
@ -458,8 +475,8 @@ define(function(require, exports) {
var timer; var timer;
inState = false; inState = false;
dragOver = function(e){ dragOver = function(e){
stopPP(e); //stopPP(e);
if (inState == false){ if (inState == false){
inState = true; inState = true;
MaskView.tips(LNG.upload_drag_tips); MaskView.tips(LNG.upload_drag_tips);
} }
@ -476,12 +493,19 @@ define(function(require, exports) {
},100); },100);
} }
dragDrop = function(e){ dragDrop = function(e){
e = e.originalEvent || e;
var txt = e.dataTransfer.getData("text/plain");
if (txt && txt.substring(0,4) == 'http') {
ui.path.pathOperate.appAddURL(txt);
console.log(txt);
}else{
core.upload();//满足 拖拽到当前,则上传到当前。
}
stopPP(e); stopPP(e);
if (inState) { if (inState) {
inState = false; inState = false;
MaskView.close(); MaskView.close();
} }
core.upload();//满足 拖拽到当前,则上传到当前。
} }
} }
}; };

View File

@ -39,9 +39,7 @@ define(function(require, exports) {
beforeSend:function(){ beforeSend:function(){
core.tips.loading(); core.tips.loading();
}, },
error:function(){ error:core.ajaxError,
core.tips.close(LNG.system_error,false);
},
success: function(data) { success: function(data) {
core.tips.close(data); core.tips.close(data);
if (typeof(callback) == 'function')callback(data); if (typeof(callback) == 'function')callback(data);
@ -59,9 +57,7 @@ define(function(require, exports) {
beforeSend:function(){ beforeSend:function(){
core.tips.loading(); core.tips.loading();
}, },
error:function(){ error:core.ajaxError,
core.tips.close(LNG.system_error,false);
},
success: function(data) { success: function(data) {
core.tips.close(data); core.tips.close(data);
if (typeof (callback) == 'function')callback(data); if (typeof (callback) == 'function')callback(data);
@ -81,9 +77,7 @@ define(function(require, exports) {
beforeSend:function(){ beforeSend:function(){
core.tips.loading(); core.tips.loading();
}, },
error:function(){ error:core.ajaxError,
core.tips.close(LNG.system_error,false);
},
success: function(data) { success: function(data) {
core.tips.close(data); core.tips.close(data);
if (typeof(callback) == 'function')callback(data); if (typeof(callback) == 'function')callback(data);
@ -97,7 +91,11 @@ define(function(require, exports) {
//删除 文件|文件夹 & 包含批量删除 //删除 文件|文件夹 & 包含批量删除
var remove = function(param,callback){ var remove = function(param,callback){
if (param.length<1) return; if (param.length<1) return;
var name = param[0]['path'].substr(-40) + '...'; var name = param[0]['path'];
if (name.length > 20) {
name = name.substr(-20) + '...'
};
$.dialog({ $.dialog({
id:'dialog_path_remove', id:'dialog_path_remove',
fixed: true,//不跟随页面滚动 fixed: true,//不跟随页面滚动
@ -117,9 +115,7 @@ define(function(require, exports) {
beforeSend:function(){ beforeSend:function(){
core.tips.loading(); core.tips.loading();
}, },
error:function(){ error:core.ajaxError,
common.tips.close(LNG.system_error,false);
},
success: function(data) { success: function(data) {
core.tips.close(data); core.tips.close(data);
if (typeof(callback) == 'function')callback(data); if (typeof(callback) == 'function')callback(data);
@ -137,9 +133,7 @@ define(function(require, exports) {
type:'POST', type:'POST',
dataType:'json', dataType:'json',
data:_json(param), data:_json(param),
error:function(){ error:core.ajaxError,
core.tips.close(LNG.system_error,false);
},
success: function(data) { success: function(data) {
core.tips.tips(data); core.tips.tips(data);
} }
@ -153,9 +147,7 @@ define(function(require, exports) {
type:'POST', type:'POST',
dataType:'json', dataType:'json',
data:_json(param), data:_json(param),
error:function(){ error:core.ajaxError,
core.tips.close(LNG.system_error,false);
},
success:function(data){ success:function(data){
core.tips.tips(data); core.tips.tips(data);
} }
@ -171,9 +163,7 @@ define(function(require, exports) {
beforeSend: function(){ beforeSend: function(){
core.tips.loading(LNG.moving); core.tips.loading(LNG.moving);
}, },
error:function(){ error:core.ajaxError,
core.tips.close(LNG.system_error,false);
},
success:function(data){ success:function(data){
if (!data.code){ if (!data.code){
core.tips.close(data); core.tips.close(data);
@ -196,9 +186,7 @@ define(function(require, exports) {
beforeSend: function(){ beforeSend: function(){
core.tips.loading(LNG.getting); core.tips.loading(LNG.getting);
}, },
error:function(){//请求出错处理 error:core.ajaxError,
core.tips.close(LNG.system_error,false);
},
success:function(data){ success:function(data){
if (!data.code){ if (!data.code){
core.tips.close(data);return; core.tips.close(data);return;
@ -225,9 +213,7 @@ define(function(require, exports) {
beforeSend: function(){ beforeSend: function(){
core.tips.loading(LNG.getting); core.tips.loading(LNG.getting);
}, },
error:function(){ error:core.ajaxError,
core.tips.close(LNG.system_error,false);
},
success:function(data){ success:function(data){
if (!data.code){ if (!data.code){
core.tips.close(data);return; core.tips.close(data);return;
@ -258,9 +244,7 @@ define(function(require, exports) {
beforeSend: function(){ beforeSend: function(){
core.tips.loading(LNG.ziping); core.tips.loading(LNG.ziping);
}, },
error:function(){ error:core.ajaxError,
core.tips.close(LNG.system_error,false);
},
success:function(data){ success:function(data){
core.tips.close(data); core.tips.close(data);
data.code = 100; data.code = 100;
@ -277,9 +261,7 @@ define(function(require, exports) {
beforeSend: function(){ beforeSend: function(){
core.tips.loading(LNG.unziping); core.tips.loading(LNG.unziping);
}, },
error:function(){ error:core.ajaxError,
core.tips.close(LNG.system_error,false);
},
success:function(data){ success:function(data){
core.tips.close(data); core.tips.close(data);
data.code = 100; data.code = 100;
@ -298,9 +280,7 @@ define(function(require, exports) {
beforeSend: function(){ beforeSend: function(){
core.tips.loading(LNG.moving); core.tips.loading(LNG.moving);
}, },
error:function(){ error:core.ajaxError,
core.tips.close(LNG.system_error,false);
},
success:function(data){ success:function(data){
core.tips.close(data); core.tips.close(data);
if (!data.code) return; if (!data.code) return;
@ -313,9 +293,7 @@ define(function(require, exports) {
$.ajax({ $.ajax({
url:'index.php?explorer/clipboard', url:'index.php?explorer/clipboard',
dataType:'json', dataType:'json',
error:function(){ error:core.ajaxError,
core.tips.tips(LNG.system_error,false);
},
success:function(data){ success:function(data){
if (!data.code) return; if (!data.code) return;
$.dialog({ $.dialog({
@ -415,9 +393,7 @@ define(function(require, exports) {
beforeSend:function(){ beforeSend:function(){
core.tips.loading(); core.tips.loading();
}, },
error:function(){ error:core.ajaxError,
core.tips.close(LNG.system_error,false);
},
success: function(data) { success: function(data) {
core.tips.close(data); core.tips.close(data);
if (!data.code) return; if (!data.code) return;
@ -476,10 +452,51 @@ define(function(require, exports) {
var appList = function(){ var appList = function(){
core.appStore(); core.appStore();
}; };
//ui.path.pathOperate.appAddURL('http://www.baidu.com');
var appAddURL = function(url){
if (url && url.length<4 && url.substring(0,4)!='http') return;
$.ajax({
url: './index.php?app/get_url_title&url='+url,
dataType:'json',
beforeSend:function(){
core.tips.loading();
},
success: function(result) {
var name = result.data;
core.tips.close(result);
var data = {
content:url,
desc: "",
group: "others",
type: "url",
icon: "internet.png",
name: name,
resize: 1,
simple: 0,
height: "70%",
width: "80%"
};
var filename = urlEncode2(G.this_path+name);
url = './index.php?app/user_app&action=add&path='+filename;
$.ajax({
url: url,
type:'POST',
dataType:'json',
data:'data='+urlEncode2(json_encode(data)),
success: function(data) {
core.tips.close(data);
if (!data.code) return;
ui.f5();
}
});
}
});
};
return{ return{
appEdit:appEdit, appEdit:appEdit,
appList:appList, appList:appList,
appAddURL:appAddURL,
newFile:newFile, newFile:newFile,
newFolder:newFolder, newFolder:newFolder,

View File

@ -2,6 +2,7 @@ define(function(require, exports) {
var pathOperate = require('./pathOperate'); var pathOperate = require('./pathOperate');
var pathOpen = require('./pathOpen'); var pathOpen = require('./pathOpen');
var successCallback; var successCallback;
var isUpdateRefresh = false;//上传连续更新树目录队列方式。没有处理完不做反应处理完后sleep 2s;
ui.pathOpen = pathOpen; ui.pathOpen = pathOpen;
// 目录树操作 // 目录树操作
@ -145,9 +146,9 @@ define(function(require, exports) {
showLine: false, showLine: false,
selectedMulti: false, selectedMulti: false,
dblClickExpand: false, dblClickExpand: false,
dblClickExpand: function(treeId, treeNode) { // dblClickExpand: function(treeId, treeNode) {
return treeNode.level >= 0; // return treeNode.level >= 0;
},// 双击 展开&折叠 // },// 双击 展开&折叠
addDiyDom: function(treeId, treeNode) { addDiyDom: function(treeId, treeNode) {
var spaceWidth = Global.treeSpaceWide; var spaceWidth = Global.treeSpaceWide;
var switchObj = $("#" + treeNode.tId + "_switch"), var switchObj = $("#" + treeNode.tId + "_switch"),
@ -185,8 +186,8 @@ define(function(require, exports) {
var title = LNG.name+':'+treeNode.name+"\n"+LNG.size+':'+treeNode.size_friendly+"\n" var title = LNG.name+':'+treeNode.name+"\n"+LNG.size+':'+treeNode.size_friendly+"\n"
+LNG.modify_time+':'+treeNode.mtime; +LNG.modify_time+':'+treeNode.mtime;
if (treeNode.type == 'folder') { if (treeNode.type != 'file') {
title = LNG.name+':'+treeNode.name+"\n"+LNG.modify_time+':'+treeNode.mtime; title = treeNode.name;
} }
switchObj.parent().addClass(selector).attr('title',title); switchObj.parent().addClass(selector).attr('title',title);
} }
@ -195,8 +196,15 @@ define(function(require, exports) {
onClick: function(event,treeId,treeNode){ onClick: function(event,treeId,treeNode){
var zTree = $.fn.zTree.getZTreeObj("folderList"); var zTree = $.fn.zTree.getZTreeObj("folderList");
zTree.selectNode(treeNode); zTree.selectNode(treeNode);
zTree.expandNode(treeNode);
if(treeNode.type=='folder'&& Config.pageApp=='editor') return; if(treeNode.type=='folder' && Config.pageApp=='editor') return;
if (treeNode.level == 0) {
if (Config.pageApp=='explorer' && treeNode.ext != '__fav__'){
ui.path.list(treeNode.this_path+'/');//更新文件列表
}
return false;
}
if (Config.pageApp=='editor'){ if (Config.pageApp=='editor'){
ui.tree.openEditor();//编辑器优先打开文件 ui.tree.openEditor();//编辑器优先打开文件
}else if(Config.pageApp=='explorer'){ }else if(Config.pageApp=='explorer'){
@ -207,18 +215,6 @@ define(function(require, exports) {
var zTree = $.fn.zTree.getZTreeObj("folderList"); var zTree = $.fn.zTree.getZTreeObj("folderList");
zTree.selectNode(treeNode); zTree.selectNode(treeNode);
}, },
beforeClick: function(treeId, treeNode) {
if (treeNode.level == 0 ) {
var zTree = $.fn.zTree.getZTreeObj("folderList");
zTree.selectNode(treeNode);
zTree.expandNode(treeNode);
if (treeNode.ext == '__root__' && Config.pageApp=='explorer') {
ui.path.list(treeNode.this_path+'/');//更新文件列表
}
return false;
}
return true;
},
beforeAsync:function(treeId, treeNode){ beforeAsync:function(treeId, treeNode){
treeNode.ajax_name= urlEncode(treeNode.name); treeNode.ajax_name= urlEncode(treeNode.name);
treeNode.ajax_path= urlEncode(treeNode.path); treeNode.ajax_path= urlEncode(treeNode.path);
@ -249,6 +245,7 @@ define(function(require, exports) {
successCallback = function(){ successCallback = function(){
var sel = zTree.getNodesByParam('name',treeNode.name,parent)[0]; var sel = zTree.getNodesByParam('name',treeNode.name,parent)[0];
zTree.selectNode(sel); zTree.selectNode(sel);
f5_refresh();
} }
}); });
}else{//新建文件 }else{//新建文件
@ -258,14 +255,21 @@ define(function(require, exports) {
successCallback = function(){ successCallback = function(){
var sel = zTree.getNodesByParam('name',treeNode.name,parent)[0]; var sel = zTree.getNodesByParam('name',treeNode.name,parent)[0];
zTree.selectNode(sel); zTree.selectNode(sel);
f5_refresh();
} }
}); });
} }
}else{//重命名 }else{//重命名
var from = treeNode.path + treeNode.beforeName; var from = treeNode.path + treeNode.beforeName;
var to = treeNode.path + treeNode.name; var to = treeNode.path + treeNode.name;
pathOperate.rname(from,to,treeNode.name,function(){ pathOperate.rname(from,to,function(data){
if (!data.code) return;
refresh(parent); refresh(parent);
successCallback = function(){
var sel = zTree.getNodesByParam('name',treeNode.name,parent)[0];
zTree.selectNode(sel);
f5_refresh();
}
}); });
} }
} }
@ -294,9 +298,12 @@ define(function(require, exports) {
//配置请求数据 通用 //配置请求数据 通用
var _param = function(makeArray){ var _param = function(makeArray){
var zTree = $.fn.zTree.getZTreeObj("folderList"),path, var zTree = $.fn.zTree.getZTreeObj("folderList");
treeNode = zTree.getSelectedNodes()[0], if (!zTree) return;
path = '',type='';
var treeNode = zTree.getSelectedNodes()[0],
path = '',
type ='';
if (!treeNode) return {path:'',type:''}; if (!treeNode) return {path:'',type:''};
if (treeNode.father){ if (treeNode.father){
@ -318,15 +325,25 @@ define(function(require, exports) {
}else{ }else{
return {path:path,type:type,node:treeNode}; return {path:path,type:type,node:treeNode};
} }
} };
//通用刷新 不传参数则刷新选中节点 //通用刷新 不传参数则刷新选中节点
var refresh = function(treeNode){ var refresh = function(treeNode){
var zTree = $.fn.zTree.getZTreeObj("folderList"); var zTree = $.fn.zTree.getZTreeObj("folderList");
if (treeNode == undefined) treeNode=zTree.getSelectedNodes()[0]; if (treeNode == undefined) treeNode=zTree.getSelectedNodes()[0];
if (!treeNode.isParent){
treeNode = treeNode.getParentNode();
}
zTree.reAsyncChildNodes(treeNode, "refresh"); zTree.reAsyncChildNodes(treeNode, "refresh");
} };
var f5_refresh = function(){//树目录变化后,对应刷新文件目录
if (Config.pageApp == 'explorer') {
ui.f5();
}
};
//对外接口 //对外接口
return { return {
pathOpen:pathOpen, pathOpen:pathOpen,
init:init, init:init,
refresh:refresh, refresh:refresh,
@ -358,6 +375,7 @@ define(function(require, exports) {
var param = _param(); var param = _param();
if (!param.node.isParent) param.node = param.node.getParentNode(); if (!param.node.isParent) param.node = param.node.getParentNode();
pathOperate.past(param.path,function(){ pathOperate.past(param.path,function(){
f5_refresh();
refresh(param.node); refresh(param.node);
}); });
}, },
@ -369,16 +387,40 @@ define(function(require, exports) {
title:LNG.tips,content: LNG.remove_not,ok:true}); title:LNG.tips,content: LNG.remove_not,ok:true});
}else{ }else{
pathOperate.remove(param,function(){ pathOperate.remove(param,function(){
f5_refresh();
refresh(parent); refresh(parent);
}); });
} }
}, },
checkIfChange:function(explorer_path){
if (isUpdateRefresh) return;
isUpdateRefresh = true;
var zTree = $.fn.zTree.getZTreeObj("folderList");
if (!zTree) return;
zTree.getNodesByFilter(function(treeNode){
var path;
if (treeNode.this_path){
path = treeNode.this_path;
}else if (treeNode.path != ''){
path = treeNode.path+treeNode.name;
}
if (path == explorer_path ||
path+'/'==explorer_path) {
refresh(treeNode);
return true;
}
return false;
},true);
setTimeout(function(){
isUpdateRefresh = false;
},1000);
},
explorer:function(){//管理文档 explorer:function(){//管理文档
var path = _param().path; var path = _param().path;
if (!path) path = G.this_path; if (!path) path = G.this_path;
core.explorer(path); core.explorer(path);
}, },
fileBox:function(type){//管理文档 fileBox:function(type){//管理文档
if (type = 'save_file') {};//没有则自动创建 if (type = 'save_file') {};//没有则自动创建
if (type = 'save_folder') {}; if (type = 'save_folder') {};

View File

@ -213,6 +213,7 @@
url:'index.php?explorer/pathList&path='+G.this_path, url:'index.php?explorer/pathList&path='+G.this_path,
dataType:'json', dataType:'json',
//async:false,//同步阻塞.阻塞其他线程,等待执行完成。//解决重命名后设置选中 //async:false,//同步阻塞.阻塞其他线程,等待执行完成。//解决重命名后设置选中
error:core.ajaxError,
success:function(data){ success:function(data){
if (!data.code) { if (!data.code) {
core.tips.tips(data); core.tips.tips(data);
@ -224,9 +225,6 @@
if (typeof(callback) == 'function'){ if (typeof(callback) == 'function'){
callback(data); callback(data);
} }
},
error:function(data){
core.tips.tips(LNG.system_error,false);
} }
}); });
} }

View File

@ -259,9 +259,7 @@ define(function(require, exports) {
beforeSend: function(){ beforeSend: function(){
Tips.loading(LNG.sending); Tips.loading(LNG.sending);
}, },
error:function(data) { error:core.ajaxError,
Tips.close(LNG.system_error,false);
},
success:function(data){ success:function(data){
Tips.close(data); Tips.close(data);
if (!data.code) return; if (!data.code) return;

View File

@ -264,6 +264,7 @@ define(function(require, exports) {
core.tips.tips(LNG.path_exists,'warning'); core.tips.tips(LNG.path_exists,'warning');
}else{ }else{
pathOperate.newFile(G.this_path+filename,function(){ pathOperate.newFile(G.this_path+filename,function(){
ui.tree.checkIfChange(G.this_path);
ui.f5_callback(function() { ui.f5_callback(function() {
_setSelectByFilename(filename); _setSelectByFilename(filename);
}); });
@ -280,6 +281,7 @@ define(function(require, exports) {
_newFile(newname_ext); _newFile(newname_ext);
}else{ }else{
pathOperate.newFile(G.this_path+filename,function(){ pathOperate.newFile(G.this_path+filename,function(){
ui.tree.checkIfChange(G.this_path);
ui.f5_callback(function() { ui.f5_callback(function() {
_setSelectByFilename(filename); _setSelectByFilename(filename);
}); });
@ -318,6 +320,7 @@ define(function(require, exports) {
core.tips.tips(LNG.path_exists,'warning'); core.tips.tips(LNG.path_exists,'warning');
}else{ }else{
pathOperate.newFolder(G.this_path+filename,function(){ pathOperate.newFolder(G.this_path+filename,function(){
ui.tree.checkIfChange(G.this_path);
ui.f5_callback(function() { ui.f5_callback(function() {
_setSelectByFilename(filename); _setSelectByFilename(filename);
}); });
@ -333,6 +336,7 @@ define(function(require, exports) {
_newFolder(); _newFolder();
}else{ }else{
pathOperate.newFolder(G.this_path+filename,function(){ pathOperate.newFolder(G.this_path+filename,function(){
ui.tree.checkIfChange(G.this_path);
ui.f5_callback(function() { ui.f5_callback(function() {
_setSelectByFilename(filename); _setSelectByFilename(filename);
}); });
@ -381,6 +385,7 @@ define(function(require, exports) {
path =urlEncode(G.this_path+selectid); path =urlEncode(G.this_path+selectid);
rname_to=urlEncode(G.this_path+rname_to); rname_to=urlEncode(G.this_path+rname_to);
pathOperate.rname(path,rname_to,function(){ pathOperate.rname(path,rname_to,function(){
ui.tree.checkIfChange(G.this_path);
ui.f5_callback(function() { ui.f5_callback(function() {
_setSelectByFilename(select_name); _setSelectByFilename(select_name);
}); });
@ -403,6 +408,7 @@ define(function(require, exports) {
path =urlEncode(G.this_path+selectid); path =urlEncode(G.this_path+selectid);
rname_to=urlEncode(G.this_path+rname_to); rname_to=urlEncode(G.this_path+rname_to);
pathOperate.rname(path,rname_to,function(){ pathOperate.rname(path,rname_to,function(){
ui.tree.checkIfChange(G.this_path);
ui.f5_callback(function() { ui.f5_callback(function() {
_setSelectByFilename(select_name); _setSelectByFilename(select_name);
}); });
@ -413,6 +419,10 @@ define(function(require, exports) {
} }
}); });
}; };
var refreshCallback=function(){//当前目录文件变化,刷新目录
ui.f5();
ui.tree.checkIfChange(G.this_path);
};
return { return {
//app //app
appEdit:function(create){ appEdit:function(create){
@ -469,16 +479,17 @@ define(function(require, exports) {
pathOperate:pathOperate, pathOperate:pathOperate,
search :function(){core.search('',_param().path);}, search :function(){core.search('',_param().path);},
fav :function(){pathOperate.fav(_param().path);}, fav :function(){pathOperate.fav(_param().path);},
remove :function(){pathOperate.remove(_param(true),ui.f5);fileLight.clear();}, remove :function(){pathOperate.remove(_param(true),refreshCallback);fileLight.clear();},
copy :function(){pathOperate.copy(_param(true));}, copy :function(){pathOperate.copy(_param(true));},
cute :function(){pathOperate.cute(_param(true),ui.f5);}, cute :function(){pathOperate.cute(_param(true),ui.f5);},
zip :function(){pathOperate.zip(_param(true),ui.f5);}, zip :function(){pathOperate.zip(_param(true),refreshCallback);},
unZip :function(){pathOperate.unZip(_param().path,ui.f5);}, unZip :function(){pathOperate.unZip(_param().path,ui.f5);},
cuteDrag:function(dragTo){pathOperate.cuteDrag(_param(true),dragTo,ui.f5);}, cuteDrag:function(dragTo){pathOperate.cuteDrag(_param(true),dragTo,refreshCallback);},
info:function(){pathOperate.info(_param(true));}, info:function(){pathOperate.info(_param(true));},
past:function(){ past:function(){
fileLight.clear(); fileLight.clear();
pathOperate.past(G.this_path,function(list){ pathOperate.past(G.this_path,function(list){
ui.tree.checkIfChange(G.this_path);
ui.f5_callback(function() { ui.f5_callback(function() {
_setSelectByFilename(list.data); _setSelectByFilename(list.data);
}); });

View File

@ -14,7 +14,7 @@ define(function(require, exports) {
//图片缩略图懒加载 桌面不做处理 //图片缩略图懒加载 桌面不做处理
$(".fileContiner .picture img").lazyload({ $(".fileContiner .picture img").lazyload({
effect : "fadeIn", //effect : "fadeIn",
//placeholder:G.static_path + 'images/loading_tree.gif', //placeholder:G.static_path + 'images/loading_tree.gif',
container: $(".bodymain") container: $(".bodymain")
}); });
@ -427,10 +427,10 @@ define(function(require, exports) {
callback(data); callback(data);
} }
}, },
error:function(data){ error:function(XMLHttpRequest, textStatus, errorThrown){
core.tips.tips(LNG.system_error,false);
$('.tools-left .msg').fadeOut(100); $('.tools-left .msg').fadeOut(100);
$(Config.FileBoxSelector).html(''); $(Config.FileBoxSelector).html('');
core.ajaxError(XMLHttpRequest, textStatus, errorThrown);
} }
}); });
} }
@ -643,16 +643,17 @@ define(function(require, exports) {
//自适应宽度 //自适应宽度
set_width:function(){ set_width:function(){
$(".yarnball").stop(true,true); $(".yarnball").stop(true,true);
var box_width = $('#yarnball').innerWidth()-3; var box_width = $('#yarnball').innerWidth();
var need_width = 0; var need_width = 0;
$('#yarnball li a').each(function(index){ $('#yarnball li a').each(function(index){
need_width += $(this).outerWidth()+ parseInt($(this).css('margin-left')); need_width += $(this).outerWidth()+ parseInt($(this).css('margin-left'))+5;
}); });
var m_width = (box_width-30) - need_width;
if(m_width<0){ var m_width = box_width - need_width;
if(m_width<=0){
$(".yarnball") $(".yarnball")
.css('width',box_width - m_width +'px') .css('width',need_width +'px')
.css('left', m_width+'px'); .css('left',m_width+'px');
}else{ }else{
$(".yarnball").css({'left':'3px','width':box_width +'px'}); $(".yarnball").css({'left':'3px','width':box_width +'px'});
} }

View File

@ -113,6 +113,11 @@ define(function(require, exports) {
tips(LNG.not_null,'error'); tips(LNG.not_null,'error');
return false; return false;
} }
if (escape(role).indexOf("%u")>=0){
tips('名称不能为中文!','warning');
return false;
}
$('.group_editor .tag.this').each(function(){ $('.group_editor .tag.this').each(function(){
var data = $(this).attr('data-role').split(';'); var data = $(this).attr('data-role').split(';');
for (var i = 0; i < data.length; i++) { for (var i = 0; i < data.length; i++) {

View File

@ -103,6 +103,11 @@ define(function(require, exports) {
tips(LNG.not_null,'warning'); tips(LNG.not_null,'warning');
return false; return false;
} }
if (escape(name).indexOf("%u")>=0){
tips('名称不能为中文!','warning');
return false;
}
$.ajax({ $.ajax({
url:api+'add&name='+name+'&password='+password+'&role='+role, url:api+'add&name='+name+'&password='+password+'&role='+role,
dataType:'json', dataType:'json',
@ -149,6 +154,10 @@ define(function(require, exports) {
tips(LNG.not_null,'error'); tips(LNG.not_null,'error');
return false; return false;
} }
if (escape(name_to).indexOf("%u")>=0){
tips('名称不能为中文!','warning');
return false;
}
var password = ''; var password = '';
if (password_to !='') password = '&password_to'+password_to; if (password_to !='') password = '&password_to'+password_to;

View File

@ -83,6 +83,11 @@ var path_info = "<div class='pathinfo'>\
<div class='content'>{{mtime}}</div>\ <div class='content'>{{mtime}}</div>\
<div style='clear:both'></div>\ <div style='clear:both'></div>\
</div>\ </div>\
<div class='p'>\
<div class='title'>{{LNG.last_time}}</div>\
<div class='content'>{{atime}}</div>\
<div style='clear:both'></div>\
</div>\
<div class='line'></div>\ <div class='line'></div>\
<div class='p'>\ <div class='p'>\
<div class='title'>{{LNG.permission}}:</div>\ <div class='title'>{{LNG.permission}}:</div>\

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -160,6 +160,12 @@ artDialog.fn = artDialog.prototype = {
config.init && config.init.call(that, window); config.init && config.init.call(that, window);
_titleBarHeight = DOM.title.css('height'); _titleBarHeight = DOM.title.css('height');
_titleBarHeight = _titleBarHeight.replace('px',''); _titleBarHeight = _titleBarHeight.replace('px','');
DOM.wrap
.css({opacity:0.6,top:'-='+DOM.wrap.height()*0.02})
.animate(
{opacity:1,top:'+='+DOM.wrap.height()*0.02},
{easing: 'swing',duration:200});
return that; return that;
}, },
@ -528,53 +534,53 @@ artDialog.fn = artDialog.prototype = {
!arguments[0] && this._lockMaskWrap && this._lockMaskWrap.hide(); !arguments[0] && this._lockMaskWrap && this._lockMaskWrap.hide();
return this; return this;
}, },
/** 关闭对话框 */ /** 关闭对话框 */
close: function () { close: function () {
if (this.closed) return this; if (this.closed) return this;
var that = this, var that = this,
DOM = that.DOM, DOM = that.DOM,
wrap = DOM.wrap, wrap = DOM.wrap,
list = artDialog.list, list = artDialog.list,
fn = that.config.close, fn = that.config.close,
follow = that.config.follow; follow = that.config.follow;
that.time(); that.time();
if (typeof fn === 'function' && fn.call(that, window) === false) { if (typeof fn === 'function' && fn.call(that, window) === false) {
return that; return that;
}; };
that.unlock(); that.unlock();
// 置空内容
that._elemBack && that._elemBack();
wrap[0].className = wrap[0].style.cssText = '';
DOM.title.html('');
DOM.content.html('');
DOM.buttons.html('');
if (artDialog.focus === that) artDialog.focus = null; wrap.animate({opacity:0,top:'-='+wrap.height() * 0.03},
if (follow) follow.removeAttribute(_expando + 'follow'); {easing:'swing',duration:250,complete:function(){
// 置空内容
//if (that.config.resize) that._elemBack && that._elemBack();
if (that.config.title !== false){ wrap[0].className = wrap[0].style.cssText = '';
dialogList.close(that.config.id); DOM.title.html('');
} DOM.content.html('');
DOM.buttons.html('');
delete list[that.config.id]; if (artDialog.focus === that) artDialog.focus = null;
that._removeEvent(); if (follow) follow.removeAttribute(_expando + 'follow');
that.hide(true)._setAbsolute();
//if (that.config.resize)
// 清空除this.DOM之外临时对象恢复到初始状态以便使用单例模式 if (that.config.title !== false){
for (var i in that) { dialogList.close(that.config.id);
if (that.hasOwnProperty(i) && i !== 'DOM') delete that[i]; }
};
delete list[that.config.id];
// 移除HTMLElement或重用 that._removeEvent();
_box ? wrap.remove() : _box = that; that.hide(true)._setAbsolute();
this.resetIndex();
return that; // 清空除this.DOM之外临时对象恢复到初始状态以便使用单例模式
for (var i in that) {
if (that.hasOwnProperty(i) && i !== 'DOM') delete that[i];
};
// 移除HTMLElement或重用
_box ? wrap.remove() : _box = that;
that.resetIndex();
return that;
}});
}, },
/** /**
@ -950,7 +956,7 @@ _$document.bind('keydown', function (event) {
keyCode = event.keyCode; keyCode = event.keyCode;
if (!api || !api.config.esc || rinput.test(nodeName) || api.config.resize || api.config.simple) return; if (!api || !api.config.esc || rinput.test(nodeName) || api.config.resize || api.config.simple) return;
keyCode === 27 && api._click(api.config.cancelVal); keyCode === 27 && api._click(api.config.cancelVal);
}); });

View File

@ -161,8 +161,8 @@ var tips = function(msg,code){
Tips.tips(msg,code); Tips.tips(msg,code);
} }
var Tips = (function(){ var Tips = (function(){
var in_time = 600; var in_time = 500;
var delay = 1200; var delay = 500;
var opacity = 0.7; var opacity = 0.7;
var _init = function(msg,code){ var _init = function(msg,code){
var tipsIDname = "messageTips"; var tipsIDname = "messageTips";

View File

@ -107,6 +107,8 @@ http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
static_path : "<?php echo STATIC_PATH;?>", static_path : "<?php echo STATIC_PATH;?>",
public_path : "<?php echo PUBLIC_PATH;?>", public_path : "<?php echo PUBLIC_PATH;?>",
basic_path : "<?php echo BASIC_PATH;?>", basic_path : "<?php echo BASIC_PATH;?>",
version : "<?php echo KOD_VERSION;?>",
app_host : "<?php echo APPHOST;?>",
myhome : "<?php echo MYHOME;?>",//当前绝对路径 myhome : "<?php echo MYHOME;?>",//当前绝对路径
frist_file : "<?php echo $_GET['filename'];?>", frist_file : "<?php echo $_GET['filename'];?>",
@ -119,4 +121,4 @@ http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
seajs.use("<?php echo STATIC_JS;?>/src/edit/main"); seajs.use("<?php echo STATIC_JS;?>/src/edit/main");
</script> </script>
</body> </body>
</html> </html>

View File

@ -176,4 +176,4 @@
seajs.use("<?php echo STATIC_JS;?>/src/explorer/main"); seajs.use("<?php echo STATIC_JS;?>/src/explorer/main");
</script> </script>
</body> </body>
</html> </html>

View File

@ -1,23 +0,0 @@
==== todolist ====
官网改版:历史版本;更新内容;
0.官网改版(英文版)github提交说明文档……
1.回收站
2.文件共享
3.通用文件保存控件(文件、文件夹)
4.编辑器新建文件保存;另存为文件
5.创建副本,ctrl+拖拽;创建副本
6.同名处理(拖拽、上传、上传文件夹、粘贴、解压、压缩)——覆盖、都保留、跳过(全部——当前)
7.远程下载——列表——进度。
8.选中后直接下载(文件文件夹混合,无需多一步压缩的操作)
9.加入task机制 长时间运行的建立task——可以中途中断task用户关联
搜索、压缩、解压、远程下载、上传(任务,可以指定中断)
time()/5=0 每5s检测文件是否存在不存在——终止任务
权限前端验证(上传等 上传格式前端限制)
目录权限监 pathList时输出时代入目录权限(is_writeable);前端检测 新建、上传、删除、压缩、剪切
环境检测 目录权限(data目录必须可写)、GD库检测、set_time_out()...
设置默认根目录(个人设置)pathList=tree_init
共享目录测试 共享目录(地址栏显示问题)
树目录 根目录 点击没反应
集群