forked from MikeRogers0/LivePage
-
Notifications
You must be signed in to change notification settings - Fork 0
/
livepages.js
133 lines (113 loc) · 3.35 KB
/
livepages.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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
/*
* The livePages object, manages making pages live & storing the live setting.
*/
function livePages() {
// The object of pages we have marked as live.
this.livePages = {};
this.i18n = new i18nHelper();
this.refresh();
};
// Refreshes livePages from database.
livePages.prototype.refresh = function() {
this.livePages = settings.get('livePages');
if (settings.get('livePages') == null) {
this.livePages = {};
}
};
// Wipes the database of all live pages.
livePages.prototype.removeAll = function() {
settings.set('livePages', {});
};
/*
* Transforms the URLS into the type the users have configured.
*/
livePages.prototype.cleanURL = function(url) {
settings.refresh();
var a = document.createElement('a');
a.href = url;
// If they only want entire hosts, just return the host name
if (settings.options.entire_hosts == true) {
if (a.hostname != '') {
return a.hostname;
}
// Fallback for file:// protocol if there isn't one.
return 'Local Files (file://)';
}
/*
* Strips the hash from the URL.
* See https://developer.mozilla.org/en-US/docs/DOM/window.location#Properties for more info about the properties
*/
if (settings.options.ignore_anchors == true) {
if( a.port === "" || a.port === 80 || a.port === 443 ){
return a.protocol + '//' + a.hostname + a.pathname + a.search;
} else {
return a.protocol + '//' + a.hostname + ":" + a.port + a.pathname + a.search;
}
}
return url;
}
// Deletes a url from livePages list.
livePages.prototype.remove = function(tab) {
this.refresh();
tab.url = this.cleanURL(tab.url);
delete this.livePages[tab.url];
settings.set('livePages', this.livePages);
this.stop(tab);
};
// Add page to LivePages.
livePages.prototype.add = function(tab) {
this.refresh();
tab.url = this.cleanURL(tab.url);
this.livePages[tab.url] = true;
settings.set('livePages', this.livePages);
this.start(tab);
};
// Check if the url is on the livePages list.
livePages.prototype.isLive = function(url) {
this.refresh();
url = this.cleanURL(url);
if (typeof this.livePages[url] != "undefined") {
return true;
}
return false;
};
// Turns on the LivePage on the tab.
livePages.prototype.start = function(tab) {
settings.refresh();
// Update the Icon
chrome.browserAction.setBadgeText({
text: chrome.i18n.getMessage('@live'),
tabId: tab.id
});
chrome.browserAction.setTitle({
title: this.i18n.disable_on(),
tabId: tab.id
});
// Make the page Live
executeScriptsInSerial(tab.id, [
{ code: 'window.$livePageConfig = ' + JSON.stringify(settings.options) + '; window.$livePage = false;' },
{ file: 'js/injected/live_resource.js' },
{ file: 'js/injected/live_css_resource.js' },
{ file: 'js/injected/live_img_resource.js' },
{ file: 'js/injected/livepage.js' }
]);
}
// Turns off live page on the tab.
livePages.prototype.stop = function(tab) {
// Stop live page running if it's there.
chrome.tabs.executeScript(tab.id, {
code: 'if(typeof window.$livePage != "undefined"){ window.$livePage.options.enabled = false; }'
});
this.setEnableOnText(tab);
}
livePages.prototype.setEnableOnText = function(tab) {
chrome.browserAction.setBadgeText({
text: '',
tabId: tab.id
});
chrome.browserAction.setTitle({
title: this.i18n.enable_on(),
tabId: tab.id
});
}
var livepages = new livePages();