-
Notifications
You must be signed in to change notification settings - Fork 68
/
stylesheet_legacy.js
86 lines (73 loc) · 2.67 KB
/
stylesheet_legacy.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
/**
* Passbolt ~ Open source password manager for teams
* Copyright (c) Passbolt SARL (https://www.passbolt.com)
*
* Licensed under GNU Affero General Public License version 3 of the or any later version.
* For full copyright and license information, please see the LICENSE.txt
* Redistributions of files must retain the above copyright notice.
*
* @copyright Copyright (c) Passbolt SA (https://www.passbolt.com)
* @license https://opensource.org/licenses/AGPL-3.0 AGPL License
* @link https://www.passbolt.com Passbolt(tm)
* @since 2.12.0
*/
(function () {
class Stylesheet {
constructor() {
this.stylesheetElementId = "ext-iframe-stylesheet-link";
this.init();
}
async init() {
await this.insert();
this.handleStorageChange = this.handleStorageChange.bind(this);
chrome.storage.onChanged.addListener(this.handleStorageChange);
}
async insert() {
this.theme = await this.getTheme();
const stylesheetElement = this.createStylesheetElement(this.theme);
document.getElementsByTagName("head")[0].appendChild(stylesheetElement);
}
handleStorageChange(changes) {
if (changes._passbolt_data && changes._passbolt_data.newValue.config) {
const config = changes._passbolt_data.newValue.config;
if (config && this.theme !== config["user.settings.theme"] && this.isValidTheme(config["user.settings.theme"])) {
this.theme = config["user.settings.theme"];
const themePath = this.getThemePath(this.theme);
document.getElementById(this.stylesheetElementId).setAttribute('href', themePath);
}
}
};
async getLocalStorage() {
return new Promise((resolve, reject) => {
chrome.storage.local.get(["_passbolt_data"], result => resolve(result));
});
}
async getTheme() {
let theme = "default";
const storageData = await this.getLocalStorage();
const {_passbolt_data: {config}} = storageData;
if (config && this.isValidTheme(config["user.settings.theme"])) {
theme = config["user.settings.theme"];
}
return theme;
}
isValidTheme(theme) {
const whitelist = ['default', 'midgar'];
return whitelist.includes(theme);
}
createStylesheetElement() {
const themePath = this.getThemePath(this.theme);
const link = document.createElement('link');
link.id = this.stylesheetElementId;
link.href = themePath;
link.type = 'text/css';
link.rel = 'stylesheet';
link.media = 'all';
return link;
}
getThemePath() {
return `css/themes/${this.theme}/ext_legacy.min.css`;
}
}
new Stylesheet();
})();