diff --git a/lib/scripts/media.js b/lib/scripts/media.js index 961db24527442f642ef4c93d0857bca4b77e9250..fa84371621891f27951c94fe847cacc2d81d2ec9 100644 --- a/lib/scripts/media.js +++ b/lib/scripts/media.js @@ -2,6 +2,10 @@ /*global jQuery, window, DOKU_BASE*/ "use strict"; +// TODO +// * fix the css to have pointers on the +/- images in the tree when JS is enabled +// * fix the css to have pointers on a.select when JS is enabled + /** * JavaScript functionality for the media management popup * @@ -9,34 +13,56 @@ * @author Pierre Spring <pierre.spring@caillou.ch> */ (function ($) { + var toggle, list, cleanup_content; + + /** + * Prefills the wikiname. + * + * @author Andreas Gohr <andi@splitbrain.org> + */ + suggest = function(){ + var file, name, text; + + 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) { 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 sublist = listitem.find('ul').first(); + 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'); - event.preventDefault(); // TODO: really here? return; } // get the enclosed link (is always the first one) link = listitem.find('a').first(); - + //prepare the new ul ul = $('<ul/>'); //fixme add classname here - + $.post( DOKU_BASE + 'lib/exe/ajax.php', link.attr('search').substr(1) + '&call=medians', @@ -46,77 +72,230 @@ }, 'html' ); - + clicky.attr('src', DOKU_BASE + 'lib/images/minus.gif'); }; - - $(function () { - $('#media__tree').delegate('img', 'click', toggle); - }); -}(jQuery)); - -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 + * list the content of a namespace using AJAX * * @author Andreas Gohr <andi@splitbrain.org> + * @author Pierre Spring <pierre.spring@caillou.ch> */ - treeattach: function(obj){ - if(!obj) return; + list = function (event) { + var link, content; + link = $(this); - var items = obj.getElementsByTagName('li'); - for(var i=0; i<items.length; i++){ - var elem = items[i]; + event.preventDefault(); - // 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); }); + cleanMsgArea(); + content = $('#media__content'); + content.html('<img src="' + DOKU_BASE + 'lib/images/loading.gif" alt="..." class="load" />'); - // 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); }); - } - }, + // fetch the subtree + $.post( + DOKU_BASE + 'lib/exe/ajax.php', + link.attr('search').substr(1)+'&call=medialist', + function (data) { + content.html(data); + cleanup_content(content); - /** - * 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); }); - } + content = content[0]; + media_manager.confirmattach(content); + media_manager.updatehide(); + media_manager.initFlashUpload(); + }, + 'html' + ); + + }; + cleanup_content = function (content) { // hide syntax example - items = getElementsByClass('example',obj,'div'); - for(var i=0; i<items.length; i++){ - elem = items[i]; - elem.style.display = 'none'; - } + content.find('div.example:visible').hide(); + }; - var file = $('upload__file'); - if(!file) return; - addEvent(file,'change',media_manager.suggest); - }, + /** + * shows the popup for a image link + */ + select = function(event){ + var link, id; + + event.preventDefault(); + + link = $(this); + id = link.attr('name').substr(2); + + media_manager.id = id; ///////////////////////////////////////////// + + 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; + } + + // pierre: continue here + link = link[0]; + + 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 + media_manager.outSet('media__linkbtn1'); + media_manager.outSet('media__linkbtn2'); + media_manager.outSet('media__linkbtn3'); + media_manager.outSet('media__linkbtn4'); + + media_manager.outSet('media__alignbtn0'); + media_manager.outSet('media__alignbtn1'); + media_manager.outSet('media__alignbtn2'); + media_manager.outSet('media__alignbtn3'); + + media_manager.outSet('media__sizebtn1'); + media_manager.outSet('media__sizebtn2'); + media_manager.outSet('media__sizebtn3'); + media_manager.outSet('media__sizebtn4'); + + + 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'; + + } 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 == false) { + // 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 = '0'; + media_manager.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'); + } + media_manager.inSet('media__sizebtn'+media_manager.size); + + $('media__sendbtn').focus(); + } + + return false; + }; + + + $(function () { + var content = $('#media__content'); + cleanup_content(content); + + // 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) + + $('#media__tree').delegate('img', 'click', toggle) + .delegate('a', 'click', list); + }); +}(jQuery)); + +var media_manager = { + keepopen: false, + hide: false, + align: false, + popup: false, + id: false, + display: false, + link: false, + size: false, + ext: false, /** * Attach deletion confirmation dialog to the delete buttons. @@ -249,154 +428,6 @@ var media_manager = { } }, - /** - * 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 - media_manager.outSet('media__linkbtn1'); - media_manager.outSet('media__linkbtn2'); - media_manager.outSet('media__linkbtn3'); - media_manager.outSet('media__linkbtn4'); - - media_manager.outSet('media__alignbtn0'); - media_manager.outSet('media__alignbtn1'); - media_manager.outSet('media__alignbtn2'); - media_manager.outSet('media__alignbtn3'); - - media_manager.outSet('media__sizebtn1'); - media_manager.outSet('media__sizebtn2'); - media_manager.outSet('media__sizebtn3'); - media_manager.outSet('media__sizebtn4'); - - - 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'; - - } 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 == false) { - // 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 = '0'; - media_manager.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'); - } - media_manager.inSet('media__sizebtn'+media_manager.size); - - $('media__sendbtn').focus(); - } - - return false; - }, - /** * build the popup window * @@ -602,51 +633,6 @@ var media_manager = { return false; }, - /** - * list the content of a namespace using AJAX - * - * @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(); - - 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; - }, - - /** - * Prefills the wikiname. - * - * @author Andreas Gohr <andi@splitbrain.org> - */ - suggest: function(){ - var file = $('upload__file'); - var name = $('upload__name'); - if(!file || !name) return; - - var text = file.value; - text = text.substr(text.lastIndexOf('/')+1); - text = text.substr(text.lastIndexOf('\\')+1); - name.value = text; - }, - - initFlashUpload: function(){ if(!hasFlash(8)) return; var oform = $('dw__upload'); @@ -778,7 +764,6 @@ var media_manager = { 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();