turbopug
Version:
No-junk JS component library with insignificant weight. All in one mush: Web-Components, Localization, Routing, Reactive binding, Debounce, Unique IDs, PSW hashing
87 lines (77 loc) • 2.37 kB
JavaScript
import Comp from '../turbo/comp.js';
import Store from '../turbo/store.js';
export class MyCounter extends Comp {
static get observedAttributes() {
return ['label'];
}
constructor() {
super();
this.
label: (value = '', event) => {
switch (event.type) {
case 'set':
return event.value;
default:
return value;
}
},
counter: (value = 0, event) => {
switch (event) {
case 'incremented':
return value + 1;
case 'decremented':
return value - 1;
default:
return value;
}
},
});
this.
label: null,
counter: 1,
});
}
attributeChangedCallback(name, _, value) {
switch (name) {
case 'label':
this.
break;
default:
break;
}
}
get label() {
return this.
}
set label(value) {
this.
}
render() {
return /*html*/`
<div>
<span class="label">${this.
<span class="counter">${this.
</div>
<button class="decrement">Decrement</button>
<button class="increment">Increment</button>
`;
}
bind(valElem, decBtn, incBtn) {
const labelElem = valElem.querySelector('.label');
this.
labelElem.innerText = value;
});
const counterElem = valElem.querySelector('.counter');
this.
counterElem.innerText = value;
});
decBtn.addEventListener('click', () => {
this.
});
incBtn.addEventListener('click', () => {
this.
});
}
}
customElements.define('my-counter', MyCounter);