fluxtuate
Version:
a javascript ES7 library for handling complex data transactions
185 lines (151 loc) • 7.22 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = undefined;
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _retainEventDispatcher = require("../event-dispatcher/retain-event-dispatcher");
var _retainEventDispatcher2 = _interopRequireDefault(_retainEventDispatcher);
var _internals = require("./_internals");
var _internals2 = require("../event-dispatcher/_internals");
var _dateMethods = require("./date-methods");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
var innerDate = Symbol("fluxtuateObservableDate_innerDate");
var sendUpdate = Symbol("fluxtuateObservableDate_sendUpdate");
var dateName = Symbol("fluxtuateObservableDate_dateName");
var dateParent = Symbol("fluxtuateObservableDate_dateParent");
var updateTimeout = Symbol("fluxtuateObservableDate_updateTimeout");
var listeners = Symbol("fluxtuateObservableDate_listners");
var oDateCache = [];
var ObservableDate = function (_RetainEventDispatche) {
_inherits(ObservableDate, _RetainEventDispatche);
_createClass(ObservableDate, null, [{
key: "getInstance",
value: function getInstance(wrappedDate, name, parentName) {
var oDate = void 0;
if (oDateCache.length > 0) {
oDate = oDateCache.shift();
oDate[dateParent] = parentName;
oDate[dateName] = name;
oDate[innerDate] = wrappedDate;
} else {
oDate = new ObservableDate(wrappedDate, name, parentName);
}
return oDate;
}
}]);
function ObservableDate(wrappedDate, name, parentName) {
_classCallCheck(this, ObservableDate);
var _this = _possibleConstructorReturn(this, (ObservableDate.__proto__ || Object.getPrototypeOf(ObservableDate)).call(this));
_this[_internals.dataType] = "date";
_this[dateParent] = parentName;
_this[dateName] = name;
_this[innerDate] = wrappedDate;
_this[listeners] = [];
_this[sendUpdate] = function (elementR) {
if (_this[updateTimeout]) {
clearTimeout(_this[updateTimeout]);
_this[updateTimeout] = null;
}
_this[updateTimeout] = setTimeout(function () {
var payload = {
data: _this.modelData, name: _this.modelName
};
payload[_internals.elementResponsible] = elementR;
_this.dispatch("update", payload);
}, 100);
};
_dateMethods.dateSetterMethods.forEach(function (methodName) {
Object.defineProperty(_this, methodName, {
value: function value(elementR) {
for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
args[_key - 1] = arguments[_key];
}
_this[innerDate] = new Date(_this[innerDate].getTime());
var returnValue = _this[innerDate][methodName].apply(_this[innerDate], args);
_this[sendUpdate](elementR);
return returnValue;
},
configurable: false
});
});
_dateMethods.dateGetterMethods.forEach(function (methodName) {
Object.defineProperty(_this, methodName, {
value: function value() {
for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
args[_key2] = arguments[_key2];
}
var dateData = _this.modelData;
return dateData[methodName].apply(dateData, args);
},
configurable: false
});
});
return _this;
}
_createClass(ObservableDate, [{
key: "onUpdate",
value: function onUpdate(callback) {
var listener = this.addListener("update", function (ev, payload) {
callback(payload);
});
this[listeners].push(listener);
return listener;
}
}, {
key: "clear",
value: function clear(elementR) {
this[innerDate] = new Date();
this[sendUpdate](elementR);
}
}, {
key: "setValue",
value: function setValue(date, elementR) {
this[innerDate] = new Date(date.getTime());
this[sendUpdate](elementR);
}
}, {
key: "compare",
value: function compare(secondDate) {
return this[innerDate].getTime() === secondDate.getTime();
}
}, {
key: "destroy",
value: function destroy() {
this[listeners].forEach(function (listener) {
listener.remove();
});
this.clear(this);
this[listeners] = [];
this[dateParent] = "";
this[dateName] = "";
this[innerDate] = new Date();
this[_internals2.destroy]();
if (this[updateTimeout]) {
clearTimeout(this[updateTimeout]);
this[updateTimeout] = null;
}
oDateCache.push(this);
}
}, {
key: "modelName",
get: function get() {
return this[dateName];
}
}, {
key: "modelData",
get: function get() {
return new Date(this[innerDate].getTime());
}
}, {
key: "cleanData",
get: function get() {
return this.modelData;
}
}]);
return ObservableDate;
}(_retainEventDispatcher2.default);
exports.default = ObservableDate;