UNPKG

@schoolbelle/common

Version:

269 lines (256 loc) 8.36 kB
import { FormControl } from '@angular/forms'; import { padStart, set } from 'lodash'; /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ /** * @param {?} string * @return {?} */ function escapeRegExp(string) { /** @type {?} */ const matchOperatorsRegex = /[|\\{}()[\]^$+*?.-]/g; if (typeof string !== 'string') { throw new TypeError('Expected a string'); } return string.replace(matchOperatorsRegex, '\\$&'); } /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ /** * @param {?} selector * @return {?} */ function focusOn(selector) { /** @type {?} */ let inputElement = document.querySelector(selector); if (inputElement) { inputElement.click(); inputElement.focus(); } return inputElement; } /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ /** * @param {?} selectorOrElem * @param {?=} duration * @param {?=} offset * @return {?} */ function scrollTo(selectorOrElem, duration = 300, offset = 300) { /** @type {?} */ let elem = typeof selectorOrElem === 'string' ? document.querySelector(selectorOrElem) : selectorOrElem; if (elem) { /** @type {?} */ let box = elem.getBoundingClientRect(); /** @type {?} */ let body = document.body; /** @type {?} */ let docEl = document.documentElement; /** @type {?} */ let scrollTop = window.pageYOffset || docEl.scrollTop || body.scrollTop; /** @type {?} */ let clientTop = docEl.clientTop || body.clientTop || 0; /** @type {?} */ let elemTop = box.top + scrollTop - clientTop; /** @type {?} */ let diff = elemTop - scrollTop - offset; /** @type {?} */ let start; // Bootstrap our animation - it will get called right before next frame shall be rendered. window.requestAnimationFrame((/** * @param {?} timestamp * @return {?} */ function step(timestamp) { if (!start) start = timestamp; // Elapsed miliseconds since start of scrolling. /** @type {?} */ let time = timestamp - start; // Get percent of completion in range [0, 1]. /** @type {?} */ let percent = Math.min(time / duration, 1); window.scrollTo(0, scrollTop + diff * percent); // Proceed with animation as long as we wanted it to. if (time < duration) { window.requestAnimationFrame(step); } })); } return elem; } /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ /** * @return {?} */ function isIE() { return navigator.userAgent.indexOf("MSIE ") > -1 || navigator.userAgent.indexOf("Trident/") > -1; } /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ /** * @return {?} */ function isEdge() { return /Edge/.test(navigator.userAgent); } /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ /** * @return {?} */ function isSafari() { /** @type {?} */ const ua = navigator.userAgent.toLowerCase(); return ua.indexOf('safari') != -1 && ua.indexOf('chrome') === -1; } /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ /** * @param {?} val * @return {?} */ function padNumbersInsideString(val) { if (val.match(/\d+/g)) { return val.replace(/\d+/g, (/** * @param {?} a * @return {?} */ a => { return padStart(a, 3, '0'); })); } else return val; } /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ /** * @param {?} from * @param {?=} delimiter * @param {?=} paths * @return {?} */ function reduceFormErrors(from, delimiter = '.', paths = []) { /** @type {?} */ let acc = {}; if (from instanceof FormControl) { if (from.invalid) set(acc, [paths.join(delimiter)], from.errors); return acc; } else { for (let key in from.controls) { acc = Object.assign({}, acc, reduceFormErrors(from.controls[key], delimiter, paths.concat(key))); } return acc; } } /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ /** * @param {?} el * @return {?} */ function getSelectionRange(el) { // console.log('IE 11 test needed'); /** @type {?} */ let start = 0; /** @type {?} */ let end = 0; if (typeof el.selectionStart == "number" && typeof el.selectionEnd == "number") { start = el.selectionStart; end = el.selectionEnd; } else { // IE 11, Opra? // IE 11, Opra? /** @type {?} */ const range = ((/** @type {?} */ (document))).selection.createRange(); if (range && range.parentElement() == el) { /** @type {?} */ const len = el.value.length; /** @type {?} */ const normalizedValue = el.value.replace(/\r\n/g, "\n"); // Create a working TextRange that lives only in the input /** @type {?} */ const textInputRange = ((/** @type {?} */ (el))).createTextRange(); textInputRange.moveToBookmark(range.getBookmark()); // Check if the start and end of the selection are at the very end // of the input, since moveStart/moveEnd doesn't return what we want // in those cases /** @type {?} */ const endRange = ((/** @type {?} */ (el))).createTextRange(); endRange.collapse(false); if (textInputRange.compareEndPoints("StartToEnd", endRange) > -1) { start = end = len; } else { start = -textInputRange.moveStart("character", -len); start += normalizedValue.slice(0, start).split("\n").length - 1; if (textInputRange.compareEndPoints("EndToEnd", endRange) > -1) { end = len; } else { end = -textInputRange.moveEnd("character", -len); end += normalizedValue.slice(0, end).split("\n").length - 1; } } } } return { start, end }; } /** * @param {?} el * @param {?} start * @param {?} end * @return {?} */ function setSelectionRange(el, start, end) { el.focus(); if (el.setSelectionRange) { // Opera new line is \r\n while in others it's \n // selectionStart = adjustOffset(input, selectionStart); // selectionEnd = adjustOffset(input, selectionEnd); el.setSelectionRange(start, end); } else if (((/** @type {?} */ (el))).createTextRange) { // IE // IE /** @type {?} */ var range = ((/** @type {?} */ (el))).createTextRange(); range.collapse(true); range.moveEnd('character', end); range.moveStart('character', start); range.select(); } // } } /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ export { escapeRegExp, focusOn, scrollTo, isIE, isEdge, isSafari, padNumbersInsideString, reduceFormErrors, getSelectionRange, setSelectionRange }; //# sourceMappingURL=schoolbelle-common-functions.js.map