UNPKG

ngx-dynamic-hooks

Version:

Automatically insert live Angular components into a dynamic string of content (based on their selector or any pattern of your choice) and render the result in the DOM.

51 lines 5.71 kB
/** * Polyfill for String.prototype.matchAll() from the ES2020 spec * * Note: The 'string.prototype.matchall' npm package was unstable for me so providing my own version here * * @param text - The text to search * @param regExp - The RegExp object to use */ export function matchAll(text, regExp) { // Must be global if (!regExp.global) { throw Error('TypeError: matchAll called with a non-global RegExp argument'); } // Get matches const result = []; let match = regExp.exec(text); while (match !== null) { result.push(match); match = regExp.exec(text); } // Reset internal index regExp.lastIndex = 0; return result; } /** * Sort elements/nodes based on the order of their appearance in the document * * @param arr - The array to sort * @param sortCallback - The callback to use to sort the elements * @param getElement - An optional callback that returns the element to compare from each arr entry */ export function sortElements(arr, sortCallback, getElementCallback) { const result = [...arr]; return result.sort(function (a, b) { if (typeof getElementCallback === 'function') { a = getElementCallback(a); b = getElementCallback(b); } return sortCallback(a, b); }); } /** * Indicates if an element is either a component host element or part of a component's view/template * * @param element - The element to inspect */ export function isAngularManagedElement(element) { // Angular gives component host and view elements the following property, so can simply check for that return element?.__ngContext__ !== undefined; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZHluYW1pYy1ob29rcy9zcmMvbGliL3NlcnZpY2VzL3V0aWxzL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsUUFBUSxDQUFDLElBQVksRUFBRSxNQUFjO0lBQ25ELGlCQUFpQjtJQUNqQixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ25CLE1BQU0sS0FBSyxDQUFDLDhEQUE4RCxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUVELGNBQWM7SUFDZCxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7SUFDbEIsSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QixPQUFPLEtBQUssS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUN0QixNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25CLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRCx1QkFBdUI7SUFDdkIsTUFBTSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7SUFFckIsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQUksR0FBUSxFQUFFLFlBQXdDLEVBQUUsa0JBQXFDO0lBQ3ZILE1BQU0sTUFBTSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUN4QixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBUyxDQUFDLEVBQUUsQ0FBQztRQUU5QixJQUFJLE9BQU8sa0JBQWtCLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDN0MsQ0FBQyxHQUFHLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFCLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1QixDQUFDO1FBRUQsT0FBTyxZQUFZLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzVCLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVDOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsdUJBQXVCLENBQUMsT0FBWTtJQUNsRCxzR0FBc0c7SUFDdEcsT0FBTyxPQUFPLEVBQUUsYUFBYSxLQUFLLFNBQVMsQ0FBQztBQUM5QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiXG4vKipcbiAqIFBvbHlmaWxsIGZvciBTdHJpbmcucHJvdG90eXBlLm1hdGNoQWxsKCkgZnJvbSB0aGUgRVMyMDIwIHNwZWNcbiAqXG4gKiBOb3RlOiBUaGUgJ3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwnIG5wbSBwYWNrYWdlIHdhcyB1bnN0YWJsZSBmb3IgbWUgc28gcHJvdmlkaW5nIG15IG93biB2ZXJzaW9uIGhlcmVcbiAqXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSB0ZXh0IHRvIHNlYXJjaFxuICogQHBhcmFtIHJlZ0V4cCAtIFRoZSBSZWdFeHAgb2JqZWN0IHRvIHVzZVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWF0Y2hBbGwodGV4dDogc3RyaW5nLCByZWdFeHA6IFJlZ0V4cCk6IHtbaW5kZXg6IG51bWJlcl06IHN0cmluZywgaW5kZXg6IG51bWJlciwgaW5wdXQ6IHN0cmluZ31bXSB7XG4gIC8vIE11c3QgYmUgZ2xvYmFsXG4gIGlmICghcmVnRXhwLmdsb2JhbCkge1xuICAgIHRocm93IEVycm9yKCdUeXBlRXJyb3I6IG1hdGNoQWxsIGNhbGxlZCB3aXRoIGEgbm9uLWdsb2JhbCBSZWdFeHAgYXJndW1lbnQnKTtcbiAgfVxuXG4gIC8vIEdldCBtYXRjaGVzXG4gIGNvbnN0IHJlc3VsdCA9IFtdO1xuICBsZXQgbWF0Y2ggPSByZWdFeHAuZXhlYyh0ZXh0KTtcbiAgd2hpbGUgKG1hdGNoICE9PSBudWxsKSB7XG4gICAgcmVzdWx0LnB1c2gobWF0Y2gpO1xuICAgIG1hdGNoID0gcmVnRXhwLmV4ZWModGV4dCk7XG4gIH1cblxuICAvLyBSZXNldCBpbnRlcm5hbCBpbmRleFxuICByZWdFeHAubGFzdEluZGV4ID0gMDtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIFNvcnQgZWxlbWVudHMvbm9kZXMgYmFzZWQgb24gdGhlIG9yZGVyIG9mIHRoZWlyIGFwcGVhcmFuY2UgaW4gdGhlIGRvY3VtZW50XG4gKlxuICogQHBhcmFtIGFyciAtIFRoZSBhcnJheSB0byBzb3J0XG4gKiBAcGFyYW0gc29ydENhbGxiYWNrIC0gVGhlIGNhbGxiYWNrIHRvIHVzZSB0byBzb3J0IHRoZSBlbGVtZW50c1xuICogQHBhcmFtIGdldEVsZW1lbnQgLSBBbiBvcHRpb25hbCBjYWxsYmFjayB0aGF0IHJldHVybnMgdGhlIGVsZW1lbnQgdG8gY29tcGFyZSBmcm9tIGVhY2ggYXJyIGVudHJ5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzb3J0RWxlbWVudHM8VD4oYXJyOiBUW10sIHNvcnRDYWxsYmFjazogKGE6IGFueSwgYjogYW55KSA9PiBudW1iZXIsIGdldEVsZW1lbnRDYWxsYmFjazogKGVudHJ5OiBUKSA9PiBhbnkpOiBUW10ge1xuICBjb25zdCByZXN1bHQgPSBbLi4uYXJyXTtcbiAgcmV0dXJuIHJlc3VsdC5zb3J0KGZ1bmN0aW9uKGEsIGIpIHtcblxuICAgIGlmICh0eXBlb2YgZ2V0RWxlbWVudENhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBhID0gZ2V0RWxlbWVudENhbGxiYWNrKGEpO1xuICAgICAgYiA9IGdldEVsZW1lbnRDYWxsYmFjayhiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc29ydENhbGxiYWNrKGEsIGIpO1xuICB9KTtcbn1cblxuICAvKipcbiAgICogSW5kaWNhdGVzIGlmIGFuIGVsZW1lbnQgaXMgZWl0aGVyIGEgY29tcG9uZW50IGhvc3QgZWxlbWVudCBvciBwYXJ0IG9mIGEgY29tcG9uZW50J3Mgdmlldy90ZW1wbGF0ZVxuICAgKiBcbiAgICogQHBhcmFtIGVsZW1lbnQgLSBUaGUgZWxlbWVudCB0byBpbnNwZWN0XG4gICAqL1xuICBleHBvcnQgZnVuY3Rpb24gaXNBbmd1bGFyTWFuYWdlZEVsZW1lbnQoZWxlbWVudDogYW55KTogYm9vbGVhbiB7XG4gICAgLy8gQW5ndWxhciBnaXZlcyBjb21wb25lbnQgaG9zdCBhbmQgdmlldyBlbGVtZW50cyB0aGUgZm9sbG93aW5nIHByb3BlcnR5LCBzbyBjYW4gc2ltcGx5IGNoZWNrIGZvciB0aGF0XG4gICAgcmV0dXJuIGVsZW1lbnQ/Ll9fbmdDb250ZXh0X18gIT09IHVuZGVmaW5lZDtcbiAgfSJdfQ==