(function() {
/**
* @typedef {Help4.service.Service.Params} Help4.service.InputFieldService.Params
*/
/**
* Contains helper methods for input fields
* @augments Help4.service.Service
*/
Help4.service.InputFieldService = class extends Help4.service.Service {
/**
* @override
* @constructor
* @param {Help4.service.InputFieldService.Params} params
*/
constructor(params) {
super(params);
}
/**
* @typedef {Object} Help4.service.InputFieldService.Types
* @property {'input'} input
* @property {'textarea'} textarea
* @property {'contentEditable'} contentEditable
*/
/**
* supported input field types
* @memberof Help4.service.InputFieldService
* @type {Help4.service.InputFieldService.Types}
*/
static TYPES = {
input: 'input',
textarea: 'textarea',
contentEditable: 'contentEditable'
};
/**
* @param {HTMLElement} elem
* @returns {?string}
*/
static getType(elem) {
const {TYPES} = this;
if (elem.nodeName === 'INPUT') return TYPES.input;
if (elem.nodeName === 'TEXTAREA') return TYPES.textarea;
if (Help4.Element.isContentEditable(elem)) return TYPES.contentEditable;
// extend with more
return null;
}
/**
* @param {HTMLElement} elem
* @returns {?string}
*/
static getValue(elem) {
const {TYPES} = this;
const type = this.getType(elem);
switch (type) {
case TYPES.input:
case TYPES.textarea:
case TYPES.contentEditable:
return Help4.Element.getValue(elem);
// extend with more
default:
return null;
}
}
/**
* @param {HTMLElement} elem
* @param {string} value
* @returns {boolean}
*/
static setValue(elem, value) {
const {TYPES} = this;
switch (this.getType(elem)) {
case TYPES.input:
case TYPES.textarea:
elem.value = value;
return true;
case TYPES.contentEditable:
elem.innerText = value;
return true;
// extend with more
default:
return false;
}
}
}
})();