From 149e5f262e67264b1612d6c62a67b30341186dd8 Mon Sep 17 00:00:00 2001 From: Dominik Eckelmann <eckelmann@cosmocode.de> Date: Thu, 18 Feb 2010 11:59:28 +0100 Subject: [PATCH] extended mediamanager options --- inc/lang/en/lang.php | 22 ++ lib/scripts/media.js | 572 +++++++++++++++++++++++++++++++++++++- lib/tpl/default/media.css | 93 +++++++ 3 files changed, 682 insertions(+), 5 deletions(-) diff --git a/inc/lang/en/lang.php b/inc/lang/en/lang.php index 98ded12ca..82e414cd3 100644 --- a/inc/lang/en/lang.php +++ b/inc/lang/en/lang.php @@ -129,6 +129,28 @@ $lang['mediaroot'] = 'root'; $lang['mediaupload'] = 'Upload a file to the current namespace here. To create subnamespaces, prepend them to your "Upload as" filename separated by colons.'; $lang['mediaextchange'] = 'Filextension changed from .%s to .%s!'; +$lang['js']['mediatitle'] = 'Link settings'; +$lang['js']['mediadisplay'] = 'Link type'; +$lang['js']['mediaalign'] = 'Alignment'; +$lang['js']['mediasize'] = 'Image size'; +$lang['js']['mediatarget'] = 'Link target'; +$lang['js']['mediaclose'] = 'Close'; +$lang['js']['mediainsert'] = 'Insert'; +$lang['js']['mediadisplayimg'] = 'Show the image.'; +$lang['js']['mediadisplaylnk'] = 'Show only the link.'; +$lang['js']['mediasmall'] = 'Small version'; +$lang['js']['mediamedium'] = 'Medium version'; +$lang['js']['medialarge'] = 'Large version'; +$lang['js']['mediaextralarge'] = 'Extra large version'; +$lang['js']['medialnk'] = 'Link to detail page'; +$lang['js']['mediadirect'] = 'Direct link to original'; +$lang['js']['medianolnk'] = 'No link'; +$lang['js']['medianolink'] = 'Do not link the image'; +$lang['js']['medialeft'] = 'Align the image on the left.'; +$lang['js']['mediaright'] = 'Align the image on the right.'; +$lang['js']['mediacenter'] = 'Align the image in the middle.'; +$lang['js']['medianoalign'] = 'Use no align.'; + $lang['reference'] = 'References for'; $lang['ref_inuse'] = 'The file can\'t be deleted, because it\'s still used by the following pages:'; $lang['ref_hidden'] = 'Some references are on pages you don\'t have permission to read'; diff --git a/lib/scripts/media.js b/lib/scripts/media.js index 3e4213f19..3f0a8fb65 100644 --- a/lib/scripts/media.js +++ b/lib/scripts/media.js @@ -6,6 +6,13 @@ 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 @@ -218,24 +225,466 @@ var media_manager = { }, /** - * Insert the clicked image into the opener's textarea - * - * @author Andreas Gohr <andi@splitbrain.org> + * 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{ + } else { ex.style.display = ''; } return false; } - opener.insertTags('wiki__text','{{'+id+'|','}}',''); + + 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'); + } + + } else { + media_manager.ext = 'img'; + + // ensure that the display buttens are there + $('media__linkbtn1').style.display = 'inline'; + $('media__linkbtn2').style.display = 'inline'; + + // set the link button to default + if (media_manager.link != false) { + media_manager.inSet('media__linkbtn'+media_manager.link); + } else if (DokuCookie.getValue('link')) { + media_manager.inSet('media__linkbtn'+DokuCookie.getValue('link')); + media_manager.link = DokuCookie.getValue('link'); + } else { + // default case + media_manager.link = '1'; + media_manager.inSet('media__linkbtn1'); + DokuCookie.setValue('link','1'); + } + } + + 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 (media_manager.size != false) { + media_manager.inSet('media__sizebtn'+media_manager.size); + } else if (DokuCookie.getValue('size')) { + media_manager.inSet('media__sizebtn'+DokuCookie.getValue('size')); + media_manager.size = DokuCookie.getValue('size'); + } else { + // default case + media_manager.size = '2'; + media_manager.inSet('media__sizebtn2'); + DokuCookie.setValue('size','2'); + } + + + $('media__sendbtn').focus(); + } + + return false; + }, + + /** + * build the popup window + * + * @author Dominik Eckelmann <eckelmann@cosmocode.de> + */ + initpopup: function() { + + media_manager.popup = document.createElement('div'); + media_manager.popup.setAttribute('id','media__popup'); + + var root = document.getElementById('media__manager'); + if (root == null) return; + root.appendChild(media_manager.popup); + + var headline = document.createElement('h1'); + var headlineimg = document.createElement('img'); + var headtext = document.createElement('span'); + headlineimg.src = '/lib/images/close.png'; + headlineimg.id = 'media__closeimg'; + addEvent(headlineimg,'click',function(event){ return media_manager.closePopup(event,this); }); + headline.appendChild(headlineimg); + headtext.textContent = LANG['mediatitle']; + headline.appendChild(headtext); + media_manager.popup.appendChild(headline); + drag.attach(media_manager.popup,headline); + + // link + + var linkp = document.createElement('p'); + var linkl = document.createElement('label'); + var linkbtn1 = document.createElement('button'); + var linkbtn2 = document.createElement('button'); + var linkbtn3 = document.createElement('button'); + var linkbtn4 = document.createElement('button'); + var linkimg1 = document.createElement('img'); + var linkimg2 = document.createElement('img'); + var linkimg3 = document.createElement('img'); + var linkimg4 = document.createElement('img'); + + linkp.id = "media__linkstyle"; + if (media_manager.display == "2") { + linkp.style.display = "none"; + } + + linkp.appendChild(linkl); + linkp.appendChild(linkbtn1); + linkp.appendChild(linkbtn2); + linkp.appendChild(linkbtn3); + linkp.appendChild(linkbtn4); + + linkl.innerHTML = LANG['mediatarget']; + + linkimg1.src = '/lib/images/image_info.png'; + linkimg2.src = '/lib/images/image_link.png'; + linkimg3.src = '/lib/images/image.png'; + linkimg4.src = '/lib/images/link.png'; + + linkbtn1.setAttribute('class','button'); + linkbtn1.appendChild(linkimg1); + linkbtn1.value = '1'; + linkbtn1.id = "media__linkbtn1"; + linkbtn1.title = LANG['medialnk']; + linkbtn1.style.borderStyle = 'outset'; + addEvent(linkbtn1,'click',function(event){ return media_manager.setlink(event,this); }); + + linkbtn2.setAttribute('class','button'); + linkbtn2.appendChild(linkimg2); + linkbtn2.value = '2'; + linkbtn2.id = "media__linkbtn2"; + linkbtn2.title = LANG['mediadirect']; + linkbtn2.style.borderStyle = 'outset'; + addEvent(linkbtn2,'click',function(event){ return media_manager.setlink(event,this); }); + + linkbtn3.setAttribute('class','button'); + linkbtn3.appendChild(linkimg3); + linkbtn3.value = '3'; + linkbtn3.id = "media__linkbtn3"; + linkbtn3.title = LANG['medianolnk']; + linkbtn3.style.borderStyle = 'outset'; + addEvent(linkbtn3,'click',function(event){ return media_manager.setlink(event,this); }); + + linkbtn4.setAttribute('class','button'); + linkbtn4.appendChild(linkimg4); + linkbtn4.value = '4'; + linkbtn4.id = "media__linkbtn4"; + linkbtn4.title = LANG['mediadisplaylnk']; + linkbtn4.style.borderStyle = 'outset'; + addEvent(linkbtn4,'click',function(event){ return media_manager.setlink(event,this); }); + + media_manager.popup.appendChild(linkp); + + // align + + var alignp = document.createElement('p'); + var alignl = document.createElement('label'); + var alignbtn0 = document.createElement('button'); + var alignbtn1 = document.createElement('button'); + var alignbtn2 = document.createElement('button'); + var alignbtn3 = document.createElement('button'); + var alignimg0 = document.createElement('img'); + var alignimg1 = document.createElement('img'); + var alignimg2 = document.createElement('img'); + var alignimg3 = document.createElement('img'); + alignp.appendChild(alignl); + alignp.id = 'media__align'; + if (media_manager.display == "2") { + alignp.style.display = "none"; + } + + alignp.appendChild(alignbtn0); + alignp.appendChild(alignbtn1); + alignp.appendChild(alignbtn2); + alignp.appendChild(alignbtn3); + + alignl.innerHTML = LANG['mediaalign']; + + alignimg0.src = '/lib/images/text_align_left.png'; + alignimg1.src = '/lib/images/text_align_left.png'; + alignimg2.src = '/lib/images/text_align_center.png'; + alignimg3.src = '/lib/images/text_align_right.png'; + + alignbtn0.id = "media__alignbtn0"; + alignbtn0.value = '0'; + alignbtn0.title = LANG['medianoalign']; + alignbtn0.setAttribute('class','button'); + alignbtn0.appendChild(alignimg0); + alignbtn0.style.borderStyle = 'outset'; + addEvent(alignbtn0,'click',function(event){ return media_manager.setalign(event,this); }); + + alignbtn1.id = "media__alignbtn1"; + alignbtn1.value = '1'; + alignbtn1.title = LANG['medialeft']; + alignbtn1.setAttribute('class','button'); + alignbtn1.appendChild(alignimg1); + alignbtn1.style.borderStyle = 'outset'; + addEvent(alignbtn1,'click',function(event){ return media_manager.setalign(event,this); }); + + alignbtn2.value = '2'; + alignbtn2.id = "media__alignbtn2"; + alignbtn2.title = LANG['mediacenter']; + alignbtn2.setAttribute('class','button'); + alignbtn2.appendChild(alignimg2); + alignbtn2.style.borderStyle = 'outset'; + addEvent(alignbtn2,'click',function(event){ return media_manager.setalign(event,this); }); + + alignbtn3.value = '3'; + alignbtn3.id = "media__alignbtn3"; + alignbtn3.title = LANG['mediaright']; + alignbtn3.setAttribute('class','button'); + alignbtn3.appendChild(alignimg3); + alignbtn3.style.borderStyle = 'outset'; + addEvent(alignbtn3,'click',function(event){ return media_manager.setalign(event,this); }); + + media_manager.popup.appendChild(alignp); + + // size + + var sizep = document.createElement('p'); + var sizel = document.createElement('label'); + var sizebtn1 = document.createElement('button'); + var sizebtn2 = document.createElement('button'); + var sizebtn3 = document.createElement('button'); + var sizebtn4 = document.createElement('button'); + var sizeimg1 = document.createElement('img'); + var sizeimg2 = document.createElement('img'); + var sizeimg3 = document.createElement('img'); + var sizeimg4 = document.createElement('img'); + sizep.id = 'media__size'; + if (media_manager.display == "2") { + sizep.style.display = "none"; + } + + sizep.appendChild(sizel); + sizep.appendChild(sizebtn1); + sizep.appendChild(sizebtn2); + sizep.appendChild(sizebtn3); + sizep.appendChild(sizebtn4); + + sizel.innerHTML = LANG['mediasize']; + + sizeimg1.src = '/lib/images/magifier_zoom_out.png'; + sizeimg2.src = '/lib/images/magnifier.png'; + sizeimg3.src = '/lib/images/magnifier_zoom_in.png'; + sizeimg4.src = '/lib/images/magnifier_zoom_in.png'; + + sizebtn1.setAttribute('class','button'); + sizebtn1.appendChild(sizeimg1); + sizebtn1.value = '1'; + sizebtn1.id = 'media__sizebtn1'; + sizebtn1.title = LANG['mediasmall']; + sizebtn1.style.borderStyle = 'outset'; + addEvent(sizebtn1,'click',function(event){ return media_manager.setsize(event,this); }); + + sizebtn2.setAttribute('class','button'); + sizebtn2.appendChild(sizeimg2); + sizebtn2.value = '2'; + sizebtn2.id = 'media__sizebtn2'; + sizebtn2.title = LANG['mediamedium']; + sizebtn2.style.borderStyle = 'outset'; + addEvent(sizebtn2,'click',function(event){ return media_manager.setsize(event,this); }); + + sizebtn3.setAttribute('class','button'); + sizebtn3.appendChild(sizeimg3); + sizebtn3.value = '3'; + sizebtn3.id = 'media__sizebtn3'; + sizebtn3.title = LANG['medialarge']; + sizebtn3.style.borderStyle = 'outset'; + addEvent(sizebtn3,'click',function(event){ return media_manager.setsize(event,this); }); + + sizebtn4.setAttribute('class','button'); + sizebtn4.appendChild(sizeimg4); + sizebtn4.value = '4'; + sizebtn4.id = 'media__sizebtn4'; + sizebtn4.title = LANG['mediaextralarge']; + sizebtn4.style.borderStyle = 'outset'; + addEvent(sizebtn4,'click',function(event){ return media_manager.setsize(event,this); }); + + media_manager.popup.appendChild(sizep); + + // send and close button + + var btnp = document.createElement('p'); + media_manager.popup.appendChild(btnp); + btnp.setAttribute('class','btnlbl'); + + var cls = document.createElement('input'); + cls.type = 'button'; + cls.setAttribute('class','button'); + cls.value = LANG['mediaclose']; + btnp.appendChild(cls); + addEvent(cls,'click',function(event){ return media_manager.closePopup(event,this); }); + + var btn = document.createElement('input'); + btn.type = 'button'; + btn.id = 'media__sendbtn'; + btn.setAttribute('class','button'); + btn.value = LANG['mediainsert']; + btnp.appendChild(btn); + addEvent(btn,'click',function(event){ return media_manager.insert(event); }); + }, + + /** + * Insert the clicked image into the opener's textarea + * + * @author Andreas Gohr <andi@splitbrain.org> + * @author Dominik Eckelmann <eckelmann@cosmocode.de> + */ + insert: function(event){ + var id = media_manager.id; + // set syntax options + $('media__popup').style.display = 'none'; + + var opts = ''; + var optsstart = ''; + var alignleft = ''; + var alignright = ''; + + if (media_manager.ext == 'img' || media_manager.ext == 'swf') { + + if (media_manager.link == '4') { + opts = '?linkonly'; + } else { + + if (media_manager.link == "3" && media_manager.ext == 'img') { + opts = '?nolink'; + optsstart = true; + } else if (media_manager.link == "2" && media_manager.ext == 'img') { + opts = '?direct'; + optsstart = true; + } + + var s = parseInt(media_manager.size); + + if (s && s >= 1) { + opts += (optsstart)?'&':'?'; + if (s=="1") { + opts += '100'; + if (media_manager.ext == 'swf') { + opts += 'x62'; + } + } else if (s=="2") { + opts += '200'; + if (media_manager.ext == 'swf') { + opts += 'x123'; + } + } else if (s=="3"){ + opts += '300'; + if (media_manager.ext == 'swf') { + opts += 'x185'; + } + } else if (s=="4") { + opts += '400'; + if (media_manager.ext == 'swf') { + opts += 'x247'; + } + } + } + if (media_manager.align == '1') { + alignleft = ''; + alignright = ' '; + } + if (media_manager.align == '2') { + alignleft = ' '; + alignright = ' '; + } + if (media_manager.align == '3') { + alignleft = ' '; + alignright = ''; + } + } + } + opener.insertTags('wiki__text','{{'+alignleft+id+opts+alignright+'|','}}',''); if(!media_manager.keepopen) window.close(); opener.focus(); @@ -340,6 +789,116 @@ var media_manager = { oflash.style.display = ''; }; oform.appendChild(clicky); + }, + + /** + * closes the link type popup + */ + closePopup: function(event) { + $('media__popup').style.display = 'none'; + }, + + /** + * set the align + * + * @author Dominik Eckelmann <eckelmann@cosmocode.de> + */ + setalign: function(event,cb){ + if(cb.value){ + DokuCookie.setValue('align',cb.value); + media_manager.align = cb.value; + media_manager.outSet("media__alignbtn0"); + media_manager.outSet("media__alignbtn1"); + media_manager.outSet("media__alignbtn2"); + media_manager.outSet("media__alignbtn3"); + media_manager.inSet("media__alignbtn"+cb.value); + }else{ + DokuCookie.setValue('align',''); + media_manager.align = false; + } + }, + /** + * set the link type + * + * @author Dominik Eckelmann <eckelmann@cosmocode.de> + */ + setlink: function(event,cb){ + if(cb.value){ + DokuCookie.setValue('link',cb.value); + media_manager.link = cb.value; + media_manager.outSet("media__linkbtn1"); + media_manager.outSet("media__linkbtn2"); + media_manager.outSet("media__linkbtn3"); + media_manager.outSet("media__linkbtn4"); + media_manager.inSet("media__linkbtn"+cb.value); + var size = document.getElementById("media__size"); + var align = document.getElementById("media__align"); + if (cb.value != '4') { + size.style.display = "block"; + align.style.display = "block"; + } else { + size.style.display = "none"; + align.style.display = "none"; + } + }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){ + if (cb.value) { + DokuCookie.setValue('size',cb.value); + media_manager.size = cb.value; + media_manager.outSet("media__sizebtn1"); + media_manager.outSet("media__sizebtn2"); + media_manager.outSet("media__sizebtn3"); + media_manager.inSet("media__sizebtn"+cb.value); + } else { + DokuCookie.setValue('size',''); + media_manager.width = false; + } } }; @@ -348,5 +907,8 @@ addInitEvent(function(){ media_manager.selectorattach($('media__content')); media_manager.confirmattach($('media__content')); media_manager.attachoptions($('media__opts')); + media_manager.initpopup(); media_manager.initFlashUpload(); }); + +// style nach linkwiz diff --git a/lib/tpl/default/media.css b/lib/tpl/default/media.css index 2831c984f..0bd70db3c 100644 --- a/lib/tpl/default/media.css +++ b/lib/tpl/default/media.css @@ -89,6 +89,99 @@ it's dirty, so any "real" fixes are welcome */ clear: left; } +/* --- popup --- */ + +#media__popup { + background-color:__background__; + display:none; + border: 1px solid __border__; + position: absolute; + width:270px; +} + +#media__popup h1 { + text-align:center; + font-weight:normal; + background-color: __background_alt__; + height: 16px; + margin-bottom: 5px; + font-size:12px; + border-bottom: 0; +} + +#media__popup p { + display:block; + line-height:14pt; + margin:0.5em; +} + +#media_nolink { + padding:4px 0; +} + +#media__popup label { + float:left; + width:9em; +} + +#media__popup .button { + margin-left:auto; + margin-right:auto; +} + +#media__popup .btnlbl { + text-align:center; +} + +#media__popup .btnlbl input { + margin:0 1em; +} + +#media__closeimg { + float:right; +} + +/* --- display options --- */ + +#media__linkopts label, +#media__nolnk { + width: 80px; + float: left; + margin-left: 10px; +} + +#media__linkopts label{ + line-height: 20px; +} + +#media__nolnk, +#media__linkopts label.long{ + margin-bottom: 8px; + line-height: 12px; +} + +#media__linkopts label.long{ + width: 150px; + float: none; +} + +#media__linkopts br { + clear: both; +} + +#media__linkopts select { + width: 60px; + margin-left: 10px; +} + +#media__linkopts input.edit { + width:50px; + margin-left:10px; +} +#media__linkopts #media__title { + width:150px; +} + /* --- file list --- */ #media__content img.load { -- GitLab