summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdrian Lang <mail@adrianlang.de>2011-09-24 16:34:32 +0200
committerAdrian Lang <mail@adrianlang.de>2011-09-24 16:34:32 +0200
commit554a8c9ffe7dc256ff10fdb49a144ca7dc510989 (patch)
tree5946bdb4e94cdcaaa6a34a2d97ebfb9cb6d643c3
parent33e91473c28e8f1c8542459bb4d755beb620305e (diff)
downloadrpg-554a8c9ffe7dc256ff10fdb49a144ca7dc510989.tar.gz
rpg-554a8c9ffe7dc256ff10fdb49a144ca7dc510989.tar.bz2
More mediamanager reworking
-rw-r--r--inc/common.php12
-rw-r--r--inc/media.php79
-rw-r--r--lib/scripts/media.js164
3 files changed, 135 insertions, 120 deletions
diff --git a/inc/common.php b/inc/common.php
index 56a7fb060..ec7f9bece 100644
--- a/inc/common.php
+++ b/inc/common.php
@@ -1558,4 +1558,16 @@ function valid_input_set($param, $valid_values, $array, $exc = '') {
}
}
+function get_doku_pref($pref, $default) {
+ if (strpos($_COOKIE['DOKU_PREFS'], $pref) !== false) {
+ $parts = explode('#', $_COOKIE['DOKU_PREFS']);
+ for ($i = 0; $i < count($parts); $i+=2){
+ if ($parts[$i] == $pref) {
+ return $parts[$i+1];
+ }
+ }
+ }
+ return $default;
+}
+
//Setup VIM: ex: et ts=2 :
diff --git a/inc/media.php b/inc/media.php
index d26d18626..4ca4c509c 100644
--- a/inc/media.php
+++ b/inc/media.php
@@ -576,12 +576,7 @@ function media_filelist($ns,$auth=null,$jump='',$fullscreenview=false,$sort=fals
echo '<div class="nothing">'.$lang['nothingfound'].'</div>'.NL;
}else {
if ($fullscreenview) {
- $view = $_REQUEST['list'];
- if ($view == 'rows') {
- echo '<ul class="rows">'.NL;
- } else {
- echo '<ul class="thumbs">'.NL;
- }
+ echo '<ul class="' . _media_get_list_type() . '">';
}
foreach($data as $item){
if (!$fullscreenview) {
@@ -651,25 +646,23 @@ function media_tabs_details($image, $selected_tab = ''){
*/
function media_tab_files_options(){
global $lang, $NS;
- $sort = _media_get_sort_type();
- $form = new Doku_Form(array('class' => 'options', 'method' => 'get'));
+ $form = new Doku_Form(array('class' => 'options', 'method' => 'get',
+ 'action' => media_managerURL(array(), '&')));
$form->addHidden('sectok', null);
- $form->addHidden('ns', $NS);
- $form->addHidden('do', 'media');
+ if (isset($_REQUEST['q'])) {
+ $form->addHidden('q', $_REQUEST['q']);
+ }
$form->addElement('<ul>'.NL);
foreach(array('list' => array('listType', array('thumbs', 'rows')),
- 'sort' => array('sortBy', array('name', 'date'), $sort))
+ 'sort' => array('sortBy', array('name', 'date')))
as $group => $content) {
- if (count($content) < 3) {
- $content[2] = isset($_REQUEST[$group])
- ? $_REQUEST[$group]
- : $content[1][0];
- }
+ $checked = "_media_get_${group}_type";
+ $checked = $checked();
$form->addElement('<li class="' . $content[0] . '">');
foreach($content[1] as $option) {
$attrs = array();
- if ($content[2] == $option) {
+ if ($checked == $option) {
$attrs['checked'] = 'checked';
}
$form->addElement(form_makeRadioField($group, $option,
@@ -693,16 +686,20 @@ function media_tab_files_options(){
* @return string - sort type
*/
function _media_get_sort_type() {
- $sort = 'name';
- if (isset($_REQUEST['sort'])) {
- $sort = $_REQUEST['sort'];
- } elseif (strpos($_COOKIE['DOKU_PREFS'], 'sort') >= 0) {
- $parts = explode('#', $_COOKIE['DOKU_PREFS']);
- for ($i = 0; $i < count($parts); $i+=2){
- if ($parts[$i] == 'sort') $sort = $parts[$i+1];
- }
+ return _media_get_display_param('sort', array('default' => 'name', 'date'));
+}
+
+function _media_get_list_type() {
+ return _media_get_display_param('list', array('default' => 'thumbs', 'rows'));
+}
+
+function _media_get_display_param($param, $values) {
+ if (isset($_REQUEST[$param]) && in_array($_REQUEST[$param], $values)) {
+ // FIXME: Set cookie
+ return $_REQUEST[$param];
+ } else {
+ return get_doku_pref($param, $values['default']);
}
- return $sort;
}
/**
@@ -1295,12 +1292,7 @@ function media_searchlist($query,$ns,$auth=null,$fullscreen=false,$sort=''){
echo '<div class="nothing">'.$lang['nothingfound'].'</div>'.NL;
}else {
if ($fullscreen) {
- $view = $_REQUEST['view'];
- if ($view == 'list') {
- echo '<ul class="mediamanager-list" id="mediamanager__file_list">'.NL;
- } else {
- echo '<ul class="mediamanager-thumbs" id="mediamanager__file_list">'.NL;
- }
+ echo '<ul class="' . _media_get_list_type() . '">';
}
foreach($evdata['data'] as $item){
if (!$fullscreen) media_printfile($item,$item['perm'],'',true);
@@ -1514,18 +1506,16 @@ function media_managerURL($params=false, $amp='&amp;', $abs=false, $params_array
global $ID;
$gets = array('do' => 'media');
- $media_manager_params = array('tab_files', 'tab_details', 'image', 'ns', 'view');
+ $media_manager_params = array('tab_files', 'tab_details', 'image', 'ns', 'list', 'sort');
foreach ($media_manager_params as $x) {
if (isset($_REQUEST[$x])) $gets[$x] = $_REQUEST[$x];
}
if ($params) {
- foreach ($params as $k => $v) {
- $gets[$k] = $v;
- }
+ $gets = $params + $gets;
}
unset($gets['id']);
- if ($gets['delete']) {
+ if (isset($gets['delete'])) {
unset($gets['image']);
unset($gets['tab_details']);
}
@@ -1603,15 +1593,18 @@ function media_searchform($ns,$query='',$fullscreen=false){
// The default HTML search form
$params = array('id' => 'dw__mediasearch');
- if (!$fullscreen) $params['action'] = DOKU_BASE.'lib/exe/mediamanager.php';
- else $params['action'] = media_managerURL(array(), '&');
+ if (!$fullscreen) {
+ $params['action'] = DOKU_BASE.'lib/exe/mediamanager.php';
+ } else {
+ $params['action'] = media_managerURL(array(), '&');
+ }
$form = new Doku_Form($params);
- if (!$fullscreen) $form->addElement('<div class="upload">' . $lang['mediasearch'] . '</div>'.NL);
$form->addHidden('ns', $ns);
- if (!$fullscreen) $form->addHidden('do', 'searchlist');
- else $form->addHidden('mediado', 'searchlist');
+ $form->addHidden($fullscreen ? 'mediado' : 'do', 'searchlist');
+
+ if (!$fullscreen) $form->addElement('<div class="upload">' . $lang['mediasearch'] . '</div>'.NL);
$form->addElement(form_makeOpenTag('p'));
- $form->addElement(form_makeTextField('q', $query,$lang['searchmedia'],'mediamanager__sort_textfield','',array('title'=>sprintf($lang['searchmedia_in'],hsc($ns).':*'))));
+ $form->addElement(form_makeTextField('q', $query,$lang['searchmedia'],'','',array('title'=>sprintf($lang['searchmedia_in'],hsc($ns).':*'))));
$form->addElement(form_makeButton('submit', '', $lang['btn_search']));
$form->addElement(form_makeCloseTag('p'));
html_form('searchmedia', $form);
diff --git a/lib/scripts/media.js b/lib/scripts/media.js
index 8200de730..b3768b9db 100644
--- a/lib/scripts/media.js
+++ b/lib/scripts/media.js
@@ -19,8 +19,8 @@ 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,
@@ -66,7 +66,8 @@ var dw_mediamanager = {
}});
$tree.delegate('a', 'click', dw_mediamanager.list);
- dw_mediamanager.set_filelist_view(dw_mediamanager.view, false);
+ // Init view property
+ dw_mediamanager.set_fileview_list();
dw_mediamanager.init_options();
@@ -100,37 +101,43 @@ 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;
+ $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
- $listType.add($sortBy).find('label').each(function () {
+ $both.find('label').each(function () {
var $this = jQuery(this);
$this.children('input').appendTo($this.parent());
$this.find('span span').addClass('a11y');
});
// Init buttonset
- $listType.add($sortBy).buttonset();
+ $both.buttonset();
// Change handlers
$listType.children('input').change(function (event) {
- event.preventDefault();
- dw_mediamanager.set_filelist_view(this.value, true);
+ dw_mediamanager.set_fileview_list();
+ });
+ $sortBy.children('input').change(function (event) {
+ dw_mediamanager.set_fileview_sort();
+ dw_mediamanager.list.call(this, event);
});
- $sortBy.children('input').change(dw_mediamanager.list);
},
/**
@@ -293,16 +300,19 @@ 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('div.filelist');
@@ -314,33 +324,18 @@ var dw_mediamanager = {
}
}
- 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').hasClass('options')) {
- DokuCookie.setValue('sort', $link.val());
- params += '&q=' + $link.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('div.panelContent', $content).html('<img src="' + DOKU_BASE + 'lib/images/loading.gif" alt="..." class="load" />');
- }
},
/**
@@ -350,26 +345,42 @@ 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();
},
- set_filelist_view: function (type, cookies) {
- type = type || DokuCookie.getValue('view');
+ 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);
- jQuery('div.filelist div.panelContent ul')
- .toggleClass('rows', type === 'rows')
- .toggleClass('thumbs', type === 'thumbs');
+ // FIXME: Move to onchange handler (opt[2])?
+ dw_mediamanager.resize();
+ },
- if (cookies) {
- DokuCookie.setValue('view', type);
+ 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();
}
- dw_mediamanager.view = type;
- dw_mediamanager.resize();
+ 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;
+ }
},
/**
@@ -384,31 +395,33 @@ var dw_mediamanager = {
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('div.file');
- params = '';
+ 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('div.panelContent', $content).length) {
- jQuery('div.panelContent', $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,
@@ -422,22 +435,25 @@ var dw_mediamanager = {
dw_mediamanager.update_resizable();
dw_behaviour.revisionBoxHandler();
- 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('div.filelist');
- dw_mediamanager.update_content($content1, params1);
- jQuery('div.panelContent', $content1).html('<img src="' + DOKU_BASE + 'lib/images/loading.gif" alt="..." class="load" />');
+ dw_mediamanager.list.call(jQuery('a.files')[0]);
}
},
'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 () {
@@ -540,7 +556,7 @@ var dw_mediamanager = {
}));
// If the screen is too small, don’t try to resize
- if (height < dw_mediamanager.minHeights[dw_mediamanager.view]) {
+ if (height < dw_mediamanager.minHeights[dw_mediamanager.view_opts.list]) {
$contents.add(dw_mediamanager.$resizables()).height('auto');
} else {
$contents.height(height);
@@ -591,7 +607,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,
@@ -970,10 +986,4 @@ function hasFlash(version){
return ver >= version;
}
-jQuery(document).ready(function() {
- dw_mediamanager.update_resizable();
- dw_mediamanager.layout_width = jQuery("#mediamanager__page").width();
- jQuery(window).resize(dw_mediamanager.window_resize);
-});
-
jQuery(dw_mediamanager.init);