| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- import { dom_manager } from "./functions.js";
- class list_applet {
- #symbol;
- #target;
- #items;
- constructor(target, symbol = null) {
- if (!dom_manager.is_element(target)) {
- throw "Target list must be an HTML element.";
- }
- this.#items = new Object();
- this.#target = target;
- this.#symbol = null;
- if (symbol !== null) {
- this.#symbol = symbol.toString();
- }
-
- if (!this.#target.classList.contains("items-list")) {
- this.#target.classList.add("items-list");
- }
- this.clean();
- }
- clean() {
- while(this.#target.childElementCount) {
- this.#target.lastChild.remove();
- }
- }
- exists(name) {
- return this.#items.hasOwnProperty(name);
- }
- remove(name) {
- if (!this.exists(name)) {
- throw "Can not remove item. This item not exists on list.";
- }
- this.#items[name].remove();
- delete(this.#items[name]);
- }
- #new_symbol() {
- const symbol = document.createElement("span");
-
- symbol.classList.add("material-symbols-outlined");
- symbol.innerText = this.#symbol;
- return symbol;
- }
- append(name, action) {
- if (this.exists(name)) {
- throw "Items with this name already exists on list.";
- }
- name = name.trim();
- if (name.length === 0) {
- throw "Name for new item can not be empty.";
- }
- const new_item = document.createElement("div");
- new_item.classList.add("list-item");
- if (this.#symbol !== null) {
- new_item.appendChild(this.#new_symbol());
- }
- const nametag = document.createElement("p");
- nametag.innerText = name;
- new_item.appendChild(nametag);
- this.#target.appendChild(new_item);
- this.#items[name] = new_item;
-
- new_item.addEventListener("click", () => {
- action(this, name);
- });
- }
- }
- export { list_applet };
|