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(' ').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); |