Changeset 960 in subversion


Ignore:
Timestamp:
Jan 27, 2008 7:31:54 PM (5 years ago)
Author:
till
Message:
  • added new js files
  • patched JS files with changes from rc1 to trunk
  • fixed some CS (lots more todo)
Location:
branches/devel-vnext/program/js
Files:
2 added
3 edited

Legend:

Unmodified
Added
Removed
  • branches/devel-vnext/program/js/common.js

    r589 r960  
    44 |                                                                       | 
    55 | This file is part of the RoundCube web development suite              | 
    6  | Copyright (C) 2005-2006, RoundCube Dev, - Switzerland                 | 
     6 | Copyright (C) 2005-2007, RoundCube Dev, - Switzerland                 | 
    77 | Licensed under the GNU GPL                                            | 
    88 |                                                                       | 
     
    2525 */ 
    2626function roundcube_browser() 
    27   { 
    28   this.ver = parseFloat(navigator.appVersion); 
    29   this.appver = navigator.appVersion; 
    30   this.agent = navigator.userAgent; 
    31   this.name = navigator.appName; 
    32   this.vendor = navigator.vendor ? navigator.vendor : ''; 
    33   this.vendver = navigator.vendorSub ? parseFloat(navigator.vendorSub) : 0; 
    34   this.product = navigator.product ? navigator.product : ''; 
    35   this.platform = String(navigator.platform).toLowerCase(); 
    36   this.lang = (navigator.language) ? navigator.language.substring(0,2) : 
    37               (navigator.browserLanguage) ? navigator.browserLanguage.substring(0,2) : 
    38               (navigator.systemLanguage) ? navigator.systemLanguage.substring(0,2) : 'en'; 
    39  
    40   this.win = (this.platform.indexOf('win')>=0) ? true : false; 
    41   this.mac = (this.platform.indexOf('mac')>=0) ? true : false; 
    42   this.linux = (this.platform.indexOf('linux')>=0) ? true : false; 
    43   this.unix = (this.platform.indexOf('unix')>=0) ? true : false; 
    44  
    45   this.dom = document.getElementById ? true : false; 
    46   this.dom2 = (document.addEventListener && document.removeEventListener); 
    47  
    48   this.ie = (document.all) ? true : false; 
    49   this.ie4 = (this.ie && !this.dom); 
    50   this.ie5 = (this.dom && this.appver.indexOf('MSIE 5')>0); 
    51   this.ie6 = (this.dom && this.appver.indexOf('MSIE 6')>0); 
    52  
    53   this.mz = (this.dom && this.ver>=5);  // (this.dom && this.product=='Gecko') 
    54   this.ns = ((this.ver<5 && this.name=='Netscape') || (this.ver>=5 && this.vendor.indexOf('Netscape')>=0)); 
    55   this.ns4 = (this.ns && parseInt(this.ver)==4); 
    56   this.ns6 = (this.ns && parseInt(this.vendver)==6);  // (this.mz && this.ns) ? true : false; 
    57   this.ns7 = (this.ns && parseInt(this.vendver)==7);  // this.agent.indexOf('Netscape/7')>0); 
    58   this.safari = (this.agent.toLowerCase().indexOf('safari')>0 || this.agent.toLowerCase().indexOf('applewebkit')>0); 
    59   this.konq   = (this.agent.toLowerCase().indexOf('konqueror')>0); 
    60  
    61   this.opera = (window.opera) ? true : false; 
    62   this.opera5 = (this.opera5 && this.agent.indexOf('Opera 5')>0) ? true : false; 
    63   this.opera6 = (this.opera && this.agent.indexOf('Opera 6')>0) ? true : false; 
    64   this.opera7 = (this.opera && this.agent.indexOf('Opera 7')>0) ? true : false; 
    65  
    66   if(this.opera && window.RegExp) 
    67     this.vendver = (/opera(\s|\/)([0-9\.]+)/i.test(navigator.userAgent)) ? parseFloat(RegExp.$2) : -1; 
    68   else if(!this.vendver && this.safari) 
    69     this.vendver = (/(safari|applewebkit)\/([0-9]+)/i.test(this.agent)) ? parseInt(RegExp.$2) : 0; 
    70   else if((!this.vendver && this.mz) || this.agent.indexOf('Camino')>0) 
    71     this.vendver = (/rv:([0-9\.]+)/.test(this.agent)) ? parseFloat(RegExp.$1) : 0; 
    72   else if(this.ie && window.RegExp) 
    73     this.vendver = (/msie\s+([0-9\.]+)/i.test(this.agent)) ? parseFloat(RegExp.$1) : 0; 
    74   else if(this.konq && window.RegExp) 
    75     this.vendver = (/khtml\/([0-9\.]+)/i.test(this.agent)) ? parseFloat(RegExp.$1) : 0; 
    76  
    77  
    78   // get real language out of safari's user agent 
    79   if(this.safari && (/;\s+([a-z]{2})-[a-z]{2}\)/i.test(this.agent))) 
    80     this.lang = RegExp.$1; 
    81  
    82   this.dhtml = ((this.ie4 && this.win) || this.ie5 || this.ie6 || this.ns4 || this.mz); 
    83   this.layers = this.ns4;  // (document.layers); 
    84   this.div = (this.ie4 || this.dom); 
    85   this.vml = (this.win && this.ie && this.dom && !this.opera); 
    86   this.linkborder = (this.ie || this.mz); 
    87   this.rollover = (this.ver>=4 || (this.ns && this.ver>=3));  // (document.images) ? true : false; 
    88   this.pngalpha = (this.mz || (this.opera && this.vendver>=6) || (this.ie && this.mac && this.vendver>=5) || 
    89                    (this.ie && this.win && this.vendver>=5.5) || this.safari); 
    90   this.opacity = (this.mz || (this.ie && this.vendver>=5.5 && !this.opera) || (this.safari && this.vendver>=100)); 
    91   this.cookies = navigator.cookieEnabled; 
    92    
    93   // test for XMLHTTP support 
    94   this.xmlhttp_test = function() 
    95     { 
    96     var activeX_test = new Function("try{var o=new ActiveXObject('Microsoft.XMLHTTP');return true;}catch(err){return false;}"); 
    97     this.xmlhttp = (window.XMLHttpRequest || (window.ActiveXObject && activeX_test())) ? true : false; 
    98     return this.xmlhttp; 
    99     } 
    100   } 
     27{ 
     28    this.ver = parseFloat(navigator.appVersion); 
     29    this.appver = navigator.appVersion; 
     30    this.agent = navigator.userAgent; 
     31    this.name = navigator.appName; 
     32    this.vendor = navigator.vendor ? navigator.vendor : ''; 
     33    this.vendver = navigator.vendorSub ? parseFloat(navigator.vendorSub) : 0; 
     34    this.product = navigator.product ? navigator.product : ''; 
     35    this.platform = String(navigator.platform).toLowerCase(); 
     36    this.lang = (navigator.language) ? navigator.language.substring(0,2) : 
     37                (navigator.browserLanguage) ? navigator.browserLanguage.substring(0,2) : 
     38                (navigator.systemLanguage) ? navigator.systemLanguage.substring(0,2) : 'en'; 
     39 
     40    this.win = (this.platform.indexOf('win')>=0) ? true : false; 
     41    this.mac = (this.platform.indexOf('mac')>=0) ? true : false; 
     42    this.linux = (this.platform.indexOf('linux')>=0) ? true : false; 
     43    this.unix = (this.platform.indexOf('unix')>=0) ? true : false; 
     44 
     45    this.dom = document.getElementById ? true : false; 
     46    this.dom2 = (document.addEventListener && document.removeEventListener); 
     47 
     48    this.ie = (document.all) ? true : false; 
     49    this.ie4 = (this.ie && !this.dom); 
     50    this.ie5 = (this.dom && this.appver.indexOf('MSIE 5')>0); 
     51    this.ie6 = (this.dom && this.appver.indexOf('MSIE 6')>0); 
     52 
     53    this.mz = (this.dom && this.ver>=5);  // (this.dom && this.product=='Gecko') 
     54    this.ns = ((this.ver<5 && this.name=='Netscape') || (this.ver>=5 && this.vendor.indexOf('Netscape')>=0)); 
     55    this.ns6 = (this.ns && parseInt(this.vendver)==6);  // (this.mz && this.ns) ? true : false; 
     56    this.ns7 = (this.ns && parseInt(this.vendver)==7);  // this.agent.indexOf('Netscape/7')>0); 
     57    this.safari = (this.agent.toLowerCase().indexOf('safari')>0 || this.agent.toLowerCase().indexOf('applewebkit')>0); 
     58    this.konq   = (this.agent.toLowerCase().indexOf('konqueror')>0); 
     59 
     60    this.opera = (window.opera) ? true : false; 
     61 
     62    if (this.opera && window.RegExp) { 
     63        this.vendver = (/opera(\s|\/)([0-9\.]+)/i.test(navigator.userAgent)) ? parseFloat(RegExp.$2) : -1; 
     64    } else if(!this.vendver && this.safari) { 
     65        this.vendver = (/(safari|applewebkit)\/([0-9]+)/i.test(this.agent)) ? parseInt(RegExp.$2) : 0; 
     66    } else if((!this.vendver && this.mz) || this.agent.indexOf('Camino')>0) { 
     67        this.vendver = (/rv:([0-9\.]+)/.test(this.agent)) ? parseFloat(RegExp.$1) : 0; 
     68    } else if(this.ie && window.RegExp) { 
     69        this.vendver = (/msie\s+([0-9\.]+)/i.test(this.agent)) ? parseFloat(RegExp.$1) : 0; 
     70    } else if(this.konq && window.RegExp) { 
     71        this.vendver = (/khtml\/([0-9\.]+)/i.test(this.agent)) ? parseFloat(RegExp.$1) : 0; 
     72    } 
     73 
     74    // get real language out of safari's user agent 
     75    if(this.safari && (/;\s+([a-z]{2})-[a-z]{2}\)/i.test(this.agent))) { 
     76        this.lang = RegExp.$1; 
     77    } 
     78 
     79    this.dhtml = ((this.ie4 && this.win) || this.ie5 || this.ie6 || this.ns4 || this.mz); 
     80    this.vml = (this.win && this.ie && this.dom && !this.opera); 
     81    this.pngalpha = (this.mz || (this.opera && this.vendver>=6) || (this.ie && this.mac && this.vendver>=5) || 
     82                    (this.ie && this.win && this.vendver>=5.5) || this.safari); 
     83    this.opacity = (this.mz || (this.ie && this.vendver>=5.5 && !this.opera) || (this.safari && this.vendver>=100)); 
     84    this.cookies = navigator.cookieEnabled; 
     85   
     86    // test for XMLHTTP support 
     87    this.xmlhttp_test = function() 
     88    { 
     89        var activeX_test = new Function("try{var o=new ActiveXObject('Microsoft.XMLHTTP');return true;}catch(err){return false;}"); 
     90        this.xmlhttp = (window.XMLHttpRequest || (window.ActiveXObject && activeX_test())) ? true : false; 
     91        return this.xmlhttp; 
     92    } 
     93} 
    10194 
    10295 
     
    394387// http://code.iamcal.com/php/rfc822/ 
    395388function rcube_check_email(input, inline) 
    396   { 
    397   if (input && window.RegExp) 
    398     { 
    399     var no_ws_ctl    = "[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]"; 
    400     var alpha        = "[\\x41-\\x5a\\x61-\\x7a]"; 
    401     var digit        = "[\\x30-\\x39]"; 
    402     var cr        = "\\x0d"; 
    403     var lf        = "\\x0a"; 
    404     var crlf        = "(" + cr + lf + ")"; 
    405  
    406     var obs_char    = "[\\x00-\\x09\\x0b\\x0c\\x0e-\\x7f]"; 
    407     var obs_text    = "("+lf+"*"+cr+"*("+obs_char+lf+"*"+cr+"*)*)"; 
    408     var text        = "([\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f]|"+obs_text+")"; 
    409     var obs_qp        = "(\\x5c[\\x00-\\x7f])"; 
    410     var quoted_pair    = "(\\x5c"+text+"|"+obs_qp+")"; 
    411  
    412     var wsp        = "[\\x20\\x09]"; 
    413     var obs_fws    = "("+wsp+"+("+crlf+wsp+"+)*)"; 
    414     var fws        = "((("+wsp+"*"+crlf+")?"+wsp+"+)|"+obs_fws+")"; 
    415     var ctext        = "("+no_ws_ctl+"|[\\x21-\\x27\\x2A-\\x5b\\x5d-\\x7e])"; 
    416     var ccontent    = "("+ctext+"|"+quoted_pair+")"; 
    417     var comment    = "(\\x28("+fws+"?"+ccontent+")*"+fws+"?\\x29)"; 
    418     var cfws        = "(("+fws+"?"+comment+")*("+fws+"?"+comment+"|"+fws+"))"; 
    419     var cfws        = fws+"*"; 
    420  
    421     var atext        = "("+alpha+"|"+digit+"|[\\x21\\x23-\\x27\\x2a\\x2b\\x2d\\x2e\\x3d\\x3f\\x5e\\x5f\\x60\\x7b-\\x7e])"; 
    422     var atom        = "("+cfws+"?"+atext+"+"+cfws+"?)"; 
    423  
    424     var qtext        = "("+no_ws_ctl+"|[\\x21\\x23-\\x5b\\x5d-\\x7e])"; 
    425     var qcontent    = "("+qtext+"|"+quoted_pair+")"; 
    426     var quoted_string    = "("+cfws+"?\\x22("+fws+"?"+qcontent+")*"+fws+"?\\x22"+cfws+"?)"; 
    427     var word        = "("+atom+"|"+quoted_string+")"; 
    428  
    429     var obs_local_part    = "("+word+"(\\x2e"+word+")*)"; 
    430     var obs_domain    = "("+atom+"(\\x2e"+atom+")*)"; 
    431  
    432     var dot_atom_text    = "("+atext+"+(\\x2e"+atext+"+)*)"; 
    433     var dot_atom    = "("+cfws+"?"+dot_atom_text+cfws+"?)"; 
    434  
    435     var dtext        = "("+no_ws_ctl+"|[\\x21-\\x5a\\x5e-\\x7e])"; 
    436     var dcontent    = "("+dtext+"|"+quoted_pair+")"; 
    437     var domain_literal    = "("+cfws+"?\\x5b("+fws+"?"+dcontent+")*"+fws+"?\\x5d"+cfws+"?)"; 
    438  
    439     var local_part    = "("+dot_atom+"|"+quoted_string+"|"+obs_local_part+")"; 
    440     var domain        = "("+dot_atom+"|"+domain_literal+"|"+obs_domain+")"; 
    441     var addr_spec    = "("+local_part+"\\x40"+domain+")"; 
    442  
    443     var reg1 = inline ? new RegExp(addr_spec, 'i') : new RegExp('^'+addr_spec+'$', 'i'); 
    444     return reg1.test(input) ? true : false; 
    445     } 
    446   return false; 
    447   } 
    448    
    449  
     389{ 
     390    if (input && window.RegExp) { 
     391        var qtext = '[^\\x0d\\x22\\x5c\\x80-\\xff]'; 
     392        var dtext = '[^\\x0d\\x5b-\\x5d\\x80-\\xff]'; 
     393        var atom = '[^\\x00-\\x20\\x22\\x28\\x29\\x2c\\x2e\\x3a-\\x3c\\x3e\\x40\\x5b-\\x5d\\x7f-\\xff]+'; 
     394        var quoted_pair = '\\x5c[\\x00-\\x7f]'; 
     395        var domain_literal = '\\x5b('+dtext+'|'+quoted_pair+')*\\x5d'; 
     396        var quoted_string = '\\x22('+qtext+'|'+quoted_pair+')*\\x22'; 
     397        var sub_domain = '('+atom+'|'+domain_literal+')'; 
     398        var word = '('+atom+'|'+quoted_string+')'; 
     399        var domain = sub_domain+'(\\x2e'+sub_domain+')*'; 
     400        var local_part = word+'(\\x2e'+word+')*'; 
     401        var addr_spec = local_part+'\\x40'+domain; 
     402        var reg1 = inline ? new RegExp('(^|<)'+addr_spec+'(>|$)', 'i') : new RegExp('^'+addr_spec+'$', 'i'); 
     403        return reg1.test(input) ? true : false; 
     404    } 
     405    return false; 
     406} 
     407   
    450408// find a value in a specific array and returns the index 
    451409function find_in_array() 
    452   { 
     410{ 
    453411  var args = find_in_array.arguments; 
    454412  if(!args.length) return -1; 
     
    623581var bw = new roundcube_browser(); 
    624582 
    625 if (!window.console) 
    626   console = new rcube_console(); 
     583if (!window.console) { 
     584    console = new rcube_console(); 
     585} 
     586 
     587// Add escape() method to RegExp object 
     588// http://dev.rubyonrails.org/changeset/7271 
     589RegExp.escape = function(str) 
     590{ 
     591    return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1'); 
     592} 
  • branches/devel-vnext/program/js/googiespell.js

    r589 r960  
    1818 
    1919var AJS = { 
    20 //// 
    21 // Accessor functions 
    22 //// 
    23   /** 
    24    * @returns The element with the id 
    25    */ 
    26   getElement: function(id) { 
    27     if(typeof(id) == "string")  
    28       return document.getElementById(id); 
    29     else 
    30       return id; 
    31   }, 
    32  
    33   /** 
    34    * @returns The elements with the ids 
    35    */ 
    36   getElements: function(/*id1, id2, id3*/) { 
    37     var elements = new Array(); 
    38       for (var i = 0; i < arguments.length; i++) { 
    39         var element = this.getElement(arguments[i]); 
    40         elements.push(element); 
    41       } 
    42       return elements; 
    43   }, 
    44  
    45   /** 
    46    * @returns The GET query argument 
    47    */ 
    48   getQueryArgument: function(var_name) { 
    49     var query = window.location.search.substring(1); 
    50     var vars = query.split("&"); 
    51     for (var i=0;i<vars.length;i++) { 
    52       var pair = vars[i].split("="); 
    53       if (pair[0] == var_name) { 
    54         return pair[1]; 
    55       } 
    56     } 
    57     return null; 
    58   }, 
    59  
    60   /** 
    61    * @returns If the browser is Internet Explorer 
    62    */ 
    63   isIe: function() { 
    64     return (navigator.userAgent.toLowerCase().indexOf("msie") != -1 && navigator.userAgent.toLowerCase().indexOf("opera") == -1); 
    65   }, 
    66  
    67   /** 
    68    * @returns The document body    
    69    */ 
    70   getBody: function() { 
    71     return this.getElementsByTagAndClassName('body')[0]  
    72   }, 
    73  
    74   /** 
    75    * @returns All the elements that have a specific tag name or class name 
    76    */ 
    77   getElementsByTagAndClassName: function(tag_name, class_name, /*optional*/ parent) { 
    78     var class_elements = new Array(); 
    79     if(!this.isDefined(parent)) 
    80       parent = document; 
    81     if(!this.isDefined(tag_name)) 
    82       tag_name = '*'; 
    83  
    84     var els = parent.getElementsByTagName(tag_name); 
    85     var els_len = els.length; 
    86     var pattern = new RegExp("(^|\\s)" + class_name + "(\\s|$)"); 
    87  
    88     for (i = 0, j = 0; i < els_len; i++) { 
    89       if ( pattern.test(els[i].className) || class_name == null ) { 
    90         class_elements[j] = els[i]; 
    91         j++; 
    92       } 
    93     } 
    94     return class_elements; 
    95   }, 
     20    //// 
     21    // Accessor functions 
     22    //// 
     23    /** 
     24     * @returns The element with the id 
     25     */ 
     26    getElement: function(id) 
     27    { 
     28        if (typeof(id) == "string") { 
     29            return document.getElementById(id); 
     30        } else { 
     31            return id; 
     32        } 
     33    }, 
     34 
     35    /** 
     36     * @returns The elements with the ids 
     37     */ 
     38    getElements: function(/*id1, id2, id3*/) 
     39    { 
     40        var elements = new Array(); 
     41        for (var i = 0; i < arguments.length; i++) { 
     42            var element = this.getElement(arguments[i]); 
     43            elements.push(element); 
     44        } 
     45        return elements; 
     46    }, 
     47 
     48    /** 
     49     * @returns The GET query argument 
     50     */ 
     51    getQueryArgument: function(var_name) 
     52    { 
     53        var query = window.location.search.substring(1); 
     54        var vars = query.split("&"); 
     55        for (var i=0;i<vars.length;i++) { 
     56            var pair = vars[i].split("="); 
     57            if (pair[0] == var_name) { 
     58                return pair[1]; 
     59            } 
     60        } 
     61        return null; 
     62    }, 
     63 
     64    /** 
     65     * @returns If the browser is Internet Explorer 
     66     */ 
     67    isIe: function() 
     68    { 
     69        return (navigator.userAgent.toLowerCase().indexOf("msie") != -1 && navigator.userAgent.toLowerCase().indexOf("opera") == -1); 
     70    }, 
     71 
     72    /** 
     73     * @returns The document body    
     74     */ 
     75    getBody: function() { 
     76        return this.getElementsByTagAndClassName('body')[0]  
     77    }, 
     78 
     79    /** 
     80     * @returns All the elements that have a specific tag name or class name 
     81     */ 
     82    getElementsByTagAndClassName: function(tag_name, class_name, /*optional*/ parent) { 
     83        var class_elements = new Array(); 
     84        if (!this.isDefined(parent)) { 
     85            parent = document; 
     86        } 
     87        if (!this.isDefined(tag_name)) { 
     88            tag_name = '*'; 
     89        } 
     90         
     91        var els = parent.getElementsByTagName(tag_name); 
     92        var els_len = els.length; 
     93        var pattern = new RegExp("(^|\\s)" + class_name + "(\\s|$)"); 
     94     
     95        for (i = 0, j = 0; i < els_len; i++) { 
     96            if ( pattern.test(els[i].className) || class_name == null ) { 
     97                class_elements[j] = els[i]; 
     98                j++; 
     99            } 
     100        } 
     101        return class_elements; 
     102    }, 
    96103 
    97104 
  • branches/devel-vnext/program/js/list.js

    r762 r960  
    3535    this.shiftkey  = false; 
    3636 
    37     this.multiselect = false; 
    38     this.draggable   = false; 
    39     this.keyboard    = false; 
    40    
     37    this.multiselect  = false; 
     38    this.draggable    = false; 
     39    this.keyboard     = false; 
     40    this.toggleselect = false; 
     41       
    4142    this.dont_select         = false; 
    4243    this.drag_active         = false; 
    4344    this.last_selected       = 0; 
     45    this.shift_start         = 0; 
    4446    this.in_selection_before = false; 
    4547    this.focused             = false; 
     
    132134     * 'remove' message row from list (just hide it) 
    133135     */ 
    134     remove_row: function(uid) 
     136    remove_row: function(uid, sel_next) 
    135137    { 
    136138        if (this.rows[uid].obj) { 
     
    138140        } 
    139141 
     142        if (sel_next) { 
     143            this.select_next(); 
     144        } 
     145         
    140146        this.rows[uid] = null; 
    141147    }, 
     
    317323            mod_key = 0; 
    318324        } 
    319  
     325         
     326        if (!this.shift_start) { 
     327            this.shift_start = id; 
     328        } 
     329         
    320330        if (!mod_key) { 
    321331            this.shift_start = id; 
     
    353363            this.set_classname(this.rows[this.last_selected].obj, 'focused', false); 
    354364        } 
     365         
     366        // unselect if toggleselect is active and the same row was clicked again 
     367        if (this.toggleselect && this.last_selected == id) { 
     368            this.clear_selection(); 
     369            id = null; 
     370        } else { 
     371            this.set_classname(this.rows[id].obj, 'focused', true); 
     372        } 
     373         
     374        if (!this.selection.length) { 
     375            this.shift_start = null; 
     376        } 
    355377 
    356378        this.last_selected = id; 
    357         this.set_classname(this.rows[id].obj, 'focused', true);         
    358379    }, 
    359380 
     
    429450        } 
    430451 
    431         // reset selection first 
     452        // reset but remember selection first 
     453        var select_before = this.selection.join(','); 
    432454        this.clear_selection(); 
    433455 
     
    438460            } 
    439461        } 
     462         
     463        // trigger event if selection changed 
     464        if (this.selection.join(',') != select_before) { 
     465            this.trigger_event('select'); 
     466        } 
     467 
    440468        return true;   
    441469    }, 
     
    446474    clear_selection: function() 
    447475    { 
     476        var num_select = this.selection.length; 
    448477        for(var n=0; n<this.selection.length; n++) { 
    449478            if (this.rows[this.selection[n]]) { 
     
    453482        } 
    454483        this.selection = new Array();     
     484         
     485        if (num_select) { 
     486            this.trigger_event('select'); 
     487        } 
    455488    }, 
    456489 
     
    513546        } 
    514547 
    515         this.shiftkey = e.shiftKey; 
    516  
    517548        var keyCode = document.layers ? e.which : document.all ? event.keyCode : document.getElementById ? e.keyCode : 0; 
    518549        var mod_key = rcube_event.get_modifier(e); 
     
    525556 
    526557            default: 
     558                this.shiftkey    = e.shiftKey; 
    527559                this.key_pressed = keyCode; 
    528560                this.trigger_event('keypress'); 
Note: See TracChangeset for help on using the changeset viewer.