@covalent/highlight 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +67 -0
- package/covalent-highlight.d.ts +5 -0
- package/esm2020/covalent-highlight.mjs +5 -0
- package/esm2020/lib/copy-code-button/copy-code-button.component.mjs +55 -0
- package/esm2020/lib/highlight.component.mjs +179 -0
- package/esm2020/lib/highlight.module.mjs +39 -0
- package/esm2020/public_api.mjs +4 -0
- package/fesm2015/covalent-highlight.mjs +271 -0
- package/fesm2015/covalent-highlight.mjs.map +1 -0
- package/fesm2020/covalent-highlight.mjs +270 -0
- package/fesm2020/covalent-highlight.mjs.map +1 -0
- package/lib/copy-code-button/copy-code-button.component.d.ts +23 -0
- package/lib/highlight.component.d.ts +67 -0
- package/lib/highlight.module.d.ts +13 -0
- package/package.json +45 -0
- package/public_api.d.ts +3 -0
package/README.md
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
## TdTextEditorComponent: td-text-editor
|
|
2
|
+
|
|
3
|
+
`<td-text-editor>` element generates an easymde markdown editor.
|
|
4
|
+
|
|
5
|
+
## API Summary
|
|
6
|
+
|
|
7
|
+
#### Inputs
|
|
8
|
+
|
|
9
|
+
- value?: string
|
|
10
|
+
- value of text in editor
|
|
11
|
+
- options?: object
|
|
12
|
+
- Options Object of valid Configurations listed here: <a href="https://github.com/Ionaru/easy-markdown-editor#configuration">https://github.com/Ionaru/easy-markdown-editor#configuration</a>
|
|
13
|
+
|
|
14
|
+
#### Properties
|
|
15
|
+
|
|
16
|
+
- isPreviewActive?: function()
|
|
17
|
+
- is the Preview Active. Returns boolean
|
|
18
|
+
- isSideBySideActive?: function()
|
|
19
|
+
- is the Side By Side Active. Returns boolean
|
|
20
|
+
- isFullscreenActive?: function()
|
|
21
|
+
- is Full Screen Active. Returns boolean
|
|
22
|
+
- clearAutosavedValue?: function()
|
|
23
|
+
- clears Auto Saved Value. Returns void
|
|
24
|
+
- toTextArea?: function()
|
|
25
|
+
- reverts to the Initial textarea. Returns void
|
|
26
|
+
- easyMDE?: function()
|
|
27
|
+
- getter function for the underlying easyMDE Object. Returns EasyMDE
|
|
28
|
+
|
|
29
|
+
## Installation
|
|
30
|
+
|
|
31
|
+
This component can be installed as npm package.
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
npm install @covalent/text-editor
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Setup
|
|
38
|
+
|
|
39
|
+
Import the **CovalentTextEditorModule** in your NgModule:
|
|
40
|
+
|
|
41
|
+
```typescript
|
|
42
|
+
import { CovalentTextEditorModule } from '@covalent/text-editor';
|
|
43
|
+
@NgModule({
|
|
44
|
+
imports: [
|
|
45
|
+
CovalentTextEditorModule,
|
|
46
|
+
...
|
|
47
|
+
],
|
|
48
|
+
...
|
|
49
|
+
})
|
|
50
|
+
export class MyModule {}
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### Usage
|
|
54
|
+
|
|
55
|
+
```html
|
|
56
|
+
<td-text-editor [value]="Some Text" [options]="options"></td-text-editor>
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
```typescript
|
|
60
|
+
class MyComponent {
|
|
61
|
+
options: any = {
|
|
62
|
+
lineWrapping: true,
|
|
63
|
+
toolbar: false,
|
|
64
|
+
...
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
```
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './public_api';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY292YWxlbnQtaGlnaGxpZ2h0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWhpZ2hsaWdodC9zcmMvY292YWxlbnQtaGlnaGxpZ2h0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vcHVibGljX2FwaSc7XG4iXX0=
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { Component, Input, ViewChild, HostListener } from '@angular/core';
|
|
2
|
+
import { MatTooltip } from '@angular/material/tooltip';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@angular/material/button";
|
|
5
|
+
import * as i2 from "@angular/material/icon";
|
|
6
|
+
import * as i3 from "@angular/cdk/clipboard";
|
|
7
|
+
import * as i4 from "@angular/material/tooltip";
|
|
8
|
+
export class TdCopyCodeButtonComponent {
|
|
9
|
+
constructor() {
|
|
10
|
+
this.copyCodeToClipboard = false;
|
|
11
|
+
/**
|
|
12
|
+
* copyCodeTooltips?: ICopyCodeTooltips
|
|
13
|
+
*
|
|
14
|
+
* Tooltips for copy button to copy and upon copying.
|
|
15
|
+
*/
|
|
16
|
+
this.copyCodeTooltips = {};
|
|
17
|
+
}
|
|
18
|
+
get copyTooltip() {
|
|
19
|
+
return (this.copyCodeTooltips && this.copyCodeTooltips.copy) || 'Copy';
|
|
20
|
+
}
|
|
21
|
+
get copiedTooltip() {
|
|
22
|
+
return (this.copyCodeTooltips && this.copyCodeTooltips.copied) || 'Copied';
|
|
23
|
+
}
|
|
24
|
+
textCopied(event) {
|
|
25
|
+
if (event) {
|
|
26
|
+
this.tooltip.hide();
|
|
27
|
+
this.tooltip.message = this.copiedTooltip;
|
|
28
|
+
this.tooltip.show();
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
initializeTooltip() {
|
|
32
|
+
setTimeout(() => {
|
|
33
|
+
this.tooltip.message = this.copyTooltip;
|
|
34
|
+
}, 200);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
TdCopyCodeButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TdCopyCodeButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
38
|
+
TdCopyCodeButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: TdCopyCodeButtonComponent, selector: "td-copy-code-button", inputs: { copiedContent: "copiedContent", copyCodeToClipboard: "copyCodeToClipboard", copyCodeTooltips: "copyCodeTooltips" }, host: { listeners: { "mouseleave": "initializeTooltip()" } }, viewQueries: [{ propertyName: "tooltip", first: true, predicate: ["tooltip"], descendants: true }], ngImport: i0, template: "<button\n mat-icon-button\n [cdkCopyToClipboard]=\"copiedContent\"\n class=\"copy-button\"\n [matTooltip]=\"copyTooltip\"\n #tooltip=\"matTooltip\"\n (cdkCopyToClipboardCopied)=\"textCopied($event)\"\n>\n <mat-icon role=\"img\">content_copy</mat-icon>\n</button>\n", styles: [""], components: [{ type: i1.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i3.CdkCopyToClipboard, selector: "[cdkCopyToClipboard]", inputs: ["cdkCopyToClipboard", "cdkCopyToClipboardAttempts"], outputs: ["cdkCopyToClipboardCopied"] }, { type: i4.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }] });
|
|
39
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TdCopyCodeButtonComponent, decorators: [{
|
|
40
|
+
type: Component,
|
|
41
|
+
args: [{ selector: 'td-copy-code-button', template: "<button\n mat-icon-button\n [cdkCopyToClipboard]=\"copiedContent\"\n class=\"copy-button\"\n [matTooltip]=\"copyTooltip\"\n #tooltip=\"matTooltip\"\n (cdkCopyToClipboardCopied)=\"textCopied($event)\"\n>\n <mat-icon role=\"img\">content_copy</mat-icon>\n</button>\n", styles: [""] }]
|
|
42
|
+
}], propDecorators: { copiedContent: [{
|
|
43
|
+
type: Input
|
|
44
|
+
}], copyCodeToClipboard: [{
|
|
45
|
+
type: Input
|
|
46
|
+
}], copyCodeTooltips: [{
|
|
47
|
+
type: Input
|
|
48
|
+
}], tooltip: [{
|
|
49
|
+
type: ViewChild,
|
|
50
|
+
args: ['tooltip']
|
|
51
|
+
}], initializeTooltip: [{
|
|
52
|
+
type: HostListener,
|
|
53
|
+
args: ['mouseleave']
|
|
54
|
+
}] } });
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29weS1jb2RlLWJ1dHRvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItaGlnaGxpZ2h0L3NyYy9saWIvY29weS1jb2RlLWJ1dHRvbi9jb3B5LWNvZGUtYnV0dG9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1oaWdobGlnaHQvc3JjL2xpYi9jb3B5LWNvZGUtYnV0dG9uL2NvcHktY29kZS1idXR0b24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7Ozs7OztBQVl2RCxNQUFNLE9BQU8seUJBQXlCO0lBTHRDO1FBUVcsd0JBQW1CLEdBQUcsS0FBSyxDQUFDO1FBQ3JDOzs7O1dBSUc7UUFDTSxxQkFBZ0IsR0FBdUIsRUFBRSxDQUFDO0tBeUJwRDtJQXZCQyxJQUFJLFdBQVc7UUFDYixPQUFPLENBQUMsSUFBSSxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUM7SUFDekUsQ0FBQztJQUVELElBQUksYUFBYTtRQUNmLE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxJQUFJLFFBQVEsQ0FBQztJQUM3RSxDQUFDO0lBSUQsVUFBVSxDQUFDLEtBQWM7UUFDdkIsSUFBSSxLQUFLLEVBQUU7WUFDVCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7WUFDMUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUNyQjtJQUNILENBQUM7SUFFRCxpQkFBaUI7UUFDZixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUMxQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDVixDQUFDOztzSEFqQ1UseUJBQXlCOzBHQUF6Qix5QkFBeUIsMlZDYnRDLGlSQVVBOzJGREdhLHlCQUF5QjtrQkFMckMsU0FBUzsrQkFDRSxxQkFBcUI7OEJBTXRCLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQU1HLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFVZ0IsT0FBTztzQkFBNUIsU0FBUzt1QkFBQyxTQUFTO2dCQVVwQixpQkFBaUI7c0JBRGhCLFlBQVk7dUJBQUMsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIFZpZXdDaGlsZCwgSG9zdExpc3RlbmVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXRUb29sdGlwIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNvcHlDb2RlVG9vbHRpcHMge1xuICBjb3B5Pzogc3RyaW5nO1xuICBjb3BpZWQ/OiBzdHJpbmc7XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3RkLWNvcHktY29kZS1idXR0b24nLFxuICB0ZW1wbGF0ZVVybDogJy4vY29weS1jb2RlLWJ1dHRvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NvcHktY29kZS1idXR0b24uY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgVGRDb3B5Q29kZUJ1dHRvbkNvbXBvbmVudCB7XG4gIC8vIHByaXZhdGUgX2NvcHlDb2RlVG9vbHRpcHM6IElDb3B5Q29kZVRvb2x0aXBzID0ge307XG4gIEBJbnB1dCgpIGNvcGllZENvbnRlbnQhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGNvcHlDb2RlVG9DbGlwYm9hcmQgPSBmYWxzZTtcbiAgLyoqXG4gICAqIGNvcHlDb2RlVG9vbHRpcHM/OiBJQ29weUNvZGVUb29sdGlwc1xuICAgKlxuICAgKiBUb29sdGlwcyBmb3IgY29weSBidXR0b24gdG8gY29weSBhbmQgdXBvbiBjb3B5aW5nLlxuICAgKi9cbiAgQElucHV0KCkgY29weUNvZGVUb29sdGlwcz86IElDb3B5Q29kZVRvb2x0aXBzID0ge307XG5cbiAgZ2V0IGNvcHlUb29sdGlwKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICh0aGlzLmNvcHlDb2RlVG9vbHRpcHMgJiYgdGhpcy5jb3B5Q29kZVRvb2x0aXBzLmNvcHkpIHx8ICdDb3B5JztcbiAgfVxuXG4gIGdldCBjb3BpZWRUb29sdGlwKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICh0aGlzLmNvcHlDb2RlVG9vbHRpcHMgJiYgdGhpcy5jb3B5Q29kZVRvb2x0aXBzLmNvcGllZCkgfHwgJ0NvcGllZCc7XG4gIH1cblxuICBAVmlld0NoaWxkKCd0b29sdGlwJykgdG9vbHRpcCE6IE1hdFRvb2x0aXA7XG5cbiAgdGV4dENvcGllZChldmVudDogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmIChldmVudCkge1xuICAgICAgdGhpcy50b29sdGlwLmhpZGUoKTtcbiAgICAgIHRoaXMudG9vbHRpcC5tZXNzYWdlID0gdGhpcy5jb3BpZWRUb29sdGlwO1xuICAgICAgdGhpcy50b29sdGlwLnNob3coKTtcbiAgICB9XG4gIH1cbiAgQEhvc3RMaXN0ZW5lcignbW91c2VsZWF2ZScpXG4gIGluaXRpYWxpemVUb29sdGlwKCk6IHZvaWQge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy50b29sdGlwLm1lc3NhZ2UgPSB0aGlzLmNvcHlUb29sdGlwO1xuICAgIH0sIDIwMCk7XG4gIH1cbn1cbiIsIjxidXR0b25cbiAgbWF0LWljb24tYnV0dG9uXG4gIFtjZGtDb3B5VG9DbGlwYm9hcmRdPVwiY29waWVkQ29udGVudFwiXG4gIGNsYXNzPVwiY29weS1idXR0b25cIlxuICBbbWF0VG9vbHRpcF09XCJjb3B5VG9vbHRpcFwiXG4gICN0b29sdGlwPVwibWF0VG9vbHRpcFwiXG4gIChjZGtDb3B5VG9DbGlwYm9hcmRDb3BpZWQpPVwidGV4dENvcGllZCgkZXZlbnQpXCJcbj5cbiAgPG1hdC1pY29uIHJvbGU9XCJpbWdcIj5jb250ZW50X2NvcHk8L21hdC1pY29uPlxuPC9idXR0b24+XG4iXX0=
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import { Component, ElementRef, Input, Output, EventEmitter, Renderer2, SecurityContext, ViewChild, ChangeDetectorRef, } from '@angular/core';
|
|
2
|
+
import { DomSanitizer } from '@angular/platform-browser';
|
|
3
|
+
import { MatTooltip } from '@angular/material/tooltip';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@angular/platform-browser";
|
|
6
|
+
import * as i2 from "./copy-code-button/copy-code-button.component";
|
|
7
|
+
import * as i3 from "@angular/common";
|
|
8
|
+
/* tslint:disable-next-line */
|
|
9
|
+
const hljs = require('highlight.js/lib/common');
|
|
10
|
+
export class TdHighlightComponent {
|
|
11
|
+
constructor(_renderer, _elementRef, _domSanitizer, cdr) {
|
|
12
|
+
this._renderer = _renderer;
|
|
13
|
+
this._elementRef = _elementRef;
|
|
14
|
+
this._domSanitizer = _domSanitizer;
|
|
15
|
+
this.cdr = cdr;
|
|
16
|
+
this._initialized = false;
|
|
17
|
+
this._lang = 'typescript';
|
|
18
|
+
/**
|
|
19
|
+
* copyCodeToClipboard?: boolean
|
|
20
|
+
*
|
|
21
|
+
* Display copy button on code snippets to copy code to clipboard.
|
|
22
|
+
*/
|
|
23
|
+
this.copyCodeToClipboard = false;
|
|
24
|
+
/**
|
|
25
|
+
* copyCodeTooltips?: ICopyCodeTooltips
|
|
26
|
+
*
|
|
27
|
+
* Tooltips for copy button to copy and upon copying.
|
|
28
|
+
*/
|
|
29
|
+
this.copyCodeTooltips = {};
|
|
30
|
+
/**
|
|
31
|
+
* contentReady?: function
|
|
32
|
+
* Event emitted after the highlight content rendering is finished.
|
|
33
|
+
*/
|
|
34
|
+
this.contentReady = new EventEmitter();
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* content?: string
|
|
38
|
+
*
|
|
39
|
+
* Code content to be parsed as highlighted html.
|
|
40
|
+
* Used to load data dynamically.
|
|
41
|
+
*
|
|
42
|
+
* e.g. `.html`, `.ts` , etc.
|
|
43
|
+
*/
|
|
44
|
+
set content(content) {
|
|
45
|
+
this._content = content;
|
|
46
|
+
if (this._initialized) {
|
|
47
|
+
this._loadContent(this._content);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* lang?: string
|
|
52
|
+
*
|
|
53
|
+
* Language of the code content to be parsed as highlighted html.
|
|
54
|
+
* Defaults to `typescript`
|
|
55
|
+
*
|
|
56
|
+
* e.g. `typescript`, `html` , etc.
|
|
57
|
+
*/
|
|
58
|
+
set codeLang(lang) {
|
|
59
|
+
this.setLanguage(lang);
|
|
60
|
+
}
|
|
61
|
+
/** @deprecated - removed completely @4.0.0 */
|
|
62
|
+
set lang(lang) {
|
|
63
|
+
// tslint:disable-next-line: no-console
|
|
64
|
+
console.warn('DEPRECATION WARNING: switch to codeLang attribute as lang attribute is deprecated.');
|
|
65
|
+
this.setLanguage(lang);
|
|
66
|
+
}
|
|
67
|
+
ngAfterViewChecked() {
|
|
68
|
+
this.cdr.detectChanges();
|
|
69
|
+
}
|
|
70
|
+
ngAfterViewInit() {
|
|
71
|
+
if (!this._content) {
|
|
72
|
+
this._loadContent(this.highlightComp.nativeElement.textContent);
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
this._loadContent(this._content);
|
|
76
|
+
}
|
|
77
|
+
this._initialized = true;
|
|
78
|
+
}
|
|
79
|
+
setLanguage(lang) {
|
|
80
|
+
if (!lang) {
|
|
81
|
+
throw new Error('Error: language attribute must be defined in TdHighlightComponent.');
|
|
82
|
+
}
|
|
83
|
+
this._lang = lang;
|
|
84
|
+
if (this._initialized) {
|
|
85
|
+
this._loadContent(this._content);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* General method to parse a string of code into HTML Elements and load them into the container
|
|
90
|
+
*/
|
|
91
|
+
_loadContent(code) {
|
|
92
|
+
if (code && code.trim().length > 0) {
|
|
93
|
+
// Clean container
|
|
94
|
+
this._renderer.setProperty(this._elementRef.nativeElement, 'innerHTML', '');
|
|
95
|
+
// Parse html string into actual HTML elements.
|
|
96
|
+
this._elementFromString(this._render(code));
|
|
97
|
+
if (this.copyCodeToClipboard) {
|
|
98
|
+
this._renderer.appendChild(this._elementRef.nativeElement, this.copyComp.nativeElement);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
this.contentReady.emit();
|
|
102
|
+
}
|
|
103
|
+
_elementFromString(codeStr) {
|
|
104
|
+
// Renderer2 doesnt have a parsing method, so we have to sanitize and use [innerHTML]
|
|
105
|
+
// to parse the string into DOM element for now.
|
|
106
|
+
const preElement = this._renderer.createElement('pre');
|
|
107
|
+
this._renderer.appendChild(this._elementRef.nativeElement, preElement);
|
|
108
|
+
const codeElement = this._renderer.createElement('code');
|
|
109
|
+
this._renderer.appendChild(preElement, codeElement);
|
|
110
|
+
// Set .highlight class into <code> element
|
|
111
|
+
this._renderer.addClass(codeElement, 'highlight');
|
|
112
|
+
codeElement.innerHTML =
|
|
113
|
+
this._domSanitizer.sanitize(SecurityContext.HTML, codeStr) ?? '';
|
|
114
|
+
return preElement;
|
|
115
|
+
}
|
|
116
|
+
_render(contents) {
|
|
117
|
+
// Trim leading and trailing newlines
|
|
118
|
+
contents = contents
|
|
119
|
+
.replace(/^(\s|\t)*\n+/g, '')
|
|
120
|
+
.replace(/(\s|\t)*\n+(\s|\t)*$/g, '');
|
|
121
|
+
// Split markup by line characters
|
|
122
|
+
let lines = contents.split('\n');
|
|
123
|
+
// check how much indentation is used by the first actual code line
|
|
124
|
+
const firstLineWhitespaceMatch = lines[0].match(/^(\s|\t)*/);
|
|
125
|
+
const firstLineWhitespace = firstLineWhitespaceMatch
|
|
126
|
+
? firstLineWhitespaceMatch[0]
|
|
127
|
+
: null;
|
|
128
|
+
// Remove all indentation spaces so code can be parsed correctly
|
|
129
|
+
const startingWhitespaceRegex = new RegExp('^' + firstLineWhitespace);
|
|
130
|
+
lines = lines.map(function (line) {
|
|
131
|
+
return line
|
|
132
|
+
.replace('=""', '') // remove empty values
|
|
133
|
+
.replace(startingWhitespaceRegex, '')
|
|
134
|
+
.replace(/\s+$/, ''); // remove trailing white spaces
|
|
135
|
+
});
|
|
136
|
+
const codeToParse = lines
|
|
137
|
+
.join('\n')
|
|
138
|
+
.replace(/\{ \{/gi, '{{')
|
|
139
|
+
.replace(/\} \}/gi, '}}')
|
|
140
|
+
.replace(/</gi, '<')
|
|
141
|
+
.replace(/>/gi, '>'); // replace with < and > to render HTML in Angular
|
|
142
|
+
this.copyContent = codeToParse;
|
|
143
|
+
// Parse code with highlight.js depending on language
|
|
144
|
+
const highlightedCode = hljs.highlight(this._lang, codeToParse, true);
|
|
145
|
+
highlightedCode.value = highlightedCode.value
|
|
146
|
+
.replace(/=<span class="hljs-value">""<\/span>/gi, '')
|
|
147
|
+
.replace('<head>', '')
|
|
148
|
+
.replace('<head/>', '');
|
|
149
|
+
return highlightedCode.value;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
TdHighlightComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TdHighlightComponent, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i1.DomSanitizer }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
153
|
+
TdHighlightComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: TdHighlightComponent, selector: "td-highlight", inputs: { content: "content", copyCodeToClipboard: "copyCodeToClipboard", copyCodeTooltips: "copyCodeTooltips", codeLang: "codeLang", lang: "lang" }, outputs: { contentReady: "contentReady" }, viewQueries: [{ propertyName: "highlightComp", first: true, predicate: ["highlightComponent"], descendants: true }, { propertyName: "copyComp", first: true, predicate: ["copyComponent"], descendants: true }, { propertyName: "tooltip", first: true, predicate: ["tooltip"], descendants: true }], ngImport: i0, template: "<div>\n <div #highlightComponent>\n <ng-content></ng-content>\n </div>\n\n <div #copyComponent *ngIf=\"copyCodeToClipboard\">\n <td-copy-code-button\n [copiedContent]=\"copyContent\"\n [copyCodeToClipboard]=\"copyCodeToClipboard\"\n [copyCodeTooltips]=\"copyCodeTooltips\"\n ></td-copy-code-button>\n </div>\n</div>\n", styles: [":host ::ng-deep{overflow-x:auto;padding:16px;display:flex}:host ::ng-deep pre,:host ::ng-deep code,:host ::ng-deep .highlight{font-family:Menlo,Monaco,Andale Mono,lucida console,Courier New,monospace}:host ::ng-deep pre{display:block;overflow-x:auto;padding:0;margin:0;background:transparent;font-family:Menlo,Monaco,Andale Mono,lucida console,Courier New,monospace;line-height:1.45;-moz-tab-size:2;tab-size:2;-webkit-font-smoothing:auto;-webkit-text-size-adjust:none;text-size-adjust:none;position:relative;border-radius:2px;font-size:.8rem;width:100%}:host ::ng-deep code{margin:0;padding:0;overflow-wrap:break-word;white-space:pre-wrap}:host ::ng-deep .highlight{display:block;overflow-wrap:break-word;line-height:1.5;margin:0}:host ::ng-deep .copy-button{border:none;background:inherit;margin-top:-8px;margin-right:-8px}\n"], components: [{ type: i2.TdCopyCodeButtonComponent, selector: "td-copy-code-button", inputs: ["copiedContent", "copyCodeToClipboard", "copyCodeTooltips"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
154
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TdHighlightComponent, decorators: [{
|
|
155
|
+
type: Component,
|
|
156
|
+
args: [{ selector: 'td-highlight', template: "<div>\n <div #highlightComponent>\n <ng-content></ng-content>\n </div>\n\n <div #copyComponent *ngIf=\"copyCodeToClipboard\">\n <td-copy-code-button\n [copiedContent]=\"copyContent\"\n [copyCodeToClipboard]=\"copyCodeToClipboard\"\n [copyCodeTooltips]=\"copyCodeTooltips\"\n ></td-copy-code-button>\n </div>\n</div>\n", styles: [":host ::ng-deep{overflow-x:auto;padding:16px;display:flex}:host ::ng-deep pre,:host ::ng-deep code,:host ::ng-deep .highlight{font-family:Menlo,Monaco,Andale Mono,lucida console,Courier New,monospace}:host ::ng-deep pre{display:block;overflow-x:auto;padding:0;margin:0;background:transparent;font-family:Menlo,Monaco,Andale Mono,lucida console,Courier New,monospace;line-height:1.45;-moz-tab-size:2;tab-size:2;-webkit-font-smoothing:auto;-webkit-text-size-adjust:none;text-size-adjust:none;position:relative;border-radius:2px;font-size:.8rem;width:100%}:host ::ng-deep code{margin:0;padding:0;overflow-wrap:break-word;white-space:pre-wrap}:host ::ng-deep .highlight{display:block;overflow-wrap:break-word;line-height:1.5;margin:0}:host ::ng-deep .copy-button{border:none;background:inherit;margin-top:-8px;margin-right:-8px}\n"] }]
|
|
157
|
+
}], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i1.DomSanitizer }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { content: [{
|
|
158
|
+
type: Input
|
|
159
|
+
}], copyCodeToClipboard: [{
|
|
160
|
+
type: Input
|
|
161
|
+
}], copyCodeTooltips: [{
|
|
162
|
+
type: Input
|
|
163
|
+
}], codeLang: [{
|
|
164
|
+
type: Input
|
|
165
|
+
}], lang: [{
|
|
166
|
+
type: Input
|
|
167
|
+
}], contentReady: [{
|
|
168
|
+
type: Output
|
|
169
|
+
}], highlightComp: [{
|
|
170
|
+
type: ViewChild,
|
|
171
|
+
args: ['highlightComponent']
|
|
172
|
+
}], copyComp: [{
|
|
173
|
+
type: ViewChild,
|
|
174
|
+
args: ['copyComponent']
|
|
175
|
+
}], tooltip: [{
|
|
176
|
+
type: ViewChild,
|
|
177
|
+
args: ['tooltip']
|
|
178
|
+
}] } });
|
|
179
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlnaGxpZ2h0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1oaWdobGlnaHQvc3JjL2xpYi9oaWdobGlnaHQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWhpZ2hsaWdodC9zcmMvbGliL2hpZ2hsaWdodC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULFVBQVUsRUFDVixLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixTQUFTLEVBQ1QsZUFBZSxFQUNmLFNBQVMsRUFDVCxpQkFBaUIsR0FFbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7Ozs7QUFJdkQsOEJBQThCO0FBQzlCLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0FBT2hELE1BQU0sT0FBTyxvQkFBb0I7SUF1RS9CLFlBQ1UsU0FBb0IsRUFDcEIsV0FBdUIsRUFDdkIsYUFBMkIsRUFDM0IsR0FBc0I7UUFIdEIsY0FBUyxHQUFULFNBQVMsQ0FBVztRQUNwQixnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQUN2QixrQkFBYSxHQUFiLGFBQWEsQ0FBYztRQUMzQixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQTFFeEIsaUJBQVksR0FBRyxLQUFLLENBQUM7UUFHckIsVUFBSyxHQUFHLFlBQVksQ0FBQztRQWtCN0I7Ozs7V0FJRztRQUNNLHdCQUFtQixHQUFJLEtBQUssQ0FBQztRQUV0Qzs7OztXQUlHO1FBQ00scUJBQWdCLEdBQXVCLEVBQUUsQ0FBQztRQTJCbkQ7OztXQUdHO1FBQ08saUJBQVksR0FBdUIsSUFBSSxZQUFZLEVBQVEsQ0FBQztJQVduRSxDQUFDO0lB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U0FBUyxFQUFFLElBQUksQ0FBQzthQUN4QixPQUFPLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQzthQUN4QixPQUFPLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQzthQUN0QixPQUFPLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsaURBQWlEO1FBQzVFLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1FBQy9CLHFEQUFxRDtRQUNyRCxNQUFNLGVBQWUsR0FBUSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzNFLGVBQWUsQ0FBQyxLQUFLLEdBQUcsZUFBZSxDQUFDLEtBQUs7YUFDMUMsT0FBTyxDQUFDLHdDQUF3QyxFQUFFLEVBQUUsQ0FBQzthQUNyRCxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQzthQUNyQixPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzFCLE9BQU8sZUFBZSxDQUFDLEtBQUssQ0FBQztJQUMvQixDQUFDOztpSEFuTFUsb0JBQW9CO3FHQUFwQixvQkFBb0IsMmhCQzFCakMsMlZBYUE7MkZEYWEsb0JBQW9CO2tCQUxoQyxTQUFTOytCQUNFLGNBQWM7b0xBbUJwQixPQUFPO3NCQURWLEtBQUs7Z0JBYUcsbUJBQW1CO3NCQUEzQixLQUFLO2dCQU9HLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFZRixRQUFRO3NCQURYLEtBQUs7Z0JBTUYsSUFBSTtzQkFEUCxLQUFLO2dCQWVJLFlBQVk7c0JBQXJCLE1BQU07Z0JBQzBCLGFBQWE7c0JBQTdDLFNBQVM7dUJBQUMsb0JBQW9CO2dCQUNILFFBQVE7c0JBQW5DLFNBQVM7dUJBQUMsZUFBZTtnQkFFSixPQUFPO3NCQUE1QixTQUFTO3VCQUFDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEFmdGVyVmlld0luaXQsXG4gIEVsZW1lbnRSZWYsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgUmVuZGVyZXIyLFxuICBTZWN1cml0eUNvbnRleHQsXG4gIFZpZXdDaGlsZCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIEFmdGVyVmlld0NoZWNrZWQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBNYXRUb29sdGlwIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XG5pbXBvcnQgeyBJQ29weUNvZGVUb29sdGlwcyB9IGZyb20gJy4vY29weS1jb2RlLWJ1dHRvbi9jb3B5LWNvZGUtYnV0dG9uLmNvbXBvbmVudCc7XG5cbmRlY2xhcmUgY29uc3QgcmVxdWlyZTogYW55O1xuLyogdHNsaW50OmRpc2FibGUtbmV4dC1saW5lICovXG5jb25zdCBobGpzID0gcmVxdWlyZSgnaGlnaGxpZ2h0LmpzL2xpYi9jb21tb24nKTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndGQtaGlnaGxpZ2h0JyxcbiAgc3R5bGVVcmxzOiBbJy4vaGlnaGxpZ2h0LmNvbXBvbmVudC5zY3NzJ10sXG4gIHRlbXBsYXRlVXJsOiAnLi9oaWdobGlnaHQuY29tcG9uZW50Lmh0bWwnLFxufSlcbmV4cG9ydCBjbGFzcyBUZEhpZ2hsaWdodENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIEFmdGVyVmlld0NoZWNrZWQge1xuICBwcml2YXRlIF9pbml0aWFsaXplZCA9IGZhbHNlO1xuXG4gIHByaXZhdGUgX2NvbnRlbnQhOiBzdHJpbmc7XG4gIHByaXZhdGUgX2xhbmcgPSAndHlwZXNjcmlwdCc7XG5cbiAgLyoqXG4gICAqIGNvbnRlbnQ/OiBzdHJpbmdcbiAgICpcbiAgICogQ29kZSBjb250ZW50IHRvIGJlIHBhcnNlZCBhcyBoaWdobGlnaHRlZCBodG1sLlxuICAgKiBVc2VkIHRvIGxvYWQgZGF0YSBkeW5hbWljYWxseS5cbiAgICpcbiAgICogZS5nLiBgLmh0bWxgLCBgLnRzYCAsIGV0Yy5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHNldCBjb250ZW50KGNvbnRlbnQ6IHN0cmluZykge1xuICAgIHRoaXMuX2NvbnRlbnQgPSBjb250ZW50O1xuICAgIGlmICh0aGlzLl9pbml0aWFsaXplZCkge1xuICAgICAgdGhpcy5fbG9hZENvbnRlbnQodGhpcy5fY29udGVudCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGNvcHlDb2RlVG9DbGlwYm9hcmQ/OiBib29sZWFuXG4gICAqXG4gICAqIERpc3BsYXkgY29weSBidXR0b24gb24gY29kZSBzbmlwcGV0cyB0byBjb3B5IGNvZGUgdG8gY2xpcGJvYXJkLlxuICAgKi9cbiAgQElucHV0KCkgY29weUNvZGVUb0NsaXBib2FyZD8gPSBmYWxzZTtcblxuICAvKipcbiAgICogY29weUNvZGVUb29sdGlwcz86IElDb3B5Q29kZVRvb2x0aXBzXG4gICAqXG4gICAqIFRvb2x0aXBzIGZvciBjb3B5IGJ1dHRvbiB0byBjb3B5IGFuZCB1cG9uIGNvcHlpbmcuXG4gICAqL1xuICBASW5wdXQoKSBjb3B5Q29kZVRvb2x0aXBzPzogSUNvcHlDb2RlVG9vbHRpcHMgPSB7fTtcblxuICAvKipcbiAgICogbGFuZz86IHN0cmluZ1xuICAgKlxuICAgKiBMYW5ndWFnZSBvZiB0aGUgY29kZSBjb250ZW50IHRvIGJlIHBhcnNlZCBhcyBoaWdobGlnaHRlZCBodG1sLlxuICAgKiBEZWZhdWx0cyB0byBgdHlwZXNjcmlwdGBcbiAgICpcbiAgICogZS5nLiBgdHlwZXNjcmlwdGAsIGBodG1sYCAsIGV0Yy5cbiAgICovXG5cbiAgQElucHV0KClcbiAgc2V0IGNvZGVMYW5nKGxhbmc6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TGFuZ3VhZ2UobGFuZyk7XG4gIH1cbiAgLyoqIEBkZXByZWNhdGVkIC0gcmVtb3ZlZCBjb21wbGV0ZWx5IEA0LjAuMCAqL1xuICBASW5wdXQoKVxuICBzZXQgbGFuZyhsYW5nOiBzdHJpbmcpIHtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWNvbnNvbGVcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICAnREVQUkVDQVRJT04gV0FSTklORzogc3dpdGNoIHRvIGNvZGVMYW5nIGF0dHJpYnV0ZSBhcyBsYW5nIGF0dHJpYnV0ZSBpcyBkZXByZWNhdGVkLidcbiAgICApO1xuICAgIHRoaXMuc2V0TGFuZ3VhZ2UobGFuZyk7XG4gIH1cblxuICBjb3B5Q29udGVudCE6IHN0cmluZztcblxuICAvKipcbiAgICogY29udGVudFJlYWR5PzogZnVuY3Rpb25cbiAgICogRXZlbnQgZW1pdHRlZCBhZnRlciB0aGUgaGlnaGxpZ2h0IGNvbnRlbnQgcmVuZGVyaW5nIGlzIGZpbmlzaGVkLlxuICAgKi9cbiAgQE91dHB1dCgpIGNvbnRlbnRSZWFkeTogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAVmlld0NoaWxkKCdoaWdobGlnaHRDb21wb25lbnQnKSBoaWdobGlnaHRDb21wITogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnY29weUNvbXBvbmVudCcpIGNvcHlDb21wITogRWxlbWVudFJlZjtcblxuICBAVmlld0NoaWxkKCd0b29sdGlwJykgdG9vbHRpcCE6IE1hdFRvb2x0aXA7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgX2RvbVNhbml0aXplcjogRG9tU2FuaXRpemVyLFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHt9XG5cbiAgbmdBZnRlclZpZXdDaGVja2VkKCk6IHZvaWQge1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2NvbnRlbnQpIHtcbiAgICAgIHRoaXMuX2xvYWRDb250ZW50KFxuICAgICAgICAoPEhUTUxFbGVtZW50PnRoaXMuaGlnaGxpZ2h0Q29tcC5uYXRpdmVFbGVtZW50KS50ZXh0Q29udGVudFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbG9hZENvbnRlbnQodGhpcy5fY29udGVudCk7XG4gICAgfVxuICAgIHRoaXMuX2luaXRpYWxpemVkID0gdHJ1ZTtcbiAgfVxuXG4gIHNldExhbmd1YWdlKGxhbmc6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghbGFuZykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnRXJyb3I6IGxhbmd1YWdlIGF0dHJpYnV0ZSBtdXN0IGJlIGRlZmluZWQgaW4gVGRIaWdobGlnaHRDb21wb25lbnQuJ1xuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5fbGFuZyA9IGxhbmc7XG4gICAgaWYgKHRoaXMuX2luaXRpYWxpemVkKSB7XG4gICAgICB0aGlzLl9sb2FkQ29udGVudCh0aGlzLl9jb250ZW50KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhbCBtZXRob2QgdG8gcGFyc2UgYSBzdHJpbmcgb2YgY29kZSBpbnRvIEhUTUwgRWxlbWVudHMgYW5kIGxvYWQgdGhlbSBpbnRvIHRoZSBjb250YWluZXJcbiAgICovXG4gIHByaXZhdGUgX2xvYWRDb250ZW50KGNvZGU6IHN0cmluZyB8IG51bGwpOiB2b2lkIHtcbiAgICBpZiAoY29kZSAmJiBjb2RlLnRyaW0oKS5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBDbGVhbiBjb250YWluZXJcbiAgICAgIHRoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KFxuICAgICAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICdpbm5lckhUTUwnLFxuICAgICAgICAnJ1xuICAgICAgKTtcbiAgICAgIC8vIFBhcnNlIGh0bWwgc3RyaW5nIGludG8gYWN0dWFsIEhUTUwgZWxlbWVudHMuXG4gICAgICB0aGlzLl9lbGVtZW50RnJvbVN0cmluZyh0aGlzLl9yZW5kZXIoY29kZSkpO1xuICAgICAgaWYgKHRoaXMuY29weUNvZGVUb0NsaXBib2FyZCkge1xuICAgICAgICB0aGlzLl9yZW5kZXJlci5hcHBlbmRDaGlsZChcbiAgICAgICAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgdGhpcy5jb3B5Q29tcC5uYXRpdmVFbGVtZW50XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuY29udGVudFJlYWR5LmVtaXQoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2VsZW1lbnRGcm9tU3RyaW5nKGNvZGVTdHI6IHN0cmluZyk6IEhUTUxQcmVFbGVtZW50IHtcbiAgICAvLyBSZW5kZXJlcjIgZG9lc250IGhhdmUgYSBwYXJzaW5nIG1ldGhvZCwgc28gd2UgaGF2ZSB0byBzYW5pdGl6ZSBhbmQgdXNlIFtpbm5lckhUTUxdXG4gICAgLy8gdG8gcGFyc2UgdGhlIHN0cmluZyBpbnRvIERPTSBlbGVtZW50IGZvciBub3cuXG4gICAgY29uc3QgcHJlRWxlbWVudDogSFRNTFByZUVsZW1lbnQgPSB0aGlzLl9yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdwcmUnKTtcbiAgICB0aGlzLl9yZW5kZXJlci5hcHBlbmRDaGlsZCh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIHByZUVsZW1lbnQpO1xuICAgIGNvbnN0IGNvZGVFbGVtZW50OiBIVE1MRWxlbWVudCA9IHRoaXMuX3JlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ2NvZGUnKTtcbiAgICB0aGlzLl9yZW5kZXJlci5hcHBlbmRDaGlsZChwcmVFbGVtZW50LCBjb2RlRWxlbWVudCk7XG4gICAgLy8gU2V0IC5oaWdobGlnaHQgY2xhc3MgaW50byA8Y29kZT4gZWxlbWVudFxuICAgIHRoaXMuX3JlbmRlcmVyLmFkZENsYXNzKGNvZGVFbGVtZW50LCAnaGlnaGxpZ2h0Jyk7XG4gICAgY29kZUVsZW1lbnQuaW5uZXJIVE1MID1cbiAgICAgIHRoaXMuX2RvbVNhbml0aXplci5zYW5pdGl6ZShTZWN1cml0eUNvbnRleHQuSFRNTCwgY29kZVN0cikgPz8gJyc7XG4gICAgcmV0dXJuIHByZUVsZW1lbnQ7XG4gIH1cblxuICBwcml2YXRlIF9yZW5kZXIoY29udGVudHM6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgLy8gVHJpbSBsZWFkaW5nIGFuZCB0cmFpbGluZyBuZXdsaW5lc1xuICAgIGNvbnRlbnRzID0gY29udGVudHNcbiAgICAgIC5yZXBsYWNlKC9eKFxcc3xcXHQpKlxcbisvZywgJycpXG4gICAgICAucmVwbGFjZSgvKFxcc3xcXHQpKlxcbisoXFxzfFxcdCkqJC9nLCAnJyk7XG4gICAgLy8gU3BsaXQgbWFya3VwIGJ5IGxpbmUgY2hhcmFjdGVyc1xuICAgIGxldCBsaW5lczogc3RyaW5nW10gPSBjb250ZW50cy5zcGxpdCgnXFxuJyk7XG5cbiAgICAvLyBjaGVjayBob3cgbXVjaCBpbmRlbnRhdGlvbiBpcyB1c2VkIGJ5IHRoZSBmaXJzdCBhY3R1YWwgY29kZSBsaW5lXG4gICAgY29uc3QgZmlyc3RMaW5lV2hpdGVzcGFjZU1hdGNoID0gbGluZXNbMF0ubWF0Y2goL14oXFxzfFxcdCkqLyk7XG4gICAgY29uc3QgZmlyc3RMaW5lV2hpdGVzcGFjZSA9IGZpcnN0TGluZVdoaXRlc3BhY2VNYXRjaFxuICAgICAgPyBmaXJzdExpbmVXaGl0ZXNwYWNlTWF0Y2hbMF1cbiAgICAgIDogbnVsbDtcblxuICAgIC8vIFJlbW92ZSBhbGwgaW5kZW50YXRpb24gc3BhY2VzIHNvIGNvZGUgY2FuIGJlIHBhcnNlZCBjb3JyZWN0bHlcbiAgICBjb25zdCBzdGFydGluZ1doaXRlc3BhY2VSZWdleCA9IG5ldyBSZWdFeHAoJ14nICsgZmlyc3RMaW5lV2hpdGVzcGFjZSk7XG4gICAgbGluZXMgPSBsaW5lcy5tYXAoZnVuY3Rpb24gKGxpbmU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICByZXR1cm4gbGluZVxuICAgICAgICAucmVwbGFjZSgnPVwiXCInLCAnJykgLy8gcmVtb3ZlIGVtcHR5IHZhbHVlc1xuICAgICAgICAucmVwbGFjZShzdGFydGluZ1doaXRlc3BhY2VSZWdleCwgJycpXG4gICAgICAgIC5yZXBsYWNlKC9cXHMrJC8sICcnKTsgLy8gcmVtb3ZlIHRyYWlsaW5nIHdoaXRlIHNwYWNlc1xuICAgIH0pO1xuXG4gICAgY29uc3QgY29kZVRvUGFyc2U6IHN0cmluZyA9IGxpbmVzXG4gICAgICAuam9pbignXFxuJylcbiAgICAgIC5yZXBsYWNlKC9cXHsgXFx7L2dpLCAne3snKVxuICAgICAgLnJlcGxhY2UoL1xcfSBcXH0vZ2ksICd9fScpXG4gICAgICAucmVwbGFjZSgvJmx0Oy9naSwgJzwnKVxuICAgICAgLnJlcGxhY2UoLyZndDsvZ2ksICc+Jyk7IC8vIHJlcGxhY2Ugd2l0aCA8IGFuZCA+IHRvIHJlbmRlciBIVE1MIGluIEFuZ3VsYXJcbiAgICB0aGlzLmNvcHlDb250ZW50ID0gY29kZVRvUGFyc2U7XG4gICAgLy8gUGFyc2UgY29kZSB3aXRoIGhpZ2hsaWdodC5qcyBkZXBlbmRpbmcgb24gbGFuZ3VhZ2VcbiAgICBjb25zdCBoaWdobGlnaHRlZENvZGU6IGFueSA9IGhsanMuaGlnaGxpZ2h0KHRoaXMuX2xhbmcsIGNvZGVUb1BhcnNlLCB0cnVlKTtcbiAgICBoaWdobGlnaHRlZENvZGUudmFsdWUgPSBoaWdobGlnaHRlZENvZGUudmFsdWVcbiAgICAgIC5yZXBsYWNlKC89PHNwYW4gY2xhc3M9XCJobGpzLXZhbHVlXCI+XCJcIjxcXC9zcGFuPi9naSwgJycpXG4gICAgICAucmVwbGFjZSgnPGhlYWQ+JywgJycpXG4gICAgICAucmVwbGFjZSgnPGhlYWQvPicsICcnKTtcbiAgICByZXR1cm4gaGlnaGxpZ2h0ZWRDb2RlLnZhbHVlO1xuICB9XG59XG4iLCI8ZGl2PlxuICA8ZGl2ICNoaWdobGlnaHRDb21wb25lbnQ+XG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICA8L2Rpdj5cblxuICA8ZGl2ICNjb3B5Q29tcG9uZW50ICpuZ0lmPVwiY29weUNvZGVUb0NsaXBib2FyZFwiPlxuICAgIDx0ZC1jb3B5LWNvZGUtYnV0dG9uXG4gICAgICBbY29waWVkQ29udGVudF09XCJjb3B5Q29udGVudFwiXG4gICAgICBbY29weUNvZGVUb0NsaXBib2FyZF09XCJjb3B5Q29kZVRvQ2xpcGJvYXJkXCJcbiAgICAgIFtjb3B5Q29kZVRvb2x0aXBzXT1cImNvcHlDb2RlVG9vbHRpcHNcIlxuICAgID48L3RkLWNvcHktY29kZS1idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { ClipboardModule } from '@angular/cdk/clipboard';
|
|
4
|
+
import { TdHighlightComponent } from './highlight.component';
|
|
5
|
+
import { MatIconModule } from '@angular/material/icon';
|
|
6
|
+
import { MatTooltipModule } from '@angular/material/tooltip';
|
|
7
|
+
import { MatButtonModule } from '@angular/material/button';
|
|
8
|
+
import { TdCopyCodeButtonComponent } from './copy-code-button/copy-code-button.component';
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
export class CovalentHighlightModule {
|
|
11
|
+
}
|
|
12
|
+
CovalentHighlightModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: CovalentHighlightModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
13
|
+
CovalentHighlightModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: CovalentHighlightModule, declarations: [TdHighlightComponent, TdCopyCodeButtonComponent], imports: [CommonModule,
|
|
14
|
+
ClipboardModule,
|
|
15
|
+
MatIconModule,
|
|
16
|
+
MatTooltipModule,
|
|
17
|
+
MatButtonModule], exports: [TdHighlightComponent] });
|
|
18
|
+
CovalentHighlightModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: CovalentHighlightModule, imports: [[
|
|
19
|
+
CommonModule,
|
|
20
|
+
ClipboardModule,
|
|
21
|
+
MatIconModule,
|
|
22
|
+
MatTooltipModule,
|
|
23
|
+
MatButtonModule,
|
|
24
|
+
]] });
|
|
25
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: CovalentHighlightModule, decorators: [{
|
|
26
|
+
type: NgModule,
|
|
27
|
+
args: [{
|
|
28
|
+
imports: [
|
|
29
|
+
CommonModule,
|
|
30
|
+
ClipboardModule,
|
|
31
|
+
MatIconModule,
|
|
32
|
+
MatTooltipModule,
|
|
33
|
+
MatButtonModule,
|
|
34
|
+
],
|
|
35
|
+
declarations: [TdHighlightComponent, TdCopyCodeButtonComponent],
|
|
36
|
+
exports: [TdHighlightComponent],
|
|
37
|
+
}]
|
|
38
|
+
}] });
|
|
39
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlnaGxpZ2h0Lm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1oaWdobGlnaHQvc3JjL2xpYi9oaWdobGlnaHQubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLCtDQUErQyxDQUFDOztBQWExRixNQUFNLE9BQU8sdUJBQXVCOztvSEFBdkIsdUJBQXVCO3FIQUF2Qix1QkFBdUIsaUJBSG5CLG9CQUFvQixFQUFFLHlCQUF5QixhQU41RCxZQUFZO1FBQ1osZUFBZTtRQUNmLGFBQWE7UUFDYixnQkFBZ0I7UUFDaEIsZUFBZSxhQUdQLG9CQUFvQjtxSEFFbkIsdUJBQXVCLFlBVnpCO1lBQ1AsWUFBWTtZQUNaLGVBQWU7WUFDZixhQUFhO1lBQ2IsZ0JBQWdCO1lBQ2hCLGVBQWU7U0FDaEI7MkZBSVUsdUJBQXVCO2tCQVhuQyxRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRTt3QkFDUCxZQUFZO3dCQUNaLGVBQWU7d0JBQ2YsYUFBYTt3QkFDYixnQkFBZ0I7d0JBQ2hCLGVBQWU7cUJBQ2hCO29CQUNELFlBQVksRUFBRSxDQUFDLG9CQUFvQixFQUFFLHlCQUF5QixDQUFDO29CQUMvRCxPQUFPLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQztpQkFDaEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENsaXBib2FyZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jbGlwYm9hcmQnO1xuaW1wb3J0IHsgVGRIaWdobGlnaHRDb21wb25lbnQgfSBmcm9tICcuL2hpZ2hsaWdodC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IFRkQ29weUNvZGVCdXR0b25Db21wb25lbnQgfSBmcm9tICcuL2NvcHktY29kZS1idXR0b24vY29weS1jb2RlLWJ1dHRvbi5jb21wb25lbnQnO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIENsaXBib2FyZE1vZHVsZSxcbiAgICBNYXRJY29uTW9kdWxlLFxuICAgIE1hdFRvb2x0aXBNb2R1bGUsXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxuICBdLFxuICBkZWNsYXJhdGlvbnM6IFtUZEhpZ2hsaWdodENvbXBvbmVudCwgVGRDb3B5Q29kZUJ1dHRvbkNvbXBvbmVudF0sXG4gIGV4cG9ydHM6IFtUZEhpZ2hsaWdodENvbXBvbmVudF0sXG59KVxuZXhwb3J0IGNsYXNzIENvdmFsZW50SGlnaGxpZ2h0TW9kdWxlIHt9XG4iXX0=
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export * from './lib/highlight.component';
|
|
2
|
+
export * from './lib/highlight.module';
|
|
3
|
+
export * from './lib/copy-code-button/copy-code-button.component';
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1oaWdobGlnaHQvc3JjL3B1YmxpY19hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsbURBQW1ELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2xpYi9oaWdobGlnaHQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2hpZ2hsaWdodC5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29weS1jb2RlLWJ1dHRvbi9jb3B5LWNvZGUtYnV0dG9uLmNvbXBvbmVudCc7XG4iXX0=
|
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { Component, Input, ViewChild, HostListener, EventEmitter, SecurityContext, Output, NgModule } from '@angular/core';
|
|
3
|
+
import * as i1$1 from '@angular/platform-browser';
|
|
4
|
+
import * as i1 from '@angular/material/button';
|
|
5
|
+
import { MatButtonModule } from '@angular/material/button';
|
|
6
|
+
import * as i2 from '@angular/material/icon';
|
|
7
|
+
import { MatIconModule } from '@angular/material/icon';
|
|
8
|
+
import * as i3 from '@angular/cdk/clipboard';
|
|
9
|
+
import { ClipboardModule } from '@angular/cdk/clipboard';
|
|
10
|
+
import * as i4 from '@angular/material/tooltip';
|
|
11
|
+
import { MatTooltipModule } from '@angular/material/tooltip';
|
|
12
|
+
import * as i3$1 from '@angular/common';
|
|
13
|
+
import { CommonModule } from '@angular/common';
|
|
14
|
+
|
|
15
|
+
class TdCopyCodeButtonComponent {
|
|
16
|
+
constructor() {
|
|
17
|
+
this.copyCodeToClipboard = false;
|
|
18
|
+
/**
|
|
19
|
+
* copyCodeTooltips?: ICopyCodeTooltips
|
|
20
|
+
*
|
|
21
|
+
* Tooltips for copy button to copy and upon copying.
|
|
22
|
+
*/
|
|
23
|
+
this.copyCodeTooltips = {};
|
|
24
|
+
}
|
|
25
|
+
get copyTooltip() {
|
|
26
|
+
return (this.copyCodeTooltips && this.copyCodeTooltips.copy) || 'Copy';
|
|
27
|
+
}
|
|
28
|
+
get copiedTooltip() {
|
|
29
|
+
return (this.copyCodeTooltips && this.copyCodeTooltips.copied) || 'Copied';
|
|
30
|
+
}
|
|
31
|
+
textCopied(event) {
|
|
32
|
+
if (event) {
|
|
33
|
+
this.tooltip.hide();
|
|
34
|
+
this.tooltip.message = this.copiedTooltip;
|
|
35
|
+
this.tooltip.show();
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
initializeTooltip() {
|
|
39
|
+
setTimeout(() => {
|
|
40
|
+
this.tooltip.message = this.copyTooltip;
|
|
41
|
+
}, 200);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
TdCopyCodeButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TdCopyCodeButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
45
|
+
TdCopyCodeButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: TdCopyCodeButtonComponent, selector: "td-copy-code-button", inputs: { copiedContent: "copiedContent", copyCodeToClipboard: "copyCodeToClipboard", copyCodeTooltips: "copyCodeTooltips" }, host: { listeners: { "mouseleave": "initializeTooltip()" } }, viewQueries: [{ propertyName: "tooltip", first: true, predicate: ["tooltip"], descendants: true }], ngImport: i0, template: "<button\n mat-icon-button\n [cdkCopyToClipboard]=\"copiedContent\"\n class=\"copy-button\"\n [matTooltip]=\"copyTooltip\"\n #tooltip=\"matTooltip\"\n (cdkCopyToClipboardCopied)=\"textCopied($event)\"\n>\n <mat-icon role=\"img\">content_copy</mat-icon>\n</button>\n", styles: [""], components: [{ type: i1.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i3.CdkCopyToClipboard, selector: "[cdkCopyToClipboard]", inputs: ["cdkCopyToClipboard", "cdkCopyToClipboardAttempts"], outputs: ["cdkCopyToClipboardCopied"] }, { type: i4.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }] });
|
|
46
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TdCopyCodeButtonComponent, decorators: [{
|
|
47
|
+
type: Component,
|
|
48
|
+
args: [{ selector: 'td-copy-code-button', template: "<button\n mat-icon-button\n [cdkCopyToClipboard]=\"copiedContent\"\n class=\"copy-button\"\n [matTooltip]=\"copyTooltip\"\n #tooltip=\"matTooltip\"\n (cdkCopyToClipboardCopied)=\"textCopied($event)\"\n>\n <mat-icon role=\"img\">content_copy</mat-icon>\n</button>\n", styles: [""] }]
|
|
49
|
+
}], propDecorators: { copiedContent: [{
|
|
50
|
+
type: Input
|
|
51
|
+
}], copyCodeToClipboard: [{
|
|
52
|
+
type: Input
|
|
53
|
+
}], copyCodeTooltips: [{
|
|
54
|
+
type: Input
|
|
55
|
+
}], tooltip: [{
|
|
56
|
+
type: ViewChild,
|
|
57
|
+
args: ['tooltip']
|
|
58
|
+
}], initializeTooltip: [{
|
|
59
|
+
type: HostListener,
|
|
60
|
+
args: ['mouseleave']
|
|
61
|
+
}] } });
|
|
62
|
+
|
|
63
|
+
/* tslint:disable-next-line */
|
|
64
|
+
const hljs = require('highlight.js/lib/common');
|
|
65
|
+
class TdHighlightComponent {
|
|
66
|
+
constructor(_renderer, _elementRef, _domSanitizer, cdr) {
|
|
67
|
+
this._renderer = _renderer;
|
|
68
|
+
this._elementRef = _elementRef;
|
|
69
|
+
this._domSanitizer = _domSanitizer;
|
|
70
|
+
this.cdr = cdr;
|
|
71
|
+
this._initialized = false;
|
|
72
|
+
this._lang = 'typescript';
|
|
73
|
+
/**
|
|
74
|
+
* copyCodeToClipboard?: boolean
|
|
75
|
+
*
|
|
76
|
+
* Display copy button on code snippets to copy code to clipboard.
|
|
77
|
+
*/
|
|
78
|
+
this.copyCodeToClipboard = false;
|
|
79
|
+
/**
|
|
80
|
+
* copyCodeTooltips?: ICopyCodeTooltips
|
|
81
|
+
*
|
|
82
|
+
* Tooltips for copy button to copy and upon copying.
|
|
83
|
+
*/
|
|
84
|
+
this.copyCodeTooltips = {};
|
|
85
|
+
/**
|
|
86
|
+
* contentReady?: function
|
|
87
|
+
* Event emitted after the highlight content rendering is finished.
|
|
88
|
+
*/
|
|
89
|
+
this.contentReady = new EventEmitter();
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* content?: string
|
|
93
|
+
*
|
|
94
|
+
* Code content to be parsed as highlighted html.
|
|
95
|
+
* Used to load data dynamically.
|
|
96
|
+
*
|
|
97
|
+
* e.g. `.html`, `.ts` , etc.
|
|
98
|
+
*/
|
|
99
|
+
set content(content) {
|
|
100
|
+
this._content = content;
|
|
101
|
+
if (this._initialized) {
|
|
102
|
+
this._loadContent(this._content);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* lang?: string
|
|
107
|
+
*
|
|
108
|
+
* Language of the code content to be parsed as highlighted html.
|
|
109
|
+
* Defaults to `typescript`
|
|
110
|
+
*
|
|
111
|
+
* e.g. `typescript`, `html` , etc.
|
|
112
|
+
*/
|
|
113
|
+
set codeLang(lang) {
|
|
114
|
+
this.setLanguage(lang);
|
|
115
|
+
}
|
|
116
|
+
/** @deprecated - removed completely @4.0.0 */
|
|
117
|
+
set lang(lang) {
|
|
118
|
+
// tslint:disable-next-line: no-console
|
|
119
|
+
console.warn('DEPRECATION WARNING: switch to codeLang attribute as lang attribute is deprecated.');
|
|
120
|
+
this.setLanguage(lang);
|
|
121
|
+
}
|
|
122
|
+
ngAfterViewChecked() {
|
|
123
|
+
this.cdr.detectChanges();
|
|
124
|
+
}
|
|
125
|
+
ngAfterViewInit() {
|
|
126
|
+
if (!this._content) {
|
|
127
|
+
this._loadContent(this.highlightComp.nativeElement.textContent);
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
this._loadContent(this._content);
|
|
131
|
+
}
|
|
132
|
+
this._initialized = true;
|
|
133
|
+
}
|
|
134
|
+
setLanguage(lang) {
|
|
135
|
+
if (!lang) {
|
|
136
|
+
throw new Error('Error: language attribute must be defined in TdHighlightComponent.');
|
|
137
|
+
}
|
|
138
|
+
this._lang = lang;
|
|
139
|
+
if (this._initialized) {
|
|
140
|
+
this._loadContent(this._content);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* General method to parse a string of code into HTML Elements and load them into the container
|
|
145
|
+
*/
|
|
146
|
+
_loadContent(code) {
|
|
147
|
+
if (code && code.trim().length > 0) {
|
|
148
|
+
// Clean container
|
|
149
|
+
this._renderer.setProperty(this._elementRef.nativeElement, 'innerHTML', '');
|
|
150
|
+
// Parse html string into actual HTML elements.
|
|
151
|
+
this._elementFromString(this._render(code));
|
|
152
|
+
if (this.copyCodeToClipboard) {
|
|
153
|
+
this._renderer.appendChild(this._elementRef.nativeElement, this.copyComp.nativeElement);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
this.contentReady.emit();
|
|
157
|
+
}
|
|
158
|
+
_elementFromString(codeStr) {
|
|
159
|
+
var _a;
|
|
160
|
+
// Renderer2 doesnt have a parsing method, so we have to sanitize and use [innerHTML]
|
|
161
|
+
// to parse the string into DOM element for now.
|
|
162
|
+
const preElement = this._renderer.createElement('pre');
|
|
163
|
+
this._renderer.appendChild(this._elementRef.nativeElement, preElement);
|
|
164
|
+
const codeElement = this._renderer.createElement('code');
|
|
165
|
+
this._renderer.appendChild(preElement, codeElement);
|
|
166
|
+
// Set .highlight class into <code> element
|
|
167
|
+
this._renderer.addClass(codeElement, 'highlight');
|
|
168
|
+
codeElement.innerHTML =
|
|
169
|
+
(_a = this._domSanitizer.sanitize(SecurityContext.HTML, codeStr)) !== null && _a !== void 0 ? _a : '';
|
|
170
|
+
return preElement;
|
|
171
|
+
}
|
|
172
|
+
_render(contents) {
|
|
173
|
+
// Trim leading and trailing newlines
|
|
174
|
+
contents = contents
|
|
175
|
+
.replace(/^(\s|\t)*\n+/g, '')
|
|
176
|
+
.replace(/(\s|\t)*\n+(\s|\t)*$/g, '');
|
|
177
|
+
// Split markup by line characters
|
|
178
|
+
let lines = contents.split('\n');
|
|
179
|
+
// check how much indentation is used by the first actual code line
|
|
180
|
+
const firstLineWhitespaceMatch = lines[0].match(/^(\s|\t)*/);
|
|
181
|
+
const firstLineWhitespace = firstLineWhitespaceMatch
|
|
182
|
+
? firstLineWhitespaceMatch[0]
|
|
183
|
+
: null;
|
|
184
|
+
// Remove all indentation spaces so code can be parsed correctly
|
|
185
|
+
const startingWhitespaceRegex = new RegExp('^' + firstLineWhitespace);
|
|
186
|
+
lines = lines.map(function (line) {
|
|
187
|
+
return line
|
|
188
|
+
.replace('=""', '') // remove empty values
|
|
189
|
+
.replace(startingWhitespaceRegex, '')
|
|
190
|
+
.replace(/\s+$/, ''); // remove trailing white spaces
|
|
191
|
+
});
|
|
192
|
+
const codeToParse = lines
|
|
193
|
+
.join('\n')
|
|
194
|
+
.replace(/\{ \{/gi, '{{')
|
|
195
|
+
.replace(/\} \}/gi, '}}')
|
|
196
|
+
.replace(/</gi, '<')
|
|
197
|
+
.replace(/>/gi, '>'); // replace with < and > to render HTML in Angular
|
|
198
|
+
this.copyContent = codeToParse;
|
|
199
|
+
// Parse code with highlight.js depending on language
|
|
200
|
+
const highlightedCode = hljs.highlight(this._lang, codeToParse, true);
|
|
201
|
+
highlightedCode.value = highlightedCode.value
|
|
202
|
+
.replace(/=<span class="hljs-value">""<\/span>/gi, '')
|
|
203
|
+
.replace('<head>', '')
|
|
204
|
+
.replace('<head/>', '');
|
|
205
|
+
return highlightedCode.value;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
TdHighlightComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TdHighlightComponent, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i1$1.DomSanitizer }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
209
|
+
TdHighlightComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: TdHighlightComponent, selector: "td-highlight", inputs: { content: "content", copyCodeToClipboard: "copyCodeToClipboard", copyCodeTooltips: "copyCodeTooltips", codeLang: "codeLang", lang: "lang" }, outputs: { contentReady: "contentReady" }, viewQueries: [{ propertyName: "highlightComp", first: true, predicate: ["highlightComponent"], descendants: true }, { propertyName: "copyComp", first: true, predicate: ["copyComponent"], descendants: true }, { propertyName: "tooltip", first: true, predicate: ["tooltip"], descendants: true }], ngImport: i0, template: "<div>\n <div #highlightComponent>\n <ng-content></ng-content>\n </div>\n\n <div #copyComponent *ngIf=\"copyCodeToClipboard\">\n <td-copy-code-button\n [copiedContent]=\"copyContent\"\n [copyCodeToClipboard]=\"copyCodeToClipboard\"\n [copyCodeTooltips]=\"copyCodeTooltips\"\n ></td-copy-code-button>\n </div>\n</div>\n", styles: [":host ::ng-deep{overflow-x:auto;padding:16px;display:flex}:host ::ng-deep pre,:host ::ng-deep code,:host ::ng-deep .highlight{font-family:Menlo,Monaco,Andale Mono,lucida console,Courier New,monospace}:host ::ng-deep pre{display:block;overflow-x:auto;padding:0;margin:0;background:transparent;font-family:Menlo,Monaco,Andale Mono,lucida console,Courier New,monospace;line-height:1.45;-moz-tab-size:2;tab-size:2;-webkit-font-smoothing:auto;-webkit-text-size-adjust:none;text-size-adjust:none;position:relative;border-radius:2px;font-size:.8rem;width:100%}:host ::ng-deep code{margin:0;padding:0;overflow-wrap:break-word;white-space:pre-wrap}:host ::ng-deep .highlight{display:block;overflow-wrap:break-word;line-height:1.5;margin:0}:host ::ng-deep .copy-button{border:none;background:inherit;margin-top:-8px;margin-right:-8px}\n"], components: [{ type: TdCopyCodeButtonComponent, selector: "td-copy-code-button", inputs: ["copiedContent", "copyCodeToClipboard", "copyCodeTooltips"] }], directives: [{ type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
210
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TdHighlightComponent, decorators: [{
|
|
211
|
+
type: Component,
|
|
212
|
+
args: [{ selector: 'td-highlight', template: "<div>\n <div #highlightComponent>\n <ng-content></ng-content>\n </div>\n\n <div #copyComponent *ngIf=\"copyCodeToClipboard\">\n <td-copy-code-button\n [copiedContent]=\"copyContent\"\n [copyCodeToClipboard]=\"copyCodeToClipboard\"\n [copyCodeTooltips]=\"copyCodeTooltips\"\n ></td-copy-code-button>\n </div>\n</div>\n", styles: [":host ::ng-deep{overflow-x:auto;padding:16px;display:flex}:host ::ng-deep pre,:host ::ng-deep code,:host ::ng-deep .highlight{font-family:Menlo,Monaco,Andale Mono,lucida console,Courier New,monospace}:host ::ng-deep pre{display:block;overflow-x:auto;padding:0;margin:0;background:transparent;font-family:Menlo,Monaco,Andale Mono,lucida console,Courier New,monospace;line-height:1.45;-moz-tab-size:2;tab-size:2;-webkit-font-smoothing:auto;-webkit-text-size-adjust:none;text-size-adjust:none;position:relative;border-radius:2px;font-size:.8rem;width:100%}:host ::ng-deep code{margin:0;padding:0;overflow-wrap:break-word;white-space:pre-wrap}:host ::ng-deep .highlight{display:block;overflow-wrap:break-word;line-height:1.5;margin:0}:host ::ng-deep .copy-button{border:none;background:inherit;margin-top:-8px;margin-right:-8px}\n"] }]
|
|
213
|
+
}], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i1$1.DomSanitizer }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { content: [{
|
|
214
|
+
type: Input
|
|
215
|
+
}], copyCodeToClipboard: [{
|
|
216
|
+
type: Input
|
|
217
|
+
}], copyCodeTooltips: [{
|
|
218
|
+
type: Input
|
|
219
|
+
}], codeLang: [{
|
|
220
|
+
type: Input
|
|
221
|
+
}], lang: [{
|
|
222
|
+
type: Input
|
|
223
|
+
}], contentReady: [{
|
|
224
|
+
type: Output
|
|
225
|
+
}], highlightComp: [{
|
|
226
|
+
type: ViewChild,
|
|
227
|
+
args: ['highlightComponent']
|
|
228
|
+
}], copyComp: [{
|
|
229
|
+
type: ViewChild,
|
|
230
|
+
args: ['copyComponent']
|
|
231
|
+
}], tooltip: [{
|
|
232
|
+
type: ViewChild,
|
|
233
|
+
args: ['tooltip']
|
|
234
|
+
}] } });
|
|
235
|
+
|
|
236
|
+
class CovalentHighlightModule {
|
|
237
|
+
}
|
|
238
|
+
CovalentHighlightModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: CovalentHighlightModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
239
|
+
CovalentHighlightModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: CovalentHighlightModule, declarations: [TdHighlightComponent, TdCopyCodeButtonComponent], imports: [CommonModule,
|
|
240
|
+
ClipboardModule,
|
|
241
|
+
MatIconModule,
|
|
242
|
+
MatTooltipModule,
|
|
243
|
+
MatButtonModule], exports: [TdHighlightComponent] });
|
|
244
|
+
CovalentHighlightModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: CovalentHighlightModule, imports: [[
|
|
245
|
+
CommonModule,
|
|
246
|
+
ClipboardModule,
|
|
247
|
+
MatIconModule,
|
|
248
|
+
MatTooltipModule,
|
|
249
|
+
MatButtonModule,
|
|
250
|
+
]] });
|
|
251
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: CovalentHighlightModule, decorators: [{
|
|
252
|
+
type: NgModule,
|
|
253
|
+
args: [{
|
|
254
|
+
imports: [
|
|
255
|
+
CommonModule,
|
|
256
|
+
ClipboardModule,
|
|
257
|
+
MatIconModule,
|
|
258
|
+
MatTooltipModule,
|
|
259
|
+
MatButtonModule,
|
|
260
|
+
],
|
|
261
|
+
declarations: [TdHighlightComponent, TdCopyCodeButtonComponent],
|
|
262
|
+
exports: [TdHighlightComponent],
|
|
263
|
+
}]
|
|
264
|
+
}] });
|
|
265
|
+
|
|
266
|
+
/**
|
|
267
|
+
* Generated bundle index. Do not edit.
|
|
268
|
+
*/
|
|
269
|
+
|
|
270
|
+
export { CovalentHighlightModule, TdCopyCodeButtonComponent, TdHighlightComponent };
|
|
271
|
+
//# sourceMappingURL=covalent-highlight.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"covalent-highlight.mjs","sources":["../../../../libs/angular-highlight/src/lib/copy-code-button/copy-code-button.component.ts","../../../../libs/angular-highlight/src/lib/copy-code-button/copy-code-button.component.html","../../../../libs/angular-highlight/src/lib/highlight.component.ts","../../../../libs/angular-highlight/src/lib/highlight.component.html","../../../../libs/angular-highlight/src/lib/highlight.module.ts","../../../../libs/angular-highlight/src/covalent-highlight.ts"],"sourcesContent":["import { Component, Input, ViewChild, HostListener } from '@angular/core';\nimport { MatTooltip } from '@angular/material/tooltip';\n\nexport interface ICopyCodeTooltips {\n copy?: string;\n copied?: string;\n}\n\n@Component({\n selector: 'td-copy-code-button',\n templateUrl: './copy-code-button.component.html',\n styleUrls: ['./copy-code-button.component.scss'],\n})\nexport class TdCopyCodeButtonComponent {\n // private _copyCodeTooltips: ICopyCodeTooltips = {};\n @Input() copiedContent!: string;\n @Input() copyCodeToClipboard = false;\n /**\n * copyCodeTooltips?: ICopyCodeTooltips\n *\n * Tooltips for copy button to copy and upon copying.\n */\n @Input() copyCodeTooltips?: ICopyCodeTooltips = {};\n\n get copyTooltip(): string {\n return (this.copyCodeTooltips && this.copyCodeTooltips.copy) || 'Copy';\n }\n\n get copiedTooltip(): string {\n return (this.copyCodeTooltips && this.copyCodeTooltips.copied) || 'Copied';\n }\n\n @ViewChild('tooltip') tooltip!: MatTooltip;\n\n textCopied(event: boolean): void {\n if (event) {\n this.tooltip.hide();\n this.tooltip.message = this.copiedTooltip;\n this.tooltip.show();\n }\n }\n @HostListener('mouseleave')\n initializeTooltip(): void {\n setTimeout(() => {\n this.tooltip.message = this.copyTooltip;\n }, 200);\n }\n}\n","<button\n mat-icon-button\n [cdkCopyToClipboard]=\"copiedContent\"\n class=\"copy-button\"\n [matTooltip]=\"copyTooltip\"\n #tooltip=\"matTooltip\"\n (cdkCopyToClipboardCopied)=\"textCopied($event)\"\n>\n <mat-icon role=\"img\">content_copy</mat-icon>\n</button>\n","import {\n Component,\n AfterViewInit,\n ElementRef,\n Input,\n Output,\n EventEmitter,\n Renderer2,\n SecurityContext,\n ViewChild,\n ChangeDetectorRef,\n AfterViewChecked,\n} from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport { ICopyCodeTooltips } from './copy-code-button/copy-code-button.component';\n\ndeclare const require: any;\n/* tslint:disable-next-line */\nconst hljs = require('highlight.js/lib/common');\n\n@Component({\n selector: 'td-highlight',\n styleUrls: ['./highlight.component.scss'],\n templateUrl: './highlight.component.html',\n})\nexport class TdHighlightComponent implements AfterViewInit, AfterViewChecked {\n private _initialized = false;\n\n private _content!: string;\n private _lang = 'typescript';\n\n /**\n * content?: string\n *\n * Code content to be parsed as highlighted html.\n * Used to load data dynamically.\n *\n * e.g. `.html`, `.ts` , etc.\n */\n @Input()\n set content(content: string) {\n this._content = content;\n if (this._initialized) {\n this._loadContent(this._content);\n }\n }\n\n /**\n * copyCodeToClipboard?: boolean\n *\n * Display copy button on code snippets to copy code to clipboard.\n */\n @Input() copyCodeToClipboard? = false;\n\n /**\n * copyCodeTooltips?: ICopyCodeTooltips\n *\n * Tooltips for copy button to copy and upon copying.\n */\n @Input() copyCodeTooltips?: ICopyCodeTooltips = {};\n\n /**\n * lang?: string\n *\n * Language of the code content to be parsed as highlighted html.\n * Defaults to `typescript`\n *\n * e.g. `typescript`, `html` , etc.\n */\n\n @Input()\n set codeLang(lang: string) {\n this.setLanguage(lang);\n }\n /** @deprecated - removed completely @4.0.0 */\n @Input()\n set lang(lang: string) {\n // tslint:disable-next-line: no-console\n console.warn(\n 'DEPRECATION WARNING: switch to codeLang attribute as lang attribute is deprecated.'\n );\n this.setLanguage(lang);\n }\n\n copyContent!: string;\n\n /**\n * contentReady?: function\n * Event emitted after the highlight content rendering is finished.\n */\n @Output() contentReady: EventEmitter<void> = new EventEmitter<void>();\n @ViewChild('highlightComponent') highlightComp!: ElementRef;\n @ViewChild('copyComponent') copyComp!: ElementRef;\n\n @ViewChild('tooltip') tooltip!: MatTooltip;\n\n constructor(\n private _renderer: Renderer2,\n private _elementRef: ElementRef,\n private _domSanitizer: DomSanitizer,\n private cdr: ChangeDetectorRef\n ) {}\n\n ngAfterViewChecked(): void {\n this.cdr.detectChanges();\n }\n\n ngAfterViewInit(): void {\n if (!this._content) {\n this._loadContent(\n (<HTMLElement>this.highlightComp.nativeElement).textContent\n );\n } else {\n this._loadContent(this._content);\n }\n this._initialized = true;\n }\n\n setLanguage(lang: string): void {\n if (!lang) {\n throw new Error(\n 'Error: language attribute must be defined in TdHighlightComponent.'\n );\n }\n this._lang = lang;\n if (this._initialized) {\n this._loadContent(this._content);\n }\n }\n\n /**\n * General method to parse a string of code into HTML Elements and load them into the container\n */\n private _loadContent(code: string | null): void {\n if (code && code.trim().length > 0) {\n // Clean container\n this._renderer.setProperty(\n this._elementRef.nativeElement,\n 'innerHTML',\n ''\n );\n // Parse html string into actual HTML elements.\n this._elementFromString(this._render(code));\n if (this.copyCodeToClipboard) {\n this._renderer.appendChild(\n this._elementRef.nativeElement,\n this.copyComp.nativeElement\n );\n }\n }\n this.contentReady.emit();\n }\n\n private _elementFromString(codeStr: string): HTMLPreElement {\n // Renderer2 doesnt have a parsing method, so we have to sanitize and use [innerHTML]\n // to parse the string into DOM element for now.\n const preElement: HTMLPreElement = this._renderer.createElement('pre');\n this._renderer.appendChild(this._elementRef.nativeElement, preElement);\n const codeElement: HTMLElement = this._renderer.createElement('code');\n this._renderer.appendChild(preElement, codeElement);\n // Set .highlight class into <code> element\n this._renderer.addClass(codeElement, 'highlight');\n codeElement.innerHTML =\n this._domSanitizer.sanitize(SecurityContext.HTML, codeStr) ?? '';\n return preElement;\n }\n\n private _render(contents: string): string {\n // Trim leading and trailing newlines\n contents = contents\n .replace(/^(\\s|\\t)*\\n+/g, '')\n .replace(/(\\s|\\t)*\\n+(\\s|\\t)*$/g, '');\n // Split markup by line characters\n let lines: string[] = contents.split('\\n');\n\n // check how much indentation is used by the first actual code line\n const firstLineWhitespaceMatch = lines[0].match(/^(\\s|\\t)*/);\n const firstLineWhitespace = firstLineWhitespaceMatch\n ? firstLineWhitespaceMatch[0]\n : null;\n\n // Remove all indentation spaces so code can be parsed correctly\n const startingWhitespaceRegex = new RegExp('^' + firstLineWhitespace);\n lines = lines.map(function (line: string): string {\n return line\n .replace('=\"\"', '') // remove empty values\n .replace(startingWhitespaceRegex, '')\n .replace(/\\s+$/, ''); // remove trailing white spaces\n });\n\n const codeToParse: string = lines\n .join('\\n')\n .replace(/\\{ \\{/gi, '{{')\n .replace(/\\} \\}/gi, '}}')\n .replace(/</gi, '<')\n .replace(/>/gi, '>'); // replace with < and > to render HTML in Angular\n this.copyContent = codeToParse;\n // Parse code with highlight.js depending on language\n const highlightedCode: any = hljs.highlight(this._lang, codeToParse, true);\n highlightedCode.value = highlightedCode.value\n .replace(/=<span class=\"hljs-value\">\"\"<\\/span>/gi, '')\n .replace('<head>', '')\n .replace('<head/>', '');\n return highlightedCode.value;\n }\n}\n","<div>\n <div #highlightComponent>\n <ng-content></ng-content>\n </div>\n\n <div #copyComponent *ngIf=\"copyCodeToClipboard\">\n <td-copy-code-button\n [copiedContent]=\"copyContent\"\n [copyCodeToClipboard]=\"copyCodeToClipboard\"\n [copyCodeTooltips]=\"copyCodeTooltips\"\n ></td-copy-code-button>\n </div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ClipboardModule } from '@angular/cdk/clipboard';\nimport { TdHighlightComponent } from './highlight.component';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatButtonModule } from '@angular/material/button';\nimport { TdCopyCodeButtonComponent } from './copy-code-button/copy-code-button.component';\n\n@NgModule({\n imports: [\n CommonModule,\n ClipboardModule,\n MatIconModule,\n MatTooltipModule,\n MatButtonModule,\n ],\n declarations: [TdHighlightComponent, TdCopyCodeButtonComponent],\n exports: [TdHighlightComponent],\n})\nexport class CovalentHighlightModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { Component, Input, ViewChild, HostListener, EventEmitter, SecurityContext, Output, NgModule } from '@angular/core';
|
|
3
|
+
import * as i1$1 from '@angular/platform-browser';
|
|
4
|
+
import * as i4 from '@angular/material/tooltip';
|
|
5
|
+
import { MatTooltipModule } from '@angular/material/tooltip';
|
|
6
|
+
import * as i1 from '@angular/material/button';
|
|
7
|
+
import { MatButtonModule } from '@angular/material/button';
|
|
8
|
+
import * as i2 from '@angular/material/icon';
|
|
9
|
+
import { MatIconModule } from '@angular/material/icon';
|
|
10
|
+
import * as i3 from '@angular/cdk/clipboard';
|
|
11
|
+
import { ClipboardModule } from '@angular/cdk/clipboard';
|
|
12
|
+
import * as i3$1 from '@angular/common';
|
|
13
|
+
import { CommonModule } from '@angular/common';
|
|
14
|
+
|
|
15
|
+
class TdCopyCodeButtonComponent {
|
|
16
|
+
constructor() {
|
|
17
|
+
this.copyCodeToClipboard = false;
|
|
18
|
+
/**
|
|
19
|
+
* copyCodeTooltips?: ICopyCodeTooltips
|
|
20
|
+
*
|
|
21
|
+
* Tooltips for copy button to copy and upon copying.
|
|
22
|
+
*/
|
|
23
|
+
this.copyCodeTooltips = {};
|
|
24
|
+
}
|
|
25
|
+
get copyTooltip() {
|
|
26
|
+
return (this.copyCodeTooltips && this.copyCodeTooltips.copy) || 'Copy';
|
|
27
|
+
}
|
|
28
|
+
get copiedTooltip() {
|
|
29
|
+
return (this.copyCodeTooltips && this.copyCodeTooltips.copied) || 'Copied';
|
|
30
|
+
}
|
|
31
|
+
textCopied(event) {
|
|
32
|
+
if (event) {
|
|
33
|
+
this.tooltip.hide();
|
|
34
|
+
this.tooltip.message = this.copiedTooltip;
|
|
35
|
+
this.tooltip.show();
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
initializeTooltip() {
|
|
39
|
+
setTimeout(() => {
|
|
40
|
+
this.tooltip.message = this.copyTooltip;
|
|
41
|
+
}, 200);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
TdCopyCodeButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TdCopyCodeButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
45
|
+
TdCopyCodeButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: TdCopyCodeButtonComponent, selector: "td-copy-code-button", inputs: { copiedContent: "copiedContent", copyCodeToClipboard: "copyCodeToClipboard", copyCodeTooltips: "copyCodeTooltips" }, host: { listeners: { "mouseleave": "initializeTooltip()" } }, viewQueries: [{ propertyName: "tooltip", first: true, predicate: ["tooltip"], descendants: true }], ngImport: i0, template: "<button\n mat-icon-button\n [cdkCopyToClipboard]=\"copiedContent\"\n class=\"copy-button\"\n [matTooltip]=\"copyTooltip\"\n #tooltip=\"matTooltip\"\n (cdkCopyToClipboardCopied)=\"textCopied($event)\"\n>\n <mat-icon role=\"img\">content_copy</mat-icon>\n</button>\n", styles: [""], components: [{ type: i1.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i3.CdkCopyToClipboard, selector: "[cdkCopyToClipboard]", inputs: ["cdkCopyToClipboard", "cdkCopyToClipboardAttempts"], outputs: ["cdkCopyToClipboardCopied"] }, { type: i4.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }] });
|
|
46
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TdCopyCodeButtonComponent, decorators: [{
|
|
47
|
+
type: Component,
|
|
48
|
+
args: [{ selector: 'td-copy-code-button', template: "<button\n mat-icon-button\n [cdkCopyToClipboard]=\"copiedContent\"\n class=\"copy-button\"\n [matTooltip]=\"copyTooltip\"\n #tooltip=\"matTooltip\"\n (cdkCopyToClipboardCopied)=\"textCopied($event)\"\n>\n <mat-icon role=\"img\">content_copy</mat-icon>\n</button>\n", styles: [""] }]
|
|
49
|
+
}], propDecorators: { copiedContent: [{
|
|
50
|
+
type: Input
|
|
51
|
+
}], copyCodeToClipboard: [{
|
|
52
|
+
type: Input
|
|
53
|
+
}], copyCodeTooltips: [{
|
|
54
|
+
type: Input
|
|
55
|
+
}], tooltip: [{
|
|
56
|
+
type: ViewChild,
|
|
57
|
+
args: ['tooltip']
|
|
58
|
+
}], initializeTooltip: [{
|
|
59
|
+
type: HostListener,
|
|
60
|
+
args: ['mouseleave']
|
|
61
|
+
}] } });
|
|
62
|
+
|
|
63
|
+
/* tslint:disable-next-line */
|
|
64
|
+
const hljs = require('highlight.js/lib/common');
|
|
65
|
+
class TdHighlightComponent {
|
|
66
|
+
constructor(_renderer, _elementRef, _domSanitizer, cdr) {
|
|
67
|
+
this._renderer = _renderer;
|
|
68
|
+
this._elementRef = _elementRef;
|
|
69
|
+
this._domSanitizer = _domSanitizer;
|
|
70
|
+
this.cdr = cdr;
|
|
71
|
+
this._initialized = false;
|
|
72
|
+
this._lang = 'typescript';
|
|
73
|
+
/**
|
|
74
|
+
* copyCodeToClipboard?: boolean
|
|
75
|
+
*
|
|
76
|
+
* Display copy button on code snippets to copy code to clipboard.
|
|
77
|
+
*/
|
|
78
|
+
this.copyCodeToClipboard = false;
|
|
79
|
+
/**
|
|
80
|
+
* copyCodeTooltips?: ICopyCodeTooltips
|
|
81
|
+
*
|
|
82
|
+
* Tooltips for copy button to copy and upon copying.
|
|
83
|
+
*/
|
|
84
|
+
this.copyCodeTooltips = {};
|
|
85
|
+
/**
|
|
86
|
+
* contentReady?: function
|
|
87
|
+
* Event emitted after the highlight content rendering is finished.
|
|
88
|
+
*/
|
|
89
|
+
this.contentReady = new EventEmitter();
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* content?: string
|
|
93
|
+
*
|
|
94
|
+
* Code content to be parsed as highlighted html.
|
|
95
|
+
* Used to load data dynamically.
|
|
96
|
+
*
|
|
97
|
+
* e.g. `.html`, `.ts` , etc.
|
|
98
|
+
*/
|
|
99
|
+
set content(content) {
|
|
100
|
+
this._content = content;
|
|
101
|
+
if (this._initialized) {
|
|
102
|
+
this._loadContent(this._content);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* lang?: string
|
|
107
|
+
*
|
|
108
|
+
* Language of the code content to be parsed as highlighted html.
|
|
109
|
+
* Defaults to `typescript`
|
|
110
|
+
*
|
|
111
|
+
* e.g. `typescript`, `html` , etc.
|
|
112
|
+
*/
|
|
113
|
+
set codeLang(lang) {
|
|
114
|
+
this.setLanguage(lang);
|
|
115
|
+
}
|
|
116
|
+
/** @deprecated - removed completely @4.0.0 */
|
|
117
|
+
set lang(lang) {
|
|
118
|
+
// tslint:disable-next-line: no-console
|
|
119
|
+
console.warn('DEPRECATION WARNING: switch to codeLang attribute as lang attribute is deprecated.');
|
|
120
|
+
this.setLanguage(lang);
|
|
121
|
+
}
|
|
122
|
+
ngAfterViewChecked() {
|
|
123
|
+
this.cdr.detectChanges();
|
|
124
|
+
}
|
|
125
|
+
ngAfterViewInit() {
|
|
126
|
+
if (!this._content) {
|
|
127
|
+
this._loadContent(this.highlightComp.nativeElement.textContent);
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
this._loadContent(this._content);
|
|
131
|
+
}
|
|
132
|
+
this._initialized = true;
|
|
133
|
+
}
|
|
134
|
+
setLanguage(lang) {
|
|
135
|
+
if (!lang) {
|
|
136
|
+
throw new Error('Error: language attribute must be defined in TdHighlightComponent.');
|
|
137
|
+
}
|
|
138
|
+
this._lang = lang;
|
|
139
|
+
if (this._initialized) {
|
|
140
|
+
this._loadContent(this._content);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* General method to parse a string of code into HTML Elements and load them into the container
|
|
145
|
+
*/
|
|
146
|
+
_loadContent(code) {
|
|
147
|
+
if (code && code.trim().length > 0) {
|
|
148
|
+
// Clean container
|
|
149
|
+
this._renderer.setProperty(this._elementRef.nativeElement, 'innerHTML', '');
|
|
150
|
+
// Parse html string into actual HTML elements.
|
|
151
|
+
this._elementFromString(this._render(code));
|
|
152
|
+
if (this.copyCodeToClipboard) {
|
|
153
|
+
this._renderer.appendChild(this._elementRef.nativeElement, this.copyComp.nativeElement);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
this.contentReady.emit();
|
|
157
|
+
}
|
|
158
|
+
_elementFromString(codeStr) {
|
|
159
|
+
// Renderer2 doesnt have a parsing method, so we have to sanitize and use [innerHTML]
|
|
160
|
+
// to parse the string into DOM element for now.
|
|
161
|
+
const preElement = this._renderer.createElement('pre');
|
|
162
|
+
this._renderer.appendChild(this._elementRef.nativeElement, preElement);
|
|
163
|
+
const codeElement = this._renderer.createElement('code');
|
|
164
|
+
this._renderer.appendChild(preElement, codeElement);
|
|
165
|
+
// Set .highlight class into <code> element
|
|
166
|
+
this._renderer.addClass(codeElement, 'highlight');
|
|
167
|
+
codeElement.innerHTML =
|
|
168
|
+
this._domSanitizer.sanitize(SecurityContext.HTML, codeStr) ?? '';
|
|
169
|
+
return preElement;
|
|
170
|
+
}
|
|
171
|
+
_render(contents) {
|
|
172
|
+
// Trim leading and trailing newlines
|
|
173
|
+
contents = contents
|
|
174
|
+
.replace(/^(\s|\t)*\n+/g, '')
|
|
175
|
+
.replace(/(\s|\t)*\n+(\s|\t)*$/g, '');
|
|
176
|
+
// Split markup by line characters
|
|
177
|
+
let lines = contents.split('\n');
|
|
178
|
+
// check how much indentation is used by the first actual code line
|
|
179
|
+
const firstLineWhitespaceMatch = lines[0].match(/^(\s|\t)*/);
|
|
180
|
+
const firstLineWhitespace = firstLineWhitespaceMatch
|
|
181
|
+
? firstLineWhitespaceMatch[0]
|
|
182
|
+
: null;
|
|
183
|
+
// Remove all indentation spaces so code can be parsed correctly
|
|
184
|
+
const startingWhitespaceRegex = new RegExp('^' + firstLineWhitespace);
|
|
185
|
+
lines = lines.map(function (line) {
|
|
186
|
+
return line
|
|
187
|
+
.replace('=""', '') // remove empty values
|
|
188
|
+
.replace(startingWhitespaceRegex, '')
|
|
189
|
+
.replace(/\s+$/, ''); // remove trailing white spaces
|
|
190
|
+
});
|
|
191
|
+
const codeToParse = lines
|
|
192
|
+
.join('\n')
|
|
193
|
+
.replace(/\{ \{/gi, '{{')
|
|
194
|
+
.replace(/\} \}/gi, '}}')
|
|
195
|
+
.replace(/</gi, '<')
|
|
196
|
+
.replace(/>/gi, '>'); // replace with < and > to render HTML in Angular
|
|
197
|
+
this.copyContent = codeToParse;
|
|
198
|
+
// Parse code with highlight.js depending on language
|
|
199
|
+
const highlightedCode = hljs.highlight(this._lang, codeToParse, true);
|
|
200
|
+
highlightedCode.value = highlightedCode.value
|
|
201
|
+
.replace(/=<span class="hljs-value">""<\/span>/gi, '')
|
|
202
|
+
.replace('<head>', '')
|
|
203
|
+
.replace('<head/>', '');
|
|
204
|
+
return highlightedCode.value;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
TdHighlightComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TdHighlightComponent, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i1$1.DomSanitizer }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
208
|
+
TdHighlightComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: TdHighlightComponent, selector: "td-highlight", inputs: { content: "content", copyCodeToClipboard: "copyCodeToClipboard", copyCodeTooltips: "copyCodeTooltips", codeLang: "codeLang", lang: "lang" }, outputs: { contentReady: "contentReady" }, viewQueries: [{ propertyName: "highlightComp", first: true, predicate: ["highlightComponent"], descendants: true }, { propertyName: "copyComp", first: true, predicate: ["copyComponent"], descendants: true }, { propertyName: "tooltip", first: true, predicate: ["tooltip"], descendants: true }], ngImport: i0, template: "<div>\n <div #highlightComponent>\n <ng-content></ng-content>\n </div>\n\n <div #copyComponent *ngIf=\"copyCodeToClipboard\">\n <td-copy-code-button\n [copiedContent]=\"copyContent\"\n [copyCodeToClipboard]=\"copyCodeToClipboard\"\n [copyCodeTooltips]=\"copyCodeTooltips\"\n ></td-copy-code-button>\n </div>\n</div>\n", styles: [":host ::ng-deep{overflow-x:auto;padding:16px;display:flex}:host ::ng-deep pre,:host ::ng-deep code,:host ::ng-deep .highlight{font-family:Menlo,Monaco,Andale Mono,lucida console,Courier New,monospace}:host ::ng-deep pre{display:block;overflow-x:auto;padding:0;margin:0;background:transparent;font-family:Menlo,Monaco,Andale Mono,lucida console,Courier New,monospace;line-height:1.45;-moz-tab-size:2;tab-size:2;-webkit-font-smoothing:auto;-webkit-text-size-adjust:none;text-size-adjust:none;position:relative;border-radius:2px;font-size:.8rem;width:100%}:host ::ng-deep code{margin:0;padding:0;overflow-wrap:break-word;white-space:pre-wrap}:host ::ng-deep .highlight{display:block;overflow-wrap:break-word;line-height:1.5;margin:0}:host ::ng-deep .copy-button{border:none;background:inherit;margin-top:-8px;margin-right:-8px}\n"], components: [{ type: TdCopyCodeButtonComponent, selector: "td-copy-code-button", inputs: ["copiedContent", "copyCodeToClipboard", "copyCodeTooltips"] }], directives: [{ type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
209
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TdHighlightComponent, decorators: [{
|
|
210
|
+
type: Component,
|
|
211
|
+
args: [{ selector: 'td-highlight', template: "<div>\n <div #highlightComponent>\n <ng-content></ng-content>\n </div>\n\n <div #copyComponent *ngIf=\"copyCodeToClipboard\">\n <td-copy-code-button\n [copiedContent]=\"copyContent\"\n [copyCodeToClipboard]=\"copyCodeToClipboard\"\n [copyCodeTooltips]=\"copyCodeTooltips\"\n ></td-copy-code-button>\n </div>\n</div>\n", styles: [":host ::ng-deep{overflow-x:auto;padding:16px;display:flex}:host ::ng-deep pre,:host ::ng-deep code,:host ::ng-deep .highlight{font-family:Menlo,Monaco,Andale Mono,lucida console,Courier New,monospace}:host ::ng-deep pre{display:block;overflow-x:auto;padding:0;margin:0;background:transparent;font-family:Menlo,Monaco,Andale Mono,lucida console,Courier New,monospace;line-height:1.45;-moz-tab-size:2;tab-size:2;-webkit-font-smoothing:auto;-webkit-text-size-adjust:none;text-size-adjust:none;position:relative;border-radius:2px;font-size:.8rem;width:100%}:host ::ng-deep code{margin:0;padding:0;overflow-wrap:break-word;white-space:pre-wrap}:host ::ng-deep .highlight{display:block;overflow-wrap:break-word;line-height:1.5;margin:0}:host ::ng-deep .copy-button{border:none;background:inherit;margin-top:-8px;margin-right:-8px}\n"] }]
|
|
212
|
+
}], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i1$1.DomSanitizer }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { content: [{
|
|
213
|
+
type: Input
|
|
214
|
+
}], copyCodeToClipboard: [{
|
|
215
|
+
type: Input
|
|
216
|
+
}], copyCodeTooltips: [{
|
|
217
|
+
type: Input
|
|
218
|
+
}], codeLang: [{
|
|
219
|
+
type: Input
|
|
220
|
+
}], lang: [{
|
|
221
|
+
type: Input
|
|
222
|
+
}], contentReady: [{
|
|
223
|
+
type: Output
|
|
224
|
+
}], highlightComp: [{
|
|
225
|
+
type: ViewChild,
|
|
226
|
+
args: ['highlightComponent']
|
|
227
|
+
}], copyComp: [{
|
|
228
|
+
type: ViewChild,
|
|
229
|
+
args: ['copyComponent']
|
|
230
|
+
}], tooltip: [{
|
|
231
|
+
type: ViewChild,
|
|
232
|
+
args: ['tooltip']
|
|
233
|
+
}] } });
|
|
234
|
+
|
|
235
|
+
class CovalentHighlightModule {
|
|
236
|
+
}
|
|
237
|
+
CovalentHighlightModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: CovalentHighlightModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
238
|
+
CovalentHighlightModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: CovalentHighlightModule, declarations: [TdHighlightComponent, TdCopyCodeButtonComponent], imports: [CommonModule,
|
|
239
|
+
ClipboardModule,
|
|
240
|
+
MatIconModule,
|
|
241
|
+
MatTooltipModule,
|
|
242
|
+
MatButtonModule], exports: [TdHighlightComponent] });
|
|
243
|
+
CovalentHighlightModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: CovalentHighlightModule, imports: [[
|
|
244
|
+
CommonModule,
|
|
245
|
+
ClipboardModule,
|
|
246
|
+
MatIconModule,
|
|
247
|
+
MatTooltipModule,
|
|
248
|
+
MatButtonModule,
|
|
249
|
+
]] });
|
|
250
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: CovalentHighlightModule, decorators: [{
|
|
251
|
+
type: NgModule,
|
|
252
|
+
args: [{
|
|
253
|
+
imports: [
|
|
254
|
+
CommonModule,
|
|
255
|
+
ClipboardModule,
|
|
256
|
+
MatIconModule,
|
|
257
|
+
MatTooltipModule,
|
|
258
|
+
MatButtonModule,
|
|
259
|
+
],
|
|
260
|
+
declarations: [TdHighlightComponent, TdCopyCodeButtonComponent],
|
|
261
|
+
exports: [TdHighlightComponent],
|
|
262
|
+
}]
|
|
263
|
+
}] });
|
|
264
|
+
|
|
265
|
+
/**
|
|
266
|
+
* Generated bundle index. Do not edit.
|
|
267
|
+
*/
|
|
268
|
+
|
|
269
|
+
export { CovalentHighlightModule, TdCopyCodeButtonComponent, TdHighlightComponent };
|
|
270
|
+
//# sourceMappingURL=covalent-highlight.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"covalent-highlight.mjs","sources":["../../../../libs/angular-highlight/src/lib/copy-code-button/copy-code-button.component.ts","../../../../libs/angular-highlight/src/lib/copy-code-button/copy-code-button.component.html","../../../../libs/angular-highlight/src/lib/highlight.component.ts","../../../../libs/angular-highlight/src/lib/highlight.component.html","../../../../libs/angular-highlight/src/lib/highlight.module.ts","../../../../libs/angular-highlight/src/covalent-highlight.ts"],"sourcesContent":["import { Component, Input, ViewChild, HostListener } from '@angular/core';\nimport { MatTooltip } from '@angular/material/tooltip';\n\nexport interface ICopyCodeTooltips {\n copy?: string;\n copied?: string;\n}\n\n@Component({\n selector: 'td-copy-code-button',\n templateUrl: './copy-code-button.component.html',\n styleUrls: ['./copy-code-button.component.scss'],\n})\nexport class TdCopyCodeButtonComponent {\n // private _copyCodeTooltips: ICopyCodeTooltips = {};\n @Input() copiedContent!: string;\n @Input() copyCodeToClipboard = false;\n /**\n * copyCodeTooltips?: ICopyCodeTooltips\n *\n * Tooltips for copy button to copy and upon copying.\n */\n @Input() copyCodeTooltips?: ICopyCodeTooltips = {};\n\n get copyTooltip(): string {\n return (this.copyCodeTooltips && this.copyCodeTooltips.copy) || 'Copy';\n }\n\n get copiedTooltip(): string {\n return (this.copyCodeTooltips && this.copyCodeTooltips.copied) || 'Copied';\n }\n\n @ViewChild('tooltip') tooltip!: MatTooltip;\n\n textCopied(event: boolean): void {\n if (event) {\n this.tooltip.hide();\n this.tooltip.message = this.copiedTooltip;\n this.tooltip.show();\n }\n }\n @HostListener('mouseleave')\n initializeTooltip(): void {\n setTimeout(() => {\n this.tooltip.message = this.copyTooltip;\n }, 200);\n }\n}\n","<button\n mat-icon-button\n [cdkCopyToClipboard]=\"copiedContent\"\n class=\"copy-button\"\n [matTooltip]=\"copyTooltip\"\n #tooltip=\"matTooltip\"\n (cdkCopyToClipboardCopied)=\"textCopied($event)\"\n>\n <mat-icon role=\"img\">content_copy</mat-icon>\n</button>\n","import {\n Component,\n AfterViewInit,\n ElementRef,\n Input,\n Output,\n EventEmitter,\n Renderer2,\n SecurityContext,\n ViewChild,\n ChangeDetectorRef,\n AfterViewChecked,\n} from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport { ICopyCodeTooltips } from './copy-code-button/copy-code-button.component';\n\ndeclare const require: any;\n/* tslint:disable-next-line */\nconst hljs = require('highlight.js/lib/common');\n\n@Component({\n selector: 'td-highlight',\n styleUrls: ['./highlight.component.scss'],\n templateUrl: './highlight.component.html',\n})\nexport class TdHighlightComponent implements AfterViewInit, AfterViewChecked {\n private _initialized = false;\n\n private _content!: string;\n private _lang = 'typescript';\n\n /**\n * content?: string\n *\n * Code content to be parsed as highlighted html.\n * Used to load data dynamically.\n *\n * e.g. `.html`, `.ts` , etc.\n */\n @Input()\n set content(content: string) {\n this._content = content;\n if (this._initialized) {\n this._loadContent(this._content);\n }\n }\n\n /**\n * copyCodeToClipboard?: boolean\n *\n * Display copy button on code snippets to copy code to clipboard.\n */\n @Input() copyCodeToClipboard? = false;\n\n /**\n * copyCodeTooltips?: ICopyCodeTooltips\n *\n * Tooltips for copy button to copy and upon copying.\n */\n @Input() copyCodeTooltips?: ICopyCodeTooltips = {};\n\n /**\n * lang?: string\n *\n * Language of the code content to be parsed as highlighted html.\n * Defaults to `typescript`\n *\n * e.g. `typescript`, `html` , etc.\n */\n\n @Input()\n set codeLang(lang: string) {\n this.setLanguage(lang);\n }\n /** @deprecated - removed completely @4.0.0 */\n @Input()\n set lang(lang: string) {\n // tslint:disable-next-line: no-console\n console.warn(\n 'DEPRECATION WARNING: switch to codeLang attribute as lang attribute is deprecated.'\n );\n this.setLanguage(lang);\n }\n\n copyContent!: string;\n\n /**\n * contentReady?: function\n * Event emitted after the highlight content rendering is finished.\n */\n @Output() contentReady: EventEmitter<void> = new EventEmitter<void>();\n @ViewChild('highlightComponent') highlightComp!: ElementRef;\n @ViewChild('copyComponent') copyComp!: ElementRef;\n\n @ViewChild('tooltip') tooltip!: MatTooltip;\n\n constructor(\n private _renderer: Renderer2,\n private _elementRef: ElementRef,\n private _domSanitizer: DomSanitizer,\n private cdr: ChangeDetectorRef\n ) {}\n\n ngAfterViewChecked(): void {\n this.cdr.detectChanges();\n }\n\n ngAfterViewInit(): void {\n if (!this._content) {\n this._loadContent(\n (<HTMLElement>this.highlightComp.nativeElement).textContent\n );\n } else {\n this._loadContent(this._content);\n }\n this._initialized = true;\n }\n\n setLanguage(lang: string): void {\n if (!lang) {\n throw new Error(\n 'Error: language attribute must be defined in TdHighlightComponent.'\n );\n }\n this._lang = lang;\n if (this._initialized) {\n this._loadContent(this._content);\n }\n }\n\n /**\n * General method to parse a string of code into HTML Elements and load them into the container\n */\n private _loadContent(code: string | null): void {\n if (code && code.trim().length > 0) {\n // Clean container\n this._renderer.setProperty(\n this._elementRef.nativeElement,\n 'innerHTML',\n ''\n );\n // Parse html string into actual HTML elements.\n this._elementFromString(this._render(code));\n if (this.copyCodeToClipboard) {\n this._renderer.appendChild(\n this._elementRef.nativeElement,\n this.copyComp.nativeElement\n );\n }\n }\n this.contentReady.emit();\n }\n\n private _elementFromString(codeStr: string): HTMLPreElement {\n // Renderer2 doesnt have a parsing method, so we have to sanitize and use [innerHTML]\n // to parse the string into DOM element for now.\n const preElement: HTMLPreElement = this._renderer.createElement('pre');\n this._renderer.appendChild(this._elementRef.nativeElement, preElement);\n const codeElement: HTMLElement = this._renderer.createElement('code');\n this._renderer.appendChild(preElement, codeElement);\n // Set .highlight class into <code> element\n this._renderer.addClass(codeElement, 'highlight');\n codeElement.innerHTML =\n this._domSanitizer.sanitize(SecurityContext.HTML, codeStr) ?? '';\n return preElement;\n }\n\n private _render(contents: string): string {\n // Trim leading and trailing newlines\n contents = contents\n .replace(/^(\\s|\\t)*\\n+/g, '')\n .replace(/(\\s|\\t)*\\n+(\\s|\\t)*$/g, '');\n // Split markup by line characters\n let lines: string[] = contents.split('\\n');\n\n // check how much indentation is used by the first actual code line\n const firstLineWhitespaceMatch = lines[0].match(/^(\\s|\\t)*/);\n const firstLineWhitespace = firstLineWhitespaceMatch\n ? firstLineWhitespaceMatch[0]\n : null;\n\n // Remove all indentation spaces so code can be parsed correctly\n const startingWhitespaceRegex = new RegExp('^' + firstLineWhitespace);\n lines = lines.map(function (line: string): string {\n return line\n .replace('=\"\"', '') // remove empty values\n .replace(startingWhitespaceRegex, '')\n .replace(/\\s+$/, ''); // remove trailing white spaces\n });\n\n const codeToParse: string = lines\n .join('\\n')\n .replace(/\\{ \\{/gi, '{{')\n .replace(/\\} \\}/gi, '}}')\n .replace(/</gi, '<')\n .replace(/>/gi, '>'); // replace with < and > to render HTML in Angular\n this.copyContent = codeToParse;\n // Parse code with highlight.js depending on language\n const highlightedCode: any = hljs.highlight(this._lang, codeToParse, true);\n highlightedCode.value = highlightedCode.value\n .replace(/=<span class=\"hljs-value\">\"\"<\\/span>/gi, '')\n .replace('<head>', '')\n .replace('<head/>', '');\n return highlightedCode.value;\n }\n}\n","<div>\n <div #highlightComponent>\n <ng-content></ng-content>\n </div>\n\n <div #copyComponent *ngIf=\"copyCodeToClipboard\">\n <td-copy-code-button\n [copiedContent]=\"copyContent\"\n [copyCodeToClipboard]=\"copyCodeToClipboard\"\n [copyCodeTooltips]=\"copyCodeTooltips\"\n ></td-copy-code-button>\n </div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ClipboardModule } from '@angular/cdk/clipboard';\nimport { TdHighlightComponent } from './highlight.component';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatButtonModule } from '@angular/material/button';\nimport { TdCopyCodeButtonComponent } from './copy-code-button/copy-code-button.component';\n\n@NgModule({\n imports: [\n CommonModule,\n ClipboardModule,\n MatIconModule,\n MatTooltipModule,\n MatButtonModule,\n ],\n declarations: [TdHighlightComponent, TdCopyCodeButtonComponent],\n exports: [TdHighlightComponent],\n})\nexport class CovalentHighlightModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { MatTooltip } from '@angular/material/tooltip';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export interface ICopyCodeTooltips {
|
|
4
|
+
copy?: string;
|
|
5
|
+
copied?: string;
|
|
6
|
+
}
|
|
7
|
+
export declare class TdCopyCodeButtonComponent {
|
|
8
|
+
copiedContent: string;
|
|
9
|
+
copyCodeToClipboard: boolean;
|
|
10
|
+
/**
|
|
11
|
+
* copyCodeTooltips?: ICopyCodeTooltips
|
|
12
|
+
*
|
|
13
|
+
* Tooltips for copy button to copy and upon copying.
|
|
14
|
+
*/
|
|
15
|
+
copyCodeTooltips?: ICopyCodeTooltips;
|
|
16
|
+
get copyTooltip(): string;
|
|
17
|
+
get copiedTooltip(): string;
|
|
18
|
+
tooltip: MatTooltip;
|
|
19
|
+
textCopied(event: boolean): void;
|
|
20
|
+
initializeTooltip(): void;
|
|
21
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<TdCopyCodeButtonComponent, never>;
|
|
22
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<TdCopyCodeButtonComponent, "td-copy-code-button", never, { "copiedContent": "copiedContent"; "copyCodeToClipboard": "copyCodeToClipboard"; "copyCodeTooltips": "copyCodeTooltips"; }, {}, never, never>;
|
|
23
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { AfterViewInit, ElementRef, EventEmitter, Renderer2, ChangeDetectorRef, AfterViewChecked } from '@angular/core';
|
|
2
|
+
import { DomSanitizer } from '@angular/platform-browser';
|
|
3
|
+
import { MatTooltip } from '@angular/material/tooltip';
|
|
4
|
+
import { ICopyCodeTooltips } from './copy-code-button/copy-code-button.component';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export declare class TdHighlightComponent implements AfterViewInit, AfterViewChecked {
|
|
7
|
+
private _renderer;
|
|
8
|
+
private _elementRef;
|
|
9
|
+
private _domSanitizer;
|
|
10
|
+
private cdr;
|
|
11
|
+
private _initialized;
|
|
12
|
+
private _content;
|
|
13
|
+
private _lang;
|
|
14
|
+
/**
|
|
15
|
+
* content?: string
|
|
16
|
+
*
|
|
17
|
+
* Code content to be parsed as highlighted html.
|
|
18
|
+
* Used to load data dynamically.
|
|
19
|
+
*
|
|
20
|
+
* e.g. `.html`, `.ts` , etc.
|
|
21
|
+
*/
|
|
22
|
+
set content(content: string);
|
|
23
|
+
/**
|
|
24
|
+
* copyCodeToClipboard?: boolean
|
|
25
|
+
*
|
|
26
|
+
* Display copy button on code snippets to copy code to clipboard.
|
|
27
|
+
*/
|
|
28
|
+
copyCodeToClipboard?: boolean | undefined;
|
|
29
|
+
/**
|
|
30
|
+
* copyCodeTooltips?: ICopyCodeTooltips
|
|
31
|
+
*
|
|
32
|
+
* Tooltips for copy button to copy and upon copying.
|
|
33
|
+
*/
|
|
34
|
+
copyCodeTooltips?: ICopyCodeTooltips;
|
|
35
|
+
/**
|
|
36
|
+
* lang?: string
|
|
37
|
+
*
|
|
38
|
+
* Language of the code content to be parsed as highlighted html.
|
|
39
|
+
* Defaults to `typescript`
|
|
40
|
+
*
|
|
41
|
+
* e.g. `typescript`, `html` , etc.
|
|
42
|
+
*/
|
|
43
|
+
set codeLang(lang: string);
|
|
44
|
+
/** @deprecated - removed completely @4.0.0 */
|
|
45
|
+
set lang(lang: string);
|
|
46
|
+
copyContent: string;
|
|
47
|
+
/**
|
|
48
|
+
* contentReady?: function
|
|
49
|
+
* Event emitted after the highlight content rendering is finished.
|
|
50
|
+
*/
|
|
51
|
+
contentReady: EventEmitter<void>;
|
|
52
|
+
highlightComp: ElementRef;
|
|
53
|
+
copyComp: ElementRef;
|
|
54
|
+
tooltip: MatTooltip;
|
|
55
|
+
constructor(_renderer: Renderer2, _elementRef: ElementRef, _domSanitizer: DomSanitizer, cdr: ChangeDetectorRef);
|
|
56
|
+
ngAfterViewChecked(): void;
|
|
57
|
+
ngAfterViewInit(): void;
|
|
58
|
+
setLanguage(lang: string): void;
|
|
59
|
+
/**
|
|
60
|
+
* General method to parse a string of code into HTML Elements and load them into the container
|
|
61
|
+
*/
|
|
62
|
+
private _loadContent;
|
|
63
|
+
private _elementFromString;
|
|
64
|
+
private _render;
|
|
65
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<TdHighlightComponent, never>;
|
|
66
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<TdHighlightComponent, "td-highlight", never, { "content": "content"; "copyCodeToClipboard": "copyCodeToClipboard"; "copyCodeTooltips": "copyCodeTooltips"; "codeLang": "codeLang"; "lang": "lang"; }, { "contentReady": "contentReady"; }, never, ["*"]>;
|
|
67
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
import * as i1 from "./highlight.component";
|
|
3
|
+
import * as i2 from "./copy-code-button/copy-code-button.component";
|
|
4
|
+
import * as i3 from "@angular/common";
|
|
5
|
+
import * as i4 from "@angular/cdk/clipboard";
|
|
6
|
+
import * as i5 from "@angular/material/icon";
|
|
7
|
+
import * as i6 from "@angular/material/tooltip";
|
|
8
|
+
import * as i7 from "@angular/material/button";
|
|
9
|
+
export declare class CovalentHighlightModule {
|
|
10
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<CovalentHighlightModule, never>;
|
|
11
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<CovalentHighlightModule, [typeof i1.TdHighlightComponent, typeof i2.TdCopyCodeButtonComponent], [typeof i3.CommonModule, typeof i4.ClipboardModule, typeof i5.MatIconModule, typeof i6.MatTooltipModule, typeof i7.MatButtonModule], [typeof i1.TdHighlightComponent]>;
|
|
12
|
+
static ɵinj: i0.ɵɵInjectorDeclaration<CovalentHighlightModule>;
|
|
13
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@covalent/highlight",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"description": "Teradata UI Platform Highlight Module",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"author": "Teradata UX",
|
|
7
|
+
"keywords": [
|
|
8
|
+
"angular",
|
|
9
|
+
"components",
|
|
10
|
+
"reusable",
|
|
11
|
+
"highlight",
|
|
12
|
+
"highlightjs"
|
|
13
|
+
],
|
|
14
|
+
"peerDependencies": {
|
|
15
|
+
"highlight.js": "^11.4.0",
|
|
16
|
+
"@angular/common": "^13.2.0",
|
|
17
|
+
"@angular/core": "^13.2.0",
|
|
18
|
+
"@angular/platform-browser": "^13.2.0",
|
|
19
|
+
"@angular/cdk": "^13.2.0",
|
|
20
|
+
"@angular/material": "^13.2.0"
|
|
21
|
+
},
|
|
22
|
+
"dependencies": {
|
|
23
|
+
"tslib": "^2.3.0"
|
|
24
|
+
},
|
|
25
|
+
"module": "fesm2015/covalent-highlight.mjs",
|
|
26
|
+
"es2020": "fesm2020/covalent-highlight.mjs",
|
|
27
|
+
"esm2020": "esm2020/covalent-highlight.mjs",
|
|
28
|
+
"fesm2020": "fesm2020/covalent-highlight.mjs",
|
|
29
|
+
"fesm2015": "fesm2015/covalent-highlight.mjs",
|
|
30
|
+
"typings": "covalent-highlight.d.ts",
|
|
31
|
+
"exports": {
|
|
32
|
+
"./package.json": {
|
|
33
|
+
"default": "./package.json"
|
|
34
|
+
},
|
|
35
|
+
".": {
|
|
36
|
+
"types": "./covalent-highlight.d.ts",
|
|
37
|
+
"esm2020": "./esm2020/covalent-highlight.mjs",
|
|
38
|
+
"es2020": "./fesm2020/covalent-highlight.mjs",
|
|
39
|
+
"es2015": "./fesm2015/covalent-highlight.mjs",
|
|
40
|
+
"node": "./fesm2015/covalent-highlight.mjs",
|
|
41
|
+
"default": "./fesm2020/covalent-highlight.mjs"
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
"sideEffects": false
|
|
45
|
+
}
|
package/public_api.d.ts
ADDED