- use jQuery.inArray() instead of rcube_in_array()
| | |
| | | |
| | | *** Current status of THREADS implementation *** |
| | | |
| | | |
| | | CHANGES IN RELATION TO ORIGINAL PATCH |
| | | - don't add nested messages into selection on collapse if parent message |
| | | is in selection |
| | |
| | | - updating threaded message list on message delete |
| | | - don't reload messages list on check_recent |
| | | |
| | | KNOWN ISSUES: |
| | | - on new message (check_recent) the whole list is reloaded |
| | | - css issues on IE6 |
| | | |
| | | TODO (other): |
| | | - performance: fetching all messages for list in "expand all" state only, |
| | | if "expand all" is disabled we should fetch only root messages and fetch |
| | |
| | | all headers for each child |
| | | - button in #listcontrols to mark all messages in current thread (with selected |
| | | root or child message), |
| | | + thread tree icons |
| | | + thread css: message row height, thread/status icon alignment |
| | | (change size of all list icons to 14x14) |
| | | - remove 'indexsort' label from localization files |
| | | - icons for thread tree structure |
| | | |
| | | TODO (by the way): |
| | | - use jQuery.inArray instead of find_in_array() (common.js) |
| | | + use only one function (js) to generate messages list |
| | | |
| | | KNOWN ISSUES: |
| | | - on new message (check_recent) the whole list is reloaded |
| | | + table header replacement doesn't work on IE |
| | | - css issues on IE6 |
| | | + css issues on IE7 |
| | | |
| | |
| | | var qstring = '_mbox='+urlencode(this.env.mailbox)+'&_uid='+this.env.uid+'&_part='+props.part; |
| | | |
| | | // open attachment in frame if it's of a supported mimetype |
| | | if (this.env.uid && props.mimetype && find_in_array(props.mimetype, this.mimetypes)>=0) |
| | | if (this.env.uid && props.mimetype && jQuery.inArray(props.mimetype, this.mimetypes)>=0) |
| | | { |
| | | if (props.mimetype == 'text/html') |
| | | qstring += '&_safe=1'; |
| | |
| | | this.env.flagged_col = null; |
| | | |
| | | var found; |
| | | if((found = find_in_array('subject', this.env.coltypes)) >= 0) { |
| | | if((found = jQuery.inArray('subject', this.env.coltypes)) >= 0) { |
| | | this.set_env('subject_col', found); |
| | | if (this.message_list) |
| | | this.message_list.subject_col = found+1; |
| | | } |
| | | if((found = find_in_array('flag', this.env.coltypes)) >= 0) |
| | | if((found = jQuery.inArray('flag', this.env.coltypes)) >= 0) |
| | | this.set_env('flagged_col', found); |
| | | }; |
| | | |
| | |
| | | } |
| | | |
| | | |
| | | // find a value in a specific array and returns the index |
| | | function find_in_array() |
| | | { |
| | | var args = find_in_array.arguments; |
| | | if(!args.length) return -1; |
| | | |
| | | var haystack = typeof(args[0])=='object' ? args[0] : args.length>1 && typeof(args[1])=='object' ? args[1] : new Array(); |
| | | var needle = typeof(args[0])!='object' ? args[0] : args.length>1 && typeof(args[1])!='object' ? args[1] : ''; |
| | | var nocase = args.length==3 ? args[2] : false; |
| | | |
| | | if(!haystack.length) return -1; |
| | | |
| | | for(var i=0; i<haystack.length; i++) |
| | | if(nocase && haystack[i].toLowerCase()==needle.toLowerCase()) |
| | | return i; |
| | | else if(haystack[i]==needle) |
| | | return i; |
| | | |
| | | return -1; |
| | | } |
| | | |
| | | // recursively copy an object |
| | | function rcube_clone_object(obj) |
| | | { |
| | |
| | | } |
| | | else // unselect row |
| | | { |
| | | var p = find_in_array(id, this.selection); |
| | | var p = jQuery.inArray(id, this.selection); |
| | | var a_pre = this.selection.slice(0, p); |
| | | var a_post = this.selection.slice(p+1, this.selection.length); |
| | | this.selection = a_pre.concat(a_post); |