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