Changeset 2064

Show
Ignore:
Timestamp:
11/27/07 21:10:31 (9 months ago)
Author:
cho45
Message:

lang/javascript/userscripts/jautopagerize.user.js:

toSource よりみじかくかけたので uneval に

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • lang/javascript/userscripts/jautopagerize.user.js

    r2055 r2064  
    99// 
    1010// $Date$ 
    11 // 
     11(function (AutoPagerize) { 
    1212// Latest::  http://svn.coderepos.org/share/lang/javascript/userscripts/jautopagerize.user.js 
    1313// License:: CCPL ( http://creativecommons.org/licenses/by/3.0/ ) 
    14 (function (AutoPagerize) { 
    1514 
    1615AutoPagerize = {}; 
     
    134133 
    135134function HTMLResource (uri) { 
    136         function createDocumentFromString (s) { 
     135        return Resource(uri, HTMLResource.createDocumentFromString); 
     136} 
     137HTMLResource.createDocumentFromString = function (s) { 
    137138                s = String(s); 
    138139                s = s.replace(/<script[^>]+>([^\s]|\s)*?<\/script>/g, ""); 
     
    153154                } 
    154155        } 
    155         return Resource(uri, createDocumentFromString); 
    156 } 
    157156 
    158157function CachedResource (uri, convertfun, expire) { 
    159158        var a   = new Async(); 
    160159        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") } 
    162162        a.clear = function () { 
    163163                GM_setValue(key, ""); 
     
    174174                        onload  : function (req) { try { 
    175175                                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})); 
    177178                                log("Cached: " + key); 
    178179                                a.ready(res); 
     
    223224                        pib.insertBefore(h("<hr /><p>AutoPagerized: <a href='%s'>%s</a></p>".replace(/%s/g, AutoPagerize._nextURI)), ib); 
    224225                        $X(AutoPagerize._pageinfo.pageElement, r).forEach(function (i) { 
    225                                 log(String(i)); 
    226226                                i = document.importNode(i, true); 
    227227                                pib.insertBefore(i, ib); 
     
    286286 
    287287                function parseSiteInfo (html) { 
    288                         var d = h(html); 
     288                        var d = HTMLResource.createDocumentFromString(html); 
    289289 
    290290                        var siteinfo = []; 
     
    321321}; 
    322322 
    323 AutoPagerize.errorHandler = function (e) { 
     323AutoPagerize.errorHandler = function (e, f) { 
    324324        AutoPagerize._error = String(e); 
    325325        AutoPagerize.updateStatus(); 
    326         alert(e.toSource()); 
     326        alert(String(e) + "///" + String(f)); 
    327327}; 
    328328 
     
    331331        if (AutoPagerize.hasOwnProperty(i) && 
    332332                typeof AutoPagerize[i] == "function") { 
    333                 AutoPagerize[i] = (function (f) { 
     333                AutoPagerize[i] = (function (f, i) { 
    334334                        return function () { try { 
    335335                                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); 
    338338        } 
    339339} 
     
    454454 
    455455        // 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. 
    457457 
    458458        if (!Array.prototype.reduce) { 
     
    487487        } 
    488488 
    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); 
    499522                                        } 
    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 
    540528 
    541529/* 
     
    591579                GM_log(o); 
    592580        } 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)+") })();"; 
    594582        } 
    595583}