nxt-highlightjs 19.1.0 → 20.0.0
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/extras/index.d.ts +152 -5
- package/fesm2022/nxt-highlightjs-extras.mjs +18 -18
- package/fesm2022/nxt-highlightjs-extras.mjs.map +1 -1
- package/fesm2022/nxt-highlightjs-line-numbers.mjs +3 -3
- package/fesm2022/nxt-highlightjs-line-numbers.mjs.map +1 -1
- package/fesm2022/nxt-highlightjs.mjs +24 -23
- package/fesm2022/nxt-highlightjs.mjs.map +1 -1
- package/index.d.ts +196 -3
- package/line-numbers/index.d.ts +21 -5
- package/package.json +7 -7
- package/extras/code-file-location.d.ts +0 -12
- package/extras/code-from-url.d.ts +0 -10
- package/extras/code-loader.d.ts +0 -22
- package/extras/gist.d.ts +0 -20
- package/extras/gist.model.d.ts +0 -95
- package/extras/highlight-extras.module.d.ts +0 -8
- package/extras/public_api.d.ts +0 -5
- package/lib/highlight-auto.directive.d.ts +0 -27
- package/lib/highlight-base.directive.d.ts +0 -27
- package/lib/highlight.directive.d.ts +0 -30
- package/lib/highlight.loader.d.ts +0 -28
- package/lib/highlight.model.d.ts +0 -22
- package/lib/highlight.module.d.ts +0 -8
- package/lib/highlight.service.d.ts +0 -64
- package/lib/loader-errors.d.ts +0 -7
- package/lib/output.d.ts +0 -103
- package/lib/trusted-types.d.ts +0 -1
- package/line-numbers/line-numbers-lib.d.ts +0 -6
- package/line-numbers/line-numbers.directive.d.ts +0 -12
- package/line-numbers/public_api.d.ts +0 -2
- package/public-api.d.ts +0 -7
package/extras/index.d.ts
CHANGED
|
@@ -1,5 +1,152 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { PipeTransform, InjectionToken, Provider, OnDestroy, EventEmitter } from '@angular/core';
|
|
3
|
+
import { Observable } from 'rxjs';
|
|
4
|
+
|
|
5
|
+
declare class CodeFromUrlPipe implements PipeTransform {
|
|
6
|
+
private readonly location;
|
|
7
|
+
private readonly loader;
|
|
8
|
+
transform(url: string): Observable<string>;
|
|
9
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<CodeFromUrlPipe, never>;
|
|
10
|
+
static ɵpipe: i0.ɵɵPipeDeclaration<CodeFromUrlPipe, "codeFromUrl", true>;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
declare function isUrl(url: string): boolean;
|
|
14
|
+
interface GistOptions {
|
|
15
|
+
clientId: string;
|
|
16
|
+
clientSecret: string;
|
|
17
|
+
}
|
|
18
|
+
declare const NXT_GIST_OPTIONS: InjectionToken<GistOptions>;
|
|
19
|
+
declare function provideGistOptions(options: GistOptions): Provider[];
|
|
20
|
+
interface Owner {
|
|
21
|
+
login: string;
|
|
22
|
+
id: number;
|
|
23
|
+
node_id: string;
|
|
24
|
+
avatar_url: string;
|
|
25
|
+
gravatar_id: string;
|
|
26
|
+
url: string;
|
|
27
|
+
html_url: string;
|
|
28
|
+
followers_url: string;
|
|
29
|
+
following_url: string;
|
|
30
|
+
gists_url: string;
|
|
31
|
+
starred_url: string;
|
|
32
|
+
subscriptions_url: string;
|
|
33
|
+
organizations_url: string;
|
|
34
|
+
repos_url: string;
|
|
35
|
+
events_url: string;
|
|
36
|
+
received_events_url: string;
|
|
37
|
+
type: string;
|
|
38
|
+
site_admin: boolean;
|
|
39
|
+
}
|
|
40
|
+
interface User {
|
|
41
|
+
login: string;
|
|
42
|
+
id: number;
|
|
43
|
+
node_id: string;
|
|
44
|
+
avatar_url: string;
|
|
45
|
+
gravatar_id: string;
|
|
46
|
+
url: string;
|
|
47
|
+
html_url: string;
|
|
48
|
+
followers_url: string;
|
|
49
|
+
following_url: string;
|
|
50
|
+
gists_url: string;
|
|
51
|
+
starred_url: string;
|
|
52
|
+
subscriptions_url: string;
|
|
53
|
+
organizations_url: string;
|
|
54
|
+
repos_url: string;
|
|
55
|
+
events_url: string;
|
|
56
|
+
received_events_url: string;
|
|
57
|
+
type: string;
|
|
58
|
+
site_admin: boolean;
|
|
59
|
+
}
|
|
60
|
+
interface ChangeStatus {
|
|
61
|
+
total: number;
|
|
62
|
+
additions: number;
|
|
63
|
+
deletions: number;
|
|
64
|
+
}
|
|
65
|
+
interface History {
|
|
66
|
+
user: User;
|
|
67
|
+
version: string;
|
|
68
|
+
committed_at: Date;
|
|
69
|
+
change_status: ChangeStatus;
|
|
70
|
+
url: string;
|
|
71
|
+
}
|
|
72
|
+
interface GistFile {
|
|
73
|
+
filename: string;
|
|
74
|
+
type: string;
|
|
75
|
+
language: string;
|
|
76
|
+
raw_url: string;
|
|
77
|
+
size: number;
|
|
78
|
+
truncated: boolean;
|
|
79
|
+
content: string;
|
|
80
|
+
}
|
|
81
|
+
interface Files {
|
|
82
|
+
[fileName: string]: GistFile;
|
|
83
|
+
}
|
|
84
|
+
interface Gist {
|
|
85
|
+
url: string;
|
|
86
|
+
forks_url: string;
|
|
87
|
+
commits_url: string;
|
|
88
|
+
id: string;
|
|
89
|
+
node_id: string;
|
|
90
|
+
git_pull_url: string;
|
|
91
|
+
git_push_url: string;
|
|
92
|
+
html_url: string;
|
|
93
|
+
files: Files;
|
|
94
|
+
public: boolean;
|
|
95
|
+
created_at: Date;
|
|
96
|
+
updated_at: Date;
|
|
97
|
+
description: string;
|
|
98
|
+
comments: number;
|
|
99
|
+
user?: any;
|
|
100
|
+
comments_url: string;
|
|
101
|
+
owner: Owner;
|
|
102
|
+
forks: any[];
|
|
103
|
+
history: History[];
|
|
104
|
+
truncated: boolean;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
declare class CodeLoader {
|
|
108
|
+
private readonly http;
|
|
109
|
+
private readonly options;
|
|
110
|
+
/**
|
|
111
|
+
* Get plus code
|
|
112
|
+
*
|
|
113
|
+
* @param id Gist ID
|
|
114
|
+
*/
|
|
115
|
+
getCodeFromGist(id: string): Observable<Gist>;
|
|
116
|
+
/**
|
|
117
|
+
* Get code by URL
|
|
118
|
+
*
|
|
119
|
+
* @param url File raw link
|
|
120
|
+
*/
|
|
121
|
+
getCodeFromUrl(url: string): Observable<string>;
|
|
122
|
+
private fetchFile;
|
|
123
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<CodeLoader, never>;
|
|
124
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<CodeLoader>;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
declare class GistDirective implements OnDestroy {
|
|
128
|
+
private readonly loader;
|
|
129
|
+
private readonly pendingTasks;
|
|
130
|
+
private readonly cdRef;
|
|
131
|
+
private subscription?;
|
|
132
|
+
set gist(value: string);
|
|
133
|
+
gistLoad: EventEmitter<Gist>;
|
|
134
|
+
gistError: EventEmitter<any>;
|
|
135
|
+
ngOnDestroy(): void;
|
|
136
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<GistDirective, never>;
|
|
137
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<GistDirective, "[nxtGist]", never, { "gist": { "alias": "nxtGist"; "required": false; }; }, { "gistLoad": "gistLoad"; "gistError": "gistError"; }, never, never, true, never>;
|
|
138
|
+
}
|
|
139
|
+
declare class GistFilePipe implements PipeTransform {
|
|
140
|
+
transform(gist?: Gist | null, fileName?: string | null): GistFile | undefined;
|
|
141
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<GistFilePipe, never>;
|
|
142
|
+
static ɵpipe: i0.ɵɵPipeDeclaration<GistFilePipe, "gistFile", true>;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
declare class HighlightExstrasModule {
|
|
146
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<HighlightExstrasModule, never>;
|
|
147
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<HighlightExstrasModule, never, [typeof GistDirective, typeof GistFilePipe, typeof CodeFromUrlPipe], [typeof GistDirective, typeof GistFilePipe, typeof CodeFromUrlPipe]>;
|
|
148
|
+
static ɵinj: i0.ɵɵInjectorDeclaration<HighlightExstrasModule>;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
export { CodeFromUrlPipe, CodeLoader, GistDirective, GistFilePipe, HighlightExstrasModule, NXT_GIST_OPTIONS, isUrl, provideGistOptions };
|
|
152
|
+
export type { Gist, GistFile, GistOptions };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { InjectionToken, inject, Injectable, Pipe, PendingTasks, ChangeDetectorRef, EventEmitter,
|
|
3
|
-
import {
|
|
2
|
+
import { InjectionToken, inject, DOCUMENT, Injectable, Pipe, PendingTasks, ChangeDetectorRef, EventEmitter, Output, Input, Directive, NgModule } from '@angular/core';
|
|
3
|
+
import { APP_BASE_HREF } from '@angular/common';
|
|
4
4
|
import { HttpClient, HttpParams } from '@angular/common/http';
|
|
5
5
|
import { shareReplay, EMPTY } from 'rxjs';
|
|
6
6
|
|
|
@@ -79,10 +79,10 @@ class CodeLoader {
|
|
|
79
79
|
}
|
|
80
80
|
return EMPTY;
|
|
81
81
|
}
|
|
82
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
83
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
82
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: CodeLoader, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
83
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: CodeLoader, providedIn: 'root' }); }
|
|
84
84
|
}
|
|
85
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
85
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: CodeLoader, decorators: [{
|
|
86
86
|
type: Injectable,
|
|
87
87
|
args: [{
|
|
88
88
|
providedIn: 'root'
|
|
@@ -97,10 +97,10 @@ class CodeFromUrlPipe {
|
|
|
97
97
|
transform(url) {
|
|
98
98
|
return this.loader.getCodeFromUrl(isUrl(url) ? url : this.location.formatPathname(url));
|
|
99
99
|
}
|
|
100
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
101
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "
|
|
100
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: CodeFromUrlPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
101
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.0.5", ngImport: i0, type: CodeFromUrlPipe, isStandalone: true, name: "codeFromUrl" }); }
|
|
102
102
|
}
|
|
103
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
103
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: CodeFromUrlPipe, decorators: [{
|
|
104
104
|
type: Pipe,
|
|
105
105
|
args: [{
|
|
106
106
|
name: 'codeFromUrl'
|
|
@@ -138,10 +138,10 @@ class GistDirective {
|
|
|
138
138
|
this.subscription?.unsubscribe();
|
|
139
139
|
this.subscription = undefined;
|
|
140
140
|
}
|
|
141
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
142
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "
|
|
141
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: GistDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
142
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.0.5", type: GistDirective, isStandalone: true, selector: "[nxtGist]", inputs: { gist: ["nxtGist", "gist"] }, outputs: { gistLoad: "gistLoad", gistError: "gistError" }, ngImport: i0 }); }
|
|
143
143
|
}
|
|
144
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
144
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: GistDirective, decorators: [{
|
|
145
145
|
type: Directive,
|
|
146
146
|
args: [{
|
|
147
147
|
selector: '[nxtGist]'
|
|
@@ -160,10 +160,10 @@ class GistFilePipe {
|
|
|
160
160
|
return;
|
|
161
161
|
return gist?.files?.[fileName];
|
|
162
162
|
}
|
|
163
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
164
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "
|
|
163
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: GistFilePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
164
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.0.5", ngImport: i0, type: GistFilePipe, isStandalone: true, name: "gistFile" }); }
|
|
165
165
|
}
|
|
166
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
166
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: GistFilePipe, decorators: [{
|
|
167
167
|
type: Pipe,
|
|
168
168
|
args: [{
|
|
169
169
|
name: 'gistFile'
|
|
@@ -171,15 +171,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.3", ngImpor
|
|
|
171
171
|
}] });
|
|
172
172
|
|
|
173
173
|
class HighlightExstrasModule {
|
|
174
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
175
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "
|
|
174
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: HighlightExstrasModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
175
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.0.5", ngImport: i0, type: HighlightExstrasModule, imports: [GistDirective,
|
|
176
176
|
GistFilePipe,
|
|
177
177
|
CodeFromUrlPipe], exports: [GistDirective,
|
|
178
178
|
GistFilePipe,
|
|
179
179
|
CodeFromUrlPipe] }); }
|
|
180
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "
|
|
180
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: HighlightExstrasModule }); }
|
|
181
181
|
}
|
|
182
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
182
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: HighlightExstrasModule, decorators: [{
|
|
183
183
|
type: NgModule,
|
|
184
184
|
args: [{
|
|
185
185
|
imports: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nxt-highlightjs-extras.mjs","sources":["../../../packages/highlightjs/extras/src/code-file-location.ts","../../../packages/highlightjs/extras/src/gist.model.ts","../../../packages/highlightjs/extras/src/code-loader.ts","../../../packages/highlightjs/extras/src/code-from-url.ts","../../../packages/highlightjs/extras/src/gist.ts","../../../packages/highlightjs/extras/src/highlight-extras.module.ts","../../../packages/highlightjs/extras/src/nxt-highlightjs-extras.ts"],"sourcesContent":["import { APP_BASE_HREF, DOCUMENT } from '@angular/common'\r\nimport { inject, InjectionToken } from '@angular/core'\r\n\r\n/**\r\n * Injection token used to provide the current location to `codeFromUrl` pipe.\r\n * Used to handle server-side rendering and to stub out during unit tests.\r\n */\r\nexport const NXT_HIGHLIGHT_FILE_LOCATION = new InjectionToken<CodeFileLocation>('NXT_HIGHLIGHT_FILE_LOCATION', {\r\n providedIn: 'root',\r\n factory: CODE_FILE_LOCATION_FACTORY\r\n})\r\n\r\nexport interface CodeFileLocation {\r\n formatPathname: (path: string) => string\r\n}\r\n\r\nexport function CODE_FILE_LOCATION_FACTORY() {\r\n const location = inject(DOCUMENT)?.location\r\n const base = inject(APP_BASE_HREF, { optional: true })?.replace(/\\/+$/igm, '')\r\n\r\n return {\r\n // Note that this needs to be a function, rather than a property, because Angular\r\n // will only resolve it once, but we want the current path on each call.\r\n // getPathname: () => (location ? location.pathname + location.search : ''),\r\n formatPathname: (path: string) => {\r\n const origin = (location ? location.origin : '').replace(/\\/+$/igm, '')\r\n if (path.startsWith('/'))\r\n return origin + path\r\n\r\n let prefix = base ?? origin\r\n if (prefix)\r\n prefix += '/'\r\n\r\n return prefix + path\r\n }\r\n }\r\n}\r\n","import { InjectionToken, Provider } from '@angular/core'\r\n\r\nexport function isUrl(url: string): boolean {\r\n const regExp: RegExp = /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!]))?/\r\n return regExp.test(url)\r\n}\r\n\r\nexport interface GistOptions {\r\n clientId: string\r\n clientSecret: string\r\n}\r\n\r\nexport const NXT_GIST_OPTIONS = new InjectionToken<GistOptions>('NXT_GIST_OPTIONS')\r\n\r\nexport function provideGistOptions(options: GistOptions): Provider[] {\r\n return [\r\n {\r\n provide: NXT_GIST_OPTIONS,\r\n useValue: options\r\n }\r\n ]\r\n}\r\n\r\ninterface Owner {\r\n login: string\r\n id: number\r\n node_id: string\r\n avatar_url: string\r\n gravatar_id: string\r\n url: string\r\n html_url: string\r\n followers_url: string\r\n following_url: string\r\n gists_url: string\r\n starred_url: string\r\n subscriptions_url: string\r\n organizations_url: string\r\n repos_url: string\r\n events_url: string\r\n received_events_url: string\r\n type: string\r\n site_admin: boolean\r\n}\r\n\r\ninterface User {\r\n login: string\r\n id: number\r\n node_id: string\r\n avatar_url: string\r\n gravatar_id: string\r\n url: string\r\n html_url: string\r\n followers_url: string\r\n following_url: string\r\n gists_url: string\r\n starred_url: string\r\n subscriptions_url: string\r\n organizations_url: string\r\n repos_url: string\r\n events_url: string\r\n received_events_url: string\r\n type: string\r\n site_admin: boolean\r\n}\r\n\r\ninterface ChangeStatus {\r\n total: number\r\n additions: number\r\n deletions: number\r\n}\r\n\r\ninterface History {\r\n user: User\r\n version: string\r\n committed_at: Date\r\n change_status: ChangeStatus\r\n url: string\r\n}\r\n\r\nexport interface GistFile {\r\n filename: string\r\n type: string\r\n language: string\r\n raw_url: string\r\n size: number\r\n truncated: boolean\r\n content: string\r\n}\r\n\r\ninterface Files {\r\n [fileName: string]: GistFile\r\n}\r\n\r\nexport interface Gist {\r\n url: string\r\n forks_url: string\r\n commits_url: string\r\n id: string\r\n node_id: string\r\n git_pull_url: string\r\n git_push_url: string\r\n html_url: string\r\n files: Files\r\n public: boolean\r\n created_at: Date\r\n updated_at: Date\r\n description: string\r\n comments: number\r\n user?: any\r\n comments_url: string\r\n owner: Owner\r\n forks: any[]\r\n history: History[]\r\n truncated: boolean\r\n}\r\n\r\n","import { HttpClient, HttpParams } from '@angular/common/http'\r\nimport { inject, Injectable } from '@angular/core'\r\nimport { EMPTY, Observable, shareReplay } from 'rxjs'\r\nimport { Gist, isUrl, NXT_GIST_OPTIONS } from './gist.model'\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CodeLoader {\r\n\r\n private readonly http = inject(HttpClient)\r\n private readonly options = inject(NXT_GIST_OPTIONS, { optional: true })\r\n\r\n /**\r\n * Get plus code\r\n *\r\n * @param id Gist ID\r\n */\r\n getCodeFromGist(id: string): Observable<Gist> {\r\n let params: HttpParams | undefined\r\n if (this.options?.clientId && this.options?.clientSecret) {\r\n params = new HttpParams().set('client_id', this.options.clientId).set('client_secret', this.options.clientSecret)\r\n }\r\n return this.fetchFile(`https://api.github.com/gists/${id}`, { params, responseType: 'json' })\r\n }\r\n\r\n /**\r\n * Get code by URL\r\n *\r\n * @param url File raw link\r\n */\r\n getCodeFromUrl(url: string): Observable<string> {\r\n return this.fetchFile(url, { responseType: 'text' })\r\n }\r\n\r\n private fetchFile(url: string, options: any): Observable<any> {\r\n // Check if URL is valid\r\n if (isUrl(url)) {\r\n return this.http.get(url, options).pipe(\r\n // Catch response\r\n shareReplay(1)\r\n )\r\n }\r\n return EMPTY\r\n }\r\n\r\n}\r\n","import { inject, Pipe, PipeTransform } from '@angular/core'\r\nimport { Observable } from 'rxjs'\r\nimport { NXT_HIGHLIGHT_FILE_LOCATION } from './code-file-location'\r\nimport { CodeLoader } from './code-loader'\r\nimport { isUrl } from './gist.model'\r\n\r\n@Pipe({\r\n name: 'codeFromUrl'\r\n})\r\nexport class CodeFromUrlPipe implements PipeTransform {\r\n\r\n private readonly location = inject(NXT_HIGHLIGHT_FILE_LOCATION)\r\n private readonly loader = inject(CodeLoader)\r\n\r\n transform(url: string): Observable<string> {\r\n return this.loader.getCodeFromUrl(isUrl(url) ? url : this.location.formatPathname(url))\r\n }\r\n}\r\n","import { ChangeDetectorRef, Directive, EventEmitter, inject, Input, OnDestroy, Output, PendingTasks, Pipe, PipeTransform } from '@angular/core'\r\nimport { Subscription } from 'rxjs'\r\nimport { CodeLoader } from './code-loader'\r\nimport { Gist, GistFile } from './gist.model'\r\n\r\n@Directive({\r\n selector: '[nxtGist]'\r\n})\r\nexport class GistDirective implements OnDestroy {\r\n\r\n private readonly loader = inject(CodeLoader)\r\n private readonly pendingTasks = inject(PendingTasks)\r\n private readonly cdRef = inject(ChangeDetectorRef)\r\n private subscription?: Subscription\r\n\r\n @Input('nxtGist')\r\n set gist(value: string) {\r\n this.subscription?.unsubscribe()\r\n this.subscription = undefined\r\n\r\n if (value) {\r\n const done = this.pendingTasks.add()\r\n this.subscription = this.loader.getCodeFromGist(value).subscribe({\r\n next: (gist: Gist) => {\r\n this.gistLoad.emit(gist)\r\n this.cdRef.detectChanges()\r\n done()\r\n },\r\n error: (err) => {\r\n this.gistError.emit(err)\r\n this.cdRef.detectChanges()\r\n done()\r\n }\r\n })\r\n }\r\n }\r\n\r\n @Output() gistLoad: EventEmitter<Gist> = new EventEmitter<Gist>()\r\n\r\n @Output() gistError: EventEmitter<any> = new EventEmitter<any>()\r\n\r\n ngOnDestroy(): void {\r\n this.subscription?.unsubscribe()\r\n this.subscription = undefined\r\n }\r\n}\r\n\r\n@Pipe({\r\n name: 'gistFile'\r\n})\r\nexport class GistFilePipe implements PipeTransform {\r\n transform(gist?: Gist | null, fileName?: string | null): GistFile | undefined {\r\n if (!fileName)\r\n return\r\n return gist?.files?.[fileName]\r\n }\r\n}\r\n","import { NgModule } from '@angular/core'\r\nimport { CodeFromUrlPipe } from './code-from-url'\r\nimport { GistDirective, GistFilePipe } from './gist'\r\n\r\n@NgModule({\r\n imports: [\r\n GistDirective,\r\n GistFilePipe,\r\n CodeFromUrlPipe\r\n ],\r\n exports: [\r\n GistDirective,\r\n GistFilePipe,\r\n CodeFromUrlPipe\r\n ]\r\n})\r\nexport class HighlightExstrasModule { }\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"nxt-highlightjs-extras.mjs","sources":["../../../packages/highlightjs/extras/src/code-file-location.ts","../../../packages/highlightjs/extras/src/gist.model.ts","../../../packages/highlightjs/extras/src/code-loader.ts","../../../packages/highlightjs/extras/src/code-from-url.ts","../../../packages/highlightjs/extras/src/gist.ts","../../../packages/highlightjs/extras/src/highlight-extras.module.ts","../../../packages/highlightjs/extras/src/nxt-highlightjs-extras.ts"],"sourcesContent":["import { APP_BASE_HREF } from '@angular/common'\r\nimport { inject, InjectionToken, DOCUMENT } from '@angular/core'\r\n\r\n/**\r\n * Injection token used to provide the current location to `codeFromUrl` pipe.\r\n * Used to handle server-side rendering and to stub out during unit tests.\r\n */\r\nexport const NXT_HIGHLIGHT_FILE_LOCATION = new InjectionToken<CodeFileLocation>('NXT_HIGHLIGHT_FILE_LOCATION', {\r\n providedIn: 'root',\r\n factory: CODE_FILE_LOCATION_FACTORY\r\n})\r\n\r\nexport interface CodeFileLocation {\r\n formatPathname: (path: string) => string\r\n}\r\n\r\nexport function CODE_FILE_LOCATION_FACTORY() {\r\n const location = inject(DOCUMENT)?.location\r\n const base = inject(APP_BASE_HREF, { optional: true })?.replace(/\\/+$/igm, '')\r\n\r\n return {\r\n // Note that this needs to be a function, rather than a property, because Angular\r\n // will only resolve it once, but we want the current path on each call.\r\n // getPathname: () => (location ? location.pathname + location.search : ''),\r\n formatPathname: (path: string) => {\r\n const origin = (location ? location.origin : '').replace(/\\/+$/igm, '')\r\n if (path.startsWith('/'))\r\n return origin + path\r\n\r\n let prefix = base ?? origin\r\n if (prefix)\r\n prefix += '/'\r\n\r\n return prefix + path\r\n }\r\n }\r\n}\r\n","import { InjectionToken, Provider } from '@angular/core'\r\n\r\nexport function isUrl(url: string): boolean {\r\n const regExp: RegExp = /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!]))?/\r\n return regExp.test(url)\r\n}\r\n\r\nexport interface GistOptions {\r\n clientId: string\r\n clientSecret: string\r\n}\r\n\r\nexport const NXT_GIST_OPTIONS = new InjectionToken<GistOptions>('NXT_GIST_OPTIONS')\r\n\r\nexport function provideGistOptions(options: GistOptions): Provider[] {\r\n return [\r\n {\r\n provide: NXT_GIST_OPTIONS,\r\n useValue: options\r\n }\r\n ]\r\n}\r\n\r\ninterface Owner {\r\n login: string\r\n id: number\r\n node_id: string\r\n avatar_url: string\r\n gravatar_id: string\r\n url: string\r\n html_url: string\r\n followers_url: string\r\n following_url: string\r\n gists_url: string\r\n starred_url: string\r\n subscriptions_url: string\r\n organizations_url: string\r\n repos_url: string\r\n events_url: string\r\n received_events_url: string\r\n type: string\r\n site_admin: boolean\r\n}\r\n\r\ninterface User {\r\n login: string\r\n id: number\r\n node_id: string\r\n avatar_url: string\r\n gravatar_id: string\r\n url: string\r\n html_url: string\r\n followers_url: string\r\n following_url: string\r\n gists_url: string\r\n starred_url: string\r\n subscriptions_url: string\r\n organizations_url: string\r\n repos_url: string\r\n events_url: string\r\n received_events_url: string\r\n type: string\r\n site_admin: boolean\r\n}\r\n\r\ninterface ChangeStatus {\r\n total: number\r\n additions: number\r\n deletions: number\r\n}\r\n\r\ninterface History {\r\n user: User\r\n version: string\r\n committed_at: Date\r\n change_status: ChangeStatus\r\n url: string\r\n}\r\n\r\nexport interface GistFile {\r\n filename: string\r\n type: string\r\n language: string\r\n raw_url: string\r\n size: number\r\n truncated: boolean\r\n content: string\r\n}\r\n\r\ninterface Files {\r\n [fileName: string]: GistFile\r\n}\r\n\r\nexport interface Gist {\r\n url: string\r\n forks_url: string\r\n commits_url: string\r\n id: string\r\n node_id: string\r\n git_pull_url: string\r\n git_push_url: string\r\n html_url: string\r\n files: Files\r\n public: boolean\r\n created_at: Date\r\n updated_at: Date\r\n description: string\r\n comments: number\r\n user?: any\r\n comments_url: string\r\n owner: Owner\r\n forks: any[]\r\n history: History[]\r\n truncated: boolean\r\n}\r\n\r\n","import { HttpClient, HttpParams } from '@angular/common/http'\r\nimport { inject, Injectable } from '@angular/core'\r\nimport { EMPTY, Observable, shareReplay } from 'rxjs'\r\nimport { Gist, isUrl, NXT_GIST_OPTIONS } from './gist.model'\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CodeLoader {\r\n\r\n private readonly http = inject(HttpClient)\r\n private readonly options = inject(NXT_GIST_OPTIONS, { optional: true })\r\n\r\n /**\r\n * Get plus code\r\n *\r\n * @param id Gist ID\r\n */\r\n getCodeFromGist(id: string): Observable<Gist> {\r\n let params: HttpParams | undefined\r\n if (this.options?.clientId && this.options?.clientSecret) {\r\n params = new HttpParams().set('client_id', this.options.clientId).set('client_secret', this.options.clientSecret)\r\n }\r\n return this.fetchFile(`https://api.github.com/gists/${id}`, { params, responseType: 'json' })\r\n }\r\n\r\n /**\r\n * Get code by URL\r\n *\r\n * @param url File raw link\r\n */\r\n getCodeFromUrl(url: string): Observable<string> {\r\n return this.fetchFile(url, { responseType: 'text' })\r\n }\r\n\r\n private fetchFile(url: string, options: any): Observable<any> {\r\n // Check if URL is valid\r\n if (isUrl(url)) {\r\n return this.http.get(url, options).pipe(\r\n // Catch response\r\n shareReplay(1)\r\n )\r\n }\r\n return EMPTY\r\n }\r\n\r\n}\r\n","import { inject, Pipe, PipeTransform } from '@angular/core'\r\nimport { Observable } from 'rxjs'\r\nimport { NXT_HIGHLIGHT_FILE_LOCATION } from './code-file-location'\r\nimport { CodeLoader } from './code-loader'\r\nimport { isUrl } from './gist.model'\r\n\r\n@Pipe({\r\n name: 'codeFromUrl'\r\n})\r\nexport class CodeFromUrlPipe implements PipeTransform {\r\n\r\n private readonly location = inject(NXT_HIGHLIGHT_FILE_LOCATION)\r\n private readonly loader = inject(CodeLoader)\r\n\r\n transform(url: string): Observable<string> {\r\n return this.loader.getCodeFromUrl(isUrl(url) ? url : this.location.formatPathname(url))\r\n }\r\n}\r\n","import { ChangeDetectorRef, Directive, EventEmitter, inject, Input, OnDestroy, Output, PendingTasks, Pipe, PipeTransform } from '@angular/core'\r\nimport { Subscription } from 'rxjs'\r\nimport { CodeLoader } from './code-loader'\r\nimport { Gist, GistFile } from './gist.model'\r\n\r\n@Directive({\r\n selector: '[nxtGist]'\r\n})\r\nexport class GistDirective implements OnDestroy {\r\n\r\n private readonly loader = inject(CodeLoader)\r\n private readonly pendingTasks = inject(PendingTasks)\r\n private readonly cdRef = inject(ChangeDetectorRef)\r\n private subscription?: Subscription\r\n\r\n @Input('nxtGist')\r\n set gist(value: string) {\r\n this.subscription?.unsubscribe()\r\n this.subscription = undefined\r\n\r\n if (value) {\r\n const done = this.pendingTasks.add()\r\n this.subscription = this.loader.getCodeFromGist(value).subscribe({\r\n next: (gist: Gist) => {\r\n this.gistLoad.emit(gist)\r\n this.cdRef.detectChanges()\r\n done()\r\n },\r\n error: (err) => {\r\n this.gistError.emit(err)\r\n this.cdRef.detectChanges()\r\n done()\r\n }\r\n })\r\n }\r\n }\r\n\r\n @Output() gistLoad: EventEmitter<Gist> = new EventEmitter<Gist>()\r\n\r\n @Output() gistError: EventEmitter<any> = new EventEmitter<any>()\r\n\r\n ngOnDestroy(): void {\r\n this.subscription?.unsubscribe()\r\n this.subscription = undefined\r\n }\r\n}\r\n\r\n@Pipe({\r\n name: 'gistFile'\r\n})\r\nexport class GistFilePipe implements PipeTransform {\r\n transform(gist?: Gist | null, fileName?: string | null): GistFile | undefined {\r\n if (!fileName)\r\n return\r\n return gist?.files?.[fileName]\r\n }\r\n}\r\n","import { NgModule } from '@angular/core'\r\nimport { CodeFromUrlPipe } from './code-from-url'\r\nimport { GistDirective, GistFilePipe } from './gist'\r\n\r\n@NgModule({\r\n imports: [\r\n GistDirective,\r\n GistFilePipe,\r\n CodeFromUrlPipe\r\n ],\r\n exports: [\r\n GistDirective,\r\n GistFilePipe,\r\n CodeFromUrlPipe\r\n ]\r\n})\r\nexport class HighlightExstrasModule { }\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;;;AAGA;;;AAGG;AACI,MAAM,2BAA2B,GAAG,IAAI,cAAc,CAAmB,6BAA6B,EAAE;AAC3G,IAAA,UAAU,EAAE,MAAM;AAClB,IAAA,OAAO,EAAE;AACZ,CAAA,CAAC;SAMc,0BAA0B,GAAA;IACtC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,EAAE,QAAQ;AAC3C,IAAA,MAAM,IAAI,GAAG,MAAM,CAAC,aAAa,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;IAE9E,OAAO;;;;AAIH,QAAA,cAAc,EAAE,CAAC,IAAY,KAAI;YAC7B,MAAM,MAAM,GAAG,CAAC,QAAQ,GAAG,QAAQ,CAAC,MAAM,GAAG,EAAE,EAAE,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;AACvE,YAAA,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;gBACpB,OAAO,MAAM,GAAG,IAAI;AAExB,YAAA,IAAI,MAAM,GAAG,IAAI,IAAI,MAAM;AAC3B,YAAA,IAAI,MAAM;gBACN,MAAM,IAAI,GAAG;YAEjB,OAAO,MAAM,GAAG,IAAI;;KAE3B;AACL;;AClCM,SAAU,KAAK,CAAC,GAAW,EAAA;IAC7B,MAAM,MAAM,GAAW,+EAA+E;AACtG,IAAA,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;AAC3B;MAOa,gBAAgB,GAAG,IAAI,cAAc,CAAc,kBAAkB;AAE5E,SAAU,kBAAkB,CAAC,OAAoB,EAAA;IACnD,OAAO;AACH,QAAA;AACI,YAAA,OAAO,EAAE,gBAAgB;AACzB,YAAA,QAAQ,EAAE;AACb;KACJ;AACL;;MCba,UAAU,CAAA;AAHvB,IAAA,WAAA,GAAA;AAKqB,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;QACzB,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,gBAAgB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAmC1E;AAjCG;;;;AAIG;AACH,IAAA,eAAe,CAAC,EAAU,EAAA;AACtB,QAAA,IAAI,MAA8B;AAClC,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE,YAAY,EAAE;YACtD,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;;AAErH,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,CAAA,6BAAA,EAAgC,EAAE,CAAA,CAAE,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC;;AAGjG;;;;AAIG;AACH,IAAA,cAAc,CAAC,GAAW,EAAA;AACtB,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC;;IAGhD,SAAS,CAAC,GAAW,EAAE,OAAY,EAAA;;AAEvC,QAAA,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE;YACZ,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,IAAI;;AAEnC,YAAA,WAAW,CAAC,CAAC,CAAC,CACjB;;AAEL,QAAA,OAAO,KAAK;;8GAnCP,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAV,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAU,cAFP,MAAM,EAAA,CAAA,CAAA;;2FAET,UAAU,EAAA,UAAA,EAAA,CAAA;kBAHtB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;;MCEY,eAAe,CAAA;AAH5B,IAAA,WAAA,GAAA;AAKqB,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,2BAA2B,CAAC;AAC9C,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC;AAK/C;AAHG,IAAA,SAAS,CAAC,GAAW,EAAA;QACjB,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;;8GANlF,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4GAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,aAAA,EAAA,CAAA,CAAA;;2FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAH3B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE;AACT,iBAAA;;;MCAY,aAAa,CAAA;AAH1B,IAAA,WAAA,GAAA;AAKqB,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC;AAC3B,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACnC,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAyBxC,QAAA,IAAA,CAAA,QAAQ,GAAuB,IAAI,YAAY,EAAQ;AAEvD,QAAA,IAAA,CAAA,SAAS,GAAsB,IAAI,YAAY,EAAO;AAMnE;IA9BG,IACI,IAAI,CAAC,KAAa,EAAA;AAClB,QAAA,IAAI,CAAC,YAAY,EAAE,WAAW,EAAE;AAChC,QAAA,IAAI,CAAC,YAAY,GAAG,SAAS;QAE7B,IAAI,KAAK,EAAE;YACP,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE;AACpC,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC;AAC7D,gBAAA,IAAI,EAAE,CAAC,IAAU,KAAI;AACjB,oBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AACxB,oBAAA,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE;AAC1B,oBAAA,IAAI,EAAE;iBACT;AACD,gBAAA,KAAK,EAAE,CAAC,GAAG,KAAI;AACX,oBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC;AACxB,oBAAA,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE;AAC1B,oBAAA,IAAI,EAAE;;AAEb,aAAA,CAAC;;;IAQV,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,YAAY,EAAE,WAAW,EAAE;AAChC,QAAA,IAAI,CAAC,YAAY,GAAG,SAAS;;8GAnCxB,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAb,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,CAAA,SAAA,EAAA,MAAA,CAAA,EAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBAHzB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE;AACb,iBAAA;8BASO,IAAI,EAAA,CAAA;sBADP,KAAK;uBAAC,SAAS;gBAsBN,QAAQ,EAAA,CAAA;sBAAjB;gBAES,SAAS,EAAA,CAAA;sBAAlB;;MAWQ,YAAY,CAAA;IACrB,SAAS,CAAC,IAAkB,EAAE,QAAwB,EAAA;AAClD,QAAA,IAAI,CAAC,QAAQ;YACT;AACJ,QAAA,OAAO,IAAI,EAAE,KAAK,GAAG,QAAQ,CAAC;;8GAJzB,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4GAAZ,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,UAAA,EAAA,CAAA,CAAA;;2FAAZ,YAAY,EAAA,UAAA,EAAA,CAAA;kBAHxB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE;AACT,iBAAA;;;MCjCY,sBAAsB,CAAA;8GAAtB,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,YAV3B,aAAa;YACb,YAAY;AACZ,YAAA,eAAe,aAGf,aAAa;YACb,YAAY;YACZ,eAAe,CAAA,EAAA,CAAA,CAAA;+GAGV,sBAAsB,EAAA,CAAA,CAAA;;2FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAZlC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,OAAO,EAAE;wBACL,aAAa;wBACb,YAAY;wBACZ;AACH,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACL,aAAa;wBACb,YAAY;wBACZ;AACH;AACJ,iBAAA;;;ACfD;;AAEG;;;;"}
|
|
@@ -237,10 +237,10 @@ class HighlightLineNumbersDirective {
|
|
|
237
237
|
}
|
|
238
238
|
});
|
|
239
239
|
}
|
|
240
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
241
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "
|
|
240
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: HighlightLineNumbersDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
241
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.0.5", type: HighlightLineNumbersDirective, isStandalone: true, selector: "[nxtHighlight][lineNumbers], [nxtHighlightAuto][lineNumbers]", inputs: { startFrom: { classPropertyName: "startFrom", publicName: "startFrom", isSignal: true, isRequired: false, transformFunction: null }, singleLine: { classPropertyName: "singleLine", publicName: "singleLine", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 }); }
|
|
242
242
|
}
|
|
243
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
243
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: HighlightLineNumbersDirective, decorators: [{
|
|
244
244
|
type: Directive,
|
|
245
245
|
args: [{
|
|
246
246
|
selector: '[nxtHighlight][lineNumbers], [nxtHighlightAuto][lineNumbers]'
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nxt-highlightjs-line-numbers.mjs","sources":["../../../packages/highlightjs/line-numbers/src/line-numbers-lib.ts","../../../packages/highlightjs/line-numbers/src/line-numbers.directive.ts","../../../packages/highlightjs/line-numbers/src/nxt-highlightjs-line-numbers.ts"],"sourcesContent":["interface LineNumbersOptions {\r\n startFrom?: number\r\n singleLine?: boolean\r\n}\r\n\r\nexport function activateLineNumbers(document: Document) {\r\n const TABLE_NAME = 'hljs-ln'\r\n const LINE_NAME = 'hljs-ln-line'\r\n const CODE_BLOCK_NAME = 'hljs-ln-code'\r\n const NUMBERS_BLOCK_NAME = 'hljs-ln-numbers'\r\n const NUMBER_LINE_NAME = 'hljs-ln-n'\r\n const DATA_ATTR_NAME = 'data-line-number'\r\n const BREAK_LINE_REGEXP = /\\r\\n|\\r|\\n/g\r\n\r\n addStyles()\r\n\r\n function isHljsLnCodeDescendant(domElt?: HTMLElement | null) {\r\n let curElt = domElt\r\n while (curElt) {\r\n if (curElt.className && curElt.className.indexOf('hljs-ln-code') !== -1) {\r\n return true\r\n }\r\n curElt = curElt.parentNode as HTMLElement\r\n }\r\n return false\r\n }\r\n\r\n function getHljsLnTable(hljsLnDomElt?: HTMLElement) {\r\n let curElt = hljsLnDomElt\r\n while (curElt && curElt.nodeName !== 'TABLE') {\r\n curElt = curElt.parentNode as HTMLElement\r\n }\r\n return curElt\r\n }\r\n\r\n // Function to workaround a copy issue with Microsoft Edge.\r\n // Due to hljs-ln wrapping the lines of code inside a <table> element,\r\n // itself wrapped inside a <pre> element, window.getSelection().toString()\r\n // does not contain any line breaks. So we need to get them back using the\r\n // rendered code in the DOM as reference.\r\n function edgeGetSelectedCodeLines(selection: Selection) {\r\n // current selected text without line breaks\r\n const selectionText = selection.toString()\r\n\r\n // get the <td> element wrapping the first line of selected code\r\n let tdAnchor = selection.anchorNode\r\n while (tdAnchor?.nodeName !== 'TD') {\r\n tdAnchor = tdAnchor?.parentNode || null\r\n }\r\n\r\n // get the <td> element wrapping the last line of selected code\r\n let tdFocus = selection.focusNode\r\n while (tdFocus?.nodeName !== 'TD') {\r\n tdFocus = tdFocus?.parentNode || null\r\n }\r\n\r\n // extract line numbers\r\n let firstLineNumber = parseInt((tdAnchor as HTMLElement | null)?.dataset['lineNumber'] || '0', 10)\r\n let lastLineNumber = parseInt((tdFocus as HTMLElement | null)?.dataset['lineNumber'] || '0', 10)\r\n\r\n // multi-lines copied case\r\n if (firstLineNumber != lastLineNumber) {\r\n\r\n let firstLineText = tdAnchor.textContent\r\n let lastLineText = tdFocus.textContent\r\n\r\n // if the selection was made backward, swap values\r\n if (firstLineNumber > lastLineNumber) {\r\n const tmp = firstLineNumber\r\n firstLineNumber = lastLineNumber\r\n lastLineNumber = tmp\r\n const tmp2 = firstLineText\r\n firstLineText = lastLineText\r\n lastLineText = tmp2\r\n }\r\n\r\n // discard not copied characters in first line\r\n while (selectionText.indexOf(firstLineText || '') !== 0) {\r\n firstLineText = firstLineText!.slice(1)\r\n }\r\n\r\n // discard not copied characters in last line\r\n while (selectionText.lastIndexOf(lastLineText || '') === -1) {\r\n lastLineText = lastLineText!.slice(0, -1)\r\n }\r\n\r\n // reconstruct and return the real copied text\r\n let selectedText = firstLineText\r\n const hljsLnTable = getHljsLnTable(tdAnchor as HTMLElement)\r\n for (let i = firstLineNumber + 1; i < lastLineNumber; ++i) {\r\n const codeLineSel = format('.{0}[{1}=\"{2}\"]', [CODE_BLOCK_NAME, DATA_ATTR_NAME, i])\r\n const codeLineElt = hljsLnTable?.querySelector(codeLineSel)\r\n selectedText += '\\n' + (codeLineElt?.textContent || '')\r\n }\r\n selectedText += '\\n' + lastLineText\r\n return selectedText\r\n // single copied line case\r\n } else {\r\n return selectionText\r\n }\r\n }\r\n\r\n // ensure consistent code copy/paste behavior across all browsers\r\n // (see https://github.com/wcoder/highlightjs-line-numbers.js/issues/51)\r\n document.addEventListener('copy', (e) => {\r\n // get current selection\r\n const selection = window.getSelection()\r\n // override behavior when one wants to copy line of codes\r\n if (isHljsLnCodeDescendant(selection?.anchorNode as HTMLElement | null | undefined)) {\r\n let selectionText: string | null | undefined\r\n // workaround an issue with Microsoft Edge as copied line breaks\r\n // are removed otherwise from the selection string\r\n if (window.navigator.userAgent.indexOf('Edge') !== -1 && selection) {\r\n selectionText = edgeGetSelectedCodeLines(selection)\r\n } else {\r\n // other browsers can directly use the selection string\r\n selectionText = selection?.toString()\r\n }\r\n if (selectionText) {\r\n e.clipboardData?.setData('text/plain', selectionText)\r\n e.preventDefault()\r\n }\r\n }\r\n })\r\n\r\n function addStyles() {\r\n const css = document.createElement('style')\r\n css.innerHTML = format(\r\n '.{0}{border-collapse:collapse}' +\r\n '.{0} td{padding:0}' +\r\n '.{1}:before{content:attr({2})}',\r\n [\r\n TABLE_NAME,\r\n NUMBER_LINE_NAME,\r\n DATA_ATTR_NAME\r\n ])\r\n document.getElementsByTagName('head')[0].appendChild(css)\r\n }\r\n\r\n function lineNumbersBlock(code: string, options?: LineNumbersOptions) {\r\n return lineNumbersInternal(code, options)\r\n }\r\n\r\n function lineNumbersInternal(code: string, options?: LineNumbersOptions) {\r\n\r\n const internalOptions = mapOptions(options)\r\n\r\n return addLineNumbersBlockFor(code, internalOptions)\r\n }\r\n\r\n function addLineNumbersBlockFor(inputHtml: string, options?: LineNumbersOptions) {\r\n const lines = getLines(inputHtml)\r\n\r\n // if last line contains only carriage return remove it\r\n if (lines[lines.length - 1].trim() === '') {\r\n lines.pop()\r\n }\r\n\r\n if (lines.length > 1 || options?.singleLine) {\r\n let html = ''\r\n\r\n for (let i = 0, l = lines.length; i < l; i++) {\r\n html += format(\r\n '<tr>' +\r\n '<td class=\"{0} {1}\" {3}=\"{5}\">' +\r\n '<div class=\"{2}\" {3}=\"{5}\"></div>' +\r\n '</td>' +\r\n '<td class=\"{0} {4}\" {3}=\"{5}\">' +\r\n '{6}' +\r\n '</td>' +\r\n '</tr>',\r\n [\r\n LINE_NAME,\r\n NUMBERS_BLOCK_NAME,\r\n NUMBER_LINE_NAME,\r\n DATA_ATTR_NAME,\r\n CODE_BLOCK_NAME,\r\n i + Number(!!(options?.startFrom)),\r\n lines[i].length > 0 ? lines[i] : ' '\r\n ])\r\n }\r\n\r\n return format('<table class=\"{0}\">{1}</table>', [TABLE_NAME, html])\r\n }\r\n\r\n return inputHtml\r\n }\r\n\r\n /**\r\n * @param element Code block.\r\n * @param options External API options.\r\n * @returns Internal API options.\r\n */\r\n function mapOptions(options?: LineNumbersOptions) {\r\n options = options || {}\r\n return {\r\n singleLine: getSingleLineOption(options),\r\n startFrom: getStartFromOption(options)\r\n }\r\n }\r\n\r\n function getSingleLineOption(options?: LineNumbersOptions) {\r\n const defaultValue = false\r\n if (!!options?.singleLine) {\r\n return options.singleLine\r\n }\r\n return defaultValue\r\n }\r\n\r\n function getStartFromOption(options?: LineNumbersOptions) {\r\n const defaultValue = 1\r\n let startFrom = defaultValue\r\n\r\n if (isFinite(options?.startFrom ?? NaN)) {\r\n startFrom = options!.startFrom!\r\n }\r\n\r\n return startFrom\r\n }\r\n\r\n function getLines(text: string) {\r\n if (text.length === 0) return []\r\n return text.split(BREAK_LINE_REGEXP)\r\n }\r\n\r\n ///\r\n /// HELPERS\r\n ///\r\n\r\n /**\r\n * {@link https://wcoder.github.io/notes/string-format-for-string-formating-in-javascript}\r\n *\r\n * @param formatString\r\n * @param args\r\n */\r\n function format(formatString: string, args: any[]) {\r\n return formatString.replace(/\\{(\\d+)\\}/g, (m, n) => args[n] !== null && args[n] !== undefined ? args[n] : m)\r\n }\r\n\r\n return lineNumbersBlock\r\n}\r\n","import {\r\n Directive,\r\n ElementRef,\r\n booleanAttribute,\r\n effect,\r\n inject,\r\n input,\r\n numberAttribute\r\n} from '@angular/core'\r\nimport { HighlightBase, HighlightJS, NXT_HIGHLIGHT_OPTIONS } from 'nxt-highlightjs'\r\n\r\n@Directive({\r\n selector: '[nxtHighlight][lineNumbers], [nxtHighlightAuto][lineNumbers]'\r\n})\r\nexport class HighlightLineNumbersDirective {\r\n\r\n private readonly options = inject(NXT_HIGHLIGHT_OPTIONS)?.lineNumbersOptions\r\n private readonly hljs = inject(HighlightJS)\r\n private readonly highlight = inject(HighlightBase)\r\n private readonly nativeElement = inject(ElementRef<HTMLElement>).nativeElement\r\n\r\n readonly startFrom = input(this.options?.startFrom, {\r\n transform: numberAttribute\r\n })\r\n\r\n readonly singleLine = input(this.options?.singleLine, {\r\n transform: booleanAttribute\r\n })\r\n\r\n constructor() {\r\n effect(() => {\r\n const hljs = this.hljs.hljs()\r\n const result = this.highlight.highlightResult()\r\n if (result?.value) {\r\n if ((hljs as any).lineNumbersBlock) {\r\n const code = (hljs as any).lineNumbersBlock(result.value, {\r\n startFrom: this.startFrom(),\r\n singleLine: this.singleLine()\r\n })\r\n this.nativeElement.innerHTML = code\r\n }\r\n // If lines count is 1, the line numbers library will not add numbers\r\n if (this.nativeElement.firstElementChild?.tagName.toUpperCase() === 'TABLE') {\r\n this.nativeElement.classList.add('hljs-line-numbers')\r\n } else {\r\n this.nativeElement.classList.remove('hljs-line-numbers')\r\n }\r\n }\r\n })\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"nxt-highlightjs-line-numbers.mjs","sources":["../../../packages/highlightjs/line-numbers/src/line-numbers-lib.ts","../../../packages/highlightjs/line-numbers/src/line-numbers.directive.ts","../../../packages/highlightjs/line-numbers/src/nxt-highlightjs-line-numbers.ts"],"sourcesContent":["interface LineNumbersOptions {\r\n startFrom?: number\r\n singleLine?: boolean\r\n}\r\n\r\nexport function activateLineNumbers(document: Document) {\r\n const TABLE_NAME = 'hljs-ln'\r\n const LINE_NAME = 'hljs-ln-line'\r\n const CODE_BLOCK_NAME = 'hljs-ln-code'\r\n const NUMBERS_BLOCK_NAME = 'hljs-ln-numbers'\r\n const NUMBER_LINE_NAME = 'hljs-ln-n'\r\n const DATA_ATTR_NAME = 'data-line-number'\r\n const BREAK_LINE_REGEXP = /\\r\\n|\\r|\\n/g\r\n\r\n addStyles()\r\n\r\n function isHljsLnCodeDescendant(domElt?: HTMLElement | null) {\r\n let curElt = domElt\r\n while (curElt) {\r\n if (curElt.className && curElt.className.indexOf('hljs-ln-code') !== -1) {\r\n return true\r\n }\r\n curElt = curElt.parentNode as HTMLElement\r\n }\r\n return false\r\n }\r\n\r\n function getHljsLnTable(hljsLnDomElt?: HTMLElement) {\r\n let curElt = hljsLnDomElt\r\n while (curElt && curElt.nodeName !== 'TABLE') {\r\n curElt = curElt.parentNode as HTMLElement\r\n }\r\n return curElt\r\n }\r\n\r\n // Function to workaround a copy issue with Microsoft Edge.\r\n // Due to hljs-ln wrapping the lines of code inside a <table> element,\r\n // itself wrapped inside a <pre> element, window.getSelection().toString()\r\n // does not contain any line breaks. So we need to get them back using the\r\n // rendered code in the DOM as reference.\r\n function edgeGetSelectedCodeLines(selection: Selection) {\r\n // current selected text without line breaks\r\n const selectionText = selection.toString()\r\n\r\n // get the <td> element wrapping the first line of selected code\r\n let tdAnchor = selection.anchorNode\r\n while (tdAnchor?.nodeName !== 'TD') {\r\n tdAnchor = tdAnchor?.parentNode || null\r\n }\r\n\r\n // get the <td> element wrapping the last line of selected code\r\n let tdFocus = selection.focusNode\r\n while (tdFocus?.nodeName !== 'TD') {\r\n tdFocus = tdFocus?.parentNode || null\r\n }\r\n\r\n // extract line numbers\r\n let firstLineNumber = parseInt((tdAnchor as HTMLElement | null)?.dataset['lineNumber'] || '0', 10)\r\n let lastLineNumber = parseInt((tdFocus as HTMLElement | null)?.dataset['lineNumber'] || '0', 10)\r\n\r\n // multi-lines copied case\r\n if (firstLineNumber != lastLineNumber) {\r\n\r\n let firstLineText = tdAnchor.textContent\r\n let lastLineText = tdFocus.textContent\r\n\r\n // if the selection was made backward, swap values\r\n if (firstLineNumber > lastLineNumber) {\r\n const tmp = firstLineNumber\r\n firstLineNumber = lastLineNumber\r\n lastLineNumber = tmp\r\n const tmp2 = firstLineText\r\n firstLineText = lastLineText\r\n lastLineText = tmp2\r\n }\r\n\r\n // discard not copied characters in first line\r\n while (selectionText.indexOf(firstLineText || '') !== 0) {\r\n firstLineText = firstLineText!.slice(1)\r\n }\r\n\r\n // discard not copied characters in last line\r\n while (selectionText.lastIndexOf(lastLineText || '') === -1) {\r\n lastLineText = lastLineText!.slice(0, -1)\r\n }\r\n\r\n // reconstruct and return the real copied text\r\n let selectedText = firstLineText\r\n const hljsLnTable = getHljsLnTable(tdAnchor as HTMLElement)\r\n for (let i = firstLineNumber + 1; i < lastLineNumber; ++i) {\r\n const codeLineSel = format('.{0}[{1}=\"{2}\"]', [CODE_BLOCK_NAME, DATA_ATTR_NAME, i])\r\n const codeLineElt = hljsLnTable?.querySelector(codeLineSel)\r\n selectedText += '\\n' + (codeLineElt?.textContent || '')\r\n }\r\n selectedText += '\\n' + lastLineText\r\n return selectedText\r\n // single copied line case\r\n } else {\r\n return selectionText\r\n }\r\n }\r\n\r\n // ensure consistent code copy/paste behavior across all browsers\r\n // (see https://github.com/wcoder/highlightjs-line-numbers.js/issues/51)\r\n document.addEventListener('copy', (e) => {\r\n // get current selection\r\n const selection = window.getSelection()\r\n // override behavior when one wants to copy line of codes\r\n if (isHljsLnCodeDescendant(selection?.anchorNode as HTMLElement | null | undefined)) {\r\n let selectionText: string | null | undefined\r\n // workaround an issue with Microsoft Edge as copied line breaks\r\n // are removed otherwise from the selection string\r\n if (window.navigator.userAgent.indexOf('Edge') !== -1 && selection) {\r\n selectionText = edgeGetSelectedCodeLines(selection)\r\n } else {\r\n // other browsers can directly use the selection string\r\n selectionText = selection?.toString()\r\n }\r\n if (selectionText) {\r\n e.clipboardData?.setData('text/plain', selectionText)\r\n e.preventDefault()\r\n }\r\n }\r\n })\r\n\r\n function addStyles() {\r\n const css = document.createElement('style')\r\n css.innerHTML = format(\r\n '.{0}{border-collapse:collapse}' +\r\n '.{0} td{padding:0}' +\r\n '.{1}:before{content:attr({2})}',\r\n [\r\n TABLE_NAME,\r\n NUMBER_LINE_NAME,\r\n DATA_ATTR_NAME\r\n ])\r\n document.getElementsByTagName('head')[0].appendChild(css)\r\n }\r\n\r\n function lineNumbersBlock(code: string, options?: LineNumbersOptions) {\r\n return lineNumbersInternal(code, options)\r\n }\r\n\r\n function lineNumbersInternal(code: string, options?: LineNumbersOptions) {\r\n\r\n const internalOptions = mapOptions(options)\r\n\r\n return addLineNumbersBlockFor(code, internalOptions)\r\n }\r\n\r\n function addLineNumbersBlockFor(inputHtml: string, options?: LineNumbersOptions) {\r\n const lines = getLines(inputHtml)\r\n\r\n // if last line contains only carriage return remove it\r\n if (lines[lines.length - 1].trim() === '') {\r\n lines.pop()\r\n }\r\n\r\n if (lines.length > 1 || options?.singleLine) {\r\n let html = ''\r\n\r\n for (let i = 0, l = lines.length; i < l; i++) {\r\n html += format(\r\n '<tr>' +\r\n '<td class=\"{0} {1}\" {3}=\"{5}\">' +\r\n '<div class=\"{2}\" {3}=\"{5}\"></div>' +\r\n '</td>' +\r\n '<td class=\"{0} {4}\" {3}=\"{5}\">' +\r\n '{6}' +\r\n '</td>' +\r\n '</tr>',\r\n [\r\n LINE_NAME,\r\n NUMBERS_BLOCK_NAME,\r\n NUMBER_LINE_NAME,\r\n DATA_ATTR_NAME,\r\n CODE_BLOCK_NAME,\r\n i + Number(!!(options?.startFrom)),\r\n lines[i].length > 0 ? lines[i] : ' '\r\n ])\r\n }\r\n\r\n return format('<table class=\"{0}\">{1}</table>', [TABLE_NAME, html])\r\n }\r\n\r\n return inputHtml\r\n }\r\n\r\n /**\r\n * @param element Code block.\r\n * @param options External API options.\r\n * @returns Internal API options.\r\n */\r\n function mapOptions(options?: LineNumbersOptions) {\r\n options = options || {}\r\n return {\r\n singleLine: getSingleLineOption(options),\r\n startFrom: getStartFromOption(options)\r\n }\r\n }\r\n\r\n function getSingleLineOption(options?: LineNumbersOptions) {\r\n const defaultValue = false\r\n if (!!options?.singleLine) {\r\n return options.singleLine\r\n }\r\n return defaultValue\r\n }\r\n\r\n function getStartFromOption(options?: LineNumbersOptions) {\r\n const defaultValue = 1\r\n let startFrom = defaultValue\r\n\r\n if (isFinite(options?.startFrom ?? NaN)) {\r\n startFrom = options!.startFrom!\r\n }\r\n\r\n return startFrom\r\n }\r\n\r\n function getLines(text: string) {\r\n if (text.length === 0) return []\r\n return text.split(BREAK_LINE_REGEXP)\r\n }\r\n\r\n ///\r\n /// HELPERS\r\n ///\r\n\r\n /**\r\n * {@link https://wcoder.github.io/notes/string-format-for-string-formating-in-javascript}\r\n *\r\n * @param formatString\r\n * @param args\r\n */\r\n function format(formatString: string, args: any[]) {\r\n return formatString.replace(/\\{(\\d+)\\}/g, (m, n) => args[n] !== null && args[n] !== undefined ? args[n] : m)\r\n }\r\n\r\n return lineNumbersBlock\r\n}\r\n","import {\r\n Directive,\r\n ElementRef,\r\n booleanAttribute,\r\n effect,\r\n inject,\r\n input,\r\n numberAttribute\r\n} from '@angular/core'\r\nimport { HighlightBase, HighlightJS, NXT_HIGHLIGHT_OPTIONS } from 'nxt-highlightjs'\r\n\r\n@Directive({\r\n selector: '[nxtHighlight][lineNumbers], [nxtHighlightAuto][lineNumbers]'\r\n})\r\nexport class HighlightLineNumbersDirective {\r\n\r\n private readonly options = inject(NXT_HIGHLIGHT_OPTIONS)?.lineNumbersOptions\r\n private readonly hljs = inject(HighlightJS)\r\n private readonly highlight = inject(HighlightBase)\r\n private readonly nativeElement = inject(ElementRef<HTMLElement>).nativeElement\r\n\r\n readonly startFrom = input(this.options?.startFrom, {\r\n transform: numberAttribute\r\n })\r\n\r\n readonly singleLine = input(this.options?.singleLine, {\r\n transform: booleanAttribute\r\n })\r\n\r\n constructor() {\r\n effect(() => {\r\n const hljs = this.hljs.hljs()\r\n const result = this.highlight.highlightResult()\r\n if (result?.value) {\r\n if ((hljs as any).lineNumbersBlock) {\r\n const code = (hljs as any).lineNumbersBlock(result.value, {\r\n startFrom: this.startFrom(),\r\n singleLine: this.singleLine()\r\n })\r\n this.nativeElement.innerHTML = code\r\n }\r\n // If lines count is 1, the line numbers library will not add numbers\r\n if (this.nativeElement.firstElementChild?.tagName.toUpperCase() === 'TABLE') {\r\n this.nativeElement.classList.add('hljs-line-numbers')\r\n } else {\r\n this.nativeElement.classList.remove('hljs-line-numbers')\r\n }\r\n }\r\n })\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { InjectionToken, makeEnvironmentProviders, inject, PendingTasks, Injectable, ElementRef, effect, SecurityContext, Directive, input, signal, output, booleanAttribute, NgModule } from '@angular/core';
|
|
2
|
+
import { InjectionToken, makeEnvironmentProviders, inject, DOCUMENT, PendingTasks, Injectable, ElementRef, effect, SecurityContext, Directive, input, signal, output, booleanAttribute, NgModule } from '@angular/core';
|
|
3
3
|
import { DomSanitizer } from '@angular/platform-browser';
|
|
4
4
|
import { toSignal } from '@angular/core/rxjs-interop';
|
|
5
5
|
import { from } from 'rxjs';
|
|
6
|
-
import { DOCUMENT } from '@angular/common';
|
|
7
6
|
|
|
8
7
|
const NXT_HIGHLIGHT_OPTIONS = new InjectionToken('NXT_HIGHLIGHT_OPTIONS');
|
|
9
8
|
function provideHighlightOptions(options) {
|
|
@@ -300,7 +299,8 @@ class HighlightLoader {
|
|
|
300
299
|
this.document = inject(DOCUMENT);
|
|
301
300
|
this.options = inject(NXT_HIGHLIGHT_OPTIONS, { optional: true });
|
|
302
301
|
this.pendingTasks = inject(PendingTasks);
|
|
303
|
-
this.
|
|
302
|
+
this._t = this.pendingTasks.add();
|
|
303
|
+
this.ready = this.loadLibrary()
|
|
304
304
|
.then(async (hljs) => {
|
|
305
305
|
if (this.options?.lineNumbersLoader) {
|
|
306
306
|
const plugin = await this.options.lineNumbersLoader();
|
|
@@ -312,7 +312,8 @@ class HighlightLoader {
|
|
|
312
312
|
if (this.options?.highlightOptions)
|
|
313
313
|
hljs.configure(this.options.highlightOptions);
|
|
314
314
|
return hljs;
|
|
315
|
-
})
|
|
315
|
+
})
|
|
316
|
+
.finally(this._t);
|
|
316
317
|
if (this.options?.themePath) {
|
|
317
318
|
this.loadTheme(this.options.themePath);
|
|
318
319
|
}
|
|
@@ -373,10 +374,10 @@ class HighlightLoader {
|
|
|
373
374
|
this.themeLinkElement.media = 'screen,print';
|
|
374
375
|
this.document.head.appendChild(this.themeLinkElement);
|
|
375
376
|
}
|
|
376
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
377
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
377
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: HighlightLoader, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
378
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: HighlightLoader, providedIn: 'root' }); }
|
|
378
379
|
}
|
|
379
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
380
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: HighlightLoader, decorators: [{
|
|
380
381
|
type: Injectable,
|
|
381
382
|
args: [{
|
|
382
383
|
providedIn: 'root'
|
|
@@ -478,10 +479,10 @@ class HighlightJS {
|
|
|
478
479
|
hljs.lineNumbersBlock(el, options);
|
|
479
480
|
}
|
|
480
481
|
}
|
|
481
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
482
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
482
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: HighlightJS, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
483
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: HighlightJS, providedIn: 'root' }); }
|
|
483
484
|
}
|
|
484
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
485
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: HighlightJS, decorators: [{
|
|
485
486
|
type: Injectable,
|
|
486
487
|
args: [{
|
|
487
488
|
providedIn: 'root'
|
|
@@ -547,10 +548,10 @@ class HighlightBase {
|
|
|
547
548
|
setInnerHTML(content) {
|
|
548
549
|
this.nativeElement.innerHTML = trustedHTMLFromStringBypass(this.sanitizer.sanitize(SecurityContext.HTML, content || null) || '');
|
|
549
550
|
}
|
|
550
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
551
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "
|
|
551
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: HighlightBase, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
552
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.0.5", type: HighlightBase, isStandalone: true, ngImport: i0 }); }
|
|
552
553
|
}
|
|
553
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
554
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: HighlightBase, decorators: [{
|
|
554
555
|
type: Directive
|
|
555
556
|
}], ctorParameters: () => [] });
|
|
556
557
|
|
|
@@ -580,10 +581,10 @@ class HighlightAutoDirective extends HighlightBase {
|
|
|
580
581
|
const hljs = this.hljs.hljs();
|
|
581
582
|
return hljs?.highlightAuto(code, this.languages());
|
|
582
583
|
}
|
|
583
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
584
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "
|
|
584
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: HighlightAutoDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
|
|
585
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.0.5", type: HighlightAutoDirective, isStandalone: true, selector: "[nxtHighlightAuto]", inputs: { code: { classPropertyName: "code", publicName: "nxtHighlightAuto", isSignal: true, isRequired: false, transformFunction: null }, languages: { classPropertyName: "languages", publicName: "languages", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { highlighted: "highlighted" }, host: { properties: { "class.hljs": "true" } }, providers: [{ provide: HighlightBase, useExisting: HighlightAutoDirective }], usesInheritance: true, ngImport: i0 }); }
|
|
585
586
|
}
|
|
586
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
587
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: HighlightAutoDirective, decorators: [{
|
|
587
588
|
type: Directive,
|
|
588
589
|
args: [{
|
|
589
590
|
selector: '[nxtHighlightAuto]',
|
|
@@ -628,10 +629,10 @@ class HighlightDirective extends HighlightBase {
|
|
|
628
629
|
ignoreIllegals: this.ignoreIllegals()
|
|
629
630
|
});
|
|
630
631
|
}
|
|
631
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
632
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "
|
|
632
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: HighlightDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
|
|
633
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.0.5", type: HighlightDirective, isStandalone: true, selector: "[nxtHighlight]", inputs: { code: { classPropertyName: "code", publicName: "nxtHighlight", isSignal: true, isRequired: false, transformFunction: null }, language: { classPropertyName: "language", publicName: "language", isSignal: true, isRequired: true, transformFunction: null }, ignoreIllegals: { classPropertyName: "ignoreIllegals", publicName: "ignoreIllegals", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { highlighted: "highlighted" }, host: { properties: { "class.hljs": "true" } }, providers: [{ provide: HighlightBase, useExisting: HighlightDirective }], usesInheritance: true, ngImport: i0 }); }
|
|
633
634
|
}
|
|
634
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
635
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: HighlightDirective, decorators: [{
|
|
635
636
|
type: Directive,
|
|
636
637
|
args: [{
|
|
637
638
|
selector: '[nxtHighlight]',
|
|
@@ -643,11 +644,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.3", ngImpor
|
|
|
643
644
|
}] });
|
|
644
645
|
|
|
645
646
|
class HighlightModule {
|
|
646
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
647
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "
|
|
648
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "
|
|
647
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: HighlightModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
648
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.0.5", ngImport: i0, type: HighlightModule, imports: [HighlightDirective, HighlightAutoDirective], exports: [HighlightDirective, HighlightAutoDirective] }); }
|
|
649
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: HighlightModule }); }
|
|
649
650
|
}
|
|
650
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
651
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: HighlightModule, decorators: [{
|
|
651
652
|
type: NgModule,
|
|
652
653
|
args: [{
|
|
653
654
|
imports: [HighlightDirective, HighlightAutoDirective],
|