source: trunk/plugins/ExtendedFileManager/assets/manager.js @ 999

Last change on this file since 999 was 999, checked in by ray, 11 years ago

#1195 Allow to specify an external url to load a plugin from

  • Property svn:keywords set to LastChangedDate LastChangedRevision LastChangedBy HeadURL Id
File size: 17.2 KB
Line 
1/**
2 * Functions for the ExtendedFileManager, used by manager.php only
3 * Authors: Wei Zhuo, Afru, Krzysztof Kotowicz, Raimund Meyer
4 * Version: Updated on 08-01-2005 by Afru
5 * Version: Updated on 20-06-2006 by Krzysztof Kotowicz
6 * Version: Updated on 17-11-2006 by Raimund Meyer
7 * Version: Updated on 20-01-2008 by Raimund Meyer
8 * Package: ExtendedFileManager (EFM 1.4)
9 * http://www.afrusoft.com/htmlarea
10 */
11
12function comboSelectValue(c, val) {
13    var ops = c.getElementsByTagName("option");
14    for (var i = ops.length; --i >= 0;) {
15        var op = ops[i];
16        op.selected = (op.value == val);
17    }
18    c.value = val;
19}
20
21//Translation
22function i18n(str) {
23    return Xinha._lc(str, 'ExtendedFileManager');
24}
25
26//set the alignment options
27function setAlign(align)
28{
29    var selection = document.getElementById('f_align');
30    for(var i = 0; i < selection.length; i++)
31    {
32        if(selection.options[i].value == align)
33        {
34            selection.selectedIndex = i;
35            break;
36        }
37    }
38}
39
40function onTargetChanged() {
41  var f = document.getElementById("f_other_target");
42  if (this.value == "_other") {
43    f.style.visibility = "visible";
44    f.select();
45    f.focus();
46  } else f.style.visibility = "hidden";
47}
48
49function init ()
50{
51        if (typeof imgManager == 'undefined' )
52        {
53                setTimeout(init,10); // sometimes we are too hasty
54                return;
55        }
56       
57        var w = 650;
58        var h = 600;
59       
60        window.resizeTo(w,h);
61        var page = Xinha.pageSize(window);
62        window.resizeTo(w,h);
63       
64        var dim = Xinha.viewportSize(window);
65
66        window.resizeBy(0, page.y - dim.y + 5);
67
68        dim = Xinha.viewportSize(window);
69       
70        if (!Xinha.is_ie)
71        {
72          var x = opener.screenX + (opener.outerWidth - dim.x) / 2;
73          var y = opener.screenY + (opener.outerHeight - dim.x) / 2;
74        }
75        else
76        {//IE does not have window.outer... , so center it on the screen at least
77          var x =  (self.screen.availWidth - dim.x) / 2;
78          var y =  (self.screen.availHeight - dim.y) / 2;       
79        }
80        window.moveTo(x,y);
81       
82        __xinha_dlg_init();
83    __dlg_translate('ExtendedFileManager');
84
85    var uploadForm = document.getElementById('uploadForm');
86    if(uploadForm) uploadForm.target = 'imgManager';
87   
88    var editor = window.dialogArguments.editor;
89
90    var param = window.dialogArguments.param;
91    var startDir = null;
92       
93    if(manager_mode=="image" && param)
94    {
95        var absoluteURL = new RegExp('^https?://');
96
97        if (param.f_url.length > 0 && !absoluteURL.test(param.f_url) && typeof param.baseHref == "string") {
98            // URL is not absolute, prepend baseHref
99            param.f_url = param.baseHref + param.f_url;
100        }
101
102        // strip base_url from url
103        var image_regex = new RegExp( '(https?://[^/]*)?' + base_url.replace(/\/$/, '') );
104        param.f_url = param.f_url.replace( image_regex, "" );
105
106        // The image URL may reference one of the automatically resized images
107        // (when the user alters the dimensions in the picker), clean that up
108        // so it looks right and we get back to a normal f_url
109        var rd = (_resized_dir) ? _resized_dir.replace(Xinha.RE_Specials, '\\$1') + '/' : '';
110        var rp = _resized_prefix.replace(Xinha.RE_Specials, '\\$1');
111        var dreg = new RegExp('^(.*/)' + rd + rp + '_([0-9]+)x([0-9]+)_([^/]+)$');
112
113        var match = param.f_url.match(dreg);
114
115        if(dreg.test(param.f_url))
116        {
117          param.f_url    = RegExp.$1 + RegExp.$4;
118          param.f_width  = RegExp.$2;
119          param.f_height = RegExp.$3;
120        }
121
122        document.getElementById("f_url").value = param["f_url"];
123        document.getElementById("f_alt").value = param["f_alt"];
124        document.getElementById("f_title").value = param["f_title"];
125        document.getElementById("f_border").value = param["f_border"];
126        document.getElementById("f_width").value = param["f_width"];
127        document.getElementById("f_height").value = param["f_height"];
128        document.getElementById("f_margin").value = param["f_margin"];
129        document.getElementById("f_padding").value = param["f_padding"];
130        document.getElementById("f_borderColor").value = param["f_borderColor"];
131        document.getElementById("f_backgroundColor").value = param["f_backgroundColor"];
132
133        setAlign(param["f_align"]);
134
135        document.getElementById("f_url").focus();
136
137        document.getElementById("orginal_width").value = param["f_width"];
138        document.getElementById("orginal_height").value = param["f_height"];
139
140        // Locate to the correct directory
141        var dreg = new RegExp('^(.*/)([^/]+)$');
142        if (dreg.test(param['f_url']))
143        {
144                  startDir = RegExp.$1;
145        }
146
147        document.getElementById('f_preview').src = _backend_url + '__function=thumbs&img=' + param.f_url;
148
149    }
150
151    else if(manager_mode=="link" && param)
152    {
153        var target_select = document.getElementById("f_target");
154        var use_target = true;
155
156        var absoluteURL = new RegExp('^https?://');
157
158        if (param.f_href.length > 0 && !absoluteURL.test(param.f_href) && typeof param.baseHref == "string") {
159            // URL is not absolute, prepend baseHref
160            param.f_href = param.baseHref + param.f_href;
161        }
162
163        // strip base_url from href
164        var href_regex = new RegExp( '(https?://[^/]*)?' + base_url.replace(/\/$/, '') );
165        param.f_href = param.f_href.replace( href_regex, "" );
166
167        // Locate to the correct directory
168        var dreg = new RegExp('^(.*/)([^/]+)$');
169        if (dreg.test(param['f_href']))
170        {
171                startDir = RegExp.$1;
172        }
173        else
174        {
175                startDir = document.cookie.match(/EFMStartDirlink=(.*?)(;|$)/);
176                if (startDir) startDir = startDir[1];
177        }
178       
179        if (param)
180        {
181            if ( typeof param["f_usetarget"] != "undefined" )
182            {
183                use_target = param["f_usetarget"];
184            }
185            if ( typeof param["f_href"] != "undefined" )
186            {
187                document.getElementById("f_href").value = param["f_href"];
188                document.getElementById("f_title").value = param["f_title"];
189                comboSelectValue(target_select, param["f_target"]);
190                if (target_select.value != param.f_target)
191                {
192                    var opt = document.createElement("option");
193                    opt.value = param.f_target;
194                    opt.innerHTML = opt.value;
195                    target_select.appendChild(opt);
196                    opt.selected = true;
197                }
198            }
199        }
200        if (! use_target)
201        {
202            document.getElementById("f_target_label").style.visibility = "hidden";
203            document.getElementById("f_target").style.visibility = "hidden";
204            document.getElementById("f_other_target").style.visibility = "hidden";
205        }
206
207        var opt = document.createElement("option");
208        opt.value = "_other";
209        opt.innerHTML = i18n("Other");
210        target_select.appendChild(opt);
211        target_select.onchange = onTargetChanged;
212       
213        document.getElementById("f_href").focus();
214    }
215    else if (!param)
216    {
217        startDir = document.cookie.match(new RegExp ("EFMStartDir" + manager_mode + "=(.*?)(;|$)"));
218        if (startDir)
219        {
220                startDir = startDir[1];
221        }
222    }
223        if ( startDir )
224        {
225                iframeUrl += '&dir=' + startDir;
226                var dirPath = document.getElementById('dirPath');
227                for(var i = 0; i < dirPath.options.length; i++)
228                {
229                        if(dirPath.options[i].value == encodeURIComponent(startDir))
230                        {
231                                dirPath.options[i].selected = true;
232                                break;
233                        }
234                }
235        };
236        imgManager.location.replace(iframeUrl);
237
238    if (manager_mode == 'image' && typeof Xinha.colorPicker != "undefined" && document.getElementById('f_backgroundColor') && document.getElementById('f_backgroundColor').type == 'text') {
239      // Hookup color pickers
240
241      var pickerConfig = {
242        cellsize:editor.config.colorPickerCellSize,
243        granularity:editor.config.colorPickerGranularity,
244        websafe:editor.config.colorPickerWebSafe,
245        savecolors:editor.config.colorPickerSaveColors
246      };
247
248      new Xinha.colorPicker.InputBinding(document.getElementById('f_backgroundColor'),pickerConfig);
249      new Xinha.colorPicker.InputBinding(document.getElementById('f_borderColor'),pickerConfig);
250    }
251        setTimeout(function() { resize();addEvent(window, 'resize', resize); }, 500);
252}
253
254function pasteButton(action)
255{
256        var buttonHolder = document.getElementById('pasteBtn');
257        if (!buttonHolder.firstChild)
258        {
259                var a = document.createElement('a');
260                        a.href = "javascript:void(0);";
261                       
262                var img = document.createElement('img');
263                        img.src = window.opener.Xinha.getPluginDir('ExtendedFileManager')+'/img/edit_paste.gif';
264                        img.alt = i18n('Paste');
265                        a.appendChild(img);
266                        buttonHolder.appendChild(a);
267        }
268        buttonHolder.onclick = function() { 
269                                if(typeof imgManager != 'undefined') imgManager.paste(action);
270                                if (action.action ==  'moveFile' || action.action ==  'moveDir' )
271                                {
272                                        this.onclick = null;
273                                        this.removeChild(this.firstChild)
274                                }
275        }
276        switch (action.action)
277        {
278                case 'copyFile':
279                        buttonHolder.firstChild.title = i18n('Copy "$file='+action.file+'$" from "$dir='+decodeURIComponent(action.dir)+'$" here');                     
280                break;
281                case 'copyDir':
282                        buttonHolder.firstChild.title = i18n('Copy folder "$file='+action.file+'$" from "$dir='+decodeURIComponent(action.dir)+'$" here');             
283                break;
284                case 'moveFile':
285                        buttonHolder.firstChild.title = i18n('Move "$file='+action.file+'$" from "$dir='+decodeURIComponent(action.dir)+'$" here');
286                break;
287                break;
288                case 'moveDir':
289                        buttonHolder.firstChild.title = i18n('Move folder "$file='+action.file+'$" from "$dir='+decodeURIComponent(action.dir)+'$" here');
290                break; 
291        }
292       
293}
294function onCancel()
295{
296    __dlg_close(null);
297    return false;
298}
299
300function onOK()
301{
302    if(manager_mode=="image")
303    {
304        // pass data back to the calling window
305        var fields = ["f_url", "f_alt", "f_title", "f_align", "f_border", "f_margin", "f_padding", "f_height", "f_width", "f_borderColor", "f_backgroundColor"];
306        var param = new Object();
307        for (var i in fields)
308        {
309            var id = fields[i];
310            var el = document.getElementById(id);
311            if(id == "f_url" && el.value.indexOf('://') < 0 && el.value )
312                param[id] = makeURL(base_url,el.value);
313            else
314                param[id] = el.value;
315        }
316
317        // See if we need to resize the image
318        var origsize =
319        {
320          w:document.getElementById('orginal_width').value,
321          h:document.getElementById('orginal_height').value
322        }
323
324        if(  (origsize.w != param.f_width)
325          || (origsize.h != param.f_height) )
326        {
327          // Yup, need to resize
328          var resized = Xinha._geturlcontent(window.opener.Xinha.getPluginDir('ExtendedFileManager') + '/' + _backend_url + '&__function=resizer&img=' + encodeURIComponent(document.getElementById('f_url').value) + '&width=' + param.f_width + '&height=' + param.f_height);
329
330          // alert(resized);
331          resized = eval(resized);
332          if(resized)
333          {
334            param.f_url = makeURL(base_url, resized);
335          }
336        }
337        __dlg_close(param);
338        return false;
339    }
340    else if(manager_mode=="link")
341    {
342        var required = {
343            // f_href shouldn't be required or otherwise removing the link by entering an empty
344
345            // url isn't possible anymore.
346
347            // "f_href": i18n("You must enter the URL where this link points to")
348
349        };
350        for (var i in required) {
351        var el = document.getElementById(i);
352            if (!el.value) {
353              alert(required[i]);
354              el.focus();
355              return false;
356            }
357        }
358
359        // pass data back to the calling window
360        var fields = ["f_href", "f_title", "f_target" ];
361        var param = new Object();
362        for (var i in fields) {
363            var id = fields[i];
364            var el = document.getElementById(id);
365
366            if(id == "f_href" && el.value.indexOf('://') < 0 )
367                param[id] = makeURL(base_url,el.value);
368            else
369                param[id] = el.value;
370
371        }
372        if (param.f_target == "_other")
373            param.f_target = document.getElementById("f_other_target").value;
374
375//          alert(param.f_target);
376          __dlg_close(param);
377        return false;
378    }
379}
380
381//similar to the Files::makeFile() in Files.php
382function makeURL(pathA, pathB)
383{
384    if(pathA.substring(pathA.length-1) != '/')
385        pathA += '/';
386
387    if(pathB.charAt(0) == '/');
388        pathB = pathB.substring(1);
389
390    return pathA+pathB;
391}
392
393function updateDir(selection)
394{
395    var newDir = selection.options[selection.selectedIndex].value;
396    changeDir(newDir);
397}
398
399function goUpDir()
400{
401    var selection = document.getElementById('dirPath');
402    var currentDir = selection.options[selection.selectedIndex].text;
403    if(currentDir.length < 2)
404        return false;
405    var dirs = currentDir.split('/');
406
407    var search = '';
408
409    for(var i = 0; i < dirs.length - 2; i++)
410    {
411        search += dirs[i]+'/';
412    }
413
414    for(var i = 0; i < selection.length; i++)
415    {
416        var thisDir = selection.options[i].text;
417        if(thisDir == search)
418        {
419            selection.selectedIndex = i;
420            var newDir = selection.options[i].value;
421            changeDir(newDir);
422            break;
423        }
424    }
425}
426
427function changeDir(newDir)
428{
429    if(typeof imgManager != 'undefined')
430        imgManager.changeDir(newDir);
431}
432
433function updateView()
434{
435    refresh();
436}
437
438function toggleConstrains(constrains)
439{
440    var lockImage = document.getElementById('imgLock');
441    var constrains = document.getElementById('constrain_prop');
442
443    if(constrains.checked)
444    {
445        lockImage.src = "img/locked.gif";
446        checkConstrains('width')
447    }
448    else
449    {
450        lockImage.src = "img/unlocked.gif";
451    }
452}
453
454function checkConstrains(changed)
455{
456    //alert(document.form1.constrain_prop);
457    var constrains = document.getElementById('constrain_prop');
458
459    if(constrains.checked)
460    {
461        var obj = document.getElementById('orginal_width');
462        var orginal_width = parseInt(obj.value);
463        var obj = document.getElementById('orginal_height');
464        var orginal_height = parseInt(obj.value);
465
466        var widthObj = document.getElementById('f_width');
467        var heightObj = document.getElementById('f_height');
468
469        var width = parseInt(widthObj.value);
470        var height = parseInt(heightObj.value);
471
472        if(orginal_width > 0 && orginal_height > 0)
473        {
474            if(changed == 'width' && width > 0) {
475                heightObj.value = parseInt((width/orginal_width)*orginal_height);
476            }
477
478            if(changed == 'height' && height > 0) {
479                widthObj.value = parseInt((height/orginal_height)*orginal_width);
480            }
481        }
482    }
483}
484
485function showMessage(newMessage)
486{
487    var message = document.getElementById('message');
488    var messages = document.getElementById('messages');
489    if(message.firstChild)
490        message.removeChild(message.firstChild);
491
492    message.appendChild(document.createTextNode(i18n(newMessage)));
493
494    messages.style.display = "block";
495}
496
497function addEvent(obj, evType, fn)
498{
499    if (obj.addEventListener) { obj.addEventListener(evType, fn, true); return true; }
500    else if (obj.attachEvent) {  var r = obj.attachEvent("on"+evType, fn);  return r;  }
501    else {  return false; }
502}
503
504function doUpload()
505{
506    var uploadForm = document.getElementById('uploadForm');
507    if(uploadForm)
508        showMessage('Uploading');
509}
510
511function refresh()
512{
513    var selection = document.getElementById('dirPath');
514    updateDir(selection);
515}
516
517function newFolder()
518{
519  function createFolder(folder)
520  {
521    var selection = document.getElementById('dirPath');
522    var dir = selection.options[selection.selectedIndex].value;
523
524    if(folder == thumbdir)
525    {
526      alert(i18n('Invalid folder name, please choose another folder name.'));
527      return false;
528    }
529
530    if (folder && folder != '' && typeof imgManager != 'undefined')
531    {
532      imgManager.newFolder(dir, encodeURI(folder));
533    }
534  }
535    // IE7 has crippled the prompt()
536  if ( Xinha.ie_version > 6 )
537  {
538    popupPrompt(i18n('Please enter name for new folder...'), i18n('Untitled'), createFolder, i18n("New Folder"));
539  }
540  else
541  {
542    var folder = prompt(i18n('Please enter name for new folder...'), i18n('Untitled'));
543    createFolder(folder);
544  }
545}
546
547
548function resize()
549{
550        var win = Xinha.viewportSize(window);
551        var m = document.getElementById('messages');
552        var messagesHeight = (m && m.style.display != 'none' ) ?  parseInt( document.getElementById('messages').offsetHeight, 10 ) : 0;
553        document.getElementById('imgManager').style.height = parseInt( win.y - 130 - document.getElementById('controls').offsetHeight, 10 ) - messagesHeight  + 'px';
554        return true;
555}
556
557Xinha.addOnloadHandler( init, window );
Note: See TracBrowser for help on using the repository browser.