diff --git a/inc/imce.js.inc b/inc/imce.js.inc index fce9d72..6f8498f 100644 --- a/inc/imce.js.inc +++ b/inc/imce.js.inc @@ -11,6 +11,7 @@ function imce_js_navigate(&$imce) { return array( 'files' => theme('imce_file_list', array('imce_ref' => array('imce' => &$imce))), + 'files_obj' => $imce['files'], 'dirsize' => format_size($imce['dirsize']), 'subdirectories' => array_map('rawurlencode', $imce['subdirectories']), 'perm' => $imce['perm'] @@ -64,4 +65,4 @@ function imce_js_resize(&$imce) { function imce_process_fileop(&$imce) { drupal_get_form('imce_fileop_form', array('imce' => &$imce)); return array('added' => isset($imce['added']) ? $imce['added'] : NULL, 'removed' => isset($imce['removed']) ? $imce['removed'] : NULL, 'dirsize' => format_size($imce['dirsize'])); -} \ No newline at end of file +} diff --git a/inc/imce.page.inc b/inc/imce.page.inc index bcb00b2..3bfa39b 100644 --- a/inc/imce.page.inc +++ b/inc/imce.page.inc @@ -81,6 +81,10 @@ function imce_content($user, $scheme = NULL, $jsop = NULL) { //make necessary changes for js conversion $imce['dir'] = str_replace('%2F', '/', rawurlencode($imce['dir'])); + // copy files to settings + if (isset( $imce['files'] )) { + $imce['files_obj'] = $imce['files']; + } unset($imce['files'], $imce['name'], $imce['directories'], $imce['subdirectories'], $imce['filesize'], $imce['quota'], $imce['tuquota'], $imce['thumbnails'], $imce['uid'], $imce['usertab']); drupal_add_js($imce_ref, 'setting'); @@ -572,6 +576,7 @@ function imce_add_file($file, &$imce) { } $imce['files'][$file->filename] = array( 'name' => $file->filename, + 'url' => file_create_url( $file->uri ), 'size' => $file->filesize, 'width' => $file->width, 'height' => $file->height, @@ -996,6 +1001,7 @@ function imce_scan_directory($dirname, $imce) { $date = filemtime($path); $directory['files'][$file] = array( 'name' => $file, + 'url' => file_create_url( $path ), 'size' => $size, 'width' => $width, 'height' => $height, @@ -1114,4 +1120,4 @@ function imce_file_register($file) { if (!db_query("SELECT 1 FROM {file_usage} WHERE module = 'imce' AND fid = :fid", array(':fid' => $file->fid))->fetchField()) { file_usage_add($file, 'imce', 'file', $file->fid); } -} \ No newline at end of file +} diff --git a/js/imce.js b/js/imce.js index 480032a..1a66315 100644 --- a/js/imce.js +++ b/js/imce.js @@ -1,6 +1,6 @@ (function($) { //Global container. -window.imce = {tree: {}, findex: [], fids: {}, selected: {}, selcount: 0, ops: {}, cache: {}, urlId: {}, +window.imce = {tree: {}, findex: [], fids: {}, files_obj: {} , selected: {}, selcount: 0, ops: {}, cache: {}, urlId: {}, vars: {previewImages: 1, cache: 1}, hooks: {load: [], list: [], navigate: [], cache: []}, @@ -104,8 +104,19 @@ dirSubdirs: function(dir, subdirs) { } }, +//update files json cache +dirFiles:function(dir, files_obj) { + if (typeof files_obj == 'undefined') return; + imce.files_obj = files_obj; +}, + //process file list initiateList: function(cached) { + // load from initial config + if (imce.conf.files_obj) { + imce.files_obj = imce.conf.files_obj; + delete imce.conf.files_obj; + } var L = imce.hooks.list, dir = imce.conf.dir, token = {'%dir': dir == '.' ? $(imce.tree['.'].a).text() : imce.decode(dir)} imce.findex = [], imce.fids = {}, imce.selected = {}, imce.selcount = 0, imce.vars.lastfid = null; imce.tbody = imce.el('file-list').tBodies[0]; @@ -131,8 +142,9 @@ initiateList: function(cached) { //add a file to the list. (having properties name,size,formatted size,width,height,date,formatted date) fileAdd: function(file) { - var row, fid = file.name, i = imce.findex.length, attr = ['name', 'size', 'width', 'height', 'date']; + var row, fid = file.name, i = imce.findex.length, attr = ['name', 'url' , 'size', 'width', 'height', 'date']; if (!(row = imce.fids[fid])) { + imce.files_obj[fid]=file; row = imce.findex[i] = imce.fids[fid] = imce.tbody.insertRow(i); for (var i in attr) row.insertCell(i).className = attr[i]; } @@ -404,6 +416,7 @@ navUpdate: function(data, dir) { if (cached) data.files.id = 'file-list'; $(imce.FLW).html(data.files); imce.dirActivate(dir); + imce.dirFiles(dir, data.files_obj); imce.dirSubdirs(dir, data.subdirectories); $.extend(imce.conf.perm, data.perm); imce.refreshOps(); @@ -415,7 +428,7 @@ navUpdate: function(data, dir) { //set cache navCache: function (dir, newdir) { - var C = imce.cache[dir] = {'dir': dir, files: imce.el('file-list'), dirsize: imce.el('dir-size').innerHTML, perm: $.extend({}, imce.conf.perm)}; + var C = imce.cache[dir] = {'dir': dir, files: imce.el('file-list'), files_obj: imce.files_obj, dirsize: imce.el('dir-size').innerHTML, perm: $.extend({}, imce.conf.perm)}; C.files.id = 'cached-list-'+ dir; imce.FW.appendChild(C.files); imce.invoke('cache', C, newdir); @@ -654,8 +667,13 @@ serialNames: function () { //get file url. re-encode & and # for mod rewrite getURL: function (fid) { - var path = (imce.conf.dir == '.' ? '' : imce.conf.dir +'/') + fid; - return imce.conf.furl + (imce.conf.modfix ? path.replace(/%(23|26)/g, '%25$1') : path); + // load file from the object if exists + if (typeof imce.files_obj[fid] != 'undefined' && typeof imce.files_obj[fid].url != 'undefined') { + return imce.files_obj[fid].url; + } + // otherwise fallback to the old route + var path = (imce.conf.dir == '.' ? '' : imce.conf.dir +'/') + fid; + return imce.conf.furl + (imce.conf.modfix ? path.replace(/%(23|26)/g, '%25$1') : path); }, //el. by id @@ -802,4 +820,4 @@ updateUI: function() { //initiate $(document).ready(imce.initiate).ajaxError(imce.ajaxError); -})(jQuery); \ No newline at end of file +})(jQuery);