@ihk-gfi/lux-components-update 13.3.0 → 14.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/package.json +10 -8
- package/src/add-lux-components/files/app/app-routing.module.ts +2 -0
- package/src/add-lux-components/files/app/app.component.html +7 -2
- package/src/add-lux-components/files/app/app.component.ts +9 -1
- package/src/add-lux-components/files/app/app.module.ts +6 -1
- package/src/add-lux-components/files/app/base/license-hint/license-hint.component.html +7 -0
- package/src/add-lux-components/files/app/base/license-hint/license-hint.component.ts +18 -0
- package/src/add-lux-components/files/app/home/home.component.scss +3 -0
- package/src/add-lux-components/files/assets/svg/Example.svg +6 -0
- package/src/add-lux-components/files/assets/svg/android.svg +2 -0
- package/src/add-lux-components/files/assets/svg/box.svg +690 -0
- package/src/add-lux-components/files/assets/svg/demoAppLogo.svg +1 -0
- package/src/add-lux-components/files/assets/svg/red_power_button.svg +67 -0
- package/src/add-lux-components/files/assets/svg/svg2009.svg +57457 -0
- package/src/add-lux-components/files/environments/environment.ts +2 -2
- package/src/add-lux-components/files/locale/messages.en.xlf +544 -373
- package/src/add-lux-components/files/locale/messages.xlf +517 -352
- package/src/add-lux-components/files/src/polyfills.ts +29 -39
- package/src/add-lux-components/index.d.ts +1 -1
- package/src/add-lux-components/index.js +47 -26
- package/src/add-lux-components/index.js.map +1 -1
- package/src/add-lux-components/index.ts +50 -31
- package/src/add-lux-components/index_spec.js +3 -3
- package/src/add-lux-components/index_spec.ts +1 -1
- package/src/collection.json +13 -19
- package/src/theme/change-theme-to-authentic/index.d.ts +4 -0
- package/src/theme/change-theme-to-authentic/index.js +129 -0
- package/src/theme/change-theme-to-authentic/index.js.map +1 -0
- package/src/theme/change-theme-to-authentic/index.ts +131 -0
- package/src/{updates/update130000 → theme/change-theme-to-authentic}/index_spec.d.ts +0 -0
- package/src/theme/change-theme-to-authentic/index_spec.js +300 -0
- package/src/theme/change-theme-to-authentic/index_spec.js.map +1 -0
- package/src/theme/change-theme-to-authentic/index_spec.ts +321 -0
- package/src/{updates/update130300 → theme/change-theme-to-authentic}/schema.json +3 -3
- package/src/theme/change-to-lux-icons/index.d.ts +2 -0
- package/src/theme/change-to-lux-icons/index.js +383 -0
- package/src/theme/change-to-lux-icons/index.js.map +1 -0
- package/src/theme/change-to-lux-icons/index.ts +392 -0
- package/src/{updates/update130100 → theme/change-to-lux-icons}/index_spec.d.ts +0 -0
- package/src/theme/change-to-lux-icons/index_spec.js +128 -0
- package/src/theme/change-to-lux-icons/index_spec.js.map +1 -0
- package/src/theme/change-to-lux-icons/index_spec.ts +130 -0
- package/src/{updates/update130200 → theme/change-to-lux-icons}/schema.json +3 -3
- package/src/update-dependencies/index.d.ts +0 -3
- package/src/update-dependencies/index.js +70 -115
- package/src/update-dependencies/index.js.map +1 -1
- package/src/update-dependencies/index.ts +75 -120
- package/src/update-en-messages/index.js +18 -15
- package/src/update-en-messages/index.js.map +1 -1
- package/src/update-en-messages/index.ts +22 -16
- package/src/updates/update140000/files/src/polyfills.ts +70 -0
- package/src/updates/update140000/index.d.ts +14 -0
- package/src/updates/update140000/index.js +95 -0
- package/src/updates/update140000/index.js.map +1 -0
- package/src/updates/update140000/index.ts +110 -0
- package/src/updates/{update130200 → update140000}/index_spec.d.ts +0 -0
- package/src/updates/update140000/index_spec.js +165 -0
- package/src/updates/update140000/index_spec.js.map +1 -0
- package/src/updates/update140000/index_spec.ts +171 -0
- package/src/updates/{update130000 → update140000}/schema.json +0 -0
- package/src/utility/files.d.ts +2 -2
- package/src/utility/files.js +5 -5
- package/src/utility/files.js.map +1 -1
- package/src/utility/files.ts +5 -5
- package/src/utility/html/hit.d.ts +21 -0
- package/src/utility/html/hit.js +27 -0
- package/src/utility/html/hit.js.map +1 -0
- package/src/utility/html/hit.ts +28 -0
- package/src/utility/html/html-manipulator.d.ts +71 -0
- package/src/utility/html/html-manipulator.js +136 -0
- package/src/utility/html/html-manipulator.js.map +1 -0
- package/src/utility/html/html-manipulator.ts +156 -0
- package/src/utility/{html_spec.d.ts → html/html_spec.d.ts} +0 -0
- package/src/utility/{html_spec.js → html/html_spec.js} +232 -100
- package/src/utility/html/html_spec.js.map +1 -0
- package/src/utility/{html_spec.ts → html/html_spec.ts} +282 -106
- package/src/utility/html/manipulator-functions.d.ts +99 -0
- package/src/utility/html/manipulator-functions.js +147 -0
- package/src/utility/html/manipulator-functions.js.map +1 -0
- package/src/utility/html/manipulator-functions.ts +149 -0
- package/src/utility/json.d.ts +2 -2
- package/src/utility/json.js +16 -7
- package/src/utility/json.js.map +1 -1
- package/src/utility/json.ts +46 -26
- package/src/utility/json_spec.js +18 -18
- package/src/utility/json_spec.js.map +1 -1
- package/src/utility/json_spec.ts +136 -66
- package/src/utility/typescript.d.ts +3 -3
- package/src/utility/typescript.js +2 -2
- package/src/utility/typescript.js.map +1 -1
- package/src/utility/typescript.ts +3 -3
- package/src/utility/typescript_spec.js +0 -1
- package/src/utility/typescript_spec.js.map +1 -1
- package/src/utility/typescript_spec.ts +0 -2
- package/src/utility/util.d.ts +7 -6
- package/src/utility/util.js +12 -8
- package/src/utility/util.js.map +1 -1
- package/src/utility/util.ts +13 -10
- package/src/utility/validation.d.ts +2 -3
- package/src/utility/validation.js +2 -3
- package/src/utility/validation.js.map +1 -1
- package/src/utility/validation.ts +2 -3
- package/tsconfig.json +5 -7
- package/src/add-lux-components/files/scripts/.browserslistrc +0 -20
- package/src/updates/update130000/files/root/.browserslistrc +0 -20
- package/src/updates/update130000/index.d.ts +0 -27
- package/src/updates/update130000/index.js +0 -310
- package/src/updates/update130000/index.js.map +0 -1
- package/src/updates/update130000/index.ts +0 -362
- package/src/updates/update130000/index_spec.js +0 -584
- package/src/updates/update130000/index_spec.js.map +0 -1
- package/src/updates/update130000/index_spec.ts +0 -675
- package/src/updates/update130100/index.d.ts +0 -2
- package/src/updates/update130100/index.js +0 -27
- package/src/updates/update130100/index.js.map +0 -1
- package/src/updates/update130100/index.ts +0 -27
- package/src/updates/update130100/index_spec.js +0 -65
- package/src/updates/update130100/index_spec.js.map +0 -1
- package/src/updates/update130100/index_spec.ts +0 -69
- package/src/updates/update130100/schema.json +0 -23
- package/src/updates/update130200/index.d.ts +0 -2
- package/src/updates/update130200/index.js +0 -43
- package/src/updates/update130200/index.js.map +0 -1
- package/src/updates/update130200/index.ts +0 -41
- package/src/updates/update130200/index_spec.js +0 -106
- package/src/updates/update130200/index_spec.js.map +0 -1
- package/src/updates/update130200/index_spec.ts +0 -110
- package/src/updates/update130300/index.d.ts +0 -2
- package/src/updates/update130300/index.js +0 -35
- package/src/updates/update130300/index.js.map +0 -1
- package/src/updates/update130300/index.ts +0 -32
- package/src/updates/update130300/index_spec.d.ts +0 -1
- package/src/updates/update130300/index_spec.js +0 -85
- package/src/updates/update130300/index_spec.js.map +0 -1
- package/src/updates/update130300/index_spec.ts +0 -89
- package/src/utility/html.d.ts +0 -49
- package/src/utility/html.js +0 -246
- package/src/utility/html.js.map +0 -1
- package/src/utility/html.ts +0 -288
- package/src/utility/html_spec.js.map +0 -1
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import { callRule, SchematicContext } from '@angular-devkit/schematics';
|
|
2
|
+
import { SchematicTestRunner, UnitTestTree } from '@angular-devkit/schematics/testing';
|
|
3
|
+
import { findNodeAtLocation, getNodeValue } from 'jsonc-parser';
|
|
4
|
+
import * as path from 'path';
|
|
5
|
+
import { of as observableOf } from 'rxjs';
|
|
6
|
+
import { readJson } from '../../utility/json';
|
|
7
|
+
import { appOptions, workspaceOptions } from '../../utility/test';
|
|
8
|
+
import { UtilConfig } from '../../utility/util';
|
|
9
|
+
import { addIconAssets, iconAssetBlock, renameLuxSelectedFiles } from './index';
|
|
10
|
+
|
|
11
|
+
describe('update140000', () => {
|
|
12
|
+
let appTree: UnitTestTree;
|
|
13
|
+
let runner: SchematicTestRunner;
|
|
14
|
+
let context: SchematicContext;
|
|
15
|
+
|
|
16
|
+
const testOptions: { project: string; path: string; verbose: boolean } = {
|
|
17
|
+
project: '',
|
|
18
|
+
path: '/',
|
|
19
|
+
verbose: false
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
beforeEach(async () => {
|
|
23
|
+
const collectionPath = path.join(__dirname, '../../collection.json');
|
|
24
|
+
runner = new SchematicTestRunner('schematics', collectionPath);
|
|
25
|
+
|
|
26
|
+
const collection = '@schematics/angular';
|
|
27
|
+
appTree = await runner.runExternalSchematicAsync(collection, 'workspace', workspaceOptions).toPromise();
|
|
28
|
+
appTree = await runner.runExternalSchematicAsync(collection, 'application', appOptions, appTree).toPromise();
|
|
29
|
+
|
|
30
|
+
context = runner.engine.createContext(
|
|
31
|
+
runner.engine.createSchematic('update', runner.engine.createCollection(collectionPath))
|
|
32
|
+
);
|
|
33
|
+
|
|
34
|
+
UtilConfig.defaultWaitMS = 0;
|
|
35
|
+
|
|
36
|
+
testOptions.project = appOptions.name;
|
|
37
|
+
testOptions.path = workspaceOptions.newProjectRoot + '/' + appOptions.name;
|
|
38
|
+
testOptions.verbose = true;
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
describe('[Rule] addIconAssets', () => {
|
|
42
|
+
it('Sollte den LUX-Iconpfad in den Assets-Abschnitten ergänzen', (done) => {
|
|
43
|
+
const filePath = './angular.json';
|
|
44
|
+
appTree.overwrite(filePath, angularJsonIconAssets);
|
|
45
|
+
|
|
46
|
+
callRule(addIconAssets(testOptions), observableOf(appTree), context).subscribe({
|
|
47
|
+
next: (success) => {
|
|
48
|
+
const assetPath = ['projects', testOptions.project, 'architect', 'build', 'options', 'assets'];
|
|
49
|
+
const node = findNodeAtLocation(readJson(success, filePath), assetPath);
|
|
50
|
+
expect(node).toBeDefined();
|
|
51
|
+
expect(node?.children?.length).toBe(3);
|
|
52
|
+
expect(JSON.stringify(getNodeValue(node!.children![2]))).toBe(JSON.stringify(iconAssetBlock));
|
|
53
|
+
|
|
54
|
+
const testAssetPath = ['projects', testOptions.project, 'architect', 'test', 'options', 'assets'];
|
|
55
|
+
const testNode = findNodeAtLocation(readJson(success, filePath), testAssetPath);
|
|
56
|
+
expect(testNode).toBeDefined();
|
|
57
|
+
expect(testNode?.children?.length).toBe(3);
|
|
58
|
+
expect(JSON.stringify(getNodeValue(testNode!.children![2]))).toBe(JSON.stringify(iconAssetBlock));
|
|
59
|
+
|
|
60
|
+
done();
|
|
61
|
+
},
|
|
62
|
+
error: (reason) => expect(reason).toBeUndefined()
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
describe('[Rule] renameLuxSelectedFiles', () => {
|
|
68
|
+
it('Sollte das Attribut "luxSelectedFiles" in "luxSelected" umbenennen', (done) => {
|
|
69
|
+
const filePath = testOptions.path + '/renameLuxSelectedFiles/Test.component.html';
|
|
70
|
+
appTree.create(filePath, renameLuxSelectedFilesContent);
|
|
71
|
+
|
|
72
|
+
callRule(renameLuxSelectedFiles(testOptions), observableOf(appTree), context).subscribe({
|
|
73
|
+
next: (success) => {
|
|
74
|
+
const content = success.read(filePath)?.toString();
|
|
75
|
+
|
|
76
|
+
expect(content).toContain('<lux-file-input luxSelected="selected" (luxSelectedChange)="onSelected()"></lux-file-input>');
|
|
77
|
+
expect(content).toContain('<lux-file-input [luxSelected]="selected" (luxSelectedChange)="onSelected()"></lux-file-input>');
|
|
78
|
+
expect(content).toContain('<lux-file-input [(luxSelected)]="selected"></lux-file-input>');
|
|
79
|
+
|
|
80
|
+
expect(content).toContain('<lux-file-list luxSelected="selected" (luxSelectedChange)="onSelected()"></lux-file-list>');
|
|
81
|
+
expect(content).toContain('<lux-file-list [luxSelected]="selected" (luxSelectedChange)="onSelected()"></lux-file-list>');
|
|
82
|
+
expect(content).toContain('<lux-file-list [(luxSelected)]="selected"></lux-file-list>');
|
|
83
|
+
|
|
84
|
+
expect(content).toContain('<lux-file-upload luxSelected="selected" (luxSelectedChange)="onSelected()"></lux-file-upload>');
|
|
85
|
+
expect(content).toContain('<lux-file-upload [luxSelected]="selected" (luxSelectedChange)="onSelected()"></lux-file-upload>');
|
|
86
|
+
expect(content).toContain('<lux-file-upload [(luxSelected)]="selected"></lux-file-upload>');
|
|
87
|
+
done();
|
|
88
|
+
},
|
|
89
|
+
error: (reason) => expect(reason).toBeUndefined()
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
const renameLuxSelectedFilesContent = `
|
|
96
|
+
<lux-file-input luxSelectedFiles="selected" (luxSelectedFilesChange)="onSelected()"></lux-file-input>
|
|
97
|
+
<lux-file-input [luxSelectedFiles]="selected" (luxSelectedFilesChange)="onSelected()"></lux-file-input>
|
|
98
|
+
<lux-file-input [(luxSelectedFiles)]="selected"></lux-file-input>
|
|
99
|
+
|
|
100
|
+
<lux-file-list luxSelectedFiles="selected" (luxSelectedFilesChange)="onSelected()"></lux-file-list>
|
|
101
|
+
<lux-file-list [luxSelectedFiles]="selected" (luxSelectedFilesChange)="onSelected()"></lux-file-list>
|
|
102
|
+
<lux-file-list [(luxSelectedFiles)]="selected"></lux-file-list>
|
|
103
|
+
|
|
104
|
+
<lux-file-upload luxSelectedFiles="selected" (luxSelectedFilesChange)="onSelected()"></lux-file-upload>
|
|
105
|
+
<lux-file-upload [luxSelectedFiles]="selected" (luxSelectedFilesChange)="onSelected()"></lux-file-upload>
|
|
106
|
+
<lux-file-upload [(luxSelectedFiles)]="selected"></lux-file-upload>
|
|
107
|
+
`;
|
|
108
|
+
|
|
109
|
+
const angularJsonIconAssets = `
|
|
110
|
+
{
|
|
111
|
+
"$schema": "./node_modules/@angular/cli/lib/config/schema.json",
|
|
112
|
+
"version": 1,
|
|
113
|
+
"newProjectRoot": "projects",
|
|
114
|
+
"projects": {
|
|
115
|
+
"bar": {
|
|
116
|
+
"root": "",
|
|
117
|
+
"sourceRoot": "src",
|
|
118
|
+
"projectType": "application",
|
|
119
|
+
"i18n": {
|
|
120
|
+
"sourceLocale": {
|
|
121
|
+
"code": "de",
|
|
122
|
+
"baseHref": "/"
|
|
123
|
+
},
|
|
124
|
+
"locales": {
|
|
125
|
+
"en": "src/locale/messages.en.xlf"
|
|
126
|
+
}
|
|
127
|
+
},
|
|
128
|
+
"architect": {
|
|
129
|
+
"build": {
|
|
130
|
+
"builder": "ngx-build-plus:browser",
|
|
131
|
+
"options": {
|
|
132
|
+
"outputPath": "dist",
|
|
133
|
+
"index": "src/index.html",
|
|
134
|
+
"main": "src/main.ts",
|
|
135
|
+
"tsConfig": "src/tsconfig.app.json",
|
|
136
|
+
"polyfills": "src/polyfills.ts",
|
|
137
|
+
"localize": [
|
|
138
|
+
"de"
|
|
139
|
+
],
|
|
140
|
+
"i18nMissingTranslation": "error",
|
|
141
|
+
"assets": [
|
|
142
|
+
"src/assets",
|
|
143
|
+
"src/favicon.ico"
|
|
144
|
+
],
|
|
145
|
+
"styles": [
|
|
146
|
+
"src/styles.scss"
|
|
147
|
+
]
|
|
148
|
+
},
|
|
149
|
+
},
|
|
150
|
+
"test": {
|
|
151
|
+
"builder": "ngx-build-plus:karma",
|
|
152
|
+
"options": {
|
|
153
|
+
"main": "src/test.ts",
|
|
154
|
+
"karmaConfig": "./karma.conf.js",
|
|
155
|
+
"polyfills": "src/polyfills.ts",
|
|
156
|
+
"tsConfig": "src/tsconfig.spec.json",
|
|
157
|
+
"scripts": [],
|
|
158
|
+
"styles": [
|
|
159
|
+
"src/styles.scss"
|
|
160
|
+
],
|
|
161
|
+
"assets": [
|
|
162
|
+
"src/assets",
|
|
163
|
+
"src/favicon.ico"
|
|
164
|
+
]
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
`;
|
|
File without changes
|
package/src/utility/files.d.ts
CHANGED
|
@@ -8,7 +8,7 @@ import { Rule, SchematicContext, Tree } from '@angular-devkit/schematics';
|
|
|
8
8
|
* @param filePath
|
|
9
9
|
* @param searchString
|
|
10
10
|
*/
|
|
11
|
-
export declare function deleteLineFromFile(tree: Tree,
|
|
11
|
+
export declare function deleteLineFromFile(tree: Tree, _context: SchematicContext, filePath: string, searchString: string, withLog?: boolean): boolean;
|
|
12
12
|
/**
|
|
13
13
|
* Schreibt die übergebenen Zeilen in die Datei.
|
|
14
14
|
* Wenn die Datei existiert, wird der neue Inhalt am Ende der Datei angehangen.
|
|
@@ -18,7 +18,7 @@ export declare function deleteLineFromFile(tree: Tree, context: SchematicContext
|
|
|
18
18
|
* @param filePath
|
|
19
19
|
* @param lines
|
|
20
20
|
*/
|
|
21
|
-
export declare function writeLinesToFile(tree: Tree,
|
|
21
|
+
export declare function writeLinesToFile(tree: Tree, _context: SchematicContext, filePath: string, ...lines: string[]): void;
|
|
22
22
|
/**
|
|
23
23
|
* Iteriert über alle Dateien vom Root-Pfad aus.
|
|
24
24
|
* Über die filePathEndings lassen sich Einschränkungen bzgl. des Datei-Typs festlegen (z.B. .html).
|
package/src/utility/files.js
CHANGED
|
@@ -12,7 +12,7 @@ const logging_1 = require("./logging");
|
|
|
12
12
|
* @param filePath
|
|
13
13
|
* @param searchString
|
|
14
14
|
*/
|
|
15
|
-
function deleteLineFromFile(tree,
|
|
15
|
+
function deleteLineFromFile(tree, _context, filePath, searchString, withLog = true) {
|
|
16
16
|
let changed = false;
|
|
17
17
|
const fileContent = tree.read(filePath);
|
|
18
18
|
if (fileContent) {
|
|
@@ -79,7 +79,7 @@ exports.deleteLineFromFile = deleteLineFromFile;
|
|
|
79
79
|
* @param filePath
|
|
80
80
|
* @param lines
|
|
81
81
|
*/
|
|
82
|
-
function writeLinesToFile(tree,
|
|
82
|
+
function writeLinesToFile(tree, _context, filePath, ...lines) {
|
|
83
83
|
const fileContent = tree.read(filePath);
|
|
84
84
|
let content = '';
|
|
85
85
|
lines.forEach((line) => {
|
|
@@ -150,7 +150,7 @@ exports.iterateFilesAndModifyContent = iterateFilesAndModifyContent;
|
|
|
150
150
|
* @param targetPath Ein Zielpfad (z.B. src/theming/).
|
|
151
151
|
*/
|
|
152
152
|
function moveFilesToDirectory(options, sourcePath, targetPath) {
|
|
153
|
-
return (tree,
|
|
153
|
+
return (tree, _context) => {
|
|
154
154
|
if (!targetPath.startsWith('/')) {
|
|
155
155
|
targetPath = '/' + targetPath;
|
|
156
156
|
}
|
|
@@ -186,7 +186,7 @@ exports.moveFilesToDirectory = moveFilesToDirectory;
|
|
|
186
186
|
* @param exclude Ein Array mit Dateinamen, die nicht gelöscht werden sollen.
|
|
187
187
|
*/
|
|
188
188
|
function deleteFilesInDirectory(options, path, exclude) {
|
|
189
|
-
return (tree,
|
|
189
|
+
return (tree, _context) => {
|
|
190
190
|
if (!path.startsWith('/')) {
|
|
191
191
|
path = '/' + path;
|
|
192
192
|
}
|
|
@@ -290,7 +290,7 @@ exports.findModule = findModule;
|
|
|
290
290
|
* @param targetPath
|
|
291
291
|
*/
|
|
292
292
|
function deleteFile(options, targetPath) {
|
|
293
|
-
return (tree,
|
|
293
|
+
return (tree, _context) => {
|
|
294
294
|
(0, logging_1.logInfoWithDescriptor)('Lösche Datei ' + targetPath + '.');
|
|
295
295
|
if (!targetPath.startsWith('/')) {
|
|
296
296
|
targetPath = '/' + targetPath;
|
package/src/utility/files.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"files.js","sourceRoot":"","sources":["files.ts"],"names":[],"mappings":";;;AAAA,+CAA2D;AAC3D,2DAWoC;AACpC,uCAAuE;AAEvE;;;;;;;GAOG;AACH,SAAgB,kBAAkB,CAAC,IAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"files.js","sourceRoot":"","sources":["files.ts"],"names":[],"mappings":";;;AAAA,+CAA2D;AAC3D,2DAWoC;AACpC,uCAAuE;AAEvE;;;;;;;GAOG;AACH,SAAgB,kBAAkB,CAAC,IAAU,EAAE,QAA0B,EAAE,QAAgB,EAAE,YAAoB,EAAE,OAAO,GAAG,IAAI;IAC/H,IAAI,OAAO,GAAG,KAAK,CAAC;IAEpB,MAAM,WAAW,GAAkB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvD,IAAI,WAAW,EAAE;QACf,4BAA4B;QAC5B,IAAI,OAAO,GAAW,WAAW,CAAC,QAAQ,EAAE,CAAC;QAE7C,IAAI,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE;YACxC,qBAAqB;YACrB,IAAI,SAAS,GAAG,MAAM,CAAC;YAEvB,mDAAmD;YACnD,IAAI,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE;gBACrC,SAAS,GAAG,IAAI,CAAC;aAClB;YAED,iCAAiC;YACjC,MAAM,KAAK,GAAa,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YAEjD,iDAAiD;YACjD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACrC,qCAAqC;gBACrC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE;oBACvC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBAExC,yCAAyC;oBACzC,sDAAsD;oBACtD,qDAAqD;oBACrD,YAAY;oBACZ,oBAAoB;oBACpB,kCAAkC;oBAClC,gCAAgC;oBAChC,OAAO;oBACP,8CAA8C;oBAC9C,8DAA8D;oBAC9D,gDAAgD;oBAChD,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE;wBACtD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,GAAG,IAAI,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,IAAI,CAAC,EAAE;4BAC1E,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;yBACnG;qBACF;iBACF;aACF;YACD,oCAAoC;YACpC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;YAC3D,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,UAAU,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;YAE/D,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAClC,OAAO,GAAG,IAAI,CAAC;SAChB;aAAM;YACL,IAAI,OAAO,EAAE;gBACX,IAAA,iBAAO,EAAC,cAAe,QAAS,yBAA0B,YAAa,UAAU,CAAC,CAAC;aACpF;SACF;KACF;SAAM;QACL,IAAI,OAAO,EAAE;YACX,IAAA,iBAAO,EAAC,cAAe,QAAS,yBAAyB,CAAC,CAAC;SAC5D;KACF;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AA9DD,gDA8DC;AAED;;;;;;;;GAQG;AACH,SAAgB,gBAAgB,CAAC,IAAU,EAAE,QAA0B,EAAE,QAAgB,EAAE,GAAG,KAAe;IAC3G,MAAM,WAAW,GAAkB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvD,IAAI,OAAO,GAAW,EAAE,CAAC;IAEzB,KAAK,CAAC,OAAO,CAAC,CAAC,IAAY,EAAE,EAAE;QAC7B,IAAI,WAAW,IAAI,WAAW,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;YAC9D,OAAO,IAAI,IAAI,GAAG,MAAM,CAAC;SAC1B;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,WAAW,KAAK,IAAI,EAAE;QACxB,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,WAAW,CAAC,QAAQ,EAAE,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;QACpE,IAAA,iBAAO,EAAC,2BAA2B,QAAQ,IAAI,CAAC,CAAC;KAClD;SAAM;QACL,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC/B,IAAA,iBAAO,EAAC,uBAAuB,QAAQ,0BAA0B,CAAC,CAAC;KACpE;AACH,CAAC;AAjBD,4CAiBC;AAED;;;;;;;;GAQG;AACH,SAAgB,4BAA4B,CAC1C,IAAU,EACV,WAAmB,EAAE,EACrB,QAAkB,EAClB,GAAG,eAAyB;IAE5B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,QAAgB,EAAE,EAAE;QAC/C,0BAA0B;QAC1B,IACE,QAAQ,CAAC,UAAU,CAAC,gBAAgB,CAAC;YACrC,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC;YAC9B,QAAQ,CAAC,UAAU,CAAC,YAAY,CAAC;YACjC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,EAC7B;YACA,OAAO;SACR;QAED,qDAAqD;QACrD,IAAI,UAAU,GAAY,KAAK,CAAC;QAChC,KAAK,IAAI,UAAU,IAAI,eAAe,EAAE;YACtC,IAAI,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;gBACjC,UAAU,GAAG,IAAI,CAAC;gBAClB,MAAM;aACP;SACF;QACD,yCAAyC;QACzC,IAAI,CAAC,UAAU,EAAE;YACf,OAAO;SACR;QACD,kBAAkB;QAClB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACpC,+DAA+D;QAC/D,IAAI,CAAC,OAAO,EAAE;YACZ,OAAO;SACR;QAED,0DAA0D;QAC1D,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;AACL,CAAC;AAvCD,oEAuCC;AAED;;;;;;;;;;GAUG;AACH,SAAgB,oBAAoB,CAAC,OAAY,EAAE,UAAkB,EAAE,UAAkB;IACvF,OAAO,CAAC,IAAU,EAAE,QAA0B,EAAE,EAAE;QAChD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;YAC/B,UAAU,GAAG,GAAG,GAAG,UAAU,CAAC;SAC/B;QACD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;YAC/B,UAAU,GAAG,GAAG,GAAG,UAAU,CAAC;SAC/B;QAED,UAAU,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC;QAE7D,MAAM,cAAc,GAAG,IAAA,kBAAK,EAAC,IAAA,gBAAG,EAAC,GAAG,GAAG,UAAU,CAAC,EAAE;YAClD,IAAA,qBAAQ,kCACH,cAAO,GACP,OAAO,EACV;YACF,IAAA,oBAAO,EAAC,CAAC,IAAI,EAAE,EAAE;gBACf,IAAI,aAAa,GAAG,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC;gBAC3C,aAAa,GAAG,aAAa,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;gBAEjD,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE;oBAC9B,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;oBAC5C,IAAA,iBAAO,EAAC,UAAU,aAAa,iBAAiB,CAAC,CAAC;iBACnD;qBAAM;oBACL,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;oBACzC,IAAA,iBAAO,EAAC,UAAU,aAAa,aAAa,CAAC,CAAC;iBAC/C;gBACD,OAAO,IAAI,CAAC;YACd,CAAC,CAAC;SACH,CAAC,CAAC;QAEH,OAAO,IAAA,sBAAS,EAAC,cAAc,EAAE,0BAAa,CAAC,SAAS,CAAC,CAAC;IAC5D,CAAC,CAAC;AACJ,CAAC;AAjCD,oDAiCC;AAED;;;;;;GAMG;AACH,SAAgB,sBAAsB,CAAC,OAAY,EAAE,IAAY,EAAE,OAAiB;IAClF,OAAO,CAAC,IAAU,EAAE,QAA0B,EAAE,EAAE;QAChD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;YACzB,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC;SACnB;QAED,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YACvB,IAAI,GAAG,IAAI,GAAG,GAAG,CAAC;SACnB;QAED,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;QAEjD,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,GAAG,EAAE;YACP,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;gBAChC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,eAAe,EAAE,EAAE,CAAC,eAAe,KAAK,QAAQ,CAAC,EAAE;oBACpE,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC,CAAC;oBAC7B,IAAA,iBAAO,EAAC,QAAQ,GAAG,YAAY,CAAC,CAAC;iBAClC;YACH,CAAC,CAAC,CAAC;SACJ;QAED,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;AACJ,CAAC;AAxBD,wDAwBC;AAED,SAAgB,gCAAgC,CAC9C,IAAU,EACV,QAAgB,EAChB,aAAuB,EACvB,QAAkB,EAClB,GAAG,eAAyB;IAE5B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,QAAgB,EAAE,EAAE;QAC/C,0BAA0B;QAC1B,IACE,QAAQ,CAAC,UAAU,CAAC,gBAAgB,CAAC;YACrC,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC;YAC9B,QAAQ,CAAC,UAAU,CAAC,YAAY,CAAC;YACjC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC;YAC7B,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,EAC7B;YACA,OAAO;SACR;QAED,qDAAqD;QACrD,IAAI,UAAU,GAAY,KAAK,CAAC;QAChC,KAAK,IAAI,UAAU,IAAI,eAAe,EAAE;YACtC,IAAI,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;gBACjC,UAAU,GAAG,IAAI,CAAC;gBAClB,MAAM;aACP;SACF;QACD,yCAAyC;QACzC,IAAI,CAAC,UAAU,EAAE;YACf,OAAO;SACR;QACD,kBAAkB;QAClB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACpC,+DAA+D;QAC/D,IAAI,CAAC,OAAO,EAAE;YACZ,OAAO;SACR;QAED,IAAI,iBAAiB,GAAW,EAAE,CAAC;QACnC,aAAa,CAAC,OAAO,CAAC,CAAC,YAAoB,EAAE,EAAE;YAC7C,IAAI,CAAC,iBAAiB,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE;gBACvE,iBAAiB,GAAG,YAAY,CAAC;aAClC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,iBAAiB,EAAE;YACtB,OAAO;SACR;QAED,yCAAyC;QACzC,MAAM,OAAO,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;QACjE,MAAM,UAAU,GAAS,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACnD,IAAI,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1C,IAAI,aAAa,EAAE;YACjB,0DAA0D;YAC1D,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC,QAAQ,EAAE,CAAC,CAAC;SAChD;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AA1DD,4EA0DC;AAED;;;;GAIG;AACH,SAAgB,UAAU,CACxB,IAAU,EACV,WAAmB,EACnB,SAAS,GAAG,YAAY,EACxB,gBAAgB,GAAG,oBAAoB;IAEvC,IAAI,GAAG,GAAoB,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,WAAW,CAAC,CAAC;IAC1D,IAAI,kBAAkB,GAAG,KAAK,CAAC;IAE/B,OAAO,GAAG,EAAE;QACV,MAAM,UAAU,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;QACrE,MAAM,eAAe,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC;QAEhF,kBAAkB,GAAG,kBAAkB,IAAI,UAAU,CAAC,MAAM,KAAK,eAAe,CAAC,MAAM,CAAC;QAExF,IAAI,eAAe,CAAC,MAAM,IAAI,CAAC,EAAE;YAC/B,OAAO,IAAA,WAAI,EAAC,GAAG,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;SAC3C;aAAM,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE;YACrC,MAAM,IAAI,KAAK,CACb,yEAAyE;gBACvE,wCAAwC,CAC3C,CAAC;SACH;QAED,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC;KAClB;IAED,MAAM,QAAQ,GAAG,kBAAkB;QACjC,CAAC,CAAC,wCAAwC;YACxC,0BAA0B,gBAAgB,sCAAsC;YAChF,6DAA6D;QAC/D,CAAC,CAAC,uFAAuF,CAAC;IAE5F,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC;AAC5B,CAAC;AAlCD,gCAkCC;AAED;;;;GAIG;AACH,SAAgB,UAAU,CAAC,OAAY,EAAE,UAAkB;IACzD,OAAO,CAAC,IAAU,EAAE,QAA0B,EAAE,EAAE;QAChD,IAAA,+BAAqB,EAAC,eAAe,GAAG,UAAU,GAAG,GAAG,CAAC,CAAC;QAC1D,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;YAC/B,UAAU,GAAG,GAAG,GAAG,UAAU,CAAC;SAC/B;QAED,UAAU,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC;QAE7D,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE;YAC3B,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YACxB,IAAA,oBAAU,EAAC,UAAU,GAAG,wBAAwB,CAAC,CAAC;SACnD;aAAM;YACL,IAAA,oBAAU,EAAC,UAAU,GAAG,gCAAgC,CAAC,CAAC;SAC3D;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;AACJ,CAAC;AAjBD,gCAiBC"}
|
package/src/utility/files.ts
CHANGED
|
@@ -21,7 +21,7 @@ import { logInfo, logInfoWithDescriptor, logSuccess } from './logging';
|
|
|
21
21
|
* @param filePath
|
|
22
22
|
* @param searchString
|
|
23
23
|
*/
|
|
24
|
-
export function deleteLineFromFile(tree: Tree,
|
|
24
|
+
export function deleteLineFromFile(tree: Tree, _context: SchematicContext, filePath: string, searchString: string, withLog = true) {
|
|
25
25
|
let changed = false;
|
|
26
26
|
|
|
27
27
|
const fileContent: Buffer | null = tree.read(filePath);
|
|
@@ -94,7 +94,7 @@ export function deleteLineFromFile(tree: Tree, context: SchematicContext, filePa
|
|
|
94
94
|
* @param filePath
|
|
95
95
|
* @param lines
|
|
96
96
|
*/
|
|
97
|
-
export function writeLinesToFile(tree: Tree,
|
|
97
|
+
export function writeLinesToFile(tree: Tree, _context: SchematicContext, filePath: string, ...lines: string[]) {
|
|
98
98
|
const fileContent: Buffer | null = tree.read(filePath);
|
|
99
99
|
let content: string = '';
|
|
100
100
|
|
|
@@ -175,7 +175,7 @@ export function iterateFilesAndModifyContent(
|
|
|
175
175
|
* @param targetPath Ein Zielpfad (z.B. src/theming/).
|
|
176
176
|
*/
|
|
177
177
|
export function moveFilesToDirectory(options: any, sourcePath: string, targetPath: string): Rule {
|
|
178
|
-
return (tree: Tree,
|
|
178
|
+
return (tree: Tree, _context: SchematicContext) => {
|
|
179
179
|
if (!targetPath.startsWith('/')) {
|
|
180
180
|
targetPath = '/' + targetPath;
|
|
181
181
|
}
|
|
@@ -217,7 +217,7 @@ export function moveFilesToDirectory(options: any, sourcePath: string, targetPat
|
|
|
217
217
|
* @param exclude Ein Array mit Dateinamen, die nicht gelöscht werden sollen.
|
|
218
218
|
*/
|
|
219
219
|
export function deleteFilesInDirectory(options: any, path: string, exclude: string[]): Rule {
|
|
220
|
-
return (tree: Tree,
|
|
220
|
+
return (tree: Tree, _context: SchematicContext) => {
|
|
221
221
|
if (!path.startsWith('/')) {
|
|
222
222
|
path = '/' + path;
|
|
223
223
|
}
|
|
@@ -349,7 +349,7 @@ export function findModule(
|
|
|
349
349
|
* @param targetPath
|
|
350
350
|
*/
|
|
351
351
|
export function deleteFile(options: any, targetPath: string): Rule {
|
|
352
|
-
return (tree: Tree,
|
|
352
|
+
return (tree: Tree, _context: SchematicContext) => {
|
|
353
353
|
logInfoWithDescriptor('Lösche Datei ' + targetPath + '.');
|
|
354
354
|
if (!targetPath.startsWith('/')) {
|
|
355
355
|
targetPath = '/' + targetPath;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Die {@link Hit}-Klasse repräsentiert einen Treffer, der Anhand des verwendeten Selektors gefunden wurde.
|
|
3
|
+
*/
|
|
4
|
+
export declare class Hit {
|
|
5
|
+
placeholder: string;
|
|
6
|
+
selector: string;
|
|
7
|
+
row: number;
|
|
8
|
+
elementContent: string;
|
|
9
|
+
element: Element;
|
|
10
|
+
/**
|
|
11
|
+
* Der Konstruktor der {@link Hit}-Klasse.
|
|
12
|
+
*
|
|
13
|
+
* @param placeholder Der Platzhalter des Treffers. Im Nachgang wird der {@link HtmlManipulator} den Platzhalter des Treffers
|
|
14
|
+
* in der HTML-Ausgabe durch den transformierten HTML-Inhalt ersetzen.
|
|
15
|
+
* @param selector Der CSS-Selektor.
|
|
16
|
+
* @param elementContent Der HTML-Inhalt des Elements und NICHT des gesamten HTML-Templates.
|
|
17
|
+
* @param element Das {@link Element}.
|
|
18
|
+
* @param row Die Startzeile im HTML-Template.
|
|
19
|
+
*/
|
|
20
|
+
constructor(placeholder: string, selector: string, elementContent: string, element: Element, row: number);
|
|
21
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Hit = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Die {@link Hit}-Klasse repräsentiert einen Treffer, der Anhand des verwendeten Selektors gefunden wurde.
|
|
6
|
+
*/
|
|
7
|
+
class Hit {
|
|
8
|
+
/**
|
|
9
|
+
* Der Konstruktor der {@link Hit}-Klasse.
|
|
10
|
+
*
|
|
11
|
+
* @param placeholder Der Platzhalter des Treffers. Im Nachgang wird der {@link HtmlManipulator} den Platzhalter des Treffers
|
|
12
|
+
* in der HTML-Ausgabe durch den transformierten HTML-Inhalt ersetzen.
|
|
13
|
+
* @param selector Der CSS-Selektor.
|
|
14
|
+
* @param elementContent Der HTML-Inhalt des Elements und NICHT des gesamten HTML-Templates.
|
|
15
|
+
* @param element Das {@link Element}.
|
|
16
|
+
* @param row Die Startzeile im HTML-Template.
|
|
17
|
+
*/
|
|
18
|
+
constructor(placeholder, selector, elementContent, element, row) {
|
|
19
|
+
this.placeholder = placeholder;
|
|
20
|
+
this.elementContent = elementContent;
|
|
21
|
+
this.row = row;
|
|
22
|
+
this.selector = selector;
|
|
23
|
+
this.element = element;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
exports.Hit = Hit;
|
|
27
|
+
//# sourceMappingURL=hit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hit.js","sourceRoot":"","sources":["hit.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH,MAAa,GAAG;IAOd;;;;;;;;;OASG;IACH,YAAY,WAAmB,EAAE,QAAgB,EAAE,cAAsB,EAAE,OAAgB,EAAE,GAAW;QACtG,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QACrC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;CACF;AAxBD,kBAwBC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Die {@link Hit}-Klasse repräsentiert einen Treffer, der Anhand des verwendeten Selektors gefunden wurde.
|
|
3
|
+
*/
|
|
4
|
+
export class Hit {
|
|
5
|
+
placeholder: string;
|
|
6
|
+
selector: string;
|
|
7
|
+
row: number;
|
|
8
|
+
elementContent: string;
|
|
9
|
+
element: Element;
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Der Konstruktor der {@link Hit}-Klasse.
|
|
13
|
+
*
|
|
14
|
+
* @param placeholder Der Platzhalter des Treffers. Im Nachgang wird der {@link HtmlManipulator} den Platzhalter des Treffers
|
|
15
|
+
* in der HTML-Ausgabe durch den transformierten HTML-Inhalt ersetzen.
|
|
16
|
+
* @param selector Der CSS-Selektor.
|
|
17
|
+
* @param elementContent Der HTML-Inhalt des Elements und NICHT des gesamten HTML-Templates.
|
|
18
|
+
* @param element Das {@link Element}.
|
|
19
|
+
* @param row Die Startzeile im HTML-Template.
|
|
20
|
+
*/
|
|
21
|
+
constructor(placeholder: string, selector: string, elementContent: string, element: Element, row: number) {
|
|
22
|
+
this.placeholder = placeholder;
|
|
23
|
+
this.elementContent = elementContent;
|
|
24
|
+
this.row = row;
|
|
25
|
+
this.selector = selector;
|
|
26
|
+
this.element = element;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { ManipulatorFn } from './manipulator-functions';
|
|
2
|
+
export declare const ATTR_NOT_PROCESSED = "data-lux-not-processed";
|
|
3
|
+
export declare const PLACEHOLDER = "@@@element@@@";
|
|
4
|
+
/**
|
|
5
|
+
* Der {@link HtmlManipulator} ist für die Manipulation der HTML-Templates zuständig.
|
|
6
|
+
*
|
|
7
|
+
* Warum verwendet der {@link HtmlManipulator} eigene Funktionen, um den HTML-Inhalt anzupassen,
|
|
8
|
+
* anstatt die bereitgestellten Methoden von JSDOm (serialize()) bzw. Cheerio (xml() oder html() zu verwenden?
|
|
9
|
+
*
|
|
10
|
+
* Die serialize-Methode von JSDOM wandelt alle Attribute in Kleinschrift um, sodass die Angular-Attribute nicht mehr
|
|
11
|
+
* funktionieren. Cheerio kann konfiguriert werden, sodass die Camel-Case-Namen erhalten bleiben,
|
|
12
|
+
* aber dort werden z.B. die leeren Ent-Tags ersetzt. Zusätzlich bricht Cheerio manchmal in komplexeren Templates an Stellen um,
|
|
13
|
+
* sodass das Template im Anschluss nicht mehr kompiliert.
|
|
14
|
+
*
|
|
15
|
+
* @example JSDOM
|
|
16
|
+
* Input: <lux-input luxLabel="Lorem ipsum"></lux-input>
|
|
17
|
+
* Output: <lux-input luxlabel="Lorem ipsum"></lux-input>
|
|
18
|
+
*
|
|
19
|
+
* @example Cheerio
|
|
20
|
+
* Input: <lux-input></lux-input>
|
|
21
|
+
* Output: <lux-input/>
|
|
22
|
+
*/
|
|
23
|
+
export declare class HtmlManipulator {
|
|
24
|
+
private htmlContent;
|
|
25
|
+
private readonly selector;
|
|
26
|
+
private readonly manipulatorFNs;
|
|
27
|
+
private constructor();
|
|
28
|
+
/**
|
|
29
|
+
* Diese Methode ermittelt alle betroffenen HTML-Elemente anhand des übergebenen Selektors und versieht diese mit dem temporären
|
|
30
|
+
* {@link ATTR_NOT_PROCESSED}-Attribut.
|
|
31
|
+
*
|
|
32
|
+
* @example Selektor - lux-card
|
|
33
|
+
* <div>
|
|
34
|
+
* <lux-card luxTitle="Test">
|
|
35
|
+
* <lux-card-content>
|
|
36
|
+
* <p>Lorem ipsum</p>
|
|
37
|
+
* </lux-card-content>
|
|
38
|
+
* </lux-card>
|
|
39
|
+
* </div>
|
|
40
|
+
*
|
|
41
|
+
* <div>
|
|
42
|
+
* <lux-card data-lux-not-processed luxTitle="Test">
|
|
43
|
+
* <lux-card-content>
|
|
44
|
+
* <p>Lorem ipsum</p>
|
|
45
|
+
* </lux-card-content>
|
|
46
|
+
* </lux-card>
|
|
47
|
+
* </div>
|
|
48
|
+
*
|
|
49
|
+
* @param htmlContent Der HTML-Inhalt.
|
|
50
|
+
* @param selector Der CSS-Selektor.
|
|
51
|
+
*/
|
|
52
|
+
static prepare(htmlContent: string, selector: string): string;
|
|
53
|
+
/**
|
|
54
|
+
* Diese Methode transformiert den übergebenen HTML-Inhalt mit den Manipulator-Funktionen.
|
|
55
|
+
*
|
|
56
|
+
* @param htmlContent Der HTML-Inhalt.
|
|
57
|
+
* @param selector Der CSS-Selektor.
|
|
58
|
+
* @param manipulatorFns Die Funktionen manipulieren den HTML-Inhalt.
|
|
59
|
+
*/
|
|
60
|
+
static transform(htmlContent: string, selector: string, ...manipulatorFns: ManipulatorFn[]): string;
|
|
61
|
+
/**
|
|
62
|
+
* Diese Methode liefert die Anzahl der mit dem Selektor gefundenen Elemente zurück.
|
|
63
|
+
*
|
|
64
|
+
* @param htmlContent Der HTML-Inhalt.
|
|
65
|
+
* @param selector Der CSS-Selektor.
|
|
66
|
+
*/
|
|
67
|
+
static count(htmlContent: string, selector: string): number;
|
|
68
|
+
private do;
|
|
69
|
+
private next;
|
|
70
|
+
private static addUnprocessedAttr;
|
|
71
|
+
}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.HtmlManipulator = exports.PLACEHOLDER = exports.ATTR_NOT_PROCESSED = void 0;
|
|
4
|
+
const jsdom_1 = require("jsdom");
|
|
5
|
+
const util_1 = require("../util");
|
|
6
|
+
const hit_1 = require("./hit");
|
|
7
|
+
exports.ATTR_NOT_PROCESSED = 'data-lux-not-processed';
|
|
8
|
+
exports.PLACEHOLDER = `@@@element@@@`;
|
|
9
|
+
/**
|
|
10
|
+
* Der {@link HtmlManipulator} ist für die Manipulation der HTML-Templates zuständig.
|
|
11
|
+
*
|
|
12
|
+
* Warum verwendet der {@link HtmlManipulator} eigene Funktionen, um den HTML-Inhalt anzupassen,
|
|
13
|
+
* anstatt die bereitgestellten Methoden von JSDOm (serialize()) bzw. Cheerio (xml() oder html() zu verwenden?
|
|
14
|
+
*
|
|
15
|
+
* Die serialize-Methode von JSDOM wandelt alle Attribute in Kleinschrift um, sodass die Angular-Attribute nicht mehr
|
|
16
|
+
* funktionieren. Cheerio kann konfiguriert werden, sodass die Camel-Case-Namen erhalten bleiben,
|
|
17
|
+
* aber dort werden z.B. die leeren Ent-Tags ersetzt. Zusätzlich bricht Cheerio manchmal in komplexeren Templates an Stellen um,
|
|
18
|
+
* sodass das Template im Anschluss nicht mehr kompiliert.
|
|
19
|
+
*
|
|
20
|
+
* @example JSDOM
|
|
21
|
+
* Input: <lux-input luxLabel="Lorem ipsum"></lux-input>
|
|
22
|
+
* Output: <lux-input luxlabel="Lorem ipsum"></lux-input>
|
|
23
|
+
*
|
|
24
|
+
* @example Cheerio
|
|
25
|
+
* Input: <lux-input></lux-input>
|
|
26
|
+
* Output: <lux-input/>
|
|
27
|
+
*/
|
|
28
|
+
class HtmlManipulator {
|
|
29
|
+
constructor(htmlContent, selector, manipulatorFns) {
|
|
30
|
+
this.htmlContent = htmlContent;
|
|
31
|
+
this.selector = selector;
|
|
32
|
+
this.manipulatorFNs = manipulatorFns !== null && manipulatorFns !== void 0 ? manipulatorFns : [];
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Diese Methode ermittelt alle betroffenen HTML-Elemente anhand des übergebenen Selektors und versieht diese mit dem temporären
|
|
36
|
+
* {@link ATTR_NOT_PROCESSED}-Attribut.
|
|
37
|
+
*
|
|
38
|
+
* @example Selektor - lux-card
|
|
39
|
+
* <div>
|
|
40
|
+
* <lux-card luxTitle="Test">
|
|
41
|
+
* <lux-card-content>
|
|
42
|
+
* <p>Lorem ipsum</p>
|
|
43
|
+
* </lux-card-content>
|
|
44
|
+
* </lux-card>
|
|
45
|
+
* </div>
|
|
46
|
+
*
|
|
47
|
+
* <div>
|
|
48
|
+
* <lux-card data-lux-not-processed luxTitle="Test">
|
|
49
|
+
* <lux-card-content>
|
|
50
|
+
* <p>Lorem ipsum</p>
|
|
51
|
+
* </lux-card-content>
|
|
52
|
+
* </lux-card>
|
|
53
|
+
* </div>
|
|
54
|
+
*
|
|
55
|
+
* @param htmlContent Der HTML-Inhalt.
|
|
56
|
+
* @param selector Der CSS-Selektor.
|
|
57
|
+
*/
|
|
58
|
+
static prepare(htmlContent, selector) {
|
|
59
|
+
const dom = new jsdom_1.JSDOM(htmlContent, { includeNodeLocations: true });
|
|
60
|
+
const elements = dom.window.document.querySelectorAll(selector);
|
|
61
|
+
let counter = 0;
|
|
62
|
+
elements.forEach((el) => {
|
|
63
|
+
var _a, _b;
|
|
64
|
+
const location = dom.nodeLocation(el);
|
|
65
|
+
const startIndex = (_a = location === null || location === void 0 ? void 0 : location.startOffset) !== null && _a !== void 0 ? _a : -1;
|
|
66
|
+
const endIndex = (_b = location === null || location === void 0 ? void 0 : location.endOffset) !== null && _b !== void 0 ? _b : -1;
|
|
67
|
+
htmlContent = this.addUnprocessedAttr(htmlContent, el.tagName, startIndex, endIndex, counter++);
|
|
68
|
+
});
|
|
69
|
+
return htmlContent;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Diese Methode transformiert den übergebenen HTML-Inhalt mit den Manipulator-Funktionen.
|
|
73
|
+
*
|
|
74
|
+
* @param htmlContent Der HTML-Inhalt.
|
|
75
|
+
* @param selector Der CSS-Selektor.
|
|
76
|
+
* @param manipulatorFns Die Funktionen manipulieren den HTML-Inhalt.
|
|
77
|
+
*/
|
|
78
|
+
static transform(htmlContent, selector, ...manipulatorFns) {
|
|
79
|
+
return new HtmlManipulator(htmlContent, selector, manipulatorFns).do();
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Diese Methode liefert die Anzahl der mit dem Selektor gefundenen Elemente zurück.
|
|
83
|
+
*
|
|
84
|
+
* @param htmlContent Der HTML-Inhalt.
|
|
85
|
+
* @param selector Der CSS-Selektor.
|
|
86
|
+
*/
|
|
87
|
+
static count(htmlContent, selector) {
|
|
88
|
+
return new jsdom_1.JSDOM(htmlContent, { includeNodeLocations: false }).window.document.querySelectorAll(selector).length;
|
|
89
|
+
}
|
|
90
|
+
do() {
|
|
91
|
+
this.htmlContent = HtmlManipulator.prepare(this.htmlContent, this.selector);
|
|
92
|
+
// Hier wird der erste Treffer gesetzt. Zusätzlich wird im Ergebnis-HTML anstelle des Elements ein Platzhalter eingesetzt.
|
|
93
|
+
// Dieser Platzhalter wird im Nachgang wieder durch das manipulierte HTML des Elements ersetzt.
|
|
94
|
+
let hit = this.next();
|
|
95
|
+
while (hit) {
|
|
96
|
+
// Hier wird der HTML-Inhalt des Elements über die Manipulator-Funktionen angepasst.
|
|
97
|
+
this.manipulatorFNs.forEach((fn) => fn(hit));
|
|
98
|
+
// Jetzt muss das unprocessed-Attribut, das in der prepare-Methode gesetzt wurde, wieder entfernt werden.
|
|
99
|
+
const updatedHtml = (0, util_1.replaceFirst)(hit.elementContent, ' ' + exports.ATTR_NOT_PROCESSED, '');
|
|
100
|
+
// Zum Schluss muss der veränderte HTML-Inhalt des Elements wieder an die Stelle des Platzhalters im Ergebnis-HTML eingesetzt werden.
|
|
101
|
+
// Der Platzhalter im Ergebnis wird durch die next-Methode gesetzt.
|
|
102
|
+
this.htmlContent = this.htmlContent.replace(hit.placeholder, updatedHtml);
|
|
103
|
+
// Hier wird der nächste Treffer gesetzt.
|
|
104
|
+
// Details siehe den next()-Aufruf weiter oben.
|
|
105
|
+
hit = this.next();
|
|
106
|
+
}
|
|
107
|
+
return this.htmlContent;
|
|
108
|
+
}
|
|
109
|
+
next() {
|
|
110
|
+
const dom = new jsdom_1.JSDOM(this.htmlContent, { includeNodeLocations: true });
|
|
111
|
+
const element = dom.window.document.querySelector(`*[${exports.ATTR_NOT_PROCESSED}]`);
|
|
112
|
+
if (element) {
|
|
113
|
+
const location = dom.nodeLocation(element);
|
|
114
|
+
if (location && location.startOffset >= 0 && location.endOffset >= 0) {
|
|
115
|
+
const start = location.startOffset;
|
|
116
|
+
const end = location.endOffset;
|
|
117
|
+
// Der Hit auf denen die Manipulator-Funktionen arbeiten, bekommen nur den HTML-Inhalt des Elements und
|
|
118
|
+
// nicht den gesamten Inhalt.
|
|
119
|
+
const hitContent = this.htmlContent.slice(start, end);
|
|
120
|
+
// Für das HTML des Elements wird der Platzhalter eingesetzt.
|
|
121
|
+
this.htmlContent = this.htmlContent.slice(0, start) + exports.PLACEHOLDER + this.htmlContent.slice(end, this.htmlContent.length);
|
|
122
|
+
return new hit_1.Hit(exports.PLACEHOLDER, this.selector, hitContent, element, location.startLine);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
return null;
|
|
126
|
+
}
|
|
127
|
+
static addUnprocessedAttr(htmlContent, tagName, startIndex, endIndex, counter) {
|
|
128
|
+
if (startIndex >= 0 && endIndex >= 0) {
|
|
129
|
+
const position = startIndex + (tagName.length + 1) + counter * (exports.ATTR_NOT_PROCESSED.length + 1); /* +1 für die Leerzeichen */
|
|
130
|
+
htmlContent = [htmlContent.slice(0, position), ' ' + exports.ATTR_NOT_PROCESSED, htmlContent.slice(position)].join('');
|
|
131
|
+
}
|
|
132
|
+
return htmlContent;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
exports.HtmlManipulator = HtmlManipulator;
|
|
136
|
+
//# sourceMappingURL=html-manipulator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"html-manipulator.js","sourceRoot":"","sources":["html-manipulator.ts"],"names":[],"mappings":"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"}
|