react-application-core
Version:
A react-based application core for the business applications.
409 lines • 15.3 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.DomUtils = exports.openFullScreen = exports.setStickyElementProperties = exports.isElementVisibleWithinParent = exports.scrollTo = exports.hasClasses = exports.preventContextMenu = exports.toJqEl = exports.isDocumentHasFocus = exports.setScrollLeft = exports.setScrollTop = exports.getScrollTop = exports.getScrollLeft = exports.getContentHeight = exports.getHeight = exports.getWidth = exports.createPreloadedImg = exports.removeChild = exports.addChild = exports.addRootElement = exports.removeClassNames = exports.addClassNames = exports.createScript = exports.createElement = exports.getElementById = void 0;
var $ = require("jquery");
var R = require("ramda");
var blob_1 = require("./blob");
var type_1 = require("./type");
var nvl_1 = require("./nvl");
var filter_1 = require("./filter");
var definition_1 = require("../definition");
var cls_1 = require("./cls");
var cond_1 = require("./cond");
/**
* @stable [28.08.2019]
* @param {string} id
* @returns {TElement}
*/
exports.getElementById = function (id) {
return document.getElementById(id);
};
/**
* @stable [14.06.2018]
* @param {string} tag
* @param {Element} parent
* @returns {TElement}
*/
exports.createElement = function (tag, parent) {
if (tag === void 0) { tag = 'div'; }
if (parent === void 0) { parent = document.body; }
var el = document.createElement(tag);
exports.addChild(el, parent);
return el;
};
/**
* @stable [08.01.2020]
* @param {Partial<HTMLScriptElement>} cfg
* @returns {Promise<HTMLScriptElement>}
*/
exports.createScript = function (cfg) {
return new Promise(function (resolve) {
var el = exports.createElement('script');
el.type = 'text/javascript';
el.onload = function () { return resolve(el); };
Object.assign(el, cfg);
});
};
/**
* @stable [12.05.2020]
* @param {Element} element
* @param {string} clsName
*/
exports.addClassNames = function (element) {
var clsName = [];
for (var _i = 1; _i < arguments.length; _i++) {
clsName[_i - 1] = arguments[_i];
}
if (R.isNil(element)) {
return;
}
exports.toJqEl(element).addClass(cls_1.joinClassName.apply(void 0, clsName));
};
/**
* @stable [12.05.2020]
* @param {Element} element
* @param {string} clsName
*/
exports.removeClassNames = function (element) {
var clsName = [];
for (var _i = 1; _i < arguments.length; _i++) {
clsName[_i - 1] = arguments[_i];
}
if (R.isNil(element)) {
return;
}
exports.toJqEl(element).removeClass(cls_1.joinClassName.apply(void 0, clsName));
};
/**
* @stable [20.09.2019]
* @param {string} rootId
* @returns {Element}
*/
exports.addRootElement = function (rootId) {
var rootEl = exports.createElement();
rootEl.setAttribute('id', rootId);
exports.addClassNames(rootEl, 'rac-root');
return rootEl;
};
/**
* @stable [28.06.2018]
* @param {Element} child
* @param {Element} parent
* @returns {Element}
*/
exports.addChild = function (child, parent) {
if (parent === void 0) { parent = document.body; }
return parent.appendChild(child);
};
/**
* @stable [28.06.2018]
* @param {Element} child
* @param {Element} parent
* @returns {Element}
*/
exports.removeChild = function (child, parent) {
if (parent === void 0) { parent = document.body; }
return parent.removeChild(child);
};
/**
* @stable [14.06.2018]
* @param {string} images
*/
exports.createPreloadedImg = function () {
var images = [];
for (var _i = 0; _i < arguments.length; _i++) {
images[_i] = arguments[_i];
}
var preloadedWrapper = exports.createElement();
preloadedWrapper.style.width = '0px';
preloadedWrapper.style.height = '0px';
images.forEach(function (src) {
var el = exports.createElement('img', preloadedWrapper);
el.src = src;
el.style.height = '0px';
el.style.width = '0px';
});
};
/**
* @stable [04.10.2018]
* @param {Element} source
* @returns {number}
*/
exports.getWidth = function (source) { return $(source).width(); };
/**
* @stable [27.10.2018]
* @param {Element} source
* @returns {number}
*/
exports.getHeight = function (source) { return $(source).height(); };
/**
* @stable [27.10.2018]
* @param {Element} source
* @returns {number}
*/
exports.getContentHeight = function (source) { return $(source).children().height(); };
/**
* @stable [01.12.2018]
* @param {Element} source
* @returns {number}
*/
exports.getScrollLeft = function (source) { return $(source).scrollLeft(); };
/**
* @stable [01.12.2018]
* @param {Element} source
* @returns {number}
*/
exports.getScrollTop = function (source) { return $(source).scrollTop(); };
/**
* @stable [01.12.2018]
* @param {Element} source
* @param {number} value
* @returns {IJQueryElement}
*/
exports.setScrollTop = function (source, value) { return $(source).scrollTop(value); };
/**
* @stable [18.12.2018]
* @param {Element} source
* @param {number} value
* @returns {IJQueryElement}
*/
exports.setScrollLeft = function (source, value) { return $(source).scrollLeft(value); };
/**
* @stable [23.06.2018]
* @returns {boolean}
*/
exports.isDocumentHasFocus = function () { return type_1.isFn(document.hasFocus) && document.hasFocus(); };
/**
* @stable [13.12.2018]
* @param {Element} source
* @returns {IJQueryElement}
*/
exports.toJqEl = function (source) { return $(source); };
/**
* @stable [13.12.2020]
* @param cfg
*/
var downloadFileByUrl = function (cfg) {
var fileName = cfg.fileName, url = cfg.url;
var loader = exports.createElement('a');
try {
exports.addClassNames(loader, definition_1.ComponentClassesEnum.INVISIBLE);
loader.download = nvl_1.NvlUtils.nvl(fileName, url);
loader.href = url;
loader.click();
}
finally {
exports.removeChild(loader);
}
};
/**
* @stable [13.12.2020]
* @param cfg
*/
var downloadFile = function (cfg) { return __awaiter(void 0, void 0, void 0, function () {
var detectFileType, fileName, url, data, fileExtension;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
detectFileType = cfg.detectFileType, fileName = cfg.fileName, url = cfg.url;
return [4 /*yield*/, blob_1.BlobUtils.fromUrlToBlob(url)];
case 1:
data = _a.sent();
return [4 /*yield*/, cond_1.ConditionUtils.orNull(detectFileType, function () { return __awaiter(void 0, void 0, void 0, function () { var _a, _b; return __generator(this, function (_c) {
switch (_c.label) {
case 0:
_b = (_a = blob_1.BlobUtils).asFileExtension;
return [4 /*yield*/, blob_1.BlobUtils.detectBlobMimeType(data)];
case 1: return [2 /*return*/, _b.apply(_a, [_c.sent()])];
}
}); }); })];
case 2:
fileExtension = _a.sent();
return [2 /*return*/, downloadFileByBlob({
data: data,
fileName: fileExtension
? nvl_1.NvlUtils.nvl(fileName, url) + "." + fileExtension
: fileName,
})];
}
});
}); };
/**
* @stable [13.12.2020]
* @param cfg
*/
var downloadFileByBlob = function (cfg) {
var blob = cfg.data;
var fileName = cfg.fileName;
var url = URL.createObjectURL(blob);
try {
downloadFileByUrl({ url: url, fileName: fileName });
}
finally {
URL.revokeObjectURL(url);
}
};
/**
* @stable [30.07.2018]
* @returns {() => boolean}
*/
exports.preventContextMenu = function () { return document.body.oncontextmenu = function () { return false; }; };
/**
* @stable [22.10.2019]
* @param {Element} target
* @param {string} classNames
* @returns {boolean}
*/
exports.hasClasses = function (target) {
var classNames = [];
for (var _i = 1; _i < arguments.length; _i++) {
classNames[_i - 1] = arguments[_i];
}
var el = exports.toJqEl(target);
return filter_1.FilterUtils.trueValuesArrayFilter.apply(filter_1.FilterUtils, classNames.map(function (className) { return el.hasClass(className); })).length > 0;
};
/**
* @stable [01.12.2018]
* @param {Element} element
* @param {IPresetsXYEntity} xyEntity
*/
exports.scrollTo = function (element, xyEntity) { return element.scrollTo(xyEntity.x, xyEntity.y); };
/**
* @stable [26.10.2019]
* @param {Element} element
* @param {Element} parent
* @returns {boolean}
*/
exports.isElementVisibleWithinParent = function (element, parent) {
if (R.isNil(parent) || R.isNil(element)) {
return false;
}
var parentJEl = exports.toJqEl(parent);
var selectedJEl = exports.toJqEl(element);
var parentJElOuterHeight = parentJEl.outerHeight();
var parentJElOffset = parentJEl.offset();
var parentJElOffsetTop = parentJElOffset.top;
var selectedJElOffset = selectedJEl.offset();
var selectedJElOffsetTop = selectedJElOffset.top;
var diff = selectedJElOffsetTop - parentJElOffsetTop;
return diff <= parentJElOuterHeight && diff + selectedJEl.outerHeight() > 0;
};
/**
* @stable [11.10.2019]
* @param {Element} stickyWrapperEl
* @param {string} stickySelector
* @param {(stickyJEl: IJQueryElement) => any} widthResolver
*/
exports.setStickyElementProperties = function (stickyWrapperEl, stickySelector, widthResolver) {
if (widthResolver === void 0) { widthResolver = function (stickyJEl) { return stickyJEl.parent().width(); }; }
if (R.isNil(stickyWrapperEl)) {
return;
}
var stickyWrapperJEl = exports.toJqEl(stickyWrapperEl);
if (R.isNil(stickyWrapperJEl) || R.isNil(stickyWrapperJEl.val())) {
return;
}
var marginTop;
var top;
var left;
var width;
var stickyJEls = stickyWrapperJEl.find(stickySelector);
if (R.isNil(stickyJEls)) {
return;
}
stickyJEls.each(function (index) {
var stickyJEl = exports.toJqEl(stickyJEls.get(index));
var stickyWrapperJElTop = stickyWrapperJEl.offset().top;
var stickyJElPosition = stickyJEl.css('position');
var stickyJElTop = stickyJEl.offset().top;
var stickyJElMarginBottom = parseInt(stickyJEl.css('margin-bottom'), 10);
var stickyJElHeight = stickyJEl.height() + (isNaN(stickyJElMarginBottom) ? 0 : stickyJElMarginBottom);
var stickyAfterJEl = exports.toJqEl(stickyJEl.siblings()[0]);
var stickyAfterOffset = stickyAfterJEl.offset();
var stickyAfterJElTop = stickyAfterOffset.top;
if ((stickyJElPosition === 'fixed' && stickyAfterJElTop >= stickyJElHeight + stickyWrapperJElTop)
|| stickyJElTop > stickyWrapperJElTop) {
top = 0;
left = 0;
marginTop = 0;
width = 'initial';
stickyJEl.removeClass('rac-sticky-fixed');
}
else if (stickyJElTop <= stickyWrapperJElTop) {
left = stickyAfterOffset.left;
top = stickyWrapperJElTop;
marginTop = stickyJElHeight;
width = widthResolver(stickyJEl);
stickyJEl.addClass('rac-sticky-fixed');
}
stickyJEl.css({ top: top, left: left, width: width });
stickyAfterJEl.css('margin-top', marginTop + "px"); // Additional <tbody> offset
});
};
/**
* @stable [18.08.2020]
* @param elem
*/
exports.openFullScreen = function (elem) {
if (elem.requestFullscreen) {
elem.requestFullscreen();
}
else if (type_1.isFn(elem.mozRequestFullScreen)) { /* Firefox */
elem.mozRequestFullScreen();
}
else if (type_1.isFn(elem.webkitRequestFullscreen)) { /* Chrome, Safari and Opera */
elem.webkitRequestFullscreen();
}
else if (type_1.isFn(elem.msRequestFullscreen)) { /* IE/Edge */
elem.msRequestFullscreen();
}
};
/**
* @stable [13.12.2020]
*/
var DomUtils = /** @class */ (function () {
function DomUtils() {
}
DomUtils.downloadFile = downloadFile;
DomUtils.downloadFileByBlob = downloadFileByBlob;
DomUtils.downloadFileByUrl = downloadFileByUrl;
return DomUtils;
}());
exports.DomUtils = DomUtils;
//# sourceMappingURL=dom.js.map