216 lines
5.4 KiB
JavaScript
216 lines
5.4 KiB
JavaScript
"use strict";
|
|
|
|
// Class definition
|
|
var KTToggle = function(element, options) {
|
|
////////////////////////////
|
|
// ** Private variables ** //
|
|
////////////////////////////
|
|
var the = this;
|
|
|
|
if (!element) {
|
|
return;
|
|
}
|
|
|
|
// Default Options
|
|
var defaultOptions = {
|
|
saveState: true
|
|
};
|
|
|
|
////////////////////////////
|
|
// ** Private methods ** //
|
|
////////////////////////////
|
|
|
|
var _construct = function() {
|
|
if ( KTUtil.data(element).has('toggle') === true ) {
|
|
the = KTUtil.data(element).get('toggle');
|
|
} else {
|
|
_init();
|
|
}
|
|
}
|
|
|
|
var _init = function() {
|
|
// Variables
|
|
the.options = KTUtil.deepExtend({}, defaultOptions, options);
|
|
the.uid = KTUtil.getUniqueId('toggle');
|
|
|
|
// Elements
|
|
the.element = element;
|
|
|
|
the.target = document.querySelector(the.element.getAttribute('data-kt-toggle-target')) ? document.querySelector(the.element.getAttribute('data-kt-toggle-target')) : the.element;
|
|
the.state = the.element.hasAttribute('data-kt-toggle-state') ? the.element.getAttribute('data-kt-toggle-state') : '';
|
|
the.mode = the.element.hasAttribute('data-kt-toggle-mode') ? the.element.getAttribute('data-kt-toggle-mode') : '';
|
|
the.attribute = 'data-kt-' + the.element.getAttribute('data-kt-toggle-name');
|
|
|
|
// Event Handlers
|
|
_handlers();
|
|
|
|
// Bind Instance
|
|
KTUtil.data(the.element).set('toggle', the);
|
|
}
|
|
|
|
var _handlers = function() {
|
|
KTUtil.addEvent(the.element, 'click', function(e) {
|
|
e.preventDefault();
|
|
|
|
if ( the.mode !== '' ) {
|
|
if ( the.mode === 'off' && _isEnabled() === false ) {
|
|
_toggle();
|
|
} else if ( the.mode === 'on' && _isEnabled() === true ) {
|
|
_toggle();
|
|
}
|
|
} else {
|
|
_toggle();
|
|
}
|
|
});
|
|
}
|
|
|
|
// Event handlers
|
|
var _toggle = function() {
|
|
// Trigger "after.toggle" event
|
|
KTEventHandler.trigger(the.element, 'kt.toggle.change', the);
|
|
|
|
if ( _isEnabled() ) {
|
|
_disable();
|
|
} else {
|
|
_enable();
|
|
}
|
|
|
|
// Trigger "before.toggle" event
|
|
KTEventHandler.trigger(the.element, 'kt.toggle.changed', the);
|
|
|
|
return the;
|
|
}
|
|
|
|
var _enable = function() {
|
|
if ( _isEnabled() === true ) {
|
|
return;
|
|
}
|
|
|
|
KTEventHandler.trigger(the.element, 'kt.toggle.enable', the);
|
|
|
|
the.target.setAttribute(the.attribute, 'on');
|
|
|
|
if (the.state.length > 0) {
|
|
the.element.classList.add(the.state);
|
|
}
|
|
|
|
if ( typeof KTCookie !== 'undefined' && the.options.saveState === true ) {
|
|
KTCookie.set(the.attribute, 'on');
|
|
}
|
|
|
|
KTEventHandler.trigger(the.element, 'kt.toggle.enabled', the);
|
|
|
|
return the;
|
|
}
|
|
|
|
var _disable = function() {
|
|
if ( _isEnabled() === false ) {
|
|
return;
|
|
}
|
|
|
|
KTEventHandler.trigger(the.element, 'kt.toggle.disable', the);
|
|
|
|
the.target.removeAttribute(the.attribute);
|
|
|
|
if (the.state.length > 0) {
|
|
the.element.classList.remove(the.state);
|
|
}
|
|
|
|
if ( typeof KTCookie !== 'undefined' && the.options.saveState === true ) {
|
|
KTCookie.remove(the.attribute);
|
|
}
|
|
|
|
KTEventHandler.trigger(the.element, 'kt.toggle.disabled', the);
|
|
|
|
return the;
|
|
}
|
|
|
|
var _isEnabled = function() {
|
|
return (String(the.target.getAttribute(the.attribute)).toLowerCase() === 'on');
|
|
}
|
|
|
|
var _destroy = function() {
|
|
KTUtil.data(the.element).remove('toggle');
|
|
}
|
|
|
|
// Construct class
|
|
_construct();
|
|
|
|
///////////////////////
|
|
// ** Public API ** //
|
|
///////////////////////
|
|
|
|
// Plugin API
|
|
the.toggle = function() {
|
|
return _toggle();
|
|
}
|
|
|
|
the.enable = function() {
|
|
return _enable();
|
|
}
|
|
|
|
the.disable = function() {
|
|
return _disable();
|
|
}
|
|
|
|
the.isEnabled = function() {
|
|
return _isEnabled();
|
|
}
|
|
|
|
the.goElement = function() {
|
|
return the.element;
|
|
}
|
|
|
|
the.destroy = function() {
|
|
return _destroy();
|
|
}
|
|
|
|
// Event API
|
|
the.on = function(name, handler) {
|
|
return KTEventHandler.on(the.element, name, handler);
|
|
}
|
|
|
|
the.one = function(name, handler) {
|
|
return KTEventHandler.one(the.element, name, handler);
|
|
}
|
|
|
|
the.off = function(name, handlerId) {
|
|
return KTEventHandler.off(the.element, name, handlerId);
|
|
}
|
|
|
|
the.trigger = function(name, event) {
|
|
return KTEventHandler.trigger(the.element, name, event, the, event);
|
|
}
|
|
};
|
|
|
|
// Static methods
|
|
KTToggle.getInstance = function(element) {
|
|
if ( element !== null && KTUtil.data(element).has('toggle') ) {
|
|
return KTUtil.data(element).get('toggle');
|
|
} else {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
// Create instances
|
|
KTToggle.createInstances = function(selector = '[data-kt-toggle]') {
|
|
// Get instances
|
|
var elements = document.body.querySelectorAll(selector);
|
|
|
|
if ( elements && elements.length > 0 ) {
|
|
for (var i = 0, len = elements.length; i < len; i++) {
|
|
// Initialize instances
|
|
new KTToggle(elements[i]);
|
|
}
|
|
}
|
|
}
|
|
|
|
// Global initialization
|
|
KTToggle.init = function() {
|
|
KTToggle.createInstances();
|
|
};
|
|
|
|
// Webpack support
|
|
if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {
|
|
module.exports = KTToggle;
|
|
} |