mirror of
https://github.com/SchildiChat/element-web.git
synced 2024-10-01 01:26:12 -04:00
Add support for badge override opts
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
This commit is contained in:
parent
0d1b4afde8
commit
4532ddbb2d
@ -89,7 +89,7 @@ export default class Favicon {
|
|||||||
this.context.drawImage(this.baseImage, 0, 0, this.canvas.width, this.canvas.height);
|
this.context.drawImage(this.baseImage, 0, 0, this.canvas.width, this.canvas.height);
|
||||||
}
|
}
|
||||||
|
|
||||||
private options(n: number | string) {
|
private options(n: number | string, params: IParams) {
|
||||||
const opt = {
|
const opt = {
|
||||||
n: ((typeof n) === "number") ? Math.abs(n as number | 0) : n,
|
n: ((typeof n) === "number") ? Math.abs(n as number | 0) : n,
|
||||||
len: ("" + n).length,
|
len: ("" + n).length,
|
||||||
@ -101,14 +101,14 @@ export default class Favicon {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// apply positional transformations
|
// apply positional transformations
|
||||||
if (this.params.isUp) {
|
if (params.isUp) {
|
||||||
if (opt.y < 0.6) {
|
if (opt.y < 0.6) {
|
||||||
opt.y = opt.y - 0.4;
|
opt.y = opt.y - 0.4;
|
||||||
} else {
|
} else {
|
||||||
opt.y = opt.y - 2 * opt.y + (1 - opt.w);
|
opt.y = opt.y - 2 * opt.y + (1 - opt.w);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (this.params.isLeft) {
|
if (params.isLeft) {
|
||||||
if (opt.x < 0.6) {
|
if (opt.x < 0.6) {
|
||||||
opt.x = opt.x - 0.4;
|
opt.x = opt.x - 0.4;
|
||||||
} else {
|
} else {
|
||||||
@ -124,8 +124,9 @@ export default class Favicon {
|
|||||||
return opt;
|
return opt;
|
||||||
}
|
}
|
||||||
|
|
||||||
private circle(n: number | string) {
|
private circle(n: number | string, opts?: Partial<IParams>) {
|
||||||
const opt = this.options(n);
|
const params = {...this.params, ...opts};
|
||||||
|
const opt = this.options(n, params);
|
||||||
|
|
||||||
let more = false;
|
let more = false;
|
||||||
if (opt.len === 2) {
|
if (opt.len === 2) {
|
||||||
@ -142,7 +143,7 @@ export default class Favicon {
|
|||||||
this.context.drawImage(this.baseImage, 0, 0, this.canvas.width, this.canvas.height);
|
this.context.drawImage(this.baseImage, 0, 0, this.canvas.width, this.canvas.height);
|
||||||
this.context.beginPath();
|
this.context.beginPath();
|
||||||
const fontSize = Math.floor(opt.h * (opt.n > 99 ? 0.85 : 1)) + "px";
|
const fontSize = Math.floor(opt.h * (opt.n > 99 ? 0.85 : 1)) + "px";
|
||||||
this.context.font = `${this.params.fontWeight} ${fontSize} ${this.params.fontFamily}`;
|
this.context.font = `${params.fontWeight} ${fontSize} ${params.fontFamily}`;
|
||||||
this.context.textAlign = "center";
|
this.context.textAlign = "center";
|
||||||
|
|
||||||
if (more) {
|
if (more) {
|
||||||
@ -159,12 +160,12 @@ export default class Favicon {
|
|||||||
this.context.arc(opt.x + opt.w / 2, opt.y + opt.h / 2, opt.h / 2, 0, 2 * Math.PI);
|
this.context.arc(opt.x + opt.w / 2, opt.y + opt.h / 2, opt.h / 2, 0, 2 * Math.PI);
|
||||||
}
|
}
|
||||||
|
|
||||||
this.context.fillStyle = this.params.bgColor;
|
this.context.fillStyle = params.bgColor;
|
||||||
this.context.fill();
|
this.context.fill();
|
||||||
this.context.closePath();
|
this.context.closePath();
|
||||||
this.context.beginPath();
|
this.context.beginPath();
|
||||||
this.context.stroke();
|
this.context.stroke();
|
||||||
this.context.fillStyle = this.params.textColor;
|
this.context.fillStyle = params.textColor;
|
||||||
|
|
||||||
if ((typeof opt.n) === "number" && opt.n > 999) {
|
if ((typeof opt.n) === "number" && opt.n > 999) {
|
||||||
const count = ((opt.n > 9999) ? 9 : Math.floor(opt.n as number / 1000)) + "k+";
|
const count = ((opt.n > 9999) ? 9 : Math.floor(opt.n as number / 1000)) + "k+";
|
||||||
@ -209,16 +210,16 @@ export default class Favicon {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public badge(content: number | string) {
|
public badge(content: number | string, opts?: Partial<IParams>) {
|
||||||
if (!this.isReady) {
|
if (!this.isReady) {
|
||||||
this.readyCb = () => {
|
this.readyCb = () => {
|
||||||
this.badge(content);
|
this.badge(content, opts);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (typeof content === "string" || content > 0) {
|
if (typeof content === "string" || content > 0) {
|
||||||
this.circle(content);
|
this.circle(content, opts);
|
||||||
} else {
|
} else {
|
||||||
this.reset();
|
this.reset();
|
||||||
}
|
}
|
||||||
|
@ -85,9 +85,7 @@ export default class VectorBasePlatform extends BasePlatform {
|
|||||||
bgColor = "#f00";
|
bgColor = "#f00";
|
||||||
}
|
}
|
||||||
|
|
||||||
this.favicon.badge(notif, {
|
this.favicon.badge(notif, { bgColor });
|
||||||
bgColor: bgColor,
|
|
||||||
});
|
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.warn(`Failed to set badge count: ${e.message}`);
|
console.warn(`Failed to set badge count: ${e.message}`);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user