blob: 10709b8801b0dd76ca8657d43778eacd8c14972b [file] [log] [blame]
/**
* API/ skeleton/ base class for an item contained within a container.
* Here we see which functions container supports for containerItems.
*
* @author Leo Repp
*/
//"use strict";
define({
/**
* API for an item contained within a container
*/
create : function () {
return Object.create(this); //._init();
},
/**
* Upgrade this object to another object,
* while private data stays intact.
*
* @param {Object} An object with properties.
*/
upgradeTo : function (props) {
for (let prop in props) {
this[prop] = props[prop];
};
return this;
},
/**
* Check or set if the item is active
*
* @param {boolean|null} State of activity
*/
active : function (bool) {
const cl = this.element().classList;
if (bool === undefined) return cl.contains("active");
else if (bool) cl.add("active");
else cl.remove("active"); //allows for setting it to inactive if not (equal to undefined or truthy)
},
/**
* Get/create the document element of the container item. Can be overwritten. Standard class: li
*/
element : function () {
// already defined
if (this._el !== undefined) return this._el;
// Create list item
const li = document.createElement("li");
// Connect action
if (this["onclick"] !== undefined) {
li["onclick"] = this.onclick.bind(this);
};
return this._el = li;
},
/**
* Expected to be overwritten
* @returns whether the item is currently an option to be selected, or if it should just be skipped
*/
isSelectable : function () {
return true;
},
/**
* API skeleton for reading letters. Expected to be overwritten.
* @param {String} letter The letter to be read
*/
add : function (letter) {},
/**
* API skeleton for clearing whole contents. Expected to be overwritten.
*/
clear : function () {},
/**
* API skeleton method for execution. Expected to be overwritten.
* @param {Event} event Event passed down by menu.
*/
onclick : function (e) {},
/**
* API skeleton method for when backspace is pressed. Expected to be overwritten.
*/
chop : function () {},
/**
* API skeleton method for pressing "right". Expected to be overwritten.
* @param {Event} event Event passed down by menu.
*/
further : function (e) {},
/**
* Return menu list. This._menu gets written by the container class
*/
menu : function () {
return this._menu;
}
});