Mercurial > repos > jankanis > blast2html2
comparison NCBI Blast reference example_files/utils.js @ 31:344cd76f6fd2
rename NCBI reference example
| author | Jan Kanis <jan.code@jankanis.nl> |
|---|---|
| date | Thu, 15 May 2014 16:59:18 +0200 |
| parents | Blast output page example_files/utils.js@bad241dc701f |
| children |
comparison
equal
deleted
inserted
replaced
| 30:2143f62809d0 | 31:344cd76f6fd2 |
|---|---|
| 1 // $Id: utils.js,v 1.4 2014/02/26 14:47:32 zaretska Exp $ | |
| 2 | |
| 3 utils = { | |
| 4 | |
| 5 KeyCode_TAB: 9, | |
| 6 KeyCode_DELETE: 46, | |
| 7 KeyCode_BACKSPACE: 8, | |
| 8 KeyCode_LEFT_ARROW: 37, | |
| 9 KeyCode_RIGHT_ARROW: 39, | |
| 10 KeyCode_HOME: 36, | |
| 11 KeyCode_END: 35, | |
| 12 KeyCode_PAGE_UP: 33, | |
| 13 KeyCode_PAGE_DOWN: 34, | |
| 14 KeyCode_UP_ARROW: 38, | |
| 15 KeyCode_DOWN_ARROW: 40, | |
| 16 KeyCode_ESC: 27, | |
| 17 KeyCode_ENTER: 13, | |
| 18 KeyCode_SPACE: 32, | |
| 19 KeyCode_SHIFT_KEY: 16, | |
| 20 KeyCode_CTRL_KEY: 17, | |
| 21 KeyCode_ALT_KEY: 18, | |
| 22 KeyCode_LEFT_MS_WINDOWS_KEY: 91, | |
| 23 KeyCode_RIGHT_MS_WINDOWS_KEY: 92, | |
| 24 KeyCode_MS_MENU_KEY: 93, | |
| 25 | |
| 26 isObject: function(a) { return (a && typeof a == 'object'); }, | |
| 27 | |
| 28 isArray: function(a) { return this.isObject(a) && a.constructor == Array; }, | |
| 29 | |
| 30 insertInHtml: function(text, obj) { | |
| 31 if (document.all) { | |
| 32 obj.innerHTML += text; | |
| 33 } else { | |
| 34 var range = document.createRange(); | |
| 35 range.setStartAfter(obj); | |
| 36 var docFrag = range.createContextualFragment(text); | |
| 37 obj.appendChild(docFrag); | |
| 38 } | |
| 39 | |
| 40 }, | |
| 41 | |
| 42 replaceInHtml: function(text, obj) { | |
| 43 if (document.all) { | |
| 44 obj.innerHTML = text; | |
| 45 } else { | |
| 46 while (obj.hasChildNodes()) obj.removeChild(obj.firstChild); | |
| 47 var range = document.createRange(); | |
| 48 range.setStartAfter(obj); | |
| 49 var docFrag = range.createContextualFragment(text); | |
| 50 obj.appendChild(docFrag); | |
| 51 } | |
| 52 }, | |
| 53 | |
| 54 | |
| 55 getTargetObj: function(eEvent) { | |
| 56 var oTarget; | |
| 57 var e = eEvent || window.event; | |
| 58 if (e == null) return null; | |
| 59 if (e.srcElement == null) { | |
| 60 oTarget = e.target; | |
| 61 } else { | |
| 62 oTarget = e.srcElement; | |
| 63 } | |
| 64 while ( oTarget && oTarget.nodeType != 1 ) oTarget = oTarget.parentNode; | |
| 65 return oTarget; | |
| 66 }, | |
| 67 | |
| 68 | |
| 69 | |
| 70 | |
| 71 getParent: function(obj) { | |
| 72 if (obj) { | |
| 73 var result = obj.parentNode; | |
| 74 while (result && result.nodeType != 1) result = result.nextSibling; | |
| 75 if (result) return result; | |
| 76 } | |
| 77 return null; | |
| 78 }, | |
| 79 | |
| 80 getFirstChild: function(obj) { | |
| 81 if (obj) { | |
| 82 var result = obj.firstChild; | |
| 83 while (result && result.nodeType != 1) result = result.nextSibling; | |
| 84 if (result) return result; | |
| 85 } | |
| 86 return null; | |
| 87 }, | |
| 88 | |
| 89 getNextSibling: function(obj, tagName) { | |
| 90 if (obj) { | |
| 91 var result = obj.nextSibling; | |
| 92 if (tagName) { | |
| 93 var tn = tagName.toUpperCase(); | |
| 94 while (result && result.tagName != tn) result = result.nextSibling; | |
| 95 } else { | |
| 96 while (result && result.nodeType != 1) result = result.nextSibling; | |
| 97 } | |
| 98 return result; | |
| 99 } | |
| 100 return null; | |
| 101 }, | |
| 102 | |
| 103 getPreviousSibling: function(obj, tagName) { | |
| 104 if (obj) { | |
| 105 var result = obj.previousSibling; | |
| 106 if (tagName) { | |
| 107 var tn = tagName.toUpperCase(); | |
| 108 while (result && result.tagName != tn) result = result.previousSibling; | |
| 109 } else { | |
| 110 while (result && result.nodeType != 1) result = result.previousSibling; | |
| 111 } | |
| 112 return result; | |
| 113 } | |
| 114 return null; | |
| 115 }, | |
| 116 | |
| 117 removeChildren: function(oObj) { | |
| 118 if (!oObj || typeof oObj != "object") return; | |
| 119 while(oObj.hasChildNodes()) oObj.removeChild(oObj.firstChild) | |
| 120 }, | |
| 121 | |
| 122 insertAfter: function(parent, node, referenceNode) { | |
| 123 parent.insertBefore(node, referenceNode.nextSibling); | |
| 124 }, | |
| 125 | |
| 126 nextItem: function(item, nodeName) { | |
| 127 if (item == null) return; | |
| 128 var next = item.nextSibling; | |
| 129 while (next != null) { | |
| 130 if (next.nodeName == nodeName) return next; | |
| 131 next = next.nextSibling; | |
| 132 } | |
| 133 return null; | |
| 134 }, | |
| 135 | |
| 136 previousItem: function(item, nodeName) { | |
| 137 var previous = item.previousSibling; | |
| 138 while (previous != null) { | |
| 139 if (previous.nodeName == nodeName) return previous; | |
| 140 previous = previous.previousSibling; | |
| 141 } | |
| 142 return null | |
| 143 }, | |
| 144 | |
| 145 moveBefore: function(item1, item2) { | |
| 146 var parent = item1.parentNode; | |
| 147 parent.removeChild(item1); | |
| 148 parent.insertBefore(item1, item2); | |
| 149 }, | |
| 150 | |
| 151 moveAfter: function(item1, item2) { | |
| 152 var parent = item1.parentNode; | |
| 153 parent.removeChild(item1); | |
| 154 parent.insertBefore(item1, item2 ? item2.nextSibling : null); | |
| 155 }, | |
| 156 | |
| 157 | |
| 158 | |
| 159 | |
| 160 createCookie: function(name, value, days) { | |
| 161 if (days) { | |
| 162 var date = new Date(); | |
| 163 date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000)); | |
| 164 var expires = '; expires=' + date.toGMTString(); | |
| 165 } else expires = ''; | |
| 166 document.cookie = name + '=' + value + expires + '; path=/'; | |
| 167 }, | |
| 168 | |
| 169 readCookie: function(name) { | |
| 170 var nameEQ = name + '='; | |
| 171 var ca = document.cookie.split(';'); | |
| 172 for (var i = 0; i < ca.length; i++) { | |
| 173 var c = ca[i]; | |
| 174 while (c.charAt(0)==' ') c = c.substring(1, c.length); | |
| 175 if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length); | |
| 176 } | |
| 177 return ""; | |
| 178 }, | |
| 179 | |
| 180 eraseCookie: function(name) { | |
| 181 document.cookie = name + "=null; expires=Thu, 01-Jan-1970 00:00:01 GMT; domain=nih.gov; path=/"; | |
| 182 document.cookie = name + "; expires=Thu, 01-Jan-1970 00:00:01 GMT; domain=nih.gov; path=/"; | |
| 183 }, | |
| 184 | |
| 185 addClass: function(element, className) { | |
| 186 if (!this.hasClass(element, className)) { | |
| 187 if (element.className) element.className += " " + className; | |
| 188 else element.className = className; | |
| 189 } | |
| 190 }, | |
| 191 | |
| 192 removeClass: function(element, className) { | |
| 193 var regexp = new RegExp("(^|\\s)" + className + "(\\s|$)"); | |
| 194 element.className = element.className.replace(regexp, "$2"); | |
| 195 }, | |
| 196 | |
| 197 hasClass: function(element, className) { | |
| 198 var regexp = new RegExp("(^|\\s)" + className + "(\\s|$)"); | |
| 199 return regexp.test(element.className); | |
| 200 }, | |
| 201 | |
| 202 | |
| 203 getXY: function (obj){ | |
| 204 /* | |
| 205 +------------- w ---- | |
| 206 | (x,y) | |
| 207 | | |
| 208 h | |
| 209 | | |
| 210 */ | |
| 211 var b={x:0, y:0, w:obj.offsetWidth, h:obj.offsetHeight}; | |
| 212 | |
| 213 if (obj.offsetParent) { | |
| 214 while(obj) { | |
| 215 b.x += obj.offsetLeft; | |
| 216 b.y += obj.offsetTop; | |
| 217 obj = obj.offsetParent; | |
| 218 } | |
| 219 } else if (obj.x) { | |
| 220 b.x = obj.x; | |
| 221 b.y = obj.y; | |
| 222 } | |
| 223 return b; | |
| 224 }, | |
| 225 | |
| 226 /* Based on ppk (untested) */ | |
| 227 getEventXY: function(e) { | |
| 228 var xpos = 0; | |
| 229 var ypos = 0; | |
| 230 e = e || window.event; | |
| 231 xpos = e.pageX || (e.clientX + document.body.scrollLeft + | |
| 232 document.documentElement.scrollLeft); | |
| 233 ypos = e.pageY || (e.clientY + document.body.scrollTop + | |
| 234 document.documentElement.scrollTop); | |
| 235 return {x: xpos, y: ypos}; | |
| 236 }, | |
| 237 | |
| 238 drawText: function (sText, sId, add) { | |
| 239 if (!sId) sId = "debug"; | |
| 240 var obj = document.getElementById(sId); | |
| 241 if (obj) { | |
| 242 if (add) | |
| 243 this.insertInHtml("<br/>" + sText, obj); | |
| 244 else | |
| 245 this.replaceInHtml(sText, obj); | |
| 246 } | |
| 247 }, | |
| 248 | |
| 249 | |
| 250 selectRange: function (oObj /*:object*/, iStart /*:int*/, iLength /*:int*/) { | |
| 251 if (!(oObj && oObj.value)) return; | |
| 252 | |
| 253 if (oObj.createTextRange) { | |
| 254 //use text ranges for Internet Explorer | |
| 255 var oRange = oObj.createTextRange(); | |
| 256 oRange.moveStart("character", iStart); | |
| 257 oRange.moveEnd("character", iLength - oObj.value.length); | |
| 258 oRange.select(); | |
| 259 } else if (oObj.setSelectionRange) { | |
| 260 //use setSelectionRange() for Mozilla | |
| 261 oObj.setSelectionRange(iStart, iLength); | |
| 262 } | |
| 263 //set focus back to the textbox | |
| 264 oObj.focus(); | |
| 265 }, | |
| 266 | |
| 267 getSelection: function() { | |
| 268 var text = ""; | |
| 269 if (window.getSelection) { | |
| 270 text += window.getSelection(); | |
| 271 } else if (document.getSelection) { | |
| 272 text += document.getSelection(); | |
| 273 } else if (document.selection){ //IE | |
| 274 text += document.selection.createRange().text; | |
| 275 } | |
| 276 return text; | |
| 277 }, | |
| 278 | |
| 279 | |
| 280 | |
| 281 | |
| 282 // http://ejohn.org/apps/jselect/event.html | |
| 283 addEvent: function(obj, type, fn, b) { | |
| 284 if (obj.attachEvent) { | |
| 285 var name = "" + type + fn; | |
| 286 // name = name.substring(0, name.indexOf("\n")); // IE This doesn't work | |
| 287 obj["e" + name] = fn; | |
| 288 obj[name] = function(){ obj["e" + name](window.event);} | |
| 289 obj.attachEvent("on" + type, obj[name]); | |
| 290 } else { | |
| 291 obj.addEventListener(type, fn, b); | |
| 292 return true; | |
| 293 } | |
| 294 }, | |
| 295 | |
| 296 | |
| 297 removeEvent: function(obj, type, fn, b) { | |
| 298 if (obj.detachEvent) { | |
| 299 var name = "" + type + fn; | |
| 300 // name = name.substring(0, name.indexOf("\n")); //IE This doesn't work | |
| 301 if ("function" == typeof obj[name]) { | |
| 302 obj.detachEvent("on" + type, obj[name]); | |
| 303 obj[name] = null; | |
| 304 obj["e" + name] = null; | |
| 305 } | |
| 306 } else { | |
| 307 obj.removeEventListener(type, fn, b); | |
| 308 return true; | |
| 309 } | |
| 310 }, | |
| 311 | |
| 312 noBubbleEvent: function(e) { | |
| 313 if (e && e.stopPropagation) e.stopPropagation(); | |
| 314 else window.event.cancelBubble = true; | |
| 315 }, | |
| 316 | |
| 317 targetEvent: function(e) { | |
| 318 if (e.srcElement == null) { | |
| 319 return e.target; | |
| 320 } else { | |
| 321 return window.event.srcElement; | |
| 322 } | |
| 323 }, | |
| 324 | |
| 325 preventDefault: function(e) { | |
| 326 if (e.preventDefault) e.preventDefault(); | |
| 327 else window.event.returnValue = false; | |
| 328 }, | |
| 329 | |
| 330 relatedTarget: function(e) { | |
| 331 if (!e) var e = window.event; | |
| 332 if (e.relatedTarget) return e.relatedTarget; | |
| 333 else if (e.toElement) return e.toElement; | |
| 334 else if (e.fromElement) return e.fromElement; | |
| 335 }, | |
| 336 | |
| 337 readStyle: function(element, property) { | |
| 338 if (element.style[property]) { | |
| 339 return element.style[property]; | |
| 340 } else if (element.currentStyle) { | |
| 341 return element.currentStyle[property]; | |
| 342 } else if (document.defaultView && document.defaultView.getComputedStyle) { | |
| 343 var style = document.defaultView.getComputedStyle(element, null); | |
| 344 if (style) return style.getPropertyValue(property); | |
| 345 } | |
| 346 return ""; | |
| 347 }, | |
| 348 | |
| 349 | |
| 350 printObj: function (oObj, iLevel) { | |
| 351 var s = ""; | |
| 352 var sIdent = ""; | |
| 353 if (!iLevel) iLevel = 0; | |
| 354 for (var i = 0; i < iLevel; i++) { | |
| 355 sIdent += "__"; | |
| 356 } | |
| 357 for (var i in oObj) { | |
| 358 var ss = []; | |
| 359 if ("string" == typeof oObj[i]) { | |
| 360 ss = oObj[i].split("<"); | |
| 361 } | |
| 362 s += sIdent + " " + i + " : [" + (typeof oObj[i]) + "] : " + ss.join("<") + "<br/>"; | |
| 363 // if (oObj[i] && "object" == typeof oObj[i] && iLevel < 2) { | |
| 364 // s+= "<br/>-----" + typeof oObj[i] + " --- " + iLevel + "</br>"; | |
| 365 // s += this.printObj(oObj[i], iLevel + 1); | |
| 366 // } | |
| 367 } | |
| 368 return s; | |
| 369 }, | |
| 370 | |
| 371 jsLoader: { | |
| 372 sBase: "", /* Base is this directory */ | |
| 373 oLoaded: [], | |
| 374 load: function (aScripts) { | |
| 375 | |
| 376 var oS = document.getElementsByTagName("script"); | |
| 377 var k = 0; | |
| 378 for (var j = 0; j < oS.length; j++) { | |
| 379 if (oS[j].src == "") continue; | |
| 380 this.oLoaded[k++] = oS[j].src; | |
| 381 } | |
| 382 | |
| 383 var oHead = document.getElementsByTagName("head")[0]; | |
| 384 | |
| 385 for (var i = 0; i < aScripts.length; i++) { | |
| 386 var sNewSrc = this.sBase + aScripts[i]; | |
| 387 var oS = document.getElementsByTagName("script"); | |
| 388 var b = true; | |
| 389 for (var j = 0; j < this.oLoaded.length; j++) { | |
| 390 if (sNewSrc == this.oLoaded[j]) { | |
| 391 // alert(sNewSrc + " : already loaded"); | |
| 392 b = false; | |
| 393 } | |
| 394 } | |
| 395 | |
| 396 if (b) { | |
| 397 var oScript = document.createElement("script"); | |
| 398 oScript.src = sNewSrc; | |
| 399 oScript.setAttribute("type", "text/javascript"); | |
| 400 oHead.appendChild(oScript); | |
| 401 this.oLoaded[this.oLoaded.length] = sNewSrc; | |
| 402 } | |
| 403 } | |
| 404 } | |
| 405 }, | |
| 406 | |
| 407 // Create an id that doesn't exist in this document | |
| 408 createNewId: function() | |
| 409 { | |
| 410 var newid = null | |
| 411 | |
| 412 while (!newid || document.getElementById(newid)) { | |
| 413 newid = "XID" + Math.round(Math.random() * 65536).toString(16) | |
| 414 } | |
| 415 return newid | |
| 416 } | |
| 417 | |
| 418 }; | |
| 419 | |
| 420 | |
| 421 String.prototype.trimSpaces = function(trimMode) { | |
| 422 // 0 = trim begin and end | |
| 423 // 1 = trim begin only | |
| 424 // 2 = trim after only | |
| 425 | |
| 426 var targetString = this; | |
| 427 var iPos = 0; | |
| 428 if (!trimMode) trimMode = 0; | |
| 429 | |
| 430 if (trimMode==0 || trimMode==1) { | |
| 431 if (targetString.charAt(iPos)==" ") { | |
| 432 while(targetString.charAt(iPos)==" ") iPos++; | |
| 433 targetString = targetString.substr(iPos); | |
| 434 } | |
| 435 } | |
| 436 | |
| 437 iPos = targetString.length-1; | |
| 438 if (trimMode==0 || trimMode==2) { | |
| 439 if (targetString.charAt(iPos) == " ") { | |
| 440 while(targetString.charAt(iPos) == " ") iPos--; | |
| 441 targetString = targetString.substr(0, iPos + 1); | |
| 442 } | |
| 443 } | |
| 444 return targetString; | |
| 445 } | |
| 446 | |
| 447 | |
| 448 | |
| 449 | |
| 450 /* Shortcuts */ | |
| 451 | |
| 452 // Get elements by Id's | |
| 453 function $() { | |
| 454 var elements = new Array(); | |
| 455 | |
| 456 for (var i = 0; i < arguments.length; i++) { | |
| 457 var element = arguments[i]; | |
| 458 if (typeof element == 'string') | |
| 459 element = document.getElementById(element); | |
| 460 | |
| 461 if (arguments.length == 1) | |
| 462 return element; | |
| 463 | |
| 464 elements.push(element); | |
| 465 } | |
| 466 | |
| 467 return elements; | |
| 468 } | |
| 469 | |
| 470 // Get elements by AttributeValue for Attributename | |
| 471 // http://www.dustindiaz.com/top-ten-javascript/ (but has some errors) | |
| 472 function $C(attrValue, attrName, node, tag) { | |
| 473 //alert([attrValue, attrName, node, tag]) | |
| 474 if ("*" == attrValue) { | |
| 475 return $AN(attrName, node, tag); | |
| 476 } | |
| 477 var oElements = new Array(); | |
| 478 if (!node) node = document; | |
| 479 if (!tag) tag = '*'; | |
| 480 if (!attrName) attrName = 'class'; | |
| 481 | |
| 482 var els = node.getElementsByTagName(tag); | |
| 483 var elsLen = els.length; | |
| 484 var pattern = new RegExp("(^|\\s)" + attrValue + "(\\s|$)"); | |
| 485 var j = 0; | |
| 486 for (i = 0; i < elsLen; i++) { | |
| 487 if (attrName == "class" && pattern.test(els[i].className)) { | |
| 488 // IE behavior | |
| 489 // oElements.push(els[i]); | |
| 490 oElements[j++] = els[i]; | |
| 491 } else if (pattern.test(els[i].getAttribute(attrName))) { | |
| 492 oElements[j++] = els[i]; | |
| 493 // oElements.push(els[i]); | |
| 494 } | |
| 495 } | |
| 496 return oElements; | |
| 497 } | |
| 498 | |
| 499 | |
| 500 function $AN(attrName, node, tag) { | |
| 501 var oElements = new Array(); | |
| 502 if (node == null) node = document; | |
| 503 if (tag == null)tag = '*'; | |
| 504 var els = node.getElementsByTagName(tag); | |
| 505 for (i = 0; i < els.length; i++) { | |
| 506 if (els[i].getAttribute(attrName) != null) { | |
| 507 oElements.push(els[i]); | |
| 508 } | |
| 509 } | |
| 510 return oElements; | |
| 511 } | |
| 512 | |
| 513 function dump(aMessage) { | |
| 514 var consoleService = Components.classes["@mozilla.org/consoleservice;1"] | |
| 515 .getService(Components.interfaces.nsIConsoleService); | |
| 516 consoleService.logStringMessage(aMessage); | |
| 517 } | |
| 518 | |
| 519 | |
| 520 // forEach iterators from Dean Edwards: http://dean.edwards.name/weblog/2006/07/enum/ | |
| 521 // generic enumeration | |
| 522 Function.prototype.forEach = function(object, block, context) { | |
| 523 for (var key in object) { | |
| 524 if (typeof this.prototype[key] == "undefined") { | |
| 525 block.call(context, object[key], key, object); | |
| 526 } | |
| 527 } | |
| 528 }; | |
| 529 | |
| 530 // globally resolve forEach enumeration | |
| 531 var forEach = function(object, block, context) { | |
| 532 if (object) { | |
| 533 var resolve = Object; // default | |
| 534 if (object instanceof Function) { | |
| 535 // functions have a "length" property | |
| 536 resolve = Function; | |
| 537 } else if (object.forEach instanceof Function) { | |
| 538 // the object implements a custom forEach method so use that | |
| 539 object.forEach(block, context); | |
| 540 return; | |
| 541 } else if (typeof object.length == "number") { | |
| 542 // the object is array-like | |
| 543 resolve = Array; | |
| 544 } | |
| 545 resolve.forEach(object, block, context); | |
| 546 } | |
| 547 }; | |
| 548 | |
| 549 // | |
| 550 // Update Array class to JS 1.5 if not yet there. | |
| 551 // | |
| 552 | |
| 553 // array-like enumeration | |
| 554 if (!Array.forEach) { // mozilla already supports this | |
| 555 Array.forEach = function(object, block, context) { | |
| 556 for (var i = 0; i < object.length; i++) { | |
| 557 block.call(context, object[i], i, object); | |
| 558 } | |
| 559 }; | |
| 560 } | |
| 561 | |
| 562 if (!Array.prototype.indexOf) | |
| 563 Array.prototype.indexOf = function(item, startIndex) { | |
| 564 var len = this.length; | |
| 565 if (startIndex == null) | |
| 566 startIndex = 0; | |
| 567 else if (startIndex < 0) { | |
| 568 startIndex += len; | |
| 569 if (startIndex < 0) | |
| 570 startIndex = 0; | |
| 571 } | |
| 572 for (var i = startIndex; i < len; i++) { | |
| 573 var val = this[i] || this.charAt && this.charAt(i); | |
| 574 if (val == item) | |
| 575 return i; | |
| 576 } | |
| 577 return -1; | |
| 578 }; | |
| 579 | |
| 580 if (!Array.prototype.lastIndexOf) | |
| 581 Array.prototype.lastIndexOf = function(item, startIndex) { | |
| 582 var len = this.length; | |
| 583 if (startIndex == null || startIndex >= len) | |
| 584 startIndex = len - 1; | |
| 585 else if (startIndex < 0) | |
| 586 startIndex += len; | |
| 587 for (var i = startIndex; i >= 0; i--) { | |
| 588 var val = this[i] || this.charAt && this.charAt(i); | |
| 589 if (val == item) | |
| 590 return i; | |
| 591 } | |
| 592 return -1; | |
| 593 }; | |
| 594 | |
| 595 if (!Array.prototype.map) | |
| 596 Array.prototype.map = function(func, thisVal) { | |
| 597 var len = this.length; | |
| 598 var ret = new Array(len); | |
| 599 for (var i = 0; i < len; i++) | |
| 600 ret[i] = func.call(thisVal, this[i] || this.charAt && this.charAt(i), i, this); | |
| 601 return ret; | |
| 602 }; | |
| 603 | |
| 604 if (!Array.prototype.filter) | |
| 605 Array.prototype.filter = function(func, thisVal) { | |
| 606 var len = this.length; | |
| 607 var ret = new Array(); | |
| 608 for (var i = 0; i < len; i++) { | |
| 609 var val = this[i] || this.charAt && this.charAt(i); | |
| 610 if(func.call(thisVal, val, i, this)) | |
| 611 ret[ret.length] = val; | |
| 612 } | |
| 613 return ret; | |
| 614 }; | |
| 615 | |
| 616 if (!Array.prototype.every) | |
| 617 Array.prototype.every = function(func, thisVal) { | |
| 618 var len = this.length; | |
| 619 for (var i = 0; i < len; i++) | |
| 620 if (!func.call(thisVal, this[i] || this.charAt && this.charAt(i), i, this)) | |
| 621 return false; | |
| 622 return true; | |
| 623 }; | |
| 624 | |
| 625 if (!Array.prototype.some) | |
| 626 Array.prototype.some = function(func, thisVal) { | |
| 627 var len = this.length; | |
| 628 for (var i = 0; i < len; i++) | |
| 629 if (func.call(thisVal, this[i] || this.charAt && this.charAt(i), i, this)) | |
| 630 return true; | |
| 631 return false; | |
| 632 }; | |
| 633 |
