react-application-core
Version:
A react-based application core for the business applications.
588 lines • 20.3 kB
JavaScript
;
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var __spreadArrays = (this && this.__spreadArrays) || function () {
for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
for (var r = Array(s), k = 0, i = 0; i < il; i++)
for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
r[k] = a[j];
return r;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.DomAccessor = void 0;
var R = require("ramda");
var $ = require("jquery");
var inversify_1 = require("inversify");
require("jquery-ui/ui/position");
var util_1 = require("../../util");
var definition_1 = require("../../definition");
var di_1 = require("../../di");
var definitions_interface_1 = require("../../definitions.interface");
var DomAccessor = /** @class */ (function () {
function DomAccessor() {
}
Object.defineProperty(DomAccessor.prototype, "documentBody", {
/**
* @stable [24.01.2020]
* @returns {Element}
*/
get: function () {
return this.environment.document.body;
},
enumerable: false,
configurable: true
});
Object.defineProperty(DomAccessor.prototype, "rootElement", {
/**
* @stable [11.05.2020]
* @returns {Element}
*/
get: function () {
return this.document.getElementById(this.bootstrapSettings.rootId);
},
enumerable: false,
configurable: true
});
/**
* @stable [24.01.2020]
* @param {IDomPositionConfigEntity} cfg
*/
DomAccessor.prototype.setPosition = function (cfg) {
var cfg0 = util_1.FilterUtils.defValuesFilter(__assign(__assign(__assign(__assign({}, definition_1.DEFAULT_DOM_POSITION_CONFIG_ENTITY), cfg), { event: definitions_interface_1.UNDEF, element: definitions_interface_1.UNDEF }), util_1.ConditionUtils.ifNotNilThanValue(cfg.event, function (event) { return ({ of: util_1.CalcUtils.calc(event) }); })));
var el = this.asJqEl(cfg.element);
el.position(cfg0);
};
/**
* @stable [22.11.2020]
* @param cfg
*/
DomAccessor.prototype.fireEvent = function (cfg) {
var eventName = cfg.eventName;
this.dispatchEvent(__assign(__assign({}, cfg), { event: new Event(eventName) }));
};
/**
* @stable [22.11.2020]
* @param cfg
*/
DomAccessor.prototype.dispatchEvent = function (cfg) {
var event = cfg.event, _a = cfg.element, element = _a === void 0 ? this.window : _a;
element.dispatchEvent(event);
};
/**
* @stable [13.12.2020]
* @param cfg
*/
DomAccessor.prototype.downloadFile = function (cfg) {
return util_1.DomUtils.downloadFile(cfg);
};
/**
* @stable [13.12.2020]
* @param cfg
*/
DomAccessor.prototype.downloadFileByBlob = function (cfg) {
util_1.DomUtils.downloadFileByBlob(cfg);
};
/**
* @stable [11.01.2020]
* @param {Element} source
* @returns {number}
*/
DomAccessor.prototype.getWidth = function (source) {
return util_1.getWidth(source);
};
/**
* @stable [09.01.2020]
* @param {IBaseEvent} event
*/
DomAccessor.prototype.cancelEvent = function (event) {
util_1.cancelEvent(event);
};
/**
* @stable [08.01.2020]
* @param {Partial<HTMLScriptElement>} cfg
* @returns {Promise<HTMLScriptElement>}
*/
DomAccessor.prototype.createScript = function (cfg) {
return util_1.createScript(cfg);
};
/**
* @stable [13.12.2020]
* @param transform
* @param transformOrigin
*/
DomAccessor.prototype.getTransformStyles = function (transform, transformOrigin) {
if (transformOrigin === void 0) { transformOrigin = '0 0'; }
// TODO Use https://github.com/FormidableLabs/radium
return {
transformOrigin: transformOrigin,
transform: transform,
};
};
/**
* @stable [13.12.2020]
* @param scale
* @param transformOrigin
*/
DomAccessor.prototype.getTransformScaleStyles = function (scale, transformOrigin) {
if (transformOrigin === void 0) { transformOrigin = '0 0'; }
return this.getTransformStyles("scale(" + scale + ")", transformOrigin);
};
/**
* @stable [21.06.2020]
* @param {Element} source
* @param {string} property
* @returns {string}
*/
DomAccessor.prototype.getProperty = function (source, property) {
return this.asJqEl(source).css(property);
};
/**
* @stable [23.11.2019]
* @param {ICaptureEventConfigEntity} cfg
* @returns {() => void}
*/
DomAccessor.prototype.captureEvent = function (cfg) {
var autoUnsubscribing = cfg.autoUnsubscribing, callback = cfg.callback, _a = cfg.capture, capture = _a === void 0 ? false : _a, _b = cfg.condition, condition = _b === void 0 ? function () { return true; } : _b, _c = cfg.element, element = _c === void 0 ? this.window : _c, eventName = cfg.eventName;
var eventUnsubscriber;
return eventUnsubscriber = this.eventManager.subscribe(element, eventName, function (event) {
if (condition()) {
if (autoUnsubscribing) {
eventUnsubscriber();
}
callback(event);
}
}, capture);
};
/**
* @stable [24.11.2019]
* @param {ICaptureEventConfigEntity} cfg
* @returns {() => void}
*/
DomAccessor.prototype.captureEventWithinElement = function (cfg) {
var autoUnsubscribing = cfg.autoUnsubscribing, callback = cfg.callback, element = cfg.element, eventName = cfg.eventName, _a = cfg.parentElement, parentElement = _a === void 0 ? this.window : _a;
var withinMenuEl = false;
var enterUnsubscriber;
var leaveUnsubscriber;
var sideEffectsUnsubscriber = function () {
if (util_1.TypeUtils.isFn(enterUnsubscriber)) {
enterUnsubscriber();
enterUnsubscriber = null;
}
if (util_1.TypeUtils.isFn(leaveUnsubscriber)) {
leaveUnsubscriber();
leaveUnsubscriber = null;
}
};
var touchedPlatform = this.environment.touchedPlatform;
enterUnsubscriber = this.eventManager.subscribe(element, touchedPlatform ? definition_1.TouchEventsEnum.TOUCH_START : definition_1.EventsEnum.MOUSE_ENTER, function () { return withinMenuEl = true; });
leaveUnsubscriber = this.eventManager.subscribe(element, touchedPlatform ? definition_1.TouchEventsEnum.TOUCH_END : definition_1.EventsEnum.MOUSE_LEAVE, function () { return withinMenuEl = false; });
var originalUnSubscriber = this.captureEvent({
autoUnsubscribing: autoUnsubscribing,
callback: function () {
if (autoUnsubscribing) {
sideEffectsUnsubscriber();
}
callback();
},
condition: function () { return !withinMenuEl; },
element: parentElement,
eventName: eventName,
});
return function () {
sideEffectsUnsubscriber();
originalUnSubscriber();
};
};
/**
* @stable [24.01.2020]
* @param {Element} element
* @returns {boolean}
*/
DomAccessor.prototype.isElementFocused = function (element) {
return this.environment.document.activeElement === element;
};
/**
* @stable [26.10.2019]
* @param {Element} child
* @param {Element} parent
* @returns {boolean}
*/
DomAccessor.prototype.isElementVisibleWithinParent = function (child, parent) {
return util_1.isElementVisibleWithinParent(child, parent);
};
/**
* @stable [22.10.2019]
* @param {Element} target
* @param {string} classNames
* @returns {boolean}
*/
DomAccessor.prototype.hasClasses = function (target) {
var classNames = [];
for (var _i = 1; _i < arguments.length; _i++) {
classNames[_i - 1] = arguments[_i];
}
return util_1.hasClasses.apply(void 0, __spreadArrays([target], classNames));
};
/**
* @stable [16.10.2019]
* @param {string} selector
* @param {Element} parent
* @returns {Element}
*/
DomAccessor.prototype.findElement = function (selector, parent) {
return R.isNil(selector) ? null : this.findElements(selector, parent)[0];
};
/**
* @stable [08.10.2019]
* @returns {boolean}
*/
DomAccessor.prototype.isAlreadyFocused = function () {
return this.isInputElement(this.getActiveElement());
};
/**
* @stable [07.10.2019]
* @param {string} path
*/
DomAccessor.prototype.redirect = function (path) {
this.window.location.assign(path);
};
/**
* @stable [16.10.2019]
* @param {boolean} forceReload A Boolean to indicate that the page will always reload from the server.
* If false or unspecified, the browser may reload the page from its HTTP cache.
*/
DomAccessor.prototype.reload = function (forceReload) {
this.window.location.reload(forceReload);
};
/**
* @stable [01.10.2019]
* @returns {Element}
*/
DomAccessor.prototype.addRootElement = function () {
return util_1.addRootElement(this.bootstrapSettings.rootId);
};
/**
* @stable [11.05.2020]
* @param {string} clsName
*/
DomAccessor.prototype.addClassNamesToRootElement = function () {
var clsName = [];
for (var _i = 0; _i < arguments.length; _i++) {
clsName[_i] = arguments[_i];
}
util_1.addClassNames.apply(void 0, __spreadArrays([this.rootElement], clsName));
};
/**
* @stable [30.09.2019]
* @param {string} tag
* @param {Element} parent
* @returns {Element}
*/
DomAccessor.prototype.createElement = function (tag, parent) {
return util_1.createElement(tag, parent);
};
/**
* @stable [30.09.2019]
* @param {Element} child
* @param {Element} parent
* @returns {Element}
*/
DomAccessor.prototype.addChild = function (child, parent) {
return util_1.addChild(child, parent);
};
/**
* @stable [06.02.2020]
* @returns {string}
*/
DomAccessor.prototype.asImageUrl = function (url) {
return "url(" + url + ")";
};
/**
* @stable [14.04.2019]
* @param {Element} child
* @param {Element} parent
*/
DomAccessor.prototype.removeChild = function (child, parent) {
util_1.removeChild(child, parent);
};
/**
* @stable [04.04.2019]
* @param {HTMLElement} element
*/
DomAccessor.prototype.enableFullScreen = function (element) {
if (element === void 0) { element = document.body; }
util_1.openFullScreen(element);
};
/**
* @stable [04.04.2019]
* @param {HTMLElement} element
*/
DomAccessor.prototype.disableFullScreen = function (element) {
if (element === void 0) { element = document.body; }
// TODO
};
/**
* @stable [31.01.2020]
* @param {string} selector
* @param {Element} target
* @returns {boolean}
*/
DomAccessor.prototype.hasElements = function (selector, target) {
return this.findElements(selector, target).length > 0;
};
/**
* @stable [25.01.2020]
* @param {IDomParentConfigEntity} cfg
* @returns {boolean}
*/
DomAccessor.prototype.hasParent = function (cfg) {
return this.getParents(cfg).length > 0;
};
/**
* @stable [25.01.2020]
* @param {IDomParentConfigEntity} cfg
* @returns {IJQueryElement}
*/
DomAccessor.prototype.getParents = function (cfg) {
return this.asJqEl(cfg.element).parents(this.asSelector(cfg.parentClassName));
};
/**
* @stable [29.01.2020]
* @param {IDomParentConfigEntity} cfg
* @returns {TElement[]}
*/
DomAccessor.prototype.getParentsAsElements = function (cfg) {
return this.getParents(cfg).get();
};
/**
* @stable [13.01.2019]
* @param {Element} element
* @param {string} clsNames
*/
DomAccessor.prototype.addClassNames = function (element) {
var clsNames = [];
for (var _i = 1; _i < arguments.length; _i++) {
clsNames[_i - 1] = arguments[_i];
}
util_1.addClassNames.apply(void 0, __spreadArrays([element], clsNames));
};
/**
* @stable [13.01.2019]
* @param {Element} element
* @param {string} clsNames
*/
DomAccessor.prototype.removeClassNames = function (element) {
var clsNames = [];
for (var _i = 1; _i < arguments.length; _i++) {
clsNames[_i - 1] = arguments[_i];
}
util_1.removeClassNames.apply(void 0, __spreadArrays([element], clsNames));
};
/**
* @stable [11.05.2020]
* @param {string} clsNames
*/
DomAccessor.prototype.removeClassNamesFromRootElement = function () {
var clsNames = [];
for (var _i = 0; _i < arguments.length; _i++) {
clsNames[_i] = arguments[_i];
}
this.removeClassNames.apply(this, __spreadArrays([this.rootElement], clsNames));
};
/**
* @stable [18.12.2018]
* @param {Element} el
* @param {number} left
*/
DomAccessor.prototype.setScrollLeft = function (el, left) {
util_1.setScrollLeft(el, left);
};
/**
* @stable [18.12.2018]
* @param {Element} el
* @returns {number}
*/
DomAccessor.prototype.getScrollLeft = function (el) {
return util_1.getScrollLeft(el);
};
/**
* @stable [18.12.2018]
* @param {Element} el
* @returns {number}
*/
DomAccessor.prototype.getScrollTop = function (el) {
return util_1.getScrollTop(el);
};
/**
* @stable [13.12.2018]
* @param {Element} source
* @returns {number}
*/
DomAccessor.prototype.getHeight = function (source) {
return util_1.getHeight(source);
};
/**
* @stable [13.12.2018]
* @param {Element} source
* @returns {IJQueryElement}
*/
DomAccessor.prototype.asJqEl = function (source) {
return $(source);
};
/**
* @stable [01.12.2018]
* @param {Element} el
* @returns {IPresetsXYEntity}
*/
DomAccessor.prototype.getScrollInfo = function (el) {
return { x: util_1.getScrollLeft(el), y: util_1.getScrollTop(el) };
};
/**
* @stable [01.12.2018]
* @param {Element} source
* @returns {number}
*/
DomAccessor.prototype.getContentHeight = function (source) {
return util_1.getContentHeight(source);
};
/**
* @stable [08.11.2019]
* @param {IPresetsXYEntity | Element} payload
* @param {Element} parent
* @param {IScrollConfigEntity} config
*/
DomAccessor.prototype.scrollTo = function (payload, parent, config) {
if (R.isNil(payload)) {
return;
}
var xyEntity = payload;
var el = payload;
if (el instanceof Element) {
util_1.scrollIntoView(el, parent, config);
}
else if (!R.isNil(xyEntity.x) || !R.isNil(xyEntity.y)) {
util_1.scrollTo(parent, xyEntity);
}
};
/**
* @stable [01.12.2018]
* @param {Element} el
* @param {number} top
*/
DomAccessor.prototype.setScrollTop = function (el, top) {
util_1.setScrollTop(el, top);
};
/**
* @stable [09.10.2019]
* @returns {Element}
*/
DomAccessor.prototype.getActiveElement = function () {
return this.document.activeElement;
};
/**
* @stable [17.10.2019]
* @param {string} id
* @returns {Element}
*/
DomAccessor.prototype.getElement = function (id) {
return this.document.getElementById(id);
};
/**
* @stable [25.01.2020]
* @param {string} selector
* @returns {string}
*/
DomAccessor.prototype.asSelector = function (selector) {
return R.isNil(selector)
? selector
: selector.startsWith('.') ? selector : "." + selector;
};
Object.defineProperty(DomAccessor.prototype, "bootstrapSettings", {
/**
* @stable [01.10.2019]
* @returns {IBootstrapSettings}
*/
get: function () {
return this.settings.bootstrap || {};
},
enumerable: false,
configurable: true
});
Object.defineProperty(DomAccessor.prototype, "document", {
/**
* @stable [08.10.2019]
* @returns {Document}
*/
get: function () {
return this.environment.document;
},
enumerable: false,
configurable: true
});
Object.defineProperty(DomAccessor.prototype, "window", {
/**
* @stable [08.10.2019]
* @returns {Window}
*/
get: function () {
return this.environment.window;
},
enumerable: false,
configurable: true
});
/**
* @stable [31.01.2020]
* @param {string} selector
* @param {Element} target
* @returns {IJQueryElement}
*/
DomAccessor.prototype.findElements = function (selector, target) {
if (target === void 0) { target = this.documentBody; }
return this.asJqEl(target).find(this.asSelector(selector));
};
/**
* @stable [09.10.2019]
* @param {Element} element
* @returns {boolean}
*/
DomAccessor.prototype.isInputElement = function (element) {
return element instanceof HTMLInputElement
|| element instanceof HTMLTextAreaElement;
};
__decorate([
di_1.lazyInject(di_1.DI_TYPES.Environment),
__metadata("design:type", Object)
], DomAccessor.prototype, "environment", void 0);
__decorate([
di_1.lazyInject(di_1.DI_TYPES.EventManager),
__metadata("design:type", Object)
], DomAccessor.prototype, "eventManager", void 0);
__decorate([
di_1.lazyInject(di_1.DI_TYPES.Settings),
__metadata("design:type", Object)
], DomAccessor.prototype, "settings", void 0);
DomAccessor = __decorate([
inversify_1.injectable()
], DomAccessor);
return DomAccessor;
}());
exports.DomAccessor = DomAccessor;
//# sourceMappingURL=dom-accessor.service.js.map