First commit waiting for Budget Alert
This commit is contained in:
95
sophal/js/lib/utils.js
Normal file
95
sophal/js/lib/utils.js
Normal file
@ -0,0 +1,95 @@
|
||||
/*
|
||||
* Axelor Business Solutions
|
||||
*
|
||||
* Copyright (C) 2005-2019 Axelor (<http://axelor.com>).
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License, version 3,
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
(function() {
|
||||
|
||||
"use strict";
|
||||
|
||||
// integrate underscore.string with underscore
|
||||
_.mixin(_.str.exports());
|
||||
|
||||
var util = this.util ? this.util : this.util = {};
|
||||
|
||||
/**
|
||||
* Based on the `util.inherits` of `Node.js` with some additional features
|
||||
*
|
||||
* 1. The super prototype is attached to the base prototype as `super_`.
|
||||
* 2. The base prototype can be provided as third argument.
|
||||
*
|
||||
* Example:
|
||||
*
|
||||
* function Hello(message) {
|
||||
* this.message = message;
|
||||
* }
|
||||
*
|
||||
* Hello.prototype.say = function(what) {
|
||||
* console.log(what || this.message);
|
||||
* }
|
||||
*
|
||||
* function HelloWorld(message) {
|
||||
* this.super_.constructor.apply(this, arguments);
|
||||
* }
|
||||
*
|
||||
* util.inherits(HelloWorld, Hello, {
|
||||
*
|
||||
* say: function(what) {
|
||||
* // do something
|
||||
* this.super_.say.apply(this, arguments);
|
||||
* }
|
||||
* });
|
||||
*
|
||||
* @param ctor the base constructor
|
||||
* @param superCtor the super constructor
|
||||
* @param proto the prototype of the base constructor (optional)
|
||||
*
|
||||
* @returns the base constructor
|
||||
*/
|
||||
util.inherits = function(ctor, superCtor, /* optional */ proto) {
|
||||
|
||||
var props = {
|
||||
constructor: {
|
||||
value: ctor,
|
||||
enumerable: false,
|
||||
writable: true,
|
||||
configurable: true
|
||||
}
|
||||
};
|
||||
|
||||
Object.getOwnPropertyNames(proto||{}).forEach(function(name) {
|
||||
props[name] = Object.getOwnPropertyDescriptor(proto, name);
|
||||
});
|
||||
|
||||
ctor.super_ = superCtor;
|
||||
ctor.prototype = Object.create(superCtor.prototype, props);
|
||||
ctor.prototype.super_ = superCtor.prototype;
|
||||
|
||||
return ctor;
|
||||
};
|
||||
|
||||
/**
|
||||
* Shortcut to `util.inherits`.
|
||||
*
|
||||
* @param superCtor the super constructor
|
||||
* @param proto the prototype for this contructor
|
||||
*
|
||||
* @returns this constructor itself
|
||||
*/
|
||||
Function.prototype.inherits = function(superCtor, /* optional */ proto) {
|
||||
return util.inherits(this, superCtor, proto);
|
||||
};
|
||||
|
||||
}).call(this);
|
||||
Reference in New Issue
Block a user