source: trunk/plugins/ImageManager/assets/manager.js @ 877

Last change on this file since 877 was 877, checked in by gogo, 12 years ago

ImageManager? wasn't resizing and also was generating errors because the iframe didn't load popups/popup.js to
define Xinha.*

ticket:1058

  • Property svn:keywords set to LastChangedDate LastChangedRevision LastChangedBy HeadURL Id
File size: 8.3 KB
Line 
1/**
2 * Functions for the ImageManager, used by manager.php only     
3 * @author $Author$
4 * @version $Id$
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.