nxt-highlightjs 21.0.0-alpha.0 → 22.0.0-alpha.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/fesm2022/nxt-highlightjs-extras.mjs +8 -117
- package/fesm2022/nxt-highlightjs-extras.mjs.map +1 -1
- package/fesm2022/nxt-highlightjs-line-numbers.mjs +5 -5
- package/fesm2022/nxt-highlightjs-line-numbers.mjs.map +1 -1
- package/fesm2022/nxt-highlightjs.mjs +28 -158
- package/fesm2022/nxt-highlightjs.mjs.map +1 -1
- package/package.json +9 -9
- package/types/nxt-highlightjs-extras.d.ts +3 -48
- package/types/nxt-highlightjs.d.ts +48 -136
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { APP_BASE_HREF } from '@angular/common';
|
|
2
2
|
import * as i0 from '@angular/core';
|
|
3
|
-
import { InjectionToken, inject, DOCUMENT, PendingTasks, Injectable, Pipe
|
|
3
|
+
import { InjectionToken, inject, DOCUMENT, PendingTasks, Injectable, Pipe } from '@angular/core';
|
|
4
4
|
import { HttpClient, HttpParams } from '@angular/common/http';
|
|
5
5
|
import { Observable, shareReplay, EMPTY } from 'rxjs';
|
|
6
6
|
import { rxResource } from '@angular/core/rxjs-interop';
|
|
@@ -58,28 +58,6 @@ class CodeLoader {
|
|
|
58
58
|
this.options = inject(NXT_GIST_OPTIONS, { optional: true });
|
|
59
59
|
this.pendingTasks = inject(PendingTasks);
|
|
60
60
|
}
|
|
61
|
-
/**
|
|
62
|
-
* Get plus code
|
|
63
|
-
*
|
|
64
|
-
* @param id Gist ID
|
|
65
|
-
* @deprecated Use gistResource
|
|
66
|
-
*/
|
|
67
|
-
getCodeFromGist(id) {
|
|
68
|
-
let params;
|
|
69
|
-
if (this.options?.clientId && this.options?.clientSecret) {
|
|
70
|
-
params = new HttpParams().set('client_id', this.options.clientId).set('client_secret', this.options.clientSecret);
|
|
71
|
-
}
|
|
72
|
-
return this.fetchFile(`https://api.github.com/gists/${id}`, { params, responseType: 'json' });
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* Get code by URL
|
|
76
|
-
*
|
|
77
|
-
* @param url File raw link
|
|
78
|
-
* @deprecated Use fileResource
|
|
79
|
-
*/
|
|
80
|
-
getCodeFromUrl(url) {
|
|
81
|
-
return this.fetchFile(url, { responseType: 'text' });
|
|
82
|
-
}
|
|
83
61
|
fetchFile(url, options) {
|
|
84
62
|
// Check if URL is valid
|
|
85
63
|
if (isUrl(url)) {
|
|
@@ -105,10 +83,10 @@ class CodeLoader {
|
|
|
105
83
|
}
|
|
106
84
|
return EMPTY;
|
|
107
85
|
}
|
|
108
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
109
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
86
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: CodeLoader, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
87
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: CodeLoader, providedIn: 'root' }); }
|
|
110
88
|
}
|
|
111
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
89
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: CodeLoader, decorators: [{
|
|
112
90
|
type: Injectable,
|
|
113
91
|
args: [{
|
|
114
92
|
providedIn: 'root'
|
|
@@ -152,112 +130,25 @@ function gistResource(id, options) {
|
|
|
152
130
|
});
|
|
153
131
|
}
|
|
154
132
|
|
|
155
|
-
/**
|
|
156
|
-
* @deprecated use fileResource with `{ formatUrl: true }`
|
|
157
|
-
*/
|
|
158
|
-
class CodeFromUrlPipe {
|
|
159
|
-
constructor() {
|
|
160
|
-
this.location = inject(NXT_HIGHLIGHT_FILE_LOCATION);
|
|
161
|
-
this.loader = inject(CodeLoader);
|
|
162
|
-
}
|
|
163
|
-
transform(url) {
|
|
164
|
-
return this.loader.getCodeFromUrl(isUrl(url) ? url : this.location.formatPathname(url));
|
|
165
|
-
}
|
|
166
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: CodeFromUrlPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
167
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.0.8", ngImport: i0, type: CodeFromUrlPipe, isStandalone: true, name: "codeFromUrl" }); }
|
|
168
|
-
}
|
|
169
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: CodeFromUrlPipe, decorators: [{
|
|
170
|
-
type: Pipe,
|
|
171
|
-
args: [{
|
|
172
|
-
name: 'codeFromUrl'
|
|
173
|
-
}]
|
|
174
|
-
}] });
|
|
175
|
-
|
|
176
|
-
/**
|
|
177
|
-
* @deprecated use gistResource
|
|
178
|
-
*/
|
|
179
|
-
class GistDirective {
|
|
180
|
-
constructor() {
|
|
181
|
-
this.loader = inject(CodeLoader);
|
|
182
|
-
this.pendingTasks = inject(PendingTasks);
|
|
183
|
-
this.gist = input(undefined, { ...(ngDevMode ? { debugName: "gist" } : {}), alias: 'nxtGist' });
|
|
184
|
-
this.gistLoad = output();
|
|
185
|
-
this.gistError = output();
|
|
186
|
-
effect((cleanup) => {
|
|
187
|
-
const value = this.gist();
|
|
188
|
-
if (value) {
|
|
189
|
-
const done = this.pendingTasks.add();
|
|
190
|
-
const sub = this.loader.getCodeFromGist(value).subscribe({
|
|
191
|
-
next: (gist) => {
|
|
192
|
-
this.gistLoad.emit(gist);
|
|
193
|
-
done();
|
|
194
|
-
},
|
|
195
|
-
error: (err) => {
|
|
196
|
-
this.gistError.emit(err);
|
|
197
|
-
done();
|
|
198
|
-
}
|
|
199
|
-
});
|
|
200
|
-
cleanup(() => {
|
|
201
|
-
sub.unsubscribe();
|
|
202
|
-
done();
|
|
203
|
-
});
|
|
204
|
-
}
|
|
205
|
-
});
|
|
206
|
-
}
|
|
207
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: GistDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
208
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.0.8", type: GistDirective, isStandalone: true, selector: "[nxtGist]", inputs: { gist: { classPropertyName: "gist", publicName: "nxtGist", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { gistLoad: "gistLoad", gistError: "gistError" }, ngImport: i0 }); }
|
|
209
|
-
}
|
|
210
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: GistDirective, decorators: [{
|
|
211
|
-
type: Directive,
|
|
212
|
-
args: [{
|
|
213
|
-
selector: '[nxtGist]'
|
|
214
|
-
}]
|
|
215
|
-
}], ctorParameters: () => [], propDecorators: { gist: [{ type: i0.Input, args: [{ isSignal: true, alias: "nxtGist", required: false }] }], gistLoad: [{ type: i0.Output, args: ["gistLoad"] }], gistError: [{ type: i0.Output, args: ["gistError"] }] } });
|
|
216
133
|
class GistFilePipe {
|
|
217
134
|
transform(gist, fileName) {
|
|
218
135
|
if (!fileName)
|
|
219
136
|
return;
|
|
220
137
|
return gist?.files?.[fileName];
|
|
221
138
|
}
|
|
222
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
223
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "
|
|
139
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: GistFilePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
140
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "22.0.6", ngImport: i0, type: GistFilePipe, isStandalone: true, name: "gistFile" }); }
|
|
224
141
|
}
|
|
225
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
142
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: GistFilePipe, decorators: [{
|
|
226
143
|
type: Pipe,
|
|
227
144
|
args: [{
|
|
228
145
|
name: 'gistFile'
|
|
229
146
|
}]
|
|
230
147
|
}] });
|
|
231
148
|
|
|
232
|
-
/** @deprecated use standalone imports */
|
|
233
|
-
class HighlightExstrasModule {
|
|
234
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: HighlightExstrasModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
235
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.0.8", ngImport: i0, type: HighlightExstrasModule, imports: [GistDirective,
|
|
236
|
-
GistFilePipe,
|
|
237
|
-
CodeFromUrlPipe], exports: [GistDirective,
|
|
238
|
-
GistFilePipe,
|
|
239
|
-
CodeFromUrlPipe] }); }
|
|
240
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: HighlightExstrasModule }); }
|
|
241
|
-
}
|
|
242
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: HighlightExstrasModule, decorators: [{
|
|
243
|
-
type: NgModule,
|
|
244
|
-
args: [{
|
|
245
|
-
imports: [
|
|
246
|
-
GistDirective,
|
|
247
|
-
GistFilePipe,
|
|
248
|
-
CodeFromUrlPipe
|
|
249
|
-
],
|
|
250
|
-
exports: [
|
|
251
|
-
GistDirective,
|
|
252
|
-
GistFilePipe,
|
|
253
|
-
CodeFromUrlPipe
|
|
254
|
-
]
|
|
255
|
-
}]
|
|
256
|
-
}] });
|
|
257
|
-
|
|
258
149
|
/**
|
|
259
150
|
* Generated bundle index. Do not edit.
|
|
260
151
|
*/
|
|
261
152
|
|
|
262
|
-
export { CODE_FILE_LOCATION_FACTORY,
|
|
153
|
+
export { CODE_FILE_LOCATION_FACTORY, CodeLoader, GistFilePipe, NXT_GIST_OPTIONS, NXT_HIGHLIGHT_FILE_LOCATION, fileResource, gistResource, isUrl, provideGistOptions };
|
|
263
154
|
//# sourceMappingURL=nxt-highlightjs-extras.mjs.map
|
|
@@ -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.pipe.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\n/**\r\n * @internal\r\n */\r\nexport interface CodeFileLocation {\r\n formatPathname: (path: string) => string\r\n}\r\n\r\n/** @internal */\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\n/** @internal */\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\n/**\r\n * @internal\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, PendingTasks, Signal } from '@angular/core'\r\nimport { EMPTY, Observable, shareReplay } from 'rxjs'\r\nimport { rxResource, RxResourceOptions } from '@angular/core/rxjs-interop'\r\nimport { Gist, isUrl, NXT_GIST_OPTIONS } from './gist.model'\r\nimport { NXT_HIGHLIGHT_FILE_LOCATION } from './code-file-location'\r\n\r\n/** @internal */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CodeLoader {\r\n\r\n readonly http = inject(HttpClient)\r\n readonly options = inject(NXT_GIST_OPTIONS, { optional: true })\r\n private readonly pendingTasks = inject(PendingTasks)\r\n\r\n /**\r\n * Get plus code\r\n *\r\n * @param id Gist ID\r\n * @deprecated Use gistResource\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 * @deprecated Use fileResource\r\n */\r\n getCodeFromUrl(url: string): Observable<string> {\r\n return this.fetchFile(url, { responseType: 'text' })\r\n }\r\n\r\n 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 obs => new Observable(sub => {\r\n const done = this.pendingTasks.add()\r\n const s = obs.subscribe({\r\n next: val => {\r\n sub.next(val)\r\n done()\r\n },\r\n error: err => {\r\n sub.error(err)\r\n console.log(err)\r\n done()\r\n },\r\n complete: () => sub.complete()\r\n })\r\n s.add(() => done())\r\n return s\r\n }),\r\n // Catch response\r\n shareReplay(1)\r\n )\r\n }\r\n return EMPTY\r\n }\r\n\r\n}\r\n\r\n/**\r\n * Code resource by URL\r\n *\r\n * @param url File raw link\r\n */\r\nexport function fileResource(url: string | Signal<string>, _options: Omit<RxResourceOptions<string, string>, 'params' | 'stream'> & { formatUrl?: boolean } = {}) {\r\n const { formatUrl, ...options } = _options\r\n const cl = options?.injector ? options.injector.get(CodeLoader) : inject(CodeLoader)\r\n const location = options?.injector ? options.injector.get(NXT_HIGHLIGHT_FILE_LOCATION) : inject(NXT_HIGHLIGHT_FILE_LOCATION)\r\n\r\n return rxResource({\r\n ...options,\r\n params: () => {\r\n const fileUrl = typeof url == 'string' ? url : url()\r\n return isUrl(fileUrl) ? fileUrl : location.formatPathname(fileUrl)\r\n },\r\n stream: ({ params: fileUrl }) => cl.fetchFile(fileUrl, { responseType: 'text' })\r\n })\r\n}\r\n\r\n/**\r\n * Gist resource by id\r\n *\r\n * @param id Gist ID\r\n */\r\nexport function gistResource(id: string | Signal<string>, options?: Omit<RxResourceOptions<Gist, string>, 'params' | 'stream'>) {\r\n const cl = options?.injector ? options.injector.get(CodeLoader) : inject(CodeLoader)\r\n return rxResource({\r\n ...options,\r\n params: () => typeof id == 'string' ? id : id(),\r\n stream: ({ params: gistId }) => {\r\n let params: HttpParams | undefined\r\n if (cl.options?.clientId && cl.options?.clientSecret) {\r\n params = new HttpParams().set('client_id', cl.options.clientId).set('client_secret', cl.options.clientSecret)\r\n }\r\n return cl.fetchFile(`https://api.github.com/gists/${gistId}`, { params, responseType: 'json' })\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/**\r\n * @deprecated use fileResource with `{ formatUrl: true }`\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 { Directive, effect, inject, input, output, PendingTasks, Pipe, PipeTransform } from '@angular/core'\r\nimport { CodeLoader } from './code-loader'\r\nimport { Gist, GistFile } from './gist.model'\r\n\r\n/**\r\n * @deprecated use gistResource\r\n */\r\n@Directive({\r\n selector: '[nxtGist]'\r\n})\r\nexport class GistDirective {\r\n\r\n private readonly loader = inject(CodeLoader)\r\n private readonly pendingTasks = inject(PendingTasks)\r\n\r\n readonly gist = input<string>(undefined, { alias: 'nxtGist' })\r\n readonly gistLoad = output<Gist>()\r\n readonly gistError = output<any>()\r\n\r\n constructor() {\r\n effect((cleanup) => {\r\n const value = this.gist()\r\n\r\n if (value) {\r\n const done = this.pendingTasks.add()\r\n const sub = this.loader.getCodeFromGist(value).subscribe({\r\n next: (gist: Gist) => {\r\n this.gistLoad.emit(gist)\r\n done()\r\n },\r\n error: (err) => {\r\n this.gistError.emit(err)\r\n done()\r\n }\r\n })\r\n cleanup(() => {\r\n sub.unsubscribe()\r\n done()\r\n })\r\n }\r\n })\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.pipe'\r\nimport { GistDirective, GistFilePipe } from './gist'\r\n\r\n/** @deprecated use standalone imports */\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;MACU,2BAA2B,GAAG,IAAI,cAAc,CAAmB,6BAA6B,EAAE;AAC3G,IAAA,UAAU,EAAE,MAAM;AAClB,IAAA,OAAO,EAAE;AACZ,CAAA;AASD;SACgB,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;QACxB;KACH;AACL;;ACtCA;AACM,SAAU,KAAK,CAAC,GAAW,EAAA;IAC7B,MAAM,MAAM,GAAW,+EAA+E;AACtG,IAAA,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;AAC3B;AAOA;;AAEG;MACU,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;;AClBA;MAIa,UAAU,CAAA;AAHvB,IAAA,WAAA,GAAA;AAKa,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;QACzB,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,gBAAgB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAC9C,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AAsDvD,IAAA;AApDG;;;;;AAKG;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;QACrH;AACA,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,CAAA,6BAAA,EAAgC,EAAE,CAAA,CAAE,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC;IACjG;AAEA;;;;;AAKG;AACH,IAAA,cAAc,CAAC,GAAW,EAAA;AACtB,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC;IACxD;IAEA,SAAS,CAAC,GAAW,EAAE,OAAY,EAAA;;AAE/B,QAAA,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE;YACZ,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,IAAI,CACnC,GAAG,IAAI,IAAI,UAAU,CAAC,GAAG,IAAG;gBACxB,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE;AACpC,gBAAA,MAAM,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC;oBACpB,IAAI,EAAE,GAAG,IAAG;AACR,wBAAA,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;AACb,wBAAA,IAAI,EAAE;oBACV,CAAC;oBACD,KAAK,EAAE,GAAG,IAAG;AACT,wBAAA,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;AACd,wBAAA,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;AAChB,wBAAA,IAAI,EAAE;oBACV,CAAC;AACD,oBAAA,QAAQ,EAAE,MAAM,GAAG,CAAC,QAAQ;AAC/B,iBAAA,CAAC;gBACF,CAAC,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC;AACnB,gBAAA,OAAO,CAAC;AACZ,YAAA,CAAC,CAAC;;AAEF,YAAA,WAAW,CAAC,CAAC,CAAC,CACjB;QACL;AACA,QAAA,OAAO,KAAK;IAChB;8GAxDS,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;;AA6DD;;;;AAIG;SACa,YAAY,CAAC,GAA4B,EAAE,WAAmG,EAAE,EAAA;IAC5J,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,EAAE,GAAG,QAAQ;IAC1C,MAAM,EAAE,GAAG,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC;IACpF,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,2BAA2B,CAAC,GAAG,MAAM,CAAC,2BAA2B,CAAC;AAE5H,IAAA,OAAO,UAAU,CAAC;AACd,QAAA,GAAG,OAAO;QACV,MAAM,EAAE,MAAK;AACT,YAAA,MAAM,OAAO,GAAG,OAAO,GAAG,IAAI,QAAQ,GAAG,GAAG,GAAG,GAAG,EAAE;AACpD,YAAA,OAAO,KAAK,CAAC,OAAO,CAAC,GAAG,OAAO,GAAG,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC;QACtE,CAAC;QACD,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE;AAClF,KAAA,CAAC;AACN;AAEA;;;;AAIG;AACG,SAAU,YAAY,CAAC,EAA2B,EAAE,OAAoE,EAAA;IAC1H,MAAM,EAAE,GAAG,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC;AACpF,IAAA,OAAO,UAAU,CAAC;AACd,QAAA,GAAG,OAAO;AACV,QAAA,MAAM,EAAE,MAAM,OAAO,EAAE,IAAI,QAAQ,GAAG,EAAE,GAAG,EAAE,EAAE;QAC/C,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,KAAI;AAC3B,YAAA,IAAI,MAA8B;AAClC,YAAA,IAAI,EAAE,CAAC,OAAO,EAAE,QAAQ,IAAI,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE;gBAClD,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,eAAe,EAAE,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC;YACjH;AACA,YAAA,OAAO,EAAE,CAAC,SAAS,CAAC,CAAA,6BAAA,EAAgC,MAAM,CAAA,CAAE,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC;QACnG;AACH,KAAA,CAAC;AACN;;ACvGA;;AAEG;MAIU,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,IAAA;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;IAC3F;8GAPS,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;;;ACPD;;AAEG;MAIU,aAAa,CAAA;AAStB,IAAA,WAAA,GAAA;AAPiB,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC;AAC3B,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;QAE3C,IAAA,CAAA,IAAI,GAAG,KAAK,CAAS,SAAS,iDAAI,KAAK,EAAE,SAAS,EAAA,CAAG;QACrD,IAAA,CAAA,QAAQ,GAAG,MAAM,EAAQ;QACzB,IAAA,CAAA,SAAS,GAAG,MAAM,EAAO;AAG9B,QAAA,MAAM,CAAC,CAAC,OAAO,KAAI;AACf,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE;YAEzB,IAAI,KAAK,EAAE;gBACP,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE;AACpC,gBAAA,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC;AACrD,oBAAA,IAAI,EAAE,CAAC,IAAU,KAAI;AACjB,wBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AACxB,wBAAA,IAAI,EAAE;oBACV,CAAC;AACD,oBAAA,KAAK,EAAE,CAAC,GAAG,KAAI;AACX,wBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC;AACxB,wBAAA,IAAI,EAAE;oBACV;AACH,iBAAA,CAAC;gBACF,OAAO,CAAC,MAAK;oBACT,GAAG,CAAC,WAAW,EAAE;AACjB,oBAAA,IAAI,EAAE;AACV,gBAAA,CAAC,CAAC;YACN;AACJ,QAAA,CAAC,CAAC;IACN;8GA/BS,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,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,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;;MAsCY,YAAY,CAAA;IACrB,SAAS,CAAC,IAAkB,EAAE,QAAwB,EAAA;AAClD,QAAA,IAAI,CAAC,QAAQ;YACT;AACJ,QAAA,OAAO,IAAI,EAAE,KAAK,GAAG,QAAQ,CAAC;IAClC;8GALS,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;;;AC1CD;MAaa,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;;;AChBD;;AAEG;;;;"}
|
|
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/gist.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\n/**\r\n * @internal\r\n */\r\nexport interface CodeFileLocation {\r\n formatPathname: (path: string) => string\r\n}\r\n\r\n/** @internal */\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\n/** @internal */\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\n/**\r\n * @internal\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'\nimport { inject, Injectable, PendingTasks, Signal } from '@angular/core'\nimport { EMPTY, Observable, shareReplay } from 'rxjs'\nimport { rxResource, RxResourceOptions } from '@angular/core/rxjs-interop'\nimport { Gist, isUrl, NXT_GIST_OPTIONS } from './gist.model'\nimport { NXT_HIGHLIGHT_FILE_LOCATION } from './code-file-location'\n\n/** @internal */\n@Injectable({\n providedIn: 'root'\n})\nexport class CodeLoader {\n\n readonly http = inject(HttpClient)\n readonly options = inject(NXT_GIST_OPTIONS, { optional: true })\n private readonly pendingTasks = inject(PendingTasks)\n\n fetchFile(url: string, options: any): Observable<any> {\n // Check if URL is valid\n if (isUrl(url)) {\n return this.http.get(url, options).pipe(\n obs => new Observable(sub => {\n const done = this.pendingTasks.add()\n const s = obs.subscribe({\n next: val => {\n sub.next(val)\n done()\n },\n error: err => {\n sub.error(err)\n console.log(err)\n done()\n },\n complete: () => sub.complete()\n })\n s.add(() => done())\n return s\n }),\n // Catch response\n shareReplay(1)\n )\n }\n return EMPTY\n }\n\n}\n\n/**\n * Code resource by URL\n *\n * @param url File raw link\n */\nexport function fileResource(url: string | Signal<string>, _options: Omit<RxResourceOptions<string, string>, 'params' | 'stream'> & { formatUrl?: boolean } = {}) {\n const { formatUrl, ...options } = _options\n const cl = options?.injector ? options.injector.get(CodeLoader) : inject(CodeLoader)\n const location = options?.injector ? options.injector.get(NXT_HIGHLIGHT_FILE_LOCATION) : inject(NXT_HIGHLIGHT_FILE_LOCATION)\n\n return rxResource({\n ...options,\n params: () => {\n const fileUrl = typeof url == 'string' ? url : url()\n return isUrl(fileUrl) ? fileUrl : location.formatPathname(fileUrl)\n },\n stream: ({ params: fileUrl }) => cl.fetchFile(fileUrl, { responseType: 'text' })\n })\n}\n\n/**\n * Gist resource by id\n *\n * @param id Gist ID\n */\nexport function gistResource(id: string | Signal<string>, options?: Omit<RxResourceOptions<Gist, string>, 'params' | 'stream'>) {\n const cl = options?.injector ? options.injector.get(CodeLoader) : inject(CodeLoader)\n return rxResource({\n ...options,\n params: () => typeof id == 'string' ? id : id(),\n stream: ({ params: gistId }) => {\n let params: HttpParams | undefined\n if (cl.options?.clientId && cl.options?.clientSecret) {\n params = new HttpParams().set('client_id', cl.options.clientId).set('client_secret', cl.options.clientSecret)\n }\n return cl.fetchFile(`https://api.github.com/gists/${gistId}`, { params, responseType: 'json' })\n }\n })\n}\n","import { Pipe, PipeTransform } from '@angular/core'\nimport { Gist, GistFile } from './gist.model'\n\n@Pipe({\n name: 'gistFile'\n})\nexport class GistFilePipe implements PipeTransform {\n transform(gist?: Gist | null, fileName?: string | null): GistFile | undefined {\n if (!fileName)\n return\n return gist?.files?.[fileName]\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
|
|
@@ -210,8 +210,8 @@ class HighlightLineNumbersDirective {
|
|
|
210
210
|
this.hljs = inject(HighlightJS);
|
|
211
211
|
this.highlight = inject(HighlightBase);
|
|
212
212
|
this.nativeElement = inject((ElementRef)).nativeElement;
|
|
213
|
-
this.startFrom = input(this.options?.startFrom, { ...(ngDevMode ? { debugName: "startFrom" } : {}), transform: numberAttribute });
|
|
214
|
-
this.singleLine = input(this.options?.singleLine, { ...(ngDevMode ? { debugName: "singleLine" } : {}), transform: booleanAttribute });
|
|
213
|
+
this.startFrom = input(this.options?.startFrom, { ...(ngDevMode ? { debugName: "startFrom" } : /* istanbul ignore next */ {}), transform: numberAttribute });
|
|
214
|
+
this.singleLine = input(this.options?.singleLine, { ...(ngDevMode ? { debugName: "singleLine" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
215
215
|
effect(() => {
|
|
216
216
|
const hljs = this.hljs.hljs();
|
|
217
217
|
const result = this.highlight.highlightResult();
|
|
@@ -233,10 +233,10 @@ class HighlightLineNumbersDirective {
|
|
|
233
233
|
}
|
|
234
234
|
});
|
|
235
235
|
}
|
|
236
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
237
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "
|
|
236
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: HighlightLineNumbersDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
237
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.6", 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 }); }
|
|
238
238
|
}
|
|
239
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
239
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: HighlightLineNumbersDirective, decorators: [{
|
|
240
240
|
type: Directive,
|
|
241
241
|
args: [{
|
|
242
242
|
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":["import { LineNumbersOptions } from 'nxt-highlightjs'\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<number | undefined, unknown>(this.options?.startFrom, {\r\n transform: numberAttribute\r\n })\r\n\r\n readonly singleLine = input<boolean | undefined, unknown>(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":";;;;AAEM,SAAU,mBAAmB,CAAC,QAAkB,EAAA;IAClD,MAAM,UAAU,GAAG,SAAS;IAC5B,MAAM,SAAS,GAAG,cAAc;IAChC,MAAM,eAAe,GAAG,cAAc;IACtC,MAAM,kBAAkB,GAAG,iBAAiB;IAC5C,MAAM,gBAAgB,GAAG,WAAW;IACpC,MAAM,cAAc,GAAG,kBAAkB;IACzC,MAAM,iBAAiB,GAAG,aAAa;AAEvC,IAAA,SAAS,EAAE;IAEX,SAAS,sBAAsB,CAAC,MAA2B,EAAA;QACvD,IAAI,MAAM,GAAG,MAAM;QACnB,OAAO,MAAM,EAAE;AACX,YAAA,IAAI,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE;AACrE,gBAAA,OAAO,IAAI;YACf;AACA,YAAA,MAAM,GAAG,MAAM,CAAC,UAAyB;QAC7C;AACA,QAAA,OAAO,KAAK;IAChB;IAEA,SAAS,cAAc,CAAC,YAA0B,EAAA;QAC9C,IAAI,MAAM,GAAG,YAAY;QACzB,OAAO,MAAM,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,EAAE;AAC1C,YAAA,MAAM,GAAG,MAAM,CAAC,UAAyB;QAC7C;AACA,QAAA,OAAO,MAAM;IACjB;;;;;;IAOA,SAAS,wBAAwB,CAAC,SAAoB,EAAA;;AAElD,QAAA,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,EAAE;;AAG1C,QAAA,IAAI,QAAQ,GAAG,SAAS,CAAC,UAAU;AACnC,QAAA,OAAO,QAAQ,EAAE,QAAQ,KAAK,IAAI,EAAE;AAChC,YAAA,QAAQ,GAAG,QAAQ,EAAE,UAAU,IAAI,IAAI;QAC3C;;AAGA,QAAA,IAAI,OAAO,GAAG,SAAS,CAAC,SAAS;AACjC,QAAA,OAAO,OAAO,EAAE,QAAQ,KAAK,IAAI,EAAE;AAC/B,YAAA,OAAO,GAAG,OAAO,EAAE,UAAU,IAAI,IAAI;QACzC;;AAGA,QAAA,IAAI,eAAe,GAAG,QAAQ,CAAE,QAA+B,EAAE,OAAO,CAAC,YAAY,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC;AAClG,QAAA,IAAI,cAAc,GAAG,QAAQ,CAAE,OAA8B,EAAE,OAAO,CAAC,YAAY,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC;;AAGhG,QAAA,IAAI,eAAe,IAAI,cAAc,EAAE;AAEnC,YAAA,IAAI,aAAa,GAAG,QAAQ,CAAC,WAAW;AACxC,YAAA,IAAI,YAAY,GAAG,OAAO,CAAC,WAAW;;AAGtC,YAAA,IAAI,eAAe,GAAG,cAAc,EAAE;gBAClC,MAAM,GAAG,GAAG,eAAe;gBAC3B,eAAe,GAAG,cAAc;gBAChC,cAAc,GAAG,GAAG;gBACpB,MAAM,IAAI,GAAG,aAAa;gBAC1B,aAAa,GAAG,YAAY;gBAC5B,YAAY,GAAG,IAAI;YACvB;;YAGA,OAAO,aAAa,CAAC,OAAO,CAAC,aAAa,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE;AACrD,gBAAA,aAAa,GAAG,aAAc,CAAC,KAAK,CAAC,CAAC,CAAC;YAC3C;;AAGA,YAAA,OAAO,aAAa,CAAC,WAAW,CAAC,YAAY,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE;gBACzD,YAAY,GAAG,YAAa,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC7C;;YAGA,IAAI,YAAY,GAAG,aAAa;AAChC,YAAA,MAAM,WAAW,GAAG,cAAc,CAAC,QAAuB,CAAC;AAC3D,YAAA,KAAK,IAAI,CAAC,GAAG,eAAe,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,EAAE,EAAE,CAAC,EAAE;AACvD,gBAAA,MAAM,WAAW,GAAG,MAAM,CAAC,iBAAiB,EAAE,CAAC,eAAe,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC;gBACnF,MAAM,WAAW,GAAG,WAAW,EAAE,aAAa,CAAC,WAAW,CAAC;gBAC3D,YAAY,IAAI,IAAI,IAAI,WAAW,EAAE,WAAW,IAAI,EAAE,CAAC;YAC3D;AACA,YAAA,YAAY,IAAI,IAAI,GAAG,YAAY;AACnC,YAAA,OAAO,YAAY;;QAEvB;aAAO;AACH,YAAA,OAAO,aAAa;QACxB;IACJ;;;IAIA,QAAQ,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC,KAAI;;AAEpC,QAAA,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,EAAE;;AAEvC,QAAA,IAAI,sBAAsB,CAAC,SAAS,EAAE,UAA4C,CAAC,EAAE;AACjF,YAAA,IAAI,aAAwC;;;AAG5C,YAAA,IAAI,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,SAAS,EAAE;AAChE,gBAAA,aAAa,GAAG,wBAAwB,CAAC,SAAS,CAAC;YACvD;iBAAO;;AAEH,gBAAA,aAAa,GAAG,SAAS,EAAE,QAAQ,EAAE;YACzC;YACA,IAAI,aAAa,EAAE;gBACf,CAAC,CAAC,aAAa,EAAE,OAAO,CAAC,YAAY,EAAE,aAAa,CAAC;gBACrD,CAAC,CAAC,cAAc,EAAE;YACtB;QACJ;AACJ,IAAA,CAAC,CAAC;AAEF,IAAA,SAAS,SAAS,GAAA;QACd,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;AAC3C,QAAA,GAAG,CAAC,SAAS,GAAG,MAAM,CAClB,gCAAgC;YAChC,oBAAoB;AACpB,YAAA,gCAAgC,EAChC;YACI,UAAU;YACV,gBAAgB;YAChB;AACH,SAAA,CAAC;AACN,QAAA,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC;IAC7D;AAEA,IAAA,SAAS,gBAAgB,CAAC,IAAY,EAAE,OAA4B,EAAA;AAChE,QAAA,OAAO,mBAAmB,CAAC,IAAI,EAAE,OAAO,CAAC;IAC7C;AAEA,IAAA,SAAS,mBAAmB,CAAC,IAAY,EAAE,OAA4B,EAAA;AAEnE,QAAA,MAAM,eAAe,GAAG,UAAU,CAAC,OAAO,CAAC;AAE3C,QAAA,OAAO,sBAAsB,CAAC,IAAI,EAAE,eAAe,CAAC;IACxD;AAEA,IAAA,SAAS,sBAAsB,CAAC,SAAiB,EAAE,OAA4B,EAAA;AAC3E,QAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC;;AAGjC,QAAA,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;YACvC,KAAK,CAAC,GAAG,EAAE;QACf;QAEA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,EAAE,UAAU,EAAE;YACzC,IAAI,IAAI,GAAG,EAAE;AAEb,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;gBAC1C,IAAI,IAAI,MAAM,CACV,MAAM;oBACN,gCAAgC;oBAChC,mCAAmC;oBACnC,OAAO;oBACP,gCAAgC;oBAChC,KAAK;oBACL,OAAO;AACP,oBAAA,OAAO,EACP;oBACI,SAAS;oBACT,kBAAkB;oBAClB,gBAAgB;oBAChB,cAAc;oBACd,eAAe;oBACf,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;AAClC,oBAAA,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG;AACpC,iBAAA,CAAC;YACV;YAEA,OAAO,MAAM,CAAC,gCAAgC,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QACvE;AAEA,QAAA,OAAO,SAAS;IACpB;AAEA;;;;AAIG;IACH,SAAS,UAAU,CAAC,OAA4B,EAAA;AAC5C,QAAA,OAAO,GAAG,OAAO,IAAI,EAAE;QACvB,OAAO;AACH,YAAA,UAAU,EAAE,mBAAmB,CAAC,OAAO,CAAC;AACxC,YAAA,SAAS,EAAE,kBAAkB,CAAC,OAAO;SACxC;IACL;IAEA,SAAS,mBAAmB,CAAC,OAA4B,EAAA;QACrD,MAAM,YAAY,GAAG,KAAK;AAC1B,QAAA,IAAI,CAAC,CAAC,OAAO,EAAE,UAAU,EAAE;YACvB,OAAO,OAAO,CAAC,UAAU;QAC7B;AACA,QAAA,OAAO,YAAY;IACvB;IAEA,SAAS,kBAAkB,CAAC,OAA4B,EAAA;QACpD,MAAM,YAAY,GAAG,CAAC;QACtB,IAAI,SAAS,GAAG,YAAY;QAE5B,IAAI,QAAQ,CAAC,OAAO,EAAE,SAAS,IAAI,GAAG,CAAC,EAAE;AACrC,YAAA,SAAS,GAAG,OAAQ,CAAC,SAAU;QACnC;AAEA,QAAA,OAAO,SAAS;IACpB;IAEA,SAAS,QAAQ,CAAC,IAAY,EAAA;AAC1B,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,EAAE;AAChC,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC;IACxC;;;;AAMA;;;;;AAKG;AACH,IAAA,SAAS,MAAM,CAAC,YAAoB,EAAE,IAAW,EAAA;AAC7C,QAAA,OAAO,YAAY,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAChH;AAEA,IAAA,OAAO,gBAAgB;AAC3B;;MC/Na,6BAA6B,CAAA;AAetC,IAAA,WAAA,GAAA;AAbiB,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,qBAAqB,CAAC,EAAE,kBAAkB;AAC3D,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC;AAC1B,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,aAAa,CAAC;QACjC,IAAA,CAAA,aAAa,GAAG,MAAM,EAAC,UAAuB,EAAC,CAAC,aAAa;AAErE,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAA8B,IAAI,CAAC,OAAO,EAAE,SAAS,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,WAAA,EAAA,GAAA,EAAA,CAAA,EAC3E,SAAS,EAAE,eAAe,GAC5B;AAEO,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK,CAA+B,IAAI,CAAC,OAAO,EAAE,UAAU,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,YAAA,EAAA,GAAA,EAAA,CAAA,EAC9E,SAAS,EAAE,gBAAgB,GAC7B;QAGE,MAAM,CAAC,MAAK;YACR,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE;AAC/C,YAAA,IAAI,MAAM,EAAE,KAAK,EAAE;AACf,gBAAA,IAAK,IAAY,CAAC,gBAAgB,EAAE;oBAChC,MAAM,IAAI,GAAI,IAAY,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,EAAE;AACtD,wBAAA,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE;AAC3B,wBAAA,UAAU,EAAE,IAAI,CAAC,UAAU;AAC9B,qBAAA,CAAC;AACF,oBAAA,IAAI,CAAC,aAAa,CAAC,SAAS,GAAG,IAAI;gBACvC;;AAEA,gBAAA,IAAI,IAAI,CAAC,aAAa,CAAC,iBAAiB,EAAE,OAAO,CAAC,WAAW,EAAE,KAAK,OAAO,EAAE;oBACzE,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,mBAAmB,CAAC;gBACzD;qBAAO;oBACH,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,mBAAmB,CAAC;gBAC5D;YACJ;AACJ,QAAA,CAAC,CAAC;IACN;8GAnCS,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA7B,6BAA6B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,8DAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAA7B,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAHzC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE;AACb,iBAAA;;;ACbD;;AAEG;;;;"}
|
|
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":["import { LineNumbersOptions } from 'nxt-highlightjs'\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 {\n Directive,\n ElementRef,\n booleanAttribute,\n effect,\n inject,\n input,\n numberAttribute\n} from '@angular/core'\nimport { HighlightBase, HighlightJS, NXT_HIGHLIGHT_OPTIONS } from 'nxt-highlightjs'\n\n@Directive({\n selector: '[nxtHighlight][lineNumbers], [nxtHighlightAuto][lineNumbers]'\n})\nexport class HighlightLineNumbersDirective {\n\n private readonly options = inject(NXT_HIGHLIGHT_OPTIONS)?.lineNumbersOptions\n private readonly hljs = inject(HighlightJS)\n private readonly highlight = inject(HighlightBase)\n private readonly nativeElement = inject(ElementRef<HTMLElement>).nativeElement\n\n readonly startFrom = input<number | undefined, unknown>(this.options?.startFrom, {\n transform: numberAttribute\n })\n\n readonly singleLine = input<boolean | undefined, unknown>(this.options?.singleLine, {\n transform: booleanAttribute\n })\n\n constructor() {\n effect(() => {\n const hljs = this.hljs.hljs()\n const result = this.highlight.highlightResult()\n if (result?.value) {\n if ((hljs as any).lineNumbersBlock) {\n const code = (hljs as any).lineNumbersBlock(result.value, {\n startFrom: this.startFrom(),\n singleLine: this.singleLine()\n })\n this.nativeElement.innerHTML = code\n }\n // If lines count is 1, the line numbers library will not add numbers\n if (this.nativeElement.firstElementChild?.tagName.toUpperCase() === 'TABLE') {\n this.nativeElement.classList.add('hljs-line-numbers')\n } else {\n this.nativeElement.classList.remove('hljs-line-numbers')\n }\n }\n })\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { InjectionToken, makeEnvironmentProviders, inject, DOCUMENT, PendingTasks, resource, Injectable, ElementRef, effect, SecurityContext, Directive, input, signal, output, booleanAttribute
|
|
2
|
+
import { InjectionToken, makeEnvironmentProviders, inject, DOCUMENT, PendingTasks, resource, Injectable, ElementRef, effect, SecurityContext, Directive, input, signal, output, booleanAttribute } from '@angular/core';
|
|
3
3
|
import { DomSanitizer } from '@angular/platform-browser';
|
|
4
|
-
import { firstValueFrom, filter } from 'rxjs';
|
|
5
|
-
import { toObservable } from '@angular/core/rxjs-interop';
|
|
6
4
|
|
|
7
5
|
/**
|
|
8
6
|
* @internal
|
|
@@ -301,12 +299,6 @@ function escapeHTML(value) {
|
|
|
301
299
|
}
|
|
302
300
|
|
|
303
301
|
class HighlightLoader {
|
|
304
|
-
/**
|
|
305
|
-
* @deprecated use hljs.value()
|
|
306
|
-
*/
|
|
307
|
-
get ready() {
|
|
308
|
-
return firstValueFrom(this._ready$);
|
|
309
|
-
}
|
|
310
302
|
constructor() {
|
|
311
303
|
this.document = inject(DOCUMENT);
|
|
312
304
|
this.options = inject(NXT_HIGHLIGHT_OPTIONS, { optional: true });
|
|
@@ -328,7 +320,6 @@ class HighlightLoader {
|
|
|
328
320
|
})
|
|
329
321
|
.finally(this._t)
|
|
330
322
|
}).asReadonly();
|
|
331
|
-
this._ready$ = toObservable(this.hljs.value).pipe(filter((v) => !!v));
|
|
332
323
|
if (this.options?.themePath) {
|
|
333
324
|
this.loadTheme(this.options.themePath);
|
|
334
325
|
}
|
|
@@ -389,10 +380,10 @@ class HighlightLoader {
|
|
|
389
380
|
this.themeLinkElement.media = 'screen,print';
|
|
390
381
|
this.document.head.appendChild(this.themeLinkElement);
|
|
391
382
|
}
|
|
392
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
393
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
383
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: HighlightLoader, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
384
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: HighlightLoader, providedIn: 'root' }); }
|
|
394
385
|
}
|
|
395
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
386
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: HighlightLoader, decorators: [{
|
|
396
387
|
type: Injectable,
|
|
397
388
|
args: [{
|
|
398
389
|
providedIn: 'root'
|
|
@@ -404,121 +395,10 @@ class HighlightJS {
|
|
|
404
395
|
this.loader = inject(HighlightLoader);
|
|
405
396
|
this.hljs = this.loader.hljs.value;
|
|
406
397
|
}
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
*
|
|
410
|
-
* @deprecated use hljs().highlight
|
|
411
|
-
*/
|
|
412
|
-
async highlight(code, options) {
|
|
413
|
-
const hljs = await this.loader.ready;
|
|
414
|
-
return hljs.highlight(code, options);
|
|
415
|
-
}
|
|
416
|
-
/**
|
|
417
|
-
* Highlighting with language detection.
|
|
418
|
-
*
|
|
419
|
-
* @deprecated use hljs().highlightAuto
|
|
420
|
-
*/
|
|
421
|
-
async highlightAuto(value, languageSubset) {
|
|
422
|
-
const hljs = await this.loader.ready;
|
|
423
|
-
return hljs.highlightAuto(value, languageSubset);
|
|
424
|
-
}
|
|
425
|
-
/**
|
|
426
|
-
* Applies highlighting to a DOM node containing code.
|
|
427
|
-
* This function is the one to use to apply highlighting dynamically after page load or within initialization code of third-party JavaScript frameworks.
|
|
428
|
-
* The function uses language detection by default but you can specify the language in the class attribute of the DOM node. See the scopes reference for all available language names and scopes.
|
|
429
|
-
*
|
|
430
|
-
* @deprecated use hljs().highlightElement
|
|
431
|
-
*/
|
|
432
|
-
async highlightElement(element) {
|
|
433
|
-
const hljs = await this.loader.ready;
|
|
434
|
-
hljs.highlightElement(element);
|
|
435
|
-
}
|
|
436
|
-
/**
|
|
437
|
-
* Applies highlighting to all elements on a page matching the configured cssSelector. The default cssSelector value is 'pre code',
|
|
438
|
-
* which highlights all code blocks. This can be called before or after the page’s onload event has fired.
|
|
439
|
-
*
|
|
440
|
-
* @deprecated use hljs().highlightAll
|
|
441
|
-
*/
|
|
442
|
-
async highlightAll() {
|
|
443
|
-
const hljs = await this.loader.ready;
|
|
444
|
-
hljs.highlightAll();
|
|
445
|
-
}
|
|
446
|
-
/**
|
|
447
|
-
* Adds new language to the library under the specified name. Used mostly internally.
|
|
448
|
-
* The function is passed the hljs object to be able to use common regular expressions defined within it.
|
|
449
|
-
*
|
|
450
|
-
* @deprecated use hljs().registerLanguage
|
|
451
|
-
*/
|
|
452
|
-
async registerLanguage(languageName, languageDefinition) {
|
|
453
|
-
const hljs = await this.loader.ready;
|
|
454
|
-
hljs.registerLanguage(languageName, languageDefinition);
|
|
455
|
-
}
|
|
456
|
-
/**
|
|
457
|
-
* Removes a language and its aliases from the library. Used mostly internally
|
|
458
|
-
*
|
|
459
|
-
* @deprecated use hljs().unregisterLanguage
|
|
460
|
-
*/
|
|
461
|
-
async unregisterLanguage(languageName) {
|
|
462
|
-
const hljs = await this.loader.ready;
|
|
463
|
-
hljs.unregisterLanguage(languageName);
|
|
464
|
-
}
|
|
465
|
-
/**
|
|
466
|
-
* Adds new language alias or aliases to the library for the specified language name defined under languageName key.
|
|
467
|
-
*
|
|
468
|
-
* @deprecated use hljs().registerAliases
|
|
469
|
-
*/
|
|
470
|
-
async registerAliases(alias, { languageName }) {
|
|
471
|
-
const hljs = await this.loader.ready;
|
|
472
|
-
hljs.registerAliases(alias, { languageName });
|
|
473
|
-
}
|
|
474
|
-
/**
|
|
475
|
-
* @return The languages names list.
|
|
476
|
-
* @deprecated use hljs().listLanguages
|
|
477
|
-
*/
|
|
478
|
-
async listLanguages() {
|
|
479
|
-
const hljs = await this.loader.ready;
|
|
480
|
-
return hljs.listLanguages();
|
|
481
|
-
}
|
|
482
|
-
/**
|
|
483
|
-
* Looks up a language by name or alias.
|
|
484
|
-
*
|
|
485
|
-
* @deprecated use hljs().getLanguage
|
|
486
|
-
*/
|
|
487
|
-
async getLanguage(name) {
|
|
488
|
-
const hljs = await this.loader.ready;
|
|
489
|
-
return hljs.getLanguage(name);
|
|
490
|
-
}
|
|
491
|
-
/**
|
|
492
|
-
* Enables safe mode. This is the default mode, providing the most reliable experience for production usage.
|
|
493
|
-
*
|
|
494
|
-
* @deprecated use hljs().safeMode
|
|
495
|
-
*/
|
|
496
|
-
async safeMode() {
|
|
497
|
-
const hljs = await this.loader.ready;
|
|
498
|
-
hljs.safeMode();
|
|
499
|
-
}
|
|
500
|
-
/**
|
|
501
|
-
* Enables debug/development mode.
|
|
502
|
-
*
|
|
503
|
-
* @deprecated use hljs().debugMode
|
|
504
|
-
*/
|
|
505
|
-
async debugMode() {
|
|
506
|
-
const hljs = await this.loader.ready;
|
|
507
|
-
hljs.debugMode();
|
|
508
|
-
}
|
|
509
|
-
/**
|
|
510
|
-
* Display line numbers
|
|
511
|
-
*
|
|
512
|
-
* @deprecated use hljs().lineNumbersBlock
|
|
513
|
-
*/
|
|
514
|
-
async lineNumbersBlock(code, options) {
|
|
515
|
-
const hljs = await this.loader.ready;
|
|
516
|
-
hljs.lineNumbersBlock(code, options);
|
|
517
|
-
}
|
|
518
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: HighlightJS, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
519
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: HighlightJS, providedIn: 'root' }); }
|
|
398
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: HighlightJS, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
399
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: HighlightJS, providedIn: 'root' }); }
|
|
520
400
|
}
|
|
521
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
401
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: HighlightJS, decorators: [{
|
|
522
402
|
type: Injectable,
|
|
523
403
|
args: [{
|
|
524
404
|
providedIn: 'root'
|
|
@@ -591,10 +471,10 @@ class HighlightBase {
|
|
|
591
471
|
setInnerHTML(content) {
|
|
592
472
|
this.nativeElement.innerHTML = trustedHTMLFromStringBypass(this.sanitizer.sanitize(SecurityContext.HTML, content || null) || '');
|
|
593
473
|
}
|
|
594
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
595
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "
|
|
474
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: HighlightBase, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
475
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.6", type: HighlightBase, isStandalone: true, ngImport: i0 }); }
|
|
596
476
|
}
|
|
597
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
477
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: HighlightBase, decorators: [{
|
|
598
478
|
type: Directive
|
|
599
479
|
}], ctorParameters: () => [] });
|
|
600
480
|
|
|
@@ -604,17 +484,19 @@ class HighlightAutoDirective extends HighlightBase {
|
|
|
604
484
|
/**
|
|
605
485
|
* Code to highlight
|
|
606
486
|
*/
|
|
607
|
-
this.code = input(undefined, { ...(ngDevMode ? { debugName: "code" } : {}), alias: 'nxtHighlightAuto' });
|
|
487
|
+
this.code = input(undefined, { ...(ngDevMode ? { debugName: "code" } : /* istanbul ignore next */ {}), alias: 'nxtHighlightAuto' });
|
|
608
488
|
/**
|
|
609
489
|
* Highlighted result
|
|
610
490
|
*/
|
|
611
|
-
this.highlightResult = signal(undefined,
|
|
491
|
+
this.highlightResult = signal(undefined, /* @ts-ignore */
|
|
492
|
+
...(ngDevMode ? [{ debugName: "highlightResult" }] : /* istanbul ignore next */ []));
|
|
612
493
|
/**
|
|
613
494
|
* An optional array of language names and aliases restricting detection to only those languages
|
|
614
495
|
*
|
|
615
496
|
* The subset can also be set with configure, but the local parameter overrides the option if set.
|
|
616
497
|
*/
|
|
617
|
-
this.languages = input(
|
|
498
|
+
this.languages = input(/* @ts-ignore */
|
|
499
|
+
...(ngDevMode ? [undefined, { debugName: "languages" }] : /* istanbul ignore next */ []));
|
|
618
500
|
/**
|
|
619
501
|
* Stream that emits when code string is highlighted
|
|
620
502
|
*/
|
|
@@ -624,10 +506,10 @@ class HighlightAutoDirective extends HighlightBase {
|
|
|
624
506
|
const hljs = this.hljs.hljs();
|
|
625
507
|
return hljs?.highlightAuto(code, this.languages());
|
|
626
508
|
}
|
|
627
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
628
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "
|
|
509
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: HighlightAutoDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
|
|
510
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.6", 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 }); }
|
|
629
511
|
}
|
|
630
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
512
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: HighlightAutoDirective, decorators: [{
|
|
631
513
|
type: Directive,
|
|
632
514
|
args: [{
|
|
633
515
|
selector: '[nxtHighlightAuto]',
|
|
@@ -644,20 +526,22 @@ class HighlightDirective extends HighlightBase {
|
|
|
644
526
|
/**
|
|
645
527
|
* Code to highlight
|
|
646
528
|
*/
|
|
647
|
-
this.code = input(undefined, { ...(ngDevMode ? { debugName: "code" } : {}), alias: 'nxtHighlight' });
|
|
529
|
+
this.code = input(undefined, { ...(ngDevMode ? { debugName: "code" } : /* istanbul ignore next */ {}), alias: 'nxtHighlight' });
|
|
648
530
|
/**
|
|
649
531
|
* Highlighted result
|
|
650
532
|
*/
|
|
651
|
-
this.highlightResult = signal(undefined,
|
|
533
|
+
this.highlightResult = signal(undefined, /* @ts-ignore */
|
|
534
|
+
...(ngDevMode ? [{ debugName: "highlightResult" }] : /* istanbul ignore next */ []));
|
|
652
535
|
/**
|
|
653
536
|
* The language name highlight only one language
|
|
654
537
|
*/
|
|
655
|
-
this.language = input.required(
|
|
538
|
+
this.language = input.required(/* @ts-ignore */
|
|
539
|
+
...(ngDevMode ? [{ debugName: "language" }] : /* istanbul ignore next */ []));
|
|
656
540
|
/**
|
|
657
541
|
* An optional flag, when set to true it forces highlighting to finish even in case of detecting
|
|
658
542
|
* illegal syntax for the language instead of throwing an exception
|
|
659
543
|
*/
|
|
660
|
-
this.ignoreIllegals = input(undefined, { ...(ngDevMode ? { debugName: "ignoreIllegals" } : {}), transform: booleanAttribute });
|
|
544
|
+
this.ignoreIllegals = input(undefined, { ...(ngDevMode ? { debugName: "ignoreIllegals" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
661
545
|
/**
|
|
662
546
|
* Stream that emits when code string is highlighted
|
|
663
547
|
*/
|
|
@@ -670,10 +554,10 @@ class HighlightDirective extends HighlightBase {
|
|
|
670
554
|
ignoreIllegals: this.ignoreIllegals()
|
|
671
555
|
});
|
|
672
556
|
}
|
|
673
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
674
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "
|
|
557
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: HighlightDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
|
|
558
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.6", 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 }); }
|
|
675
559
|
}
|
|
676
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
560
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: HighlightDirective, decorators: [{
|
|
677
561
|
type: Directive,
|
|
678
562
|
args: [{
|
|
679
563
|
selector: '[nxtHighlight]',
|
|
@@ -684,23 +568,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImpor
|
|
|
684
568
|
}]
|
|
685
569
|
}], propDecorators: { code: [{ type: i0.Input, args: [{ isSignal: true, alias: "nxtHighlight", required: false }] }], language: [{ type: i0.Input, args: [{ isSignal: true, alias: "language", required: true }] }], ignoreIllegals: [{ type: i0.Input, args: [{ isSignal: true, alias: "ignoreIllegals", required: false }] }], highlighted: [{ type: i0.Output, args: ["highlighted"] }] } });
|
|
686
570
|
|
|
687
|
-
/** @deprecated use standalone imports */
|
|
688
|
-
class HighlightModule {
|
|
689
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: HighlightModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
690
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.0.8", ngImport: i0, type: HighlightModule, imports: [HighlightDirective, HighlightAutoDirective], exports: [HighlightDirective, HighlightAutoDirective] }); }
|
|
691
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: HighlightModule }); }
|
|
692
|
-
}
|
|
693
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: HighlightModule, decorators: [{
|
|
694
|
-
type: NgModule,
|
|
695
|
-
args: [{
|
|
696
|
-
imports: [HighlightDirective, HighlightAutoDirective],
|
|
697
|
-
exports: [HighlightDirective, HighlightAutoDirective]
|
|
698
|
-
}]
|
|
699
|
-
}] });
|
|
700
|
-
|
|
701
571
|
/**
|
|
702
572
|
* Generated bundle index. Do not edit.
|
|
703
573
|
*/
|
|
704
574
|
|
|
705
|
-
export { HighlightAutoDirective, HighlightBase, HighlightDirective, HighlightJS, HighlightLoader,
|
|
575
|
+
export { HighlightAutoDirective, HighlightBase, HighlightDirective, HighlightJS, HighlightLoader, NXT_HIGHLIGHT_OPTIONS, provideHighlightOptions };
|
|
706
576
|
//# sourceMappingURL=nxt-highlightjs.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nxt-highlightjs.mjs","sources":["../../../packages/highlightjs/src/lib/highlight.model.ts","../../../packages/highlightjs/src/lib/loader-errors.ts","../../../packages/highlightjs/src/lib/output.ts","../../../packages/highlightjs/src/lib/highlight.loader.ts","../../../packages/highlightjs/src/lib/highlight.service.ts","../../../packages/highlightjs/src/lib/trusted-types.ts","../../../packages/highlightjs/src/lib/highlight-base.directive.ts","../../../packages/highlightjs/src/lib/highlight-auto.directive.ts","../../../packages/highlightjs/src/lib/highlight.directive.ts","../../../packages/highlightjs/src/lib/highlight.module.ts","../../../packages/highlightjs/src/nxt-highlightjs.ts"],"sourcesContent":["import { InjectionToken, makeEnvironmentProviders } from '@angular/core'\r\nimport type { HLJSApi, HLJSOptions, LanguageFn } from 'highlight.js'\r\n\r\n/**\r\n * Full documentation is available here https://highlightjs.readthedocs.io/en/latest/api.html\r\n */\r\n\r\nexport interface LineNumbersOptions {\r\n startFrom?: number\r\n singleLine?: boolean\r\n}\r\n\r\nexport interface HighlightJSOptions {\r\n highlightOptions?: Partial<HLJSOptions>\r\n lineNumbersOptions?: LineNumbersOptions\r\n languages?: Record<string, () => Promise<LanguageFn>>\r\n coreLibraryLoader?: () => Promise<HLJSApi>\r\n fullLibraryLoader?: () => Promise<HLJSApi>\r\n lineNumbersLoader?: () => Promise<{ activateLineNumbers: (document: Document) => (code: string, options?: LineNumbersOptions) => string }>\r\n themePath?: string\r\n}\r\n\r\n/**\r\n * @internal\r\n */\r\nexport const NXT_HIGHLIGHT_OPTIONS = new InjectionToken<HighlightJSOptions>('NXT_HIGHLIGHT_OPTIONS')\r\n\r\nexport function provideHighlightOptions(options: HighlightJSOptions) {\r\n return makeEnvironmentProviders([\r\n {\r\n provide: NXT_HIGHLIGHT_OPTIONS,\r\n useValue: options\r\n }\r\n ])\r\n}\r\n","/**\r\n * @internal\r\n */\r\nexport enum LoaderErrors {\r\n FULL_WITH_CORE_LIBRARY_IMPORTS = 'The full library and the core library were imported, only one of them should be imported!',\r\n FULL_WITH_LANGUAGE_IMPORTS = 'The highlighting languages were imported they are not needed!',\r\n CORE_WITHOUT_LANGUAGE_IMPORTS = 'The highlighting languages were not imported!',\r\n LANGUAGE_WITHOUT_CORE_IMPORTS = 'The core library was not imported!',\r\n NO_FULL_AND_NO_CORE_IMPORTS = 'Highlight.js library was not imported!'\r\n}\r\n","// @ts-nocheck\r\n\r\nconst BREAK_LINE_REGEXP = /\\r\\n|\\r|\\n/g\r\n\r\n/**\r\n * The contents of this file is from highlight.js, with a small modification to HTMLRenderer to make sure spans don't contain line breaks (important to improve performance of line numbers).\r\n */\r\n\r\n/** @typedef {{scope?: string, language?: string, children: Node[]} | string} Node */\r\n/** @typedef {{scope?: string, language?: string, children: Node[]} } DataNode */\r\n/** @typedef {import('highlight.js').Emitter} Emitter */\r\n/** */\r\n\r\n/** @returns */\r\nconst newNode = (opts = {}) => {\r\n /** @type DataNode */\r\n const result = { children: [] }\r\n Object.assign(result, opts)\r\n return result\r\n}\r\n\r\nclass TokenTree {\r\n constructor() {\r\n /** @type DataNode */\r\n this.rootNode = newNode()\r\n this.stack = [this.rootNode]\r\n }\r\n\r\n get top() {\r\n return this.stack[this.stack.length - 1]\r\n }\r\n\r\n get root() {\r\n return this.rootNode\r\n }\r\n\r\n /** @param node */\r\n add(node) {\r\n this.top.children.push(node)\r\n }\r\n\r\n /** @param scope */\r\n openNode(scope) {\r\n /** @type Node */\r\n const node = newNode({ scope })\r\n this.add(node)\r\n this.stack.push(node)\r\n }\r\n\r\n closeNode() {\r\n if (this.stack.length > 1) {\r\n return this.stack.pop()\r\n }\r\n\r\n return undefined\r\n }\r\n\r\n closeAllNodes() {\r\n while (this.closeNode());\r\n }\r\n\r\n toJSON() {\r\n return JSON.stringify(this.rootNode, undefined, 4)\r\n }\r\n\r\n /**\r\n * @typedef { import(\"./html_renderer\").Renderer } Renderer\r\n * @param builder\r\n */\r\n walk(builder) {\r\n // this does not\r\n return this.constructor._walk(builder, this.rootNode)\r\n // this works\r\n // return TokenTree._walk(builder, this.rootNode);\r\n }\r\n\r\n /**\r\n * @param builder\r\n * @param node\r\n */\r\n static _walk(builder, node) {\r\n if (typeof node === 'string') {\r\n builder.addText(node)\r\n } else if (node.children) {\r\n builder.openNode(node)\r\n node.children.forEach((child) => this._walk(builder, child))\r\n builder.closeNode(node)\r\n }\r\n return builder\r\n }\r\n\r\n /**\r\n * @param node\r\n */\r\n static _collapse(node) {\r\n if (typeof node === 'string') return\r\n if (!node.children) return\r\n\r\n if (node.children.every(el => typeof el === 'string')) {\r\n // node.text = node.children.join(\"\");\r\n // delete node.children;\r\n node.children = [node.children.join('')]\r\n } else {\r\n node.children.forEach((child) => {\r\n TokenTree._collapse(child)\r\n })\r\n }\r\n }\r\n}\r\n\r\n/**\r\n Currently this is all private API, but this is the minimal API necessary\r\n that an Emitter must implement to fully support the parser.\r\n\r\n Minimal interface:\r\n\r\n - addText(text)\r\n - __addSublanguage(emitter, subLanguageName)\r\n - startScope(scope)\r\n - endScope()\r\n - finalize()\r\n - toHTML()\r\n\r\n */\r\n\r\n/**\r\n * @implements {Emitter}\r\n */\r\nexport class TokenTreeEmitter extends TokenTree {\r\n /**\r\n * @param options\r\n */\r\n constructor(options) {\r\n super()\r\n this.options = options\r\n }\r\n\r\n /**\r\n * @param text\r\n */\r\n addText(text) {\r\n if (text === '') {\r\n return\r\n }\r\n\r\n this.add(text)\r\n }\r\n\r\n /** @param scope */\r\n startScope(scope) {\r\n this.openNode(scope)\r\n }\r\n\r\n endScope() {\r\n this.closeNode()\r\n }\r\n\r\n /**\r\n * @param emitter\r\n * @param name\r\n */\r\n __addSublanguage(emitter, name) {\r\n /** @type DataNode */\r\n const node = emitter.root\r\n if (name) node.scope = `language:${name}`\r\n\r\n this.add(node)\r\n }\r\n\r\n toHTML() {\r\n const renderer = new HTMLRenderer(this, this.options)\r\n return renderer.value()\r\n }\r\n\r\n finalize() {\r\n this.closeAllNodes()\r\n return true\r\n }\r\n}\r\n\r\n/**\r\n * @typedef {object} Renderer\r\n * @property {(text: string) => void} addText\r\n * @property {(node: Node) => void} openNode\r\n * @property {(node: Node) => void} closeNode\r\n * @property {() => string} value\r\n */\r\n\r\n/** @typedef {{scope?: string, language?: string, sublanguage?: boolean}} Node */\r\n/** @typedef {{walk: (r: Renderer) => void}} Tree */\r\n/** */\r\n\r\nconst SPAN_CLOSE = '</span>'\r\n\r\n/**\r\n * Determines if a node needs to be wrapped in <span>\r\n *\r\n * @param node */\r\nconst emitsWrappingTags = (node) =>\r\n // rarely we can have a sublanguage where language is undefined\r\n // TODO: track down why\r\n !!node.scope\r\n\r\n/**\r\n *\r\n * @param name\r\n * @param options\r\n */\r\nconst scopeToCSSClass = (name, { prefix }) => {\r\n // sub-language\r\n if (name.startsWith('language:')) {\r\n return name.replace('language:', 'language-')\r\n }\r\n // tiered scope: comment.line\r\n if (name.includes('.')) {\r\n const pieces = name.split('.')\r\n return [\r\n `${prefix}${pieces.shift()}`,\r\n ...(pieces.map((x, i) => `${x}${'_'.repeat(i + 1)}`))\r\n ].join(' ')\r\n }\r\n // simple scope\r\n return `${prefix}${name}`\r\n}\r\n\r\n/** @type {Renderer} */\r\nexport class HTMLRenderer {\r\n /**\r\n * Creates a new HTMLRenderer\r\n *\r\n * @param parseTree - the parse tree (must support `walk` API)\r\n * @param options\r\n */\r\n constructor(parseTree, options) {\r\n this.buffer = ''\r\n this.classPrefix = options.classPrefix\r\n this.openStack = []\r\n parseTree.walk(this)\r\n }\r\n\r\n /**\r\n * Adds texts to the output stream\r\n *\r\n * @param text */\r\n addText(text) {\r\n const lines = text.split(BREAK_LINE_REGEXP).map(escapeHTML)\r\n const lineBreak = new Array(this.openStack.length).fill(SPAN_CLOSE).join('') + '\\n' + this.openStack.join('')\r\n this.buffer += lines.join(lineBreak)\r\n }\r\n\r\n /**\r\n * Adds a node open to the output stream (if needed)\r\n *\r\n * @param node */\r\n openNode(node) {\r\n if (!emitsWrappingTags(node)) return\r\n\r\n const className = scopeToCSSClass(node.scope,\r\n { prefix: this.classPrefix })\r\n this.span(className)\r\n }\r\n\r\n /**\r\n * Adds a node close to the output stream (if needed)\r\n *\r\n * @param node */\r\n closeNode(node) {\r\n if (!emitsWrappingTags(node)) return\r\n\r\n this.buffer += SPAN_CLOSE\r\n this.openStack.pop()\r\n }\r\n\r\n /**\r\n * returns the accumulated buffer\r\n */\r\n value() {\r\n return this.buffer\r\n }\r\n\r\n // helpers\r\n\r\n /**\r\n * Builds a span element\r\n *\r\n * @param className */\r\n span(className) {\r\n const span = `<span class=\"${className}\">`\r\n this.buffer += span\r\n this.openStack.push(span)\r\n }\r\n}\r\n\r\n/**\r\n * @param value\r\n * @returns\r\n */\r\nexport function escapeHTML(value) {\r\n return value\r\n .replace(/&/g, '&')\r\n .replace(/</g, '<')\r\n .replace(/>/g, '>')\r\n .replace(/\"/g, '"')\r\n .replace(/'/g, ''')\r\n}\r\n","import { Injectable, PendingTasks, inject, DOCUMENT, resource } from '@angular/core'\r\nimport type { HLJSApi } from 'highlight.js'\r\nimport { filter, firstValueFrom } from 'rxjs'\r\nimport { toObservable } from '@angular/core/rxjs-interop'\r\nimport { NXT_HIGHLIGHT_OPTIONS } from './highlight.model'\r\nimport { LoaderErrors } from './loader-errors'\r\nimport { TokenTreeEmitter } from './output'\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class HighlightLoader {\r\n\r\n private readonly document: Document = inject(DOCUMENT)\r\n private readonly options = inject(NXT_HIGHLIGHT_OPTIONS, { optional: true })\r\n private readonly pendingTasks = inject(PendingTasks)\r\n\r\n private _t = this.pendingTasks.add()\r\n readonly hljs = resource({\r\n loader: () => this.loadLibrary()\r\n .then(async hljs => {\r\n if (this.options?.lineNumbersLoader) {\r\n const plugin = await this.options.lineNumbersLoader();\r\n (hljs as any).lineNumbersBlock = plugin.activateLineNumbers(this.document)\r\n }\r\n\r\n hljs.configure({\r\n __emitter: TokenTreeEmitter\r\n })\r\n\r\n if (this.options?.highlightOptions)\r\n hljs.configure(this.options.highlightOptions)\r\n\r\n return hljs\r\n })\r\n .finally(this._t)\r\n }).asReadonly()\r\n\r\n private readonly _ready$ = toObservable(this.hljs.value).pipe(filter((v): v is HLJSApi => !!v))\r\n\r\n /**\r\n * @deprecated use hljs.value()\r\n */\r\n get ready() {\r\n return firstValueFrom(this._ready$)\r\n }\r\n\r\n private themeLinkElement?: HTMLLinkElement\r\n\r\n constructor() {\r\n if (this.options?.themePath) {\r\n this.loadTheme(this.options.themePath)\r\n }\r\n }\r\n\r\n /**\r\n * Lazy-Load highlight.js library\r\n */\r\n private async loadLibrary(): Promise<HLJSApi> {\r\n if (this.options) {\r\n if (this.options.fullLibraryLoader && this.options.coreLibraryLoader) {\r\n throw new Error(LoaderErrors.FULL_WITH_CORE_LIBRARY_IMPORTS)\r\n }\r\n if (this.options.fullLibraryLoader && this.options.languages) {\r\n throw new Error(LoaderErrors.FULL_WITH_LANGUAGE_IMPORTS)\r\n }\r\n if (this.options.coreLibraryLoader && !this.options.languages) {\r\n throw new Error(LoaderErrors.CORE_WITHOUT_LANGUAGE_IMPORTS)\r\n }\r\n if (!this.options.coreLibraryLoader && this.options.languages) {\r\n throw new Error(LoaderErrors.LANGUAGE_WITHOUT_CORE_IMPORTS)\r\n }\r\n if (this.options.fullLibraryLoader) {\r\n return this.options.fullLibraryLoader()\r\n }\r\n if (this.options.coreLibraryLoader && this.options.languages && Object.keys(this.options.languages).length) {\r\n return this.options.coreLibraryLoader().then(hljs => this.loadLanguages(hljs))\r\n }\r\n }\r\n throw new Error(LoaderErrors.NO_FULL_AND_NO_CORE_IMPORTS)\r\n }\r\n\r\n /**\r\n * Lazy-load highlight.js languages\r\n */\r\n private async loadLanguages(hljs: HLJSApi) {\r\n await Promise.all(Object.entries(this.options?.languages || {})\r\n .map(([langName, langLoader]) => langLoader().then(langFunc => hljs.registerLanguage(langName, langFunc))))\r\n return hljs\r\n }\r\n\r\n /**\r\n * Reload theme styles\r\n */\r\n setTheme(path: string): void {\r\n if (this.themeLinkElement) {\r\n this.themeLinkElement.href = path\r\n } else {\r\n this.loadTheme(path)\r\n }\r\n }\r\n\r\n /**\r\n * Load theme\r\n */\r\n private loadTheme(path: string): void {\r\n this.themeLinkElement = this.document.createElement('link')\r\n this.themeLinkElement.href = path\r\n this.themeLinkElement.type = 'text/css'\r\n this.themeLinkElement.rel = 'stylesheet'\r\n this.themeLinkElement.media = 'screen,print'\r\n this.document.head.appendChild(this.themeLinkElement)\r\n }\r\n}\r\n","import { Injectable, inject } from '@angular/core'\r\nimport type {\r\n AutoHighlightResult,\r\n HLJSApi,\r\n HighlightOptions,\r\n HighlightResult,\r\n LanguageFn\r\n} from 'highlight.js'\r\nimport { LineNumbersOptions } from './highlight.model'\r\nimport { HighlightLoader } from './highlight.loader'\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class HighlightJS {\r\n\r\n private readonly loader = inject(HighlightLoader)\r\n\r\n readonly hljs = this.loader.hljs.value\r\n\r\n /**\r\n * Core highlighting function. Accepts the code to highlight (string) and a list of options (object)\r\n *\r\n * @deprecated use hljs().highlight\r\n */\r\n async highlight(code: string, options: HighlightOptions): Promise<HighlightResult> {\r\n const hljs: HLJSApi = await this.loader.ready\r\n return hljs.highlight(code, options)\r\n }\r\n\r\n /**\r\n * Highlighting with language detection.\r\n *\r\n * @deprecated use hljs().highlightAuto\r\n */\r\n async highlightAuto(value: string, languageSubset?: string[]): Promise<AutoHighlightResult> {\r\n const hljs: HLJSApi = await this.loader.ready\r\n return hljs.highlightAuto(value, languageSubset)\r\n }\r\n\r\n /**\r\n * Applies highlighting to a DOM node containing code.\r\n * This function is the one to use to apply highlighting dynamically after page load or within initialization code of third-party JavaScript frameworks.\r\n * The function uses language detection by default but you can specify the language in the class attribute of the DOM node. See the scopes reference for all available language names and scopes.\r\n *\r\n * @deprecated use hljs().highlightElement\r\n */\r\n async highlightElement(element: HTMLElement): Promise<void> {\r\n const hljs: HLJSApi = await this.loader.ready\r\n hljs.highlightElement(element)\r\n }\r\n\r\n /**\r\n * Applies highlighting to all elements on a page matching the configured cssSelector. The default cssSelector value is 'pre code',\r\n * which highlights all code blocks. This can be called before or after the page’s onload event has fired.\r\n *\r\n * @deprecated use hljs().highlightAll\r\n */\r\n async highlightAll(): Promise<void> {\r\n const hljs: HLJSApi = await this.loader.ready\r\n hljs.highlightAll()\r\n }\r\n\r\n /**\r\n * Adds new language to the library under the specified name. Used mostly internally.\r\n * The function is passed the hljs object to be able to use common regular expressions defined within it.\r\n *\r\n * @deprecated use hljs().registerLanguage\r\n */\r\n async registerLanguage(languageName: string, languageDefinition: LanguageFn): Promise<void> {\r\n const hljs: HLJSApi = await this.loader.ready\r\n hljs.registerLanguage(languageName, languageDefinition)\r\n }\r\n\r\n /**\r\n * Removes a language and its aliases from the library. Used mostly internally\r\n *\r\n * @deprecated use hljs().unregisterLanguage\r\n */\r\n async unregisterLanguage(languageName: string): Promise<void> {\r\n const hljs: HLJSApi = await this.loader.ready\r\n hljs.unregisterLanguage(languageName)\r\n }\r\n\r\n /**\r\n * Adds new language alias or aliases to the library for the specified language name defined under languageName key.\r\n *\r\n * @deprecated use hljs().registerAliases\r\n */\r\n async registerAliases(alias: string | string[], { languageName }: { languageName: string }): Promise<void> {\r\n const hljs: HLJSApi = await this.loader.ready\r\n hljs.registerAliases(alias, { languageName })\r\n }\r\n\r\n /**\r\n * @return The languages names list.\r\n * @deprecated use hljs().listLanguages\r\n */\r\n async listLanguages(): Promise<string[]> {\r\n const hljs: HLJSApi = await this.loader.ready\r\n return hljs.listLanguages()\r\n }\r\n\r\n /**\r\n * Looks up a language by name or alias.\r\n *\r\n * @deprecated use hljs().getLanguage\r\n */\r\n async getLanguage(name: string): Promise<any> {\r\n const hljs: HLJSApi = await this.loader.ready\r\n return hljs.getLanguage(name)\r\n }\r\n\r\n /**\r\n * Enables safe mode. This is the default mode, providing the most reliable experience for production usage.\r\n *\r\n * @deprecated use hljs().safeMode\r\n */\r\n async safeMode(): Promise<void> {\r\n const hljs: HLJSApi = await this.loader.ready\r\n hljs.safeMode()\r\n }\r\n\r\n /**\r\n * Enables debug/development mode.\r\n *\r\n * @deprecated use hljs().debugMode\r\n */\r\n async debugMode(): Promise<void> {\r\n const hljs: HLJSApi = await this.loader.ready\r\n hljs.debugMode()\r\n }\r\n\r\n /**\r\n * Display line numbers\r\n *\r\n * @deprecated use hljs().lineNumbersBlock\r\n */\r\n async lineNumbersBlock(code: string, options: LineNumbersOptions): Promise<void> {\r\n const hljs: HLJSApi = await this.loader.ready;\r\n (hljs as any).lineNumbersBlock(code, options)\r\n }\r\n}\r\n","/// <reference types=\"trusted-types\" />\r\nimport { TrustedTypePolicy } from 'trusted-types/lib'\r\n\r\n/**\r\n * Enable usage of the library together with \"trusted-types\" HTTP Content-Security-Policy (CSP)\r\n *\r\n * Can be added to angular.json -> serve -> options -> headers to try it out in DEV mode\r\n * \"Content-Security-Policy\": \"trusted-types nxt-highlightjs; require-trusted-types-for 'script'\"\r\n *\r\n * Read more...\r\n * Angular Security: https://angular.io/guide/security#enforcing-trusted-types\r\n * Trusted Types: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/trusted-types\r\n *\r\n * @internal\r\n */\r\nlet policy: Pick<TrustedTypePolicy<{\r\n createHTML: (s: string) => string\r\n}>, 'name' | 'createHTML'> | undefined\r\n\r\n/**\r\n * @internal\r\n */\r\nfunction getPolicy() {\r\n if (!policy) {\r\n try {\r\n policy = window?.trustedTypes?.createPolicy('nxt-highlightjs', {\r\n createHTML: (s: string) => s\r\n })\r\n } catch {\r\n // trustedTypes.createPolicy throws if called with a name that is\r\n // already registered, even in report-only mode. Until the API changes,\r\n // catch the error not to break the applications functionally. In such\r\n // cases, the code will fall back to using strings.\r\n }\r\n }\r\n return policy\r\n}\r\n\r\n/**\r\n * @internal\r\n */\r\nexport function trustedHTMLFromStringBypass(html: string) {\r\n return getPolicy()?.createHTML(html) || html\r\n}\r\n","import {\r\n Directive,\r\n ElementRef,\r\n InputSignal,\r\n OutputEmitterRef,\r\n SecurityContext,\r\n WritableSignal,\r\n effect,\r\n inject\r\n} from '@angular/core'\r\nimport { DomSanitizer } from '@angular/platform-browser'\r\nimport type { AutoHighlightResult, HighlightResult } from 'highlight.js'\r\nimport { HighlightJS } from './highlight.service'\r\nimport { trustedHTMLFromStringBypass } from './trusted-types'\r\n\r\n@Directive()\r\nexport abstract class HighlightBase {\r\n\r\n protected readonly hljs: HighlightJS = inject(HighlightJS)\r\n\r\n private readonly nativeElement: HTMLElement = inject(ElementRef<HTMLElement>).nativeElement\r\n private readonly sanitizer: DomSanitizer = inject(DomSanitizer)\r\n\r\n /**\r\n * Code to highlight\r\n */\r\n abstract readonly code: InputSignal<string | undefined>\r\n\r\n /**\r\n * Highlighted result\r\n */\r\n abstract readonly highlightResult: WritableSignal<HighlightResult | AutoHighlightResult | undefined>\r\n\r\n /**\r\n * Stream that emits when code string is highlighted\r\n */\r\n abstract readonly highlighted: OutputEmitterRef<HighlightResult | AutoHighlightResult | undefined>\r\n\r\n constructor() {\r\n effect(() => {\r\n const code = this.code()\r\n if (code) {\r\n const res = this.highlightElement(code)\r\n if (res) {\r\n this.setInnerHTML(res?.value ?? undefined)\r\n this.highlightResult.set(res)\r\n // Forward highlight response to the highlighted output\r\n this.highlighted.emit(res)\r\n }\r\n } else {\r\n this.setTextContent('')\r\n }\r\n })\r\n }\r\n\r\n protected abstract highlightElement(code: string): HighlightResult | AutoHighlightResult | undefined\r\n\r\n private setTextContent(content: string): void {\r\n this.nativeElement.textContent = content\r\n }\r\n\r\n private setInnerHTML(content: string | undefined): void {\r\n this.nativeElement.innerHTML = trustedHTMLFromStringBypass(\r\n this.sanitizer.sanitize(SecurityContext.HTML, content || null) || ''\r\n ) as any\r\n }\r\n}\r\n","import {\r\n Directive,\r\n input,\r\n output,\r\n signal\r\n} from '@angular/core'\r\nimport type { AutoHighlightResult } from 'highlight.js'\r\nimport { HighlightBase } from './highlight-base.directive'\r\n\r\n@Directive({\r\n selector: '[nxtHighlightAuto]',\r\n providers: [{ provide: HighlightBase, useExisting: HighlightAutoDirective }],\r\n host: {\r\n '[class.hljs]': 'true'\r\n }\r\n})\r\nexport class HighlightAutoDirective extends HighlightBase {\r\n\r\n /**\r\n * Code to highlight\r\n */\r\n readonly code = input<string>(undefined, { alias: 'nxtHighlightAuto' })\r\n\r\n /**\r\n * Highlighted result\r\n */\r\n readonly highlightResult = signal<AutoHighlightResult | undefined>(undefined)\r\n\r\n /**\r\n * An optional array of language names and aliases restricting detection to only those languages\r\n *\r\n * The subset can also be set with configure, but the local parameter overrides the option if set.\r\n */\r\n readonly languages = input<string[]>()\r\n\r\n /**\r\n * Stream that emits when code string is highlighted\r\n */\r\n readonly highlighted = output<AutoHighlightResult>()\r\n\r\n protected highlightElement(code: string) {\r\n const hljs = this.hljs.hljs()\r\n return hljs?.highlightAuto(code, this.languages())\r\n }\r\n}\r\n\r\n","import {\r\n booleanAttribute,\r\n Directive,\r\n input,\r\n output,\r\n signal\r\n} from '@angular/core'\r\nimport type { HighlightResult } from 'highlight.js'\r\nimport { HighlightBase } from './highlight-base.directive'\r\n\r\n@Directive({\r\n selector: '[nxtHighlight]',\r\n providers: [{ provide: HighlightBase, useExisting: HighlightDirective }],\r\n host: {\r\n '[class.hljs]': 'true'\r\n }\r\n})\r\nexport class HighlightDirective extends HighlightBase {\r\n\r\n /**\r\n * Code to highlight\r\n */\r\n readonly code = input<string>(undefined, { alias: 'nxtHighlight' })\r\n\r\n /**\r\n * Highlighted result\r\n */\r\n readonly highlightResult = signal<HighlightResult | undefined>(undefined)\r\n\r\n /**\r\n * The language name highlight only one language\r\n */\r\n readonly language = input.required<string>()\r\n\r\n /**\r\n * An optional flag, when set to true it forces highlighting to finish even in case of detecting\r\n * illegal syntax for the language instead of throwing an exception\r\n */\r\n readonly ignoreIllegals = input<boolean, unknown>(undefined, {\r\n transform: booleanAttribute\r\n })\r\n\r\n /**\r\n * Stream that emits when code string is highlighted\r\n */\r\n readonly highlighted = output<HighlightResult>()\r\n\r\n highlightElement(code: string) {\r\n const hljs = this.hljs.hljs()\r\n return hljs?.highlight(code, {\r\n language: this.language(),\r\n ignoreIllegals: this.ignoreIllegals()\r\n })\r\n }\r\n}\r\n","import { NgModule } from '@angular/core'\r\nimport { HighlightAutoDirective } from './highlight-auto.directive'\r\nimport { HighlightDirective } from './highlight.directive'\r\n\r\n/** @deprecated use standalone imports */\r\n@NgModule({\r\n imports: [HighlightDirective, HighlightAutoDirective],\r\n exports: [HighlightDirective, HighlightAutoDirective]\r\n})\r\nexport class HighlightModule {\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.mjs","sources":["../../../packages/highlightjs/src/lib/highlight.model.ts","../../../packages/highlightjs/src/lib/loader-errors.ts","../../../packages/highlightjs/src/lib/output.ts","../../../packages/highlightjs/src/lib/highlight.loader.ts","../../../packages/highlightjs/src/lib/highlight.service.ts","../../../packages/highlightjs/src/lib/trusted-types.ts","../../../packages/highlightjs/src/lib/highlight-base.directive.ts","../../../packages/highlightjs/src/lib/highlight-auto.directive.ts","../../../packages/highlightjs/src/lib/highlight.directive.ts","../../../packages/highlightjs/src/nxt-highlightjs.ts"],"sourcesContent":["import { InjectionToken, makeEnvironmentProviders } from '@angular/core'\r\nimport type { HLJSApi, HLJSOptions, LanguageFn } from 'highlight.js'\r\n\r\n/**\r\n * Full documentation is available here https://highlightjs.readthedocs.io/en/latest/api.html\r\n */\r\n\r\nexport interface LineNumbersOptions {\r\n startFrom?: number\r\n singleLine?: boolean\r\n}\r\n\r\nexport interface HighlightJSOptions {\r\n highlightOptions?: Partial<HLJSOptions>\r\n lineNumbersOptions?: LineNumbersOptions\r\n languages?: Record<string, () => Promise<LanguageFn>>\r\n coreLibraryLoader?: () => Promise<HLJSApi>\r\n fullLibraryLoader?: () => Promise<HLJSApi>\r\n lineNumbersLoader?: () => Promise<{ activateLineNumbers: (document: Document) => (code: string, options?: LineNumbersOptions) => string }>\r\n themePath?: string\r\n}\r\n\r\n/**\r\n * @internal\r\n */\r\nexport const NXT_HIGHLIGHT_OPTIONS = new InjectionToken<HighlightJSOptions>('NXT_HIGHLIGHT_OPTIONS')\r\n\r\nexport function provideHighlightOptions(options: HighlightJSOptions) {\r\n return makeEnvironmentProviders([\r\n {\r\n provide: NXT_HIGHLIGHT_OPTIONS,\r\n useValue: options\r\n }\r\n ])\r\n}\r\n","/**\r\n * @internal\r\n */\r\nexport enum LoaderErrors {\r\n FULL_WITH_CORE_LIBRARY_IMPORTS = 'The full library and the core library were imported, only one of them should be imported!',\r\n FULL_WITH_LANGUAGE_IMPORTS = 'The highlighting languages were imported they are not needed!',\r\n CORE_WITHOUT_LANGUAGE_IMPORTS = 'The highlighting languages were not imported!',\r\n LANGUAGE_WITHOUT_CORE_IMPORTS = 'The core library was not imported!',\r\n NO_FULL_AND_NO_CORE_IMPORTS = 'Highlight.js library was not imported!'\r\n}\r\n","// @ts-nocheck\r\n\r\nconst BREAK_LINE_REGEXP = /\\r\\n|\\r|\\n/g\r\n\r\n/**\r\n * The contents of this file is from highlight.js, with a small modification to HTMLRenderer to make sure spans don't contain line breaks (important to improve performance of line numbers).\r\n */\r\n\r\n/** @typedef {{scope?: string, language?: string, children: Node[]} | string} Node */\r\n/** @typedef {{scope?: string, language?: string, children: Node[]} } DataNode */\r\n/** @typedef {import('highlight.js').Emitter} Emitter */\r\n/** */\r\n\r\n/** @returns */\r\nconst newNode = (opts = {}) => {\r\n /** @type DataNode */\r\n const result = { children: [] }\r\n Object.assign(result, opts)\r\n return result\r\n}\r\n\r\nclass TokenTree {\r\n constructor() {\r\n /** @type DataNode */\r\n this.rootNode = newNode()\r\n this.stack = [this.rootNode]\r\n }\r\n\r\n get top() {\r\n return this.stack[this.stack.length - 1]\r\n }\r\n\r\n get root() {\r\n return this.rootNode\r\n }\r\n\r\n /** @param node */\r\n add(node) {\r\n this.top.children.push(node)\r\n }\r\n\r\n /** @param scope */\r\n openNode(scope) {\r\n /** @type Node */\r\n const node = newNode({ scope })\r\n this.add(node)\r\n this.stack.push(node)\r\n }\r\n\r\n closeNode() {\r\n if (this.stack.length > 1) {\r\n return this.stack.pop()\r\n }\r\n\r\n return undefined\r\n }\r\n\r\n closeAllNodes() {\r\n while (this.closeNode());\r\n }\r\n\r\n toJSON() {\r\n return JSON.stringify(this.rootNode, undefined, 4)\r\n }\r\n\r\n /**\r\n * @typedef { import(\"./html_renderer\").Renderer } Renderer\r\n * @param builder\r\n */\r\n walk(builder) {\r\n // this does not\r\n return this.constructor._walk(builder, this.rootNode)\r\n // this works\r\n // return TokenTree._walk(builder, this.rootNode);\r\n }\r\n\r\n /**\r\n * @param builder\r\n * @param node\r\n */\r\n static _walk(builder, node) {\r\n if (typeof node === 'string') {\r\n builder.addText(node)\r\n } else if (node.children) {\r\n builder.openNode(node)\r\n node.children.forEach((child) => this._walk(builder, child))\r\n builder.closeNode(node)\r\n }\r\n return builder\r\n }\r\n\r\n /**\r\n * @param node\r\n */\r\n static _collapse(node) {\r\n if (typeof node === 'string') return\r\n if (!node.children) return\r\n\r\n if (node.children.every(el => typeof el === 'string')) {\r\n // node.text = node.children.join(\"\");\r\n // delete node.children;\r\n node.children = [node.children.join('')]\r\n } else {\r\n node.children.forEach((child) => {\r\n TokenTree._collapse(child)\r\n })\r\n }\r\n }\r\n}\r\n\r\n/**\r\n Currently this is all private API, but this is the minimal API necessary\r\n that an Emitter must implement to fully support the parser.\r\n\r\n Minimal interface:\r\n\r\n - addText(text)\r\n - __addSublanguage(emitter, subLanguageName)\r\n - startScope(scope)\r\n - endScope()\r\n - finalize()\r\n - toHTML()\r\n\r\n */\r\n\r\n/**\r\n * @implements {Emitter}\r\n */\r\nexport class TokenTreeEmitter extends TokenTree {\r\n /**\r\n * @param options\r\n */\r\n constructor(options) {\r\n super()\r\n this.options = options\r\n }\r\n\r\n /**\r\n * @param text\r\n */\r\n addText(text) {\r\n if (text === '') {\r\n return\r\n }\r\n\r\n this.add(text)\r\n }\r\n\r\n /** @param scope */\r\n startScope(scope) {\r\n this.openNode(scope)\r\n }\r\n\r\n endScope() {\r\n this.closeNode()\r\n }\r\n\r\n /**\r\n * @param emitter\r\n * @param name\r\n */\r\n __addSublanguage(emitter, name) {\r\n /** @type DataNode */\r\n const node = emitter.root\r\n if (name) node.scope = `language:${name}`\r\n\r\n this.add(node)\r\n }\r\n\r\n toHTML() {\r\n const renderer = new HTMLRenderer(this, this.options)\r\n return renderer.value()\r\n }\r\n\r\n finalize() {\r\n this.closeAllNodes()\r\n return true\r\n }\r\n}\r\n\r\n/**\r\n * @typedef {object} Renderer\r\n * @property {(text: string) => void} addText\r\n * @property {(node: Node) => void} openNode\r\n * @property {(node: Node) => void} closeNode\r\n * @property {() => string} value\r\n */\r\n\r\n/** @typedef {{scope?: string, language?: string, sublanguage?: boolean}} Node */\r\n/** @typedef {{walk: (r: Renderer) => void}} Tree */\r\n/** */\r\n\r\nconst SPAN_CLOSE = '</span>'\r\n\r\n/**\r\n * Determines if a node needs to be wrapped in <span>\r\n *\r\n * @param node */\r\nconst emitsWrappingTags = (node) =>\r\n // rarely we can have a sublanguage where language is undefined\r\n // TODO: track down why\r\n !!node.scope\r\n\r\n/**\r\n *\r\n * @param name\r\n * @param options\r\n */\r\nconst scopeToCSSClass = (name, { prefix }) => {\r\n // sub-language\r\n if (name.startsWith('language:')) {\r\n return name.replace('language:', 'language-')\r\n }\r\n // tiered scope: comment.line\r\n if (name.includes('.')) {\r\n const pieces = name.split('.')\r\n return [\r\n `${prefix}${pieces.shift()}`,\r\n ...(pieces.map((x, i) => `${x}${'_'.repeat(i + 1)}`))\r\n ].join(' ')\r\n }\r\n // simple scope\r\n return `${prefix}${name}`\r\n}\r\n\r\n/** @type {Renderer} */\r\nexport class HTMLRenderer {\r\n /**\r\n * Creates a new HTMLRenderer\r\n *\r\n * @param parseTree - the parse tree (must support `walk` API)\r\n * @param options\r\n */\r\n constructor(parseTree, options) {\r\n this.buffer = ''\r\n this.classPrefix = options.classPrefix\r\n this.openStack = []\r\n parseTree.walk(this)\r\n }\r\n\r\n /**\r\n * Adds texts to the output stream\r\n *\r\n * @param text */\r\n addText(text) {\r\n const lines = text.split(BREAK_LINE_REGEXP).map(escapeHTML)\r\n const lineBreak = new Array(this.openStack.length).fill(SPAN_CLOSE).join('') + '\\n' + this.openStack.join('')\r\n this.buffer += lines.join(lineBreak)\r\n }\r\n\r\n /**\r\n * Adds a node open to the output stream (if needed)\r\n *\r\n * @param node */\r\n openNode(node) {\r\n if (!emitsWrappingTags(node)) return\r\n\r\n const className = scopeToCSSClass(node.scope,\r\n { prefix: this.classPrefix })\r\n this.span(className)\r\n }\r\n\r\n /**\r\n * Adds a node close to the output stream (if needed)\r\n *\r\n * @param node */\r\n closeNode(node) {\r\n if (!emitsWrappingTags(node)) return\r\n\r\n this.buffer += SPAN_CLOSE\r\n this.openStack.pop()\r\n }\r\n\r\n /**\r\n * returns the accumulated buffer\r\n */\r\n value() {\r\n return this.buffer\r\n }\r\n\r\n // helpers\r\n\r\n /**\r\n * Builds a span element\r\n *\r\n * @param className */\r\n span(className) {\r\n const span = `<span class=\"${className}\">`\r\n this.buffer += span\r\n this.openStack.push(span)\r\n }\r\n}\r\n\r\n/**\r\n * @param value\r\n * @returns\r\n */\r\nexport function escapeHTML(value) {\r\n return value\r\n .replace(/&/g, '&')\r\n .replace(/</g, '<')\r\n .replace(/>/g, '>')\r\n .replace(/\"/g, '"')\r\n .replace(/'/g, ''')\r\n}\r\n","import { Injectable, PendingTasks, inject, DOCUMENT, resource } from '@angular/core'\nimport type { HLJSApi } from 'highlight.js'\nimport { NXT_HIGHLIGHT_OPTIONS } from './highlight.model'\nimport { LoaderErrors } from './loader-errors'\nimport { TokenTreeEmitter } from './output'\n\n@Injectable({\n providedIn: 'root'\n})\nexport class HighlightLoader {\n\n private readonly document: Document = inject(DOCUMENT)\n private readonly options = inject(NXT_HIGHLIGHT_OPTIONS, { optional: true })\n private readonly pendingTasks = inject(PendingTasks)\n\n private _t = this.pendingTasks.add()\n readonly hljs = resource({\n loader: () => this.loadLibrary()\n .then(async hljs => {\n if (this.options?.lineNumbersLoader) {\n const plugin = await this.options.lineNumbersLoader();\n (hljs as any).lineNumbersBlock = plugin.activateLineNumbers(this.document)\n }\n\n hljs.configure({\n __emitter: TokenTreeEmitter\n })\n\n if (this.options?.highlightOptions)\n hljs.configure(this.options.highlightOptions)\n\n return hljs\n })\n .finally(this._t)\n }).asReadonly()\n\n private themeLinkElement?: HTMLLinkElement\n\n constructor() {\n if (this.options?.themePath) {\n this.loadTheme(this.options.themePath)\n }\n }\n\n /**\n * Lazy-Load highlight.js library\n */\n private async loadLibrary(): Promise<HLJSApi> {\n if (this.options) {\n if (this.options.fullLibraryLoader && this.options.coreLibraryLoader) {\n throw new Error(LoaderErrors.FULL_WITH_CORE_LIBRARY_IMPORTS)\n }\n if (this.options.fullLibraryLoader && this.options.languages) {\n throw new Error(LoaderErrors.FULL_WITH_LANGUAGE_IMPORTS)\n }\n if (this.options.coreLibraryLoader && !this.options.languages) {\n throw new Error(LoaderErrors.CORE_WITHOUT_LANGUAGE_IMPORTS)\n }\n if (!this.options.coreLibraryLoader && this.options.languages) {\n throw new Error(LoaderErrors.LANGUAGE_WITHOUT_CORE_IMPORTS)\n }\n if (this.options.fullLibraryLoader) {\n return this.options.fullLibraryLoader()\n }\n if (this.options.coreLibraryLoader && this.options.languages && Object.keys(this.options.languages).length) {\n return this.options.coreLibraryLoader().then(hljs => this.loadLanguages(hljs))\n }\n }\n throw new Error(LoaderErrors.NO_FULL_AND_NO_CORE_IMPORTS)\n }\n\n /**\n * Lazy-load highlight.js languages\n */\n private async loadLanguages(hljs: HLJSApi) {\n await Promise.all(Object.entries(this.options?.languages || {})\n .map(([langName, langLoader]) => langLoader().then(langFunc => hljs.registerLanguage(langName, langFunc))))\n return hljs\n }\n\n /**\n * Reload theme styles\n */\n setTheme(path: string): void {\n if (this.themeLinkElement) {\n this.themeLinkElement.href = path\n } else {\n this.loadTheme(path)\n }\n }\n\n /**\n * Load theme\n */\n private loadTheme(path: string): void {\n this.themeLinkElement = this.document.createElement('link')\n this.themeLinkElement.href = path\n this.themeLinkElement.type = 'text/css'\n this.themeLinkElement.rel = 'stylesheet'\n this.themeLinkElement.media = 'screen,print'\n this.document.head.appendChild(this.themeLinkElement)\n }\n}\n","import { Injectable, inject } from '@angular/core'\n\nimport { HighlightLoader } from './highlight.loader'\n\n@Injectable({\n providedIn: 'root'\n})\nexport class HighlightJS {\n\n private readonly loader = inject(HighlightLoader)\n\n readonly hljs = this.loader.hljs.value\n\n}\n","/// <reference types=\"trusted-types\" />\r\nimport { TrustedTypePolicy } from 'trusted-types/lib'\r\n\r\n/**\r\n * Enable usage of the library together with \"trusted-types\" HTTP Content-Security-Policy (CSP)\r\n *\r\n * Can be added to angular.json -> serve -> options -> headers to try it out in DEV mode\r\n * \"Content-Security-Policy\": \"trusted-types nxt-highlightjs; require-trusted-types-for 'script'\"\r\n *\r\n * Read more...\r\n * Angular Security: https://angular.io/guide/security#enforcing-trusted-types\r\n * Trusted Types: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/trusted-types\r\n *\r\n * @internal\r\n */\r\nlet policy: Pick<TrustedTypePolicy<{\r\n createHTML: (s: string) => string\r\n}>, 'name' | 'createHTML'> | undefined\r\n\r\n/**\r\n * @internal\r\n */\r\nfunction getPolicy() {\r\n if (!policy) {\r\n try {\r\n policy = window?.trustedTypes?.createPolicy('nxt-highlightjs', {\r\n createHTML: (s: string) => s\r\n })\r\n } catch {\r\n // trustedTypes.createPolicy throws if called with a name that is\r\n // already registered, even in report-only mode. Until the API changes,\r\n // catch the error not to break the applications functionally. In such\r\n // cases, the code will fall back to using strings.\r\n }\r\n }\r\n return policy\r\n}\r\n\r\n/**\r\n * @internal\r\n */\r\nexport function trustedHTMLFromStringBypass(html: string) {\r\n return getPolicy()?.createHTML(html) || html\r\n}\r\n","import {\n Directive,\n ElementRef,\n InputSignal,\n OutputEmitterRef,\n SecurityContext,\n WritableSignal,\n effect,\n inject\n} from '@angular/core'\nimport { DomSanitizer } from '@angular/platform-browser'\nimport type { AutoHighlightResult, HighlightResult } from 'highlight.js'\nimport { HighlightJS } from './highlight.service'\nimport { trustedHTMLFromStringBypass } from './trusted-types'\n\n@Directive()\nexport abstract class HighlightBase {\n\n protected readonly hljs: HighlightJS = inject(HighlightJS)\n\n private readonly nativeElement: HTMLElement = inject(ElementRef<HTMLElement>).nativeElement\n private readonly sanitizer: DomSanitizer = inject(DomSanitizer)\n\n /**\n * Code to highlight\n */\n abstract readonly code: InputSignal<string | undefined>\n\n /**\n * Highlighted result\n */\n abstract readonly highlightResult: WritableSignal<HighlightResult | AutoHighlightResult | undefined>\n\n /**\n * Stream that emits when code string is highlighted\n */\n abstract readonly highlighted: OutputEmitterRef<HighlightResult | AutoHighlightResult | undefined>\n\n constructor() {\n effect(() => {\n const code = this.code()\n if (code) {\n const res = this.highlightElement(code)\n if (res) {\n this.setInnerHTML(res?.value ?? undefined)\n this.highlightResult.set(res)\n // Forward highlight response to the highlighted output\n this.highlighted.emit(res)\n }\n } else {\n this.setTextContent('')\n }\n })\n }\n\n protected abstract highlightElement(code: string): HighlightResult | AutoHighlightResult | undefined\n\n private setTextContent(content: string): void {\n this.nativeElement.textContent = content\n }\n\n private setInnerHTML(content: string | undefined): void {\n this.nativeElement.innerHTML = trustedHTMLFromStringBypass(\n this.sanitizer.sanitize(SecurityContext.HTML, content || null) || ''\n ) as any\n }\n}\n","import {\n Directive,\n input,\n output,\n signal\n} from '@angular/core'\nimport type { AutoHighlightResult } from 'highlight.js'\nimport { HighlightBase } from './highlight-base.directive'\n\n@Directive({\n selector: '[nxtHighlightAuto]',\n providers: [{ provide: HighlightBase, useExisting: HighlightAutoDirective }],\n host: {\n '[class.hljs]': 'true'\n }\n})\nexport class HighlightAutoDirective extends HighlightBase {\n\n /**\n * Code to highlight\n */\n readonly code = input<string>(undefined, { alias: 'nxtHighlightAuto' })\n\n /**\n * Highlighted result\n */\n readonly highlightResult = signal<AutoHighlightResult | undefined>(undefined)\n\n /**\n * An optional array of language names and aliases restricting detection to only those languages\n *\n * The subset can also be set with configure, but the local parameter overrides the option if set.\n */\n readonly languages = input<string[]>()\n\n /**\n * Stream that emits when code string is highlighted\n */\n readonly highlighted = output<AutoHighlightResult>()\n\n protected highlightElement(code: string) {\n const hljs = this.hljs.hljs()\n return hljs?.highlightAuto(code, this.languages())\n }\n}\n\n","import {\n booleanAttribute,\n Directive,\n input,\n output,\n signal\n} from '@angular/core'\nimport type { HighlightResult } from 'highlight.js'\nimport { HighlightBase } from './highlight-base.directive'\n\n@Directive({\n selector: '[nxtHighlight]',\n providers: [{ provide: HighlightBase, useExisting: HighlightDirective }],\n host: {\n '[class.hljs]': 'true'\n }\n})\nexport class HighlightDirective extends HighlightBase {\n\n /**\n * Code to highlight\n */\n readonly code = input<string>(undefined, { alias: 'nxtHighlight' })\n\n /**\n * Highlighted result\n */\n readonly highlightResult = signal<HighlightResult | undefined>(undefined)\n\n /**\n * The language name highlight only one language\n */\n readonly language = input.required<string>()\n\n /**\n * An optional flag, when set to true it forces highlighting to finish even in case of detecting\n * illegal syntax for the language instead of throwing an exception\n */\n readonly ignoreIllegals = input<boolean, unknown>(undefined, {\n transform: booleanAttribute\n })\n\n /**\n * Stream that emits when code string is highlighted\n */\n readonly highlighted = output<HighlightResult>()\n\n highlightElement(code: string) {\n const hljs = this.hljs.hljs()\n return hljs?.highlight(code, {\n language: this.language(),\n ignoreIllegals: this.ignoreIllegals()\n })\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "nxt-highlightjs",
|
|
3
3
|
"description": "Angular code highlighting directives with optional line numbers and support for SSR",
|
|
4
4
|
"bugs": "https://github.com/Liquid-JS/nxt-components/issues",
|
|
5
|
-
"version": "
|
|
5
|
+
"version": "22.0.0-alpha.0",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"type": "module",
|
|
8
8
|
"repository": {
|
|
@@ -22,16 +22,13 @@
|
|
|
22
22
|
"gist"
|
|
23
23
|
],
|
|
24
24
|
"peerDependencies": {
|
|
25
|
-
"@angular/cdk": "^
|
|
26
|
-
"@angular/common": "^
|
|
27
|
-
"@angular/core": "^
|
|
28
|
-
"@angular/platform-browser": "^
|
|
25
|
+
"@angular/cdk": "^22.0.0",
|
|
26
|
+
"@angular/common": "^22.0.0",
|
|
27
|
+
"@angular/core": "^22.0.0",
|
|
28
|
+
"@angular/platform-browser": "^22.0.0",
|
|
29
29
|
"highlight.js": ">=11.11.1",
|
|
30
30
|
"rxjs": "^7.8.2"
|
|
31
31
|
},
|
|
32
|
-
"dependencies": {
|
|
33
|
-
"tslib": "^2.8.1"
|
|
34
|
-
},
|
|
35
32
|
"module": "fesm2022/nxt-highlightjs.mjs",
|
|
36
33
|
"typings": "types/nxt-highlightjs.d.ts",
|
|
37
34
|
"exports": {
|
|
@@ -51,5 +48,8 @@
|
|
|
51
48
|
"default": "./fesm2022/nxt-highlightjs-line-numbers.mjs"
|
|
52
49
|
}
|
|
53
50
|
},
|
|
54
|
-
"sideEffects": false
|
|
51
|
+
"sideEffects": false,
|
|
52
|
+
"dependencies": {
|
|
53
|
+
"tslib": "^2.3.0"
|
|
54
|
+
}
|
|
55
55
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { InjectionToken,
|
|
3
|
-
import { Observable } from 'rxjs';
|
|
2
|
+
import { InjectionToken, Provider, Signal, PipeTransform } from '@angular/core';
|
|
4
3
|
import * as nxt_highlightjs_extras from 'nxt-highlightjs/extras';
|
|
5
4
|
import { HttpClient } from '@angular/common/http';
|
|
5
|
+
import { Observable } from 'rxjs';
|
|
6
6
|
import { RxResourceOptions } from '@angular/core/rxjs-interop';
|
|
7
7
|
|
|
8
8
|
/**
|
|
@@ -21,17 +21,6 @@ declare function CODE_FILE_LOCATION_FACTORY(): {
|
|
|
21
21
|
formatPathname: (path: string) => string;
|
|
22
22
|
};
|
|
23
23
|
|
|
24
|
-
/**
|
|
25
|
-
* @deprecated use fileResource with `{ formatUrl: true }`
|
|
26
|
-
*/
|
|
27
|
-
declare class CodeFromUrlPipe implements PipeTransform {
|
|
28
|
-
private readonly location;
|
|
29
|
-
private readonly loader;
|
|
30
|
-
transform(url: string): Observable<string>;
|
|
31
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<CodeFromUrlPipe, never>;
|
|
32
|
-
static ɵpipe: i0.ɵɵPipeDeclaration<CodeFromUrlPipe, "codeFromUrl", true>;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
24
|
/** @internal */
|
|
36
25
|
declare function isUrl(url: string): boolean;
|
|
37
26
|
interface GistOptions {
|
|
@@ -135,20 +124,6 @@ declare class CodeLoader {
|
|
|
135
124
|
readonly http: HttpClient;
|
|
136
125
|
readonly options: nxt_highlightjs_extras.GistOptions | null;
|
|
137
126
|
private readonly pendingTasks;
|
|
138
|
-
/**
|
|
139
|
-
* Get plus code
|
|
140
|
-
*
|
|
141
|
-
* @param id Gist ID
|
|
142
|
-
* @deprecated Use gistResource
|
|
143
|
-
*/
|
|
144
|
-
getCodeFromGist(id: string): Observable<Gist>;
|
|
145
|
-
/**
|
|
146
|
-
* Get code by URL
|
|
147
|
-
*
|
|
148
|
-
* @param url File raw link
|
|
149
|
-
* @deprecated Use fileResource
|
|
150
|
-
*/
|
|
151
|
-
getCodeFromUrl(url: string): Observable<string>;
|
|
152
127
|
fetchFile(url: string, options: any): Observable<any>;
|
|
153
128
|
static ɵfac: i0.ɵɵFactoryDeclaration<CodeLoader, never>;
|
|
154
129
|
static ɵprov: i0.ɵɵInjectableDeclaration<CodeLoader>;
|
|
@@ -168,31 +143,11 @@ declare function fileResource(url: string | Signal<string>, _options?: Omit<RxRe
|
|
|
168
143
|
*/
|
|
169
144
|
declare function gistResource(id: string | Signal<string>, options?: Omit<RxResourceOptions<Gist, string>, 'params' | 'stream'>): i0.ResourceRef<Gist | undefined>;
|
|
170
145
|
|
|
171
|
-
/**
|
|
172
|
-
* @deprecated use gistResource
|
|
173
|
-
*/
|
|
174
|
-
declare class GistDirective {
|
|
175
|
-
private readonly loader;
|
|
176
|
-
private readonly pendingTasks;
|
|
177
|
-
readonly gist: i0.InputSignal<string | undefined>;
|
|
178
|
-
readonly gistLoad: i0.OutputEmitterRef<Gist>;
|
|
179
|
-
readonly gistError: i0.OutputEmitterRef<any>;
|
|
180
|
-
constructor();
|
|
181
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<GistDirective, never>;
|
|
182
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<GistDirective, "[nxtGist]", never, { "gist": { "alias": "nxtGist"; "required": false; "isSignal": true; }; }, { "gistLoad": "gistLoad"; "gistError": "gistError"; }, never, never, true, never>;
|
|
183
|
-
}
|
|
184
146
|
declare class GistFilePipe implements PipeTransform {
|
|
185
147
|
transform(gist?: Gist | null, fileName?: string | null): GistFile | undefined;
|
|
186
148
|
static ɵfac: i0.ɵɵFactoryDeclaration<GistFilePipe, never>;
|
|
187
149
|
static ɵpipe: i0.ɵɵPipeDeclaration<GistFilePipe, "gistFile", true>;
|
|
188
150
|
}
|
|
189
151
|
|
|
190
|
-
|
|
191
|
-
declare class HighlightExstrasModule {
|
|
192
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<HighlightExstrasModule, never>;
|
|
193
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<HighlightExstrasModule, never, [typeof GistDirective, typeof GistFilePipe, typeof CodeFromUrlPipe], [typeof GistDirective, typeof GistFilePipe, typeof CodeFromUrlPipe]>;
|
|
194
|
-
static ɵinj: i0.ɵɵInjectorDeclaration<HighlightExstrasModule>;
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
export { CODE_FILE_LOCATION_FACTORY, CodeFromUrlPipe, CodeLoader, GistDirective, GistFilePipe, HighlightExstrasModule, NXT_GIST_OPTIONS, NXT_HIGHLIGHT_FILE_LOCATION, fileResource, gistResource, isUrl, provideGistOptions };
|
|
152
|
+
export { CODE_FILE_LOCATION_FACTORY, CodeLoader, GistFilePipe, NXT_GIST_OPTIONS, NXT_HIGHLIGHT_FILE_LOCATION, fileResource, gistResource, isUrl, provideGistOptions };
|
|
198
153
|
export type { CodeFileLocation, Gist, GistFile, GistOptions };
|
|
@@ -1,113 +1,13 @@
|
|
|
1
|
-
import * as
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Full documentation is available here https://highlightjs.readthedocs.io/en/latest/api.html
|
|
7
|
-
*/
|
|
8
|
-
interface LineNumbersOptions {
|
|
9
|
-
startFrom?: number;
|
|
10
|
-
singleLine?: boolean;
|
|
11
|
-
}
|
|
12
|
-
interface HighlightJSOptions {
|
|
13
|
-
highlightOptions?: Partial<HLJSOptions>;
|
|
14
|
-
lineNumbersOptions?: LineNumbersOptions;
|
|
15
|
-
languages?: Record<string, () => Promise<LanguageFn>>;
|
|
16
|
-
coreLibraryLoader?: () => Promise<HLJSApi>;
|
|
17
|
-
fullLibraryLoader?: () => Promise<HLJSApi>;
|
|
18
|
-
lineNumbersLoader?: () => Promise<{
|
|
19
|
-
activateLineNumbers: (document: Document) => (code: string, options?: LineNumbersOptions) => string;
|
|
20
|
-
}>;
|
|
21
|
-
themePath?: string;
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* @internal
|
|
25
|
-
*/
|
|
26
|
-
declare const NXT_HIGHLIGHT_OPTIONS: InjectionToken<HighlightJSOptions>;
|
|
27
|
-
declare function provideHighlightOptions(options: HighlightJSOptions): i0.EnvironmentProviders;
|
|
1
|
+
import * as _angular_core from '@angular/core';
|
|
2
|
+
import { InputSignal, WritableSignal, OutputEmitterRef, InjectionToken } from '@angular/core';
|
|
3
|
+
import * as highlight_js from 'highlight.js';
|
|
4
|
+
import { HighlightResult, AutoHighlightResult, HLJSApi, HLJSOptions, LanguageFn } from 'highlight.js';
|
|
28
5
|
|
|
29
6
|
declare class HighlightJS {
|
|
30
7
|
private readonly loader;
|
|
31
|
-
readonly hljs:
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
*
|
|
35
|
-
* @deprecated use hljs().highlight
|
|
36
|
-
*/
|
|
37
|
-
highlight(code: string, options: HighlightOptions): Promise<HighlightResult>;
|
|
38
|
-
/**
|
|
39
|
-
* Highlighting with language detection.
|
|
40
|
-
*
|
|
41
|
-
* @deprecated use hljs().highlightAuto
|
|
42
|
-
*/
|
|
43
|
-
highlightAuto(value: string, languageSubset?: string[]): Promise<AutoHighlightResult>;
|
|
44
|
-
/**
|
|
45
|
-
* Applies highlighting to a DOM node containing code.
|
|
46
|
-
* This function is the one to use to apply highlighting dynamically after page load or within initialization code of third-party JavaScript frameworks.
|
|
47
|
-
* The function uses language detection by default but you can specify the language in the class attribute of the DOM node. See the scopes reference for all available language names and scopes.
|
|
48
|
-
*
|
|
49
|
-
* @deprecated use hljs().highlightElement
|
|
50
|
-
*/
|
|
51
|
-
highlightElement(element: HTMLElement): Promise<void>;
|
|
52
|
-
/**
|
|
53
|
-
* Applies highlighting to all elements on a page matching the configured cssSelector. The default cssSelector value is 'pre code',
|
|
54
|
-
* which highlights all code blocks. This can be called before or after the page’s onload event has fired.
|
|
55
|
-
*
|
|
56
|
-
* @deprecated use hljs().highlightAll
|
|
57
|
-
*/
|
|
58
|
-
highlightAll(): Promise<void>;
|
|
59
|
-
/**
|
|
60
|
-
* Adds new language to the library under the specified name. Used mostly internally.
|
|
61
|
-
* The function is passed the hljs object to be able to use common regular expressions defined within it.
|
|
62
|
-
*
|
|
63
|
-
* @deprecated use hljs().registerLanguage
|
|
64
|
-
*/
|
|
65
|
-
registerLanguage(languageName: string, languageDefinition: LanguageFn): Promise<void>;
|
|
66
|
-
/**
|
|
67
|
-
* Removes a language and its aliases from the library. Used mostly internally
|
|
68
|
-
*
|
|
69
|
-
* @deprecated use hljs().unregisterLanguage
|
|
70
|
-
*/
|
|
71
|
-
unregisterLanguage(languageName: string): Promise<void>;
|
|
72
|
-
/**
|
|
73
|
-
* Adds new language alias or aliases to the library for the specified language name defined under languageName key.
|
|
74
|
-
*
|
|
75
|
-
* @deprecated use hljs().registerAliases
|
|
76
|
-
*/
|
|
77
|
-
registerAliases(alias: string | string[], { languageName }: {
|
|
78
|
-
languageName: string;
|
|
79
|
-
}): Promise<void>;
|
|
80
|
-
/**
|
|
81
|
-
* @return The languages names list.
|
|
82
|
-
* @deprecated use hljs().listLanguages
|
|
83
|
-
*/
|
|
84
|
-
listLanguages(): Promise<string[]>;
|
|
85
|
-
/**
|
|
86
|
-
* Looks up a language by name or alias.
|
|
87
|
-
*
|
|
88
|
-
* @deprecated use hljs().getLanguage
|
|
89
|
-
*/
|
|
90
|
-
getLanguage(name: string): Promise<any>;
|
|
91
|
-
/**
|
|
92
|
-
* Enables safe mode. This is the default mode, providing the most reliable experience for production usage.
|
|
93
|
-
*
|
|
94
|
-
* @deprecated use hljs().safeMode
|
|
95
|
-
*/
|
|
96
|
-
safeMode(): Promise<void>;
|
|
97
|
-
/**
|
|
98
|
-
* Enables debug/development mode.
|
|
99
|
-
*
|
|
100
|
-
* @deprecated use hljs().debugMode
|
|
101
|
-
*/
|
|
102
|
-
debugMode(): Promise<void>;
|
|
103
|
-
/**
|
|
104
|
-
* Display line numbers
|
|
105
|
-
*
|
|
106
|
-
* @deprecated use hljs().lineNumbersBlock
|
|
107
|
-
*/
|
|
108
|
-
lineNumbersBlock(code: string, options: LineNumbersOptions): Promise<void>;
|
|
109
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<HighlightJS, never>;
|
|
110
|
-
static ɵprov: i0.ɵɵInjectableDeclaration<HighlightJS>;
|
|
8
|
+
readonly hljs: _angular_core.Signal<highlight_js.HLJSApi | undefined>;
|
|
9
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<HighlightJS, never>;
|
|
10
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<HighlightJS>;
|
|
111
11
|
}
|
|
112
12
|
|
|
113
13
|
declare abstract class HighlightBase {
|
|
@@ -130,59 +30,59 @@ declare abstract class HighlightBase {
|
|
|
130
30
|
protected abstract highlightElement(code: string): HighlightResult | AutoHighlightResult | undefined;
|
|
131
31
|
private setTextContent;
|
|
132
32
|
private setInnerHTML;
|
|
133
|
-
static ɵfac:
|
|
134
|
-
static ɵdir:
|
|
33
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<HighlightBase, never>;
|
|
34
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<HighlightBase, never, never, {}, {}, never, never, true, never>;
|
|
135
35
|
}
|
|
136
36
|
|
|
137
37
|
declare class HighlightAutoDirective extends HighlightBase {
|
|
138
38
|
/**
|
|
139
39
|
* Code to highlight
|
|
140
40
|
*/
|
|
141
|
-
readonly code:
|
|
41
|
+
readonly code: _angular_core.InputSignal<string | undefined>;
|
|
142
42
|
/**
|
|
143
43
|
* Highlighted result
|
|
144
44
|
*/
|
|
145
|
-
readonly highlightResult:
|
|
45
|
+
readonly highlightResult: _angular_core.WritableSignal<AutoHighlightResult | undefined>;
|
|
146
46
|
/**
|
|
147
47
|
* An optional array of language names and aliases restricting detection to only those languages
|
|
148
48
|
*
|
|
149
49
|
* The subset can also be set with configure, but the local parameter overrides the option if set.
|
|
150
50
|
*/
|
|
151
|
-
readonly languages:
|
|
51
|
+
readonly languages: _angular_core.InputSignal<string[] | undefined>;
|
|
152
52
|
/**
|
|
153
53
|
* Stream that emits when code string is highlighted
|
|
154
54
|
*/
|
|
155
|
-
readonly highlighted:
|
|
55
|
+
readonly highlighted: _angular_core.OutputEmitterRef<AutoHighlightResult>;
|
|
156
56
|
protected highlightElement(code: string): AutoHighlightResult | undefined;
|
|
157
|
-
static ɵfac:
|
|
158
|
-
static ɵdir:
|
|
57
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<HighlightAutoDirective, never>;
|
|
58
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<HighlightAutoDirective, "[nxtHighlightAuto]", never, { "code": { "alias": "nxtHighlightAuto"; "required": false; "isSignal": true; }; "languages": { "alias": "languages"; "required": false; "isSignal": true; }; }, { "highlighted": "highlighted"; }, never, never, true, never>;
|
|
159
59
|
}
|
|
160
60
|
|
|
161
61
|
declare class HighlightDirective extends HighlightBase {
|
|
162
62
|
/**
|
|
163
63
|
* Code to highlight
|
|
164
64
|
*/
|
|
165
|
-
readonly code:
|
|
65
|
+
readonly code: _angular_core.InputSignal<string | undefined>;
|
|
166
66
|
/**
|
|
167
67
|
* Highlighted result
|
|
168
68
|
*/
|
|
169
|
-
readonly highlightResult:
|
|
69
|
+
readonly highlightResult: _angular_core.WritableSignal<HighlightResult | undefined>;
|
|
170
70
|
/**
|
|
171
71
|
* The language name highlight only one language
|
|
172
72
|
*/
|
|
173
|
-
readonly language:
|
|
73
|
+
readonly language: _angular_core.InputSignal<string>;
|
|
174
74
|
/**
|
|
175
75
|
* An optional flag, when set to true it forces highlighting to finish even in case of detecting
|
|
176
76
|
* illegal syntax for the language instead of throwing an exception
|
|
177
77
|
*/
|
|
178
|
-
readonly ignoreIllegals:
|
|
78
|
+
readonly ignoreIllegals: _angular_core.InputSignalWithTransform<boolean | undefined, unknown>;
|
|
179
79
|
/**
|
|
180
80
|
* Stream that emits when code string is highlighted
|
|
181
81
|
*/
|
|
182
|
-
readonly highlighted:
|
|
82
|
+
readonly highlighted: _angular_core.OutputEmitterRef<HighlightResult>;
|
|
183
83
|
highlightElement(code: string): HighlightResult | undefined;
|
|
184
|
-
static ɵfac:
|
|
185
|
-
static ɵdir:
|
|
84
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<HighlightDirective, never>;
|
|
85
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<HighlightDirective, "[nxtHighlight]", never, { "code": { "alias": "nxtHighlight"; "required": false; "isSignal": true; }; "language": { "alias": "language"; "required": true; "isSignal": true; }; "ignoreIllegals": { "alias": "ignoreIllegals"; "required": false; "isSignal": true; }; }, { "highlighted": "highlighted"; }, never, never, true, never>;
|
|
186
86
|
}
|
|
187
87
|
|
|
188
88
|
declare class HighlightLoader {
|
|
@@ -190,12 +90,7 @@ declare class HighlightLoader {
|
|
|
190
90
|
private readonly options;
|
|
191
91
|
private readonly pendingTasks;
|
|
192
92
|
private _t;
|
|
193
|
-
readonly hljs:
|
|
194
|
-
private readonly _ready$;
|
|
195
|
-
/**
|
|
196
|
-
* @deprecated use hljs.value()
|
|
197
|
-
*/
|
|
198
|
-
get ready(): Promise<HLJSApi>;
|
|
93
|
+
readonly hljs: _angular_core.Resource<HLJSApi | undefined>;
|
|
199
94
|
private themeLinkElement?;
|
|
200
95
|
constructor();
|
|
201
96
|
/**
|
|
@@ -214,16 +109,33 @@ declare class HighlightLoader {
|
|
|
214
109
|
* Load theme
|
|
215
110
|
*/
|
|
216
111
|
private loadTheme;
|
|
217
|
-
static ɵfac:
|
|
218
|
-
static ɵprov:
|
|
112
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<HighlightLoader, never>;
|
|
113
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<HighlightLoader>;
|
|
219
114
|
}
|
|
220
115
|
|
|
221
|
-
/**
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
116
|
+
/**
|
|
117
|
+
* Full documentation is available here https://highlightjs.readthedocs.io/en/latest/api.html
|
|
118
|
+
*/
|
|
119
|
+
interface LineNumbersOptions {
|
|
120
|
+
startFrom?: number;
|
|
121
|
+
singleLine?: boolean;
|
|
122
|
+
}
|
|
123
|
+
interface HighlightJSOptions {
|
|
124
|
+
highlightOptions?: Partial<HLJSOptions>;
|
|
125
|
+
lineNumbersOptions?: LineNumbersOptions;
|
|
126
|
+
languages?: Record<string, () => Promise<LanguageFn>>;
|
|
127
|
+
coreLibraryLoader?: () => Promise<HLJSApi>;
|
|
128
|
+
fullLibraryLoader?: () => Promise<HLJSApi>;
|
|
129
|
+
lineNumbersLoader?: () => Promise<{
|
|
130
|
+
activateLineNumbers: (document: Document) => (code: string, options?: LineNumbersOptions) => string;
|
|
131
|
+
}>;
|
|
132
|
+
themePath?: string;
|
|
226
133
|
}
|
|
134
|
+
/**
|
|
135
|
+
* @internal
|
|
136
|
+
*/
|
|
137
|
+
declare const NXT_HIGHLIGHT_OPTIONS: InjectionToken<HighlightJSOptions>;
|
|
138
|
+
declare function provideHighlightOptions(options: HighlightJSOptions): _angular_core.EnvironmentProviders;
|
|
227
139
|
|
|
228
|
-
export { HighlightAutoDirective, HighlightBase, HighlightDirective, HighlightJS, HighlightLoader,
|
|
140
|
+
export { HighlightAutoDirective, HighlightBase, HighlightDirective, HighlightJS, HighlightLoader, NXT_HIGHLIGHT_OPTIONS, provideHighlightOptions };
|
|
229
141
|
export type { HighlightJSOptions, LineNumbersOptions };
|