loader/src/js/core/Action.js

158 lines
4.0 KiB
JavaScript

/**
* Class for managing actions based on element data attributes.
*/
export class Action {
#element;
#format;
#translations;
#showBookName;
#showReference;
#showLocalReference;
#showTranslation;
#showAbbreviation;
#showLanguage;
#showLanguageCode;
#showBibleLink;
#bibleUrl;
/**
* Initializes the Actions object with a DOM element and its data attributes.
*
* @param {HTMLElement} element - The DOM element containing data attributes.
*/
constructor(element) {
if (!(element instanceof HTMLElement)) {
throw new Error("triggerElement must be an instance of HTMLElement.");
}
this.#element = element;
this.#format = (element.dataset.format || 'inline').toLowerCase();
this.#translations = (element.dataset.translation || 'kjv').toLowerCase().split(';').map(translation => translation.trim());
this.#showBookName = element.dataset.showBookName ? parseInt(element.dataset.showBookName, 10) : 0;
this.#showReference = element.dataset.showReference ? parseInt(element.dataset.showReference, 10) : 1;
this.#showLocalReference = element.dataset.showLocalReference ? parseInt(element.dataset.showLocalReference, 10) : 0;
this.#showTranslation = element.dataset.showTranslation ? parseInt(element.dataset.showTranslation, 10) : 0;
this.#showAbbreviation = element.dataset.showAbbreviation ? parseInt(element.dataset.showAbbreviation, 10) : 0;
this.#showLanguage = element.dataset.showLanguage ? parseInt(element.dataset.showLanguage, 10) : 0;
this.#showLanguageCode = element.dataset.showLanguageCode ? parseInt(element.dataset.showLanguageCode, 10) : 0;
this.#showBibleLink = element.dataset.showBibleLink ? parseInt(element.dataset.showBibleLink, 10) : 0;
this.#bibleUrl = element.dataset.bibleUrl ? element.dataset.bibleUrl : 'https://getBible.net/';
if (this.#showLocalReference){
this.#showReference = 0;
}
if (this.#bibleUrl !== 'https://getBible.net/'){
this.#showBibleLink = 1;
}
}
/**
* Retrieves the bible url.
*
* @returns {string} The bible url as strings.
*/
get bibleUrl() {
return this.#bibleUrl;
}
/**
* Retrieves the show bible link flag.
*
* @returns {number} The show bible link flag (0 or 1).
*/
get bibleLink() {
return this.#showBibleLink;
}
/**
* Retrieves the translations.
*
* @returns {Array<string>} An array of translation strings.
*/
get translations() {
return this.#translations;
}
/**
* Retrieves the show book name flag.
*
* @returns {number} The show book name flag (0 or 1).
*/
get bookName() {
return this.#showBookName;
}
/**
* Retrieves the show reference flag.
*
* @returns {number} The show reference flag (0 or 1).
*/
get reference() {
return this.#showReference;
}
/**
* Retrieves the show local reference flag.
*
* @returns {number} The show reference flag (0 or 1).
*/
get localReference() {
return this.#showLocalReference;
}
/**
* Retrieves the show translation flag.
*
* @returns {number} The show translation flag (0 or 1).
*/
get translation() {
return this.#showTranslation;
}
/**
* Retrieves the show abbreviation flag.
*
* @returns {number} The show abbreviation flag (0 or 1).
*/
get abbreviation() {
return this.#showAbbreviation;
}
/**
* Retrieves the show language flag.
*
* @returns {number} The show language flag (0 or 1).
*/
get language() {
return this.#showLanguage;
}
/**
* Retrieves the show language code flog.
*
* @returns {number} The show language flag (0 or 1).
*/
get languageCode() {
return this.#showLanguageCode;
}
/**
* Retrieves the element format.
*
* @returns {string} The element format.
*/
get format() {
return this.#format;
}
/**
* Retrieves the DOM element.
*
* @returns {HTMLElement} The DOM element associated with this object.
*/
get element() {
return this.#element;
}
}