UNPKG

fluxtuate

Version:

a javascript ES7 library for handling complex data transactions

185 lines (151 loc) 7.22 kB
"use strict"; 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;