Changeset 2064
- Timestamp:
- 11/27/07 21:10:31 (9 months ago)
- Files:
-
- 1 modified
Legend:
- Unmodified
- Added
- Removed
-
lang/javascript/userscripts/jautopagerize.user.js
r2055 r2064 9 9 // 10 10 // $Date$ 11 // 11 (function (AutoPagerize) { 12 12 // Latest:: http://svn.coderepos.org/share/lang/javascript/userscripts/jautopagerize.user.js 13 13 // License:: CCPL ( http://creativecommons.org/licenses/by/3.0/ ) 14 (function (AutoPagerize) {15 14 16 15 AutoPagerize = {}; … … 134 133 135 134 function HTMLResource (uri) { 136 function createDocumentFromString (s) { 135 return Resource(uri, HTMLResource.createDocumentFromString); 136 } 137 HTMLResource.createDocumentFromString = function (s) { 137 138 s = String(s); 138 139 s = s.replace(/<script[^>]+>([^\s]|\s)*?<\/script>/g, ""); … … 153 154 } 154 155 } 155 return Resource(uri, createDocumentFromString);156 }157 156 158 157 function CachedResource (uri, convertfun, expire) { 159 158 var a = new Async(); 160 159 var key = uri; 161 var v = eval(GM_getValue(key)) || ({}); 160 var v = ({}); 161 try { v = eval(GM_getValue(key)) || ({}) } catch (e) { log("parse error: may be uneval bug") } 162 162 a.clear = function () { 163 163 GM_setValue(key, ""); … … 174 174 onload : function (req) { try { 175 175 var res = convertfun(req.responseText); 176 GM_setValue(key, {time:(new Date).getTime(), body:res}.toSource()); 176 GM_setValue(key, uneval({time:(new Date).getTime(), body:res})); 177 log(key, uneval({time:(new Date).getTime(), body:res})); 177 178 log("Cached: " + key); 178 179 a.ready(res); … … 223 224 pib.insertBefore(h("<hr /><p>AutoPagerized: <a href='%s'>%s</a></p>".replace(/%s/g, AutoPagerize._nextURI)), ib); 224 225 $X(AutoPagerize._pageinfo.pageElement, r).forEach(function (i) { 225 log(String(i));226 226 i = document.importNode(i, true); 227 227 pib.insertBefore(i, ib); … … 286 286 287 287 function parseSiteInfo (html) { 288 var d = h(html);288 var d = HTMLResource.createDocumentFromString(html); 289 289 290 290 var siteinfo = []; … … 321 321 }; 322 322 323 AutoPagerize.errorHandler = function (e ) {323 AutoPagerize.errorHandler = function (e, f) { 324 324 AutoPagerize._error = String(e); 325 325 AutoPagerize.updateStatus(); 326 alert( e.toSource());326 alert(String(e) + "///" + String(f)); 327 327 }; 328 328 … … 331 331 if (AutoPagerize.hasOwnProperty(i) && 332 332 typeof AutoPagerize[i] == "function") { 333 AutoPagerize[i] = (function (f ) {333 AutoPagerize[i] = (function (f, i) { 334 334 return function () { try { 335 335 return f.apply(AutoPagerize, arguments); 336 } catch (e) { AutoPagerize.errorHandler(e ) } };337 })(AutoPagerize[i] );336 } catch (e) { AutoPagerize.errorHandler(e, i) } }; 337 })(AutoPagerize[i], i); 338 338 } 339 339 } … … 454 454 455 455 // Memo:: 456 // Safari 3 has JS 1.6 functions but 1.8 and toSource.456 // Safari 3 has JS 1.6 functions but 1.8 and uneval/toSource. 457 457 458 458 if (!Array.prototype.reduce) { … … 487 487 } 488 488 489 if (!Object.prototype.toSource) { 490 Object.prototype.toSource = function () { 491 var props = []; 492 for (var key in this) { 493 if (this.hasOwnProperty(key)) { 494 var v; 495 switch (typeof this[key]) { 496 case "undefined": v = "undefined"; break; 497 case "null" : v = "null"; break; 498 default : v = this[key].toSource(); 489 if (typeof uneval != "function") { 490 uneval = function (o) { 491 switch (typeof o) { 492 case "undefined" : return "(void 0)"; 493 case "boolean" : return String(o); 494 case "number" : return String(o); 495 case "string" : return '"' + o.replace(/"/g, '\\"') + '"'; 496 case "function" : return "(" + o.toString() + ")"; 497 case "object" : 498 if (o == null) return "null"; 499 var type = Object.prototype.toString.call(o).match(/\[object (.+)\]/); 500 if (!type) throw TypeError("unknown type:"+o); 501 switch (type[1]) { 502 case "Array": 503 var ret = []; 504 for (var i = 0; i < o.length; i++) ret.push(arguments.callee(o[i])); 505 return "[" + ret.join(", ") + "]"; 506 case "Object": 507 var ret = []; 508 for (var i in o) { 509 if (!o.hasOwnProperty(i)) continue; 510 ret.push(arguments.callee(i) + ":" + arguments.callee(o[i])); 511 } 512 return "({" + ret.join(", ") + "})"; 513 case "Number": 514 return "(new Number(" + o + "))"; 515 case "String": 516 return "(new String(" + arguments.callee(o) + "))"; 517 case "Date": 518 return "(new Date(" + o.getTime() + "))"; 519 default: 520 if (o.toSource) return o.toSource(); 521 throw TypeError("unknown type:"+o); 499 522 } 500 props.push(key.toSource() + ":" + v); 501 } 502 } 503 return "({" + props.join(",") + "})";; 504 }; 505 506 String.prototype.toSource = function () { 507 return '"' + this.replace(/"/g, '\\"') + '"'; 508 }; 509 510 Array.prototype.toSource = function () { 511 return "[" + this.map(function (i) { return i.toSource() }).join(",") + "]"; 512 }; 513 514 Date.prototype.toSource = function () { 515 return "(new Date(%d))".replace(/%d/, this.getTime()); 516 }; 517 518 Number.prototype.toSource = function () { 519 return String(this); 520 }; 521 522 RegExp.prototype.toSource = function () { 523 return String(this); 524 }; 525 526 Boolean.prototype.toSource = function () { 527 return String(this); 528 }; 529 } 530 531 // [ 532 // {}, 533 // {date:new Date,body:[{a:1,b:2}]} 534 // ].forEach(function (i) { 535 // alert(i.toSource()); 536 // }); 537 // 538 // throw ""; 539 } 523 } 524 } 525 } 526 } 527 540 528 541 529 /* … … 591 579 GM_log(o); 592 580 } else { 593 location.href = "javascript:(function () { if (window.console) console.log.apply(console.log, "+ o.toSource()+") })();";581 location.href = "javascript:(function () { if (window.console) console.log.apply(console.log, "+uneval(o)+") })();"; 594 582 } 595 583 }
![(please configure the [header_logo] section in trac.ini)](/share/chrome/site/your_project_logo.png)