diff --git a/editable-list/main.js b/editable-list/main.js
index 36c08aa..8eedc6a 100644
--- a/editable-list/main.js
+++ b/editable-list/main.js
@@ -1,132 +1,132 @@
'use strict';
(function() {
- class EditableList extends HTMLElement {
- constructor() {
- // establish prototype chain
- super();
-
- // attaches shadow tree and returns shadow root reference
- // https://developer.mozilla.org/en-US/docs/Web/API/Element/attachShadow
- const shadow = this.attachShadow({ mode: 'open' });
-
- // creating a container for the editable-list component
- const editableListContainer = document.createElement('div');
-
- // get attribute values from getters
- const title = this.title;
- const addItemText = this.addItemText;
- const listItems = this.items;
-
- // adding a class to our container for the sake of clarity
- editableListContainer.classList.add('editable-list');
-
- // creating the inner HTML of the editable list element
- editableListContainer.innerHTML = `
-
-
${title}
-
- ${listItems.map(item => `
- - ${item}
-
-
- `).join('')}
-
-
-
-
-
-
- `;
-
- // binding methods
- this.addListItem = this.addListItem.bind(this);
- this.handleRemoveItemListeners = this.handleRemoveItemListeners.bind(this);
- this.removeListItem = this.removeListItem.bind(this);
-
- // appending the container to the shadow DOM
- shadow.appendChild(editableListContainer);
- }
-
- // add items to the list
- addListItem(e) {
- const textInput = this.shadowRoot.querySelector('.add-new-list-item-input');
+ class EditableList extends HTMLElement {
+ constructor() {
+ // establish prototype chain
+ super();
+
+ // attaches shadow tree and returns shadow root reference
+ // https://developer.mozilla.org/en-US/docs/Web/API/Element/attachShadow
+ const shadow = this.attachShadow({ mode: 'open' });
+
+ // creating a container for the editable-list component
+ const editableListContainer = document.createElement('div');
+
+ // get attribute values from getters
+ const title = this.title;
+ const addItemText = this.addItemText;
+ const listItems = this.items;
+
+ // adding a class to our container for the sake of clarity
+ editableListContainer.classList.add('editable-list');
+
+ // creating the inner HTML of the editable list element
+ editableListContainer.innerHTML = `
+
+ ${title}
+
+ ${listItems.map(item => `
+ - ${item}
+
+
+ `).join('')}
+
+
+
+
+
+
+ `;
+
+ // binding methods
+ this.addListItem = this.addListItem.bind(this);
+ this.handleRemoveItemListeners = this.handleRemoveItemListeners.bind(this);
+ this.removeListItem = this.removeListItem.bind(this);
+
+ // appending the container to the shadow DOM
+ shadow.appendChild(editableListContainer);
+ }
- if (textInput.value) {
- const li = document.createElement('li');
- const button = document.createElement('button');
- const childrenLength = this.itemList.children.length;
+ // add items to the list
+ addListItem(e) {
+ const textInput = this.shadowRoot.querySelector('.add-new-list-item-input');
- li.textContent = textInput.value;
- button.classList.add('editable-list-remove-item', 'icon');
- button.textContent = '\u2796';
+ if (textInput.value) {
+ const li = document.createElement('li');
+ const button = document.createElement('button');
+ const childrenLength = this.itemList.children.length;
- this.itemList.appendChild(li);
- this.itemList.children[childrenLength].appendChild(button);
+ li.textContent = textInput.value;
+ button.classList.add('editable-list-remove-item', 'icon');
+ button.innerHTML = '⊖';
- this.handleRemoveItemListeners([...this.itemList.children]);
+ this.itemList.appendChild(li);
+ this.itemList.children[childrenLength].appendChild(button);
- textInput.value = '';
- }
- }
+ this.handleRemoveItemListeners([...this.itemList.children]);
- // fires after the element has been attached to the DOM
- connectedCallback() {
- const removeElementButtons = [...this.shadowRoot.querySelectorAll('.editable-list-remove-item')];
- const addElementButton = this.shadowRoot.querySelector('.editable-list-add-item');
+ textInput.value = '';
+ }
+ }
- this.itemList = this.shadowRoot.querySelector('.item-list');
+ // fires after the element has been attached to the DOM
+ connectedCallback() {
+ const removeElementButtons = [...this.shadowRoot.querySelectorAll('.editable-list-remove-item')];
+ const addElementButton = this.shadowRoot.querySelector('.editable-list-add-item');
- this.handleRemoveItemListeners(removeElementButtons);
- addElementButton.addEventListener('click', this.addListItem, false);
- }
+ this.itemList = this.shadowRoot.querySelector('.item-list');
- // gathering data from element attributes
- get title() {
- return this.getAttribute('title') || '';
- }
+ this.handleRemoveItemListeners(removeElementButtons);
+ addElementButton.addEventListener('click', this.addListItem, false);
+ }
- get items() {
- const items = [];
+ // gathering data from element attributes
+ get title() {
+ return this.getAttribute('title') || '';
+ }
- [...this.attributes].forEach(attr => {
- if (attr.name.includes('list-item')) {
- items.push(attr.value);
- }
- });
+ get items() {
+ const items = [];
- return items;
+ [...this.attributes].forEach(attr => {
+ if (attr.name.includes('list-item')) {
+ items.push(attr.value);
}
+ });
- get addItemText() {
- return this.getAttribute('add-item-text') || '';
- }
+ return items;
+ }
- handleRemoveItemListeners(arrayOfElements) {
- arrayOfElements.forEach(element => {
- element.addEventListener('click', this.removeListItem, false)
- });
- }
+ get addItemText() {
+ return this.getAttribute('add-item-text') || '';
+ }
- removeListItem(e) {
- e.target.parentNode.remove();
- }
+ handleRemoveItemListeners(arrayOfElements) {
+ arrayOfElements.forEach(element => {
+ element.addEventListener('click', this.removeListItem, false);
+ });
+ }
+
+ removeListItem(e) {
+ e.target.parentNode.remove();
}
+ }
- // let the browser know about the custom element
- customElements.define('editable-list', EditableList);
+ // let the browser know about the custom element
+ customElements.define('editable-list', EditableList);
})();