xref: /dokuwiki/lib/scripts/media.js (revision a8d2e40f2711896fc4704d00fdee5d3ba3a3f592)
1/**
2 * JavaScript functionalitiy for the media management popup
3 *
4 * @author Andreas Gohr <andi@splitbrain.org>
5 */
6var media_manager = {
7    keepopen: false,
8    hide: false,
9    align: false,
10    popup: false,
11    id: false,
12    display: false,
13    link: false,
14    size: false,
15    ext: false,
16
17    /**
18     * Attach event handlers to all "folders" below the given element
19     *
20     * @author Andreas Gohr <andi@splitbrain.org>
21     */
22    treeattach: function(obj){
23        if(!obj) return;
24
25        var items = obj.getElementsByTagName('li');
26        for(var i=0; i<items.length; i++){
27            var elem = items[i];
28
29            // attach action to make the +/- clickable
30            var clicky = elem.getElementsByTagName('img')[0];
31            clicky.style.cursor = 'pointer';
32            addEvent(clicky,'click',function(event){ return media_manager.toggle(event,this); });
33
34            // attach action load folder list via AJAX
35            var link = elem.getElementsByTagName('a')[0];
36            link.style.cursor = 'pointer';
37            addEvent(link,'click',function(event){ return media_manager.list(event,this); });
38        }
39    },
40
41    /**
42     * Attach the image selector action to all links below the given element
43     * also add the action to autofill the "upload as" field
44     *
45     * @author Andreas Gohr <andi@splitbrain.org>
46     */
47    selectorattach: function(obj){
48        if(!obj) return;
49
50        var items = getElementsByClass('select',obj,'a');
51        for(var i=0; i<items.length; i++){
52            var elem = items[i];
53            elem.style.cursor = 'pointer';
54            addEvent(elem,'click',function(event){ return media_manager.select(event,this); });
55        }
56
57        // hide syntax example
58        items = getElementsByClass('example',obj,'div');
59        for(var i=0; i<items.length; i++){
60            elem = items[i];
61            elem.style.display = 'none';
62        }
63
64        var file = $('upload__file');
65        if(!file) return;
66        addEvent(file,'change',media_manager.suggest);
67    },
68
69    /**
70     * Attach deletion confirmation dialog to the delete buttons.
71     *
72     * Michael Klier <chi@chimeric.de>
73     */
74    confirmattach: function(obj){
75        if(!obj) return;
76
77        items = getElementsByClass('btn_media_delete',obj,'a');
78        for(var i=0; i<items.length; i++){
79            var elem = items[i];
80            addEvent(elem,'click',function(e){
81                if(e.target.tagName == 'IMG'){
82                    var name = e.target.parentNode.title;
83                }else{
84                    var name = e.target.title;
85                }
86                if(!confirm(LANG['del_confirm'] + "\n" + name)) {
87                    e.preventDefault();
88                    return false;
89                } else {
90                    return true;
91                }
92            });
93        }
94    },
95
96    /**
97     * Creates checkboxes for additional options
98     *
99     * @author Andreas Gohr <andi@splitbrain.org>
100     */
101    attachoptions: function(obj){
102        if(!obj) return;
103
104        // keep open
105        if(opener){
106            var kobox  = document.createElement('input');
107            kobox.type = 'checkbox';
108            kobox.id   = 'media__keepopen';
109            if(DokuCookie.getValue('keepopen')){
110                kobox.checked  = true;
111                kobox.defaultChecked = true; //IE wants this
112                media_manager.keepopen = true;
113            }
114            addEvent(kobox,'click',function(event){ return media_manager.togglekeepopen(event,this); });
115
116            var kolbl  = document.createElement('label');
117            kolbl.htmlFor   = 'media__keepopen';
118            kolbl.innerHTML = LANG['keepopen'];
119
120            var kobr = document.createElement('br');
121
122            obj.appendChild(kobox);
123            obj.appendChild(kolbl);
124            obj.appendChild(kobr);
125        }
126
127        // hide details
128        var hdbox  = document.createElement('input');
129        hdbox.type = 'checkbox';
130        hdbox.id   = 'media__hide';
131        if(DokuCookie.getValue('hide')){
132            hdbox.checked = true;
133            hdbox.defaultChecked = true; //IE wants this
134            media_manager.hide    = true;
135        }
136        addEvent(hdbox,'click',function(event){ return media_manager.togglehide(event,this); });
137
138        var hdlbl  = document.createElement('label');
139        hdlbl.htmlFor   = 'media__hide';
140        hdlbl.innerHTML = LANG['hidedetails'];
141
142        var hdbr = document.createElement('br');
143
144        obj.appendChild(hdbox);
145        obj.appendChild(hdlbl);
146        obj.appendChild(hdbr);
147        media_manager.updatehide();
148    },
149
150    /**
151     * Opens the searchfield
152     *
153     * @author Tobias Sarnowski <sarnowski@cosmocode.de>
154     */
155    showsearchfield: function(event,link){
156        // prepare an AJAX call to fetch the search
157        var ajax = new sack(DOKU_BASE + 'lib/exe/ajax.php');
158        ajax.AjaxFailedAlert = '';
159        ajax.encodeURIString = false;
160        if(ajax.failed) return true;
161
162        cleanMsgArea();
163
164        var content = $('media__content');
165        content.innerHTML = '<img src="'+DOKU_BASE+'lib/images/loading.gif" alt="..." class="load" />';
166
167        ajax.elementObj = content;
168        ajax.afterCompletion = function(){
169            media_manager.selectorattach(content);
170            media_manager.confirmattach(content);
171            media_manager.updatehide();
172        };
173        ajax.runAJAX(link.search.substr(1)+'&call=mediasearchlist');
174        return false;
175    },
176
177    /**
178     * Toggles the keep open state
179     *
180     * @author Andreas Gohr <andi@splitbrain.org>
181     */
182    togglekeepopen: function(event,cb){
183        if(cb.checked){
184            DokuCookie.setValue('keepopen',1);
185            media_manager.keepopen = true;
186        }else{
187            DokuCookie.setValue('keepopen','');
188            media_manager.keepopen = false;
189        }
190    },
191
192    /**
193     * Toggles the hide details state
194     *
195     * @author Andreas Gohr <andi@splitbrain.org>
196     */
197    togglehide: function(event,cb){
198        if(cb.checked){
199            DokuCookie.setValue('hide',1);
200            media_manager.hide = true;
201        }else{
202            DokuCookie.setValue('hide','');
203            media_manager.hide = false;
204        }
205        media_manager.updatehide();
206    },
207
208    /**
209     * Sets the visibility of the image details accordingly to the
210     * chosen hide state
211     *
212     * @author Andreas Gohr <andi@splitbrain.org>
213     */
214    updatehide: function(){
215        var obj = $('media__content');
216        if(!obj) return;
217        var details = getElementsByClass('detail',obj,'div');
218        for(var i=0; i<details.length; i++){
219            if(media_manager.hide){
220                details[i].style.display = 'none';
221            }else{
222                details[i].style.display = '';
223            }
224        }
225    },
226
227    /**
228     * shows the popup for a image link
229     */
230    select: function(event,link){
231        var id = link.name.substr(2);
232
233        media_manager.id = id;
234        if(!opener){
235            // if we don't run in popup display example
236            var ex = $('ex_'+id.replace(/:/g,'_'));
237            if(ex.style.display == ''){
238                ex.style.display = 'none';
239            } else {
240                ex.style.display = '';
241            }
242            return false;
243        }
244
245        media_manager.ext = false;
246        var dot = id.lastIndexOf(".");
247        if (dot != -1) {
248            var ext = id.substr(dot,id.length);
249
250            if (ext != '.jpg' && ext != '.jpeg' && ext != '.png' && ext != '.gif' && ext != '.swf') {
251                media_manager.insert(null);
252                return false;
253            }
254        } else {
255            media_manager.insert(null);
256            return false;
257        }
258
259        media_manager.popup.style.display = 'inline';
260        media_manager.popup.style.left = event.pageX + 'px';
261        media_manager.popup.style.top = event.pageY + 'px';
262
263        // set all buttons to outset
264        media_manager.outSet('media__linkbtn1');
265        media_manager.outSet('media__linkbtn2');
266        media_manager.outSet('media__linkbtn3');
267        media_manager.outSet('media__linkbtn4');
268
269        media_manager.outSet('media__alignbtn0');
270        media_manager.outSet('media__alignbtn1');
271        media_manager.outSet('media__alignbtn2');
272        media_manager.outSet('media__alignbtn3');
273
274        media_manager.outSet('media__sizebtn1');
275        media_manager.outSet('media__sizebtn2');
276        media_manager.outSet('media__sizebtn3');
277        media_manager.outSet('media__sizebtn4');
278
279
280        if (ext == '.swf') {
281            media_manager.ext = 'swf';
282
283            // disable display buttons for detail and linked image
284            $('media__linkbtn1').style.display = 'none';
285            $('media__linkbtn2').style.display = 'none';
286
287            // set the link button to default
288            if (media_manager.link != false) {
289                if ( media_manager.link == '2' || media_manager.link == '1')  {
290                    media_manager.inSet('media__linkbtn3');
291                    media_manager.link = '3';
292                    DokuCookie.setValue('link','3');
293                } else {
294                    media_manager.inSet('media__linkbtn'+media_manager.link);
295                }
296            } else if (DokuCookie.getValue('link')) {
297                if ( DokuCookie.getValue('link') == '2' ||  DokuCookie.getValue('link') == '1')  {
298                    // this options are not availible
299                    media_manager.inSet('media__linkbtn3');
300                    media_manager.link = '3';
301                    DokuCookie.setValue('link','3');
302                } else {
303                    media_manager.inSet('media__linkbtn'+DokuCookie.getValue('link'));
304                    media_manager.link = DokuCookie.getValue('link');
305                }
306            } else {
307                // default case
308                media_manager.link = '3';
309                media_manager.inSet('media__linkbtn3');
310                DokuCookie.setValue('link','3');
311            }
312
313        } else {
314            media_manager.ext = 'img';
315
316            // ensure that the display buttens are there
317            $('media__linkbtn1').style.display = 'inline';
318            $('media__linkbtn2').style.display = 'inline';
319
320            // set the link button to default
321            if (media_manager.link != false) {
322                media_manager.inSet('media__linkbtn'+media_manager.link);
323            } else if (DokuCookie.getValue('link')) {
324                media_manager.inSet('media__linkbtn'+DokuCookie.getValue('link'));
325                media_manager.link = DokuCookie.getValue('link');
326            } else {
327                // default case
328                media_manager.link = '1';
329                media_manager.inSet('media__linkbtn1');
330                DokuCookie.setValue('link','1');
331            }
332        }
333
334        if (media_manager.link == '4') {
335            media_manager.align = false;
336            media_manager.size = false;
337            $('media__align').style.display = 'none';
338            $('media__size').style.display = 'none';
339        } else {
340            $('media__align').style.display = 'block';
341            $('media__size').style.display = 'block';
342
343            // set the align button to default
344            if (media_manager.align != false) {
345                media_manager.inSet('media__alignbtn'+media_manager.align);
346            } else if (DokuCookie.getValue('align')) {
347                media_manager.inSet('media__alignbtn'+DokuCookie.getValue('align'));
348                media_manager.align = DokuCookie.getValue('align');
349            } else {
350                // default case
351                media_manager.align = '0';
352                media_manager.inSet('media__alignbtn0');
353                DokuCookie.setValue('align','0');
354            }
355
356            // set the size button to default
357            if (media_manager.size != false) {
358                media_manager.inSet('media__sizebtn'+media_manager.size);
359            } else if (DokuCookie.getValue('size')) {
360                media_manager.inSet('media__sizebtn'+DokuCookie.getValue('size'));
361                media_manager.size = DokuCookie.getValue('size');
362            } else {
363                // default case
364                media_manager.size = '2';
365                media_manager.inSet('media__sizebtn2');
366                DokuCookie.setValue('size','2');
367            }
368
369
370            $('media__sendbtn').focus();
371        }
372
373       return false;
374    },
375
376    /**
377     * build the popup window
378     *
379     * @author Dominik Eckelmann <eckelmann@cosmocode.de>
380     */
381    initpopup: function() {
382
383        media_manager.popup = document.createElement('div');
384        media_manager.popup.setAttribute('id','media__popup');
385
386        var root = document.getElementById('media__manager');
387        if (root == null) return;
388        root.appendChild(media_manager.popup);
389
390        var headline    = document.createElement('h1');
391        var headlineimg = document.createElement('img');
392        var headtext    = document.createElement('span');
393        headlineimg.src = '/lib/images/close.png';
394        headlineimg.id  = 'media__closeimg';
395        addEvent(headlineimg,'click',function(event){ return media_manager.closePopup(event,this); });
396        headline.appendChild(headlineimg);
397        headtext.textContent = LANG['mediatitle'];
398        headline.appendChild(headtext);
399        media_manager.popup.appendChild(headline);
400        drag.attach(media_manager.popup,headline);
401
402        // link
403
404        var linkp    = document.createElement('p');
405        var linkl    = document.createElement('label');
406        var linkbtn1 = document.createElement('button');
407        var linkbtn2 = document.createElement('button');
408        var linkbtn3 = document.createElement('button');
409        var linkbtn4 = document.createElement('button');
410        var linkimg1 = document.createElement('img');
411        var linkimg2 = document.createElement('img');
412        var linkimg3 = document.createElement('img');
413        var linkimg4 = document.createElement('img');
414
415        linkp.id = "media__linkstyle";
416        if (media_manager.display == "2") {
417            linkp.style.display = "none";
418        }
419
420        linkp.appendChild(linkl);
421        linkp.appendChild(linkbtn1);
422        linkp.appendChild(linkbtn2);
423        linkp.appendChild(linkbtn3);
424        linkp.appendChild(linkbtn4);
425
426        linkl.innerHTML = LANG['mediatarget'];
427
428        linkimg1.src = '/lib/images/image_info.png';
429        linkimg2.src = '/lib/images/image_link.png';
430        linkimg3.src = '/lib/images/image.png';
431        linkimg4.src = '/lib/images/link.png';
432
433        linkbtn1.setAttribute('class','button');
434        linkbtn1.appendChild(linkimg1);
435        linkbtn1.value = '1';
436        linkbtn1.id    = "media__linkbtn1";
437        linkbtn1.title = LANG['medialnk'];
438        linkbtn1.style.borderStyle = 'outset';
439        addEvent(linkbtn1,'click',function(event){ return media_manager.setlink(event,this); });
440
441        linkbtn2.setAttribute('class','button');
442        linkbtn2.appendChild(linkimg2);
443        linkbtn2.value = '2';
444        linkbtn2.id = "media__linkbtn2";
445        linkbtn2.title = LANG['mediadirect'];
446        linkbtn2.style.borderStyle = 'outset';
447        addEvent(linkbtn2,'click',function(event){ return media_manager.setlink(event,this); });
448
449        linkbtn3.setAttribute('class','button');
450        linkbtn3.appendChild(linkimg3);
451        linkbtn3.value = '3';
452        linkbtn3.id = "media__linkbtn3";
453        linkbtn3.title = LANG['medianolnk'];
454        linkbtn3.style.borderStyle = 'outset';
455        addEvent(linkbtn3,'click',function(event){ return media_manager.setlink(event,this); });
456
457        linkbtn4.setAttribute('class','button');
458        linkbtn4.appendChild(linkimg4);
459        linkbtn4.value = '4';
460        linkbtn4.id = "media__linkbtn4";
461        linkbtn4.title = LANG['mediadisplaylnk'];
462        linkbtn4.style.borderStyle = 'outset';
463        addEvent(linkbtn4,'click',function(event){ return media_manager.setlink(event,this); });
464
465        media_manager.popup.appendChild(linkp);
466
467        // align
468
469        var alignp    = document.createElement('p');
470        var alignl    = document.createElement('label');
471        var alignbtn0 = document.createElement('button');
472        var alignbtn1 = document.createElement('button');
473        var alignbtn2 = document.createElement('button');
474        var alignbtn3 = document.createElement('button');
475        var alignimg0 = document.createElement('img');
476        var alignimg1 = document.createElement('img');
477        var alignimg2 = document.createElement('img');
478        var alignimg3 = document.createElement('img');
479        alignp.appendChild(alignl);
480        alignp.id = 'media__align';
481        if (media_manager.display == "2") {
482            alignp.style.display = "none";
483        }
484
485        alignp.appendChild(alignbtn0);
486        alignp.appendChild(alignbtn1);
487        alignp.appendChild(alignbtn2);
488        alignp.appendChild(alignbtn3);
489
490        alignl.innerHTML = LANG['mediaalign'];
491
492        alignimg0.src = '/lib/images/text_align_left.png';
493        alignimg1.src = '/lib/images/text_align_left.png';
494        alignimg2.src = '/lib/images/text_align_center.png';
495        alignimg3.src = '/lib/images/text_align_right.png';
496
497        alignbtn0.id    = "media__alignbtn0";
498        alignbtn0.value = '0';
499        alignbtn0.title = LANG['medianoalign'];
500        alignbtn0.setAttribute('class','button');
501        alignbtn0.appendChild(alignimg0);
502        alignbtn0.style.borderStyle = 'outset';
503        addEvent(alignbtn0,'click',function(event){ return media_manager.setalign(event,this); });
504
505        alignbtn1.id    = "media__alignbtn1";
506        alignbtn1.value = '1';
507        alignbtn1.title = LANG['medialeft'];
508        alignbtn1.setAttribute('class','button');
509        alignbtn1.appendChild(alignimg1);
510        alignbtn1.style.borderStyle = 'outset';
511        addEvent(alignbtn1,'click',function(event){ return media_manager.setalign(event,this); });
512
513        alignbtn2.value = '2';
514        alignbtn2.id    = "media__alignbtn2";
515        alignbtn2.title = LANG['mediacenter'];
516        alignbtn2.setAttribute('class','button');
517        alignbtn2.appendChild(alignimg2);
518        alignbtn2.style.borderStyle = 'outset';
519        addEvent(alignbtn2,'click',function(event){ return media_manager.setalign(event,this); });
520
521        alignbtn3.value = '3';
522        alignbtn3.id    = "media__alignbtn3";
523        alignbtn3.title = LANG['mediaright'];
524        alignbtn3.setAttribute('class','button');
525        alignbtn3.appendChild(alignimg3);
526        alignbtn3.style.borderStyle = 'outset';
527        addEvent(alignbtn3,'click',function(event){ return media_manager.setalign(event,this); });
528
529        media_manager.popup.appendChild(alignp);
530
531        // size
532
533        var sizep    = document.createElement('p');
534        var sizel    = document.createElement('label');
535        var sizebtn1 = document.createElement('button');
536        var sizebtn2 = document.createElement('button');
537        var sizebtn3 = document.createElement('button');
538        var sizebtn4 = document.createElement('button');
539        var sizeimg1 = document.createElement('img');
540        var sizeimg2 = document.createElement('img');
541        var sizeimg3 = document.createElement('img');
542        var sizeimg4 = document.createElement('img');
543        sizep.id = 'media__size';
544        if (media_manager.display == "2") {
545            sizep.style.display = "none";
546        }
547
548        sizep.appendChild(sizel);
549        sizep.appendChild(sizebtn1);
550        sizep.appendChild(sizebtn2);
551        sizep.appendChild(sizebtn3);
552        sizep.appendChild(sizebtn4);
553
554        sizel.innerHTML = LANG['mediasize'];
555
556        sizeimg1.src = '/lib/images/magifier_zoom_out.png';
557        sizeimg2.src = '/lib/images/magnifier.png';
558        sizeimg3.src = '/lib/images/magnifier_zoom_in.png';
559        sizeimg4.src = '/lib/images/magnifier_zoom_in.png';
560
561        sizebtn1.setAttribute('class','button');
562        sizebtn1.appendChild(sizeimg1);
563        sizebtn1.value = '1';
564        sizebtn1.id    = 'media__sizebtn1';
565        sizebtn1.title = LANG['mediasmall'];
566        sizebtn1.style.borderStyle = 'outset';
567        addEvent(sizebtn1,'click',function(event){ return media_manager.setsize(event,this); });
568
569        sizebtn2.setAttribute('class','button');
570        sizebtn2.appendChild(sizeimg2);
571        sizebtn2.value = '2';
572        sizebtn2.id    = 'media__sizebtn2';
573        sizebtn2.title = LANG['mediamedium'];
574        sizebtn2.style.borderStyle = 'outset';
575        addEvent(sizebtn2,'click',function(event){ return media_manager.setsize(event,this); });
576
577        sizebtn3.setAttribute('class','button');
578        sizebtn3.appendChild(sizeimg3);
579        sizebtn3.value = '3';
580        sizebtn3.id    = 'media__sizebtn3';
581        sizebtn3.title = LANG['medialarge'];
582        sizebtn3.style.borderStyle = 'outset';
583        addEvent(sizebtn3,'click',function(event){ return media_manager.setsize(event,this); });
584
585        sizebtn4.setAttribute('class','button');
586        sizebtn4.appendChild(sizeimg4);
587        sizebtn4.value = '4';
588        sizebtn4.id    = 'media__sizebtn4';
589        sizebtn4.title = LANG['mediaextralarge'];
590        sizebtn4.style.borderStyle = 'outset';
591        addEvent(sizebtn4,'click',function(event){ return media_manager.setsize(event,this); });
592
593        media_manager.popup.appendChild(sizep);
594
595        // send and close button
596
597        var btnp = document.createElement('p');
598        media_manager.popup.appendChild(btnp);
599        btnp.setAttribute('class','btnlbl');
600
601        var cls = document.createElement('input');
602        cls.type  = 'button';
603        cls.setAttribute('class','button');
604        cls.value = LANG['mediaclose'];
605        btnp.appendChild(cls);
606        addEvent(cls,'click',function(event){ return media_manager.closePopup(event,this); });
607
608        var btn  = document.createElement('input');
609        btn.type = 'button';
610        btn.id   = 'media__sendbtn';
611        btn.setAttribute('class','button');
612        btn.value = LANG['mediainsert'];
613        btnp.appendChild(btn);
614        addEvent(btn,'click',function(event){ return media_manager.insert(event); });
615    },
616
617    /**
618     * Insert the clicked image into the opener's textarea
619     *
620     * @author Andreas Gohr <andi@splitbrain.org>
621     * @author Dominik Eckelmann <eckelmann@cosmocode.de>
622     */
623    insert: function(event){
624        var id = media_manager.id;
625        // set syntax options
626        $('media__popup').style.display = 'none';
627
628        var opts       = '';
629        var optsstart  = '';
630        var alignleft  = '';
631        var alignright = '';
632
633        if (media_manager.ext == 'img' || media_manager.ext == 'swf') {
634
635            if (media_manager.link == '4') {
636                    opts = '?linkonly';
637            } else {
638
639                if (media_manager.link == "3" && media_manager.ext == 'img') {
640                    opts = '?nolink';
641                    optsstart = true;
642                } else if (media_manager.link == "2" && media_manager.ext == 'img') {
643                    opts = '?direct';
644                    optsstart = true;
645                }
646
647                var s = parseInt(media_manager.size);
648
649                if (s && s >= 1) {
650                    opts += (optsstart)?'&':'?';
651                    if (s=="1") {
652                        opts += '100';
653                        if (media_manager.ext == 'swf') {
654                            opts += 'x62';
655                        }
656                    } else if (s=="2") {
657                        opts += '200';
658                        if (media_manager.ext == 'swf') {
659                            opts += 'x123';
660                        }
661                    } else if (s=="3"){
662                        opts += '300';
663                        if (media_manager.ext == 'swf') {
664                            opts += 'x185';
665                        }
666                    } else if (s=="4") {
667                        opts += '400';
668                        if (media_manager.ext == 'swf') {
669                            opts += 'x247';
670                        }
671                    }
672                }
673                if (media_manager.align == '1') {
674                    alignleft = '';
675                    alignright = ' ';
676                }
677                if (media_manager.align == '2') {
678                    alignleft = ' ';
679                    alignright = ' ';
680                }
681                if (media_manager.align == '3') {
682                    alignleft = ' ';
683                    alignright = '';
684                }
685            }
686        }
687        opener.insertTags('wiki__text','{{'+alignleft+id+opts+alignright+'|','}}','');
688
689        if(!media_manager.keepopen) window.close();
690        opener.focus();
691        return false;
692    },
693
694    /**
695     * list the content of a namespace using AJAX
696     *
697     * @author Andreas Gohr <andi@splitbrain.org>
698     */
699    list: function(event,link){
700        // prepare an AJAX call to fetch the subtree
701        var ajax = new sack(DOKU_BASE + 'lib/exe/ajax.php');
702        ajax.AjaxFailedAlert = '';
703        ajax.encodeURIString = false;
704        if(ajax.failed) return true;
705
706        cleanMsgArea();
707
708        var content = $('media__content');
709        content.innerHTML = '<img src="'+DOKU_BASE+'lib/images/loading.gif" alt="..." class="load" />';
710
711        ajax.elementObj = content;
712        ajax.afterCompletion = function(){
713            media_manager.selectorattach(content);
714            media_manager.confirmattach(content);
715            media_manager.updatehide();
716            media_manager.initFlashUpload();
717        };
718        ajax.runAJAX(link.search.substr(1)+'&call=medialist');
719        return false;
720    },
721
722
723    /**
724     * Open or close a subtree using AJAX
725     *
726     * @author Andreas Gohr <andi@splitbrain.org>
727     */
728    toggle: function(event,clicky){
729        var listitem = clicky.parentNode;
730
731        // if already open, close by removing the sublist
732        var sublists = listitem.getElementsByTagName('ul');
733        if(sublists.length){
734            listitem.removeChild(sublists[0]);
735            clicky.src = DOKU_BASE+'lib/images/plus.gif';
736            return false;
737        }
738
739        // get the enclosed link (is always the first one)
740        var link = listitem.getElementsByTagName('a')[0];
741
742        // prepare an AJAX call to fetch the subtree
743        var ajax = new sack(DOKU_BASE + 'lib/exe/ajax.php');
744        ajax.AjaxFailedAlert = '';
745        ajax.encodeURIString = false;
746        if(ajax.failed) return true;
747
748        //prepare the new ul
749        var ul = document.createElement('ul');
750        //fixme add classname here
751        listitem.appendChild(ul);
752        ajax.elementObj = ul;
753        ajax.afterCompletion = function(){ media_manager.treeattach(ul); };
754        ajax.runAJAX(link.search.substr(1)+'&call=medians');
755        clicky.src = DOKU_BASE+'lib/images/minus.gif';
756        return false;
757    },
758
759    /**
760     * Prefills the wikiname.
761     *
762     * @author Andreas Gohr <andi@splitbrain.org>
763     */
764    suggest: function(){
765        var file = $('upload__file');
766        var name = $('upload__name');
767        if(!file || !name) return;
768
769        var text = file.value;
770        text = text.substr(text.lastIndexOf('/')+1);
771        text = text.substr(text.lastIndexOf('\\')+1);
772        name.value = text;
773    },
774
775
776    initFlashUpload: function(){
777        if(!hasFlash(8)) return;
778        var oform  = $('dw__upload');
779        var oflash = $('dw__flashupload');
780        if(!oform || !oflash) return;
781
782        var clicky = document.createElement('img');
783        clicky.src     = DOKU_BASE+'lib/images/multiupload.png';
784        clicky.title   = LANG['mu_btn'];
785        clicky.alt     = LANG['mu_btn'];
786        clicky.style.cursor = 'pointer';
787        clicky.onclick = function(){
788                            oform.style.display  = 'none';
789                            oflash.style.display = '';
790                         };
791        oform.appendChild(clicky);
792    },
793
794    /**
795     * closes the link type popup
796     */
797    closePopup: function(event) {
798        $('media__popup').style.display = 'none';
799    },
800
801    /**
802     * set the align
803     *
804     * @author Dominik Eckelmann <eckelmann@cosmocode.de>
805     */
806    setalign: function(event,cb){
807        if(cb.value){
808            DokuCookie.setValue('align',cb.value);
809            media_manager.align = cb.value;
810            media_manager.outSet("media__alignbtn0");
811            media_manager.outSet("media__alignbtn1");
812            media_manager.outSet("media__alignbtn2");
813            media_manager.outSet("media__alignbtn3");
814            media_manager.inSet("media__alignbtn"+cb.value);
815        }else{
816            DokuCookie.setValue('align','');
817            media_manager.align = false;
818        }
819    },
820    /**
821     * set the link type
822     *
823     * @author Dominik Eckelmann <eckelmann@cosmocode.de>
824     */
825    setlink: function(event,cb){
826        if(cb.value){
827            DokuCookie.setValue('link',cb.value);
828            media_manager.link = cb.value;
829            media_manager.outSet("media__linkbtn1");
830            media_manager.outSet("media__linkbtn2");
831            media_manager.outSet("media__linkbtn3");
832            media_manager.outSet("media__linkbtn4");
833            media_manager.inSet("media__linkbtn"+cb.value);
834            var size = document.getElementById("media__size");
835            var align = document.getElementById("media__align");
836            if (cb.value != '4') {
837                size.style.display  = "block";
838                align.style.display = "block";
839            } else {
840                size.style.display  = "none";
841                align.style.display = "none";
842            }
843        }else{
844            DokuCookie.setValue('link','');
845            media_manager.link = false;
846        }
847    },
848
849    /**
850     * set the display type
851     *
852     * @author Dominik Eckelmann <eckelmann@cosmocode.de>
853     */
854    setdisplay: function(event,cb){
855        if(cb.value){
856            DokuCookie.setValue('display',cb.value);
857            media_manager.display = cb.value;
858            media_manager.outSet("media__displaybtn1");
859            media_manager.outSet("media__displaybtn2");
860            media_manager.inSet("media__displaybtn"+cb.value);
861
862        }else{
863            DokuCookie.setValue('display','');
864            media_manager.align = false;
865        }
866    },
867
868    /**
869     * sets the border to outset
870     */
871    outSet: function(id) {
872        var ele = document.getElementById(id);
873        if (ele == null) return;
874        ele.style.borderStyle = "outset";
875    },
876    /**
877     * sets the border to inset
878     */
879    inSet: function(id) {
880        var ele = document.getElementById(id);
881        if (ele == null) return;
882        ele.style.borderStyle = "inset";
883    },
884
885    /**
886     * set the image size
887     *
888     * @author Dominik Eckelmann <eckelmann@cosmocode.de>
889     */
890    setsize: function(event,cb){
891        if (cb.value) {
892            DokuCookie.setValue('size',cb.value);
893            media_manager.size = cb.value;
894            media_manager.outSet("media__sizebtn1");
895            media_manager.outSet("media__sizebtn2");
896            media_manager.outSet("media__sizebtn3");
897            media_manager.inSet("media__sizebtn"+cb.value);
898        } else {
899            DokuCookie.setValue('size','');
900            media_manager.width = false;
901        }
902    }
903};
904
905addInitEvent(function(){
906    media_manager.treeattach($('media__tree'));
907    media_manager.selectorattach($('media__content'));
908    media_manager.confirmattach($('media__content'));
909    media_manager.attachoptions($('media__opts'));
910    media_manager.initpopup();
911    media_manager.initFlashUpload();
912});
913
914// style nach linkwiz
915