Changeset 27108

Show
Ignore:
Timestamp:
12/20/08 03:24:47 (5 years ago)
Author:
suVene
Message:

* get absolute path of <a>, <img>.
* mod $U.pathToURL

Location:
lang/javascript/vimperator-plugins
Files:
3 modified

Legend:

Unmodified
Added
Removed
  • lang/javascript/vimperator-plugins/branches/1.2/multi_requester.js

    r26980 r27108  
    66    <description lang="ja">リクエストの結果をバッファに出力する。</description> 
    77    <author mail="suvene@zeromemory.info" homepage="http://zeromemory.sblo.jp/">suVene</author> 
    8     <version>0.4.4</version> 
     8    <version>0.4.6</version> 
    99    <minVersion>1.2</minVersion> 
    1010    <maxVersion>1.2</maxVersion> 
    1111    <detail><![CDATA[ 
    1212== Needs Library == 
    13 - _libly.js(ver.0.1.4) 
     13- _libly.js(ver.0.1.11) 
    1414  @see http://coderepos.org/share/browser/lang/javascript/vimperator-plugins/trunk/_libly.js 
    1515 
     
    346346        var el = res.getHTMLDocument(extractLink); 
    347347        if (!el) throw 'extract link failed.: extractLink -> ' + extractLink; 
    348         var url = $U.pathToURL(el[0]); 
     348        var url = $U.pathToURL(el[0], res.req.url); 
    349349        var req = new libly.Request(url, null, $U.extend(res.req.options, {extractLink: true})); 
    350350        req.addEventListener('onException', $U.bind(this, this.onException)); 
     
    369369        } 
    370370 
    371         var url, escapedUrl, xpath, doc, html, extractLink; 
     371        var url, escapedUrl, xpath, doc, html, extractLink, ignoreTags; 
    372372 
    373373        try { 
     
    384384                return; 
    385385            } 
    386             var ignoreTags = ['script'].concat(libly.$U.A(res.req.options.siteinfo.ignoreTags)); 
     386            ignoreTags = ['script'].concat(libly.$U.A(res.req.options.siteinfo.ignoreTags)); 
    387387            doc = document.createElementNS(null, 'div'); 
    388             res.getHTMLDocument(xpath, null, ignoreTags, function(node, i) { doc.appendChild(node) } ); 
     388            res.getHTMLDocument(xpath, null, ignoreTags, function(node, i) { 
     389                if (node.tagName.toLowerCase() != 'html') 
     390                    doc.appendChild(node); 
     391            }); 
    389392            if (!doc) throw 'XPath result is undefined or null.: XPath -> ' + xpath; 
     393 
     394            $U.getNodesFromXPath('descendant-or-self::a | descendant-or-self::img', doc, function(node) { 
     395                var tagName = node.tagName.toLowerCase(); 
     396                if (tagName == 'a') { 
     397                    node.href = $U.pathToURL(node, url, res.doc); 
     398                } else if (tagName == 'img') { 
     399                    node.src = $U.pathToURL(node, url, res.doc); 
     400                } 
     401            }); 
    390402 
    391403            html = '<a href="' + escapedUrl + '" class="hl-Title" target="_self">' + escapedUrl + '</a>' + 
  • lang/javascript/vimperator-plugins/trunk/_libly.js

    r26826 r27108  
    66    <description lang="ja">適当なライブラリっぽいものたち。</description> 
    77    <author mail="suvene@zeromemory.info" homepage="http://zeromemory.sblo.jp/">suVene</author> 
    8     <version>0.1.10</version> 
     8    <version>0.1.11</version> 
    99    <minVersion>1.2</minVersion> 
    1010    <maxVersion>2.0pre</maxVersion> 
     
    5555 
    5656== HTML, XML, DOM, E4X == 
    57 pathToURL(path): 
     57pathToURL(a, baseURL, doc): 
    5858    相対パスを絶対パスに変換します。 
    5959getHTMLFragment(html): 
     
    6363    str から tags で指定されたタグを取り除いて返却します。 
    6464    tags は文字列、または配列で指定して下さい。 
    65 createHTMLDocument(str): 
     65createHTMLDocument(str, xmlns): 
    6666    引数 str より、HTMLFragment を作成します。 
    6767getFirstNodeFromXPath(xpath, context): 
    6868    xpath を評価しオブジェクトをを返却します。 
    69 getNodesFromXPath(xpath, context, callback, obj): 
     69getNodesFromXPath(xpath, context, callback, thisObj): 
    7070    xpath を評価し snapshot の配列を返却します。 
    7171xmlSerialize(xml): 
     
    8080</VimperatorPlugin>; 
    8181//}}} 
    82 if (!liberator.plugins.libly) { 
     82//if (!liberator.plugins.libly) { 
    8383 
    8484liberator.plugins.libly = {}; 
     
    215215    // }}} 
    216216    // HTML, XML, DOM, E4X {{{ 
    217     pathToURL: function(a, doc) { 
     217    pathToURL: function(a, baseURL, doc) { 
    218218        if (!a) return ''; 
    219         var path = (a.href || a.action || a.value || a); 
     219        var XHTML_NS = "http://www.w3.org/1999/xhtml" 
     220        var XML_NS   = "http://www.w3.org/XML/1998/namespace" 
     221        //var path = (a.href || a.getAttribute('src') || a.action || a.value || a); 
     222        var path = (a.getAttribute('href') || a.getAttribute('src') || a.action || a.value || a); 
    220223        if (/^https?:\/\//.test(path)) return path; 
    221         var link = (doc || window.content.documtent).createElement('a'); 
    222         link.href = path; 
     224        var link = (doc || window.content.documtent).createElementNS(XHTML_NS, 'a'); 
     225        link.setAttributeNS(XML_NS, 'xml:base', baseURL) 
     226        link.href = path 
    223227        return link.href; 
    224228    }, 
     
    231235        return str.replace(new RegExp('<' + ignoreTags + '(?:[ \\t\\n\\r][^>]*|/)?>([\\S\\s]*?)<\/' + ignoreTags + '[ \\t\\r\\n]*>', 'ig'), ''); 
    232236    }, 
    233     createHTMLDocument: function(str, doc) { 
     237    createHTMLDocument: function(str, xmlns, doc) { 
    234238        doc = doc || window.content.document; 
    235239        var htmlFragment = doc.implementation.createDocument(null, 'html', null); 
     
    245249        return result.singleNodeValue ? result.singleNodeValue : null; 
    246250    }, 
    247     getNodesFromXPath: function(xpath, context, callback, obj) { 
     251    getNodesFromXPath: function(xpath, context, callback, thisObj) { 
    248252        var ret = []; 
    249253        if (!xpath) return ret; 
     
    251255        var nodesSnapshot = (context.ownerDocument || context).evaluate(xpath, context, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); 
    252256        for (let i = 0, l = nodesSnapshot.snapshotLength; i < l; i++) { 
    253             if (typeof callback == 'function') callback.call(obj, nodesSnapshot.snapshotItem(i), i); 
     257            if (typeof callback == 'function') callback.call(thisObj, nodesSnapshot.snapshotItem(i), i); 
    254258            ret.push(nodesSnapshot.snapshotItem(i)); 
    255259        } 
     
    443447        } catch (e) { return ''; } 
    444448    }, 
    445     getHTMLDocument: function(xpath, xmlns, ignoreTags, callback) { 
     449    getHTMLDocument: function(xpath, xmlns, ignoreTags, callback, thisObj) { 
    446450        if (!this.doc) { 
     451            //if (doc.documentElement.nodeName != 'HTML') { 
     452            //    return new DOMParser().parseFromString(str, 'application/xhtml+xml'); 
     453            //} 
    447454            this.htmlFragmentstr = libly.$U.getHTMLFragment(this.responseText); 
    448455            this.htmlStripScriptFragmentstr = libly.$U.stripTags(this.htmlFragmentstr, ignoreTags); 
     
    450457        } 
    451458        if (!xpath) xpath = '//*'; 
    452         return libly.$U.getNodesFromXPath(xpath, this.doc, callback); 
     459        return libly.$U.getNodesFromXPath(xpath, this.doc, callback, thisObj); 
    453460    } 
    454461}; 
    455462//}}} 
    456463 
    457 } 
     464//} 
    458465// vim: set fdm=marker sw=4 ts=4 sts=0 et: 
    459466 
  • lang/javascript/vimperator-plugins/trunk/multi_requester.js

    r26980 r27108  
    66    <description lang="ja">リクエストの結果をバッファに出力する。</description> 
    77    <author mail="suvene@zeromemory.info" homepage="http://zeromemory.sblo.jp/">suVene</author> 
    8     <version>0.4.5</version> 
     8    <version>0.4.6</version> 
    99    <minVersion>2.0pre</minVersion> 
    1010    <maxVersion>2.0pre</maxVersion> 
    1111    <detail><![CDATA[ 
    1212== Needs Library == 
    13 - _libly.js(ver.0.1.4) 
     13- _libly.js(ver.0.1.11) 
    1414  @see http://coderepos.org/share/browser/lang/javascript/vimperator-plugins/trunk/_libly.js 
    1515 
     
    350350        var el = res.getHTMLDocument(extractLink); 
    351351        if (!el) throw 'extract link failed.: extractLink -> ' + extractLink; 
    352         var url = $U.pathToURL(el[0]); 
     352        var url = $U.pathToURL(el[0], res.req.url); 
    353353        var req = new libly.Request(url, null, $U.extend(res.req.options, {extractLink: true})); 
    354354        req.addEventListener('onException', $U.bind(this, this.onException)); 
     
    373373        } 
    374374 
    375         var url, escapedUrl, xpath, doc, html, extractLink; 
     375        var url, escapedUrl, xpath, doc, html, extractLink, ignoreTags; 
    376376 
    377377        try { 
     
    388388                return; 
    389389            } 
    390             var ignoreTags = ['script'].concat(libly.$U.A(res.req.options.siteinfo.ignoreTags)); 
     390            ignoreTags = ['script'].concat(libly.$U.A(res.req.options.siteinfo.ignoreTags)); 
    391391            doc = document.createElementNS(null, 'div'); 
    392             res.getHTMLDocument(xpath, null, ignoreTags, function(node, i) { doc.appendChild(node) } ); 
     392            res.getHTMLDocument(xpath, null, ignoreTags, function(node, i) { 
     393                if (node.tagName.toLowerCase() != 'html') 
     394                    doc.appendChild(node); 
     395            }); 
    393396            if (!doc) throw 'XPath result is undefined or null.: XPath -> ' + xpath; 
     397 
     398            $U.getNodesFromXPath('descendant-or-self::a | descendant-or-self::img', doc, function(node) { 
     399                var tagName = node.tagName.toLowerCase(); 
     400                if (tagName == 'a') { 
     401                    node.href = $U.pathToURL(node, url, res.doc); 
     402                } else if (tagName == 'img') { 
     403                    node.src = $U.pathToURL(node, url, res.doc); 
     404                } 
     405            }); 
    394406 
    395407            html = '<a href="' + escapedUrl + '" class="hl-Title" target="_self">' + escapedUrl + '</a>' +