diff options
-rw-r--r-- | inc/common.php | 12 | ||||
-rw-r--r-- | inc/media.php | 79 | ||||
-rw-r--r-- | lib/scripts/media.js | 164 |
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='&', $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); |