annotate sites/all/modules/imce/js/imce.js @ 9:830c812b520f

added smtp module
author root <root@paio.local>
date Mon, 28 Oct 2013 15:34:27 +0000
parents ff03f76ab3fe
children
rev   line source
danielebarchiesi@0 1
danielebarchiesi@0 2 (function($) {
danielebarchiesi@0 3 //Global container.
danielebarchiesi@0 4 window.imce = {tree: {}, findex: [], fids: {}, selected: {}, selcount: 0, ops: {}, cache: {}, urlId: {},
danielebarchiesi@0 5 vars: {previewImages: 1, cache: 1},
danielebarchiesi@0 6 hooks: {load: [], list: [], navigate: [], cache: []},
danielebarchiesi@0 7
danielebarchiesi@0 8 //initiate imce.
danielebarchiesi@0 9 initiate: function() {
danielebarchiesi@0 10 imce.conf = Drupal.settings.imce || {};
danielebarchiesi@0 11 if (imce.conf.error != false) return;
danielebarchiesi@0 12 imce.FLW = imce.el('file-list-wrapper'), imce.SBW = imce.el('sub-browse-wrapper');
danielebarchiesi@0 13 imce.NW = imce.el('navigation-wrapper'), imce.BW = imce.el('browse-wrapper');
danielebarchiesi@0 14 imce.PW = imce.el('preview-wrapper'), imce.FW = imce.el('forms-wrapper');
danielebarchiesi@0 15 imce.updateUI();
danielebarchiesi@0 16 imce.prepareMsgs();//process initial status messages
danielebarchiesi@0 17 imce.initiateTree();//build directory tree
danielebarchiesi@0 18 imce.hooks.list.unshift(imce.processRow);//set the default list-hook.
danielebarchiesi@0 19 imce.initiateList();//process file list
danielebarchiesi@0 20 imce.initiateOps();//prepare operation tabs
danielebarchiesi@0 21 imce.refreshOps();
danielebarchiesi@0 22 imce.invoke('load', window);//run functions set by external applications.
danielebarchiesi@0 23 },
danielebarchiesi@0 24
danielebarchiesi@0 25 //process navigation tree
danielebarchiesi@0 26 initiateTree: function() {
danielebarchiesi@0 27 $('#navigation-tree li').each(function(i) {
danielebarchiesi@0 28 var a = this.firstChild, txt = a.firstChild;
danielebarchiesi@0 29 txt && (txt.data = imce.decode(txt.data));
danielebarchiesi@0 30 var branch = imce.tree[a.title] = {'a': a, li: this, ul: this.lastChild.tagName == 'UL' ? this.lastChild : null};
danielebarchiesi@0 31 if (a.href) imce.dirClickable(branch);
danielebarchiesi@0 32 imce.dirCollapsible(branch);
danielebarchiesi@0 33 });
danielebarchiesi@0 34 },
danielebarchiesi@0 35
danielebarchiesi@0 36 //Add a dir to the tree under parent
danielebarchiesi@0 37 dirAdd: function(dir, parent, clickable) {
danielebarchiesi@0 38 if (imce.tree[dir]) return clickable ? imce.dirClickable(imce.tree[dir]) : imce.tree[dir];
danielebarchiesi@0 39 var parent = parent || imce.tree['.'];
danielebarchiesi@0 40 parent.ul = parent.ul ? parent.ul : parent.li.appendChild(imce.newEl('ul'));
danielebarchiesi@0 41 var branch = imce.dirCreate(dir, imce.decode(dir.substr(dir.lastIndexOf('/')+1)), clickable);
danielebarchiesi@0 42 parent.ul.appendChild(branch.li);
danielebarchiesi@0 43 return branch;
danielebarchiesi@0 44 },
danielebarchiesi@0 45
danielebarchiesi@0 46 //create list item for navigation tree
danielebarchiesi@0 47 dirCreate: function(dir, text, clickable) {
danielebarchiesi@0 48 if (imce.tree[dir]) return imce.tree[dir];
danielebarchiesi@0 49 var branch = imce.tree[dir] = {li: imce.newEl('li'), a: imce.newEl('a')};
danielebarchiesi@0 50 $(branch.a).addClass('folder').text(text).attr('title', dir).appendTo(branch.li);
danielebarchiesi@0 51 imce.dirCollapsible(branch);
danielebarchiesi@0 52 return clickable ? imce.dirClickable(branch) : branch;
danielebarchiesi@0 53 },
danielebarchiesi@0 54
danielebarchiesi@0 55 //change currently active directory
danielebarchiesi@0 56 dirActivate: function(dir) {
danielebarchiesi@0 57 if (dir != imce.conf.dir) {
danielebarchiesi@0 58 if (imce.tree[imce.conf.dir]){
danielebarchiesi@0 59 $(imce.tree[imce.conf.dir].a).removeClass('active');
danielebarchiesi@0 60 }
danielebarchiesi@0 61 $(imce.tree[dir].a).addClass('active');
danielebarchiesi@0 62 imce.conf.dir = dir;
danielebarchiesi@0 63 }
danielebarchiesi@0 64 return imce.tree[imce.conf.dir];
danielebarchiesi@0 65 },
danielebarchiesi@0 66
danielebarchiesi@0 67 //make a dir accessible
danielebarchiesi@0 68 dirClickable: function(branch) {
danielebarchiesi@0 69 if (branch.clkbl) return branch;
danielebarchiesi@0 70 $(branch.a).attr('href', '#').removeClass('disabled').click(function() {imce.navigate(this.title); return false;});
danielebarchiesi@0 71 branch.clkbl = true;
danielebarchiesi@0 72 return branch;
danielebarchiesi@0 73 },
danielebarchiesi@0 74
danielebarchiesi@0 75 //sub-directories expand-collapse ability
danielebarchiesi@0 76 dirCollapsible: function (branch) {
danielebarchiesi@0 77 if (branch.clpsbl) return branch;
danielebarchiesi@0 78 $(imce.newEl('span')).addClass('expander').html('&nbsp;').click(function() {
danielebarchiesi@0 79 if (branch.ul) {
danielebarchiesi@0 80 $(branch.ul).toggle();
danielebarchiesi@0 81 $(branch.li).toggleClass('expanded');
danielebarchiesi@0 82 $.browser.msie && $('#navigation-header').css('top', imce.NW.scrollTop);
danielebarchiesi@0 83 }
danielebarchiesi@0 84 else if (branch.clkbl){
danielebarchiesi@0 85 $(branch.a).click();
danielebarchiesi@0 86 }
danielebarchiesi@0 87 }).prependTo(branch.li);
danielebarchiesi@0 88 branch.clpsbl = true;
danielebarchiesi@0 89 return branch;
danielebarchiesi@0 90 },
danielebarchiesi@0 91
danielebarchiesi@0 92 //update navigation tree after getting subdirectories.
danielebarchiesi@0 93 dirSubdirs: function(dir, subdirs) {
danielebarchiesi@0 94 var branch = imce.tree[dir];
danielebarchiesi@0 95 if (subdirs && subdirs.length) {
danielebarchiesi@0 96 var prefix = dir == '.' ? '' : dir +'/';
danielebarchiesi@0 97 for (var i in subdirs) {//add subdirectories
danielebarchiesi@0 98 imce.dirAdd(prefix + subdirs[i], branch, true);
danielebarchiesi@0 99 }
danielebarchiesi@0 100 $(branch.li).removeClass('leaf').addClass('expanded');
danielebarchiesi@0 101 $(branch.ul).show();
danielebarchiesi@0 102 }
danielebarchiesi@0 103 else if (!branch.ul){//no subdirs->leaf
danielebarchiesi@0 104 $(branch.li).removeClass('expanded').addClass('leaf');
danielebarchiesi@0 105 }
danielebarchiesi@0 106 },
danielebarchiesi@0 107
danielebarchiesi@0 108 //process file list
danielebarchiesi@0 109 initiateList: function(cached) {
danielebarchiesi@0 110 var L = imce.hooks.list, dir = imce.conf.dir, token = {'%dir': dir == '.' ? $(imce.tree['.'].a).text() : imce.decode(dir)}
danielebarchiesi@0 111 imce.findex = [], imce.fids = {}, imce.selected = {}, imce.selcount = 0, imce.vars.lastfid = null;
danielebarchiesi@0 112 imce.tbody = imce.el('file-list').tBodies[0];
danielebarchiesi@0 113 if (imce.tbody.rows.length) {
danielebarchiesi@0 114 for (var row, i = 0; row = imce.tbody.rows[i]; i++) {
danielebarchiesi@0 115 var fid = row.id;
danielebarchiesi@0 116 imce.findex[i] = imce.fids[fid] = row;
danielebarchiesi@0 117 if (cached) {
danielebarchiesi@0 118 if (imce.hasC(row, 'selected')) {
danielebarchiesi@0 119 imce.selected[imce.vars.lastfid = fid] = row;
danielebarchiesi@0 120 imce.selcount++;
danielebarchiesi@0 121 }
danielebarchiesi@0 122 }
danielebarchiesi@0 123 else {
danielebarchiesi@0 124 for (var func, j = 0; func = L[j]; j++) func(row);//invoke list-hook
danielebarchiesi@0 125 }
danielebarchiesi@0 126 }
danielebarchiesi@0 127 }
danielebarchiesi@0 128 if (!imce.conf.perm.browse) {
danielebarchiesi@0 129 imce.setMessage(Drupal.t('File browsing is disabled in directory %dir.', token), 'error');
danielebarchiesi@0 130 }
danielebarchiesi@0 131 },
danielebarchiesi@0 132
danielebarchiesi@0 133 //add a file to the list. (having properties name,size,formatted size,width,height,date,formatted date)
danielebarchiesi@0 134 fileAdd: function(file) {
danielebarchiesi@0 135 var row, fid = file.name, i = imce.findex.length, attr = ['name', 'size', 'width', 'height', 'date'];
danielebarchiesi@0 136 if (!(row = imce.fids[fid])) {
danielebarchiesi@0 137 row = imce.findex[i] = imce.fids[fid] = imce.tbody.insertRow(i);
danielebarchiesi@0 138 for (var i in attr) row.insertCell(i).className = attr[i];
danielebarchiesi@0 139 }
danielebarchiesi@0 140 row.cells[0].innerHTML = row.id = fid;
danielebarchiesi@0 141 row.cells[1].innerHTML = file.fsize; row.cells[1].id = file.size;
danielebarchiesi@0 142 row.cells[2].innerHTML = file.width;
danielebarchiesi@0 143 row.cells[3].innerHTML = file.height;
danielebarchiesi@0 144 row.cells[4].innerHTML = file.fdate; row.cells[4].id = file.date;
danielebarchiesi@0 145 imce.invoke('list', row);
danielebarchiesi@0 146 if (imce.vars.prvfid == fid) imce.setPreview(fid);
danielebarchiesi@0 147 if (file.id) imce.urlId[imce.getURL(fid)] = file.id;
danielebarchiesi@0 148 },
danielebarchiesi@0 149
danielebarchiesi@0 150 //remove a file from the list
danielebarchiesi@0 151 fileRemove: function(fid) {
danielebarchiesi@0 152 if (!(row = imce.fids[fid])) return;
danielebarchiesi@0 153 imce.fileDeSelect(fid);
danielebarchiesi@0 154 imce.findex.splice(row.rowIndex, 1);
danielebarchiesi@0 155 $(row).remove();
danielebarchiesi@0 156 delete imce.fids[fid];
danielebarchiesi@0 157 if (imce.vars.prvfid == fid) imce.setPreview();
danielebarchiesi@0 158 },
danielebarchiesi@0 159
danielebarchiesi@0 160 //return a file object containing all properties.
danielebarchiesi@0 161 fileGet: function (fid) {
danielebarchiesi@0 162 var row = imce.fids[fid];
danielebarchiesi@0 163 var url = imce.getURL(fid);
danielebarchiesi@0 164 return row ? {
danielebarchiesi@0 165 name: imce.decode(fid),
danielebarchiesi@0 166 url: url,
danielebarchiesi@0 167 size: row.cells[1].innerHTML,
danielebarchiesi@0 168 bytes: row.cells[1].id * 1,
danielebarchiesi@0 169 width: row.cells[2].innerHTML * 1,
danielebarchiesi@0 170 height: row.cells[3].innerHTML * 1,
danielebarchiesi@0 171 date: row.cells[4].innerHTML,
danielebarchiesi@0 172 time: row.cells[4].id * 1,
danielebarchiesi@0 173 id: imce.urlId[url] || 0, //file id for newly uploaded files
danielebarchiesi@0 174 relpath: (imce.conf.dir == '.' ? '' : imce.conf.dir +'/') + fid //rawurlencoded path relative to file directory path.
danielebarchiesi@0 175 } : null;
danielebarchiesi@0 176 },
danielebarchiesi@0 177
danielebarchiesi@0 178 //simulate row click. selection-highlighting
danielebarchiesi@0 179 fileClick: function(row, ctrl, shft) {
danielebarchiesi@0 180 if (!row) return;
danielebarchiesi@0 181 var fid = typeof(row) == 'string' ? row : row.id;
danielebarchiesi@0 182 if (ctrl || fid == imce.vars.prvfid) {
danielebarchiesi@0 183 imce.fileToggleSelect(fid);
danielebarchiesi@0 184 }
danielebarchiesi@0 185 else if (shft) {
danielebarchiesi@0 186 var last = imce.lastFid();
danielebarchiesi@0 187 var start = last ? imce.fids[last].rowIndex : -1;
danielebarchiesi@0 188 var end = imce.fids[fid].rowIndex;
danielebarchiesi@0 189 var step = start > end ? -1 : 1;
danielebarchiesi@0 190 while (start != end) {
danielebarchiesi@0 191 start += step;
danielebarchiesi@0 192 imce.fileSelect(imce.findex[start].id);
danielebarchiesi@0 193 }
danielebarchiesi@0 194 }
danielebarchiesi@0 195 else {
danielebarchiesi@0 196 for (var fname in imce.selected) {
danielebarchiesi@0 197 imce.fileDeSelect(fname);
danielebarchiesi@0 198 }
danielebarchiesi@0 199 imce.fileSelect(fid);
danielebarchiesi@0 200 }
danielebarchiesi@0 201 //set preview
danielebarchiesi@0 202 imce.setPreview(imce.selcount == 1 ? imce.lastFid() : null);
danielebarchiesi@0 203 },
danielebarchiesi@0 204
danielebarchiesi@0 205 //file select/deselect functions
danielebarchiesi@0 206 fileSelect: function (fid) {
danielebarchiesi@0 207 if (imce.selected[fid] || !imce.fids[fid]) return;
danielebarchiesi@0 208 imce.selected[fid] = imce.fids[imce.vars.lastfid=fid];
danielebarchiesi@0 209 $(imce.selected[fid]).addClass('selected');
danielebarchiesi@0 210 imce.selcount++;
danielebarchiesi@0 211 },
danielebarchiesi@0 212 fileDeSelect: function (fid) {
danielebarchiesi@0 213 if (!imce.selected[fid] || !imce.fids[fid]) return;
danielebarchiesi@0 214 if (imce.vars.lastfid == fid) imce.vars.lastfid = null;
danielebarchiesi@0 215 $(imce.selected[fid]).removeClass('selected');
danielebarchiesi@0 216 delete imce.selected[fid];
danielebarchiesi@0 217 imce.selcount--;
danielebarchiesi@0 218 },
danielebarchiesi@0 219 fileToggleSelect: function (fid) {
danielebarchiesi@0 220 imce['file'+ (imce.selected[fid] ? 'De' : '') +'Select'](fid);
danielebarchiesi@0 221 },
danielebarchiesi@0 222
danielebarchiesi@0 223 //process file operation form and create operation tabs.
danielebarchiesi@0 224 initiateOps: function() {
danielebarchiesi@0 225 imce.setHtmlOps();
danielebarchiesi@0 226 imce.setUploadOp();//upload
danielebarchiesi@0 227 imce.setFileOps();//thumb, delete, resize
danielebarchiesi@0 228 },
danielebarchiesi@0 229
danielebarchiesi@0 230 //process existing html ops.
danielebarchiesi@0 231 setHtmlOps: function () {
danielebarchiesi@0 232 $(imce.el('ops-list')).children('li').each(function() {
danielebarchiesi@0 233 if (!this.firstChild) return $(this).remove();
danielebarchiesi@0 234 var name = this.id.substr(8);
danielebarchiesi@0 235 var Op = imce.ops[name] = {div: imce.el('op-content-'+ name), li: imce.el('op-item-'+ name)};
danielebarchiesi@0 236 Op.a = Op.li.firstChild;
danielebarchiesi@0 237 Op.title = Op.a.innerHTML;
danielebarchiesi@0 238 $(Op.a).click(function() {imce.opClick(name); return false;});
danielebarchiesi@0 239 });
danielebarchiesi@0 240 },
danielebarchiesi@0 241
danielebarchiesi@0 242 //convert upload form to an op.
danielebarchiesi@0 243 setUploadOp: function () {
danielebarchiesi@0 244 var form = imce.el('imce-upload-form');
danielebarchiesi@0 245 if (!form) return;
danielebarchiesi@0 246 $(form).ajaxForm(imce.uploadSettings()).find('fieldset').each(function() {//clean up fieldsets
danielebarchiesi@0 247 this.removeChild(this.firstChild);
danielebarchiesi@0 248 $(this).after(this.childNodes);
danielebarchiesi@0 249 }).remove();
danielebarchiesi@0 250 imce.opAdd({name: 'upload', title: Drupal.t('Upload'), content: form});//add op
danielebarchiesi@0 251 },
danielebarchiesi@0 252
danielebarchiesi@0 253 //convert fileop form submit buttons to ops.
danielebarchiesi@0 254 setFileOps: function () {
danielebarchiesi@0 255 var form = imce.el('imce-fileop-form');
danielebarchiesi@0 256 if (!form) return;
danielebarchiesi@0 257 $(form.elements.filenames).parent().remove();
danielebarchiesi@0 258 $(form).find('fieldset').each(function() {//remove fieldsets
danielebarchiesi@0 259 var $sbmt = $('input:submit', this);
danielebarchiesi@0 260 if (!$sbmt.size()) return;
danielebarchiesi@0 261 var Op = {name: $sbmt.attr('id').substr(5)};
danielebarchiesi@0 262 var func = function() {imce.fopSubmit(Op.name); return false;};
danielebarchiesi@0 263 $sbmt.click(func);
danielebarchiesi@0 264 Op.title = $(this).children('legend').remove().text() || $sbmt.val();
danielebarchiesi@0 265 Op.name == 'delete' ? (Op.func = func) : (Op.content = this.childNodes);
danielebarchiesi@0 266 imce.opAdd(Op);
danielebarchiesi@0 267 }).remove();
danielebarchiesi@0 268 imce.vars.opform = $(form).serialize();//serialize remaining parts.
danielebarchiesi@0 269 },
danielebarchiesi@0 270
danielebarchiesi@0 271 //refresh ops states. enable/disable
danielebarchiesi@0 272 refreshOps: function() {
danielebarchiesi@0 273 for (var p in imce.conf.perm) {
danielebarchiesi@0 274 if (imce.conf.perm[p]) imce.opEnable(p);
danielebarchiesi@0 275 else imce.opDisable(p);
danielebarchiesi@0 276 }
danielebarchiesi@0 277 },
danielebarchiesi@0 278
danielebarchiesi@0 279 //add a new file operation
danielebarchiesi@0 280 opAdd: function (op) {
danielebarchiesi@0 281 var oplist = imce.el('ops-list'), opcons = imce.el('op-contents');
danielebarchiesi@0 282 var name = op.name || ('op-'+ $(oplist).children('li').size());
danielebarchiesi@0 283 var title = op.title || 'Untitled';
danielebarchiesi@0 284 var Op = imce.ops[name] = {title: title};
danielebarchiesi@0 285 if (op.content) {
danielebarchiesi@0 286 Op.div = imce.newEl('div');
danielebarchiesi@0 287 $(Op.div).attr({id: 'op-content-'+ name, 'class': 'op-content'}).appendTo(opcons).append(op.content);
danielebarchiesi@0 288 }
danielebarchiesi@0 289 Op.a = imce.newEl('a');
danielebarchiesi@0 290 Op.li = imce.newEl('li');
danielebarchiesi@0 291 $(Op.a).attr({href: '#', name: name, title: title}).html('<span>' + title +'</span>').click(imce.opClickEvent);
danielebarchiesi@0 292 $(Op.li).attr('id', 'op-item-'+ name).append(Op.a).appendTo(oplist);
danielebarchiesi@0 293 Op.func = op.func || imce.opVoid;
danielebarchiesi@0 294 return Op;
danielebarchiesi@0 295 },
danielebarchiesi@0 296
danielebarchiesi@0 297 //click event for file operations
danielebarchiesi@0 298 opClickEvent: function(e) {
danielebarchiesi@0 299 imce.opClick(this.name);
danielebarchiesi@0 300 return false;
danielebarchiesi@0 301 },
danielebarchiesi@0 302
danielebarchiesi@0 303 //void operation function
danielebarchiesi@0 304 opVoid: function() {},
danielebarchiesi@0 305
danielebarchiesi@0 306 //perform op click
danielebarchiesi@0 307 opClick: function(name) {
danielebarchiesi@0 308 var Op = imce.ops[name], oldop = imce.vars.op;
danielebarchiesi@0 309 if (!Op || Op.disabled) {
danielebarchiesi@0 310 return imce.setMessage(Drupal.t('You can not perform this operation.'), 'error');
danielebarchiesi@0 311 }
danielebarchiesi@0 312 if (Op.div) {
danielebarchiesi@0 313 if (oldop) {
danielebarchiesi@0 314 var toggle = oldop == name;
danielebarchiesi@0 315 imce.opShrink(oldop, toggle ? 'fadeOut' : 'hide');
danielebarchiesi@0 316 if (toggle) return false;
danielebarchiesi@0 317 }
danielebarchiesi@0 318 var left = Op.li.offsetLeft;
danielebarchiesi@0 319 var $opcon = $('#op-contents').css({left: 0});
danielebarchiesi@0 320 $(Op.div).fadeIn('normal', function() {
danielebarchiesi@0 321 setTimeout(function() {
danielebarchiesi@0 322 if (imce.vars.op) {
danielebarchiesi@0 323 var $inputs = $('input', imce.ops[imce.vars.op].div);
danielebarchiesi@0 324 $inputs.eq(0).focus();
danielebarchiesi@0 325 //form inputs become invisible in IE. Solution is as stupid as the behavior.
danielebarchiesi@0 326 $('html').is('.ie') && $inputs.addClass('dummyie').removeClass('dummyie');
danielebarchiesi@0 327 }
danielebarchiesi@0 328 });
danielebarchiesi@0 329 });
danielebarchiesi@0 330 var diff = left + $opcon.width() - $('#imce-content').width();
danielebarchiesi@0 331 $opcon.css({left: diff > 0 ? left - diff - 1 : left});
danielebarchiesi@0 332 $(Op.li).addClass('active');
danielebarchiesi@0 333 $(imce.opCloseLink).fadeIn(300);
danielebarchiesi@0 334 imce.vars.op = name;
danielebarchiesi@0 335 }
danielebarchiesi@0 336 Op.func(true);
danielebarchiesi@0 337 return true;
danielebarchiesi@0 338 },
danielebarchiesi@0 339
danielebarchiesi@0 340 //enable a file operation
danielebarchiesi@0 341 opEnable: function(name) {
danielebarchiesi@0 342 var Op = imce.ops[name];
danielebarchiesi@0 343 if (Op && Op.disabled) {
danielebarchiesi@0 344 Op.disabled = false;
danielebarchiesi@0 345 $(Op.li).show();
danielebarchiesi@0 346 }
danielebarchiesi@0 347 },
danielebarchiesi@0 348
danielebarchiesi@0 349 //disable a file operation
danielebarchiesi@0 350 opDisable: function(name) {
danielebarchiesi@0 351 var Op = imce.ops[name];
danielebarchiesi@0 352 if (Op && !Op.disabled) {
danielebarchiesi@0 353 Op.div && imce.opShrink(name);
danielebarchiesi@0 354 $(Op.li).hide();
danielebarchiesi@0 355 Op.disabled = true;
danielebarchiesi@0 356 }
danielebarchiesi@0 357 },
danielebarchiesi@0 358
danielebarchiesi@0 359 //hide contents of a file operation
danielebarchiesi@0 360 opShrink: function(name, effect) {
danielebarchiesi@0 361 if (imce.vars.op != name) return;
danielebarchiesi@0 362 var Op = imce.ops[name];
danielebarchiesi@0 363 $(Op.div).stop(true, true)[effect || 'hide']();
danielebarchiesi@0 364 $(Op.li).removeClass('active');
danielebarchiesi@0 365 $(imce.opCloseLink).hide();
danielebarchiesi@0 366 Op.func(false);
danielebarchiesi@0 367 imce.vars.op = null;
danielebarchiesi@0 368 },
danielebarchiesi@0 369
danielebarchiesi@0 370 //navigate to dir
danielebarchiesi@0 371 navigate: function(dir) {
danielebarchiesi@0 372 if (imce.vars.navbusy || (dir == imce.conf.dir && !confirm(Drupal.t('Do you want to refresh the current directory?')))) return;
danielebarchiesi@0 373 var cache = imce.vars.cache && dir != imce.conf.dir;
danielebarchiesi@0 374 var set = imce.navSet(dir, cache);
danielebarchiesi@0 375 if (cache && imce.cache[dir]) {//load from the cache
danielebarchiesi@0 376 set.success({data: imce.cache[dir]});
danielebarchiesi@0 377 set.complete();
danielebarchiesi@0 378 }
danielebarchiesi@0 379 else $.ajax(set);//live load
danielebarchiesi@0 380 },
danielebarchiesi@0 381 //ajax navigation settings
danielebarchiesi@0 382 navSet: function (dir, cache) {
danielebarchiesi@0 383 $(imce.tree[dir].li).addClass('loading');
danielebarchiesi@0 384 imce.vars.navbusy = dir;
danielebarchiesi@0 385 return {url: imce.ajaxURL('navigate', dir),
danielebarchiesi@0 386 type: 'GET',
danielebarchiesi@0 387 dataType: 'json',
danielebarchiesi@0 388 success: function(response) {
danielebarchiesi@0 389 if (response.data && !response.data.error) {
danielebarchiesi@0 390 if (cache) imce.navCache(imce.conf.dir, dir);//cache the current dir
danielebarchiesi@0 391 imce.navUpdate(response.data, dir);
danielebarchiesi@0 392 }
danielebarchiesi@0 393 imce.processResponse(response);
danielebarchiesi@0 394 },
danielebarchiesi@0 395 complete: function () {
danielebarchiesi@0 396 $(imce.tree[dir].li).removeClass('loading');
danielebarchiesi@0 397 imce.vars.navbusy = null;
danielebarchiesi@0 398 }
danielebarchiesi@0 399 };
danielebarchiesi@0 400 },
danielebarchiesi@0 401
danielebarchiesi@0 402 //update directory using the given data
danielebarchiesi@0 403 navUpdate: function(data, dir) {
danielebarchiesi@0 404 var cached = data == imce.cache[dir], olddir = imce.conf.dir;
danielebarchiesi@0 405 if (cached) data.files.id = 'file-list';
danielebarchiesi@0 406 $(imce.FLW).html(data.files);
danielebarchiesi@0 407 imce.dirActivate(dir);
danielebarchiesi@0 408 imce.dirSubdirs(dir, data.subdirectories);
danielebarchiesi@0 409 $.extend(imce.conf.perm, data.perm);
danielebarchiesi@0 410 imce.refreshOps();
danielebarchiesi@0 411 imce.initiateList(cached);
danielebarchiesi@0 412 imce.setPreview(imce.selcount == 1 ? imce.lastFid() : null);
danielebarchiesi@0 413 imce.SBW.scrollTop = 0;
danielebarchiesi@0 414 imce.invoke('navigate', data, olddir, cached);
danielebarchiesi@0 415 },
danielebarchiesi@0 416
danielebarchiesi@0 417 //set cache
danielebarchiesi@0 418 navCache: function (dir, newdir) {
danielebarchiesi@0 419 var C = imce.cache[dir] = {'dir': dir, files: imce.el('file-list'), dirsize: imce.el('dir-size').innerHTML, perm: $.extend({}, imce.conf.perm)};
danielebarchiesi@0 420 C.files.id = 'cached-list-'+ dir;
danielebarchiesi@0 421 imce.FW.appendChild(C.files);
danielebarchiesi@0 422 imce.invoke('cache', C, newdir);
danielebarchiesi@0 423 },
danielebarchiesi@0 424
danielebarchiesi@0 425 //validate upload form
danielebarchiesi@0 426 uploadValidate: function (data, form, options) {
danielebarchiesi@0 427 var path = $('#edit-imce').val();
danielebarchiesi@0 428 if (!path) return false;
danielebarchiesi@0 429 if (imce.conf.extensions != '*') {
danielebarchiesi@0 430 var ext = path.substr(path.lastIndexOf('.') + 1);
danielebarchiesi@0 431 if ((' '+ imce.conf.extensions +' ').indexOf(' '+ ext.toLowerCase() +' ') == -1) {
danielebarchiesi@0 432 return imce.setMessage(Drupal.t('Only files with the following extensions are allowed: %files-allowed.', {'%files-allowed': imce.conf.extensions}), 'error');
danielebarchiesi@0 433 }
danielebarchiesi@0 434 }
danielebarchiesi@0 435 var sep = path.indexOf('/') == -1 ? '\\' : '/';
danielebarchiesi@0 436 options.url = imce.ajaxURL('upload');//make url contain current dir.
danielebarchiesi@0 437 imce.fopLoading('upload', true);
danielebarchiesi@0 438 return true;
danielebarchiesi@0 439 },
danielebarchiesi@0 440
danielebarchiesi@0 441 //settings for upload
danielebarchiesi@0 442 uploadSettings: function () {
danielebarchiesi@0 443 return {beforeSubmit: imce.uploadValidate, success: function (response) {imce.processResponse($.parseJSON(response));}, complete: function () {imce.fopLoading('upload', false);}, resetForm: true};
danielebarchiesi@0 444 },
danielebarchiesi@0 445
danielebarchiesi@0 446 //validate default ops(delete, thumb, resize)
danielebarchiesi@0 447 fopValidate: function(fop) {
danielebarchiesi@0 448 if (!imce.validateSelCount(1, imce.conf.filenum)) return false;
danielebarchiesi@0 449 switch (fop) {
danielebarchiesi@0 450 case 'delete':
danielebarchiesi@0 451 return confirm(Drupal.t('Delete selected files?'));
danielebarchiesi@0 452 case 'thumb':
danielebarchiesi@0 453 if (!$('input:checked', imce.ops['thumb'].div).size()) {
danielebarchiesi@0 454 return imce.setMessage(Drupal.t('Please select a thumbnail.'), 'error');
danielebarchiesi@0 455 }
danielebarchiesi@0 456 return imce.validateImage();
danielebarchiesi@0 457 case 'resize':
danielebarchiesi@0 458 var w = imce.el('edit-width').value, h = imce.el('edit-height').value;
danielebarchiesi@0 459 var maxDim = imce.conf.dimensions.split('x');
danielebarchiesi@0 460 var maxW = maxDim[0]*1, maxH = maxW ? maxDim[1]*1 : 0;
danielebarchiesi@0 461 if (!(/^[1-9][0-9]*$/).test(w) || !(/^[1-9][0-9]*$/).test(h) || (maxW && (maxW < w*1 || maxH < h*1))) {
danielebarchiesi@0 462 return imce.setMessage(Drupal.t('Please specify dimensions within the allowed range that is from 1x1 to @dimensions.', {'@dimensions': maxW ? imce.conf.dimensions : Drupal.t('unlimited')}), 'error');
danielebarchiesi@0 463 }
danielebarchiesi@0 464 return imce.validateImage();
danielebarchiesi@0 465 }
danielebarchiesi@0 466
danielebarchiesi@0 467 var func = fop +'OpValidate';
danielebarchiesi@0 468 if (imce[func]) return imce[func](fop);
danielebarchiesi@0 469 return true;
danielebarchiesi@0 470 },
danielebarchiesi@0 471
danielebarchiesi@0 472 //submit wrapper for default ops
danielebarchiesi@0 473 fopSubmit: function(fop) {
danielebarchiesi@0 474 switch (fop) {
danielebarchiesi@0 475 case 'thumb': case 'delete': case 'resize': return imce.commonSubmit(fop);
danielebarchiesi@0 476 }
danielebarchiesi@0 477 var func = fop +'OpSubmit';
danielebarchiesi@0 478 if (imce[func]) return imce[func](fop);
danielebarchiesi@0 479 },
danielebarchiesi@0 480
danielebarchiesi@0 481 //common submit function shared by default ops
danielebarchiesi@0 482 commonSubmit: function(fop) {
danielebarchiesi@0 483 if (!imce.fopValidate(fop)) return false;
danielebarchiesi@0 484 imce.fopLoading(fop, true);
danielebarchiesi@0 485 $.ajax(imce.fopSettings(fop));
danielebarchiesi@0 486 },
danielebarchiesi@0 487
danielebarchiesi@0 488 //settings for default file operations
danielebarchiesi@0 489 fopSettings: function (fop) {
danielebarchiesi@0 490 return {url: imce.ajaxURL(fop), type: 'POST', dataType: 'json', success: imce.processResponse, complete: function (response) {imce.fopLoading(fop, false);}, data: imce.vars.opform +'&filenames='+ imce.serialNames() +'&jsop='+ fop + (imce.ops[fop].div ? '&'+ $('input, select, textarea', imce.ops[fop].div).serialize() : '')};
danielebarchiesi@0 491 },
danielebarchiesi@0 492
danielebarchiesi@0 493 //toggle loading state
danielebarchiesi@0 494 fopLoading: function(fop, state) {
danielebarchiesi@0 495 var el = imce.el('edit-'+ fop), func = state ? 'addClass' : 'removeClass';
danielebarchiesi@0 496 if (el) {
danielebarchiesi@0 497 $(el)[func]('loading').attr('disabled', state);
danielebarchiesi@0 498 }
danielebarchiesi@0 499 else {
danielebarchiesi@0 500 $(imce.ops[fop].li)[func]('loading');
danielebarchiesi@0 501 imce.ops[fop].disabled = state;
danielebarchiesi@0 502 }
danielebarchiesi@0 503 },
danielebarchiesi@0 504
danielebarchiesi@0 505 //preview a file.
danielebarchiesi@0 506 setPreview: function (fid) {
danielebarchiesi@0 507 var row, html = '';
danielebarchiesi@0 508 imce.vars.prvfid = fid;
danielebarchiesi@0 509 if (fid && (row = imce.fids[fid])) {
danielebarchiesi@0 510 var width = row.cells[2].innerHTML * 1;
danielebarchiesi@0 511 html = imce.vars.previewImages && width ? imce.imgHtml(fid, width, row.cells[3].innerHTML) : imce.decodePlain(fid);
danielebarchiesi@0 512 html = '<a href="#" onclick="imce.send(\''+ fid +'\'); return false;" title="'+ (imce.vars.prvtitle||'') +'">'+ html +'</a>';
danielebarchiesi@0 513 }
danielebarchiesi@0 514 imce.el('file-preview').innerHTML = html;
danielebarchiesi@0 515 },
danielebarchiesi@0 516
danielebarchiesi@0 517 //default file send function. sends the file to the new window.
danielebarchiesi@0 518 send: function (fid) {
danielebarchiesi@0 519 fid && window.open(imce.getURL(fid));
danielebarchiesi@0 520 },
danielebarchiesi@0 521
danielebarchiesi@0 522 //add an operation for an external application to which the files are send.
danielebarchiesi@0 523 setSendTo: function (title, func) {
danielebarchiesi@0 524 imce.send = function (fid) { fid && func(imce.fileGet(fid), window);};
danielebarchiesi@0 525 var opFunc = function () {
danielebarchiesi@0 526 if (imce.selcount != 1) return imce.setMessage(Drupal.t('Please select a file.'), 'error');
danielebarchiesi@0 527 imce.send(imce.vars.prvfid);
danielebarchiesi@0 528 };
danielebarchiesi@0 529 imce.vars.prvtitle = title;
danielebarchiesi@0 530 return imce.opAdd({name: 'sendto', title: title, func: opFunc});
danielebarchiesi@0 531 },
danielebarchiesi@0 532
danielebarchiesi@0 533 //move initial page messages into log
danielebarchiesi@0 534 prepareMsgs: function () {
danielebarchiesi@0 535 var msgs;
danielebarchiesi@0 536 if (msgs = imce.el('imce-messages')) {
danielebarchiesi@0 537 $('>div', msgs).each(function (){
danielebarchiesi@0 538 var type = this.className.split(' ')[1];
danielebarchiesi@0 539 var li = $('>ul li', this);
danielebarchiesi@0 540 if (li.size()) li.each(function () {imce.setMessage(this.innerHTML, type);});
danielebarchiesi@0 541 else imce.setMessage(this.innerHTML, type);
danielebarchiesi@0 542 });
danielebarchiesi@0 543 $(msgs).remove();
danielebarchiesi@0 544 }
danielebarchiesi@0 545 },
danielebarchiesi@0 546
danielebarchiesi@0 547 //insert log message
danielebarchiesi@0 548 setMessage: function (msg, type) {
danielebarchiesi@0 549 var $box = $(imce.msgBox);
danielebarchiesi@0 550 var logs = imce.el('log-messages') || $(imce.newEl('div')).appendTo('#help-box-content').before('<h4>'+ Drupal.t('Log messages') +':</h4>').attr('id', 'log-messages')[0];
danielebarchiesi@0 551 var msg = '<div class="message '+ (type || 'status') +'">'+ msg +'</div>';
danielebarchiesi@0 552 $box.queue(function() {
danielebarchiesi@0 553 $box.css({opacity: 0, display: 'block'}).html(msg);
danielebarchiesi@0 554 $box.dequeue();
danielebarchiesi@0 555 });
danielebarchiesi@0 556 var q = $box.queue().length, t = imce.vars.msgT || 1000;
danielebarchiesi@0 557 q = q < 2 ? 1 : q < 3 ? 0.8 : q < 4 ? 0.7 : 0.4;//adjust speed with respect to queue length
danielebarchiesi@0 558 $box.fadeTo(600 * q, 1).fadeTo(t * q, 1).fadeOut(400 * q);
danielebarchiesi@0 559 $(logs).append(msg);
danielebarchiesi@0 560 return false;
danielebarchiesi@0 561 },
danielebarchiesi@0 562
danielebarchiesi@0 563 //invoke hooks
danielebarchiesi@0 564 invoke: function (hook) {
danielebarchiesi@0 565 var i, args, func, funcs;
danielebarchiesi@0 566 if ((funcs = imce.hooks[hook]) && funcs.length) {
danielebarchiesi@0 567 (args = $.makeArray(arguments)).shift();
danielebarchiesi@0 568 for (i = 0; func = funcs[i]; i++) func.apply(this, args);
danielebarchiesi@0 569 }
danielebarchiesi@0 570 },
danielebarchiesi@0 571
danielebarchiesi@0 572 //process response
danielebarchiesi@0 573 processResponse: function (response) {
danielebarchiesi@0 574 if (response.data) imce.resData(response.data);
danielebarchiesi@0 575 if (response.messages) imce.resMsgs(response.messages);
danielebarchiesi@0 576 },
danielebarchiesi@0 577
danielebarchiesi@0 578 //process response data
danielebarchiesi@0 579 resData: function (data) {
danielebarchiesi@0 580 var i, added, removed;
danielebarchiesi@0 581 if (added = data.added) {
danielebarchiesi@0 582 var cnt = imce.findex.length;
danielebarchiesi@0 583 for (i in added) {//add new files or update existing
danielebarchiesi@0 584 imce.fileAdd(added[i]);
danielebarchiesi@0 585 }
danielebarchiesi@0 586 if (added.length == 1) {//if it is a single file operation
danielebarchiesi@0 587 imce.highlight(added[0].name);//highlight
danielebarchiesi@0 588 }
danielebarchiesi@0 589 if (imce.findex.length != cnt) {//if new files added, scroll to bottom.
danielebarchiesi@0 590 $(imce.SBW).animate({scrollTop: imce.SBW.scrollHeight}).focus();
danielebarchiesi@0 591 }
danielebarchiesi@0 592 }
danielebarchiesi@0 593 if (removed = data.removed) for (i in removed) {
danielebarchiesi@0 594 imce.fileRemove(removed[i]);
danielebarchiesi@0 595 }
danielebarchiesi@0 596 imce.conf.dirsize = data.dirsize;
danielebarchiesi@0 597 imce.updateStat();
danielebarchiesi@0 598 },
danielebarchiesi@0 599
danielebarchiesi@0 600 //set response messages
danielebarchiesi@0 601 resMsgs: function (msgs) {
danielebarchiesi@0 602 for (var type in msgs) for (var i in msgs[type]) {
danielebarchiesi@0 603 imce.setMessage(msgs[type][i], type);
danielebarchiesi@0 604 }
danielebarchiesi@0 605 },
danielebarchiesi@0 606
danielebarchiesi@0 607 //return img markup
danielebarchiesi@0 608 imgHtml: function (fid, width, height) {
danielebarchiesi@0 609 return '<img src="'+ imce.getURL(fid) +'" width="'+ width +'" height="'+ height +'" alt="'+ imce.decodePlain(fid) +'">';
danielebarchiesi@0 610 },
danielebarchiesi@0 611
danielebarchiesi@0 612 //check if the file is an image
danielebarchiesi@0 613 isImage: function (fid) {
danielebarchiesi@0 614 return imce.fids[fid].cells[2].innerHTML * 1;
danielebarchiesi@0 615 },
danielebarchiesi@0 616
danielebarchiesi@0 617 //find the first non-image in the selection
danielebarchiesi@0 618 getNonImage: function (selected) {
danielebarchiesi@0 619 for (var fid in selected) {
danielebarchiesi@0 620 if (!imce.isImage(fid)) return fid;
danielebarchiesi@0 621 }
danielebarchiesi@0 622 return false;
danielebarchiesi@0 623 },
danielebarchiesi@0 624
danielebarchiesi@0 625 //validate current selection for images
danielebarchiesi@0 626 validateImage: function () {
danielebarchiesi@0 627 var nonImg = imce.getNonImage(imce.selected);
danielebarchiesi@0 628 return nonImg ? imce.setMessage(Drupal.t('%filename is not an image.', {'%filename': imce.decode(nonImg)}), 'error') : true;
danielebarchiesi@0 629 },
danielebarchiesi@0 630
danielebarchiesi@0 631 //validate number of selected files
danielebarchiesi@0 632 validateSelCount: function (Min, Max) {
danielebarchiesi@0 633 if (Min && imce.selcount < Min) {
danielebarchiesi@0 634 return imce.setMessage(Min == 1 ? Drupal.t('Please select a file.') : Drupal.t('You must select at least %num files.', {'%num': Min}), 'error');
danielebarchiesi@0 635 }
danielebarchiesi@0 636 if (Max && Max < imce.selcount) {
danielebarchiesi@0 637 return imce.setMessage(Drupal.t('You are not allowed to operate on more than %num files.', {'%num': Max}), 'error');
danielebarchiesi@0 638 }
danielebarchiesi@0 639 return true;
danielebarchiesi@0 640 },
danielebarchiesi@0 641
danielebarchiesi@0 642 //update file count and dir size
danielebarchiesi@0 643 updateStat: function () {
danielebarchiesi@0 644 imce.el('file-count').innerHTML = imce.findex.length;
danielebarchiesi@0 645 imce.el('dir-size').innerHTML = imce.conf.dirsize;
danielebarchiesi@0 646 },
danielebarchiesi@0 647
danielebarchiesi@0 648 //serialize selected files. return fids with a colon between them
danielebarchiesi@0 649 serialNames: function () {
danielebarchiesi@0 650 var str = '';
danielebarchiesi@0 651 for (var fid in imce.selected) {
danielebarchiesi@0 652 str += ':'+ fid;
danielebarchiesi@0 653 }
danielebarchiesi@0 654 return str.substr(1);
danielebarchiesi@0 655 },
danielebarchiesi@0 656
danielebarchiesi@0 657 //get file url. re-encode & and # for mod rewrite
danielebarchiesi@0 658 getURL: function (fid) {
danielebarchiesi@0 659 var path = (imce.conf.dir == '.' ? '' : imce.conf.dir +'/') + fid;
danielebarchiesi@0 660 return imce.conf.furl + (imce.conf.modfix ? path.replace(/%(23|26)/g, '%25$1') : path);
danielebarchiesi@0 661 },
danielebarchiesi@0 662
danielebarchiesi@0 663 //el. by id
danielebarchiesi@0 664 el: function (id) {
danielebarchiesi@0 665 return document.getElementById(id);
danielebarchiesi@0 666 },
danielebarchiesi@0 667
danielebarchiesi@0 668 //find the latest selected fid
danielebarchiesi@0 669 lastFid: function () {
danielebarchiesi@0 670 if (imce.vars.lastfid) return imce.vars.lastfid;
danielebarchiesi@0 671 for (var fid in imce.selected);
danielebarchiesi@0 672 return fid;
danielebarchiesi@0 673 },
danielebarchiesi@0 674
danielebarchiesi@0 675 //create ajax url
danielebarchiesi@0 676 ajaxURL: function (op, dir) {
danielebarchiesi@0 677 return imce.conf.url + (imce.conf.clean ? '?' :'&') +'jsop='+ op +'&dir='+ (dir||imce.conf.dir);
danielebarchiesi@0 678 },
danielebarchiesi@0 679
danielebarchiesi@0 680 //fast class check
danielebarchiesi@0 681 hasC: function (el, name) {
danielebarchiesi@0 682 return el.className && (' '+ el.className +' ').indexOf(' '+ name +' ') != -1;
danielebarchiesi@0 683 },
danielebarchiesi@0 684
danielebarchiesi@0 685 //highlight a single file
danielebarchiesi@0 686 highlight: function (fid) {
danielebarchiesi@0 687 if (imce.vars.prvfid) imce.fileClick(imce.vars.prvfid);
danielebarchiesi@0 688 imce.fileClick(fid);
danielebarchiesi@0 689 },
danielebarchiesi@0 690
danielebarchiesi@0 691 //process a row
danielebarchiesi@0 692 processRow: function (row) {
danielebarchiesi@0 693 row.cells[0].innerHTML = '<span>' + imce.decodePlain(row.id) + '</span>';
danielebarchiesi@0 694 row.onmousedown = function(e) {
danielebarchiesi@0 695 var e = e||window.event;
danielebarchiesi@0 696 imce.fileClick(this, e.ctrlKey, e.shiftKey);
danielebarchiesi@0 697 return !(e.ctrlKey || e.shiftKey);
danielebarchiesi@0 698 };
danielebarchiesi@0 699 row.ondblclick = function(e) {
danielebarchiesi@0 700 imce.send(this.id);
danielebarchiesi@0 701 return false;
danielebarchiesi@0 702 };
danielebarchiesi@0 703 },
danielebarchiesi@0 704
danielebarchiesi@0 705 //decode urls. uses unescape. can be overridden to use decodeURIComponent
danielebarchiesi@0 706 decode: function (str) {
danielebarchiesi@0 707 return unescape(str);
danielebarchiesi@0 708 },
danielebarchiesi@0 709
danielebarchiesi@0 710 //decode and convert to plain text
danielebarchiesi@0 711 decodePlain: function (str) {
danielebarchiesi@0 712 return Drupal.checkPlain(imce.decode(str));
danielebarchiesi@0 713 },
danielebarchiesi@0 714
danielebarchiesi@0 715 //global ajax error function
danielebarchiesi@0 716 ajaxError: function (e, response, settings, thrown) {
danielebarchiesi@0 717 imce.setMessage(Drupal.ajaxError(response, settings.url).replace(/\n/g, '<br />'), 'error');
danielebarchiesi@0 718 },
danielebarchiesi@0 719
danielebarchiesi@0 720 //convert button elements to standard input buttons
danielebarchiesi@0 721 convertButtons: function(form) {
danielebarchiesi@0 722 $('button:submit', form).each(function(){
danielebarchiesi@0 723 $(this).replaceWith('<input type="submit" value="'+ $(this).text() +'" name="'+ this.name +'" class="form-submit" id="'+ this.id +'" />');
danielebarchiesi@0 724 });
danielebarchiesi@0 725 },
danielebarchiesi@0 726
danielebarchiesi@0 727 //create element
danielebarchiesi@0 728 newEl: function(name) {
danielebarchiesi@0 729 return document.createElement(name);
danielebarchiesi@0 730 },
danielebarchiesi@0 731
danielebarchiesi@0 732 //scroll syncronization for section headers
danielebarchiesi@0 733 syncScroll: function(scrlEl, fixEl, bottom) {
danielebarchiesi@0 734 var $fixEl = $(fixEl);
danielebarchiesi@0 735 var prop = bottom ? 'bottom' : 'top';
danielebarchiesi@0 736 var factor = bottom ? -1 : 1;
danielebarchiesi@0 737 var syncScrl = function(el) {
danielebarchiesi@0 738 $fixEl.css(prop, factor * el.scrollTop);
danielebarchiesi@0 739 }
danielebarchiesi@0 740 $(scrlEl).scroll(function() {
danielebarchiesi@0 741 var el = this;
danielebarchiesi@0 742 syncScrl(el);
danielebarchiesi@0 743 setTimeout(function() {
danielebarchiesi@0 744 syncScrl(el);
danielebarchiesi@0 745 });
danielebarchiesi@0 746 });
danielebarchiesi@0 747 },
danielebarchiesi@0 748
danielebarchiesi@0 749 //get UI ready. provide backward compatibility.
danielebarchiesi@0 750 updateUI: function() {
danielebarchiesi@0 751 //file urls.
danielebarchiesi@0 752 var furl = imce.conf.furl, isabs = furl.indexOf('://') > -1;
danielebarchiesi@0 753 var absurls = imce.conf.absurls = imce.vars.absurls || imce.conf.absurls;
danielebarchiesi@0 754 var host = location.host;
danielebarchiesi@0 755 var baseurl = location.protocol + '//' + host;
danielebarchiesi@0 756 if (furl.charAt(furl.length - 1) != '/') {
danielebarchiesi@0 757 furl = imce.conf.furl = furl + '/';
danielebarchiesi@0 758 }
danielebarchiesi@0 759 imce.conf.modfix = imce.conf.clean && furl.indexOf(host + '/system/') > -1;
danielebarchiesi@0 760 if (absurls && !isabs) {
danielebarchiesi@0 761 imce.conf.furl = baseurl + furl;
danielebarchiesi@0 762 }
danielebarchiesi@0 763 else if (!absurls && isabs && furl.indexOf(baseurl) == 0) {
danielebarchiesi@0 764 imce.conf.furl = furl.substr(baseurl.length);
danielebarchiesi@0 765 }
danielebarchiesi@0 766 //convert button elements to input elements.
danielebarchiesi@0 767 imce.convertButtons(imce.FW);
danielebarchiesi@0 768 //ops-list
danielebarchiesi@0 769 $('#ops-list').removeClass('tabs secondary').addClass('clear-block clearfix');
danielebarchiesi@0 770 imce.opCloseLink = $(imce.newEl('a')).attr({id: 'op-close-link', href: '#', title: Drupal.t('Close')}).click(function() {
danielebarchiesi@0 771 imce.vars.op && imce.opClick(imce.vars.op);
danielebarchiesi@0 772 return false;
danielebarchiesi@0 773 }).appendTo('#op-contents')[0];
danielebarchiesi@0 774 //navigation-header
danielebarchiesi@0 775 if (!$('#navigation-header').size()) {
danielebarchiesi@0 776 $(imce.NW).children('.navigation-text').attr('id', 'navigation-header').wrapInner('<span></span>');
danielebarchiesi@0 777 }
danielebarchiesi@0 778 //log
danielebarchiesi@0 779 $('#log-prv-wrapper').before($('#log-prv-wrapper > #preview-wrapper')).remove();
danielebarchiesi@0 780 $('#log-clearer').remove();
danielebarchiesi@0 781 //content resizer
danielebarchiesi@0 782 $('#content-resizer').remove();
danielebarchiesi@0 783 //message-box
danielebarchiesi@0 784 imce.msgBox = imce.el('message-box') || $(imce.newEl('div')).attr('id', 'message-box').prependTo('#imce-content')[0];
danielebarchiesi@0 785 //create help tab
danielebarchiesi@0 786 var $hbox = $('#help-box');
danielebarchiesi@0 787 $hbox.is('a') && $hbox.replaceWith($(imce.newEl('div')).attr('id', 'help-box').append($hbox.children()));
danielebarchiesi@0 788 imce.hooks.load.push(function() {
danielebarchiesi@0 789 imce.opAdd({name: 'help', title: $('#help-box-title').remove().text(), content: $('#help-box').show()});
danielebarchiesi@0 790 });
danielebarchiesi@0 791 //add ie classes
danielebarchiesi@0 792 $.browser.msie && $('html').addClass('ie') && parseFloat($.browser.version) < 8 && $('html').addClass('ie-7');
danielebarchiesi@0 793 // enable box view for file list
danielebarchiesi@0 794 imce.vars.boxW && imce.boxView();
danielebarchiesi@0 795 //scrolling file list
danielebarchiesi@0 796 imce.syncScroll(imce.SBW, '#file-header-wrapper');
danielebarchiesi@0 797 imce.syncScroll(imce.SBW, '#dir-stat', true);
danielebarchiesi@0 798 //scrolling directory tree
danielebarchiesi@0 799 imce.syncScroll(imce.NW, '#navigation-header');
danielebarchiesi@0 800 }
danielebarchiesi@0 801
danielebarchiesi@0 802 };
danielebarchiesi@0 803
danielebarchiesi@0 804 //initiate
danielebarchiesi@0 805 $(document).ready(imce.initiate).ajaxError(imce.ajaxError);
danielebarchiesi@0 806
danielebarchiesi@0 807 })(jQuery);