1/** 2 * JavaScript functionality 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 * Toggles the keep open state 152 * 153 * @author Andreas Gohr <andi@splitbrain.org> 154 */ 155 togglekeepopen: function(event,cb){ 156 if(cb.checked){ 157 DokuCookie.setValue('keepopen',1); 158 media_manager.keepopen = true; 159 }else{ 160 DokuCookie.setValue('keepopen',''); 161 media_manager.keepopen = false; 162 } 163 }, 164 165 /** 166 * Toggles the hide details state 167 * 168 * @author Andreas Gohr <andi@splitbrain.org> 169 */ 170 togglehide: function(event,cb){ 171 if(cb.checked){ 172 DokuCookie.setValue('hide',1); 173 media_manager.hide = true; 174 }else{ 175 DokuCookie.setValue('hide',''); 176 media_manager.hide = false; 177 } 178 media_manager.updatehide(); 179 }, 180 181 /** 182 * Sets the visibility of the image details accordingly to the 183 * chosen hide state 184 * 185 * @author Andreas Gohr <andi@splitbrain.org> 186 */ 187 updatehide: function(){ 188 var obj = $('media__content'); 189 if(!obj) return; 190 var details = getElementsByClass('detail',obj,'div'); 191 for(var i=0; i<details.length; i++){ 192 if(media_manager.hide){ 193 details[i].style.display = 'none'; 194 }else{ 195 details[i].style.display = ''; 196 } 197 } 198 }, 199 200 /** 201 * shows the popup for a image link 202 */ 203 select: function(event,link){ 204 var id = link.name.substr(2); 205 206 media_manager.id = id; 207 if(!opener){ 208 // if we don't run in popup display example 209 var ex = $('ex'+id.replace(/:/g,'_')); 210 if(ex.style.display == ''){ 211 ex.style.display = 'none'; 212 } else { 213 ex.style.display = ''; 214 } 215 return false; 216 } 217 218 media_manager.ext = false; 219 var dot = id.lastIndexOf("."); 220 if (dot != -1) { 221 var ext = id.substr(dot,id.length); 222 223 if (ext != '.jpg' && ext != '.jpeg' && ext != '.png' && ext != '.gif' && ext != '.swf') { 224 media_manager.insert(null); 225 return false; 226 } 227 } else { 228 media_manager.insert(null); 229 return false; 230 } 231 232 media_manager.popup.style.display = 'inline'; 233 media_manager.popup.style.left = event.pageX + 'px'; 234 media_manager.popup.style.top = event.pageY + 'px'; 235 236 // set all buttons to outset 237 for (var i = 1; i < 5; i++) { 238 media_manager.outSet('media__linkbtn' + i); 239 media_manager.outSet('media__alignbtn' + i); 240 media_manager.outSet('media__sizebtn' + i); 241 } 242 243 if (ext == '.swf') { 244 media_manager.ext = 'swf'; 245 246 // disable display buttons for detail and linked image 247 $('media__linkbtn1').style.display = 'none'; 248 $('media__linkbtn2').style.display = 'none'; 249 250 // set the link button to default 251 if (media_manager.link !== false) { 252 if ( media_manager.link == '2' || media_manager.link == '1') { 253 media_manager.inSet('media__linkbtn3'); 254 media_manager.link = '3'; 255 DokuCookie.setValue('link','3'); 256 } else { 257 media_manager.inSet('media__linkbtn'+media_manager.link); 258 } 259 } else if (DokuCookie.getValue('link')) { 260 if ( DokuCookie.getValue('link') == '2' || DokuCookie.getValue('link') == '1') { 261 // this options are not availible 262 media_manager.inSet('media__linkbtn3'); 263 media_manager.link = '3'; 264 DokuCookie.setValue('link','3'); 265 } else { 266 media_manager.inSet('media__linkbtn'+DokuCookie.getValue('link')); 267 media_manager.link = DokuCookie.getValue('link'); 268 } 269 } else { 270 // default case 271 media_manager.link = '3'; 272 media_manager.inSet('media__linkbtn3'); 273 DokuCookie.setValue('link','3'); 274 } 275 276 // disable button for original size 277 $('media__sizebtn4').style.display = 'none'; 278 if (media_manager.size == 4) { 279 media_manager.size = 2; 280 DokuCookie.setValue('size', '2'); 281 media_manager.inSet('media__sizebtn2'); 282 } 283 284 } else { 285 media_manager.ext = 'img'; 286 287 // ensure that the display buttons are there 288 $('media__linkbtn1').style.display = 'inline'; 289 $('media__linkbtn2').style.display = 'inline'; 290 $('media__sizebtn4').style.display = 'inline'; 291 292 // set the link button to default 293 if (DokuCookie.getValue('link')) { 294 media_manager.link = DokuCookie.getValue('link'); 295 } 296 if (!media_manager.link) { 297 // default case 298 media_manager.link = '1'; 299 DokuCookie.setValue('link','1'); 300 } 301 media_manager.inSet('media__linkbtn'+media_manager.link); 302 } 303 304 if (media_manager.link == '4') { 305 media_manager.align = false; 306 media_manager.size = false; 307 $('media__align').style.display = 'none'; 308 $('media__size').style.display = 'none'; 309 } else { 310 $('media__align').style.display = 'block'; 311 $('media__size').style.display = 'block'; 312 313 // set the align button to default 314 if (media_manager.align !== false) { 315 media_manager.inSet('media__alignbtn'+media_manager.align); 316 } else if (DokuCookie.getValue('align')) { 317 media_manager.inSet('media__alignbtn'+DokuCookie.getValue('align')); 318 media_manager.align = DokuCookie.getValue('align'); 319 } else { 320 // default case 321 media_manager.align = '1'; 322 media_manager.inSet('media__alignbtn1'); 323 DokuCookie.setValue('align','1'); 324 } 325 326 // set the size button to default 327 if (DokuCookie.getValue('size')) { 328 media_manager.size = DokuCookie.getValue('size'); 329 } 330 if (!media_manager.size || (media_manager.size === '4' && ext === '.swf')) { 331 // default case 332 media_manager.size = '2'; 333 DokuCookie.setValue('size','2'); 334 } 335 media_manager.inSet('media__sizebtn'+media_manager.size); 336 337 $('media__sendbtn').focus(); 338 } 339 340 return false; 341 }, 342 343 /** 344 * build the popup window 345 * 346 * @author Dominik Eckelmann <eckelmann@cosmocode.de> 347 */ 348 initpopup: function() { 349 350 media_manager.popup = document.createElement('div'); 351 media_manager.popup.setAttribute('id','media__popup'); 352 media_manager.popup.style.display = 'none'; 353 354 var root = document.getElementById('media__manager'); 355 if (root === null) return; 356 root.appendChild(media_manager.popup); 357 358 var headline = document.createElement('h1'); 359 headline.innerHTML = LANG.mediatitle; 360 var headlineimg = document.createElement('img'); 361 headlineimg.src = DOKU_BASE + 'lib/images/close.png'; 362 headlineimg.id = 'media__closeimg'; 363 addEvent(headlineimg,'click',function(event){ return media_manager.closePopup(event,this); }); 364 headline.insertBefore(headlineimg, headline.firstChild); 365 media_manager.popup.appendChild(headline); 366 drag.attach(media_manager.popup,headline); 367 368 // link 369 370 var linkp = document.createElement('p'); 371 372 linkp.id = "media__linkstyle"; 373 if (media_manager.display == "2") { 374 linkp.style.display = "none"; 375 } 376 377 var linkl = document.createElement('label'); 378 linkl.innerHTML = LANG.mediatarget; 379 linkp.appendChild(linkl); 380 381 var linkbtns = ['lnk', 'direct', 'nolnk', 'displaylnk']; 382 for (var i = 0 ; i < linkbtns.length ; ++i) { 383 var linkbtn = document.createElement('button'); 384 linkbtn.className = 'button'; 385 linkbtn.id = "media__linkbtn" + (i+1); 386 linkbtn.title = LANG['media' + linkbtns[i]]; 387 linkbtn.style.borderStyle = 'outset'; 388 addEvent(linkbtn,'click',function(event){ return media_manager.setlink(event,this); }); 389 390 var linkimg = document.createElement('img'); 391 linkimg.src = DOKU_BASE + 'lib/images/media_link_' + linkbtns[i] + '.png'; 392 393 linkbtn.appendChild(linkimg); 394 linkp.appendChild(linkbtn); 395 } 396 397 media_manager.popup.appendChild(linkp); 398 399 // align 400 401 var alignp = document.createElement('p'); 402 var alignl = document.createElement('label'); 403 404 alignp.appendChild(alignl); 405 alignp.id = 'media__align'; 406 if (media_manager.display == "2") { 407 alignp.style.display = "none"; 408 } 409 alignl.innerHTML = LANG['mediaalign']; 410 411 var alignbtns = ['noalign', 'left', 'center', 'right']; 412 for (var n = 0 ; n < alignbtns.length ; ++n) { 413 var alignbtn = document.createElement('button'); 414 var alignimg = document.createElement('img'); 415 alignimg.src = DOKU_BASE + 'lib/images/media_align_' + alignbtns[n] + '.png'; 416 417 alignbtn.id = "media__alignbtn" + (n+1); 418 alignbtn.title = LANG['media' + alignbtns[n]]; 419 alignbtn.className = 'button'; 420 alignbtn.appendChild(alignimg); 421 alignbtn.style.borderStyle = 'outset'; 422 addEvent(alignbtn,'click',function(event){ return media_manager.setalign(event,this); }); 423 424 alignp.appendChild(alignbtn); 425 } 426 427 media_manager.popup.appendChild(alignp); 428 429 // size 430 431 var sizep = document.createElement('p'); 432 var sizel = document.createElement('label'); 433 434 sizep.id = 'media__size'; 435 if (media_manager.display == "2") { 436 sizep.style.display = "none"; 437 } 438 sizep.appendChild(sizel); 439 sizel.innerHTML = LANG['mediasize']; 440 441 var sizebtns = ['small', 'medium', 'large', 'original']; 442 for (var size = 0 ; size < sizebtns.length ; ++size) { 443 var sizebtn = document.createElement('button'); 444 var sizeimg = document.createElement('img'); 445 446 sizep.appendChild(sizebtn); 447 sizeimg.src = DOKU_BASE + 'lib/images/media_size_' + sizebtns[size] + '.png'; 448 449 sizebtn.className = 'button'; 450 sizebtn.appendChild(sizeimg); 451 sizebtn.id = 'media__sizebtn' + (size + 1); 452 sizebtn.title = LANG['media' + sizebtns[size]]; 453 sizebtn.style.borderStyle = 'outset'; 454 addEvent(sizebtn,'click',function(event){ return media_manager.setsize(event,this); }); 455 } 456 457 media_manager.popup.appendChild(sizep); 458 459 // send and close button 460 461 var btnp = document.createElement('p'); 462 media_manager.popup.appendChild(btnp); 463 btnp.setAttribute('class','btnlbl'); 464 465 var btn = document.createElement('input'); 466 btn.type = 'button'; 467 btn.id = 'media__sendbtn'; 468 btn.setAttribute('class','button'); 469 btn.value = LANG['mediainsert']; 470 btnp.appendChild(btn); 471 addEvent(btn,'click',function(event){ return media_manager.insert(event); }); 472 }, 473 474 /** 475 * Insert the clicked image into the opener's textarea 476 * 477 * @author Andreas Gohr <andi@splitbrain.org> 478 * @author Dominik Eckelmann <eckelmann@cosmocode.de> 479 */ 480 insert: function(event){ 481 var id = media_manager.id; 482 // set syntax options 483 $('media__popup').style.display = 'none'; 484 485 var opts = ''; 486 var optsstart = ''; 487 var alignleft = ''; 488 var alignright = ''; 489 490 if (media_manager.ext == 'img' || media_manager.ext == 'swf') { 491 492 if (media_manager.link == '4') { 493 opts = '?linkonly'; 494 } else { 495 496 if (media_manager.link == "3" && media_manager.ext == 'img') { 497 opts = '?nolink'; 498 optsstart = true; 499 } else if (media_manager.link == "2" && media_manager.ext == 'img') { 500 opts = '?direct'; 501 optsstart = true; 502 } 503 504 var s = parseInt(media_manager.size, 10); 505 506 if (s && s >= 1) { 507 opts += (optsstart)?'&':'?'; 508 if (s=="1") { 509 opts += '100'; 510 if (media_manager.ext == 'swf') { 511 opts += 'x62'; 512 } 513 } else if (s=="2") { 514 opts += '200'; 515 if (media_manager.ext == 'swf') { 516 opts += 'x123'; 517 } 518 } else if (s=="3"){ 519 opts += '300'; 520 if (media_manager.ext == 'swf') { 521 opts += 'x185'; 522 } 523 } 524 } 525 if (media_manager.align == '2') { 526 alignleft = ''; 527 alignright = ' '; 528 } 529 if (media_manager.align == '3') { 530 alignleft = ' '; 531 alignright = ' '; 532 } 533 if (media_manager.align == '4') { 534 alignleft = ' '; 535 alignright = ''; 536 } 537 } 538 } 539 var edid = String.prototype.match.call(document.location, /&edid=([^&]+)/); 540 edid = edid ? edid[1] : 'wiki__text'; 541 opener.insertTags(edid,'{{'+alignleft+id+opts+alignright+'|','}}',''); 542 543 if(!media_manager.keepopen) window.close(); 544 opener.focus(); 545 return false; 546 }, 547 548 /** 549 * list the content of a namespace using AJAX 550 * 551 * @author Andreas Gohr <andi@splitbrain.org> 552 */ 553 list: function(event,link){ 554 // prepare an AJAX call to fetch the subtree 555 var ajax = new sack(DOKU_BASE + 'lib/exe/ajax.php'); 556 ajax.AjaxFailedAlert = ''; 557 ajax.encodeURIString = false; 558 if(ajax.failed) return true; 559 560 cleanMsgArea(); 561 562 var content = $('media__content'); 563 content.innerHTML = '<img src="'+DOKU_BASE+'lib/images/loading.gif" alt="..." class="load" />'; 564 565 ajax.elementObj = content; 566 ajax.afterCompletion = function(){ 567 media_manager.selectorattach(content); 568 media_manager.confirmattach(content); 569 media_manager.updatehide(); 570 media_manager.initFlashUpload(); 571 }; 572 ajax.runAJAX(link.search.substr(1)+'&call=medialist'); 573 return false; 574 }, 575 576 577 /** 578 * Open or close a subtree using AJAX 579 * 580 * @author Andreas Gohr <andi@splitbrain.org> 581 */ 582 toggle: function(event,clicky){ 583 var listitem = clicky.parentNode; 584 585 // if already open, close by removing the sublist 586 var sublists = listitem.getElementsByTagName('ul'); 587 if(sublists.length){ 588 listitem.removeChild(sublists[0]); 589 clicky.src = DOKU_BASE+'lib/images/plus.gif'; 590 return false; 591 } 592 593 // get the enclosed link (is always the first one) 594 var link = listitem.getElementsByTagName('a')[0]; 595 596 // prepare an AJAX call to fetch the subtree 597 var ajax = new sack(DOKU_BASE + 'lib/exe/ajax.php'); 598 ajax.AjaxFailedAlert = ''; 599 ajax.encodeURIString = false; 600 if(ajax.failed) return true; 601 602 //prepare the new ul 603 var ul = document.createElement('ul'); 604 //fixme add classname here 605 listitem.appendChild(ul); 606 ajax.elementObj = ul; 607 ajax.afterCompletion = function(){ media_manager.treeattach(ul); }; 608 ajax.runAJAX(link.search.substr(1)+'&call=medians'); 609 clicky.src = DOKU_BASE+'lib/images/minus.gif'; 610 return false; 611 }, 612 613 /** 614 * Prefills the wikiname. 615 * 616 * @author Andreas Gohr <andi@splitbrain.org> 617 */ 618 suggest: function(){ 619 var file = $('upload__file'); 620 var name = $('upload__name'); 621 if(!file || !name) return; 622 623 var text = file.value; 624 text = text.substr(text.lastIndexOf('/')+1); 625 text = text.substr(text.lastIndexOf('\\')+1); 626 name.value = text; 627 }, 628 629 630 initFlashUpload: function(){ 631 if(!hasFlash(8)) return; 632 var oform = $('dw__upload'); 633 var oflash = $('dw__flashupload'); 634 if(!oform || !oflash) return; 635 636 var clicky = document.createElement('img'); 637 clicky.src = DOKU_BASE+'lib/images/multiupload.png'; 638 clicky.title = LANG['mu_btn']; 639 clicky.alt = LANG['mu_btn']; 640 clicky.style.cursor = 'pointer'; 641 clicky.onclick = function(){ 642 oform.style.display = 'none'; 643 oflash.style.display = ''; 644 }; 645 oform.appendChild(clicky); 646 }, 647 648 /** 649 * closes the link type popup 650 */ 651 closePopup: function(event) { 652 $('media__popup').style.display = 'none'; 653 }, 654 655 /** 656 * set the align 657 * 658 * @author Dominik Eckelmann <eckelmann@cosmocode.de> 659 */ 660 setalign: function(event,cb){ 661 662 var id = cb.id.substring(cb.id.length -1); 663 if(id){ 664 DokuCookie.setValue('align',id); 665 media_manager.align = id; 666 for (var i = 1; i<=4; i++) { 667 media_manager.outSet("media__alignbtn" + i); 668 } 669 media_manager.inSet("media__alignbtn"+id); 670 }else{ 671 DokuCookie.setValue('align',''); 672 media_manager.align = false; 673 } 674 }, 675 /** 676 * set the link type 677 * 678 * @author Dominik Eckelmann <eckelmann@cosmocode.de> 679 */ 680 setlink: function(event,cb){ 681 var id = cb.id.substring(cb.id.length -1); 682 if(id){ 683 DokuCookie.setValue('link',id); 684 for (var i = 1; i<=4; i++) { 685 media_manager.outSet("media__linkbtn"+i); 686 } 687 media_manager.inSet("media__linkbtn"+id); 688 689 var size = document.getElementById("media__size"); 690 var align = document.getElementById("media__align"); 691 if (id != '4') { 692 size.style.display = "block"; 693 align.style.display = "block"; 694 if (media_manager.link == '4') { 695 media_manager.align = '1'; 696 DokuCookie.setValue('align', '1'); 697 media_manager.inSet('media__alignbtn1'); 698 699 media_manager.size = '2'; 700 DokuCookie.setValue('size', '2'); 701 media_manager.inSet('media__sizebtn2'); 702 } 703 704 } else { 705 size.style.display = "none"; 706 align.style.display = "none"; 707 } 708 media_manager.link = id; 709 }else{ 710 DokuCookie.setValue('link',''); 711 media_manager.link = false; 712 } 713 }, 714 715 /** 716 * set the display type 717 * 718 * @author Dominik Eckelmann <eckelmann@cosmocode.de> 719 */ 720 setdisplay: function(event,cb){ 721 if(cb.value){ 722 DokuCookie.setValue('display',cb.value); 723 media_manager.display = cb.value; 724 media_manager.outSet("media__displaybtn1"); 725 media_manager.outSet("media__displaybtn2"); 726 media_manager.inSet("media__displaybtn"+cb.value); 727 728 }else{ 729 DokuCookie.setValue('display',''); 730 media_manager.align = false; 731 } 732 }, 733 734 /** 735 * sets the border to outset 736 */ 737 outSet: function(id) { 738 var ele = document.getElementById(id); 739 if (ele == null) return; 740 ele.style.borderStyle = "outset"; 741 }, 742 /** 743 * sets the border to inset 744 */ 745 inSet: function(id) { 746 var ele = document.getElementById(id); 747 if (ele == null) return; 748 ele.style.borderStyle = "inset"; 749 }, 750 751 /** 752 * set the image size 753 * 754 * @author Dominik Eckelmann <eckelmann@cosmocode.de> 755 */ 756 setsize: function(event,cb){ 757 var id = cb.id.substring(cb.id.length -1); 758 if (id) { 759 DokuCookie.setValue('size',id); 760 media_manager.size = id; 761 for (var i = 1 ; i <=4 ; ++i) { 762 media_manager.outSet("media__sizebtn" + i); 763 } 764 media_manager.inSet("media__sizebtn"+id); 765 } else { 766 DokuCookie.setValue('size',''); 767 media_manager.width = false; 768 } 769 } 770}; 771 772addInitEvent(function(){ 773 media_manager.treeattach($('media__tree')); 774 media_manager.selectorattach($('media__content')); 775 media_manager.confirmattach($('media__content')); 776 media_manager.attachoptions($('media__opts')); 777 media_manager.initpopup(); 778 media_manager.initFlashUpload(); 779}); 780