source: trunk/plugins/ImageManager/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: 8.4 KB
Line 
1/**
2 * Functions for the ImageManager, used by manager.php only     
3 * @author $Author:gogo $
4 * @version $Id:manager.js 877 2007-08-12 15:50:03Z gogo $
5 * @package ImageManager
6 */
7       
8        //Translation
9        function i18n(str) {
10        return Xinha._lc(str, 'ImageManager');
11        }
12
13
14        //set the alignment options
15        function setAlign(align)
16        {
17                var selection = document.getElementById('f_align');
18                for(var i = 0; i < selection.length; i++)
19                {
20                        if(selection.options[i].value == align)
21                        {
22                                selection.selectedIndex = i;
23                                break;
24                        }
25                }
26        }
27
28        //initialise the form
29  doneinit = 0; // Seems that in Opera the load event of the iframe re-fires this one also.
30        init = function ()
31        {
32    if(doneinit++) return;
33   
34                __dlg_init(null, {width:600,height:460});
35
36                __dlg_translate('ImageManager');
37       
38        // This is so the translated string shows up in the drop down.
39        document.getElementById("f_align").selectedIndex = 1;
40        document.getElementById("f_align").selectedIndex = 0;
41       
42
43                var uploadForm = document.getElementById('uploadForm');
44                if(uploadForm) uploadForm.target = 'imgManager';
45
46                var param = window.dialogArguments;
47                if (param)
48                {
49      var image_regex = new RegExp( '(https?://[^/]*)?' + base_url.replace(/\/$/, '') );
50      param.f_url = param.f_url.replace( image_regex, "" );
51
52      // The image URL may reference one of the automatically resized images
53      // (when the user alters the dimensions in the picker), clean that up
54      // so it looks right and we get back to a normal f_url
55      var rd = (_resized_dir) ? _resized_dir.replace(Xinha.RE_Specials, '\\$1') + '/' : '';
56      var rp = _resized_prefix.replace(Xinha.RE_Specials, '\\$1');
57      var dreg = new RegExp('^(.*/)' + rd + rp + '_([0-9]+)x([0-9]+)_([^/]+)$');
58 
59      if(dreg.test(param.f_url))
60      {
61        param.f_url    = RegExp.$1 + RegExp.$4;
62        param.f_width  = RegExp.$2;
63        param.f_height = RegExp.$3;
64      }
65     
66      for (var id in param)
67      {
68        if(id == 'f_align') continue;
69        if(document.getElementById(id))
70        {
71          document.getElementById(id).value = param[id];
72        }
73      }
74
75
76
77      document.getElementById("orginal_width").value = param["f_width"];
78                        document.getElementById("orginal_height").value = param["f_height"];
79                        setAlign(param["f_align"]);
80
81      // Locate to the correct directory
82      var dreg = new RegExp('^(.*/)([^/]+)$');
83      if(dreg.test(param['f_url']) && !(new RegExp('^https?://','i')).test(param['f_url']))
84      {
85        changeDir(RegExp.$1);
86        var dirPath = document.getElementById('dirPath');
87        for(var i = 0; i < dirPath.options.length; i++)
88        {
89          if(dirPath.options[i].value == encodeURIComponent(RegExp.$1))
90          {
91            dirPath.options[i].selected = true;
92            break;
93          }
94        }
95      }
96      document.getElementById('f_preview').src = _backend_url + '__function=thumbs&img=' + param.f_url;     
97                }
98               
99                 // Hookup color pickers
100    new Xinha.colorPicker.InputBinding(document.getElementById('f_backgroundColor'));
101    new Xinha.colorPicker.InputBinding(document.getElementById('f_borderColor'));
102
103                document.getElementById("f_alt").focus();
104        };
105
106
107        function onCancel()
108        {
109                __dlg_close(null);
110                return false;
111        }
112
113        function onOK()
114        {
115                // pass data back to the calling window
116                var fields = ["f_url", "f_alt", "f_align", "f_width", "f_height", "f_padding", "f_margin", "f_border", "f_borderColor", "f_backgroundColor"];
117                var param = new Object();
118                for (var i in fields)
119                {
120                        var id = fields[i];
121                        var el = document.getElementById(id);
122                        if(id == "f_url" && el.value.indexOf('://') < 0 )
123                                {
124
125                                if ( el.value == "" )
126                                        {
127                                        alert( i18n("No Image selected.") );
128                                        return( false );
129                                        }
130
131                                param[id] = makeURL(base_url,el.value);
132                                }
133                        else if (el)
134                                param[id] = el.value;
135      else alert("Missing " + fields[i]);
136
137                }
138
139    // See if we need to resize the image
140    var origsize =
141    {
142      w:document.getElementById('orginal_width').value,
143      h:document.getElementById('orginal_height').value
144    }
145
146    if(  (origsize.w != param.f_width)
147      || (origsize.h != param.f_height) )
148    {
149      // Yup, need to resize
150      var resized = Xinha._geturlcontent(_backend_url + '&__function=resizer&img=' + encodeURIComponent(document.getElementById('f_url').value) + '&width=' + param.f_width + '&height=' + param.f_height);
151      // alert(resized);
152      resized = eval(resized);
153      if(resized)
154      {
155        param.f_url = makeURL(base_url, resized);
156      }
157    }
158
159
160                __dlg_close(param);
161                return false;
162        }
163
164        //similar to the Files::makeFile() in Files.php
165        function makeURL(pathA, pathB)
166        {
167                if(pathA.substring(pathA.length-1) != '/')
168                        pathA += '/';
169
170                if(pathB.charAt(0) == '/');     
171                        pathB = pathB.substring(1);
172
173                return pathA+pathB;
174        }
175
176
177        function updateDir(selection)
178        {
179                var newDir = selection.options[selection.selectedIndex].value;
180                changeDir(newDir);
181        }
182
183        function goUpDir()
184        {
185                var selection = document.getElementById('dirPath');
186                var currentDir = selection.options[selection.selectedIndex].text;
187                if(currentDir.length < 2)
188                        return false;
189                var dirs = currentDir.split('/');
190               
191                var search = '';
192
193                for(var i = 0; i < dirs.length - 2; i++)
194                {
195                        search += dirs[i]+'/';
196                }
197
198                for(var i = 0; i < selection.length; i++)
199                {
200                        var thisDir = selection.options[i].text;
201                        if(thisDir == search)
202                        {
203                                selection.selectedIndex = i;
204                                var newDir = selection.options[i].value;
205                                changeDir(newDir);
206                                break;
207                        }
208                }
209        }
210
211        function changeDir(newDir)
212        {
213                if(typeof imgManager != 'undefined')
214    {     
215            imgManager.changeDir(newDir);
216    }
217        }
218
219        function toggleConstrains(constrains)
220        {
221                var lockImage = document.getElementById('imgLock');
222                var constrains = document.getElementById('constrain_prop');
223
224                if(constrains.checked)
225                {
226                        lockImage.src = "img/locked.gif";       
227                        checkConstrains('width')
228                }
229                else
230                {
231                        lockImage.src = "img/unlocked.gif";     
232                }
233        }
234
235        function checkConstrains(changed)
236        {
237                //alert(document.form1.constrain_prop);
238                var constrains = document.getElementById('constrain_prop');
239               
240                if(constrains.checked)
241                {
242                        var obj = document.getElementById('orginal_width');
243                        var orginal_width = parseInt(obj.value);
244                        var obj = document.getElementById('orginal_height');
245                        var orginal_height = parseInt(obj.value);
246
247                        var widthObj = document.getElementById('f_width');
248                        var heightObj = document.getElementById('f_height');
249                       
250                        var width = parseInt(widthObj.value);
251                        var height = parseInt(heightObj.value);
252
253                        if(orginal_width > 0 && orginal_height > 0)
254                        {
255                                if(changed == 'width' && width > 0) {
256                                        heightObj.value = parseInt((width/orginal_width)*orginal_height);
257                                }
258
259                                if(changed == 'height' && height > 0) {
260                                        widthObj.value = parseInt((height/orginal_height)*orginal_width);
261                                }
262                        }                       
263                }
264        }
265
266        function showMessage(newMessage)
267        {
268                var message = document.getElementById('message');
269                var messages = document.getElementById('messages');
270                if(message.firstChild)
271                        message.removeChild(message.firstChild);
272
273                message.appendChild(document.createTextNode(i18n(newMessage)));
274               
275                messages.style.display = '';
276        }
277
278        function addEvent(obj, evType, fn)
279        {
280                if (obj.addEventListener) { obj.addEventListener(evType, fn, true); return true; }
281                else if (obj.attachEvent) {  var r = obj.attachEvent("on"+evType, fn);  return r;  }
282                else {  return false; }
283        }
284
285        function doUpload()
286        {
287               
288                var uploadForm = document.getElementById('uploadForm');
289                if(uploadForm)
290                        showMessage('Uploading');
291        }
292
293        function refresh()
294        {
295                var selection = document.getElementById('dirPath');
296                updateDir(selection);
297        }
298
299
300        function newFolder()
301        {
302                function createFolder(folder)
303                {
304                        var selection = document.getElementById('dirPath');
305                        var dir = selection.options[selection.selectedIndex].value;
306
307                        if(folder == thumbdir)
308                        {
309                                alert(i18n('Invalid folder name, please choose another folder name.'));
310                                return false;
311                        }
312
313                        if (folder && folder != '' && typeof imgManager != 'undefined')
314                        {
315                                imgManager.newFolder(dir, encodeURI(folder));
316                        }
317                }
318                // IE7 has crippled the prompt()
319                if (Xinha.ie_version > 6)
320                {
321                        Dialog("newFolder.html", function(param)
322                        {
323                                if (!param) // user must have pressed Cancel
324                                {
325                                        return false;
326                                }
327                                else
328                                {
329                                        var folder = param['f_foldername'];
330                                        createFolder(folder);
331                                }
332                        }, null);
333                }
334                else
335                {
336                        var folder = prompt(i18n('Please enter name for new folder...'), i18n('Untitled'));
337                        createFolder(folder);
338                }
339        }
340 
341        addEvent(window, 'load', init);
Note: See TracBrowser for help on using the repository browser.