-
Notifications
You must be signed in to change notification settings - Fork 0
/
MMM-Glassy.js
120 lines (109 loc) · 3.79 KB
/
MMM-Glassy.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
/**************
* MMM-Glassy
* ©Bugsounet
* 04/2024
**************/
Module.register("MMM-Glassy", {
requiresVersion: "2.27.0",
defaults: {
debug: false,
ignoreModules: [],
modulePadding: "10px",
moduleRadius: "10px",
moduleShadow: "5px",
moduleBackgroundRGB: "0,0,0",
moduleBackgroundOpacity: "15%",
moduleBorderRGB: "255,255,255",
moduleBorderOpacity: "10%",
moduleShadowOffsetX: "-5px",
moduleShadowOffsetY: "-5px",
moduleShadowBlur: "8px",
moduleShadowColor: "black",
moduleBlur: "5px",
moduleSpacing: "15px",
mirrorMargin: "10px",
mirrorBackground: true,
mirrorBackgroundFile: "default.jpg",
mirrorBackgroundOnSuspend: true
},
start () {
/* force to create a module position */
this.data.position = "top_center";
},
notificationReceived (notification, payload, sender) {
switch(notification) {
case "MODULE_DOM_CREATED":
this.sendSocketNotification("INIT", this.config);
if (this.config.mirrorBackground) this.MMBackground();
this.initialize();
break;
}
},
getDom () {
/* make a dummy hidden module for use `MODULE_DOM_CREATED` notification */
var dom = document.createElement("div");
dom.style.display = "none";
dom.className = "hidden";
return dom;
},
getStyles () {
return ["MMM-Glassy.css"];
},
initialize () {
/* set css from config*/
const cssValues = {
"--Glassy-Padding" : this.config.modulePadding,
"--Glassy-Radius": this.config.moduleRadius,
"--Glassy-Background": `rgba(${this.config.moduleBackgroundRGB}, ${this.config.moduleBackgroundOpacity})`,
"--Glassy-Blur": this.config.moduleBlur,
"--Glassy-Border-color": `rgba(${this.config.moduleBorderRGB}, ${this.config.moduleBorderOpacity})`,
"--Glassy-Shadow": `${this.config.moduleShadowOffsetX} ${this.config.moduleShadowOffsetY} ${this.config.moduleShadowBlur} ${this.config.moduleShadowColor}`,
"--gap-modules": this.config.moduleSpacing,
"--gap-body-top": this.config.mirrorMargin,
"--gap-body-right": this.config.mirrorMargin,
"--gap-body-bottom": this.config.mirrorMargin,
"--gap-body-left": this.config.mirrorMargin
};
this.cssSet(cssValues);
/* select Modules to Glassy apply */
MM.getModules()
.exceptModule(this)
.exceptWithClass(this.config.ignoreModules)
.enumerate((module) => {
const identifier = module.data.identifier;
const moduleClass = document.getElementById(identifier);
const moduleContent = moduleClass?.getElementsByClassName("module-content")[0];
moduleContent?.classList.add("Glassy");
});
},
cssSet (CSS) {
const cssRoot = document.querySelector(":root");
Object.entries(CSS).forEach((value) => {
cssRoot.style.setProperty(value[0], value[1]);
});
},
MMBackground () {
const nodes = document.getElementsByClassName("region fullscreen below");
const pos = nodes[0];
const children = pos.children[0];
const module = document.createElement("div");
module.id = "Background_MMM-Glassy";
module.className = "default";
module.style.backgroundImage = `url(/modules/MMM-Glassy/resources/${this.config.mirrorBackgroundFile})`;
pos.insertBefore(module, children);
},
suspend () {
if (this.config.mirrorBackground && !this.config.mirrorBackgroundOnSuspend) {
const MMBackground = document.getElementById("Background_MMM-Glassy");
MMBackground.className = "hidden";
}
Log.log("MMM-Glassy is suspended.");
},
resume () {
if (this.config.mirrorBackground && !this.config.mirrorBackgroundOnSuspend) {
const MMBackground = document.getElementById("Background_MMM-Glassy");
MMBackground.className = "default";
}
Log.log("MMM-Glassy is resumed.");
}
});