Retain selected folder on page refresh (Bifrost#T18463)

Use window.history.replaceState on folder selection, the same way
is in Roundcube core.
This commit is contained in:
Aleksander Machniak 2016-12-22 11:07:47 +01:00
parent bbe88f6637
commit 516768726a
6 changed files with 28 additions and 4 deletions

View file

@ -734,6 +734,10 @@ function rcube_calendar_ui(settings)
var invite = $('#edit-attendees-invite').get(0);
var comment = $('#edit-attendees-comment');
// make sure any calendar is selected
if (!calendars.val())
calendars.val($('option:first', calendars).attr('value'));
invite.checked = settings.itip_notify & 1 > 0;
notify.checked = has_attendees(event) && invite.checked;
@ -3542,6 +3546,8 @@ function rcube_calendar_ui(settings)
rcmail.triggerEvent('selectfolder', { folder:id, prefix:'rcmlical' });
this.selected_calendar = id;
rcmail.update_state({source: id});
};
// register the given calendar to the current view
@ -3748,7 +3754,9 @@ function rcube_calendar_ui(settings)
});
// select default calendar
if (settings.default_calendar && this.calendars[settings.default_calendar] && this.calendars[settings.default_calendar].editable)
if (rcmail.env.source && this.calendars[rcmail.env.source])
this.selected_calendar = rcmail.env.source;
else if (settings.default_calendar && this.calendars[settings.default_calendar] && this.calendars[settings.default_calendar].editable)
this.selected_calendar = settings.default_calendar;
if (this.selected_calendar)

View file

@ -235,6 +235,7 @@ class calendar_ui
);
}
$this->rc->output->set_env('source', rcube_utils::get_input_value('source', rcube_utils::INPUT_GET));
$this->rc->output->set_env('calendars', $jsenv);
$this->rc->output->add_gui_object('calendarslist', $attrib['id']);

View file

@ -193,6 +193,8 @@ function kolab_files_init()
file_api.request('folder_info', {folder: file_api.file_path(rcmail.env.file), sessions: 1}, 'folder_info_response');
}
else {
file_api.env.folder = rcmail.env.folder;
file_api.env.collection = rcmail.env.collection;
file_api.folder_list();
file_api.browser_capabilities_check();
}
@ -2059,7 +2061,7 @@ function kolab_files_ui()
});
// select first folder?
if (response.result.auth_errors) { }
if (response.result.auth_errors && response.result.auth_errors.length) { }
else if (this.env.folder)
rcmail.folder_list.select(this.env.folder);
else if (this.env.collection)
@ -2085,6 +2087,9 @@ function kolab_files_ui()
var is_collection = folder.match(/^folder-collection-(.*)$/),
collection = RegExp.$1 || null;
if (rcmail.task == 'files' && !rcmail.env.action)
rcmail.update_state(is_collection ? {collection: collection} : {folder: folder});
if (collection == 'sessions') {
rcmail.enable_command('files-list', 'files-folder-delete', 'folder-rename', 'files-upload', false);
this.sessions_list();

View file

@ -961,6 +961,11 @@ class kolab_files_engine
$this->folder_list_env();
if ($this->rc->task == 'files') {
$this->rc->output->set_env('folder', rcube_utils::get_input_value('folder', rcube_utils::INPUT_GET));
$this->rc->output->set_env('collection', rcube_utils::get_input_value('collection', rcube_utils::INPUT_GET));
}
$this->rc->output->add_label('uploadprogress', 'GB', 'MB', 'KB', 'B');
$this->rc->output->set_pagetitle($this->plugin->gettext('files'));
$this->rc->output->set_env('file_mimetypes', $this->get_mimetypes());

View file

@ -156,6 +156,9 @@ function rcube_tasklist_ui(settings)
}
}
if (rcmail.env.source && me.tasklists[rcmail.env.source])
me.selected_list = rcmail.env.source;
// initialize treelist widget that controls the tasklists list
var widget_class = window.kolab_folderlist || rcube_treelist_widget;
tasklists_widget = new widget_class(rcmail.gui_objects.tasklistslist, {
@ -176,6 +179,7 @@ function rcube_tasklist_ui(settings)
rcmail.enable_command('list-remove', me.tasklists[node.id] && me.tasklists[node.id].removable);
rcmail.enable_command('list-showurl', me.tasklists[node.id] && !!me.tasklists[node.id].caldavurl);
me.selected_list = node.id;
rcmail.update_state({source: node.id});
});
tasklists_widget.addEventListener('subscribe', function(p) {
var list;
@ -2939,7 +2943,7 @@ function rcube_tasklist_ui(settings)
}
}
return $.unqiqueStrings(itags);
return $.uniqueStrings(itags);
}
/**
@ -3414,7 +3418,7 @@ jQuery.fn.sortElements = (function(){
})();
// equivalent to $.unique() but working on arrays of strings
jQuery.unqiqueStrings = (function() {
jQuery.uniqueStrings = (function() {
return function(arr) {
var hash = {}, out = [];

View file

@ -202,6 +202,7 @@ class tasklist_ui
}
}
$this->rc->output->set_env('source', rcube_utils::get_input_value('source', rcube_utils::INPUT_GET));
$this->rc->output->set_env('tasklists', $jsenv);
$this->register_gui_object('tasklistslist', $attrib['id']);