| | |
| | | |
| | | case 'list': |
| | | if (props && props != '') { |
| | | this.reset_qsearch(); |
| | | this.reset_qsearch(true); |
| | | } |
| | | if (this.env.action == 'compose' && this.env.extwin) { |
| | | window.close(); |
| | |
| | | else { |
| | | // reload form |
| | | if (props == 'reload') { |
| | | form.action += '?_reload=1'; |
| | | form.action += '&_reload=1'; |
| | | } |
| | | else if (this.task == 'settings' && (this.env.identities_level % 2) == 0 && |
| | | (input = $("input[name='_email']", form)) && input.length && !rcube_check_email(input.val()) |
| | |
| | | |
| | | // reset quicksearch |
| | | case 'reset-search': |
| | | var n, s = this.env.search_request || this.env.qsearch, |
| | | ss = this.gui_objects.qsearchbox && this.gui_objects.qsearchbox.value != ''; |
| | | var n, s = this.env.search_request || this.env.qsearch; |
| | | |
| | | this.reset_qsearch(); |
| | | this.reset_qsearch(true); |
| | | this.select_all_mode = false; |
| | | |
| | | if (s && this.env.action == 'compose') { |
| | | if (this.contact_list) |
| | | this.list_contacts_clear(); |
| | | } |
| | | else if (s && ss && this.env.mailbox) { |
| | | else if (s && this.env.mailbox) { |
| | | this.list_mailbox(this.env.mailbox, 1); |
| | | } |
| | | else if (s && this.task == 'addressbook') { |
| | |
| | | else if (delay) |
| | | setTimeout(function() { ref.reload(); }, delay); |
| | | else if (window.location) |
| | | location.href = this.env.comm_path + (this.env.action ? '&_action='+this.env.action : ''); |
| | | location.href = this.url('', {_extwin: this.env.extwin}); |
| | | }; |
| | | |
| | | // Add variable to GET string, replace old value if exists |
| | |
| | | // list messages of a specific mailbox using filter |
| | | this.filter_mailbox = function(filter) |
| | | { |
| | | if (this.filter_disabled) |
| | | return; |
| | | |
| | | var lock = this.set_busy(true, 'searching'); |
| | | |
| | | this.clear_message_list(); |
| | |
| | | if (sort) |
| | | url._sort = sort; |
| | | |
| | | // also send search request to get the right messages |
| | | if (this.env.search_request) |
| | | url._search = this.env.search_request; |
| | | |
| | | // set page=1 if changeing to another mailbox |
| | | // folder change, reset page, search scope, etc. |
| | | if (this.env.mailbox != mbox) { |
| | | page = 1; |
| | | this.env.current_page = page; |
| | | this.env.search_scope = 'base'; |
| | | this.select_all_mode = false; |
| | | this.reset_search_filter(); |
| | | } |
| | | // also send search request to get the right messages |
| | | else if (this.env.search_request) |
| | | url._search = this.env.search_request; |
| | | |
| | | if (!update_only) { |
| | | // unselect selected messages and clear the list and message data |
| | |
| | | if (!this.gui_objects.messageform) |
| | | return false; |
| | | |
| | | var i, pos, input_from = $("[name='_from']"), |
| | | var i, elem, pos, input_from = $("[name='_from']"), |
| | | input_to = $("[name='_to']"), |
| | | input_subject = $("input[name='_subject']"), |
| | | input_message = $("[name='_message']").get(0), |
| | |
| | | |
| | | if (!html_mode) { |
| | | pos = this.env.top_posting ? 0 : input_message.value.length; |
| | | this.set_caret_pos(input_message, pos); |
| | | |
| | | // add signature according to selected identity |
| | | // if we have HTML editor, signature is added in callback |
| | | // if we have HTML editor, signature is added in a callback |
| | | if (input_from.prop('type') == 'select-one') { |
| | | this.change_identity(input_from[0]); |
| | | } |
| | | |
| | | // set initial cursor position |
| | | this.set_caret_pos(input_message, pos); |
| | | |
| | | // scroll to the bottom of the textarea (#1490114) |
| | | if (pos) { |
| | |
| | | this.compose_restore_dialog(0, html_mode) |
| | | |
| | | if (input_to.val() == '') |
| | | input_to.focus(); |
| | | elem = input_to; |
| | | else if (input_subject.val() == '') |
| | | input_subject.focus(); |
| | | elem = input_subject; |
| | | else if (input_message) |
| | | input_message.focus(); |
| | | elem = input_message; |
| | | |
| | | // focus first empty element (need to be visible on IE8) |
| | | $(elem).filter(':visible').focus(); |
| | | |
| | | this.env.compose_focus_elem = document.activeElement; |
| | | |
| | |
| | | return url; |
| | | }; |
| | | |
| | | // reset search filter |
| | | this.reset_search_filter = function() |
| | | { |
| | | this.filter_disabled = true; |
| | | if (this.gui_objects.search_filter) |
| | | $(this.gui_objects.search_filter).val('ALL').change(); |
| | | this.filter_disabled = false; |
| | | }; |
| | | |
| | | // reset quick-search form |
| | | this.reset_qsearch = function() |
| | | this.reset_qsearch = function(all) |
| | | { |
| | | if (this.gui_objects.qsearchbox) |
| | | this.gui_objects.qsearchbox.value = ''; |
| | | |
| | | if (this.env.qsearch) |
| | | this.abort_request(this.env.qsearch); |
| | | |
| | | if (all) { |
| | | this.env.search_scope = 'base'; |
| | | this.reset_search_filter(); |
| | | } |
| | | |
| | | this.env.qsearch = null; |
| | | this.env.search_request = null; |
| | |
| | | |
| | | this.env.listcols = listcols; |
| | | |
| | | if (!this.env.coltypes) |
| | | this.env.coltypes = {}; |
| | | |
| | | // replace old column headers |
| | | if (thead) { |
| | | if (repl) { |
| | |
| | | // compose a valid url with the given parameters |
| | | this.url = function(action, query) |
| | | { |
| | | var querystring = typeof query === 'string' ? '&' + query : ''; |
| | | var querystring = typeof query === 'string' ? query : ''; |
| | | |
| | | if (typeof action !== 'string') |
| | | query = action; |
| | |
| | | else if (this.env.action) |
| | | query._action = this.env.action; |
| | | |
| | | var base = this.env.comm_path, k, param = {}; |
| | | var url = this.env.comm_path, k, param = {}; |
| | | |
| | | // overwrite task name |
| | | if (action && action.match(/([a-z0-9_-]+)\/([a-z0-9-_.]+)/)) { |
| | | query._action = RegExp.$2; |
| | | base = base.replace(/\_task=[a-z0-9_-]+/, '_task='+RegExp.$1); |
| | | url = url.replace(/\_task=[a-z0-9_-]+/, '_task=' + RegExp.$1); |
| | | } |
| | | |
| | | // remove undefined values |
| | |
| | | param[k] = query[k]; |
| | | } |
| | | |
| | | return base + (base.indexOf('?') > -1 ? '&' : '?') + $.param(param) + querystring; |
| | | if (param = $.param(param)) |
| | | url += (url.indexOf('?') > -1 ? '&' : '?') + param; |
| | | |
| | | if (querystring) |
| | | url += (url.indexOf('?') > -1 ? '&' : '?') + querystring; |
| | | |
| | | return url; |
| | | }; |
| | | |
| | | this.redirect = function(url, lock) |
| | |
| | | }; |
| | | |
| | | // send a http request to the server |
| | | this.http_request = function(action, query, lock) |
| | | this.http_request = function(action, data, lock) |
| | | { |
| | | var url = this.url(action, query); |
| | | if (typeof data !== 'object') |
| | | data = rcube_parse_query(data); |
| | | |
| | | data._remote = 1; |
| | | data._unlock = lock ? lock : 0; |
| | | |
| | | // trigger plugin hook |
| | | var result = this.triggerEvent('request'+action, query); |
| | | var result = this.triggerEvent('request' + action, data); |
| | | |
| | | if (result !== undefined) { |
| | | // abort if one the handlers returned false |
| | | if (result === false) |
| | | return false; |
| | | else |
| | | url = this.url(action, result); |
| | | // abort if one of the handlers returned false |
| | | if (result === false) { |
| | | if (data._unlock) |
| | | this.set_busy(false, null, data._unlock); |
| | | return false; |
| | | } |
| | | else if (result !== undefined) { |
| | | data = result; |
| | | if (data._action) { |
| | | action = data._action; |
| | | delete data._action; |
| | | } |
| | | } |
| | | |
| | | url += '&_remote=1'; |
| | | var url = this.url(action, data); |
| | | |
| | | // send request |
| | | this.log('HTTP GET: ' + url); |
| | |
| | | this.start_keepalive(); |
| | | |
| | | return $.ajax({ |
| | | type: 'GET', url: url, data: { _unlock:(lock?lock:0) }, dataType: 'json', |
| | | success: function(data){ ref.http_response(data); }, |
| | | type: 'GET', url: url, dataType: 'json', |
| | | success: function(data) { ref.http_response(data); }, |
| | | error: function(o, status, err) { ref.http_error(o, status, err, lock, action); } |
| | | }); |
| | | }; |
| | | |
| | | // send a http POST request to the server |
| | | this.http_post = function(action, postdata, lock) |
| | | this.http_post = function(action, data, lock) |
| | | { |
| | | var url = this.url(action); |
| | | if (typeof data !== 'object') |
| | | data = rcube_parse_query(data); |
| | | |
| | | if (postdata && typeof postdata === 'object') { |
| | | postdata._remote = 1; |
| | | postdata._unlock = (lock ? lock : 0); |
| | | } |
| | | else |
| | | postdata += (postdata ? '&' : '') + '_remote=1' + (lock ? '&_unlock='+lock : ''); |
| | | data._remote = 1; |
| | | data._unlock = lock ? lock : 0; |
| | | |
| | | // trigger plugin hook |
| | | var result = this.triggerEvent('request'+action, postdata); |
| | | if (result !== undefined) { |
| | | // abort if one of the handlers returned false |
| | | if (result === false) |
| | | return false; |
| | | else |
| | | postdata = result; |
| | | var result = this.triggerEvent('request'+action, data); |
| | | |
| | | // abort if one of the handlers returned false |
| | | if (result === false) { |
| | | if (data._unlock) |
| | | this.set_busy(false, null, data._unlock); |
| | | return false; |
| | | } |
| | | else if (result !== undefined) { |
| | | data = result; |
| | | if (data._action) { |
| | | action = data._action; |
| | | delete data._action; |
| | | } |
| | | } |
| | | |
| | | var url = this.url(action); |
| | | |
| | | // send request |
| | | this.log('HTTP POST: ' + url); |
| | |
| | | this.start_keepalive(); |
| | | |
| | | return $.ajax({ |
| | | type: 'POST', url: url, data: postdata, dataType: 'json', |
| | | type: 'POST', url: url, data: data, dataType: 'json', |
| | | success: function(data){ ref.http_response(data); }, |
| | | error: function(o, status, err) { ref.http_error(o, status, err, lock, action); } |
| | | }); |