@schoolbelle/common
Version:
269 lines (256 loc) • 8.36 kB
JavaScript
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