diff options
author | Michael Hamann <michael@content-space.de> | 2011-05-29 22:57:55 +0200 |
---|---|---|
committer | Michael Hamann <michael@content-space.de> | 2011-05-29 23:08:38 +0200 |
commit | 79344f5bffd7dfe74cbfe5e4362425dda4f5b7af (patch) | |
tree | 178492676b091c03ec52f3a99ad0d089447df823 /lib/scripts/media.js | |
parent | 5ff127375bd2292958b989dcec18dbca5a8a751f (diff) | |
parent | 61a2640a5e066cac3e06f2673c63622d59da2e8d (diff) | |
download | dokuwiki-79344f5bffd7dfe74cbfe5e4362425dda4f5b7af.tar.gz dokuwiki-79344f5bffd7dfe74cbfe5e4362425dda4f5b7af.zip |
Merge branch 'jquery'
Conflicts:
lib/scripts/edit.js
lib/scripts/locktimer.js
Some whitespace (at end of line) cleanup
Diffstat (limited to 'lib/scripts/media.js')
-rw-r--r-- | lib/scripts/media.js | 968 |
1 files changed, 470 insertions, 498 deletions
diff --git a/lib/scripts/media.js b/lib/scripts/media.js index 57f599163..cf4a839d9 100644 --- a/lib/scripts/media.js +++ b/lib/scripts/media.js @@ -1,372 +1,59 @@ +/*jslint white: true, onevar: true, undef: true, nomen: true, eqeqeq: true, plusplus: true, bitwise: true, regexp: false, strict: true, newcap: true, immed: true */ +/*global jQuery, window, DOKU_BASE*/ +"use strict"; + +// * refactor once the jQuery port is over ;) + /** * JavaScript functionality for the media management popup * * @author Andreas Gohr <andi@splitbrain.org> + * @author Pierre Spring <pierre.spring@caillou.ch> */ -var media_manager = { - keepopen: false, - hide: false, - align: false, - popup: false, - id: false, - display: false, - link: false, - size: false, - ext: false, - - /** - * Attach event handlers to all "folders" below the given element - * - * @author Andreas Gohr <andi@splitbrain.org> - */ - treeattach: function(obj){ - if(!obj) return; - - var items = obj.getElementsByTagName('li'); - for(var i=0; i<items.length; i++){ - var elem = items[i]; - - // attach action to make the +/- clickable - var clicky = elem.getElementsByTagName('img')[0]; - clicky.style.cursor = 'pointer'; - addEvent(clicky,'click',function(event){ return media_manager.toggle(event,this); }); - - // attach action load folder list via AJAX - var link = elem.getElementsByTagName('a')[0]; - link.style.cursor = 'pointer'; - addEvent(link,'click',function(event){ return media_manager.list(event,this); }); - } - }, - - /** - * Attach the image selector action to all links below the given element - * also add the action to autofill the "upload as" field - * - * @author Andreas Gohr <andi@splitbrain.org> - */ - selectorattach: function(obj){ - if(!obj) return; - - var items = getElementsByClass('select',obj,'a'); - for(var i=0; i<items.length; i++){ - var elem = items[i]; - elem.style.cursor = 'pointer'; - addEvent(elem,'click',function(event){ return media_manager.select(event,this); }); - } - - // hide syntax example - items = getElementsByClass('example',obj,'div'); - for(var i=0; i<items.length; i++){ - elem = items[i]; - elem.style.display = 'none'; - } - - var file = $('upload__file'); - if(!file) return; - addEvent(file,'change',media_manager.suggest); - }, - - /** - * Attach deletion confirmation dialog to the delete buttons. - * - * Michael Klier <chi@chimeric.de> - */ - confirmattach: function(obj){ - if(!obj) return; - - items = getElementsByClass('btn_media_delete',obj,'a'); - for(var i=0; i<items.length; i++){ - var elem = items[i]; - addEvent(elem,'click',function(e){ - if(e.target.tagName == 'IMG'){ - var name = e.target.parentNode.title; - }else{ - var name = e.target.title; - } - if(!confirm(LANG['del_confirm'] + "\n" + name)) { - e.preventDefault(); - return false; - } else { - return true; - } - }); - } - }, - - /** - * Creates checkboxes for additional options - * - * @author Andreas Gohr <andi@splitbrain.org> - */ - attachoptions: function(obj){ - if(!obj) return; - - // keep open - if(opener){ - var kobox = document.createElement('input'); - kobox.type = 'checkbox'; - kobox.id = 'media__keepopen'; - if(DokuCookie.getValue('keepopen')){ - kobox.checked = true; - kobox.defaultChecked = true; //IE wants this - media_manager.keepopen = true; - } - addEvent(kobox,'click',function(event){ return media_manager.togglekeepopen(event,this); }); - - var kolbl = document.createElement('label'); - kolbl.htmlFor = 'media__keepopen'; - kolbl.innerHTML = LANG['keepopen']; - - var kobr = document.createElement('br'); - - obj.appendChild(kobox); - obj.appendChild(kolbl); - obj.appendChild(kobr); - } - - // hide details - var hdbox = document.createElement('input'); - hdbox.type = 'checkbox'; - hdbox.id = 'media__hide'; - if(DokuCookie.getValue('hide')){ - hdbox.checked = true; - hdbox.defaultChecked = true; //IE wants this - media_manager.hide = true; - } - addEvent(hdbox,'click',function(event){ return media_manager.togglehide(event,this); }); - - var hdlbl = document.createElement('label'); - hdlbl.htmlFor = 'media__hide'; - hdlbl.innerHTML = LANG['hidedetails']; - - var hdbr = document.createElement('br'); - - obj.appendChild(hdbox); - obj.appendChild(hdlbl); - obj.appendChild(hdbr); - media_manager.updatehide(); - }, - - /** - * Toggles the keep open state - * - * @author Andreas Gohr <andi@splitbrain.org> - */ - togglekeepopen: function(event,cb){ - if(cb.checked){ - DokuCookie.setValue('keepopen',1); - media_manager.keepopen = true; - }else{ - DokuCookie.setValue('keepopen',''); - media_manager.keepopen = false; - } - }, +(function ($) { + var toggle, list, prepare_content, insert, confirmattach, attachoptions, initpopup, updatehide, setalign, setsize, inSet, outSet, media_manager, hasFlash; - /** - * Toggles the hide details state - * - * @author Andreas Gohr <andi@splitbrain.org> - */ - togglehide: function(event,cb){ - if(cb.checked){ - DokuCookie.setValue('hide',1); - media_manager.hide = true; - }else{ - DokuCookie.setValue('hide',''); - media_manager.hide = false; - } - media_manager.updatehide(); - }, + var media_manager = { + keepopen: false, + hide: false, + align: false, + popup: false, + display: false, + link: false, + size: false, + ext: false, + }; - /** - * Sets the visibility of the image details accordingly to the - * chosen hide state - * - * @author Andreas Gohr <andi@splitbrain.org> - */ - updatehide: function(){ - var obj = $('media__content'); - if(!obj) return; - var details = getElementsByClass('detail',obj,'div'); - for(var i=0; i<details.length; i++){ - if(media_manager.hide){ - details[i].style.display = 'none'; - }else{ - details[i].style.display = ''; - } - } - }, - /** - * shows the popup for a image link - */ - select: function(event,link){ - var id = link.name.substr(2); - - media_manager.id = id; - if(!opener){ - // if we don't run in popup display example - var ex = $('ex'+id.replace(/:/g,'_')); - if(ex.style.display == ''){ - ex.style.display = 'none'; - } else { - ex.style.display = ''; - } - return false; - } - - media_manager.ext = false; - var dot = id.lastIndexOf("."); - if (dot != -1) { - var ext = id.substr(dot,id.length); - - if (ext != '.jpg' && ext != '.jpeg' && ext != '.png' && ext != '.gif' && ext != '.swf') { - media_manager.insert(null); - return false; - } - } else { - media_manager.insert(null); - return false; - } - media_manager.popup.style.display = 'inline'; - media_manager.popup.style.left = event.pageX + 'px'; - media_manager.popup.style.top = event.pageY + 'px'; - - // set all buttons to outset - for (var i = 1; i < 5; i++) { - media_manager.outSet('media__linkbtn' + i); - media_manager.outSet('media__alignbtn' + i); - media_manager.outSet('media__sizebtn' + i); - } - - if (ext == '.swf') { - media_manager.ext = 'swf'; - - // disable display buttons for detail and linked image - $('media__linkbtn1').style.display = 'none'; - $('media__linkbtn2').style.display = 'none'; - - // set the link button to default - if (media_manager.link !== false) { - if ( media_manager.link == '2' || media_manager.link == '1') { - media_manager.inSet('media__linkbtn3'); - media_manager.link = '3'; - DokuCookie.setValue('link','3'); - } else { - media_manager.inSet('media__linkbtn'+media_manager.link); - } - } else if (DokuCookie.getValue('link')) { - if ( DokuCookie.getValue('link') == '2' || DokuCookie.getValue('link') == '1') { - // this options are not availible - media_manager.inSet('media__linkbtn3'); - media_manager.link = '3'; - DokuCookie.setValue('link','3'); - } else { - media_manager.inSet('media__linkbtn'+DokuCookie.getValue('link')); - media_manager.link = DokuCookie.getValue('link'); - } - } else { - // default case - media_manager.link = '3'; - media_manager.inSet('media__linkbtn3'); - DokuCookie.setValue('link','3'); - } - - // disable button for original size - $('media__sizebtn4').style.display = 'none'; - if (media_manager.size == 4) { - media_manager.size = 2; - DokuCookie.setValue('size', '2'); - media_manager.inSet('media__sizebtn2'); - } - - } else { - media_manager.ext = 'img'; - - // ensure that the display buttons are there - $('media__linkbtn1').style.display = 'inline'; - $('media__linkbtn2').style.display = 'inline'; - $('media__sizebtn4').style.display = 'inline'; - - // set the link button to default - if (DokuCookie.getValue('link')) { - media_manager.link = DokuCookie.getValue('link'); - } - if (!media_manager.link) { - // default case - media_manager.link = '1'; - DokuCookie.setValue('link','1'); - } - media_manager.inSet('media__linkbtn'+media_manager.link); - } - - if (media_manager.link == '4') { - media_manager.align = false; - media_manager.size = false; - $('media__align').style.display = 'none'; - $('media__size').style.display = 'none'; - } else { - $('media__align').style.display = 'block'; - $('media__size').style.display = 'block'; - - // set the align button to default - if (media_manager.align !== false) { - media_manager.inSet('media__alignbtn'+media_manager.align); - } else if (DokuCookie.getValue('align')) { - media_manager.inSet('media__alignbtn'+DokuCookie.getValue('align')); - media_manager.align = DokuCookie.getValue('align'); - } else { - // default case - media_manager.align = '1'; - media_manager.inSet('media__alignbtn1'); - DokuCookie.setValue('align','1'); - } - - // set the size button to default - if (DokuCookie.getValue('size')) { - media_manager.size = DokuCookie.getValue('size'); - } - if (!media_manager.size || (media_manager.size === '4' && ext === '.swf')) { - // default case - media_manager.size = '2'; - DokuCookie.setValue('size','2'); - } - media_manager.inSet('media__sizebtn'+media_manager.size); - - $('media__sendbtn').focus(); - } - - return false; - }, /** * build the popup window * * @author Dominik Eckelmann <eckelmann@cosmocode.de> */ - initpopup: function() { + initpopup = function() { + var popup; - media_manager.popup = document.createElement('div'); - media_manager.popup.setAttribute('id','media__popup'); - media_manager.popup.style.display = 'none'; + popup = document.createElement('div'); + popup.setAttribute('id','media__popup'); + popup.style.display = "none"; var root = document.getElementById('media__manager'); if (root === null) return; - root.appendChild(media_manager.popup); + root.appendChild(popup); var headline = document.createElement('h1'); headline.innerHTML = LANG.mediatitle; var headlineimg = document.createElement('img'); headlineimg.src = DOKU_BASE + 'lib/images/close.png'; headlineimg.id = 'media__closeimg'; - addEvent(headlineimg,'click',function(event){ return media_manager.closePopup(event,this); }); + $(headlineimg).click(function () {$(popup).hide()}); headline.insertBefore(headlineimg, headline.firstChild); - media_manager.popup.appendChild(headline); - drag.attach(media_manager.popup,headline); + popup.appendChild(headline); + $(popup).draggable({handle: headline}); // link - var linkp = document.createElement('p'); linkp.id = "media__linkstyle"; @@ -385,7 +72,7 @@ var media_manager = { linkbtn.id = "media__linkbtn" + (i+1); linkbtn.title = LANG['media' + linkbtns[i]]; linkbtn.style.borderStyle = 'outset'; - addEvent(linkbtn,'click',function(event){ return media_manager.setlink(event,this); }); + $(linkbtn).click(function (event) { return setlink(event,this); }); var linkimg = document.createElement('img'); linkimg.src = DOKU_BASE + 'lib/images/media_link_' + linkbtns[i] + '.png'; @@ -394,7 +81,7 @@ var media_manager = { linkp.appendChild(linkbtn); } - media_manager.popup.appendChild(linkp); + popup.appendChild(linkp); // align @@ -419,12 +106,12 @@ var media_manager = { alignbtn.className = 'button'; alignbtn.appendChild(alignimg); alignbtn.style.borderStyle = 'outset'; - addEvent(alignbtn,'click',function(event){ return media_manager.setalign(event,this); }); + $(alignbtn).click(function (event) { return setalign(event,this); }); alignp.appendChild(alignbtn); } - media_manager.popup.appendChild(alignp); + popup.appendChild(alignp); // size @@ -451,15 +138,15 @@ var media_manager = { sizebtn.id = 'media__sizebtn' + (size + 1); sizebtn.title = LANG['media' + sizebtns[size]]; sizebtn.style.borderStyle = 'outset'; - addEvent(sizebtn,'click',function(event){ return media_manager.setsize(event,this); }); + $(sizebtn).click(function (event) { return setsize(event,this); }); } - media_manager.popup.appendChild(sizep); + popup.appendChild(sizep); // send and close button var btnp = document.createElement('p'); - media_manager.popup.appendChild(btnp); + popup.appendChild(btnp); btnp.setAttribute('class','btnlbl'); var btn = document.createElement('input'); @@ -468,24 +155,45 @@ var media_manager = { btn.setAttribute('class','button'); btn.value = LANG['mediainsert']; btnp.appendChild(btn); - addEvent(btn,'click',function(event){ return media_manager.insert(event); }); - }, + }; + + // moved from helpers.js temporarily here + /** + * Very simplistic Flash plugin check, probably works for Flash 8 and higher only + * + */ + hasFlash = function(version){ + var ver = 0; + try{ + if(navigator.plugins != null && navigator.plugins.length > 0){ + ver = navigator.plugins["Shockwave Flash"].description.split(' ')[2].split('.')[0]; + }else{ + var axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash"); + ver = axo.GetVariable("$version").split(' ')[1].split(',')[0]; + } + }catch(e){ } + + if(ver >= version) return true; + return false; + }; /** * Insert the clicked image into the opener's textarea * * @author Andreas Gohr <andi@splitbrain.org> * @author Dominik Eckelmann <eckelmann@cosmocode.de> + * @author Pierre Spring <pierre.spring@caillou.ch> */ - insert: function(event){ - var id = media_manager.id; + insert = function (id) { + var opts, optsstart, alignleft, alignright; + // set syntax options - $('media__popup').style.display = 'none'; + $('#media__popup').hide(); - var opts = ''; - var optsstart = ''; - var alignleft = ''; - var alignright = ''; + opts = ''; + optsstart = ''; + alignleft = ''; + alignright = ''; if (media_manager.ext == 'img' || media_manager.ext == 'swf') { @@ -543,237 +251,501 @@ var media_manager = { if(!media_manager.keepopen) window.close(); opener.focus(); return false; - }, + }; /** - * list the content of a namespace using AJAX + * Prefills the wikiname. * * @author Andreas Gohr <andi@splitbrain.org> */ - list: function(event,link){ - // prepare an AJAX call to fetch the subtree - var ajax = new sack(DOKU_BASE + 'lib/exe/ajax.php'); - ajax.AjaxFailedAlert = ''; - ajax.encodeURIString = false; - if(ajax.failed) return true; - - cleanMsgArea(); + suggest = function(){ + var file, name, text; - var content = $('media__content'); - content.innerHTML = '<img src="'+DOKU_BASE+'lib/images/loading.gif" alt="..." class="load" />'; - - ajax.elementObj = content; - ajax.afterCompletion = function(){ - media_manager.selectorattach(content); - media_manager.confirmattach(content); - media_manager.updatehide(); - media_manager.initFlashUpload(); - }; - ajax.runAJAX(link.search.substr(1)+'&call=medialist'); - return false; - }, + file = $(this); + name = $('#upload__name'); + if(!file.size() || !name.size()) return; + text = file.val(); + text = text.substr(text.lastIndexOf('/')+1); + text = text.substr(text.lastIndexOf('\\')+1); + name.val(text); + }; /** * Open or close a subtree using AJAX * * @author Andreas Gohr <andi@splitbrain.org> + * @author Pierre Spring <pierre.spring@caillou.ch> */ - toggle: function(event,clicky){ - var listitem = clicky.parentNode; + toggle = function (event) { + var clicky, listitem, sublist, link, ul; + + event.preventDefault(); // TODO: really here? + + var clicky = $(this); + var listitem = clicky.parent(); // if already open, close by removing the sublist - var sublists = listitem.getElementsByTagName('ul'); - if(sublists.length){ - listitem.removeChild(sublists[0]); - clicky.src = DOKU_BASE+'lib/images/plus.gif'; - return false; + sublist = listitem.find('ul').first(); + if(sublist.size()){ + sublist.remove(); // TODO: really? we could just hide it, right? + clicky.attr('src', DOKU_BASE + 'lib/images/plus.gif'); + return; } // get the enclosed link (is always the first one) - var link = listitem.getElementsByTagName('a')[0]; - - // prepare an AJAX call to fetch the subtree - var ajax = new sack(DOKU_BASE + 'lib/exe/ajax.php'); - ajax.AjaxFailedAlert = ''; - ajax.encodeURIString = false; - if(ajax.failed) return true; + link = listitem.find('a').first(); //prepare the new ul - var ul = document.createElement('ul'); + ul = $('<ul/>'); + //fixme add classname here - listitem.appendChild(ul); - ajax.elementObj = ul; - ajax.afterCompletion = function(){ media_manager.treeattach(ul); }; - ajax.runAJAX(link.search.substr(1)+'&call=medians'); - clicky.src = DOKU_BASE+'lib/images/minus.gif'; - return false; - }, + + $.post( + DOKU_BASE + 'lib/exe/ajax.php', + link.attr('search').substr(1) + '&call=medians', + function (data) { + ul.html(data); + listitem.append(ul); + }, + 'html' + ); + + clicky.attr('src', DOKU_BASE + 'lib/images/minus.gif'); + }; /** - * Prefills the wikiname. + * list the content of a namespace using AJAX * * @author Andreas Gohr <andi@splitbrain.org> + * @author Pierre Spring <pierre.spring@caillou.ch> */ - suggest: function(){ - var file = $('upload__file'); - var name = $('upload__name'); - if(!file || !name) return; + list = function (event) { + var link, content; + link = $(this); - var text = file.value; - text = text.substr(text.lastIndexOf('/')+1); - text = text.substr(text.lastIndexOf('\\')+1); - name.value = text; - }, + event.preventDefault(); + + cleanMsgArea(); + content = $('#media__content'); + content.html('<img src="' + DOKU_BASE + 'lib/images/loading.gif" alt="..." class="load" />'); + + // fetch the subtree + $.post( + DOKU_BASE + 'lib/exe/ajax.php', + link.attr('search').substr(1)+'&call=medialist', + function (data) { + content.html(data); + prepare_content(content); + updatehide(); + }, + 'html' + ); + + }; + + prepare_content = function (content) { + // hide syntax example + content.find('div.example:visible').hide(); + initFlashUpload(); + }; + + /** + * shows the popup for a image link + */ + select = function(event){ + var link, id, dot, ext; + + event.preventDefault(); + + link = $(this); + id = link.attr('name').substr(2); + + if(!opener){ + // if we don't run in popup display example + // the id's are a bit wired and $('#ex_wiki_dokuwiki-128.png') will not be found + // by Sizzle (the CSS Selector Engine used by jQuery), + // hence the document.getElementById() call + $(document.getElementById('ex_'+id.replace(/:/g,'_').replace(/^_/,''))).toggle(); + return; + } + + link = link[0]; + + media_manager.ext = false; + dot = id.lastIndexOf("."); + + if (-1 === dot) { + insert(id); + return; + } + + ext = id.substr(dot); + + if (ext != '.jpg' && ext != '.jpeg' && ext != '.png' && ext != '.gif' && ext != '.swf') { + insert(id); + return; + } + + // remove old callback from the insert button and set the new one. + $('#media__sendbtn').unbind().click(function () {insert(id)}); + + $('#media__popup').show() + .css('left', event.pageX + 'px') + .css('top', event.pageY + 'px'); + + $('#media__popup button.button').each(function (index, element) { outSet(element) } ); + + + if (ext == '.swf') { + media_manager.ext = 'swf'; + + // disable display buttons for detail and linked image + $('#media__linkbtn1').hide(); + $('#media__linkbtn2').hide(); + + // set the link button to default + if (media_manager.link != false) { + if ( media_manager.link == '2' || media_manager.link == '1') { + inSet('media__linkbtn3'); + media_manager.link = '3'; + DokuCookie.setValue('link','3'); + } else { + inSet('media__linkbtn'+media_manager.link); + } + } else if (DokuCookie.getValue('link')) { + if ( DokuCookie.getValue('link') == '2' || DokuCookie.getValue('link') == '1') { + // this options are not availible + inSet('media__linkbtn3'); + media_manager.link = '3'; + DokuCookie.setValue('link','3'); + } else { + inSet('media__linkbtn'+DokuCookie.getValue('link')); + media_manager.link = DokuCookie.getValue('link'); + } + } else { + // default case + media_manager.link = '3'; + inSet('media__linkbtn3'); + DokuCookie.setValue('link','3'); + } + + // disable button for original size + $('#media__sizebtn4').hide(); + + } else { + media_manager.ext = 'img'; + + // ensure that the display buttons are there + $('#media__linkbtn1').show(); + $('#media__linkbtn2').show(); + $('#media__sizebtn4').show(); + + // set the link button to default + if (DokuCookie.getValue('link')) { + media_manager.link = DokuCookie.getValue('link'); + } + if (media_manager.link == false) { + // default case + media_manager.link = '1'; + DokuCookie.setValue('link','1'); + } + inSet('media__linkbtn'+media_manager.link); + } + + if (media_manager.link == '4') { + media_manager.align = false; + media_manager.size = false; + $('#media__align').hide(); + $('#media__size').hide(); + } else { + $('#media__align').show(); + $('#media__size').show(); + + // set the align button to default + if (media_manager.align != false) { + inSet('media__alignbtn'+media_manager.align); + } else if (DokuCookie.getValue('align')) { + inSet('media__alignbtn'+DokuCookie.getValue('align')); + media_manager.align = DokuCookie.getValue('align'); + } else { + // default case + media_manager.align = '0'; + inSet('media__alignbtn0'); + DokuCookie.setValue('align','0'); + } + + // set the size button to default + if (DokuCookie.getValue('size')) { + media_manager.size = DokuCookie.getValue('size'); + } + if (media_manager.size == false || (media_manager.size === '4' && ext === '.swf')) { + // default case + media_manager.size = '2'; + DokuCookie.setValue('size','2'); + } + inSet('media__sizebtn'+media_manager.size); + + $('#media__sendbtn').focus(); + } + + return; + }; + + /** + * Deletion confirmation dialog to the delete buttons. + * + * @author Michael Klier <chi@chimeric.de> + * @author Pierre Spring <pierre.spring@caillou.ch> + */ + confirmattach = function(e){ + if(!confirm(LANG['del_confirm'] + "\n" + jQuery(this).attr('title'))) { + e.preventDefault(); + } + }; + + /** + * Creates checkboxes for additional options + * + * @author Andreas Gohr <andi@splitbrain.org> + * @author Pierre Spring <pierre.spring@caillou.ch> + */ + attachoptions = function(){ + obj = $('#media__opts')[0]; + if(!obj) return; + + // keep open + if(opener){ + var kobox = document.createElement('input'); + kobox.type = 'checkbox'; + kobox.id = 'media__keepopen'; + if(DokuCookie.getValue('keepopen')){ + kobox.checked = true; + kobox.defaultChecked = true; //IE wants this + media_manager.keepopen = true; + } + + $(kobox).click( + function () { + toggleOption(this, 'keepopen'); + } + ); + var kolbl = document.createElement('label'); + kolbl.htmlFor = 'media__keepopen'; + kolbl.innerHTML = LANG['keepopen']; + + var kobr = document.createElement('br'); + + obj.appendChild(kobox); + obj.appendChild(kolbl); + obj.appendChild(kobr); + } - initFlashUpload: function(){ + // hide details + var hdbox = document.createElement('input'); + hdbox.type = 'checkbox'; + hdbox.id = 'media__hide'; + if(DokuCookie.getValue('hide')){ + hdbox.checked = true; + hdbox.defaultChecked = true; //IE wants this + media_manager.hide = true; + } + $(hdbox).click( + function () { + toggleOption(this, 'hide'); + updatehide(); + } + ); + + var hdlbl = document.createElement('label'); + hdlbl.htmlFor = 'media__hide'; + hdlbl.innerHTML = LANG['hidedetails']; + + var hdbr = document.createElement('br'); + + obj.appendChild(hdbox); + obj.appendChild(hdlbl); + obj.appendChild(hdbr); + updatehide(); + }; + + /** + * Generalized toggler + * + * @author Pierre Spring <pierre.spring@caillou.ch> + */ + toggleOption = function (checkbox, variable) { + if (checkbox.checked) { + DokuCookie.setValue(variable, 1); + media_manager[variable] = true; + } else { + DokuCookie.setValue(variable, ''); + media_manager[variable] = false; + } + }; + + initFlashUpload = function () { + var oform, oflash, title; if(!hasFlash(8)) return; - var oform = $('dw__upload'); - var oflash = $('dw__flashupload'); - if(!oform || !oflash) return; - - var clicky = document.createElement('img'); - clicky.src = DOKU_BASE+'lib/images/multiupload.png'; - clicky.title = LANG['mu_btn']; - clicky.alt = LANG['mu_btn']; - clicky.style.cursor = 'pointer'; - clicky.onclick = function(){ - oform.style.display = 'none'; - oflash.style.display = ''; - }; - oform.appendChild(clicky); - }, + + oform = $('#dw__upload'); + oflash = $('#dw__flashupload'); + + if(!oform.size() || !oflash.size()) return; + + title = LANG['mu_btn']; + + $('<img/>').attr('src', DOKU_BASE+'lib/images/multiupload.png') + .attr('title', title) + .attr('alt', title) + .css('cursor', 'pointer') + .click( + function () { + oform.hide(); + oflash.show(); + } + ) + .appendTo(oform); + }; /** - * closes the link type popup + * Sets the visibility of the image details accordingly to the + * chosen hide state + * + * @author Andreas Gohr <andi@splitbrain.org> */ - closePopup: function(event) { - $('media__popup').style.display = 'none'; - }, + updatehide = function(){ + var content = $('#media__content'); + if(0 === content.size()) { + return; + } + content.find('div.detail').each( + function (index, element) { + if(media_manager.hide){ + element.style.display = 'none'; + }else{ + element.style.display = ''; + } + } + + ); + }; /** * set the align * * @author Dominik Eckelmann <eckelmann@cosmocode.de> */ - setalign: function(event,cb){ + setalign = function(event,cb){ var id = cb.id.substring(cb.id.length -1); if(id){ DokuCookie.setValue('align',id); media_manager.align = id; for (var i = 1; i<=4; i++) { - media_manager.outSet("media__alignbtn" + i); + outSet("media__alignbtn" + i); } - media_manager.inSet("media__alignbtn"+id); + inSet("media__alignbtn"+id); }else{ DokuCookie.setValue('align',''); media_manager.align = false; } - }, + }; + /** * set the link type * * @author Dominik Eckelmann <eckelmann@cosmocode.de> */ - setlink: function(event,cb){ + setlink = function(event,cb){ var id = cb.id.substring(cb.id.length -1); if(id){ DokuCookie.setValue('link',id); for (var i = 1; i<=4; i++) { - media_manager.outSet("media__linkbtn"+i); + outSet("media__linkbtn"+i); } - media_manager.inSet("media__linkbtn"+id); + inSet("media__linkbtn"+id); - var size = document.getElementById("media__size"); - var align = document.getElementById("media__align"); + var size = $("#media__size"); + var align = $("#media__align"); if (id != '4') { - size.style.display = "block"; - align.style.display = "block"; + size.show(); + align.show(); if (media_manager.link == '4') { media_manager.align = '1'; DokuCookie.setValue('align', '1'); - media_manager.inSet('media__alignbtn1'); + inSet('media__alignbtn1'); media_manager.size = '2'; DokuCookie.setValue('size', '2'); - media_manager.inSet('media__sizebtn2'); + inSet('media__sizebtn2'); } } else { - size.style.display = "none"; - align.style.display = "none"; + size.hide(); + align.hide(); } media_manager.link = id; }else{ DokuCookie.setValue('link',''); media_manager.link = false; } - }, - - /** - * set the display type - * - * @author Dominik Eckelmann <eckelmann@cosmocode.de> - */ - setdisplay: function(event,cb){ - if(cb.value){ - DokuCookie.setValue('display',cb.value); - media_manager.display = cb.value; - media_manager.outSet("media__displaybtn1"); - media_manager.outSet("media__displaybtn2"); - media_manager.inSet("media__displaybtn"+cb.value); - - }else{ - DokuCookie.setValue('display',''); - media_manager.align = false; - } - }, - - /** - * sets the border to outset - */ - outSet: function(id) { - var ele = document.getElementById(id); - if (ele == null) return; - ele.style.borderStyle = "outset"; - }, - /** - * sets the border to inset - */ - inSet: function(id) { - var ele = document.getElementById(id); - if (ele == null) return; - ele.style.borderStyle = "inset"; - }, + }; /** * set the image size * * @author Dominik Eckelmann <eckelmann@cosmocode.de> */ - setsize: function(event,cb){ + setsize = function(event,cb){ var id = cb.id.substring(cb.id.length -1); if (id) { DokuCookie.setValue('size',id); media_manager.size = id; for (var i = 1 ; i <=4 ; ++i) { - media_manager.outSet("media__sizebtn" + i); + outSet("media__sizebtn" + i); } - media_manager.inSet("media__sizebtn"+id); + inSet("media__sizebtn"+id); } else { DokuCookie.setValue('size',''); media_manager.width = false; } - } -}; - -addInitEvent(function(){ - media_manager.treeattach($('media__tree')); - media_manager.selectorattach($('media__content')); - media_manager.confirmattach($('media__content')); - media_manager.attachoptions($('media__opts')); - media_manager.initpopup(); - media_manager.initFlashUpload(); -}); + }; + + /** + * sets the border to inset + */ + inSet = function(id) { + var ele = $('#' + id).css('border-style', 'inset'); + }; + + /** + * sets the border to outset + */ + outSet = function(element) { + if ('string' === typeof element) { + element = '#' + element; + } + $(element).css('border-style', 'outset'); + }; + + $(function () { + var content = $('#media__content'); + prepare_content(content); + + attachoptions(); + initpopup(); + + // add the action to autofill the "upload as" field + content.delegate('#upload__file', 'change', suggest) + // Attach the image selector action to all links + .delegate('a.select', 'click', select) + // Attach deletion confirmation dialog to the delete buttons + .delegate('#media__content a.btn_media_delete', 'click', confirmattach); + + + $('#media__tree').delegate('img', 'click', toggle) + .delegate('a', 'click', list); + }); +}(jQuery)); |