diff options
Diffstat (limited to 'wiki/lib/scripts/media.js')
-rw-r--r-- | wiki/lib/scripts/media.js | 966 |
1 files changed, 0 insertions, 966 deletions
diff --git a/wiki/lib/scripts/media.js b/wiki/lib/scripts/media.js deleted file mode 100644 index 1e9d032..0000000 --- a/wiki/lib/scripts/media.js +++ /dev/null @@ -1,966 +0,0 @@ -/** - * JavaScript functionality for the media management popup - * - * @author Andreas Gohr <andi@splitbrain.org> - * @author Pierre Spring <pierre.spring@caillou.ch> - */ - -var dw_mediamanager = { - keepopen: false, - hide: false, - popup: false, - display: false, - ext: false, - $popup: null, - - // 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'); - if (!$tree.length) return; - - dw_mediamanager.prepare_content($content); - - dw_mediamanager.attachoptions(); - dw_mediamanager.initpopup(); - - // add the action to autofill the "upload as" field - $content - .on('change', '#upload__file', dw_mediamanager.suggest) - // Attach the image selector action to all links - .on('click', 'a.select', dw_mediamanager.select) - // Attach deletion confirmation dialog to the delete buttons - .on('click', '#media__content a.btn_media_delete', dw_mediamanager.confirmattach) - .on('submit', '#mediamanager__done_form', 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.on('click', 'a', 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 - var $page = jQuery('#mediamanager__page'); - $page.find('div.filelist') - .on('click', 'ul.tabs a', dw_mediamanager.list) - // loading file details - .on('click', 'div.panelContent a', dw_mediamanager.details) - // search form - .on('submit', '#dw__mediasearch', dw_mediamanager.list) - // "upload as" field autofill - .on('change', '#upload__file', dw_mediamanager.suggest) - // uploaded images - .on('click', '.qq-upload-file a', dw_mediamanager.details); - - // changing opened tab in the file details panel - $page.find('div.file') - .on('click', 'ul.tabs a', dw_mediamanager.details) - // "update new version" button - .on('submit', '#mediamanager__btn_update', dw_mediamanager.list) - // revisions form - .on('submit', '#page__revisions', dw_mediamanager.details) - .on('click', '#page__revisions a', dw_mediamanager.details) - // meta edit form - .on('submit', '#mediamanager__save_meta', dw_mediamanager.details) - // delete button - .on('submit', '#mediamanager__btn_delete', dw_mediamanager.details) - // "restore this version" button - .on('submit', '#mediamanager__btn_restore', dw_mediamanager.details) - // less/more recent buttons in media revisions form - .on('submit', '.btn_newer, .btn_older', dw_mediamanager.details); - - dw_mediamanager.update_resizable(); - dw_mediamanager.layout_width = $page.width(); - jQuery(window).resize(dw_mediamanager.window_resize); - }, - - 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('button[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.find("input[type='radio']").checkboxradio({icon: false}); - $both.controlgroup(); - - // Change handlers - $listType.children('input').change(function () { - dw_mediamanager.set_fileview_list(); - }); - $sortBy.children('input').change(function (event) { - dw_mediamanager.set_fileview_sort(); - dw_mediamanager.list.call(jQuery('#dw__mediasearch')[0] || this, event); - }); - }, - - /** - * build the popup window - * - * @author Dominik Eckelmann <eckelmann@cosmocode.de> - */ - 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(); - } - - $l = jQuery(document.createElement('label')) - .text(opt.label); - $p.append($l); - - 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)); - - $img = jQuery(document.createElement('img')) - .attr('src', DOKU_BASE + 'lib/images/media_' + opt.id + '_' + text + '.png'); - - $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); - }, - - /** - * 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 (id) { - var opts, cb, edid, s; - - // set syntax options - dw_mediamanager.$popup.dialog('close'); - - opts = ''; - - if ({img: 1, swf: 1}[dw_mediamanager.ext] === 1) { - - if (dw_mediamanager.link === '4') { - opts = '?linkonly'; - } else { - - if (dw_mediamanager.link === "3" && dw_mediamanager.ext === 'img') { - opts = '?nolink'; - } else if (dw_mediamanager.link === "2" && dw_mediamanager.ext === 'img') { - opts = '?direct'; - } - - s = parseInt(dw_mediamanager.size, 10); - var size = s * 200; - - if (s && s >= 1 && s < 4) { - opts += (opts.length) ? '&' : '?'; - opts += size; - if (dw_mediamanager.ext === 'swf') { - switch (s) { - case 1: - opts += 'x62'; - break; - case 2: - opts += 'x123'; - break; - case 3: - opts += 'x185'; - break; - } - } - } - } - } - edid = String.prototype.match.call(document.location, /&edid=([^&]+)/); - edid = edid ? edid[1] : 'wiki__text'; - cb = String.prototype.match.call(document.location, /&onselect=([^&]+)/); - cb = cb ? cb[1].replace(/[^\w]+/, '') : 'dw_mediamanager_item_select'; - - // arguments here only match the dw_mediamanager_item_select function, these will need to change if you override cb with onselect GET param - opener[cb](edid, id, opts, dw_mediamanager.align, dw_mediamanager.keepopen); - if (!dw_mediamanager.keepopen) { - window.close(); - } - opener.focus(); - return false; - }, - - - /** - * Prefills the wikiname. - * - * @author Andreas Gohr <andi@splitbrain.org> - */ - suggest: function () { - var $file, $name, text; - - $file = jQuery(this); - $name = jQuery('#upload__name'); - - if ($name.val() != '') return; - - if (!$file.length || !$name.length) { - return; - } - - text = $file.val(); - text = text.substr(text.lastIndexOf('/') + 1); - text = text.substr(text.lastIndexOf('\\') + 1); - $name.val(text); - }, - - /** - * list the content of a namespace using AJAX - * - * @author Andreas Gohr <andi@splitbrain.org> - * @author Pierre Spring <pierre.spring@caillou.ch> - */ - list: function (event) { - var $link, $content, params; - - if (event) { - event.preventDefault(); - } - - jQuery('div.success, div.info, div.error, div.notify').remove(); - - $link = jQuery(this); - - //popup - $content = jQuery('#media__content'); - - 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'); - } - } - - params = 'call=medialist&'; - - 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')); - } - - // fetch the subtree - dw_mediamanager.update_content($content, params); - }, - - /** - * 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(); - }, - - 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); - - // FIXME: Move to onchange handler (opt[2])? - dw_mediamanager.resize(); - }, - - set_fileview_sort: function (new_sort) { - dw_mediamanager.set_fileview_opt(['sort', 'sortBy', function (new_sort) { - // FIXME - }], new_sort); - }, - - 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 new_val is still undefined (because form.options is not in active tab), set to most spacious option - if (typeof new_val === 'undefined') { - new_val = 'thumbs'; - } - } - - if (new_val !== dw_mediamanager.view_opts[opt[0]]) { - opt[2](new_val); - - DokuCookie.setValue(opt[0], new_val); - - dw_mediamanager.view_opts[opt[0]] = new_val; - } - }, - - /** - * Lists the content of the right column (image details) using AJAX - * - * @author Kate Arzamastseva <pshns@ukr.net> - */ - details: function (event) { - var $link, $content, params, update_list; - $link = jQuery(this); - event.preventDefault(); - - jQuery('div.success, div.info, div.error, div.notify').remove(); - - if ($link[0].id == 'mediamanager__btn_delete' && !confirm(LANG.del_confirm)) { - return false; - } - if ($link[0].id == 'mediamanager__btn_restore' && !confirm(LANG.restore_confirm)) { - return false; - } - - $content = jQuery('div.file'); - params = 'call=mediadetails&'; - - 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')); - } - - update_list = ($link[0].id == 'mediamanager__btn_delete' || - $link[0].id == 'mediamanager__btn_restore'); - - dw_mediamanager.update_content($content, params, update_list); - }, - - update_content: function ($content, params, update_list) { - var $container; - - jQuery.post( - DOKU_BASE + 'lib/exe/ajax.php', - params, - function (data) { - dw_mediamanager.$resizables().resizable('destroy'); - - if (update_list) { - dw_mediamanager.list.call(jQuery('#mediamanager__page').find('form.options button[type="submit"]')[0]); - } - - $content.html(data); - - dw_mediamanager.prepare_content($content); - dw_mediamanager.updatehide(); - - dw_mediamanager.update_resizable(); - dw_behaviour.revisionBoxHandler(); - - // Make sure that the list view style stays the same - dw_mediamanager.set_fileview_list(dw_mediamanager.view_opts.list); - - dw_mediamanager.image_diff(); - dw_mediamanager.init_ajax_uploader(); - dw_mediamanager.init_options(); - - }, - '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" />'); - }, - - window_resize: function () { - dw_mediamanager.resize(); - - dw_mediamanager.opacity_slider(); - dw_mediamanager.portions_slider(); - }, - - $resizables: function () { - return jQuery('#mediamanager__page').find('div.namespaces, div.filelist'); - }, - - /** - * Updates mediamanager layout - * - * @author Kate Arzamastseva <pshns@ukr.net> - */ - update_resizable: function () { - var $resizables = dw_mediamanager.$resizables(); - - $resizables.resizable({ - handles: (jQuery('html[dir=rtl]').length ? 'w' : 'e'), - resize: function (event, ui) { - var $page = jQuery('#mediamanager__page'); - var widthFull = $page.width(); - var widthResizables = 0; - $resizables.each(function () { - widthResizables += jQuery(this).width(); - }); - var $filePanel = $page.find('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) - 1; - $resizables.resizable("option", "maxWidth", maxWidth); - - // width of file panel in % = 100% - width of resizables in % - // this calculates with 99.9 and not 100 to overcome rounding errors - var relWidthNonResizable = 99.9 - (100 * widthResizables / widthFull); - // set width of file panel - $filePanel.width(relWidthNonResizable + '%'); - - dw_mediamanager.resize(); - - dw_mediamanager.opacity_slider(); - dw_mediamanager.portions_slider(); - } - }); - - dw_mediamanager.resize(); - }, - - resize: function () { - var $contents = jQuery('#mediamanager__page').find('div.panelContent'), - height = jQuery(window).height() - jQuery(document.body).height() + - Math.max.apply(null, jQuery.map($contents, function (v) { - return jQuery(v).height(); - })); - - // 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); - }); - } - }, - - /** - * Prints 'select' for image difference representation type - * - * @author Kate Arzamastseva <pshns@ukr.net> - */ - image_diff: function () { - if (jQuery('#mediamanager__difftype').length) return; - - var $form = jQuery('#mediamanager__form_diffview'); - if (!$form.length) return; - - var $label = jQuery(document.createElement('label')); - $label.append('<span>' + LANG.media_diff + '</span> '); - var $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; - }, - - /** - * Handles selection of image difference representation type - * - * @author Kate Arzamastseva <pshns@ukr.net> - */ - change_diff_type: function () { - var $select = jQuery('#mediamanager__difftype'); - var $content = jQuery('#mediamanager__diff'); - - var 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' - ); - }, - - /** - * Sets options for opacity diff slider - * - * @author Kate Arzamastseva <pshns@ukr.net> - */ - opacity_slider: function () { - var $diff = jQuery("#mediamanager__diff"); - var $slider = $diff.find("div.slider"); - if (!$slider.length) return; - - var $image = $diff.find('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.on("slide", function (event, ui) { - jQuery('#mediamanager__diff').find('div.imageDiff.opacity div.image2 img').css({opacity: $slider.slider("option", "value")}); - }); - }, - - /** - * Sets options for red line diff slider - * - * @author Kate Arzamastseva <pshns@ukr.net> - */ - portions_slider: function () { - var $diff = jQuery("#mediamanager__diff"); - if (!$diff.length) return; - - var $image1 = $diff.find('div.imageDiff.portions div.image1 img'); - var $image2 = $diff.find('div.imageDiff.portions div.image2 img'); - if (!$image1.length || !$image2.length) return; - - $diff.width('100%'); - $image2.parent().width('97%'); - $image1.width('100%'); - $image2.width('100%'); - - if ($image1.width() < $diff.width()) { - $diff.width($image1.width()); - } - - $image2.parent().width('50%'); - $image2.width($image1.width()); - $image1.width($image1.width()); - - var $slider = $diff.find("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.on("slide", function (event, ui) { - jQuery('#mediamanager__diff').find('div.imageDiff.portions div.image2').css({width: $slider.slider("option", "value") + '%'}); - }); - }, - - /** - * Parse a URI query string to an associative array - * - * @author Kate Arzamastseva <pshns@ukr.net> - */ - 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; - - var params = dw_mediamanager.form_params(jQuery('#dw__upload')) + '&call=mediaupload'; - params = dw_mediamanager.params_toarray(params); - - var uploader = new qq.FileUploaderExtended({ - element: document.getElementById('mediamanager__uploader'), - action: DOKU_BASE + 'lib/exe/ajax.php', - params: params - }); - }, - - prepare_content: function ($content) { - // hide syntax example - $content.find('div.example:visible').hide(); - }, - - /** - * shows the popup for a image link - */ - select: function (event) { - var $link, id, dot, ext; - - event.preventDefault(); - - $link = jQuery(this); - id = $link.attr('id').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. - var $sendbtn = jQuery('#media__sendbtn'); - $sendbtn.off().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'); - - $sendbtn.focus(); - }, - - /** - * 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 () { - var $obj, opts; - - $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(); - }, - - /** - * Generalized toggler - * - * @author Pierre Spring <pierre.spring@caillou.ch> - */ - 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 visibility of the image details accordingly to the - * chosen hide state - * - * @author Andreas Gohr <andi@splitbrain.org> - */ - updatehide: function () { - jQuery('#media__content').find('div.detail').dw_toggle(!dw_mediamanager.hide); - }, - - /** - * set media insertion option - * - * @author Dominik Eckelmann <eckelmann@cosmocode.de> - */ - setOpt: function (opt, e) { - var val, i; - if (typeof e !== 'undefined') { - val = this.id.substring(this.id.length - 1); - } else { - 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; - } -}; - -/** - * Default implementation for the media manager's select action - * - * Can be overriden with the onselect URL parameter. Is called on the opener context - * - * @param {string} edid - * @param {string} mediaid - * @param {string} opts - * @param {string} align [none, left, center, right] - */ -function dw_mediamanager_item_select(edid, mediaid, opts, align, keepopen) { - var alignleft = ''; - var alignright = ''; - - // Get the 2 characters after the cursor to check if we're currently inside an image tag - var cursorInImageTag = false; - var textArea = jQuery('#' + edid)[0]; - var selection = DWgetSelection(textArea); - selection.end = selection.end + 2; - var charsAfterCursor = selection.getText(); - if (charsAfterCursor === '}}') { - cursorInImageTag = true; - } - - if (align !== '1') { - alignleft = align === '2' ? '' : ' '; - alignright = align === '4' ? '' : ' '; - } - if (keepopen && cursorInImageTag) { - selection.start = selection.start + 2; - DWsetSelection(selection); - } - insertTags(edid, '{{' + alignleft + mediaid + opts + alignright + '|', '}}', ''); -} - -jQuery(dw_mediamanager.init); |