file_manager.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409
  1. // http://www.JSON.org/json2.js
  2. // See http://www.JSON.org/js.html
  3. function delImg(filename)
  4. {
  5. if(confirm("确定要删除该图片吗?"))
  6. {
  7. location.href = (root_path+"?m=File&a=deleteImg&file="+filename);
  8. }
  9. }
  10. if (!this.JSON) {
  11. this.JSON = {};
  12. }
  13. (function () {
  14. function f(n) {
  15. return n < 10 ? '0' + n : n;
  16. }
  17. if (typeof Date.prototype.toJSON !== 'function') {
  18. Date.prototype.toJSON = function (key) {
  19. return isFinite(this.valueOf()) ?
  20. this.getUTCFullYear() + '-' +
  21. f(this.getUTCMonth() + 1) + '-' +
  22. f(this.getUTCDate()) + 'T' +
  23. f(this.getUTCHours()) + ':' +
  24. f(this.getUTCMinutes()) + ':' +
  25. f(this.getUTCSeconds()) + 'Z' : null;
  26. };
  27. String.prototype.toJSON =
  28. Number.prototype.toJSON =
  29. Boolean.prototype.toJSON = function (key) {
  30. return this.valueOf();
  31. };
  32. }
  33. var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
  34. escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
  35. gap,
  36. indent,
  37. meta = {
  38. '\b': '\\b',
  39. '\t': '\\t',
  40. '\n': '\\n',
  41. '\f': '\\f',
  42. '\r': '\\r',
  43. '"' : '\\"',
  44. '\\': '\\\\'
  45. },
  46. rep;
  47. function quote(string) {
  48. escapable.lastIndex = 0;
  49. return escapable.test(string) ?
  50. '"' + string.replace(escapable, function (a) {
  51. var c = meta[a];
  52. return typeof c === 'string' ? c :
  53. '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
  54. }) + '"' :
  55. '"' + string + '"';
  56. }
  57. function str(key, holder) {
  58. var i, // The loop counter.
  59. k, // The member key.
  60. v, // The member value.
  61. length,
  62. mind = gap,
  63. partial,
  64. value = holder[key];
  65. if (value && typeof value === 'object' &&
  66. typeof value.toJSON === 'function') {
  67. value = value.toJSON(key);
  68. }
  69. if (typeof rep === 'function') {
  70. value = rep.call(holder, key, value);
  71. }
  72. switch (typeof value) {
  73. case 'string':
  74. return quote(value);
  75. case 'number':
  76. return isFinite(value) ? String(value) : 'null';
  77. case 'boolean':
  78. case 'null':
  79. return String(value);
  80. case 'object':
  81. if (!value) {
  82. return 'null';
  83. }
  84. gap += indent;
  85. partial = [];
  86. if (Object.prototype.toString.apply(value) === '[object Array]') {
  87. length = value.length;
  88. for (i = 0; i < length; i += 1) {
  89. partial[i] = str(i, value) || 'null';
  90. }
  91. v = partial.length === 0 ? '[]' :
  92. gap ? '[\n' + gap +
  93. partial.join(',\n' + gap) + '\n' +
  94. mind + ']' :
  95. '[' + partial.join(',') + ']';
  96. gap = mind;
  97. return v;
  98. }
  99. if (rep && typeof rep === 'object') {
  100. length = rep.length;
  101. for (i = 0; i < length; i += 1) {
  102. k = rep[i];
  103. if (typeof k === 'string') {
  104. v = str(k, value);
  105. if (v) {
  106. partial.push(quote(k) + (gap ? ': ' : ':') + v);
  107. }
  108. }
  109. }
  110. } else {
  111. for (k in value) {
  112. if (Object.hasOwnProperty.call(value, k)) {
  113. v = str(k, value);
  114. if (v) {
  115. partial.push(quote(k) + (gap ? ': ' : ':') + v);
  116. }
  117. }
  118. }
  119. }
  120. v = partial.length === 0 ? '{}' :
  121. gap ? '{\n' + gap + partial.join(',\n' + gap) + '\n' +
  122. mind + '}' : '{' + partial.join(',') + '}';
  123. gap = mind;
  124. return v;
  125. }
  126. }
  127. if (typeof JSON.stringify !== 'function') {
  128. JSON.stringify = function (value, replacer, space) {
  129. var i;
  130. gap = '';
  131. indent = '';
  132. if (typeof space === 'number') {
  133. for (i = 0; i < space; i += 1) {
  134. indent += ' ';
  135. }
  136. } else if (typeof space === 'string') {
  137. indent = space;
  138. }
  139. rep = replacer;
  140. if (replacer && typeof replacer !== 'function' &&
  141. (typeof replacer !== 'object' ||
  142. typeof replacer.length !== 'number')) {
  143. throw new Error('JSON.stringify');
  144. }
  145. return str('', {'': value});
  146. };
  147. }
  148. if (typeof JSON.parse !== 'function') {
  149. JSON.parse = function (text, reviver) {
  150. var j;
  151. function walk(holder, key) {
  152. var k, v, value = holder[key];
  153. if (value && typeof value === 'object') {
  154. for (k in value) {
  155. if (Object.hasOwnProperty.call(value, k)) {
  156. v = walk(value, k);
  157. if (v !== undefined) {
  158. value[k] = v;
  159. } else {
  160. delete value[k];
  161. }
  162. }
  163. }
  164. }
  165. return reviver.call(holder, key, value);
  166. }
  167. cx.lastIndex = 0;
  168. if (cx.test(text)) {
  169. text = text.replace(cx, function (a) {
  170. return '\\u' +
  171. ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
  172. });
  173. }
  174. if (/^[\],:{}\s]*$/.
  175. test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@').
  176. replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']').
  177. replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
  178. j = eval('(' + text + ')');
  179. return typeof reviver === 'function' ?
  180. walk({'': j}, '') : j;
  181. }
  182. throw new SyntaxError('JSON.parse');
  183. };
  184. }
  185. }());
  186. // http://www.JSON.org/json2.js end
  187. var JSON_URL = './../../php/file_manager_json.php';
  188. var KE = parent.KE;
  189. location.href.match(/\?id=([\w-]+)/i);
  190. var id = RegExp.$1;
  191. KE.event.ready(function() {
  192. var moveupLink = KE.$('moveup', document);
  193. var viewType = KE.$('viewType', document);
  194. var orderType = KE.$('orderType', document);
  195. var listTable = KE.$('listTable', document);
  196. var viewTable = KE.$('viewTable', document);
  197. var listDiv = KE.$('listDiv', document);
  198. var viewDiv = KE.$('viewDiv', document);
  199. var changeType = function(type) {
  200. if (type == 'VIEW') {
  201. listDiv.style.display = 'none';
  202. viewDiv.style.display = '';
  203. } else {
  204. listDiv.style.display = '';
  205. viewDiv.style.display = 'none';
  206. }
  207. };
  208. var insertLink = function(url) {
  209. var stack = KE.g[id].dialogStack;
  210. if (stack.length > 1) {
  211. var parentDialog = stack[stack.length - 2];
  212. var dialogDoc = KE.util.getIframeDoc(parentDialog.iframe);
  213. KE.$('url', dialogDoc).value = url;
  214. var currentDialog = stack[stack.length - 1];
  215. currentDialog.hide();
  216. return true;
  217. } else {
  218. return false;
  219. }
  220. }
  221. var insertImage = function(url, title) {
  222. if (!insertLink(url)) {
  223. KE.util.insertHtml(id, '<img src="' + url + '" alt="' + title + '" border="0" />');
  224. }
  225. };
  226. var insertFile = function(url, title) {
  227. if (!insertLink(url)) {
  228. KE.util.insertHtml(id, '<a href="' + url + '" target="_blank">' + title + '</a>');
  229. }
  230. };
  231. var makeFileTitle = function (filename, filesize, datetime) {
  232. var title = filename + ' (' + Math.ceil(filesize / 1024) + 'KB, ' + datetime + ')';
  233. return title;
  234. };
  235. var bindTitle = function (el, data) {
  236. if (data.is_dir) {
  237. el.title = data.filename;
  238. } else {
  239. el.title = makeFileTitle(data.filename, data.filesize, data.datetime);
  240. }
  241. };
  242. var bindEvent = function (el, result, data, createFunc) {
  243. var fileUrl = result.current_url + data.filename;
  244. fileUrl = KE.format.getUrl(fileUrl, KE.g[id].urlType);
  245. if (data.is_dir) {
  246. el.onclick = (function (url, path, title) {
  247. return function () {
  248. reloadPage(path, orderType.value, createFunc);
  249. }
  250. })(fileUrl, escape(result.current_dir_path + data.filename + '/'), data.filename);
  251. } else if (data.is_photo) {
  252. el.onclick = (function (url, title) {
  253. return function () {
  254. insertImage(url, title);
  255. }
  256. })(fileUrl, data.filename);
  257. } else {
  258. el.onclick = (function (url, title) {
  259. return function () {
  260. insertFile(url, title);
  261. }
  262. })(fileUrl, data.filename);
  263. }
  264. };
  265. var createCommon = function(result, createFunc) {
  266. if (result.current_dir_path) {
  267. moveupLink.onclick = function () {
  268. reloadPage(result.moveup_dir_path, orderType.value, createFunc);
  269. };
  270. } else {
  271. moveupLink.onclick = null;
  272. }
  273. var onchangeFunc = function() {
  274. changeType(viewType.value);
  275. if (viewType.value == 'VIEW') reloadPage(result.current_dir_path, orderType.value, createView);
  276. else reloadPage(result.current_dir_path, orderType.value, createList);
  277. };
  278. viewType.onchange = onchangeFunc;
  279. orderType.onchange = onchangeFunc;
  280. };
  281. var createList = function(responseText) {
  282. listDiv.innerHTML = '';
  283. var result = JSON.parse(responseText);
  284. createCommon(result, createList);
  285. var table = KE.$$('table', document);
  286. table.className = 'file-list-table';
  287. table.cellPadding = 0;
  288. table.cellSpacing = 2;
  289. table.border = 0;
  290. listDiv.appendChild(table);
  291. var fileList = result.file_list;
  292. for (var i = 0, len = fileList.length; i < len; i++) {
  293. var data = fileList[i];
  294. var row = table.insertRow(i);
  295. row.onmouseover = function () { this.className = 'selected'; };
  296. row.onmouseout = function () { this.className = 'noselected'; };
  297. var cell0 = row.insertCell(0);
  298. cell0.className = 'name';
  299. var iconName = data.is_dir ? 'folder-16.gif' : 'file-16.gif';
  300. var img = KE.$$('img', document);
  301. img.src = './images/' + iconName;
  302. img.width = 16;
  303. img.height = 16;
  304. img.alt = data.filename;
  305. var fileUrl = result.current_url + data.filename;
  306. cell0.appendChild(img);
  307. cell0.appendChild(document.createTextNode(' ' + data.filename));
  308. if (!data.is_dir || data.has_file) {
  309. row.style.cursor = 'pointer';
  310. img.title = data.filename;
  311. cell0.title = data.filename;
  312. bindEvent(cell0, result, data, createList);
  313. } else {
  314. img.title = '空文件夹';
  315. cell0.title = '空文件夹';
  316. }
  317. var cell1 = row.insertCell(1);
  318. cell1.className = 'size';
  319. cell1.innerHTML = data.is_dir ? '-' : Math.ceil(data.filesize / 1024) + 'KB';
  320. var cell2 = row.insertCell(2);
  321. cell2.className = 'datetime';
  322. cell2.innerHTML = data.datetime;
  323. if(!data.is_dir)
  324. {
  325. var cell3 = row.insertCell(3);
  326. cell3.className = 'op';
  327. cell3.innerHTML = "<span style='cursor:pointer;' onclick=\"delImg('"+fileUrl+"');\">删除</span>";
  328. }
  329. }
  330. };
  331. var createView = function(responseText) {
  332. viewDiv.innerHTML = '';
  333. var result = JSON.parse(responseText);
  334. createCommon(result, createView);
  335. var fileList = result.file_list;
  336. for (var i = 0, len = fileList.length; i < len; i++) {
  337. var data = fileList[i];
  338. var div = KE.$$('div', document);
  339. div.className = 'file-view-area';
  340. viewDiv.appendChild(div);
  341. var tableObj = KE.util.createTable(document);
  342. var table = tableObj.table;
  343. table.className = 'photo noselected';
  344. table.onmouseover = function () { this.className = 'photo selected'; };
  345. table.onmouseout = function () { this.className = 'photo noselected'; };
  346. var cell = tableObj.cell;
  347. cell.valign = 'middle';
  348. cell.align = 'center';
  349. var fileUrl = result.current_url + data.filename;
  350. var iconUrl = data.is_dir ? './images/folder-64.gif' : (data.is_photo ? fileUrl : './images/file-64.gif');
  351. var img = KE.$$('img', document);
  352. img.src = iconUrl;
  353. img.width = data.is_dir ? 64 : 80;
  354. img.height = data.is_dir ? 64 : 80;
  355. img.alt = data.filename;
  356. if (!data.is_dir || data.has_file) {
  357. table.style.cursor = 'pointer';
  358. bindTitle(img, data);
  359. bindTitle(table, data);
  360. bindEvent(table, result, data, createView);
  361. } else {
  362. img.title = '空文件夹';
  363. table.title = '空文件夹';
  364. }
  365. cell.appendChild(img);
  366. div.appendChild(table);
  367. var titleDiv = KE.$$('div', document);
  368. titleDiv.className = 'name';
  369. titleDiv.title = data.filename;
  370. titleDiv.innerHTML = data.filename;
  371. div.appendChild(titleDiv);
  372. if(!data.is_dir)
  373. {
  374. var opDiv = KE.$$('div', document);
  375. opDiv.className = 'div';
  376. opDiv.title = "删除";
  377. opDiv.innerHTML = "<div style='cursor:pointer; text-align:center;' onclick=\"delImg('"+fileUrl+"');\">删除</div>";
  378. div.appendChild(opDiv);
  379. }
  380. }
  381. };
  382. var httpRequest = function (param, func) {
  383. KE.util.showLoadingPage(id);
  384. var req = window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
  385. var url = JSON_URL;
  386. url += param;
  387. url += (url.match(/\?/) ? "&" : "?") + (new Date()).getTime()
  388. req.open('GET', url, true);
  389. req.onreadystatechange = function () {
  390. if (req.readyState == 4) {
  391. if(req.status == 200) {
  392. func(req.responseText);
  393. KE.util.hideLoadingPage(id);
  394. }
  395. }
  396. };
  397. req.send(null);
  398. };
  399. var reloadPage = function (path, order, func) {
  400. httpRequest('?path=' + path + '&order=' + order, func);
  401. };
  402. changeType('VIEW');
  403. viewType.value = 'VIEW';
  404. reloadPage('', orderType.value, createView);
  405. }, window, document);