forked from clvrobj/Emacsome
-
Notifications
You must be signed in to change notification settings - Fork 0
/
content.js
81 lines (80 loc) · 2.83 KB
/
content.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
76
77
78
79
80
81
/*
* Producer:
* cast directors and actor;
* change director;
* director have to regitster his keys to producer;
*/
var Producer = function (type) {
this.keys = [];
var producer = this;
chrome.extension.sendMessage({method:'get-localstorage', key:METAKEY_STORE}, function (response) {
producer.metaKey = response.data ? response.data : DEFAULT_METAKEY;
producer.actor = new Actor(producer);
producer.director = producer.getDirector(DEFAULT_DIRECTOR);
producer.actor.setDirector(producer.director);
});
};
Producer.prototype.getDirector = function (type) {
switch (type) {
case DEFAULT_DIRECTOR:
if (!this.defaultDirector) {
this.defaultDirector = new DefaultDirector(this, this.actor);
}
this.director = this.defaultDirector;
this.actor.setDirector(this.director);
break;
case TABSELECT_DIRECTOR:
if (!this.tabSelectDirector) {
this.tabSelectDirector = new TabSelectDirector(this, this.actor);
}
this.director = this.tabSelectDirector;
this.actor.setDirector(this.director);
break;
case LINKOPEN_DIRECTOR:
if (!this.linkOpenDirector) {
this.linkOpenDirector = new LinkOpenDirector(this, this.actor);
}
this.director = this.linkOpenDirector;
this.actor.setDirector(this.director);
break;
case LINKOPEN_ALTERNATE_DIRECTOR:
if (!this.linkOpenAlternateDirector) {
this.linkOpenAlternateDirector = new LinkOpenAlternateDirector(this, this.actor);
}
this.director = this.linkOpenAlternateDirector;
this.actor.setDirector(this.director);
break;
default:
break;
}
return this.director;
};
Producer.prototype.registerKeys = function (keys) {
for(var i=0; i<keys.length; i++) {
var k = keys[i];
if (_.indexOf(this.keys, k) == -1) {
// must be keydown or some sequence keys not work
Mousetrap.bind(k, this._getKeyHandler(k), ['keydown']);
this.keys.push(k);
}
}
};
Producer.prototype.bindNumKeys = function () {
// must reverse the number sort for some mousetrap bug
for (var num=0; num<SHOWLINKS_COUNT; num++) {
var k = num.toString().split('').join(' ').concat(' enter');
if (_.indexOf(this.keys, k) == -1) {
Mousetrap.bind(k, this._getKeyHandler(num), ['keydown']);
this.keys.push(k);
}
}
};
Producer.prototype._getKeyHandler = function (key) {
var producer = this;
return function (e) {
e.preventDefault();
e.stopPropagation();
producer.getDirector().sayAction(key);
};
};
new Producer();