@icap-ethiopia/esm-ethiohri-app
Version:
A microfrontend ethiohri OpenMRS
174 lines (173 loc) • 4.85 kB
JavaScript
/** Abstract base class for collection plugins v1.0.1.
Written by Keith Wood (kbwood{at}iinet.com.au) December 2013.
Licensed under the MIT (https://github.com/jquery/jquery/blob/master/MIT-LICENSE.txt) license. */
(function () {
var j = false;
window.JQClass = function () {};
JQClass.classes = {};
JQClass.extend = function extender(f) {
var g = this.prototype;
j = true;
var h = new this();
j = false;
for (var i in f) {
h[i] =
typeof f[i] == "function" && typeof g[i] == "function"
? (function (d, e) {
return function () {
var b = this._super;
this._super = function (a) {
return g[d].apply(this, a || []);
};
var c = e.apply(this, arguments);
this._super = b;
return c;
};
})(i, f[i])
: f[i];
}
function JQClass() {
if (!j && this._init) {
this._init.apply(this, arguments);
}
}
JQClass.prototype = h;
JQClass.prototype.constructor = JQClass;
JQClass.extend = extender;
return JQClass;
};
})();
(function ($) {
JQClass.classes.JQPlugin = JQClass.extend({
name: "plugin",
defaultOptions: {},
regionalOptions: {},
_getters: [],
_getMarker: function () {
return "is-" + this.name;
},
_init: function () {
$.extend(
this.defaultOptions,
(this.regionalOptions && this.regionalOptions[""]) || {}
);
var c = camelCase(this.name);
$[c] = this;
$.fn[c] = function (a) {
var b = Array.prototype.slice.call(arguments, 1);
if ($[c]._isNotChained(a, b)) {
return $[c][a].apply($[c], [this[0]].concat(b));
}
return this.each(function () {
if (typeof a === "string") {
if (a[0] === "_" || !$[c][a]) {
throw "Unknown method: " + a;
}
$[c][a].apply($[c], [this].concat(b));
} else {
$[c]._attach(this, a);
}
});
};
},
setDefaults: function (a) {
$.extend(this.defaultOptions, a || {});
},
_isNotChained: function (a, b) {
if (
a === "option" &&
(b.length === 0 || (b.length === 1 && typeof b[0] === "string"))
) {
return true;
}
return $.inArray(a, this._getters) > -1;
},
_attach: function (a, b) {
a = $(a);
if (a.hasClass(this._getMarker())) {
return;
}
a.addClass(this._getMarker());
b = $.extend({}, this.defaultOptions, this._getMetadata(a), b || {});
var c = $.extend(
{ name: this.name, elem: a, options: b },
this._instSettings(a, b)
);
a.data(this.name, c);
this._postAttach(a, c);
this.option(a, b);
},
_instSettings: function (a, b) {
return {};
},
_postAttach: function (a, b) {},
_getMetadata: function (d) {
try {
var f = d.data(this.name.toLowerCase()) || "";
f = f.replace(/'/g, '"');
f = f.replace(/([a-zA-Z0-9]+):/g, function (a, b, i) {
var c = f.substring(0, i).match(/"/g);
return !c || c.length % 2 === 0 ? '"' + b + '":' : b + ":";
});
f = $.parseJSON("{" + f + "}");
for (var g in f) {
var h = f[g];
if (typeof h === "string" && h.match(/^new Date\((.*)\)$/)) {
f[g] = eval(h);
}
}
return f;
} catch (e) {
return {};
}
},
_getInst: function (a) {
return $(a).data(this.name) || {};
},
option: function (a, b, c) {
a = $(a);
var d = a.data(this.name);
if (!b || (typeof b === "string" && c == null)) {
var e = (d || {}).options;
return e && b ? e[b] : e;
}
if (!a.hasClass(this._getMarker())) {
return;
}
var e = b || {};
if (typeof b === "string") {
e = {};
e[b] = c;
}
this._optionsChanged(a, d, e);
$.extend(d.options, e);
},
_optionsChanged: function (a, b, c) {},
destroy: function (a) {
a = $(a);
if (!a.hasClass(this._getMarker())) {
return;
}
this._preDestroy(a, this._getInst(a));
a.removeData(this.name).removeClass(this._getMarker());
},
_preDestroy: function (a, b) {},
});
function camelCase(c) {
return c.replace(/-([a-z])/g, function (a, b) {
return b.toUpperCase();
});
}
$.JQPlugin = {
createPlugin: function (a, b) {
if (typeof a === "object") {
b = a;
a = "JQPlugin";
}
a = camelCase(a);
var c = camelCase(b.name);
JQClass.classes[c] = JQClass.classes[a].extend(b);
new JQClass.classes[c]();
},
};
})(jQuery);