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.js1379
1 files changed, 767 insertions, 612 deletions
diff --git a/lib/scripts/media.js b/lib/scripts/media.js
index 57f599163..7f5514f56 100644
--- a/lib/scripts/media.js
+++ b/lib/scripts/media.js
@@ -2,778 +2,933 @@
* JavaScript functionality for the media management popup
*
* @author Andreas Gohr <andi@splitbrain.org>
+ * @author Pierre Spring <pierre.spring@caillou.ch>
*/
-var media_manager = {
+
+var dw_mediamanager = {
keepopen: false,
hide: false,
- align: false,
popup: false,
- id: false,
display: false,
- link: false,
- size: false,
ext: false,
+ $popup: null,
- /**
- * 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); });
+ // Image insertion opts
+ align: false,
+ link: false,
+ size: false,
+ forbidden_opts: {},
+
+ // File list options
+ view_opts: {list: false, sort: false},
+
+ layout_width: 0,
+
+ // The minimum height of the full-screen mediamanager in px
+ minHeights: {thumbs: 200, rows: 100},
+
+ init: function () {
+ var $content, $tree;
+ $content = jQuery('#media__content');
+ $tree = jQuery('#media__tree');
+
+ dw_mediamanager.prepare_content($content);
+
+ dw_mediamanager.attachoptions();
+ dw_mediamanager.initpopup();
+
+ // add the action to autofill the "upload as" field
+ $content.delegate('#upload__file', 'change', dw_mediamanager.suggest)
+ // Attach the image selector action to all links
+ .delegate('a.select', 'click', dw_mediamanager.select)
+ // Attach deletion confirmation dialog to the delete buttons
+ .delegate('#media__content a.btn_media_delete', 'click',
+ dw_mediamanager.confirmattach)
+ .delegate('#mediamanager__done_form', 'submit', dw_mediamanager.list);
+
+ $tree.dw_tree({toggle_selector: 'img',
+ load_data: function (show_sublist, $clicky) {
+ // get the enclosed link (is always the first one)
+ var $link = $clicky.parent().find('div.li a.idx_dir');
+
+ jQuery.post(
+ DOKU_BASE + 'lib/exe/ajax.php',
+ $link[0].search.substr(1) + '&call=medians',
+ show_sublist,
+ 'html'
+ );
+ },
+
+ toggle_display: function ($clicky, opening) {
+ $clicky.attr('src',
+ DOKU_BASE + 'lib/images/' +
+ (opening ? 'minus' : 'plus') + '.gif');
+ }});
+ $tree.delegate('a', 'click', dw_mediamanager.list);
+
+ // Init view property
+ dw_mediamanager.set_fileview_list();
+
+ dw_mediamanager.init_options();
+
+ dw_mediamanager.image_diff();
+ dw_mediamanager.init_ajax_uploader();
+
+ // changing opened tab in the file list panel
+ jQuery('#mediamanager__page div.filelist').delegate('ul.tabs a', 'click', dw_mediamanager.list)
+ // loading file details
+ .delegate('div.panelContent a', 'click', dw_mediamanager.details)
+ // search form
+ .delegate('#dw__mediasearch', 'submit', dw_mediamanager.list)
+ // "upload as" field autofill
+ .delegate('#upload__file', 'change', dw_mediamanager.suggest)
+ // uploaded images
+ .delegate('.qq-upload-file a', 'click', dw_mediamanager.details);
+
+ // changing opened tab in the file details panel
+ jQuery('#mediamanager__page div.file').delegate('ul.tabs a', 'click', dw_mediamanager.details)
+ // "update new version" button
+ .delegate('#mediamanager__btn_update', 'submit', dw_mediamanager.list)
+ // revisions form
+ .delegate('#page__revisions', 'submit', dw_mediamanager.details)
+ .delegate('#page__revisions a', 'click', dw_mediamanager.details)
+ // meta edit form
+ .delegate('#mediamanager__save_meta', 'submit', dw_mediamanager.details)
+ // delete button
+ .delegate('#mediamanager__btn_delete', 'submit', dw_mediamanager.details)
+ // "restore this version" button
+ .delegate('#mediamanager__btn_restore', 'submit', dw_mediamanager.details)
+ // less/more recent buttons in media revisions form
+ .delegate('.btn_newer, .btn_older', 'submit', dw_mediamanager.details);
+
+ dw_mediamanager.update_resizable();
+ dw_mediamanager.layout_width = jQuery("#mediamanager__page").width();
+ jQuery(window).resize(dw_mediamanager.window_resize);
+ },
- // 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); });
+ init_options: function () {
+ var $options = jQuery('div.filelist div.panelHeader form.options'),
+ $listType, $sortBy, $both;
+ if ($options.length === 0) {
+ return;
}
+
+ $listType = $options.find('li.listType');
+ $sortBy = $options.find('li.sortBy');
+ $both = $listType.add($sortBy);
+
+ // Remove the submit button
+ $options.find('input[type=submit]').parent().hide();
+
+ // Prepare HTML for jQuery UI buttonset
+ $both.find('label').each(function () {
+ var $this = jQuery(this);
+ $this.children('input').appendTo($this.parent());
+ });
+
+ // Init buttonset
+ $both.buttonset();
+
+ // Change handlers
+ $listType.children('input').change(function (event) {
+ dw_mediamanager.set_fileview_list();
+ });
+ $sortBy.children('input').change(function (event) {
+ dw_mediamanager.set_fileview_sort();
+ dw_mediamanager.list.call(this, event);
+ });
},
/**
- * Attach the image selector action to all links below the given element
- * also add the action to autofill the "upload as" field
+ * build the popup window
*
- * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Dominik Eckelmann <eckelmann@cosmocode.de>
*/
- selectorattach: function(obj){
- if(!obj) return;
+ initpopup: function () {
+ var opts, $insp, $insbtn;
+
+ dw_mediamanager.$popup = jQuery(document.createElement('div'))
+ .attr('id', 'media__popup_content')
+ .dialog({autoOpen: false, width: 280, modal: true,
+ draggable: true, title: LANG.mediatitle,
+ resizable: false});
+
+ opts = [{id: 'link', label: LANG.mediatarget,
+ btns: ['lnk', 'direct', 'nolnk', 'displaylnk']},
+ {id: 'align', label: LANG.mediaalign,
+ btns: ['noalign', 'left', 'center', 'right']},
+ {id: 'size', label: LANG.mediasize,
+ btns: ['small', 'medium', 'large', 'original']}
+ ];
+
+ jQuery.each(opts, function (_, opt) {
+ var $p, $l;
+ $p = jQuery(document.createElement('p'))
+ .attr('id', 'media__' + opt.id);
+
+ if (dw_mediamanager.display === "2") {
+ $p.hide();
+ }
- 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); });
- }
+ $l = jQuery(document.createElement('label'))
+ .text(opt.label);
+ $p.append($l);
- // hide syntax example
- items = getElementsByClass('example',obj,'div');
- for(var i=0; i<items.length; i++){
- elem = items[i];
- elem.style.display = 'none';
- }
+ jQuery.each(opt.btns, function (i, text) {
+ var $btn, $img;
+ $btn = jQuery(document.createElement('button'))
+ .addClass('button')
+ .attr('id', "media__" + opt.id + "btn" + (i + 1))
+ .attr('title', LANG['media' + text])
+ .click(bind(dw_mediamanager.setOpt, opt.id));
- var file = $('upload__file');
- if(!file) return;
- addEvent(file,'change',media_manager.suggest);
- },
+ $img = jQuery(document.createElement('img'))
+ .attr('src', DOKU_BASE + 'lib/images/media_' +
+ opt.id + '_' + text + '.png');
- /**
- * 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;
- }
+ $btn.append($img);
+ $p.append($btn);
});
- }
+
+ dw_mediamanager.$popup.append($p);
+ });
+
+ // insert button
+ $insp = jQuery(document.createElement('p'));
+ dw_mediamanager.$popup.append($insp);
+
+ $insbtn = jQuery(document.createElement('input'))
+ .attr('id', 'media__sendbtn')
+ .attr('type', 'button')
+ .addClass('button')
+ .val(LANG.mediainsert);
+ $insp.append($insbtn);
},
/**
- * Creates checkboxes for additional options
+ * 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>
*/
- attachoptions: function(obj){
- if(!obj) return;
+ insert: function (id) {
+ var opts, alignleft, alignright, edid, s;
- // 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); });
+ // set syntax options
+ dw_mediamanager.$popup.dialog('close');
- var kolbl = document.createElement('label');
- kolbl.htmlFor = 'media__keepopen';
- kolbl.innerHTML = LANG['keepopen'];
+ opts = '';
+ alignleft = '';
+ alignright = '';
- var kobr = document.createElement('br');
+ if ({img: 1, swf: 1}[dw_mediamanager.ext] === 1) {
- 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); });
+ if (dw_mediamanager.link === '4') {
+ opts = '?linkonly';
+ } else {
- var hdlbl = document.createElement('label');
- hdlbl.htmlFor = 'media__hide';
- hdlbl.innerHTML = LANG['hidedetails'];
+ if (dw_mediamanager.link === "3" && dw_mediamanager.ext === 'img') {
+ opts = '?nolink';
+ } else if (dw_mediamanager.link === "2" && dw_mediamanager.ext === 'img') {
+ opts = '?direct';
+ }
- var hdbr = document.createElement('br');
+ s = parseInt(dw_mediamanager.size, 10);
- obj.appendChild(hdbox);
- obj.appendChild(hdlbl);
- obj.appendChild(hdbr);
- media_manager.updatehide();
- },
+ if (s && s >= 1 && s < 4) {
+ opts += (opts.length)?'&':'?';
+ opts += dw_mediamanager.size + '00';
+ if (dw_mediamanager.ext === 'swf') {
+ switch (s) {
+ case 1:
+ opts += 'x62';
+ break;
+ case 2:
+ opts += 'x123';
+ break;
+ case 3:
+ opts += 'x185';
+ break;
+ }
+ }
+ }
+ alignleft = dw_mediamanager.align === '2' ? '' : ' ';
+ alignright = dw_mediamanager.align === '4' ? '' : ' ';
+ }
+ }
+ edid = String.prototype.match.call(document.location, /&edid=([^&]+)/);
+ opener.insertTags(edid ? edid[1] : 'wiki__text',
+ '{{'+alignleft+id+opts+alignright+'|','}}','');
- /**
- * 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;
+ if(!dw_mediamanager.keepopen) {
+ window.close();
}
+ opener.focus();
+ return false;
},
/**
- * Toggles the hide details state
+ * Prefills the wikiname.
*
* @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;
+ suggest: function(){
+ var $file, $name, text;
+
+ $file = jQuery(this);
+ $name = jQuery('#upload__name');
+
+ if ($name.val() != '') return;
+
+ if(!$file.length || !$name.length) {
+ return;
}
- media_manager.updatehide();
+
+ text = $file.val();
+ text = text.substr(text.lastIndexOf('/')+1);
+ text = text.substr(text.lastIndexOf('\\')+1);
+ $name.val(text);
},
/**
- * Sets the visibility of the image details accordingly to the
- * chosen hide state
+ * list the content of a namespace using AJAX
*
* @author Andreas Gohr <andi@splitbrain.org>
+ * @author Pierre Spring <pierre.spring@caillou.ch>
*/
- 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 = '';
- }
+ list: function (event) {
+ var $link, $content, params;
+
+ if (event) {
+ event.preventDefault();
}
- },
- /**
- * shows the popup for a image link
- */
- select: function(event,link){
- var id = link.name.substr(2);
+ jQuery('div.success, div.info, div.error, div.notify').remove();
- 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;
- }
+ $link = jQuery(this);
- media_manager.ext = false;
- var dot = id.lastIndexOf(".");
- if (dot != -1) {
- var ext = id.substr(dot,id.length);
+ //popup
+ $content = jQuery('#media__content');
- if (ext != '.jpg' && ext != '.jpeg' && ext != '.png' && ext != '.gif' && ext != '.swf') {
- media_manager.insert(null);
- return false;
+ if ($content.length === 0) {
+ //fullscreen media manager
+ $content = jQuery('div.filelist');
+
+ if ($link.hasClass('idx_dir')) {
+ //changing namespace
+ jQuery('div.file').empty();
+ jQuery('div.namespaces .selected').removeClass('selected');
+ $link.addClass('selected');
}
- } 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';
+ params = 'call=medialist&';
- // 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 ($link[0].search) {
+ params += $link[0].search.substr(1);
+ } else if ($link.is('form')) {
+ params += dw_mediamanager.form_params($link);
+ } else if ($link.closest('form').length > 0) {
+ params += dw_mediamanager.form_params($link.closest('form'));
}
- 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';
+ // fetch the subtree
+ dw_mediamanager.update_content($content, params);
+ },
- // 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');
- }
+ /**
+ * Returns form parameters
+ *
+ * @author Kate Arzamastseva <pshns@ukr.net>
+ */
+ form_params: function ($form) {
+ if (!$form.length) return;
+ var action = '';
+ var i = $form[0].action.indexOf('?');
+ if (i >= 0) action = $form[0].action.substr(i+1);
+ return action+'&'+$form.serialize();
+ },
- // 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');
- }
+ set_fileview_list: function (new_type) {
+ dw_mediamanager.set_fileview_opt(['list', 'listType', function (new_type) {
+ jQuery('div.filelist div.panelContent ul')
+ .toggleClass('rows', new_type === 'rows')
+ .toggleClass('thumbs', new_type === 'thumbs');
+ }], new_type);
- } else {
- media_manager.ext = 'img';
+ // FIXME: Move to onchange handler (opt[2])?
+ dw_mediamanager.resize();
+ },
- // ensure that the display buttons are there
- $('media__linkbtn1').style.display = 'inline';
- $('media__linkbtn2').style.display = 'inline';
- $('media__sizebtn4').style.display = 'inline';
+ set_fileview_sort: function (new_sort) {
+ dw_mediamanager.set_fileview_opt(['sort', 'sortBy', function (new_sort) {
+ // FIXME
+ }], new_sort);
+ },
- // 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);
+ set_fileview_opt: function (opt, new_val) {
+ if (typeof new_val === 'undefined') {
+ new_val = jQuery('form.options li.' + opt[1] + ' input')
+ .filter(':checked').val();
}
- 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');
- }
+ if (new_val !== dw_mediamanager.view_opts[opt[0]]) {
+ opt[2](new_val);
- // 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);
+ DokuCookie.setValue(opt[0], new_val);
- $('media__sendbtn').focus();
+ dw_mediamanager.view_opts[opt[0]] = new_val;
}
-
- return false;
},
- /**
- * build the popup window
+ /**
+ * Lists the content of the right column (image details) using AJAX
*
- * @author Dominik Eckelmann <eckelmann@cosmocode.de>
+ * @author Kate Arzamastseva <pshns@ukr.net>
*/
- initpopup: function() {
-
- media_manager.popup = document.createElement('div');
- media_manager.popup.setAttribute('id','media__popup');
- media_manager.popup.style.display = 'none';
-
- var root = document.getElementById('media__manager');
- if (root === null) return;
- root.appendChild(media_manager.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); });
- headline.insertBefore(headlineimg, headline.firstChild);
- media_manager.popup.appendChild(headline);
- drag.attach(media_manager.popup,headline);
+ details: function (event) {
+ var $link, $content, params, update_list;
+ $link = jQuery(this);
+ event.preventDefault();
- // link
+ jQuery('div.success, div.info, div.error, div.notify').remove();
- var linkp = document.createElement('p');
-
- linkp.id = "media__linkstyle";
- if (media_manager.display == "2") {
- linkp.style.display = "none";
+ if ($link[0].id == 'mediamanager__btn_delete' && !confirm(LANG.del_confirm)) {
+ return false;
}
-
- var linkl = document.createElement('label');
- linkl.innerHTML = LANG.mediatarget;
- linkp.appendChild(linkl);
-
- var linkbtns = ['lnk', 'direct', 'nolnk', 'displaylnk'];
- for (var i = 0 ; i < linkbtns.length ; ++i) {
- var linkbtn = document.createElement('button');
- linkbtn.className = 'button';
- 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); });
-
- var linkimg = document.createElement('img');
- linkimg.src = DOKU_BASE + 'lib/images/media_link_' + linkbtns[i] + '.png';
-
- linkbtn.appendChild(linkimg);
- linkp.appendChild(linkbtn);
+ if ($link[0].id == 'mediamanager__btn_restore' && !confirm(LANG.restore_confirm)) {
+ return false;
}
- media_manager.popup.appendChild(linkp);
-
- // align
-
- var alignp = document.createElement('p');
- var alignl = document.createElement('label');
+ $content = jQuery('div.file');
+ params = 'call=mediadetails&';
- alignp.appendChild(alignl);
- alignp.id = 'media__align';
- if (media_manager.display == "2") {
- alignp.style.display = "none";
+ if ($link[0].search) {
+ params += $link[0].search.substr(1);
+ } else if ($link.is('form')) {
+ params += dw_mediamanager.form_params($link);
+ } else if ($link.closest('form').length > 0) {
+ params += dw_mediamanager.form_params($link.closest('form'));
}
- alignl.innerHTML = LANG['mediaalign'];
- var alignbtns = ['noalign', 'left', 'center', 'right'];
- for (var n = 0 ; n < alignbtns.length ; ++n) {
- var alignbtn = document.createElement('button');
- var alignimg = document.createElement('img');
- alignimg.src = DOKU_BASE + 'lib/images/media_align_' + alignbtns[n] + '.png';
+ update_list = ($link[0].id == 'mediamanager__btn_delete' ||
+ $link[0].id == 'mediamanager__btn_restore');
- alignbtn.id = "media__alignbtn" + (n+1);
- alignbtn.title = LANG['media' + alignbtns[n]];
- alignbtn.className = 'button';
- alignbtn.appendChild(alignimg);
- alignbtn.style.borderStyle = 'outset';
- addEvent(alignbtn,'click',function(event){ return media_manager.setalign(event,this); });
+ dw_mediamanager.update_content($content, params, update_list);
+ },
- alignp.appendChild(alignbtn);
- }
+ update_content: function ($content, params, update_list) {
+ var $container;
- media_manager.popup.appendChild(alignp);
+ jQuery.post(
+ DOKU_BASE + 'lib/exe/ajax.php',
+ params,
+ function (data) {
+ dw_mediamanager.$resizables().resizable('destroy');
- // size
+ if (update_list) {
+ dw_mediamanager.list.call(jQuery('input[value="Apply"]')[0]);
+ }
- var sizep = document.createElement('p');
- var sizel = document.createElement('label');
+ $content.html(data);
- sizep.id = 'media__size';
- if (media_manager.display == "2") {
- sizep.style.display = "none";
- }
- sizep.appendChild(sizel);
- sizel.innerHTML = LANG['mediasize'];
+ dw_mediamanager.prepare_content($content);
+ dw_mediamanager.updatehide();
- var sizebtns = ['small', 'medium', 'large', 'original'];
- for (var size = 0 ; size < sizebtns.length ; ++size) {
- var sizebtn = document.createElement('button');
- var sizeimg = document.createElement('img');
+ dw_mediamanager.update_resizable();
+ dw_behaviour.revisionBoxHandler();
- sizep.appendChild(sizebtn);
- sizeimg.src = DOKU_BASE + 'lib/images/media_size_' + sizebtns[size] + '.png';
+ // Make sure that the list view style stays the same
+ dw_mediamanager.set_fileview_list(dw_mediamanager.view_opts.list);
- sizebtn.className = 'button';
- sizebtn.appendChild(sizeimg);
- 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); });
- }
+ dw_mediamanager.image_diff();
+ dw_mediamanager.init_ajax_uploader();
+ dw_mediamanager.init_options();
- media_manager.popup.appendChild(sizep);
+ },
+ 'html'
+ );
+ $container = $content.find('div.panelContent');
+ if ($container.length === 0) {
+ $container = $content;
+ }
+ $container.html('<img src="' + DOKU_BASE + 'lib/images/loading.gif" alt="..." class="load" />');
+ },
- // send and close button
+ window_resize: function () {
+ dw_mediamanager.resize();
- var btnp = document.createElement('p');
- media_manager.popup.appendChild(btnp);
- btnp.setAttribute('class','btnlbl');
+ dw_mediamanager.opacity_slider();
+ dw_mediamanager.portions_slider();
+ },
- 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); });
+ $resizables: function () {
+ return jQuery('#mediamanager__page').find('div.namespaces, div.filelist');
},
/**
- * Insert the clicked image into the opener's textarea
+ * Updates mediamanager layout
*
- * @author Andreas Gohr <andi@splitbrain.org>
- * @author Dominik Eckelmann <eckelmann@cosmocode.de>
+ * @author Kate Arzamastseva <pshns@ukr.net>
*/
- 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') {
+ update_resizable: function () {
+ $resizables = dw_mediamanager.$resizables();
+
+ $resizables.resizable({
+ handles: 'e',
+ resize: function(event, ui){
+ var widthFull = jQuery('#mediamanager__page').width();
+ var widthResizables = 0;
+ $resizables.each(function() {
+ widthResizables += jQuery(this).width();
+ });
+ var $filePanel = jQuery('#mediamanager__page div.panel.file');
+
+ // set max width of resizable column
+ var widthOtherResizable = widthResizables - jQuery(this).width();
+ var minWidthNonResizable = parseFloat($filePanel.css("min-width"));
+ var maxWidth = widthFull - (widthOtherResizable + minWidthNonResizable);
+ $resizables.resizable( "option", "maxWidth", maxWidth );
+
+ // width of file panel in % = 100% - width of resizables in %
+ // this calculates with 99.99 and not 100 to overcome rounding errors
+ var relWidthNonResizable = 99.99 - (100 * widthResizables / widthFull);
+ // set width of file panel
+ $filePanel.width(relWidthNonResizable+'%');
+
+ // FIXME: please fix without browser sniffing
+ if (!jQuery.browser.webkit) {
+ $resizables.each(function() {
+ w = jQuery(this).width();
+ w = (99.99 * w / widthFull);
+ w += "%";
+ jQuery(this).width(w);
+ });
+ }
- if (media_manager.link == '4') {
- opts = '?linkonly';
- } else {
+ dw_mediamanager.opacity_slider();
+ dw_mediamanager.portions_slider();
+ }
+ });
- 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;
- }
+ dw_mediamanager.resize();
+ },
- var s = parseInt(media_manager.size, 10);
+ resize: function () {
+ var $contents = jQuery('#mediamanager__page div.panelContent'),
+ height = jQuery(window).height() - jQuery(document.body).height() +
+ Math.max.apply(null, jQuery.map($contents, function (v) {
+ return jQuery(v).height();
+ }));
- 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';
- }
- }
- }
- if (media_manager.align == '2') {
- alignleft = '';
- alignright = ' ';
- }
- if (media_manager.align == '3') {
- alignleft = ' ';
- alignright = ' ';
- }
- if (media_manager.align == '4') {
- alignleft = ' ';
- alignright = '';
- }
- }
+ // If the screen is too small, don’t try to resize
+ if (height < dw_mediamanager.minHeights[dw_mediamanager.view_opts.list]) {
+ $contents.add(dw_mediamanager.$resizables()).height('auto');
+ } else {
+ $contents.height(height);
+ dw_mediamanager.$resizables().each(function () {
+ var $this = jQuery(this);
+ $this.height(height + $this.find('div.panelContent').offset().top -
+ $this.offset().top);
+ });
}
- var edid = String.prototype.match.call(document.location, /&edid=([^&]+)/);
- edid = edid ? edid[1] : 'wiki__text';
- opener.insertTags(edid,'{{'+alignleft+id+opts+alignright+'|','}}','');
+ },
- if(!media_manager.keepopen) window.close();
- opener.focus();
- return false;
+ /**
+ * Prints 'select' for image difference representation type
+ *
+ * @author Kate Arzamastseva <pshns@ukr.net>
+ */
+ image_diff: function () {
+ if (jQuery('#mediamanager__difftype').length) return;
+
+ $form = jQuery('#mediamanager__form_diffview');
+ if (!$form.length) return;
+
+ $label = jQuery(document.createElement('label'));
+ $label.append('<span>'+LANG.media_diff+'</span> ');
+ $select = jQuery(document.createElement('select'))
+ .attr('id', 'mediamanager__difftype')
+ .attr('name', 'difftype')
+ .change(dw_mediamanager.change_diff_type);
+ $select.append(new Option(LANG.media_diff_both, "both"));
+ $select.append(new Option(LANG.media_diff_opacity, "opacity"));
+ $select.append(new Option(LANG.media_diff_portions, "portions"));
+ $label.append($select);
+ $form.append($label);
+
+ // for IE
+ var select = document.getElementById('mediamanager__difftype');
+ select.options[0].text = LANG.media_diff_both;
+ select.options[1].text = LANG.media_diff_opacity;
+ select.options[2].text = LANG.media_diff_portions;
},
/**
- * list the content of a namespace using AJAX
+ * Handles selection of image difference representation type
*
- * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Kate Arzamastseva <pshns@ukr.net>
*/
- 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;
+ change_diff_type: function () {
+ $select = jQuery('#mediamanager__difftype');
+ $content = jQuery('#mediamanager__diff');
+
+ params = dw_mediamanager.form_params($select.closest('form'))+'&call=mediadiff';
+ jQuery.post(
+ DOKU_BASE + 'lib/exe/ajax.php',
+ params,
+ function (data) {
+ $content.html(data);
+ dw_mediamanager.portions_slider();
+ dw_mediamanager.opacity_slider();
+ },
+ 'html'
+ );
},
-
/**
- * Open or close a subtree using AJAX
+ * Sets options for opacity diff slider
*
- * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Kate Arzamastseva <pshns@ukr.net>
*/
- toggle: function(event,clicky){
- var listitem = clicky.parentNode;
-
- // 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;
- }
+ opacity_slider: function () {
+ var $slider = jQuery( "#mediamanager__diff div.slider" );
+ if (!$slider.length) return;
+
+ var $image = jQuery('#mediamanager__diff div.imageDiff.opacity div.image1 img');
+ if (!$image.length) return;
+ $slider.width($image.width()-20);
+
+ $slider.slider();
+ $slider.slider("option", "min", 0);
+ $slider.slider("option", "max", 0.999);
+ $slider.slider("option", "step", 0.001);
+ $slider.slider("option", "value", 0.5);
+ $slider.bind("slide", function(event, ui) {
+ jQuery('#mediamanager__diff div.imageDiff.opacity div.image2 img').css({ opacity: $slider.slider("option", "value")});
+ });
+ },
- // get the enclosed link (is always the first one)
- var link = listitem.getElementsByTagName('a')[0];
+ /**
+ * Sets options for red line diff slider
+ *
+ * @author Kate Arzamastseva <pshns@ukr.net>
+ */
+ portions_slider: function () {
+ var $image1 = jQuery('#mediamanager__diff div.imageDiff.portions div.image1 img');
+ var $image2 = jQuery('#mediamanager__diff div.imageDiff.portions div.image2 img');
+ if (!$image1.length || !$image2.length) return;
- // 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;
+ var $div = jQuery("#mediamanager__diff");
+ if (!$div.length) return;
- //prepare the new ul
- var ul = document.createElement('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;
+ $div.width('100%');
+ $image2.parent().width('97%');
+ $image1.width('100%');
+ $image2.width('100%');
+
+ if ($image1.width() < $div.width()) {
+ $div.width($image1.width());
+ }
+
+ $image2.parent().width('50%');
+ $image2.width($image1.width());
+ $image1.width($image1.width());
+
+ var $slider = jQuery("#mediamanager__diff div.slider");
+ if (!$slider.length) return;
+ $slider.width($image1.width()-20);
+
+ $slider.slider();
+ $slider.slider("option", "min", 0);
+ $slider.slider("option", "max", 97);
+ $slider.slider("option", "step", 1);
+ $slider.slider("option", "value", 50);
+ $slider.bind("slide", function(event, ui) {
+ jQuery('#mediamanager__diff div.imageDiff.portions div.image2').css({ width: $slider.slider("option", "value")+'%'});
+ });
},
/**
- * Prefills the wikiname.
+ * Parse a URI query string to an associative array
*
- * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Kate Arzamastseva <pshns@ukr.net>
*/
- 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;
+ params_toarray: function (str) {
+ var vars = [], hash;
+ var hashes = str.split('&');
+ for(var i = 0; i < hashes.length; i++) {
+ hash = hashes[i].split('=');
+ vars[decodeURIComponent(hash[0])] = decodeURIComponent(hash[1]);
+ }
+ return vars;
},
+ init_ajax_uploader: function () {
+ if (!jQuery('#mediamanager__uploader').length) return;
+ if (jQuery('.qq-upload-list').length) return;
- initFlashUpload: function(){
- if(!hasFlash(8)) return;
- var oform = $('dw__upload');
- var oflash = $('dw__flashupload');
- if(!oform || !oflash) return;
+ var params = dw_mediamanager.form_params(jQuery('#dw__upload'))+'&call=mediaupload';
+ params = dw_mediamanager.params_toarray(params);
- 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);
+ var uploader = new qq.FileUploaderExtended({
+ element: document.getElementById('mediamanager__uploader'),
+ action: DOKU_BASE + 'lib/exe/ajax.php',
+ params: params
+ });
},
- /**
- * closes the link type popup
- */
- closePopup: function(event) {
- $('media__popup').style.display = 'none';
+ prepare_content: function ($content) {
+ // hide syntax example
+ $content.find('div.example:visible').hide();
},
/**
- * set the align
- *
- * @author Dominik Eckelmann <eckelmann@cosmocode.de>
+ * shows the popup for a image link
*/
- 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);
- }
- media_manager.inSet("media__alignbtn"+id);
- }else{
- DokuCookie.setValue('align','');
- media_manager.align = false;
+ select: function(event){
+ var $link, id, dot, ext;
+
+ event.preventDefault();
+
+ $link = jQuery(this);
+ id = $link.attr('name').substr(2);
+
+ if(!opener){
+ // if we don't run in popup display example
+ // the id's are a bit wierd and jQuery('#ex_wiki_dokuwiki-128.png')
+ // will not be found by Sizzle (the CSS Selector Engine
+ // used by jQuery), hence the document.getElementById() call
+ jQuery(document.getElementById('ex_'+id.replace(/:/g,'_').replace(/^_/,''))).dw_toggle();
+ return;
+ }
+
+ dw_mediamanager.ext = false;
+ dot = id.lastIndexOf(".");
+
+ if (-1 === dot) {
+ dw_mediamanager.insert(id);
+ return;
}
+
+ ext = id.substr(dot);
+
+ if ({'.jpg':1, '.jpeg':1, '.png':1, '.gif':1, '.swf':1}[ext] !== 1) {
+ dw_mediamanager.insert(id);
+ return;
+ }
+
+ // remove old callback from the insert button and set the new one.
+ jQuery('#media__sendbtn').unbind().click(bind(dw_mediamanager.insert, id));
+
+ dw_mediamanager.unforbid('ext');
+ if (ext === '.swf') {
+ dw_mediamanager.ext = 'swf';
+ dw_mediamanager.forbid('ext', {link: ['1', '2'],
+ size: ['4']});
+ } else {
+ dw_mediamanager.ext = 'img';
+ }
+
+ // Set to defaults
+ dw_mediamanager.setOpt('link');
+ dw_mediamanager.setOpt('align');
+ dw_mediamanager.setOpt('size');
+
+ // toggle buttons for detail and linked image, original size
+ jQuery('#media__linkbtn1, #media__linkbtn2, #media__sizebtn4')
+ .toggle(dw_mediamanager.ext === 'img');
+
+ dw_mediamanager.$popup.dialog('open');
+
+ jQuery('#media__sendbtn').focus();
},
+
/**
- * set the link type
+ * Deletion confirmation dialog to the delete buttons.
*
- * @author Dominik Eckelmann <eckelmann@cosmocode.de>
+ * @author Michael Klier <chi@chimeric.de>
+ * @author Pierre Spring <pierre.spring@caillou.ch>
*/
- 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);
- }
- media_manager.inSet("media__linkbtn"+id);
-
- var size = document.getElementById("media__size");
- var align = document.getElementById("media__align");
- if (id != '4') {
- size.style.display = "block";
- align.style.display = "block";
- if (media_manager.link == '4') {
- media_manager.align = '1';
- DokuCookie.setValue('align', '1');
- media_manager.inSet('media__alignbtn1');
-
- media_manager.size = '2';
- DokuCookie.setValue('size', '2');
- media_manager.inSet('media__sizebtn2');
- }
-
- } else {
- size.style.display = "none";
- align.style.display = "none";
- }
- media_manager.link = id;
- }else{
- DokuCookie.setValue('link','');
- media_manager.link = false;
+ confirmattach: function(e){
+ if(!confirm(LANG.del_confirm + "\n" + jQuery(this).attr('title'))) {
+ e.preventDefault();
}
},
/**
- * set the display type
+ * Creates checkboxes for additional options
*
- * @author Dominik Eckelmann <eckelmann@cosmocode.de>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Pierre Spring <pierre.spring@caillou.ch>
*/
- 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);
+ attachoptions: function(){
+ var $obj, opts;
- }else{
- DokuCookie.setValue('display','');
- media_manager.align = false;
+ $obj = jQuery('#media__opts');
+ if($obj.length === 0) {
+ return;
+ }
+
+ opts = [];
+ // keep open
+ if(opener){
+ opts.push(['keepopen', 'keepopen']);
}
+ opts.push(['hide', 'hidedetails']);
+
+ jQuery.each(opts,
+ function(_, opt) {
+ var $box, $lbl;
+ $box = jQuery(document.createElement('input'))
+ .attr('type', 'checkbox')
+ .attr('id', 'media__' + opt[0])
+ .click(bind(dw_mediamanager.toggleOption,
+ opt[0]));
+
+ if(DokuCookie.getValue(opt[0])){
+ $box.prop('checked', true);
+ dw_mediamanager[opt[0]] = true;
+ }
+
+ $lbl = jQuery(document.createElement('label'))
+ .attr('for', 'media__' + opt[0])
+ .text(LANG[opt[1]]);
+
+ $obj.append($box, $lbl, document.createElement('br'));
+ });
+
+ dw_mediamanager.updatehide();
},
/**
- * sets the border to outset
+ * Generalized toggler
+ *
+ * @author Pierre Spring <pierre.spring@caillou.ch>
*/
- outSet: function(id) {
- var ele = document.getElementById(id);
- if (ele == null) return;
- ele.style.borderStyle = "outset";
+ toggleOption: function (variable) {
+ if (jQuery(this).prop('checked')) {
+ DokuCookie.setValue(variable, 1);
+ dw_mediamanager[variable] = true;
+ } else {
+ DokuCookie.setValue(variable, '');
+ dw_mediamanager[variable] = false;
+ }
+ if (variable === 'hide') {
+ dw_mediamanager.updatehide();
+ }
},
+
/**
- * sets the border to inset
+ * Sets the visibility of the image details accordingly to the
+ * chosen hide state
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
*/
- inSet: function(id) {
- var ele = document.getElementById(id);
- if (ele == null) return;
- ele.style.borderStyle = "inset";
+ updatehide: function(){
+ jQuery('#media__content div.detail').dw_toggle(!dw_mediamanager.hide);
},
/**
- * set the image size
+ * set media insertion option
*
* @author Dominik Eckelmann <eckelmann@cosmocode.de>
*/
- 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);
- }
- media_manager.inSet("media__sizebtn"+id);
+ setOpt: function(opt, e){
+ var val, i;
+ if (typeof e !== 'undefined') {
+ val = this.id.substring(this.id.length - 1);
} else {
- DokuCookie.setValue('size','');
- media_manager.width = false;
+ val = dw_mediamanager.getOpt(opt);
+ }
+
+ if (val === false) {
+ DokuCookie.setValue(opt,'');
+ dw_mediamanager[opt] = false;
+ return;
+ }
+
+ if (opt === 'link') {
+ if (val !== '4' && dw_mediamanager.link === '4') {
+ dw_mediamanager.unforbid('linkonly');
+ dw_mediamanager.setOpt('align');
+ dw_mediamanager.setOpt('size');
+ } else if (val === '4') {
+ dw_mediamanager.forbid('linkonly', {align: false, size: false});
+ }
+
+ jQuery("#media__size, #media__align").dw_toggle(val !== '4');
+ }
+
+ DokuCookie.setValue(opt, val);
+ dw_mediamanager[opt] = val;
+
+ for (i = 1; i <= 4; i++) {
+ jQuery("#media__" + opt + "btn" + i).removeClass('selected');
+ }
+ jQuery('#media__' + opt + 'btn' + val).addClass('selected');
+ },
+
+ unforbid: function (group) {
+ delete dw_mediamanager.forbidden_opts[group];
+ },
+
+ forbid: function (group, forbids) {
+ dw_mediamanager.forbidden_opts[group] = forbids;
+ },
+
+ allowedOpt: function (opt, val) {
+ var ret = true;
+ jQuery.each(dw_mediamanager.forbidden_opts,
+ function (_, forbids) {
+ ret = forbids[opt] !== false &&
+ jQuery.inArray(val, forbids[opt]) === -1;
+ return ret;
+ });
+ return ret;
+ },
+
+ getOpt: function (opt) {
+ var allowed = bind(dw_mediamanager.allowedOpt, opt);
+
+ // Current value
+ if (dw_mediamanager[opt] !== false && allowed(dw_mediamanager[opt])) {
+ return dw_mediamanager[opt];
+ }
+
+ // From cookie
+ if (DokuCookie.getValue(opt) && allowed(DokuCookie.getValue(opt))) {
+ return DokuCookie.getValue(opt);
+ }
+
+ // size default
+ if (opt === 'size' && allowed('2')) {
+ return '2';
}
+
+ // Whatever is allowed, and be it false
+ return jQuery.grep(['1', '2', '3', '4'], allowed)[0] || 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();
-});
+// moved from helpers.js temporarily here
+/**
+ * Very simplistic Flash plugin check, probably works for Flash 8 and higher only
+ *
+ */
+function hasFlash(version){
+ var ver = 0, axo;
+ try{
+ if(navigator.plugins !== null && navigator.plugins.length > 0){
+ ver = navigator.plugins["Shockwave Flash"].description.split(' ')[2].split('.')[0];
+ }else{
+ axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
+ ver = axo.GetVariable("$version").split(' ')[1].split(',')[0];
+ }
+ }catch(e){ }
+
+ return ver >= version;
+}
+
+jQuery(dw_mediamanager.init);