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