mirror of
https://github.com/koalyptus/TableFilter.git
synced 2024-06-15 20:25:07 +02:00
103 lines
2 KiB
JavaScript
103 lines
2 KiB
JavaScript
import {toCamelCase} from './string';
|
|
|
|
const NOT_IMPLEMENTED = 'Not implemented.';
|
|
|
|
/**
|
|
* Base class defining the interface of a TableFilter feature
|
|
*/
|
|
export class Feature {
|
|
/**
|
|
* Creates an instance of Feature
|
|
* @param {Object} tf TableFilter instance
|
|
* @param {Class} feature Feature class for TableFilter registration
|
|
*/
|
|
constructor(tf, cls) {
|
|
cls.meta = cls.meta || {};
|
|
|
|
/**
|
|
* TableFilter instance
|
|
* @type {TableFilter}
|
|
*/
|
|
this.tf = tf;
|
|
|
|
/**
|
|
* Feature name is the camelised class name as per TableFilter's
|
|
* convention
|
|
* @type {String}
|
|
*/
|
|
this.feature = cls.meta.altName || cls.meta.name
|
|
|| toCamelCase(cls.name);
|
|
|
|
/**
|
|
* TableFilter feature setting
|
|
* @type {Boolean}
|
|
*/
|
|
this.enabled = tf[this.feature];
|
|
|
|
/**
|
|
* TableFilter configuration
|
|
* @type {Object}
|
|
*/
|
|
this.config = tf.config();
|
|
|
|
/**
|
|
* TableFilter emitter instance
|
|
* @type {Emitter}
|
|
*/
|
|
this.emitter = tf.emitter;
|
|
|
|
/**
|
|
* Field indicating whether Feature is initialized
|
|
* @type {Boolean}
|
|
*/
|
|
this.initialized = false;
|
|
|
|
/** Subscribe to destroy event */
|
|
this.emitter.on(['destroy'], () => this.destroy());
|
|
}
|
|
|
|
/**
|
|
* Initialize the feature
|
|
*/
|
|
init() {
|
|
throw new Error(NOT_IMPLEMENTED);
|
|
}
|
|
|
|
/**
|
|
* Reset the feature after being disabled
|
|
*/
|
|
reset() {
|
|
this.enable();
|
|
this.init();
|
|
}
|
|
|
|
/**
|
|
* Destroy the feature
|
|
*/
|
|
destroy() {
|
|
throw new Error(NOT_IMPLEMENTED);
|
|
}
|
|
|
|
/**
|
|
* Enable the feature
|
|
*/
|
|
enable() {
|
|
this.enabled = true;
|
|
}
|
|
|
|
/**
|
|
* Disable the feature
|
|
*/
|
|
disable() {
|
|
this.enabled = false;
|
|
}
|
|
|
|
/**
|
|
* Indicate whether the feature is enabled or not
|
|
* @returns {Boolean}
|
|
*/
|
|
isEnabled() {
|
|
return this.enabled === true;
|
|
}
|
|
}
|