Webbserverprogrammering 1

Show sourcecode

The following files exists in this folder. Click to view.

webbutv3/word-app/public/

PageElement.js
practice.js
style.css

PageElement.js

94 lines ASCII Windows (CRLF)
// utility functions

function PageElement(name, element) {
  this.uniqueId = Math.random();
  this.name = name;
  this.id;
  this.element = element;

  this.onRemoved = [];
}

PageElement.prototype.setId = function (id) {
  this.id = id;
  this.element.setAttribute("id", id);
  return this;
};
PageElement.prototype.setName = function (newName) {
  this.name = newName;
  return this;
};
PageElement.prototype.remove = function () {
  this.element.remove();
};
PageElement.prototype.addEventListener = function (event, func) {
  this.element.addEventListener(event, func);
  return this;
};
PageElement.prototype.appendChild = function (pageElement) {
  this.element.appendChild(pageElement.element);
  return this;
};
PageElement.prototype.classList = function (pageElement) {
  return this.element.classList;
};
PageElement.prototype.replaceChildren = function (pageElements) {
  this.element.replaceChildren(pageElements.map((x) => x.element));
  return this;
};
PageElement.prototype.hide = function (pageElement) {
  this.element.classList.add("hidden");
  return this;
};
PageElement.prototype.show = function (pageElement) {
  this.element.classList.remove("hidden");
  return this;
};

PageElement.prototype.elementToggleButton = function (text) {
  const button = document.createElement("button");
  button.innerText = text;
  button.addEventListener("click", () => {
    button.toggleAttribute("toggled");
  });
  button.classList.add("button-toggle");
  this.element = button;
  return this;
};

PageElement.prototype.fromTag = function (tag) {
  const button = document.createElement(tag);
  this.element = button;
  return this;
};

PageElement.prototype.getElementById = function (id) {
  this.element = document.getElementById(id);
  return this;
};

function Page() {
  this.pageElements = [];
}

Page.prototype.remove = function (pageElement) {
  const index = this.pageElements.findIndex(
    (v) => v.uniqueId === pageElement.uniqueId
  );
  pageElement.remove();
  this.pageElements.splice(index, 1);
  return this;
};

Page.prototype.addPageElement = function (pageElement) {
  this.pageElements.push(pageElement);
  return this;
};

Page.prototype.getPageElement = function ({ name, id }) {
  let selector = () => false;
  if (name) selector = (v) => v.name === name;
  else if (id) selector = (v) => v.id === id;
  return this.pageElements.find(selector);
};