source: trunk/plugins/ExtendedFileManager/extended-file-manager.js @ 937

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

#1132 [ExtendedFileManager?] new Version

  • Property svn:keywords set to LastChangedDate LastChangedRevision LastChangedBy HeadURL Id
File size: 11.1 KB
Line 
1/**
2 * ExtendedFileManager extended-file-manager.js file.
3 * Authors: Wei Zhuo, Afru, Krzysztof Kotowicz, Raimund Meyer
4 * Modified by: Krzysztof Kotowicz <koto@webworkers.pl>
5 * Version: Updated on 08-01-2005 by Afru
6 * Version: Modified on 20-06-2006 by Krzysztof Kotowicz
7 * Version: Updated on 29-10-2006 by Raimund Meyer
8 * Version: Updated on 20-01-2008 by Raimund Meyer
9 * Package: ExtendedFileManager (EFM 1.4)
10 */
11
12/**
13 * For installation details see Readme.txt in the plugin folder
14 *
15 */
16
17function ExtendedFileManager(editor)
18{
19
20    this.editor = editor;
21
22    var cfg = editor.config;
23    var toolbar = cfg.toolbar;
24    var self = this;
25   
26    if (cfg.ExtendedFileManager.use_linker) {
27        cfg.registerButton({
28            id        : "linkfile",
29            tooltip   : Xinha._lc("Insert File Link",'ExtendedFileManager'),
30            image     : _editor_url + 'plugins/ExtendedFileManager/img/ed_linkfile.gif',
31            textMode  : false,
32            action    : function(editor) {
33                    editor._linkFile();
34                  }
35            });
36        cfg.addToolbarElement("linkfile", "createlink", 1);
37        };
38
39    var manager = editor.config.ExtendedFileManager.backend + '__function=manager';
40    if(cfg.ExtendedFileManager.backend_config != null)
41    {
42      manager += '&backend_config='
43        + encodeURIComponent(cfg.ExtendedFileManager.backend_config);
44      manager += '&backend_config_hash='
45        + encodeURIComponent(cfg.ExtendedFileManager.backend_config_hash);
46      manager += '&backend_config_secret_key_location='
47        + encodeURIComponent(cfg.ExtendedFileManager.backend_config_secret_key_location);
48    }
49
50    if(cfg.ExtendedFileManager.backend_data != null)
51    {
52        for ( var i in cfg.ExtendedFileManager.backend_data )
53        {
54            manager += '&' + i + '=' + encodeURIComponent(cfg.ExtendedFileManager.backend_data[i]);
55        }
56    }
57    cfg.ExtendedFileManager.manager = manager;
58}
59
60ExtendedFileManager._pluginInfo = {
61    name          : "ExtendedFileManager",
62    version       : "1.4",
63    developer     : "Afru, Krzysztof Kotowicz, Raimund Meyer",
64    developer_url : "http://xinha.org",
65    license       : "htmlArea"
66};
67
68Xinha.Config.prototype.ExtendedFileManager =
69{
70  'use_linker': true,
71  'backend'    : _editor_url + 'plugins/ExtendedFileManager/backend.php?__plugin=ExtendedFileManager&',
72  'backend_data' : null,
73  // deprecated keys, use passing data through e.g. xinha_pass_to_php_backend()
74  'backend_config'     : null,
75  'backend_config_hash': null,
76  'backend_config_secret_key_location': 'Xinha:ImageManager'
77};
78
79// Over ride the _insertImage function in htmlarea.js.
80// Open up the ExtendedFileManger script instead.
81if(typeof ImageManager == 'undefined')
82{
83Xinha.prototype._insertImage = function(image) {
84
85    var editor = this;  // for nested functions
86    var outparam = {"editor" : this, param : null};
87   
88    if (typeof image == "undefined") {
89        image = this.getParentElement();
90        if (image && !/^img$/i.test(image.tagName))
91            image = null;
92    }
93
94    if (image) {
95        outparam.param = {
96            f_url    : Xinha.is_ie ? image.src : image.getAttribute("src"),
97            f_alt    : image.alt,
98            f_title  : image.title,
99            f_border : image.style.borderWidth ? image.style.borderWidth : image.border,
100            f_align  : image.align,
101            f_width  : image.width,
102            f_height  : image.height,
103            f_padding: image.style.padding,
104            f_margin : image.style.margin,
105            f_backgroundColor: image.style.backgroundColor,
106            f_borderColor: image.style.borderColor,
107            baseHref: editor.config.baseHref
108        };
109
110        // compress 'top right bottom left' syntax into one value if possible
111        outparam.param.f_border = shortSize(outparam.param.f_border);
112        outparam.param.f_padding = shortSize(outparam.param.f_padding);
113        outparam.param.f_margin = shortSize(outparam.param.f_margin);
114
115        // convert rgb() calls to rgb hex
116        outparam.param.f_backgroundColor = convertToHex(outparam.param.f_backgroundColor);
117        outparam.param.f_borderColor = convertToHex(outparam.param.f_borderColor);
118
119    }
120    Dialog(this.config.ExtendedFileManager.manager, function(param){
121        if (!param)
122        {   // user must have pressed Cancel
123            return false;
124        }
125
126        var img = image;
127        if (!img) {
128                if ( !param.f_url ) return false;
129            if (Xinha.is_ie) {
130                var sel = editor.getSelection();
131                var range = editor.createRange(sel);
132                editor._doc.execCommand("insertimage", false, param.f_url);
133                img = range.parentElement();
134                // wonder if this works...
135                if (img.tagName.toLowerCase() != "img") {
136                    img = img.previousSibling;
137                }
138
139            } else {
140                img = document.createElement('img');
141                img.src = param.f_url;
142                editor.insertNodeAtSelection(img);
143            }
144
145        } else {
146                if ( !param.f_url ) { // delete the image if empty url passed
147                        img.parentNode.removeChild(img);
148                        editor.updateToolbar();
149                        return false;
150                } else {
151                img.src = param.f_url;
152                }
153        }
154
155        img.alt = img.alt ? img.alt : '';
156       
157        for (field in param)
158        {
159            var value = param[field];
160            switch (field)
161            {
162                case "f_alt"    : img.alt    = value; break;
163                case "f_title"  : img.title = value; break;
164                case "f_border" :
165                    if (value)
166                    {
167                        img.style.borderWidth = /[^0-9]/.test(value) ? value : (value != '') ? (parseInt(value) + 'px') : '';
168                        if(img.style.borderWidth && !img.style.borderStyle)
169                        {
170                            img.style.borderStyle = 'solid';
171                        }
172                        else if (!img.style.borderWidth)
173                        {
174                                img.style.border = '';
175                        }
176                    }
177                break;
178                case "f_borderColor": img.style.borderColor =  value; break;
179                case "f_backgroundColor": img.style.backgroundColor = value; break;
180                case "f_align"  : img.align  = value; break;
181                case "f_width"  :
182                    if ( parseInt( value ) > 0 )
183                    {
184                        img.width = parseInt(value);
185                    }
186                break;
187                case "f_height"  :
188                    if ( parseInt( value ) > 0 )
189                    {
190                        img.height = parseInt(value);
191                    }
192                break;
193                case "f_padding": img.style.padding =
194                                          /[^0-9]/.test(value) ? value : (value != '') ? (parseInt(value) + 'px') :''; break;
195                case "f_margin": img.style.margin =
196                                          /[^0-9]/.test(value) ? value : (value != '') ? (parseInt(value) + 'px') :''; break;
197            }
198        }
199
200    }, outparam);
201
202};
203}
204
205Xinha.prototype._linkFile = function(link) {
206
207    var editor = this;
208    var outparam = {"editor" : this, param : null};
209    if (typeof link == "undefined") {
210        link = this.getParentElement();
211        if (link) {
212            if (/^img$/i.test(link.tagName))
213                link = link.parentNode;
214            if (!/^a$/i.test(link.tagName))
215                link = null;
216        }
217    }
218    if (!link) {
219        var sel = editor.getSelection();
220        var range = editor.createRange(sel);
221        var compare = 0;
222        if (Xinha.is_ie) {
223            if ( sel.type == "Control" )
224                compare = range.length;
225            else
226                compare = range.compareEndPoints("StartToEnd", range);
227        } else {
228            compare = range.compareBoundaryPoints(range.START_TO_END, range);
229        }
230        if (compare == 0) {
231            alert(Xinha._lc("You must select some text before making a new link.", 'ExtendedFileManager'));
232            return;
233        }
234        outparam.param = {
235            f_href : '',
236            f_title : '',
237            f_target : '',
238            f_usetarget : editor.config.makeLinkShowsTarget,
239            baseHref: editor.config.baseHref
240        };
241    } else
242        outparam.param = {
243            f_href   : Xinha.is_ie ? link.href : link.getAttribute("href"),
244            f_title  : link.title,
245            f_target : link.target,
246            f_usetarget : editor.config.makeLinkShowsTarget,
247            baseHref: editor.config.baseHref
248        };
249
250    Dialog(this.config.ExtendedFileManager.manager+'&mode=link', function(param){
251        if (!param)
252            return false;
253        var a = link;
254        if (!a) try {
255            editor._doc.execCommand("createlink", false, param.f_href);
256            a = editor.getParentElement();
257            var sel = editor.getSelection();
258            var range = editor.createRange(sel);
259            if (!Xinha.is_ie) {
260                a = range.startContainer;
261                if (!/^a$/i.test(a.tagName)) {
262                    a = a.nextSibling;
263                    if (a == null)
264                        a = range.startContainer.parentNode;
265                }
266            }
267        } catch(e) {}
268        else {
269            var href = param.f_href.trim();
270            editor.selectNodeContents(a);
271            if (href == "") {
272                editor._doc.execCommand("unlink", false, null);
273                editor.updateToolbar();
274                return false;
275            }
276            else {
277                a.href = href;
278            }
279        }
280        if (!(a && /^a$/i.test(a.tagName)))
281            return false;
282        a.target = param.f_target.trim();
283        a.title = param.f_title.trim();
284        editor.selectNodeContents(a);
285        editor.updateToolbar();
286    }, outparam);
287};
288
289function shortSize(cssSize)
290{
291    if(/ /.test(cssSize))
292    {
293        var sizes = cssSize.split(' ');
294        var useFirstSize = true;
295        for(var i = 1; i < sizes.length; i++)
296        {
297            if(sizes[0] != sizes[i])
298            {
299                useFirstSize = false;
300                break;
301            }
302        }
303        if(useFirstSize) cssSize = sizes[0];
304    }
305
306    return cssSize;
307}
308
309function convertToHex(color) {
310
311    if (typeof color == "string" && /, /.test.color)
312        color = color.replace(/, /, ','); // rgb(a, b) => rgb(a,b)
313
314    if (typeof color == "string" && / /.test.color) { // multiple values
315        var colors = color.split(' ');
316        var colorstring = '';
317        for (var i = 0; i < colors.length; i++) {
318            colorstring += Xinha._colorToRgb(colors[i]);
319            if (i + 1 < colors.length)
320                colorstring += " ";
321        }
322        return colorstring;
323    }
324
325    return Xinha._colorToRgb(color);
326}
Note: See TracBrowser for help on using the repository browser.