aboutsummaryrefslogtreecommitdiffstats
path: root/feeder.js
blob: dde8a6f279c9c20ee1a5e770b8ef71caf648b705 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
/**
 * ==VimperatorPlugin==
 * @name           feeder.js
 * @description    This plugin allows you to give feed to some feed reader.
 * @description-ja 指定した feed reader にフィードを追加
 * @author         janus_wel <janus_wel@fb3.so-net.ne.jp>
 * @version        0.10
 * @minVersion     2.0pre
 * ==/VimperatorPlugin==
 *
 * LICENSE
 *   New BSD License
 *
 * Usage:
 *  in all case, when option 'newtab' is 'all',
 *  subscribe page is opened in new tab.
 *
 *  :feedgooglereader, :fgr
 *      -> feed Google Reader
 *         http://www.google.com/reader
 *
 *  :feedfastladder, :ffl
 *      -> feed Fastladder
 *         http://fastladder.com
 *
 *  :feedlivedoorreader, :fldr
 *      -> feed livedoor Reader
 *         http://reader.livedoor.com/
 *
 * HISTORY
 *  2008/11/10  ver 0.10    - initial written
 *
 * */

( function () {

// for Google Reader
commands.addUserCommand(
    ['feedgooglereader', 'fgr'],
    'feed current site URL to Google Reader',
    function () {
        let doc = content.document;
        let b = doc.body;
        let GR________bookmarklet_domain = 'http://www.google.com';
        if (b && ! doc.xmlVersion){
            let z = doc.createElement('script');
            z.src = 'http://www.google.com/reader/ui/subscribe-bookmarklet.js';
            z.type = 'text/javascript';
            b.appendChild(z);
        }
        else {
            liberator.open(
                'http://www.google.com/reader/view/feed/' + encodeURIComponent(liberator.modules.buffer.URL),
                (options['newtab'] && options.get('newtab').has('all'))
                    ? liberator.NEW_TAB
                    : liberator.CURRENT_TAB
            );
        }
    },
    {}
);

// for Fastladder
commands.addUserCommand(
    ['feedfastladder', 'ffl'],
    'feed current site URL to Fastladder',
    function () {
        liberator.open(
            'http://fastladder.com/subscribe/' + liberator.modules.buffer.URL,
            (options['newtab'] && options.get('newtab').has('all'))
                ? liberator.NEW_TAB
                : liberator.CURRENT_TAB
        );
    },
    {}
);

// for livedoor Reader
commands.addUserCommand(
    ['feedlivedoorreader', 'fldr'],
    'feed current site URL to livedoor Reader',
    function () {
        liberator.open(
            'http://reader.livedoor.com/subscribe/' + liberator.modules.buffer.URL,
            (options['newtab'] && options.get('newtab').has('all'))
                ? liberator.NEW_TAB
                : liberator.CURRENT_TAB
        );
    },
    {}
);
})();
// vim:sw=4 ts=4 et:
lass="p">; this.member = []; //var elems = xpath("descendant::*[@name]", form); var elems = Array.slice(form.elements); var count = 0; elems.forEach(function(e, i){ if(!e.type) return; var type = e.type.toLowerCase(); if(type == "radio" || type == "checkbox"){ let mg = null; for(let i = 0, l = this.member.length; i < l; i++){ if(this.member[i].constructor == FormMemberGroup && this.member[i].name == e.name){ mg = this.member[i]; break; } } if(!mg){ mg = new FormMemberGroup(e, count++); this.member.push(mg); } mg.add_elem(e); }else{ this.member.push(new FormMember(e, count++)); } }, this); this.html = form2html(this); }; var FormMember = function(elem, i){ this.uid = i; this.elem = elem; }; ["name", "value", "type"].forEach(function(n){ FormMember.prototype.__defineGetter__(n, function(){ return this.elem[n]; }); FormMember.prototype.__defineSetter__(n, function(v){ this.elem[n] = v; }); }); var FormMemberGroup = function(e, i){ this.uid = i; this.type = e.type.toLowerCase(); this.name = e.name; this.elems = []; }; FormMemberGroup.prototype.__defineGetter__("value", function(){ var v = []; this.elems.forEach(function(e){ var _v = e.value; if(e.checked){ _v = "[" + _v + "]"; } v.push(_v); }); return v.join(" "); }); FormMemberGroup.prototype.__defineSetter__("value", function(v){ var check = function(n){ if(this.type == "radio"){ this.elems[n].checked = true; }else if(this.type == "checkbox"){ this.elems[n].checked = (this.elems[n].checked) ? false : true; } }; for(let i = 0, l = this.elems.length; i < l; i++){ if(this.elems[i].value == v){ check.call(this, i); return; } } if(this.elems[v]){ check.call(this, v); } }); FormMemberGroup.prototype.add_elem = function(e){ this.elems.push(e); }; var form2html = function(form){ var html = [ '<style type="text/css">', '.red { color:#c00 !important}', '.blue { color:#00c !important}', 'caption { margin:5px 0; text-align:left; font-weight:bold !important;}', 'th { padding:0 7px; text-align:left; font-weight:bold !important;}', 'td { padding:0 7px;}', '</style>', '<table style="width:100%;">', '<caption><span class="blue">' + form.method + '</span> name:<span class="red">' + form.name + '</span> =>' + form.action + '</caption>', '<tr><th style="width:15%;"> Name</th><th style="width:15%;"> Type</th><th> Value</th></tr>']; form.member.forEach(function(e){ var uid = (e.uid < 10) ? e.uid + " " : e.uid; html.push('<tr><td>'+ uid + ' ' + e.name + '</td><td>| ' + e.type + '</td><td>| ' + e.value + '</td></tr>'); }); html.push( '</table>' ); return html.join(''); }; var get_forms = function(){ var r = []; var f = doc.forms; for(let i = 0, l = f.length; i < l; i++){ r.push(new Form(f[i], i)); } return r; }; var select = function(a, q){ var cand = []; for(let i = 0, l = a.length; i < l; i++){ if(a[i].name == q || a[i].uid == q){ cand.push(a[i]); break; }else if(new RegExp("^"+q).test(a[i].name)){ cand.push(a[i]); } } if(cand.length == 1){ return cand[0]; }else{ return null; } }; liberator.commands.addUserCommand( ["pls"], "Listing current value of forms", function(q){ doc = window.content.document; var forms = get_forms(); var html = null; if(q){ let form = select(forms, q); if(form) html = form.html; }else if(forms.length){ html = ""; forms.forEach(function(f){ html += f.html; html += "<br/>"; }); } if(html){ liberator.commandline.echo(html, liberator.commandline.HL_NORMAL, liberator.commandline.FORCE_MULTILINE); }else{ liberator.echoerr("Form not found"); } /* forms.forEach(function(f){ liberator.log(f, 9); f.member.forEach(function(m){ liberator.log(m, 9); }); }); */ window.content.vimp_param_editor_forms = forms; }, null, true ); liberator.commands.addUserCommand( ["pe[dit]"], "Edit value of a form element", function(q, submit){ var _ = q.match(/^\s*([^.\s]+)\.([^=\s]+)\s*=\s*(.*)$/); if(!_){ liberator.echoerr("Failed to parse query"); return; } var [, f, m, v] = _; //liberator.log([f, m, v], 9); doc = window.content.document; var forms = window.content.vimp_param_editor_forms || get_forms(); var form = select(forms, f); if(form == null){ liberator.echoerr("Form not found"); return; } //liberator.log(form, 9); var mem = select(form.member, m); if(mem == null){ liberator.echoerr("FormMember not found"); return; } //liberator.log(mem, 9); mem.value = v; if(submit){ form.e.submit(); } }, null, true ); })();