Changeset 960 in subversion
- Timestamp:
- Jan 27, 2008 7:31:54 PM (5 years ago)
- Location:
- branches/devel-vnext/program/js
- Files:
-
- 2 added
- 3 edited
-
common.js (modified) (4 diffs)
-
editor.js (added)
-
editor_images.js (added)
-
googiespell.js (modified) (1 diff)
-
list.js (modified) (11 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/devel-vnext/program/js/common.js
r589 r960 4 4 | | 5 5 | This file is part of the RoundCube web development suite | 6 | Copyright (C) 2005-200 6, RoundCube Dev, - Switzerland |6 | Copyright (C) 2005-2007, RoundCube Dev, - Switzerland | 7 7 | Licensed under the GNU GPL | 8 8 | | … … 25 25 */ 26 26 function 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 } 101 94 102 95 … … 394 387 // http://code.iamcal.com/php/rfc822/ 395 388 function 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 450 408 // find a value in a specific array and returns the index 451 409 function find_in_array() 452 {410 { 453 411 var args = find_in_array.arguments; 454 412 if(!args.length) return -1; … … 623 581 var bw = new roundcube_browser(); 624 582 625 if (!window.console) 626 console = new rcube_console(); 583 if (!window.console) { 584 console = new rcube_console(); 585 } 586 587 // Add escape() method to RegExp object 588 // http://dev.rubyonrails.org/changeset/7271 589 RegExp.escape = function(str) 590 { 591 return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1'); 592 } -
branches/devel-vnext/program/js/googiespell.js
r589 r960 18 18 19 19 var 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 }, 96 103 97 104 -
branches/devel-vnext/program/js/list.js
r762 r960 35 35 this.shiftkey = false; 36 36 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 41 42 this.dont_select = false; 42 43 this.drag_active = false; 43 44 this.last_selected = 0; 45 this.shift_start = 0; 44 46 this.in_selection_before = false; 45 47 this.focused = false; … … 132 134 * 'remove' message row from list (just hide it) 133 135 */ 134 remove_row: function(uid )136 remove_row: function(uid, sel_next) 135 137 { 136 138 if (this.rows[uid].obj) { … … 138 140 } 139 141 142 if (sel_next) { 143 this.select_next(); 144 } 145 140 146 this.rows[uid] = null; 141 147 }, … … 317 323 mod_key = 0; 318 324 } 319 325 326 if (!this.shift_start) { 327 this.shift_start = id; 328 } 329 320 330 if (!mod_key) { 321 331 this.shift_start = id; … … 353 363 this.set_classname(this.rows[this.last_selected].obj, 'focused', false); 354 364 } 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 } 355 377 356 378 this.last_selected = id; 357 this.set_classname(this.rows[id].obj, 'focused', true);358 379 }, 359 380 … … 429 450 } 430 451 431 // reset selection first 452 // reset but remember selection first 453 var select_before = this.selection.join(','); 432 454 this.clear_selection(); 433 455 … … 438 460 } 439 461 } 462 463 // trigger event if selection changed 464 if (this.selection.join(',') != select_before) { 465 this.trigger_event('select'); 466 } 467 440 468 return true; 441 469 }, … … 446 474 clear_selection: function() 447 475 { 476 var num_select = this.selection.length; 448 477 for(var n=0; n<this.selection.length; n++) { 449 478 if (this.rows[this.selection[n]]) { … … 453 482 } 454 483 this.selection = new Array(); 484 485 if (num_select) { 486 this.trigger_event('select'); 487 } 455 488 }, 456 489 … … 513 546 } 514 547 515 this.shiftkey = e.shiftKey;516 517 548 var keyCode = document.layers ? e.which : document.all ? event.keyCode : document.getElementById ? e.keyCode : 0; 518 549 var mod_key = rcube_event.get_modifier(e); … … 525 556 526 557 default: 558 this.shiftkey = e.shiftKey; 527 559 this.key_pressed = keyCode; 528 560 this.trigger_event('keypress');
Note: See TracChangeset
for help on using the changeset viewer.
