aboutsummaryrefslogtreecommitdiffstats
path: root/tombloo.js
blob: e0ca49101a25479530b5116e805ec5a4ef73b07f (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
/**
 * ==VimperatorPlugin==
 * @name           tombloo.js
 * @description    Tombloo integrate plugin
 * @description-ja Tombloo経由で選択領域などをpostする
 * @author         Trapezoid
 * @version        0.1d
 * ==/VimperatorPlugin==
 *
 * Usage:
 *  :tombloo arg                    -> post by Tombloo (don't use prompt)
 *  :tombloo! arg                   -> post by Tombloo (use prompt)
 *  :tomblooAction arg              -> execute Tombloo's action in tool menu
 **/
var TomblooService = Components.classes['@brasil.to/tombloo-service;1'].getService().wrappedJSObject;
function update(target,src,keys){
    if(keys){
        keys.forEach(function(key){
            target[key] = src[key];
        });
    } else {
        for(let key in src)
            target[key] = src[key];
    }

    return target;
}

function getContext(){
    var doc = window.content.document;
    var win = window.content.wrappedJSObject;
    return update(update({
        document  : doc,
        window    : win,
        title     : ''+doc.title || '',
        selection : ''+win.getSelection(),
        target    : doc,
        //event     : event,
        //mouse     : mouse,
        //menu      : gContextMenu,
    },{}),win.location);
}

commands.addUserCommand(['tomblooAction'],'Execute Tombloo actions',
    function(arg){
        TomblooService.Tombloo.Service.actions[arg.string].execute();
    },{
        completer: function(context){
			context.title = ['Tombloo Actions'];
			context.completions = [[name,name] for(name in TomblooService.Tombloo.Service.actions)].filter(function($_){
				return this.test($_[0]);
			}, new RegExp(context.filter, 'i'));
        }
    }
);

commands.addUserCommand(['tombloo'],'Post by Tombloo',
    function(arg,special){
        TomblooService.Tombloo.Service.share(getContext(),TomblooService.Tombloo.Service.extractors[arg.string],special);
    },{
        bang: true,
        completer: function(context){
            var completionList = new Array();
            var exts = TomblooService.Tombloo.Service.check(getContext());
			context.title = ['Tombloo'];
			context.completions = [[exts[i].name, exts[i].name] for(i in exts)].filter(function($_) this.test($_[0]), new RegExp(context.filter, 'i'))
        }
    }
);