summaryrefslogtreecommitdiff
path: root/lib/scripts/media.js
diff options
context:
space:
mode:
Diffstat (limited to 'lib/scripts/media.js')
-rw-r--r--lib/scripts/media.js968
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));