Geobert (owner)

Revisions

gist: 93289 Download_button fork
public
Public Clone URL: git://gist.github.com/93289.git
Embed All Files: show embed
open-link.js #
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
CmdUtils.CreateCommand({
name: "open-links",
_getSelectedLinks: function() {
var doc = CmdUtils.getDocument();
var links = doc.links;
if (null == links)
return {urls: null, nbLinks: 0};
var nbLinks = links.length;
        var urlhash = new Object();
        var selection = CmdUtils.getWindow().getSelection();
        var numOfSel = 0;
for (var i = 0; i < nbLinks; i++) {
var link = links[i].href;
            if (selection.containsNode(links[i], true)) {
numOfSel++;
urlhash[link] = true;
}
}
return {urls: urlhash, nbLinks: numOfSel};
},
 
    _isOpenable: function(link) {
        try {
           var authorized = new Object();
           authorized['http'] = true;
           authorized['https'] = true;
           authorized['file'] = true;
 
           var endOfProtocolIdx = link.indexOf(':');
           var protocol = link.substr(0, endOfProtocolIdx);
           CmdUtils.log('protocol is : ' + protocol);
           return authorized[protocol.toLowerCase()] == true;
        } catch(e) {
           CmdUtils.log("Unable to get protocol from " + link);
           return false;
        }
    },
 
    _openLink: function(link) {
         var browser = Utils.currentChromeWindow.getBrowser();
         browser.addTab(link);
    },
preview: function(pblock) {
var msg = '';
        var infos = this._getSelectedLinks();
        if (infos.nbLinks == 0) {
           msg = 'No link in selected text.';
        } else if (infos.nbLinks > 20) {
           msg = 'Can\'t open ${nbLinks} at the same time (20 max).';
        } else if (infos.nbLinks > 0) {
           msg = 'Open ${nbLinks} links in tabs.';
        } else {
           msg = 'Error.';
        }
        var nbAuthorized = 0;
        for (link in infos.urls) {
           if (this._isOpenable(link))
              nbAuthorized++;
        }
pblock.innerHTML = CmdUtils.renderTemplate(msg, {nbLinks: nbAuthorized});
    },
    
    execute: function() {
         var infos = this._getSelectedLinks();
         var links = infos.urls;
         if (infos.nbLinks > 0 && infos.nbLinks <= 20) {
            for (link in links) {
               if (this._isOpenable(link)) {
                  this._openLink(link);
               }
            }
         }
    },
})