Highlighter
This commit is contained in:
17
js/highlighter.js
Normal file
17
js/highlighter.js
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
import { SingleTimer } from "./singletimer";
|
||||||
|
export class Highlighter {
|
||||||
|
elem;
|
||||||
|
timer;
|
||||||
|
constructor(elem) {
|
||||||
|
this.elem = elem;
|
||||||
|
this.elem.classList.add("preHighlight");
|
||||||
|
this.timer = new SingleTimer(() => {
|
||||||
|
this.elem.classList.remove("highlight");
|
||||||
|
}, 1000);
|
||||||
|
}
|
||||||
|
highlight() {
|
||||||
|
this.elem.classList.add("highlight");
|
||||||
|
this.timer.start();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlnaGxpZ2h0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9oaWdobGlnaHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTVDLE1BQU0sT0FBTyxXQUFXO0lBQ1osSUFBSSxDQUFjO0lBQ2xCLEtBQUssQ0FBYztJQUUzQixZQUFZLElBQWlCO1FBQ3pCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUV4QyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksV0FBVyxDQUFDLEdBQUcsRUFBRTtZQUM5QixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDNUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQUVNLFNBQVM7UUFDWixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN2QixDQUFDO0NBQ0oifQ==
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
import { ElemWrapper } from "./elemwrapper";
|
import { ElemWrapper } from "./elemwrapper";
|
||||||
|
import { Highlighter } from "./highlighter";
|
||||||
import { SLCard } from "./slcard";
|
import { SLCard } from "./slcard";
|
||||||
import { SLIcon } from "./slicon";
|
import { SLIcon } from "./slicon";
|
||||||
import { SLInput } from "./slinput";
|
import { SLInput } from "./slinput";
|
||||||
@@ -15,6 +16,7 @@ async function main() {
|
|||||||
tasksCard.append(tasksInput);
|
tasksCard.append(tasksInput);
|
||||||
tasksInput.setPill();
|
tasksInput.setPill();
|
||||||
const tasksAddIcon = tasksInput.addSuffixIcon("plus-circle");
|
const tasksAddIcon = tasksInput.addSuffixIcon("plus-circle");
|
||||||
|
const highlighter = new Highlighter(tasksAddIcon);
|
||||||
const addTask = () => {
|
const addTask = () => {
|
||||||
const task = tasksInput.getValue();
|
const task = tasksInput.getValue();
|
||||||
if (task.length === 0) {
|
if (task.length === 0) {
|
||||||
@@ -22,9 +24,7 @@ async function main() {
|
|||||||
}
|
}
|
||||||
tasksInput.clear();
|
tasksInput.clear();
|
||||||
tasksInput.focus();
|
tasksInput.focus();
|
||||||
tasksAddIcon.classList.remove("highlight");
|
highlighter.highlight();
|
||||||
void tasksAddIcon.elem.offsetWidth; // force reflow
|
|
||||||
tasksAddIcon.classList.add("highlight");
|
|
||||||
};
|
};
|
||||||
tasksAddIcon.addEventListener("click", () => {
|
tasksAddIcon.addEventListener("click", () => {
|
||||||
addTask();
|
addTask();
|
||||||
@@ -38,4 +38,4 @@ async function main() {
|
|||||||
tagsTab.append(new SLIcon("tags"));
|
tagsTab.append(new SLIcon("tags"));
|
||||||
}
|
}
|
||||||
document.addEventListener("DOMContentLoaded", main);
|
document.addEventListener("DOMContentLoaded", main);
|
||||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL21haW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDbEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRTFDLEtBQUssVUFBVSxJQUFJO0lBQ2YsTUFBTSxJQUFJLEdBQUcsSUFBSSxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRTVDLE1BQU0sUUFBUSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7SUFDbEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUV0QixNQUFNLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDM0QsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBRXpDLE1BQU0sU0FBUyxHQUFHLElBQUksTUFBTSxFQUFFLENBQUM7SUFDL0IsVUFBVSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUU3QixNQUFNLFVBQVUsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0lBQ2pDLFNBQVMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDN0IsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBRXJCLE1BQU0sWUFBWSxHQUFHLFVBQVUsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUM7SUFFN0QsTUFBTSxPQUFPLEdBQUcsR0FBRyxFQUFFO1FBQ2pCLE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNuQyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDcEIsT0FBTztRQUNYLENBQUM7UUFFRCxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDbkIsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBRW5CLFlBQVksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzNDLEtBQUssWUFBWSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxlQUFlO1FBQ25ELFlBQVksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzVDLENBQUMsQ0FBQztJQUVGLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFO1FBQ3hDLE9BQU8sRUFBRSxDQUFDO0lBQ2QsQ0FBQyxDQUFDLENBQUM7SUFFSCxVQUFVLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUU7UUFDekMsSUFBSyxDQUFtQixDQUFDLEdBQUcsS0FBSyxPQUFPLEVBQUUsQ0FBQztZQUN2QyxPQUFPLEVBQUUsQ0FBQztRQUNkLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILE1BQU0sQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN4RCxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDdkMsQ0FBQztBQUVELFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsQ0FBQyJ9
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL21haW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDbEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNsQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFMUMsS0FBSyxVQUFVLElBQUk7SUFDZixNQUFNLElBQUksR0FBRyxJQUFJLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFNUMsTUFBTSxRQUFRLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztJQUNsQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRXRCLE1BQU0sQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMzRCxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFFekMsTUFBTSxTQUFTLEdBQUcsSUFBSSxNQUFNLEVBQUUsQ0FBQztJQUMvQixVQUFVLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBRTdCLE1BQU0sVUFBVSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7SUFDakMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM3QixVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7SUFFckIsTUFBTSxZQUFZLEdBQUcsVUFBVSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUM3RCxNQUFNLFdBQVcsR0FBRyxJQUFJLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUVsRCxNQUFNLE9BQU8sR0FBRyxHQUFHLEVBQUU7UUFDakIsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ25DLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNwQixPQUFPO1FBQ1gsQ0FBQztRQUVELFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNuQixVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFbkIsV0FBVyxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQzVCLENBQUMsQ0FBQztJQUVGLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFO1FBQ3hDLE9BQU8sRUFBRSxDQUFDO0lBQ2QsQ0FBQyxDQUFDLENBQUM7SUFFSCxVQUFVLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUU7UUFDekMsSUFBSyxDQUFtQixDQUFDLEdBQUcsS0FBSyxPQUFPLEVBQUUsQ0FBQztZQUN2QyxPQUFPLEVBQUUsQ0FBQztRQUNkLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILE1BQU0sQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN4RCxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDdkMsQ0FBQztBQUVELFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsQ0FBQyJ9
|
||||||
16
js/singletimer.js
Normal file
16
js/singletimer.js
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
export class SingleTimer {
|
||||||
|
callback;
|
||||||
|
delay;
|
||||||
|
timer;
|
||||||
|
constructor(callback, delay) {
|
||||||
|
this.callback = callback;
|
||||||
|
this.delay = delay;
|
||||||
|
}
|
||||||
|
start() {
|
||||||
|
if (this.timer) {
|
||||||
|
clearTimeout(this.timer);
|
||||||
|
}
|
||||||
|
this.timer = setTimeout(this.callback, this.delay);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2luZ2xldGltZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9zaW5nbGV0aW1lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8sV0FBVztJQUNaLFFBQVEsQ0FBYTtJQUNyQixLQUFLLENBQVM7SUFDZCxLQUFLLENBQXFCO0lBRWxDLFlBQVksUUFBb0IsRUFBRSxLQUFhO1FBQzNDLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ3ZCLENBQUM7SUFFTSxLQUFLO1FBQ1IsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDYixZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdCLENBQUM7UUFFRCxJQUFJLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2RCxDQUFDO0NBQ0oifQ==
|
||||||
@@ -31,21 +31,13 @@ sl-input sl-icon {
|
|||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
.highlight {
|
.preHighlight {
|
||||||
animation: colorFade 1.5s ease forwards;
|
transition: color 0.3s ease-out;
|
||||||
}
|
}
|
||||||
|
|
||||||
@keyframes colorFade {
|
.highlight {
|
||||||
0% {
|
color: var(--sl-color-primary-600);
|
||||||
}
|
transition: color 0.1s ease-in;
|
||||||
5% {
|
|
||||||
color: var(--sl-color-primary-600);
|
|
||||||
}
|
|
||||||
60% {
|
|
||||||
color: var(--sl-color-primary-600);
|
|
||||||
}
|
|
||||||
100% {
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
body {
|
body {
|
||||||
|
|||||||
@@ -43,6 +43,40 @@ var ElemWrapper = class _ElemWrapper {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// js/singletimer.js
|
||||||
|
var SingleTimer = class {
|
||||||
|
callback;
|
||||||
|
delay;
|
||||||
|
timer;
|
||||||
|
constructor(callback, delay) {
|
||||||
|
this.callback = callback;
|
||||||
|
this.delay = delay;
|
||||||
|
}
|
||||||
|
start() {
|
||||||
|
if (this.timer) {
|
||||||
|
clearTimeout(this.timer);
|
||||||
|
}
|
||||||
|
this.timer = setTimeout(this.callback, this.delay);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// js/highlighter.js
|
||||||
|
var Highlighter = class {
|
||||||
|
elem;
|
||||||
|
timer;
|
||||||
|
constructor(elem) {
|
||||||
|
this.elem = elem;
|
||||||
|
this.elem.classList.add("preHighlight");
|
||||||
|
this.timer = new SingleTimer(() => {
|
||||||
|
this.elem.classList.remove("highlight");
|
||||||
|
}, 1e3);
|
||||||
|
}
|
||||||
|
highlight() {
|
||||||
|
this.elem.classList.add("highlight");
|
||||||
|
this.timer.start();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
// js/slelem.js
|
// js/slelem.js
|
||||||
var SLElem = class extends ElemWrapper {
|
var SLElem = class extends ElemWrapper {
|
||||||
constructor(tagName) {
|
constructor(tagName) {
|
||||||
@@ -152,6 +186,7 @@ async function main() {
|
|||||||
tasksCard.append(tasksInput);
|
tasksCard.append(tasksInput);
|
||||||
tasksInput.setPill();
|
tasksInput.setPill();
|
||||||
const tasksAddIcon = tasksInput.addSuffixIcon("plus-circle");
|
const tasksAddIcon = tasksInput.addSuffixIcon("plus-circle");
|
||||||
|
const highlighter = new Highlighter(tasksAddIcon);
|
||||||
const addTask = () => {
|
const addTask = () => {
|
||||||
const task = tasksInput.getValue();
|
const task = tasksInput.getValue();
|
||||||
if (task.length === 0) {
|
if (task.length === 0) {
|
||||||
@@ -159,9 +194,7 @@ async function main() {
|
|||||||
}
|
}
|
||||||
tasksInput.clear();
|
tasksInput.clear();
|
||||||
tasksInput.focus();
|
tasksInput.focus();
|
||||||
tasksAddIcon.classList.remove("highlight");
|
highlighter.highlight();
|
||||||
void tasksAddIcon.elem.offsetWidth;
|
|
||||||
tasksAddIcon.classList.add("highlight");
|
|
||||||
};
|
};
|
||||||
tasksAddIcon.addEventListener("click", () => {
|
tasksAddIcon.addEventListener("click", () => {
|
||||||
addTask();
|
addTask();
|
||||||
@@ -175,4 +208,4 @@ async function main() {
|
|||||||
tagsTab.append(new SLIcon("tags"));
|
tagsTab.append(new SLIcon("tags"));
|
||||||
}
|
}
|
||||||
document.addEventListener("DOMContentLoaded", main);
|
document.addEventListener("DOMContentLoaded", main);
|
||||||
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vdHMvZWxlbXdyYXBwZXIudHMiLCAiLi4vdHMvc2xlbGVtLnRzIiwgIi4uL3RzL3NsY2FyZC50cyIsICIuLi90cy9zbGljb24udHMiLCAiLi4vdHMvc2xpbnB1dC50cyIsICIuLi90cy9zbHRhYi50cyIsICIuLi90cy9zbHRhYnBhbmVsLnRzIiwgIi4uL3RzL3NsdGFiZ3JvdXAudHMiLCAiLi4vdHMvbWFpbi50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFtudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsXSwKICAibWFwcGluZ3MiOiAiO0FBQU0sSUFBTyxjQUFQLE1BQU8sYUFBVztFQUNiO0VBRUE7RUFDQTtFQUVBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFFUCxZQUFZLE1BQWlCO0FBQ3pCLFNBQUssT0FBTztBQUVaLFNBQUssUUFBUSxLQUFLLEtBQUs7QUFDdkIsU0FBSyxZQUFZLEtBQUssS0FBSztBQUUzQixTQUFLLG1CQUFtQixLQUFLLEtBQUssaUJBQWlCLEtBQUssS0FBSyxJQUFJO0FBQ2pFLFNBQUssY0FBYyxLQUFLLEtBQUssWUFBWSxLQUFLLEtBQUssSUFBSTtBQUN2RCxTQUFLLFlBQVksS0FBSyxLQUFLLFVBQVUsS0FBSyxLQUFLLElBQUk7QUFDbkQsU0FBSyxXQUFXLEtBQUssS0FBSyxTQUFTLEtBQUssS0FBSyxJQUFJO0FBQ2pELFNBQUssZ0JBQWdCLEtBQUssS0FBSyxjQUFjLEtBQUssS0FBSyxJQUFJO0FBQzNELFNBQUssbUJBQW1CLEtBQUssS0FBSyxpQkFBaUIsS0FBSyxLQUFLLElBQUk7QUFDakUsU0FBSyxTQUFTLEtBQUssS0FBSyxPQUFPLEtBQUssS0FBSyxJQUFJO0FBQzdDLFNBQUssZUFBZSxLQUFLLEtBQUssYUFBYSxLQUFLLEtBQUssSUFBSTtFQUM3RDtFQUVBLE9BQU8sT0FBTyxTQUFlO0FBQ3pCLFdBQU8sSUFBSSxhQUFZLFNBQVMs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
|
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vdHMvZWxlbXdyYXBwZXIudHMiLCAiLi4vdHMvc2luZ2xldGltZXIudHMiLCAiLi4vdHMvaGlnaGxpZ2h0ZXIudHMiLCAiLi4vdHMvc2xlbGVtLnRzIiwgIi4uL3RzL3NsY2FyZC50cyIsICIuLi90cy9zbGljb24udHMiLCAiLi4vdHMvc2xpbnB1dC50cyIsICIuLi90cy9zbHRhYi50cyIsICIuLi90cy9zbHRhYnBhbmVsLnRzIiwgIi4uL3RzL3NsdGFiZ3JvdXAudHMiLCAiLi4vdHMvbWFpbi50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFtudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsXSwKICAibWFwcGluZ3MiOiAiO0FBQU0sSUFBTyxjQUFQLE1BQU8sYUFBVztFQUNiO0VBRUE7RUFDQTtFQUVBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFFUCxZQUFZLE1BQWlCO0FBQ3pCLFNBQUssT0FBTztBQUVaLFNBQUssUUFBUSxLQUFLLEtBQUs7QUFDdkIsU0FBSyxZQUFZLEtBQUssS0FBSztBQUUzQixTQUFLLG1CQUFtQixLQUFLLEtBQUssaUJBQWlCLEtBQUssS0FBSyxJQUFJO0FBQ2pFLFNBQUssY0FBYyxLQUFLLEtBQUssWUFBWSxLQUFLLEtBQUssSUFBSTtBQUN2RCxTQUFLLFlBQVksS0FBSyxLQUFLLFVBQVUsS0FBSyxLQUFLLElBQUk7QUFDbkQsU0FBSyxXQUFXLEtBQUssS0FBSyxTQUFTLEtBQUssS0FBSyxJQUFJO0FBQ2pELFNBQUssZ0JBQWdCLEtBQUssS0FBSyxjQUFjLEtBQUssS0FBSyxJQUFJO0FBQzNELFNBQUssbUJBQW1CLEtBQUssS0FBSyxpQkFBaUIsS0FBSyxLQUFLLElBQUk7QUFDakUsU0FBSyxTQUFTLEtBQUssS0FBSyxPQUFPLEtBQUssS0FBSyxJQUFJO0FBQzdDLFNBQUssZUFBZSxLQUFLLEtBQUssYUFBYSxLQUFLLEtB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
|
||||||
|
|||||||
21
ts/highlighter.ts
Normal file
21
ts/highlighter.ts
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
import { ElemWrapper } from "./elemwrapper";
|
||||||
|
import { SingleTimer } from "./singletimer";
|
||||||
|
|
||||||
|
export class Highlighter {
|
||||||
|
private elem: ElemWrapper;
|
||||||
|
private timer: SingleTimer;
|
||||||
|
|
||||||
|
constructor(elem: ElemWrapper) {
|
||||||
|
this.elem = elem;
|
||||||
|
this.elem.classList.add("preHighlight");
|
||||||
|
|
||||||
|
this.timer = new SingleTimer(() => {
|
||||||
|
this.elem.classList.remove("highlight");
|
||||||
|
}, 1000);
|
||||||
|
}
|
||||||
|
|
||||||
|
public highlight() {
|
||||||
|
this.elem.classList.add("highlight");
|
||||||
|
this.timer.start();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
import { ElemWrapper } from "./elemwrapper";
|
import { ElemWrapper } from "./elemwrapper";
|
||||||
|
import { Highlighter } from "./highlighter";
|
||||||
import { SLCard } from "./slcard";
|
import { SLCard } from "./slcard";
|
||||||
import { SLIcon } from "./slicon";
|
import { SLIcon } from "./slicon";
|
||||||
import { SLInput } from "./slinput";
|
import { SLInput } from "./slinput";
|
||||||
@@ -19,8 +20,9 @@ async function main() {
|
|||||||
const tasksInput = new SLInput();
|
const tasksInput = new SLInput();
|
||||||
tasksCard.append(tasksInput);
|
tasksCard.append(tasksInput);
|
||||||
tasksInput.setPill();
|
tasksInput.setPill();
|
||||||
|
|
||||||
const tasksAddIcon = tasksInput.addSuffixIcon("plus-circle");
|
const tasksAddIcon = tasksInput.addSuffixIcon("plus-circle");
|
||||||
|
const highlighter = new Highlighter(tasksAddIcon);
|
||||||
|
|
||||||
const addTask = () => {
|
const addTask = () => {
|
||||||
const task = tasksInput.getValue();
|
const task = tasksInput.getValue();
|
||||||
@@ -31,9 +33,7 @@ async function main() {
|
|||||||
tasksInput.clear();
|
tasksInput.clear();
|
||||||
tasksInput.focus();
|
tasksInput.focus();
|
||||||
|
|
||||||
tasksAddIcon.classList.remove("highlight");
|
highlighter.highlight();
|
||||||
void tasksAddIcon.elem.offsetWidth; // force reflow
|
|
||||||
tasksAddIcon.classList.add("highlight");
|
|
||||||
};
|
};
|
||||||
|
|
||||||
tasksAddIcon.addEventListener("click", () => {
|
tasksAddIcon.addEventListener("click", () => {
|
||||||
|
|||||||
18
ts/singletimer.ts
Normal file
18
ts/singletimer.ts
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
export class SingleTimer {
|
||||||
|
private callback: () => void;
|
||||||
|
private delay: number;
|
||||||
|
private timer: number | undefined;
|
||||||
|
|
||||||
|
constructor(callback: () => void, delay: number) {
|
||||||
|
this.callback = callback;
|
||||||
|
this.delay = delay;
|
||||||
|
}
|
||||||
|
|
||||||
|
public start() {
|
||||||
|
if (this.timer) {
|
||||||
|
clearTimeout(this.timer);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.timer = setTimeout(this.callback, this.delay);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user