aboutsummaryrefslogtreecommitdiffstats
path: root/apps/user_ldap/js/wizard/wizardObject.js
blob: a90f1533a26116118a1eead846bb0f72e5fc71ff (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
/**
 * Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com>
 * This file is licensed under the Affero General Public License version 3 or later.
 * See the COPYING-README file.
 */

OCA = OCA || {};

(function() {
	var initializing = false;
	var superPattern = /xyz/.test(function() { xyz; }) ? /\b_super\b/ : /.*/;

	/**
	 * @classdesc a base class that allows inheritance
	 *
	 * @abstrcact
	 * @constructor
	 */
	var WizardObject = function(){};
	WizardObject.subClass = function(properties) {
		var _super = this.prototype;

		initializing = true;
		var proto = new this();
		initializing = false;

		for (var name in properties) {
			proto[name] =
				typeof properties[name] === "function" &&
				typeof _super[name] === 'function' &&
				superPattern.test(properties[name]) ?
					(function (name, fn) {
						return function () {
							var tmp = this._super;
							this._super = _super[name];
							var ret = fn.apply(this, arguments);
							this._super = tmp;
							return ret;
						};
					})(name, properties[name]) :
					properties[name];
		};

		function Class() {
			if(!initializing && this.init) {
				this.init.apply(this, arguments);
			}
		}

		Class.prototype = proto;
		Class.constructor = Class;
		Class.subClass = arguments.callee;
		return Class;
	};

	WizardObject.constructor = WizardObject;

	OCA.LDAP.Wizard.WizardObject = WizardObject;
})();