| | |
| | | |
| | | return rcube_event.cancel(e); |
| | | |
| | | case 9: // tab |
| | | if (mod == SHIFT_KEY || !this.ksearch_visible()) { |
| | | this.ksearch_hide(); |
| | | return; |
| | | } |
| | | |
| | | case 13: // enter |
| | | if (this.ksearch_selected === null || !this.ksearch_value) |
| | | break; |
| | | if (!this.ksearch_visible()) |
| | | return false; |
| | | |
| | | // insert selected address and hide ksearch pane |
| | | this.insert_recipient(this.ksearch_selected); |
| | |
| | | |
| | | return rcube_event.cancel(e); |
| | | |
| | | case 9: // tab |
| | | case 27: // escape |
| | | this.ksearch_hide(); |
| | | return; |
| | |
| | | this.ksearch_input = obj; |
| | | |
| | | return true; |
| | | }; |
| | | |
| | | this.ksearch_visible = function() |
| | | { |
| | | return (this.ksearch_selected !== null && this.ksearch_selected !== undefined && this.ksearch_value); |
| | | }; |
| | | |
| | | this.ksearch_select = function(node) |
| | |
| | | return; |
| | | |
| | | if (q.length && q.length < min) { |
| | | if (!this.env.acinfo) { |
| | | this.env.acinfo = this.display_message( |
| | | if (!this.ksearch_info) { |
| | | this.ksearch_info = this.display_message( |
| | | this.get_label('autocompletechars').replace('$min', min)); |
| | | } |
| | | return; |
| | | } |
| | | else if (this.env.acinfo) { |
| | | this.hide_message(this.env.acinfo); |
| | | } |
| | | |
| | | var old_value = this.ksearch_value; |
| | | this.ksearch_value = q; |
| | | |
| | | this.ksearch_destroy(); |
| | | |
| | | // ...string is empty |
| | |
| | | this.env.contacts = this.env.contacts.concat(results); |
| | | |
| | | // run next parallel search |
| | | if (maxlen > 0 && this.ksearch_data.id == reqid && this.ksearch_data.sources.length) { |
| | | var lock, xhr, props = this.ksearch_data, source = props.sources.shift(); |
| | | if (source) { |
| | | lock = this.display_message(this.get_label('searching'), 'loading'); |
| | | xhr = this.http_post(props.action, '_search='+urlencode(s_val)+'&_id='+reqid |
| | | +'&_source='+urlencode(source), lock); |
| | | if (this.ksearch_data.id == reqid) { |
| | | if (maxlen > 0 && this.ksearch_data.sources.length) { |
| | | var lock, xhr, props = this.ksearch_data, source = props.sources.shift(); |
| | | if (source) { |
| | | lock = this.display_message(this.get_label('searching'), 'loading'); |
| | | xhr = this.http_post(props.action, '_search='+urlencode(s_val)+'&_id='+reqid |
| | | +'&_source='+urlencode(source), lock); |
| | | |
| | | this.ksearch_data.locks.push(lock); |
| | | this.ksearch_data.requests.push(xhr); |
| | | this.ksearch_data.locks.push(lock); |
| | | this.ksearch_data.requests.push(xhr); |
| | | } |
| | | } |
| | | else if (!maxlen && !this.ksearch_msg) |
| | | this.ksearch_msg = this.display_message(this.get_label('autocompletemore')); |
| | | } |
| | | }; |
| | | |
| | |
| | | for (i=0, len=ac.locks.length; i<len; i++) |
| | | this.abort_request({request: ac.requests[i], lock: ac.locks[i]}); |
| | | |
| | | if (this.ksearch_info) |
| | | this.hide_message(this.ksearch_info); |
| | | |
| | | if (this.ksearch_msg) |
| | | this.hide_message(this.ksearch_msg); |
| | | |
| | | this.ksearch_data = null; |
| | | this.ksearch_info = null; |
| | | this.ksearch_msg = null; |
| | | } |
| | | |
| | | /*********************************************************/ |
| | |
| | | { |
| | | // exit if no mailbox specified or if selection is empty |
| | | var selection = this.contact_list.get_selection(); |
| | | if (!(selection.length || this.env.cid) || !confirm(this.get_label('deletecontactconfirm'))) |
| | | var undelete = this.env.address_sources[this.env.source].undelete; |
| | | if (!(selection.length || this.env.cid) || (!undelete && !confirm(this.get_label('deletecontactconfirm')))) |
| | | return; |
| | | |
| | | var id, n, a_cids = [], qs = ''; |