UNPKG

@schukai/monster

Version:

Monster is a simple library for creating fast, robust and lightweight websites.

100 lines (82 loc) 2.67 kB
/** * Copyright © schukai GmbH and all contributing authors, {{copyRightYear}}. All rights reserved. * Node module: @schukai/monster * * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3). * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html * * For those who do not wish to adhere to the AGPLv3, a commercial license is available. * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms. * For more information about purchasing a commercial license, please contact schukai GmbH. * * SPDX-License-Identifier: AGPL-3.0 */ import { validateInstance, validateString } from "../types/validate.mjs"; import { ATTRIBUTE_ERRORMESSAGE } from "./constants.mjs"; export { addErrorAttribute, removeErrorAttribute }; /** * This method can be used to add an error message to an element. * * @license AGPLv3 * @since 3.99.0 * @copyright schukai GmbH * @param {HTMLElement} element * @param {string} message * @return {HTMLElement} */ function addErrorAttribute(element, message) { validateInstance(element, HTMLElement); if (message instanceof Error) { message = message.message; } if (typeof message !== "string") { if (typeof message === "object" && message !== null) { if (typeof message.toString === "function") { message = message.toString(); } else { message = JSON.stringify(message); } } else { message = String(message); } } validateString(message); if (!element.hasAttribute(ATTRIBUTE_ERRORMESSAGE)) { element.setAttribute(ATTRIBUTE_ERRORMESSAGE, message); return element; } const current = element.getAttribute(ATTRIBUTE_ERRORMESSAGE); const list = current.split("::"); for (let i = 0; i < list.length; i++) { if (list[i] === message) { return element; } } list.push(message); element.setAttribute(ATTRIBUTE_ERRORMESSAGE, list.join("::")); return element; } /** * This method can be used to remove an error message from an element. * @license AGPLv3 * @since 3.99.0 * @param element * @param message * @param {HTMLElement} element * @param {string} message * @return {HTMLElement} */ function removeErrorAttribute(element, message) { validateInstance(element, HTMLElement); validateString(message); if (!element.hasAttribute(ATTRIBUTE_ERRORMESSAGE)) { return element; } const current = element.getAttribute(ATTRIBUTE_ERRORMESSAGE); const list = current.split("::"); const newList = list.filter(function (token) { return token !== message; }); element.setAttribute(ATTRIBUTE_ERRORMESSAGE, newList.join("::")); return element; }