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.js443
1 files changed, 201 insertions, 242 deletions
diff --git a/lib/scripts/media.js b/lib/scripts/media.js
index f4064efd5..7f5514f56 100644
--- a/lib/scripts/media.js
+++ b/lib/scripts/media.js
@@ -1,6 +1,3 @@
-/*jslint white: true, onevar: true, undef: true, nomen: true, eqeqeq: true, plusplus: true, bitwise: true, regexp: false, strict: true, newcap: true, immed: true, sloppy: true, browser: true */
-/*global jQuery, DOKU_BASE, LANG, bind, DokuCookie, opener, confirm*/
-
/**
* JavaScript functionality for the media management popup
*
@@ -22,11 +19,13 @@ var dw_mediamanager = {
size: false,
forbidden_opts: {},
- // File list view type
- view: false,
+ // File list options
+ view_opts: {list: false, sort: false},
layout_width: 0,
- layout_height: 0,
+
+ // The minimum height of the full-screen mediamanager in px
+ minHeights: {thumbs: 200, rows: 100},
init: function () {
var $content, $tree;
@@ -67,28 +66,27 @@ var dw_mediamanager = {
}});
$tree.delegate('a', 'click', dw_mediamanager.list);
- dw_mediamanager.set_filelist_view(dw_mediamanager.view, false);
- jQuery('#mediamanager__form_sort').find('input[type=submit]').hide();
+ // 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__layout_list').delegate('#mediamanager__tabs_files a', 'click', dw_mediamanager.list)
- // changing type of the file list view
- .delegate('#mediamanager__tabs_list a', 'click', dw_mediamanager.list_view)
+ jQuery('#mediamanager__page div.filelist').delegate('ul.tabs a', 'click', dw_mediamanager.list)
// loading file details
- .delegate('#mediamanager__file_list a', 'click', dw_mediamanager.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)
- // sort type selection
- .delegate('#mediamanager__form_sort select', 'change', dw_mediamanager.list)
// uploaded images
.delegate('.qq-upload-file a', 'click', dw_mediamanager.details);
// changing opened tab in the file details panel
- jQuery('#mediamanager__layout_detail').delegate('#mediamanager__tabs_details a', 'click', dw_mediamanager.details)
+ 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
@@ -103,6 +101,42 @@ var dw_mediamanager = {
// 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);
+ },
+
+ 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);
+ });
},
/**
@@ -160,8 +194,7 @@ var dw_mediamanager = {
});
// insert button
- $insp = jQuery(document.createElement('p'))
- .addClass('btnlbl');
+ $insp = jQuery(document.createElement('p'));
dw_mediamanager.$popup.append($insp);
$insbtn = jQuery(document.createElement('input'))
@@ -266,56 +299,42 @@ var dw_mediamanager = {
*/
list: function (event) {
var $link, $content, params;
- $link = jQuery(this);
- event.preventDefault();
+ if (event) {
+ event.preventDefault();
+ }
jQuery('div.success, div.info, div.error, div.notify').remove();
- if (document.getElementById('media__content')) {
- //popup
- $content = jQuery('#media__content');
- } else {
+ $link = jQuery(this);
+
+ //popup
+ $content = jQuery('#media__content');
+
+ if ($content.length === 0) {
//fullscreen media manager
- $content = jQuery('#mediamanager__layout_list');
+ $content = jQuery('div.filelist');
if ($link.hasClass('idx_dir')) {
//changing namespace
- jQuery('#mediamanager__layout_detail').empty();
- jQuery('#media__tree .selected').each(function(){
- jQuery(this).removeClass('selected');
- });
+ jQuery('div.file').empty();
+ jQuery('div.namespaces .selected').removeClass('selected');
$link.addClass('selected');
}
}
- params = '';
+ params = 'call=medialist&';
if ($link[0].search) {
- params = $link[0].search.substr(1)+'&call=medialist';
- } else if ($link[0].action) {
- params = dw_mediamanager.form_params($link)+'&call=medialist';
- } else if ($link.parents('form')) {
- params = dw_mediamanager.form_params($link.parents('form'))+'&call=medialist';
-
- if ($link.parents('form')[0].id == 'mediamanager__form_sort') {
- DokuCookie.setValue('sort', $link[0].value);
- params += '&q=' + jQuery('#mediamanager__sort_textfield').val();
- params += '&mediado=searchlist';
- }
+ 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);
-
- if (document.getElementById('media__content')) {
- //popup
- $content = jQuery('#media__content');
- $content.html('<img src="' + DOKU_BASE + 'lib/images/loading.gif" alt="..." class="load" />');
- } else {
- //fullscreen media manager
- jQuery('.scroll-container', $content).html('<img src="' + DOKU_BASE + 'lib/images/loading.gif" alt="..." class="load" />');
- }
},
/**
@@ -325,49 +344,41 @@ var dw_mediamanager = {
*/
form_params: function ($form) {
if (!$form.length) return;
- var elements = $form.serialize();
var action = '';
var i = $form[0].action.indexOf('?');
if (i >= 0) action = $form[0].action.substr(i+1);
- return elements+'&'+action;
+ return action+'&'+$form.serialize();
},
- /**
- * Changes view of media files list
- *
- * @author Kate Arzamastseva <pshns@ukr.net>
- */
- list_view: function (event) {
- var $link, $content;
- $link = jQuery(this);
-
- event.preventDefault();
+ 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);
- $content = jQuery('#mediamanager__file_list');
+ // FIXME: Move to onchange handler (opt[2])?
+ dw_mediamanager.resize();
+ },
- if ($link[0].id == 'mediamanager__link_thumbs') {
- dw_mediamanager.set_filelist_view('thumbs', true);
+ set_fileview_sort: function (new_sort) {
+ dw_mediamanager.set_fileview_opt(['sort', 'sortBy', function (new_sort) {
+ // FIXME
+ }], new_sort);
+ },
- } else if ($link[0].id == 'mediamanager__link_list') {
- dw_mediamanager.set_filelist_view('list', true);
+ set_fileview_opt: function (opt, new_val) {
+ if (typeof new_val === 'undefined') {
+ new_val = jQuery('form.options li.' + opt[1] + ' input')
+ .filter(':checked').val();
}
- },
- set_filelist_view: function (type, cookies) {
- var $content = jQuery('#mediamanager__file_list');
- if (!type) type = DokuCookie.getValue('view');
+ if (new_val !== dw_mediamanager.view_opts[opt[0]]) {
+ opt[2](new_val);
- if (type == 'thumbs') {
- $content.removeClass('mediamanager-list');
- $content.addClass('mediamanager-thumbs');
- if (cookies) DokuCookie.setValue('view', 'thumbs');
- dw_mediamanager.view = 'thumbs';
+ DokuCookie.setValue(opt[0], new_val);
- } else if (type == 'list') {
- $content.removeClass('mediamanager-thumbs');
- $content.addClass('mediamanager-list');
- if (cookies) DokuCookie.setValue('view', 'list');
- dw_mediamanager.view = 'list';
+ dw_mediamanager.view_opts[opt[0]] = new_val;
}
},
@@ -379,43 +390,46 @@ var dw_mediamanager = {
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;
+ 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('#mediamanager__layout_detail');
- params = '';
+ $content = jQuery('div.file');
+ params = 'call=mediadetails&';
if ($link[0].search) {
- params = $link[0].search.substr(1)+'&call=mediadetails';
- } else if ($link[0].action) {
- params = dw_mediamanager.form_params($link)+'&call=mediadetails';
- } else if ($link.parents('form')) {
- params = dw_mediamanager.form_params($link.parents('form'))+'&call=mediadetails';
+ 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_list = ($link[0].id == 'mediamanager__btn_delete' ||
+ $link[0].id == 'mediamanager__btn_restore');
- if (jQuery('.scroll-container', $content).length) {
- jQuery('.scroll-container', $content).html('<img src="' + DOKU_BASE + 'lib/images/loading.gif" alt="..." class="load" />');
- } else {
- jQuery($content).html('<img src="' + DOKU_BASE + 'lib/images/loading.gif" alt="..." class="load" />');
- }
+ 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) {
- jQuery('.ui-resizable').each(function(){
- jQuery(this).resizable('destroy');
- });
+ dw_mediamanager.$resizables().resizable('destroy');
+
+ if (update_list) {
+ dw_mediamanager.list.call(jQuery('input[value="Apply"]')[0]);
+ }
$content.html(data);
@@ -424,128 +438,101 @@ var dw_mediamanager = {
dw_mediamanager.update_resizable();
dw_behaviour.revisionBoxHandler();
- jQuery('#mediamanager__form_sort').find('input[type=submit]').hide();
- dw_mediamanager.set_filelist_view(dw_mediamanager.view, false);
+
+ // 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();
- if (update_list) {
- var $link1, $content1, params1;
- $link1 = jQuery('a.files');
- params1 = $link1[0].search.substr(1)+'&call=medialist';
- $content1 = jQuery('#mediamanager__layout_list');
- dw_mediamanager.update_content($content1, params1);
- jQuery('.scroll-container', $content1).html('<img src="' + DOKU_BASE + 'lib/images/loading.gif" alt="..." class="load" />');
- }
},
'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 () {
- if (jQuery('#mediamanager__layout').width() == dw_mediamanager.layout_width) {
- return;
- }
-
- dw_mediamanager.layout_width = jQuery('#mediamanager__layout').width();
- $r = jQuery("#mediamanager__layout .layout-resizable, #mediamanager__layout .layout");
-
- var w = 0, wSum = 0, mCount = 0, mArray = [];
- $r.each(function() {
- w = jQuery(this).width();
- if (w == parseFloat(jQuery(this).css("min-width"))) {
- wSum += w;
- } else {
- mArray[mCount] = jQuery(this);
- mCount++;
- }
- });
-
- if (mCount > 0) {
- var width = (0.95 * jQuery('#mediamanager__layout').width() - wSum - 30);
- wSum = 0;
- for(var i = 0; i < mArray.length; i++) {
- wSum += mArray[i].width();
- }
- for(var i = 0; i < mArray.length; i++) {
- w = mArray[i].width();
- w = 100*w / wSum;
- mArray[i].width(width*w/100);
- }
- }
-
- $r.each(function() {
- w = jQuery(this).width();
- w = (100 * w / jQuery('#mediamanager__layout').width());
- w += "%";
- jQuery(this).width(w);
- });
-
- var windowHeight = jQuery(window).height();
- var height = windowHeight - 300;
- if (layout_height < height) {
- layout_height = height;
- jQuery('#mediamanager__layout .scroll-container').each(function (i) {
- jQuery(this).height(height);
- });
- $resizable.each(function() {
- jQuery(this).height(height+100);
- });
- }
+ 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 () {
- $resizable = jQuery("#mediamanager__layout .layout-resizable");
+ $resizables = dw_mediamanager.$resizables();
- $resizable.resizable({ handles: 'e' ,
+ $resizables.resizable({
+ handles: 'e',
resize: function(event, ui){
- var w = 0;
- $resizable.each(function() {
- w += jQuery(this).width();
- });
- wSum = w + parseFloat(jQuery('#mediamanager__layout_detail').css("min-width"));
-
- // max width of resizable column
- var maxWidth = 0.95 * jQuery('#mediamanager__layout').width() - wSum + jQuery(this).width() - 30;
- $resizable.resizable( "option", "maxWidth", maxWidth );
-
- // percentage width of the first two columns
- var wLeft = ( 100*(w+30) / jQuery('#mediamanager__layout').width() );
-
- // width of the third column
- var wRight = 95-wLeft;
- wRight += "%";
- jQuery('#mediamanager__layout_detail').width(wRight);
-
- $resizable.each(function() {
- w = jQuery(this).width();
- w = (100 * w / jQuery('#mediamanager__layout').width());
- w += "%";
- jQuery(this).width(w);
+ 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);
+ });
+ }
dw_mediamanager.opacity_slider();
dw_mediamanager.portions_slider();
}
});
- var windowHeight = jQuery(window).height();
- var height = windowHeight - 300;
- layout_height = height;
- jQuery('#mediamanager__layout .scroll-container').each(function (i) {
- jQuery(this).height(height);
- });
- $resizable.each(function() {
- jQuery(this).height(height+100);
- });
+ dw_mediamanager.resize();
+ },
+
+ 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 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);
+ });
+ }
},
/**
@@ -560,7 +547,7 @@ var dw_mediamanager = {
if (!$form.length) return;
$label = jQuery(document.createElement('label'));
- $label.append('<span>'+LANG.media_diff+'</span>');
+ $label.append('<span>'+LANG.media_diff+'</span> ');
$select = jQuery(document.createElement('select'))
.attr('id', 'mediamanager__difftype')
.attr('name', 'difftype')
@@ -571,11 +558,11 @@ var dw_mediamanager = {
$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;
+ // 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;
},
/**
@@ -587,7 +574,7 @@ var dw_mediamanager = {
$select = jQuery('#mediamanager__difftype');
$content = jQuery('#mediamanager__diff');
- params = dw_mediamanager.form_params($select.parents('form'))+'&call=mediadiff';
+ params = dw_mediamanager.form_params($select.closest('form'))+'&call=mediadiff';
jQuery.post(
DOKU_BASE + 'lib/exe/ajax.php',
params,
@@ -606,10 +593,10 @@ var dw_mediamanager = {
* @author Kate Arzamastseva <pshns@ukr.net>
*/
opacity_slider: function () {
- var $slider = jQuery( "#mediamanager__opacity_slider" );
+ var $slider = jQuery( "#mediamanager__diff div.slider" );
if (!$slider.length) return;
- var $image = jQuery('#mediamanager__diff_opacity_image1 img');
+ var $image = jQuery('#mediamanager__diff div.imageDiff.opacity div.image1 img');
if (!$image.length) return;
$slider.width($image.width()-20);
@@ -619,7 +606,7 @@ var dw_mediamanager = {
$slider.slider("option", "step", 0.001);
$slider.slider("option", "value", 0.5);
$slider.bind("slide", function(event, ui) {
- jQuery('#mediamanager__diff_opacity_image2').css({ opacity: $slider.slider("option", "value")});
+ jQuery('#mediamanager__diff div.imageDiff.opacity div.image2 img').css({ opacity: $slider.slider("option", "value")});
});
},
@@ -629,11 +616,11 @@ var dw_mediamanager = {
* @author Kate Arzamastseva <pshns@ukr.net>
*/
portions_slider: function () {
- var $image1 = jQuery('#mediamanager__diff_portions_image1 img');
- var $image2 = jQuery('#mediamanager__diff_portions_image2 img');
+ 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;
- var $div = jQuery("#mediamanager__diff_layout");
+ var $div = jQuery("#mediamanager__diff");
if (!$div.length) return;
$div.width('100%');
@@ -649,7 +636,7 @@ var dw_mediamanager = {
$image2.width($image1.width());
$image1.width($image1.width());
- var $slider = jQuery("#mediamanager__portions_slider");
+ var $slider = jQuery("#mediamanager__diff div.slider");
if (!$slider.length) return;
$slider.width($image1.width()-20);
@@ -659,16 +646,21 @@ var dw_mediamanager = {
$slider.slider("option", "step", 1);
$slider.slider("option", "value", 50);
$slider.bind("slide", function(event, ui) {
- jQuery('#mediamanager__diff_portions_image2').css({ width: $slider.slider("option", "value")+'%'});
+ jQuery('#mediamanager__diff 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[hash[0]] = hash[1];
+ vars[decodeURIComponent(hash[0])] = decodeURIComponent(hash[1]);
}
return vars;
},
@@ -828,33 +820,6 @@ var dw_mediamanager = {
}
},
- initFlashUpload: function () {
- var $oform, $oflash;
- if(!hasFlash(8)) {
- return;
- }
-
- $oform = jQuery('#dw__upload');
- $oflash = jQuery('#dw__flashupload');
-
- if(!$oform.length || !$oflash.length) {
- return;
- }
-
- jQuery(document.createElement('img'))
- .attr('src', DOKU_BASE+'lib/images/multiupload.png')
- .attr('title', LANG.mu_btn)
- .attr('alt', LANG.mu_btn)
- .css('cursor', 'pointer')
- .click(
- function () {
- $oform.hide();
- $oflash.show();
- }
- )
- .appendTo($oform);
- },
-
/**
* Sets the visibility of the image details accordingly to the
* chosen hide state
@@ -966,10 +931,4 @@ function hasFlash(version){
return ver >= version;
}
-jQuery(document).ready(function() {
- dw_mediamanager.update_resizable();
- dw_mediamanager.layout_width = jQuery("#mediamanager__layout").width();
- jQuery(window).resize(dw_mediamanager.window_resize);
-});
-
jQuery(dw_mediamanager.init);