@cisstech/nge
Version:
NG Essentials is a collection of libraries for Angular developers.
72 lines • 8.99 kB
JavaScript
import { Inject, Injectable, InjectionToken, Optional } from '@angular/core';
import { NGE_MARKDOWN_CONTRIBUTION } from '../nge-markdown-contribution';
import * as i0 from "@angular/core";
/** Injection token to pass custom options to `NgeMarkdownEmoji` contribution. */
export const NGE_MARKDOWN_EMOJI_OPTIONS = new InjectionToken('NGE_MARKDOWN_EMOJI_OPTIONS');
/**
* Contribution to use emoji in markdown using [emoji-toolkit](https://github.com/joypixels/emoji-toolkit) library.
*/
export class NgeMarkdownEmoji {
constructor(options) {
this.options = options;
this.options = options || {};
this.options.url = this.options.url || 'https://cdn.jsdelivr.net/npm/emoji-toolkit@8.0.0/lib/js/joypixels.min.js';
}
dependencies() {
const deps = [];
if (!('joypixels' in window)) {
deps.push(['script', this.options.url]);
}
return deps;
}
contribute(transformer) {
transformer.addMarkdownTransformer((markdown) => {
const { joypixels } = window;
const lines = markdown.split('\n');
const length = lines.length;
let insideCodeBlock = false;
for (let i = 0; i < length; i++) {
const curr = lines[i];
if (curr.startsWith('```')) {
insideCodeBlock = !insideCodeBlock;
}
if (insideCodeBlock) {
continue;
}
if (lines[i].match(/:[a-z0-9_+-]+:/g)) {
lines[i] = joypixels.shortnameToUnicode(lines[i]);
}
}
return lines.join('\n');
});
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: NgeMarkdownEmoji, deps: [{ token: NGE_MARKDOWN_EMOJI_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: NgeMarkdownEmoji }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: NgeMarkdownEmoji, decorators: [{
type: Injectable
}], ctorParameters: () => [{ type: undefined, decorators: [{
type: Optional
}, {
type: Inject,
args: [NGE_MARKDOWN_EMOJI_OPTIONS]
}] }] });
/**
* Provider to register `NgeMarkdownEmoji` contribution.
*/
export const NgeMarkdownEmojiProvider = {
provide: NGE_MARKDOWN_CONTRIBUTION,
multi: true,
useClass: NgeMarkdownEmoji,
};
/**
* Provider to pass options to `NgeMarkdownEmoji` contribution.
* @param options `NgeMarkdownEmoji` options.
*/
export function NgeMarkdownEmojiOptionsProvider(options) {
return {
provide: NGE_MARKDOWN_EMOJI_OPTIONS,
useValue: options,
};
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdlLW1hcmtkb3duLWVtb2ppLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmdlL21hcmtkb3duL3NyYy9jb250cmlidXRpb25zL25nZS1tYXJrZG93bi1lbW9qaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFZLE1BQU0sZUFBZSxDQUFBO0FBRXRGLE9BQU8sRUFBMkIseUJBQXlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQTs7QUFRakcsaUZBQWlGO0FBQ2pGLE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHLElBQUksY0FBYyxDQUEwQiw0QkFBNEIsQ0FBQyxDQUFBO0FBRW5IOztHQUVHO0FBRUgsTUFBTSxPQUFPLGdCQUFnQjtJQUMzQixZQUdtQixPQUFnQztRQUFoQyxZQUFPLEdBQVAsT0FBTyxDQUF5QjtRQUVqRCxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sSUFBSSxFQUFFLENBQUE7UUFDNUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksMEVBQTBFLENBQUE7SUFDbkgsQ0FBQztJQUVELFlBQVk7UUFDVixNQUFNLElBQUksR0FBVSxFQUFFLENBQUE7UUFDdEIsSUFBSSxDQUFDLENBQUMsV0FBVyxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7UUFDekMsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztJQUVELFVBQVUsQ0FBQyxXQUFtQztRQUM1QyxXQUFXLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUM5QyxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsTUFBYSxDQUFBO1lBQ25DLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDbEMsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQTtZQUMzQixJQUFJLGVBQWUsR0FBRyxLQUFLLENBQUE7WUFDM0IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUNoQyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUE7Z0JBQ3JCLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO29CQUMzQixlQUFlLEdBQUcsQ0FBQyxlQUFlLENBQUE7Z0JBQ3BDLENBQUM7Z0JBQ0QsSUFBSSxlQUFlLEVBQUUsQ0FBQztvQkFDcEIsU0FBUTtnQkFDVixDQUFDO2dCQUNELElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUM7b0JBQ3RDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7Z0JBQ25ELENBQUM7WUFDSCxDQUFDO1lBQ0QsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ3pCLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQzs4R0F0Q1UsZ0JBQWdCLGtCQUdqQiwwQkFBMEI7a0hBSHpCLGdCQUFnQjs7MkZBQWhCLGdCQUFnQjtrQkFENUIsVUFBVTs7MEJBR04sUUFBUTs7MEJBQ1IsTUFBTTsyQkFBQywwQkFBMEI7O0FBc0N0Qzs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFhO0lBQ2hELE9BQU8sRUFBRSx5QkFBeUI7SUFDbEMsS0FBSyxFQUFFLElBQUk7SUFDWCxRQUFRLEVBQUUsZ0JBQWdCO0NBQzNCLENBQUE7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsK0JBQStCLENBQUMsT0FBZ0M7SUFDOUUsT0FBTztRQUNMLE9BQU8sRUFBRSwwQkFBMEI7UUFDbkMsUUFBUSxFQUFFLE9BQU87S0FDbEIsQ0FBQTtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIEluamVjdGlvblRva2VuLCBPcHRpb25hbCwgUHJvdmlkZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgTmdlTWFya2Rvd25UcmFuc2Zvcm1lciB9IGZyb20gJy4uL25nZS1tYXJrZG93bi10cmFuc2Zvcm1lcidcbmltcG9ydCB7IE5nZU1hcmtkb3duQ29udHJpYnV0aW9uLCBOR0VfTUFSS0RPV05fQ09OVFJJQlVUSU9OIH0gZnJvbSAnLi4vbmdlLW1hcmtkb3duLWNvbnRyaWJ1dGlvbidcblxuLyoqIE9wdGlvbnMgdG8gcGFzcyB0byBgTmdlTWFya2Rvd25FbW9qaWAgY29udHJpYnV0aW9uLiAqL1xuZXhwb3J0IGludGVyZmFjZSBOZ2VNYXJrZG93bkVtb2ppT3B0aW9ucyB7XG4gIC8qKiBVUkwgdG8gbG9hZCBqb3lwaXhlbHMgc2NyaXB0IChkZWZhdWx0IGh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vZW1vamktdG9vbGtpdEA2LjAuMS9saWIvanMvam95cGl4ZWxzLm1pbi5qcykuICovXG4gIHVybDogc3RyaW5nXG59XG5cbi8qKiBJbmplY3Rpb24gdG9rZW4gdG8gcGFzcyBjdXN0b20gb3B0aW9ucyB0byBgTmdlTWFya2Rvd25FbW9qaWAgY29udHJpYnV0aW9uLiAqL1xuZXhwb3J0IGNvbnN0IE5HRV9NQVJLRE9XTl9FTU9KSV9PUFRJT05TID0gbmV3IEluamVjdGlvblRva2VuPE5nZU1hcmtkb3duRW1vamlPcHRpb25zPignTkdFX01BUktET1dOX0VNT0pJX09QVElPTlMnKVxuXG4vKipcbiAqIENvbnRyaWJ1dGlvbiB0byB1c2UgZW1vamkgaW4gbWFya2Rvd24gdXNpbmcgW2Vtb2ppLXRvb2xraXRdKGh0dHBzOi8vZ2l0aHViLmNvbS9qb3lwaXhlbHMvZW1vamktdG9vbGtpdCkgbGlicmFyeS5cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE5nZU1hcmtkb3duRW1vamkgaW1wbGVtZW50cyBOZ2VNYXJrZG93bkNvbnRyaWJ1dGlvbiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIEBPcHRpb25hbCgpXG4gICAgQEluamVjdChOR0VfTUFSS0RPV05fRU1PSklfT1BUSU9OUylcbiAgICBwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM6IE5nZU1hcmtkb3duRW1vamlPcHRpb25zXG4gICkge1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwge31cbiAgICB0aGlzLm9wdGlvbnMudXJsID0gdGhpcy5vcHRpb25zLnVybCB8fCAnaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9lbW9qaS10b29sa2l0QDguMC4wL2xpYi9qcy9qb3lwaXhlbHMubWluLmpzJ1xuICB9XG5cbiAgZGVwZW5kZW5jaWVzKCkge1xuICAgIGNvbnN0IGRlcHM6IGFueVtdID0gW11cbiAgICBpZiAoISgnam95cGl4ZWxzJyBpbiB3aW5kb3cpKSB7XG4gICAgICBkZXBzLnB1c2goWydzY3JpcHQnLCB0aGlzLm9wdGlvbnMudXJsXSlcbiAgICB9XG4gICAgcmV0dXJuIGRlcHNcbiAgfVxuXG4gIGNvbnRyaWJ1dGUodHJhbnNmb3JtZXI6IE5nZU1hcmtkb3duVHJhbnNmb3JtZXIpIHtcbiAgICB0cmFuc2Zvcm1lci5hZGRNYXJrZG93blRyYW5zZm9ybWVyKChtYXJrZG93bikgPT4ge1xuICAgICAgY29uc3QgeyBqb3lwaXhlbHMgfSA9IHdpbmRvdyBhcyBhbnlcbiAgICAgIGNvbnN0IGxpbmVzID0gbWFya2Rvd24uc3BsaXQoJ1xcbicpXG4gICAgICBjb25zdCBsZW5ndGggPSBsaW5lcy5sZW5ndGhcbiAgICAgIGxldCBpbnNpZGVDb2RlQmxvY2sgPSBmYWxzZVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBjdXJyID0gbGluZXNbaV1cbiAgICAgICAgaWYgKGN1cnIuc3RhcnRzV2l0aCgnYGBgJykpIHtcbiAgICAgICAgICBpbnNpZGVDb2RlQmxvY2sgPSAhaW5zaWRlQ29kZUJsb2NrXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluc2lkZUNvZGVCbG9jaykge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxpbmVzW2ldLm1hdGNoKC86W2EtejAtOV8rLV0rOi9nKSkge1xuICAgICAgICAgIGxpbmVzW2ldID0gam95cGl4ZWxzLnNob3J0bmFtZVRvVW5pY29kZShsaW5lc1tpXSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGxpbmVzLmpvaW4oJ1xcbicpXG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIFByb3ZpZGVyIHRvIHJlZ2lzdGVyIGBOZ2VNYXJrZG93bkVtb2ppYCBjb250cmlidXRpb24uXG4gKi9cbmV4cG9ydCBjb25zdCBOZ2VNYXJrZG93bkVtb2ppUHJvdmlkZXI6IFByb3ZpZGVyID0ge1xuICBwcm92aWRlOiBOR0VfTUFSS0RPV05fQ09OVFJJQlVUSU9OLFxuICBtdWx0aTogdHJ1ZSxcbiAgdXNlQ2xhc3M6IE5nZU1hcmtkb3duRW1vamksXG59XG5cbi8qKlxuICogUHJvdmlkZXIgdG8gcGFzcyBvcHRpb25zIHRvIGBOZ2VNYXJrZG93bkVtb2ppYCBjb250cmlidXRpb24uXG4gKiBAcGFyYW0gb3B0aW9ucyBgTmdlTWFya2Rvd25FbW9qaWAgb3B0aW9ucy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIE5nZU1hcmtkb3duRW1vamlPcHRpb25zUHJvdmlkZXIob3B0aW9uczogTmdlTWFya2Rvd25FbW9qaU9wdGlvbnMpOiBQcm92aWRlciB7XG4gIHJldHVybiB7XG4gICAgcHJvdmlkZTogTkdFX01BUktET1dOX0VNT0pJX09QVElPTlMsXG4gICAgdXNlVmFsdWU6IG9wdGlvbnMsXG4gIH1cbn1cbiJdfQ==