@ecodev/natural-editor 60.0.1 → 60.1.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.
|
@@ -37,7 +37,7 @@ import * as i9 from "@angular/material/divider";
|
|
|
37
37
|
* Usage :
|
|
38
38
|
*
|
|
39
39
|
* ```html
|
|
40
|
-
* <natural-editor [(ngModel)]="htmlString"
|
|
40
|
+
* <natural-editor [(ngModel)]="htmlString" />
|
|
41
41
|
* ```
|
|
42
42
|
*/
|
|
43
43
|
// @dynamic
|
|
@@ -227,4 +227,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImpor
|
|
|
227
227
|
}], save: [{
|
|
228
228
|
type: Output
|
|
229
229
|
}] } });
|
|
230
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwtZWRpdG9yL3NyYy9saWIvZWRpdG9yL2VkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXR1cmFsLWVkaXRvci9zcmMvbGliL2VkaXRvci9lZGl0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBR0wsUUFBUSxFQUNSLE1BQU0sRUFDTixJQUFJLEVBQ0osU0FBUyxHQUNaLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEVBQUMsV0FBVyxFQUFFLE1BQU0sRUFBYyxNQUFNLG1CQUFtQixDQUFDO0FBQ25FLE9BQU8sRUFBQyxTQUFTLEVBQUUsYUFBYSxFQUFTLE1BQU0sbUJBQW1CLENBQUM7QUFDbkUsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBRXpDLE9BQU8sRUFBQyxZQUFZLEVBQUUsWUFBWSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDOUQsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBQzFDLE9BQU8sRUFBQyxXQUFXLEVBQWdCLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUQsT0FBTyxFQUFDLGNBQWMsRUFBRSxXQUFXLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUNuRSxPQUFPLEVBQUMsY0FBYyxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDNUMsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ2hELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUNsRCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDaEQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3BELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM1QyxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFDdEUsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQzNELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7Ozs7Ozs7QUFFekQ7Ozs7Ozs7O0dBUUc7QUFDSCxXQUFXO0FBaUJYLE1BQU0sT0FBTyxzQkFBc0I7SUFxQy9CLFlBQ3dDLFNBQW9CLEVBQ3JCLFFBQWtCLEVBQ3BDLE1BQWlCLEVBQ2pCLFdBQXdCO1FBSEwsY0FBUyxHQUFULFNBQVMsQ0FBVztRQUNyQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ3BDLFdBQU0sR0FBTixNQUFNLENBQVc7UUFDakIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUF4Q3JDLFNBQUksR0FBc0IsSUFBSSxDQUFDO1FBSWIsa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBRXJFOzs7OztXQUtHO1FBQ2Esa0JBQWEsR0FBeUIsSUFBSSxDQUFDO1FBRW5ELFdBQU0sR0FBVyxXQUFXLENBQUM7UUFRckM7O1dBRUc7UUFDSyxZQUFPLEdBQUcsRUFBRSxDQUFDO1FBRWQsU0FBSSxHQUFxQixJQUFJLENBQUM7UUFFckM7O1dBRUc7UUFDdUIsU0FBSSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFFbkQsYUFBUSxHQUFHLEtBQUssQ0FBQztRQVFwQixJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBQ3hDLENBQUM7SUFDTCxDQUFDO0lBRU0sUUFBUTtRQUNYLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7UUFDaEUsSUFBSSxDQUFDLElBQUksR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDckQsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDekQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRWpDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUU7WUFDbEQsS0FBSyxFQUFFLEtBQUs7WUFDWixRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUTtZQUM5QixtQkFBbUIsRUFBRSxDQUFDLFdBQXdCLEVBQUUsRUFBRTtnQkFDOUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDYixPQUFPO2dCQUNYLENBQUM7Z0JBRUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUNwRCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFFaEMsaUNBQWlDO2dCQUNqQyxNQUFNLEdBQUcsR0FBRyxVQUFVLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBVSxDQUFDLENBQUM7Z0JBQ3JFLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUM1QyxFQUFFLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUVwQixNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDO2dCQUNoQyxJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssVUFBVSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDL0MsT0FBTztnQkFDWCxDQUFDO2dCQUVELElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQztnQkFFNUIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQ2hCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNoQyxDQUFDO2dCQUNELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMxQyxDQUFDO1NBQ0osQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFTSxVQUFVLENBQUMsR0FBdUI7UUFDckMsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLElBQUksR0FBRyxLQUFLLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNsRCxJQUFJLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztRQUN2QixDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ3JCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNqQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLFdBQVc7UUFDZixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNsRCxRQUFRLENBQUMsU0FBUyxHQUFHLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQztRQUN2RCxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0RBQWdELENBQUMsQ0FBQztRQUN0RSxDQUFDO1FBRUQsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDakQsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFOUMsT0FBTyxXQUFXLENBQUMsTUFBTSxDQUFDO1lBQ3RCLEdBQUcsRUFBRSxHQUFHO1lBQ1IsT0FBTyxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUU7U0FDaEMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLGFBQWE7UUFDakIsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTNFLE1BQU0sT0FBTyxHQUFHO1lBQ1osZUFBZSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDNUIsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3ZDLE1BQU0sQ0FBQyxVQUFVLENBQUM7WUFDbEIsVUFBVSxFQUFFO1lBQ1osU0FBUyxFQUFFO1lBQ1gsT0FBTyxFQUFFO1lBQ1QsSUFBSSxNQUFNLENBQUM7Z0JBQ1AsS0FBSyxFQUFFO29CQUNILFVBQVUsRUFBRSxFQUFDLEtBQUssRUFBRSxpQ0FBaUMsRUFBQztpQkFDekQ7YUFDSixDQUFDO1lBQ0YsSUFBSSxNQUFNLENBQUM7Z0JBQ1AsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUk7YUFDbkIsQ0FBQztTQUNMLENBQUM7UUFFRixJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssY0FBYyxFQUFFLENBQUM7WUFDakMsT0FBTyxDQUFDLElBQUksQ0FDUixJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFDdkIsWUFBWSxFQUFFLEVBQ2QsTUFBTSxDQUFDO2dCQUNILEdBQUcsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDO2dCQUNwQixXQUFXLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2hDLENBQUMsQ0FDTCxDQUFDO1FBQ04sQ0FBQztRQUVELE9BQU8sT0FBTyxDQUFDO0lBQ25CLENBQUM7SUFFRDs7T0FFRztJQUNJLE1BQU07UUFDVCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMzQixPQUFPO1FBQ1gsQ0FBQztRQUVELEtBQUssTUFBTSxJQUFJLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUMxQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QyxDQUFDO0lBQ0wsQ0FBQztJQUVNLGdCQUFnQixDQUFDLEVBQU87UUFDM0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVNLGlCQUFpQjtRQUNwQixPQUFPO0lBQ1gsQ0FBQztJQUVNLGdCQUFnQixDQUFDLFVBQW1CO1FBQ3ZDLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDO0lBQy9CLENBQUM7SUFFTSxXQUFXO1FBQ2QsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDWixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLENBQUM7SUFDTCxDQUFDO0lBRU0sR0FBRyxDQUFDLEtBQVksRUFBRSxHQUFRO1FBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzNCLE9BQU87UUFDWCxDQUFDO1FBRUQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDdkMsT0FBTztRQUNYLENBQUM7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3JFLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVNLE1BQU0sQ0FBQyxJQUFVO1FBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3BDLE9BQU87UUFDWCxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN2RCxJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3hGLENBQUM7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3RCLENBQUM7OEdBM01RLHNCQUFzQix1RUF1Q25CLFFBQVE7a0dBdkNYLHNCQUFzQixvS0FacEIsQ0FBQyxXQUFXLENBQUMsdUdBZUksVUFBVSwyQ0NuRTFDLHNsakJBdVpBLDhxR0RoV1EsZUFBZSx3VUFDZixnQkFBZ0IsNFRBQ2hCLGFBQWEsbUxBQ2IscUJBQXFCLHdsQkFDckIsYUFBYSw2dkJBQ2IsZ0JBQWdCLG1JQUNoQix3QkFBd0I7OzJGQUduQixzQkFBc0I7a0JBaEJsQyxTQUFTOytCQUNJLGdCQUFnQixhQUdmLENBQUMsV0FBVyxDQUFDLGNBQ1osSUFBSSxXQUNQO3dCQUNMLGVBQWU7d0JBQ2YsZ0JBQWdCO3dCQUNoQixhQUFhO3dCQUNiLHFCQUFxQjt3QkFDckIsYUFBYTt3QkFDYixnQkFBZ0I7d0JBQ2hCLHdCQUF3QjtxQkFDM0I7OzBCQXdDSSxRQUFROzswQkFBSSxJQUFJOzswQkFDaEIsTUFBTTsyQkFBQyxRQUFROzJGQXBDMkMsTUFBTTtzQkFBcEUsU0FBUzt1QkFBQyxRQUFRLEVBQUUsRUFBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUM7Z0JBRTNCLGFBQWE7c0JBQXRDLE1BQU07Z0JBUVMsYUFBYTtzQkFBNUIsS0FBSztnQkFvQm9CLElBQUk7c0JBQTdCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBPdXRwdXQsXG4gICAgU2VsZixcbiAgICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtDb250cm9sVmFsdWVBY2Nlc3NvciwgTmdDb250cm9sfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge0VkaXRvclZpZXd9IGZyb20gJ3Byb3NlbWlycm9yLXZpZXcnO1xuaW1wb3J0IHtFZGl0b3JTdGF0ZSwgUGx1Z2luLCBUcmFuc2FjdGlvbn0gZnJvbSAncHJvc2VtaXJyb3Itc3RhdGUnO1xuaW1wb3J0IHtET01QYXJzZXIsIERPTVNlcmlhbGl6ZXIsIFNjaGVtYX0gZnJvbSAncHJvc2VtaXJyb3ItbW9kZWwnO1xuaW1wb3J0IHtET0NVTUVOVH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7TWF0RGlhbG9nfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHtnb1RvTmV4dENlbGwsIHRhYmxlRWRpdGluZ30gZnJvbSAncHJvc2VtaXJyb3ItdGFibGVzJztcbmltcG9ydCB7a2V5bWFwfSBmcm9tICdwcm9zZW1pcnJvci1rZXltYXAnO1xuaW1wb3J0IHtJbWFnZVBsdWdpbiwgSW1hZ2VVcGxvYWRlcn0gZnJvbSAnLi4vdXRpbHMvaW1hZ2UnO1xuaW1wb3J0IHthZHZhbmNlZFNjaGVtYSwgYmFzaWNTY2hlbWF9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS9zY2hlbWEnO1xuaW1wb3J0IHtidWlsZE1lbnVJdGVtcywgS2V5LCBNZW51SXRlbXN9IGZyb20gJy4uL3V0aWxzL21lbnUnO1xuaW1wb3J0IHtoaXN0b3J5fSBmcm9tICdwcm9zZW1pcnJvci1oaXN0b3J5JztcbmltcG9ydCB7YmFzZUtleW1hcH0gZnJvbSAncHJvc2VtaXJyb3ItY29tbWFuZHMnO1xuaW1wb3J0IHtkcm9wQ3Vyc29yfSBmcm9tICdwcm9zZW1pcnJvci1kcm9wY3Vyc29yJztcbmltcG9ydCB7Z2FwQ3Vyc29yfSBmcm9tICdwcm9zZW1pcnJvci1nYXBjdXJzb3InO1xuaW1wb3J0IHtidWlsZElucHV0UnVsZXN9IGZyb20gJy4uL3V0aWxzL2lucHV0cnVsZXMnO1xuaW1wb3J0IHtidWlsZEtleW1hcH0gZnJvbSAnLi4vdXRpbHMva2V5bWFwJztcbmltcG9ydCB7TmF0dXJhbEZpbGVEcm9wRGlyZWN0aXZlfSBmcm9tICdAZWNvZGV2L25hdHVyYWwnO1xuaW1wb3J0IHtNYXREaXZpZGVyTW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaXZpZGVyJztcbmltcG9ydCB7TWF0TWVudU1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudSc7XG5pbXBvcnQge01hdEJ1dHRvblRvZ2dsZU1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uLXRvZ2dsZSc7XG5pbXBvcnQge01hdEljb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHtNYXRUb29sdGlwTW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcbmltcG9ydCB7TWF0QnV0dG9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuXG4vKipcbiAqIFByb3NlbWlycm9yIGNvbXBvbmVudFxuICpcbiAqIFVzYWdlIDpcbiAqXG4gKiBgYGBodG1sXG4gKiA8bmF0dXJhbC1lZGl0b3IgWyhuZ01vZGVsKV09XCJodG1sU3RyaW5nXCI+PC9uYXR1cmFsLWVkaXRvcj5cbiAqIGBgYFxuICovXG4vLyBAZHluYW1pY1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduYXR1cmFsLWVkaXRvcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2VkaXRvci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmw6ICcuL2VkaXRvci5jb21wb25lbnQuc2NzcycsXG4gICAgcHJvdmlkZXJzOiBbSW1hZ2VQbHVnaW5dLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBNYXRCdXR0b25Nb2R1bGUsXG4gICAgICAgIE1hdFRvb2x0aXBNb2R1bGUsXG4gICAgICAgIE1hdEljb25Nb2R1bGUsXG4gICAgICAgIE1hdEJ1dHRvblRvZ2dsZU1vZHVsZSxcbiAgICAgICAgTWF0TWVudU1vZHVsZSxcbiAgICAgICAgTWF0RGl2aWRlck1vZHVsZSxcbiAgICAgICAgTmF0dXJhbEZpbGVEcm9wRGlyZWN0aXZlLFxuICAgIF0sXG59KVxuZXhwb3J0IGNsYXNzIE5hdHVyYWxFZGl0b3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICAgIHByaXZhdGUgdmlldzogRWRpdG9yVmlldyB8IG51bGwgPSBudWxsO1xuXG4gICAgQFZpZXdDaGlsZCgnZWRpdG9yJywge3JlYWQ6IEVsZW1lbnRSZWYsIHN0YXRpYzogdHJ1ZX0pIHByaXZhdGUgZWRpdG9yITogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cbiAgICBAT3V0cHV0KCkgcHVibGljIHJlYWRvbmx5IGNvbnRlbnRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICAgIC8qKlxuICAgICAqIENhbGxiYWNrIHRvIHVwbG9hZCBhbiBpbWFnZS5cbiAgICAgKlxuICAgICAqIElmIGdpdmVuIGl0IHdpbGwgZW5hYmxlIGFkdmFuY2VkIHNjaGVtYSwgaW5jbHVkaW5nIGltYWdlIGFuZCB0YWJsZXMuXG4gICAgICogSXQgbXVzdCBiZSBnaXZlbiBvbiBpbml0aWFsaXphdGlvbiBhbmQgY2Fubm90IGJlIGNoYW5nZWQgbGF0ZXIgb24uXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIGltYWdlVXBsb2FkZXI6IEltYWdlVXBsb2FkZXIgfCBudWxsID0gbnVsbDtcblxuICAgIHByaXZhdGUgc2NoZW1hOiBTY2hlbWEgPSBiYXNpY1NjaGVtYTtcblxuICAgIC8qKlxuICAgICAqIEludGVyZmFjZSB3aXRoIENvbnRyb2xWYWx1ZUFjY2Vzc29yXG4gICAgICogTm90aWZpZXMgcGFyZW50IG1vZGVsIC8gZm9ybSBjb250cm9sbGVyXG4gICAgICovXG4gICAgcHJpdmF0ZSBvbkNoYW5nZT86ICh2YWx1ZTogc3RyaW5nIHwgbnVsbCkgPT4gdm9pZDtcblxuICAgIC8qKlxuICAgICAqIEhUTUwgc3RyaW5nXG4gICAgICovXG4gICAgcHJpdmF0ZSBjb250ZW50ID0gJyc7XG5cbiAgICBwdWJsaWMgbWVudTogTWVudUl0ZW1zIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBJZiBzdWJzY3JpYmVkIHRvLCB0aGVuIHRoZSBzYXZlIGJ1dHRvbiB3aWxsIGJlIHNob3duIGFuZCBjbGljayBldmVudHMgZm9yd2FyZGVkXG4gICAgICovXG4gICAgQE91dHB1dCgpIHB1YmxpYyByZWFkb25seSBzYXZlID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgcHVibGljIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIEBPcHRpb25hbCgpIEBTZWxmKCkgcHVibGljIHJlYWRvbmx5IG5nQ29udHJvbDogTmdDb250cm9sLFxuICAgICAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50OiBEb2N1bWVudCxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBkaWFsb2c6IE1hdERpYWxvZyxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBpbWFnZVBsdWdpbjogSW1hZ2VQbHVnaW4sXG4gICAgKSB7XG4gICAgICAgIGlmICh0aGlzLm5nQ29udHJvbCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5uZ0NvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2NoZW1hID0gdGhpcy5pbWFnZVVwbG9hZGVyID8gYWR2YW5jZWRTY2hlbWEgOiBiYXNpY1NjaGVtYTtcbiAgICAgICAgdGhpcy5tZW51ID0gYnVpbGRNZW51SXRlbXModGhpcy5zY2hlbWEsIHRoaXMuZGlhbG9nKTtcbiAgICAgICAgY29uc3Qgc2VyaWFsaXplciA9IERPTVNlcmlhbGl6ZXIuZnJvbVNjaGVtYSh0aGlzLnNjaGVtYSk7XG4gICAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5jcmVhdGVTdGF0ZSgpO1xuXG4gICAgICAgIHRoaXMudmlldyA9IG5ldyBFZGl0b3JWaWV3KHRoaXMuZWRpdG9yLm5hdGl2ZUVsZW1lbnQsIHtcbiAgICAgICAgICAgIHN0YXRlOiBzdGF0ZSxcbiAgICAgICAgICAgIGVkaXRhYmxlOiAoKSA9PiAhdGhpcy5kaXNhYmxlZCxcbiAgICAgICAgICAgIGRpc3BhdGNoVHJhbnNhY3Rpb246ICh0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb24pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMudmlldykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgbmV3U3RhdGUgPSB0aGlzLnZpZXcuc3RhdGUuYXBwbHkodHJhbnNhY3Rpb24pO1xuICAgICAgICAgICAgICAgIHRoaXMudmlldy51cGRhdGVTdGF0ZShuZXdTdGF0ZSk7XG5cbiAgICAgICAgICAgICAgICAvLyBUcmFuc2Zvcm0gZG9jIGludG8gSFRNTCBzdHJpbmdcbiAgICAgICAgICAgICAgICBjb25zdCBkb20gPSBzZXJpYWxpemVyLnNlcmlhbGl6ZUZyYWdtZW50KHRoaXMudmlldy5zdGF0ZS5kb2MgYXMgYW55KTtcbiAgICAgICAgICAgICAgICBjb25zdCBlbCA9IHRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnXycpO1xuICAgICAgICAgICAgICAgIGVsLmFwcGVuZENoaWxkKGRvbSk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBuZXdDb250ZW50ID0gZWwuaW5uZXJIVE1MO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRlbnQgPT09IG5ld0NvbnRlbnQgfHwgdGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5jb250ZW50ID0gZWwuaW5uZXJIVE1MO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMub25DaGFuZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLmNvbnRlbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRlbnRDaGFuZ2UuZW1pdCh0aGlzLmNvbnRlbnQpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudXBkYXRlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHdyaXRlVmFsdWUodmFsOiBzdHJpbmcgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnICYmIHZhbCAhPT0gdGhpcy5jb250ZW50KSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRlbnQgPSB2YWw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy52aWV3ICE9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuY3JlYXRlU3RhdGUoKTtcbiAgICAgICAgICAgIHRoaXMudmlldy51cGRhdGVTdGF0ZShzdGF0ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZVN0YXRlKCk6IEVkaXRvclN0YXRlIHtcbiAgICAgICAgY29uc3QgdGVtcGxhdGUgPSB0aGlzLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ18nKTtcbiAgICAgICAgdGVtcGxhdGUuaW5uZXJIVE1MID0gJzxkaXY+JyArIHRoaXMuY29udGVudCArICc8L2Rpdj4nO1xuICAgICAgICBpZiAoIXRlbXBsYXRlLmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignY2hpbGQgb2YgdGVtcGxhdGUgZWxlbWVudCBjb3VsZCBub3QgYmUgY3JlYXRlZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFyc2VyID0gRE9NUGFyc2VyLmZyb21TY2hlbWEodGhpcy5zY2hlbWEpO1xuICAgICAgICBjb25zdCBkb2MgPSBwYXJzZXIucGFyc2UodGVtcGxhdGUuZmlyc3RDaGlsZCk7XG5cbiAgICAgICAgcmV0dXJuIEVkaXRvclN0YXRlLmNyZWF0ZSh7XG4gICAgICAgICAgICBkb2M6IGRvYyxcbiAgICAgICAgICAgIHBsdWdpbnM6IHRoaXMuY3JlYXRlUGx1Z2lucygpLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZVBsdWdpbnMoKTogUGx1Z2luW10ge1xuICAgICAgICBjb25zdCBpc01hYyA9ICEhdGhpcy5kb2N1bWVudC5kZWZhdWx0Vmlldz8ubmF2aWdhdG9yLnBsYXRmb3JtLm1hdGNoKC9NYWMvKTtcblxuICAgICAgICBjb25zdCBwbHVnaW5zID0gW1xuICAgICAgICAgICAgYnVpbGRJbnB1dFJ1bGVzKHRoaXMuc2NoZW1hKSxcbiAgICAgICAgICAgIGtleW1hcChidWlsZEtleW1hcCh0aGlzLnNjaGVtYSwgaXNNYWMpKSxcbiAgICAgICAgICAgIGtleW1hcChiYXNlS2V5bWFwKSxcbiAgICAgICAgICAgIGRyb3BDdXJzb3IoKSxcbiAgICAgICAgICAgIGdhcEN1cnNvcigpLFxuICAgICAgICAgICAgaGlzdG9yeSgpLFxuICAgICAgICAgICAgbmV3IFBsdWdpbih7XG4gICAgICAgICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlczoge2NsYXNzOiAnUHJvc2VNaXJyb3ItZXhhbXBsZS1zZXR1cC1zdHlsZSd9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBQbHVnaW4oe1xuICAgICAgICAgICAgICAgIHZpZXc6ICgpID0+IHRoaXMsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgXTtcblxuICAgICAgICBpZiAodGhpcy5zY2hlbWEgPT09IGFkdmFuY2VkU2NoZW1hKSB7XG4gICAgICAgICAgICBwbHVnaW5zLnB1c2goXG4gICAgICAgICAgICAgICAgdGhpcy5pbWFnZVBsdWdpbi5wbHVnaW4sXG4gICAgICAgICAgICAgICAgdGFibGVFZGl0aW5nKCksXG4gICAgICAgICAgICAgICAga2V5bWFwKHtcbiAgICAgICAgICAgICAgICAgICAgVGFiOiBnb1RvTmV4dENlbGwoMSksXG4gICAgICAgICAgICAgICAgICAgICdTaGlmdC1UYWInOiBnb1RvTmV4dENlbGwoLTEpLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwbHVnaW5zO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhbGxlZCBieSBQcm9zZW1pcnJvciB3aGVuZXZlciB0aGUgZWRpdG9yIHN0YXRlIGNoYW5nZXMuIFNvIHdlIHVwZGF0ZSBvdXIgbWVudSBzdGF0ZXMuXG4gICAgICovXG4gICAgcHVibGljIHVwZGF0ZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLnZpZXcgfHwgIXRoaXMubWVudSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIE9iamVjdC52YWx1ZXModGhpcy5tZW51KSkge1xuICAgICAgICAgICAgaXRlbS51cGRhdGUodGhpcy52aWV3LCB0aGlzLnZpZXcuc3RhdGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gICAgfVxuXG4gICAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKCk6IHZvaWQge1xuICAgICAgICAvLyBub29wXG4gICAgfVxuXG4gICAgcHVibGljIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnZpZXcpIHtcbiAgICAgICAgICAgIHRoaXMudmlldy5kZXN0cm95KCk7XG4gICAgICAgICAgICB0aGlzLnZpZXcgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHJ1bihldmVudDogRXZlbnQsIGtleTogS2V5KTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy52aWV3IHx8ICF0aGlzLm1lbnUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLm1lbnVba2V5XTtcbiAgICAgICAgaWYgKCFpdGVtIHx8IGl0ZW0uZGlzYWJsZWQgfHwgIWl0ZW0uc2hvdykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaXRlbS5zcGVjLnJ1bih0aGlzLnZpZXcuc3RhdGUsIHRoaXMudmlldy5kaXNwYXRjaCwgdGhpcy52aWV3LCBldmVudCk7XG4gICAgICAgIHRoaXMudmlldy5mb2N1cygpO1xuICAgIH1cblxuICAgIHB1YmxpYyB1cGxvYWQoZmlsZTogRmlsZSk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMudmlldyB8fCAhdGhpcy5pbWFnZVVwbG9hZGVyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy52aWV3LnN0YXRlLnNlbGVjdGlvbi4kZnJvbS5wYXJlbnQuaW5saW5lQ29udGVudCkge1xuICAgICAgICAgICAgdGhpcy5pbWFnZVBsdWdpbi5zdGFydEltYWdlVXBsb2FkKHRoaXMudmlldywgZmlsZSwgdGhpcy5pbWFnZVVwbG9hZGVyLCB0aGlzLnNjaGVtYSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnZpZXcuZm9jdXMoKTtcbiAgICB9XG59XG4iLCJAaWYgKG1lbnUgJiYgIXRoaXMuZGlzYWJsZWQpIHtcbiAgICA8ZGl2IGNsYXNzPVwibWVudS1jb250YWluZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1lbnVcIj5cbiAgICAgICAgICAgIEBpZiAoc2F2ZS5vYnNlcnZlZCkge1xuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJzYXZlLmVtaXQoKVwiIGkxOG4tbWF0VG9vbHRpcCBtYXRUb29sdGlwPVwiRW5yZWdpc3RyZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGZvbnRJY29uPVwic2F2ZVwiIC8+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAgaGlkZU11bHRpcGxlU2VsZWN0aW9uSW5kaWNhdG9yIG11bHRpcGxlPlxuICAgICAgICAgICAgICAgIEBpZiAobWVudS50b2dnbGVTdHJvbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwibWVudS50b2dnbGVTdHJvbmcuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwibWVudS50b2dnbGVTdHJvbmcuYWN0aXZlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJydW4oJGV2ZW50LCAndG9nZ2xlU3Ryb25nJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgaTE4bi1tYXRUb29sdGlwXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiR3Jhc1wiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBmb250SWNvbj1cImZvcm1hdF9ib2xkXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZT5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgQGlmIChtZW51LnRvZ2dsZUVtKSB7XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZVxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm1lbnUudG9nZ2xlRW0uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwibWVudS50b2dnbGVFbS5hY3RpdmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJ1bigkZXZlbnQsICd0b2dnbGVFbScpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGkxOG4tbWF0VG9vbHRpcFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkl0YWxpcXVlXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGZvbnRJY29uPVwiZm9ybWF0X2l0YWxpY1wiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWJ1dHRvbi10b2dnbGU+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBpZiAobWVudS50b2dnbGVDb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZVxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm1lbnUudG9nZ2xlQ29kZS5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJtZW51LnRvZ2dsZUNvZGUuYWN0aXZlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJydW4oJGV2ZW50LCAndG9nZ2xlQ29kZScpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGkxOG4tbWF0VG9vbHRpcFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkNvZGVcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gZm9udEljb249XCJjb2RlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZT5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgQGlmIChtZW51LnRvZ2dsZUxpbmspIHtcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwibWVudS50b2dnbGVMaW5rLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cIm1lbnUudG9nZ2xlTGluay5hY3RpdmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJ1bigkZXZlbnQsICd0b2dnbGVMaW5rJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgaTE4bi1tYXRUb29sdGlwXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiSW5zw6lyZXIgdW4gbGllbi4uLlwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBmb250SWNvbj1cImluc2VydF9saW5rXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZT5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L21hdC1idXR0b24tdG9nZ2xlLWdyb3VwPlxuICAgICAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIFttYXRNZW51VHJpZ2dlckZvcl09XCJibG9ja01lbnVcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBpMThuPlR5cGU8L3NwYW4+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIGZvbnRJY29uPVwiYXJyb3dfZHJvcF9kb3duXCIgLz5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPG1hdC1tZW51ICNibG9ja01lbnU9XCJtYXRNZW51XCI+XG4gICAgICAgICAgICAgICAgQGlmIChtZW51Lm1ha2VQYXJhZ3JhcGgpIHtcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0LW1lbnUtaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm1lbnUubWFrZVBhcmFncmFwaC5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicnVuKCRldmVudCwgJ21ha2VQYXJhZ3JhcGgnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBpMThuXG4gICAgICAgICAgICAgICAgICAgICAgICA+UGFyYWdyYXBoZVxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgQGlmIChtZW51Lm1ha2VDb2RlQmxvY2spIHtcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0LW1lbnUtaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm1lbnUubWFrZUNvZGVCbG9jay5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicnVuKCRldmVudCwgJ21ha2VDb2RlQmxvY2snKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBpMThuXG4gICAgICAgICAgICAgICAgICAgICAgICA+Q29kZVxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgQGlmIChtZW51Lm1ha2VIZWFkMSkge1xuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gW2Rpc2FibGVkXT1cIm1lbnUubWFrZUhlYWQxLmRpc2FibGVkXCIgKGNsaWNrKT1cInJ1bigkZXZlbnQsICdtYWtlSGVhZDEnKVwiIGkxOG5cbiAgICAgICAgICAgICAgICAgICAgICAgID5UaXRyZSAxXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAaWYgKG1lbnUubWFrZUhlYWQyKSB7XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSBbZGlzYWJsZWRdPVwibWVudS5tYWtlSGVhZDIuZGlzYWJsZWRcIiAoY2xpY2spPVwicnVuKCRldmVudCwgJ21ha2VIZWFkMicpXCIgaTE4blxuICAgICAgICAgICAgICAgICAgICAgICAgPlRpdHJlIDJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBpZiAobWVudS5tYWtlSGVhZDMpIHtcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIFtkaXNhYmxlZF09XCJtZW51Lm1ha2VIZWFkMy5kaXNhYmxlZFwiIChjbGljayk9XCJydW4oJGV2ZW50LCAnbWFrZUhlYWQzJylcIiBpMThuXG4gICAgICAgICAgICAgICAgICAgICAgICA+VGl0cmUgM1xuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgQGlmIChtZW51Lm1ha2VIZWFkNCkge1xuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gW2Rpc2FibGVkXT1cIm1lbnUubWFrZUhlYWQ0LmRpc2FibGVkXCIgKGNsaWNrKT1cInJ1bigkZXZlbnQsICdtYWtlSGVhZDQnKVwiIGkxOG5cbiAgICAgICAgICAgICAgICAgICAgICAgID5UaXRyZSA0XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAaWYgKG1lbnUubWFrZUhlYWQ1KSB7XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSBbZGlzYWJsZWRdPVwibWVudS5tYWtlSGVhZDUuZGlzYWJsZWRcIiAoY2xpY2spPVwicnVuKCRldmVudCwgJ21ha2VIZWFkNScpXCIgaTE4blxuICAgICAgICAgICAgICAgICAgICAgICAgPlRpdHJlIDVcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBpZiAobWVudS5tYWtlSGVhZDYpIHtcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIFtkaXNhYmxlZF09XCJtZW51Lm1ha2VIZWFkNi5kaXNhYmxlZFwiIChjbGljayk9XCJydW4oJGV2ZW50LCAnbWFrZUhlYWQ2JylcIiBpMThuXG4gICAgICAgICAgICAgICAgICAgICAgICA+VGl0cmUgNlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPG1hdC1kaXZpZGVyIC8+XG4gICAgICAgICAgICAgICAgQGlmIChtZW51LmJsb2NrQ2xhc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIFtkaXNhYmxlZF09XCJtZW51LmJsb2NrQ2xhc3MuZGlzYWJsZWRcIiAoY2xpY2spPVwicnVuKCRldmVudCwgJ2Jsb2NrQ2xhc3MnKVwiIGkxOG5cbiAgICAgICAgICAgICAgICAgICAgICAgID5DbGFzc2UuLi5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBpZiAobWVudS5ibG9ja0lkKSB7XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gaTE4biBtYXQtbWVudS1pdGVtIFtkaXNhYmxlZF09XCJtZW51LmJsb2NrSWQuZGlzYWJsZWRcIiAoY2xpY2spPVwicnVuKCRldmVudCwgJ2Jsb2NrSWQnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+SUQuLi5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9tYXQtbWVudT5cbiAgICAgICAgICAgIEBpZiAobWVudS5hZGRDb2x1bW5CZWZvcmUpIHtcbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cInRhYmxlTWVudVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBpMThuPlRhYmxlYXU8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBmb250SWNvbj1cImFycm93X2Ryb3BfZG93blwiIC8+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA8bWF0LW1lbnUgI3RhYmxlTWVudT1cIm1hdE1lbnVcIj5cbiAgICAgICAgICAgICAgICBAaWYgKG1lbnUuaW5zZXJ0VGFibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0LW1lbnUtaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm1lbnUuaW5zZXJ0VGFibGUuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJ1bigkZXZlbnQsICdpbnNlcnRUYWJsZScpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGkxOG5cbiAgICAgICAgICAgICAgICAgICAgICAgID5JbnPDqXJlciB1biB0YWJsZWF1XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAaWYgKG1lbnUuZGVsZXRlVGFibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0LW1lbnUtaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm1lbnUuZGVsZXRlVGFibGUuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJ1bigkZXZlbnQsICdkZWxldGVUYWJsZScpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGkxOG5cbiAgICAgICAgICAgICAgICAgICAgICAgID5TdXBwcmltZXIgbGUgdGFibGVhdVxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgQGlmIChtZW51Lm1lcmdlQ2VsbHMpIHtcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIFtkaXNhYmxlZF09XCJtZW51Lm1lcmdlQ2VsbHMuZGlzYWJsZWRcIiAoY2xpY2spPVwicnVuKCRldmVudCwgJ21lcmdlQ2VsbHMnKVwiIGkxOG5cbiAgICAgICAgICAgICAgICAgICAgICAgID5GdXNpb25uZXIgbGVzIGNlbGx1bGVzXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAaWYgKG1lbnUuc3BsaXRDZWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSBbZGlzYWJsZWRdPVwibWVudS5zcGxpdENlbGwuZGlzYWJsZWRcIiAoY2xpY2spPVwicnVuKCRldmVudCwgJ3NwbGl0Q2VsbCcpXCIgaTE4blxuICAgICAgICAgICAgICAgICAgICAgICAgPlNjaW5kZXIgbGVzIGNlbGx1bGVzXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAaWYgKG1lbnUuY2VsbEJhY2tncm91bmRDb2xvcikge1xuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXQtbWVudS1pdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwibWVudS5jZWxsQmFja2dyb3VuZENvbG9yLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJydW4oJGV2ZW50LCAnY2VsbEJhY2tncm91bmRDb2xvcicpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGkxOG5cbiAgICAgICAgICAgICAgICAgICAgICAgID5Db3VsZXVyIGRlIGZvbmQuLi5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBpZiAobWVudS50YWJsZUNsYXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSBbZGlzYWJsZWRdPVwibWVudS50YWJsZUNsYXNzLmRpc2FibGVkXCIgKGNsaWNrKT1cInJ1bigkZXZlbnQsICd0YWJsZUNsYXNzJylcIiBpMThuXG4gICAgICAgICAgICAgICAgICAgICAgICA+Q2xhc3NlLi4uXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAaWYgKG1lbnUudGFibGVJZCkge1xuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGkxOG4gbWF0LW1lbnUtaXRlbSBbZGlzYWJsZWRdPVwibWVudS50YWJsZUlkLmRpc2FibGVkXCIgKGNsaWNrKT1cInJ1bigkZXZlbnQsICd0YWJsZUlkJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPklELi4uXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8bWF0LWRpdmlkZXIgLz5cbiAgICAgICAgICAgICAgICBAaWYgKG1lbnUuYWRkQ29sdW1uQmVmb3JlKSB7XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdC1tZW51LWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJtZW51LmFkZENvbHVtbkJlZm9yZS5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicnVuKCRldmVudCwgJ2FkZENvbHVtbkJlZm9yZScpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGkxOG5cbiAgICAgICAgICAgICAgICAgICAgICAgID5JbnPDqXJlciB1bmUgY29sb25uZSBhdmFudFxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgQGlmIChtZW51LmFkZENvbHVtbkFmdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdC1tZW51LWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJtZW51LmFkZENvbHVtbkFmdGVyLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJydW4oJGV2ZW50LCAnYWRkQ29sdW1uQWZ0ZXInKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBpMThuXG4gICAgICAgICAgICAgICAgICAgICAgICA+SW5zw6lyZXIgdW5lIGNvbG9ubmUgYXByw6hzXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAaWYgKG1lbnUuZGVsZXRlQ29sdW1uKSB7XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdC1tZW51LWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJtZW51LmRlbGV0ZUNvbHVtbi5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicnVuKCRldmVudCwgJ2RlbGV0ZUNvbHVtbicpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGkxOG5cbiAgICAgICAgICAgICAgICAgICAgICAgID5TdXBwcmltZXIgbGEgY29sb25uZVxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPG1hdC1kaXZpZGVyIC8+XG4gICAgICAgICAgICAgICAgQGlmIChtZW51LmFkZFJvd0JlZm9yZSkge1xuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXQtbWVudS1pdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwibWVudS5hZGRSb3dCZWZvcmUuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJ1bigkZXZlbnQsICdhZGRSb3dCZWZvcmUnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBpMThuXG4gICAgICAgICAgICAgICAgICAgICAgICA+SW5zw6lyZXIgdW5lIGxpZ25lIGF2YW50XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAaWYgKG1lbnUuYWRkUm93QWZ0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0LW1lbnUtaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm1lbnUuYWRkUm93QWZ0ZXIuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJ1bigkZXZlbnQsICdhZGRSb3dBZnRlcicpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGkxOG5cbiAgICAgICAgICAgICAgICAgICAgICAgID5JbnPDqXJlciB1bmUgbGlnbmUgYXByw6hzXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAaWYgKG1lbnUuZGVsZXRlUm93KSB7XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSBbZGlzYWJsZWRdPVwibWVudS5kZWxldGVSb3cuZGlzYWJsZWRcIiAoY2xpY2spPVwicnVuKCRldmVudCwgJ2RlbGV0ZVJvdycpXCIgaTE4blxuICAgICAgICAgICAgICAgICAgICAgICAgPlN1cHByaW1lciBsYSBsaWduZVxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPG1hdC1kaXZpZGVyIC8+XG4gICAgICAgICAgICAgICAgQGlmIChtZW51LnRvZ2dsZUhlYWRlckNvbHVtbikge1xuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXQtbWVudS1pdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwibWVudS50b2dnbGVIZWFkZXJDb2x1bW4uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJ1bigkZXZlbnQsICd0b2dnbGVIZWFkZXJDb2x1bW4nKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBpMThuXG4gICAgICAgICAgICAgICAgICAgICAgICA+RW50w6p0ZSBkZSBjb2xvbm5lXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAaWYgKG1lbnUudG9nZ2xlSGVhZGVyUm93KSB7XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdC1tZW51LWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJtZW51LnRvZ2dsZUhlYWRlclJvdy5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicnVuKCRldmVudCwgJ3RvZ2dsZUhlYWRlclJvdycpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGkxOG5cbiAgICAgICAgICAgICAgICAgICAgICAgID5FbnTDqnRlIGRlIGxpZ25lXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAaWYgKG1lbnUudG9nZ2xlSGVhZGVyQ2VsbCkge1xuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXQtbWVudS1pdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwibWVudS50b2dnbGVIZWFkZXJDZWxsLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJydW4oJGV2ZW50LCAndG9nZ2xlSGVhZGVyQ2VsbCcpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGkxOG5cbiAgICAgICAgICAgICAgICAgICAgICAgID5FbnTDqnRlIGRlIGNlbGx1bGVcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9tYXQtbWVudT5cbiAgICAgICAgICAgIEBpZiAoaW1hZ2VVcGxvYWRlcikge1xuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIG5hdHVyYWxGaWxlRHJvcFxuICAgICAgICAgICAgICAgICAgICBbc2VsZWN0YWJsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgW2Jyb2FkY2FzdF09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgIGkxOG4tbWF0VG9vbHRpcFxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiSW5zw6lyZXIgdW5lIGltYWdlXCJcbiAgICAgICAgICAgICAgICAgICAgKGZpbGVDaGFuZ2UpPVwidXBsb2FkKCRldmVudClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGZvbnRJY29uPVwiaW5zZXJ0X3Bob3RvXCIgLz5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAobWVudS5hbGlnbkxlZnQpIHtcbiAgICAgICAgICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAgaGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvcj5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChtZW51LmFsaWduTGVmdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm1lbnUuYWxpZ25MZWZ0LmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJtZW51LmFsaWduTGVmdC5hY3RpdmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJydW4oJGV2ZW50LCAnYWxpZ25MZWZ0JylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkxOG4tbWF0VG9vbHRpcFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJBbGlnbmVyIGdhdWNoZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGZvbnRJY29uPVwiZm9ybWF0X2FsaWduX2xlZnRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZT5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBAaWYgKG1lbnUuYWxpZ25DZW50ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJtZW51LmFsaWduQ2VudGVyLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJtZW51LmFsaWduQ2VudGVyLmFjdGl2ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJ1bigkZXZlbnQsICdhbGlnbkNlbnRlcicpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpMThuLW1hdFRvb2x0aXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiQ2VudHJlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGZvbnRJY29uPVwiZm9ybWF0X2FsaWduX2NlbnRlclwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1idXR0b24tdG9nZ2xlPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBpZiAobWVudS5hbGlnblJpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwibWVudS5hbGlnblJpZ2h0LmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJtZW51LmFsaWduUmlnaHQuYWN0aXZlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicnVuKCRldmVudCwgJ2FsaWduUmlnaHQnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaTE4bi1tYXRUb29sdGlwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkFsaWduZXIgZHJvaXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gZm9udEljb249XCJmb3JtYXRfYWxpZ25fcmlnaHRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZT5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBAaWYgKG1lbnUuYWxpZ25KdXN0aWZ5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwibWVudS5hbGlnbkp1c3RpZnkuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cIm1lbnUuYWxpZ25KdXN0aWZ5LmFjdGl2ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJ1bigkZXZlbnQsICdhbGlnbkp1c3RpZnknKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaTE4bi1tYXRUb29sdGlwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkp1c3RpZmllclwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGZvbnRJY29uPVwiZm9ybWF0X2FsaWduX2p1c3RpZnlcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZT5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvbWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXA+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKG1lbnUudW5kbykge1xuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJtZW51LnVuZG8uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicnVuKCRldmVudCwgJ3VuZG8nKVwiXG4gICAgICAgICAgICAgICAgICAgIGkxOG4tbWF0VG9vbHRpcFxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiQW5udWxlclwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gZm9udEljb249XCJ1bmRvXCIgLz5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAobWVudS5yZWRvKSB7XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm1lbnUucmVkby5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJydW4oJGV2ZW50LCAncmVkbycpXCJcbiAgICAgICAgICAgICAgICAgICAgaTE4bi1tYXRUb29sdGlwXG4gICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJSZWZhaXJlXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBmb250SWNvbj1cInJlZG9cIiAvPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmIChtZW51LndyYXBCdWxsZXRMaXN0ICYmIG1lbnUud3JhcEJ1bGxldExpc3Quc2hvdykge1xuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJtZW51LndyYXBCdWxsZXRMaXN0LmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJ1bigkZXZlbnQsICd3cmFwQnVsbGV0TGlzdCcpXCJcbiAgICAgICAgICAgICAgICAgICAgaTE4bi1tYXRUb29sdGlwXG4gICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJMaXN0ZSDDoCBwdWNlXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBmb250SWNvbj1cImZvcm1hdF9saXN0X2J1bGxldGVkXCIgLz5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAobWVudS53cmFwT3JkZXJlZExpc3QgJiYgbWVudS53cmFwT3JkZXJlZExpc3Quc2hvdykge1xuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJtZW51LndyYXBPcmRlcmVkTGlzdC5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJydW4oJGV2ZW50LCAnd3JhcE9yZGVyZWRMaXN0JylcIlxuICAgICAgICAgICAgICAgICAgICBpMThuLW1hdFRvb2x0aXBcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkxpc3RlIMOgIG51bcOpcm9cIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGZvbnRJY29uPVwiZm9ybWF0X2xpc3RfbnVtYmVyZWRcIiAvPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmIChtZW51LndyYXBCbG9ja1F1b3RlICYmIG1lbnUud3JhcEJsb2NrUXVvdGUuc2hvdykge1xuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJtZW51LndyYXBCbG9ja1F1b3RlLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJ1bigkZXZlbnQsICd3cmFwQmxvY2tRdW90ZScpXCJcbiAgICAgICAgICAgICAgICAgICAgaTE4bi1tYXRUb29sdGlwXG4gICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJDaXRhdGlvblwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gZm9udEljb249XCJmb3JtYXRfcXVvdGVcIiAvPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmIChtZW51LmpvaW5VcCAmJiBtZW51LmpvaW5VcC5zaG93KSB7XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm1lbnUuam9pblVwLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJ1bigkZXZlbnQsICdqb2luVXAnKVwiXG4gICAgICAgICAgICAgICAgICAgIGkxOG4tbWF0VG9vbHRpcFxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiRnVzaW9ubmVyIGF2ZWMgbCfDqWzDqW1lbnQgZHUgaGF1dFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gZm9udEljb249XCJtb3ZlX3VwXCIgLz5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAobWVudS5saWZ0ICYmIG1lbnUubGlmdC5zaG93KSB7XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm1lbnUubGlmdC5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJydW4oJGV2ZW50LCAnbGlmdCcpXCJcbiAgICAgICAgICAgICAgICAgICAgaTE4bi1tYXRUb29sdGlwXG4gICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJEw6lzaW5kZW50ZXJcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGZvbnRJY29uPVwiZm9ybWF0X2luZGVudF9kZWNyZWFzZVwiIC8+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKG1lbnUuc2VsZWN0UGFyZW50Tm9kZSAmJiBtZW51LnNlbGVjdFBhcmVudE5vZGUuc2hvdykge1xuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJtZW51LnNlbGVjdFBhcmVudE5vZGUuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicnVuKCRldmVudCwgJ3NlbGVjdFBhcmVudE5vZGUnKVwiXG4gICAgICAgICAgICAgICAgICAgIGkxOG4tbWF0VG9vbHRpcFxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiU8OpbGVjdGlvbm5lciBsJ8OpbMOpbWVudCBwYXJlbnRcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGZvbnRJY29uPVwic2VsZWN0X2FsbFwiIC8+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxufVxuPGRpdiBjbGFzcz1cImVkaXRvci1jb250YWluZXJcIiAjZWRpdG9yPjwvZGl2PlxuIl19
|
|
230
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwtZWRpdG9yL3NyYy9saWIvZWRpdG9yL2VkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXR1cmFsLWVkaXRvci9zcmMvbGliL2VkaXRvci9lZGl0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBR0wsUUFBUSxFQUNSLE1BQU0sRUFDTixJQUFJLEVBQ0osU0FBUyxHQUNaLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEVBQUMsV0FBVyxFQUFFLE1BQU0sRUFBYyxNQUFNLG1CQUFtQixDQUFDO0FBQ25FLE9BQU8sRUFBQyxTQUFTLEVBQUUsYUFBYSxFQUFTLE1BQU0sbUJBQW1CLENBQUM7QUFDbkUsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBRXpDLE9BQU8sRUFBQyxZQUFZLEVBQUUsWUFBWSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDOUQsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBQzFDLE9BQU8sRUFBQyxXQUFXLEVBQWdCLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUQsT0FBTyxFQUFDLGNBQWMsRUFBRSxXQUFXLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUNuRSxPQUFPLEVBQUMsY0FBYyxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDNUMsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ2hELE9BQU8sRUFBQyxVQUFV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Z0IsNFRBQ2hCLGFBQWEsbUxBQ2IscUJBQXFCLHdsQkFDckIsYUFBYSw2dkJBQ2IsZ0JBQWdCLG1JQUNoQix3QkFBd0I7OzJGQUduQixzQkFBc0I7a0JBaEJsQyxTQUFTOytCQUNJLGdCQUFnQixhQUdmLENBQUMsV0FBVyxDQUFDLGNBQ1osSUFBSSxXQUNQO3dCQUNMLGVBQWU7d0JBQ2YsZ0JBQWdCO3dCQUNoQixhQUFhO3dCQUNiLHFCQUFxQjt3QkFDckIsYUFBYTt3QkFDYixnQkFBZ0I7d0JBQ2hCLHdCQUF3QjtxQkFDM0I7OzBCQXdDSSxRQUFROzswQkFBSSxJQUFJOzswQkFDaEIsTUFBTTsyQkFBQyxRQUFROzJGQXBDMkMsTUFBTTtzQkFBcEUsU0FBUzt1QkFBQyxRQUFRLEVBQUUsRUFBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUM7Z0JBRTNCLGFBQWE7c0JBQXRDLE1BQU07Z0JBUVMsYUFBYTtzQkFBNUIsS0FBSztnQkFvQm9CLElBQUk7c0JBQTdCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBPdXRwdXQsXG4gICAgU2VsZixcbiAgICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtDb250cm9sVmFsdWVBY2Nlc3NvciwgTmdDb250cm9sfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge0VkaXRvclZpZXd9IGZyb20gJ3Byb3NlbWlycm9yLXZpZXcnO1xuaW1wb3J0IHtFZGl0b3JTdGF0ZSwgUGx1Z2luLCBUcmFuc2FjdGlvbn0gZnJvbSAncHJvc2VtaXJyb3Itc3RhdGUnO1xuaW1wb3J0IHtET01QYXJzZXIsIERPTVNlcmlhbGl6ZXIsIFNjaGVtYX0gZnJvbSAncHJvc2VtaXJyb3ItbW9kZWwnO1xuaW1wb3J0IHtET0NVTUVOVH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7TWF0RGlhbG9nfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHtnb1RvTmV4dENlbGwsIHRhYmxlRWRpdGluZ30gZnJvbSAncHJvc2VtaXJyb3ItdGFibGVzJztcbmltcG9ydCB7a2V5bWFwfSBmcm9tICdwcm9zZW1pcnJvci1rZXltYXAnO1xuaW1wb3J0IHtJbWFnZVBsdWdpbiwgSW1hZ2VVcGxvYWRlcn0gZnJvbSAnLi4vdXRpbHMvaW1hZ2UnO1xuaW1wb3J0IHthZHZhbmNlZFNjaGVtYSwgYmFzaWNTY2hlbWF9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS9zY2hlbWEnO1xuaW1wb3J0IHtidWlsZE1lbnVJdGVtcywgS2V5LCBNZW51SXRlbXN9IGZyb20gJy4uL3V0aWxzL21lbnUnO1xuaW1wb3J0IHtoaXN0b3J5fSBmcm9tICdwcm9zZW1pcnJvci1oaXN0b3J5JztcbmltcG9ydCB7YmFzZUtleW1hcH0gZnJvbSAncHJvc2VtaXJyb3ItY29tbWFuZHMnO1xuaW1wb3J0IHtkcm9wQ3Vyc29yfSBmcm9tICdwcm9zZW1pcnJvci1kcm9wY3Vyc29yJztcbmltcG9ydCB7Z2FwQ3Vyc29yfSBmcm9tICdwcm9zZW1pcnJvci1nYXBjdXJzb3InO1xuaW1wb3J0IHtidWlsZElucHV0UnVsZXN9IGZyb20gJy4uL3V0aWxzL2lucHV0cnVsZXMnO1xuaW1wb3J0IHtidWlsZEtleW1hcH0gZnJvbSAnLi4vdXRpbHMva2V5bWFwJztcbmltcG9ydCB7TmF0dXJhbEZpbGVEcm9wRGlyZWN0aXZlfSBmcm9tICdAZWNvZGV2L25hdHVyYWwnO1xuaW1wb3J0IHtNYXREaXZpZGVyTW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaXZpZGVyJztcbmltcG9ydCB7TWF0TWVudU1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudSc7XG5pbXBvcnQge01hdEJ1dHRvblRvZ2dsZU1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uLXRvZ2dsZSc7XG5pbXBvcnQge01hdEljb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHtNYXRUb29sdGlwTW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcbmltcG9ydCB7TWF0QnV0dG9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuXG4vKipcbiAqIFByb3NlbWlycm9yIGNvbXBvbmVudFxuICpcbiAqIFVzYWdlIDpcbiAqXG4gKiBgYGBodG1sXG4gKiA8bmF0dXJhbC1lZGl0b3IgWyhuZ01vZGVsKV09XCJodG1sU3RyaW5nXCIgLz5cbiAqIGBgYFxuICovXG4vLyBAZHluYW1pY1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduYXR1cmFsLWVkaXRvcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2VkaXRvci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmw6ICcuL2VkaXRvci5jb21wb25lbnQuc2NzcycsXG4gICAgcHJvdmlkZXJzOiBbSW1hZ2VQbHVnaW5dLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBNYXRCdXR0b25Nb2R1bGUsXG4gICAgICAgIE1hdFRvb2x0aXBNb2R1bGUsXG4gICAgICAgIE1hdEljb25Nb2R1bGUsXG4gICAgICAgIE1hdEJ1dHRvblRvZ2dsZU1vZHVsZSxcbiAgICAgICAgTWF0TWVudU1vZHVsZSxcbiAgICAgICAgTWF0RGl2aWRlck1vZHVsZSxcbiAgICAgICAgTmF0dXJhbEZpbGVEcm9wRGlyZWN0aXZlLFxuICAgIF0sXG59KVxuZXhwb3J0IGNsYXNzIE5hdHVyYWxFZGl0b3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICAgIHByaXZhdGUgdmlldzogRWRpdG9yVmlldyB8IG51bGwgPSBudWxsO1xuXG4gICAgQFZpZXdDaGlsZCgnZWRpdG9yJywge3JlYWQ6IEVsZW1lbnRSZWYsIHN0YXRpYzogdHJ1ZX0pIHByaXZhdGUgZWRpdG9yITogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cbiAgICBAT3V0cHV0KCkgcHVibGljIHJlYWRvbmx5IGNvbnRlbnRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICAgIC8qKlxuICAgICAqIENhbGxiYWNrIHRvIHVwbG9hZCBhbiBpbWFnZS5cbiAgICAgKlxuICAgICAqIElmIGdpdmVuIGl0IHdpbGwgZW5hYmxlIGFkdmFuY2VkIHNjaGVtYSwgaW5jbHVkaW5nIGltYWdlIGFuZCB0YWJsZXMuXG4gICAgICogSXQgbXVzdCBiZSBnaXZlbiBvbiBpbml0aWFsaXphdGlvbiBhbmQgY2Fubm90IGJlIGNoYW5nZWQgbGF0ZXIgb24uXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIGltYWdlVXBsb2FkZXI6IEltYWdlVXBsb2FkZXIgfCBudWxsID0gbnVsbDtcblxuICAgIHByaXZhdGUgc2NoZW1hOiBTY2hlbWEgPSBiYXNpY1NjaGVtYTtcblxuICAgIC8qKlxuICAgICAqIEludGVyZmFjZSB3aXRoIENvbnRyb2xWYWx1ZUFjY2Vzc29yXG4gICAgICogTm90aWZpZXMgcGFyZW50IG1vZGVsIC8gZm9ybSBjb250cm9sbGVyXG4gICAgICovXG4gICAgcHJpdmF0ZSBvbkNoYW5nZT86ICh2YWx1ZTogc3RyaW5nIHwgbnVsbCkgPT4gdm9pZDtcblxuICAgIC8qKlxuICAgICAqIEhUTUwgc3RyaW5nXG4gICAgICovXG4gICAgcHJpdmF0ZSBjb250ZW50ID0gJyc7XG5cbiAgICBwdWJsaWMgbWVudTogTWVudUl0ZW1zIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBJZiBzdWJzY3JpYmVkIHRvLCB0aGVuIHRoZSBzYXZlIGJ1dHRvbiB3aWxsIGJlIHNob3duIGFuZCBjbGljayBldmVudHMgZm9yd2FyZGVkXG4gICAgICovXG4gICAgQE91dHB1dCgpIHB1YmxpYyByZWFkb25seSBzYXZlID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgcHVibGljIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIEBPcHRpb25hbCgpIEBTZWxmKCkgcHVibGljIHJlYWRvbmx5IG5nQ29udHJvbDogTmdDb250cm9sLFxuICAgICAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50OiBEb2N1bWVudCxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBkaWFsb2c6IE1hdERpYWxvZyxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBpbWFnZVBsdWdpbjogSW1hZ2VQbHVnaW4sXG4gICAgKSB7XG4gICAgICAgIGlmICh0aGlzLm5nQ29udHJvbCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5uZ0NvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2NoZW1hID0gdGhpcy5pbWFnZVVwbG9hZGVyID8gYWR2YW5jZWRTY2hlbWEgOiBiYXNpY1NjaGVtYTtcbiAgICAgICAgdGhpcy5tZW51ID0gYnVpbGRNZW51SXRlbXModGhpcy5zY2hlbWEsIHRoaXMuZGlhbG9nKTtcbiAgICAgICAgY29uc3Qgc2VyaWFsaXplciA9IERPTVNlcmlhbGl6ZXIuZnJvbVNjaGVtYSh0aGlzLnNjaGVtYSk7XG4gICAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5jcmVhdGVTdGF0ZSgpO1xuXG4gICAgICAgIHRoaXMudmlldyA9IG5ldyBFZGl0b3JWaWV3KHRoaXMuZWRpdG9yLm5hdGl2ZUVsZW1lbnQsIHtcbiAgICAgICAgICAgIHN0YXRlOiBzdGF0ZSxcbiAgICAgICAgICAgIGVkaXRhYmxlOiAoKSA9PiAhdGhpcy5kaXNhYmxlZCxcbiAgICAgICAgICAgIGRpc3BhdGNoVHJhbnNhY3Rpb246ICh0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb24pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMudmlldykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgbmV3U3RhdGUgPSB0aGlzLnZpZXcuc3RhdGUuYXBwbHkodHJhbnNhY3Rpb24pO1xuICAgICAgICAgICAgICAgIHRoaXMudmlldy51cGRhdGVTdGF0ZShuZXdTdGF0ZSk7XG5cbiAgICAgICAgICAgICAgICAvLyBUcmFuc2Zvcm0gZG9jIGludG8gSFRNTCBzdHJpbmdcbiAgICAgICAgICAgICAgICBjb25zdCBkb20gPSBzZXJpYWxpemVyLnNlcmlhbGl6ZUZyYWdtZW50KHRoaXMudmlldy5zdGF0ZS5kb2MgYXMgYW55KTtcbiAgICAgICAgICAgICAgICBjb25zdCBlbCA9IHRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnXycpO1xuICAgICAgICAgICAgICAgIGVsLmFwcGVuZENoaWxkKGRvbSk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBuZXdDb250ZW50ID0gZWwuaW5uZXJIVE1MO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRlbnQgPT09IG5ld0NvbnRlbnQgfHwgdGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5jb250ZW50ID0gZWwuaW5uZXJIVE1MO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMub25DaGFuZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLmNvbnRlbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRlbnRDaGFuZ2UuZW1pdCh0aGlzLmNvbnRlbnQpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudXBkYXRlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHdyaXRlVmFsdWUodmFsOiBzdHJpbmcgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnICYmIHZhbCAhPT0gdGhpcy5jb250ZW50KSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRlbnQgPSB2YWw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy52aWV3ICE9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuY3JlYXRlU3RhdGUoKTtcbiAgICAgICAgICAgIHRoaXMudmlldy51cGRhdGVTdGF0ZShzdGF0ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZVN0YXRlKCk6IEVkaXRvclN0YXRlIHtcbiAgICAgICAgY29uc3QgdGVtcGxhdGUgPSB0aGlzLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ18nKTtcbiAgICAgICAgdGVtcGxhdGUuaW5uZXJIVE1MID0gJzxkaXY+JyArIHRoaXMuY29udGVudCArICc8L2Rpdj4nO1xuICAgICAgICBpZiAoIXRlbXBsYXRlLmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignY2hpbGQgb2YgdGVtcGxhdGUgZWxlbWVudCBjb3VsZCBub3QgYmUgY3JlYXRlZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFyc2VyID0gRE9NUGFyc2VyLmZyb21TY2hlbWEodGhpcy5zY2hlbWEpO1xuICAgICAgICBjb25zdCBkb2MgPSBwYXJzZXIucGFyc2UodGVtcGxhdGUuZmlyc3RDaGlsZCk7XG5cbiAgICAgICAgcmV0dXJuIEVkaXRvclN0YXRlLmNyZWF0ZSh7XG4gICAgICAgICAgICBkb2M6IGRvYyxcbiAgICAgICAgICAgIHBsdWdpbnM6IHRoaXMuY3JlYXRlUGx1Z2lucygpLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZVBsdWdpbnMoKTogUGx1Z2luW10ge1xuICAgICAgICBjb25zdCBpc01hYyA9ICEhdGhpcy5kb2N1bWVudC5kZWZhdWx0Vmlldz8ubmF2aWdhdG9yLnBsYXRmb3JtLm1hdGNoKC9NYWMvKTtcblxuICAgICAgICBjb25zdCBwbHVnaW5zID0gW1xuICAgICAgICAgICAgYnVpbGRJbnB1dFJ1bGVzKHRoaXMuc2NoZW1hKSxcbiAgICAgICAgICAgIGtleW1hcChidWlsZEtleW1hcCh0aGlzLnNjaGVtYSwgaXNNYWMpKSxcbiAgICAgICAgICAgIGtleW1hcChiYXNlS2V5bWFwKSxcbiAgICAgICAgICAgIGRyb3BDdXJzb3IoKSxcbiAgICAgICAgICAgIGdhcEN1cnNvcigpLFxuICAgICAgICAgICAgaGlzdG9yeSgpLFxuICAgICAgICAgICAgbmV3IFBsdWdpbih7XG4gICAgICAgICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlczoge2NsYXNzOiAnUHJvc2VNaXJyb3ItZXhhbXBsZS1zZXR1cC1zdHlsZSd9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBQbHVnaW4oe1xuICAgICAgICAgICAgICAgIHZpZXc6ICgpID0+IHRoaXMsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgXTtcblxuICAgICAgICBpZiAodGhpcy5zY2hlbWEgPT09IGFkdmFuY2VkU2NoZW1hKSB7XG4gICAgICAgICAgICBwbHVnaW5zLnB1c2goXG4gICAgICAgICAgICAgICAgdGhpcy5pbWFnZVBsdWdpbi5wbHVnaW4sXG4gICAgICAgICAgICAgICAgdGFibGVFZGl0aW5nKCksXG4gICAgICAgICAgICAgICAga2V5bWFwKHtcbiAgICAgICAgICAgICAgICAgICAgVGFiOiBnb1RvTmV4dENlbGwoMSksXG4gICAgICAgICAgICAgICAgICAgICdTaGlmdC1UYWInOiBnb1RvTmV4dENlbGwoLTEpLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwbHVnaW5zO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhbGxlZCBieSBQcm9zZW1pcnJvciB3aGVuZXZlciB0aGUgZWRpdG9yIHN0YXRlIGNoYW5nZXMuIFNvIHdlIHVwZGF0ZSBvdXIgbWVudSBzdGF0ZXMuXG4gICAgICovXG4gICAgcHVibGljIHVwZGF0ZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLnZpZXcgfHwgIXRoaXMubWVudSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIE9iamVjdC52YWx1ZXModGhpcy5tZW51KSkge1xuICAgICAgICAgICAgaXRlbS51cGRhdGUodGhpcy52aWV3LCB0aGlzLnZpZXcuc3RhdGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gICAgfVxuXG4gICAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKCk6IHZvaWQge1xuICAgICAgICAvLyBub29wXG4gICAgfVxuXG4gICAgcHVibGljIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnZpZXcpIHtcbiAgICAgICAgICAgIHRoaXMudmlldy5kZXN0cm95KCk7XG4gICAgICAgICAgICB0aGlzLnZpZXcgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHJ1bihldmVudDogRXZlbnQsIGtleTogS2V5KTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy52aWV3IHx8ICF0aGlzLm1lbnUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLm1lbnVba2V5XTtcbiAgICAgICAgaWYgKCFpdGVtIHx8IGl0ZW0uZGlzYWJsZWQgfHwgIWl0ZW0uc2hvdykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaXRlbS5zcGVjLnJ1bih0aGlzLnZpZXcuc3RhdGUsIHRoaXMudmlldy5kaXNwYXRjaCwgdGhpcy52aWV3LCBldmVudCk7XG4gICAgICAgIHRoaXMudmlldy5mb2N1cygpO1xuICAgIH1cblxuICAgIHB1YmxpYyB1cGxvYWQoZmlsZTogRmlsZSk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMudmlldyB8fCAhdGhpcy5pbWFnZVVwbG9hZGVyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy52aWV3LnN0YXRlLnNlbGVjdGlvbi4kZnJvbS5wYXJlbnQuaW5saW5lQ29udGVudCkge1xuICAgICAgICAgICAgdGhpcy5pbWFnZVBsdWdpbi5zdGFydEltYWdlVXBsb2FkKHRoaXMudmlldywgZmlsZSwgdGhpcy5pbWFnZVVwbG9hZGVyLCB0aGlzLnNjaGVtYSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnZpZXcuZm9jdXMoKTtcbiAgICB9XG59XG4iLCJAaWYgKG1lbnUgJiYgIXRoaXMuZGlzYWJsZWQpIHtcbiAgICA8ZGl2IGNsYXNzPVwibWVudS1jb250YWluZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1lbnVcIj5cbiAgICAgICAgICAgIEBpZiAoc2F2ZS5vYnNlcnZlZCkge1xuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJzYXZlLmVtaXQoKVwiIGkxOG4tbWF0VG9vbHRpcCBtYXRUb29sdGlwPVwiRW5yZWdpc3RyZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGZvbnRJY29uPVwic2F2ZVwiIC8+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAgaGlkZU11bHRpcGxlU2VsZWN0aW9uSW5kaWNhdG9yIG11bHRpcGxlPlxuICAgICAgICAgICAgICAgIEBpZiAobWVudS50b2dnbGVTdHJvbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwibWVudS50b2dnbGVTdHJvbmcuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwibWVudS50b2dnbGVTdHJvbmcuYWN0aXZlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJydW4oJGV2ZW50LCAndG9nZ2xlU3Ryb25nJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgaTE4bi1tYXRUb29sdGlwXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiR3Jhc1wiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBmb250SWNvbj1cImZvcm1hdF9ib2xkXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZT5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgQGlmIChtZW51LnRvZ2dsZUVtKSB7XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZVxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm1lbnUudG9nZ2xlRW0uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwibWVudS50b2dnbGVFbS5hY3RpdmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJ1bigkZXZlbnQsICd0b2dnbGVFbScpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGkxOG4tbWF0VG9vbHRpcFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkl0YWxpcXVlXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGZvbnRJY29uPVwiZm9ybWF0X2l0YWxpY1wiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWJ1dHRvbi10b2dnbGU+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBpZiAobWVudS50b2dnbGVDb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZVxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm1lbnUudG9nZ2xlQ29kZS5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJtZW51LnRvZ2dsZUNvZGUuYWN0aXZlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJydW4oJGV2ZW50LCAndG9nZ2xlQ29kZScpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGkxOG4tbWF0VG9vbHRpcFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkNvZGVcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gZm9udEljb249XCJjb2RlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZT5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgQGlmIChtZW51LnRvZ2dsZUxpbmspIHtcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwibWVudS50b2dnbGVMaW5rLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cIm1lbnUudG9nZ2xlTGluay5hY3RpdmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJ1bigkZXZlbnQsICd0b2dnbGVMaW5rJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgaTE4bi1tYXRUb29sdGlwXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiSW5zw6lyZXIgdW4gbGllbi4uLlwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBmb250SWNvbj1cImluc2VydF9saW5rXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZT5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L21hdC1idXR0b24tdG9nZ2xlLWdyb3VwPlxuICAgICAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIFttYXRNZW51VHJpZ2dlckZvcl09XCJibG9ja01lbnVcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBpMThuPlR5cGU8L3NwYW4+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIGZvbnRJY29uPVwiYXJyb3dfZHJvcF9kb3duXCIgLz5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPG1hdC1tZW51ICNibG9ja01lbnU9XCJtYXRNZW51XCI+XG4gICAgICAgICAgICAgICAgQGlmIChtZW51Lm1ha2VQYXJhZ3JhcGgpIHtcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0LW1lbnUtaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm1lbnUubWFrZVBhcmFncmFwaC5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicnVuKCRldmVudCwgJ21ha2VQYXJhZ3JhcGgnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBpMThuXG4gICAgICAgICAgICAgICAgICAgICAgICA+UGFyYWdyYXBoZVxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgQGlmIChtZW51Lm1ha2VDb2RlQmxvY2spIHtcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0LW1lbnUtaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm1lbnUubWFrZUNvZGVCbG9jay5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicnVuKCRldmVudCwgJ21ha2VDb2RlQmxvY2snKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBpMThuXG4gICAgICAgICAgICAgICAgICAgICAgICA+Q29kZVxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgQGlmIChtZW51Lm1ha2VIZWFkMSkge1xuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gW2Rpc2FibGVkXT1cIm1lbnUubWFrZUhlYWQxLmRpc2FibGVkXCIgKGNsaWNrKT1cInJ1bigkZXZlbnQsICdtYWtlSGVhZDEnKVwiIGkxOG5cbiAgICAgICAgICAgICAgICAgICAgICAgID5UaXRyZSAxXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAaWYgKG1lbnUubWFrZUhlYWQyKSB7XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSBbZGlzYWJsZWRdPVwibWVudS5tYWtlSGVhZDIuZGlzYWJsZWRcIiAoY2xpY2spPVwicnVuKCRldmVudCwgJ21ha2VIZWFkMicpXCIgaTE4blxuICAgICAgICAgICAgICAgICAgICAgICAgPlRpdHJlIDJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBpZiAobWVudS5tYWtlSGVhZDMpIHtcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIFtkaXNhYmxlZF09XCJtZW51Lm1ha2VIZWFkMy5kaXNhYmxlZFwiIChjbGljayk9XCJydW4oJGV2ZW50LCAnbWFrZUhlYWQzJylcIiBpMThuXG4gICAgICAgICAgICAgICAgICAgICAgICA+VGl0cmUgM1xuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgQGlmIChtZW51Lm1ha2VIZWFkNCkge1xuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gW2Rpc2FibGVkXT1cIm1lbnUubWFrZUhlYWQ0LmRpc2FibGVkXCIgKGNsaWNrKT1cInJ1bigkZXZlbnQsICdtYWtlSGVhZDQnKVwiIGkxOG5cbiAgICAgICAgICAgICAgICAgICAgICAgID5UaXRyZSA0XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAaWYgKG1lbnUubWFrZUhlYWQ1KSB7XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSBbZGlzYWJsZWRdPVwibWVudS5tYWtlSGVhZDUuZGlzYWJsZWRcIiAoY2xpY2spPVwicnVuKCRldmVudCwgJ21ha2VIZWFkNScpXCIgaTE4blxuICAgICAgICAgICAgICAgICAgICAgICAgPlRpdHJlIDVcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBpZiAobWVudS5tYWtlSGVhZDYpIHtcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIFtkaXNhYmxlZF09XCJtZW51Lm1ha2VIZWFkNi5kaXNhYmxlZFwiIChjbGljayk9XCJydW4oJGV2ZW50LCAnbWFrZUhlYWQ2JylcIiBpMThuXG4gICAgICAgICAgICAgICAgICAgICAgICA+VGl0cmUgNlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPG1hdC1kaXZpZGVyIC8+XG4gICAgICAgICAgICAgICAgQGlmIChtZW51LmJsb2NrQ2xhc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIFtkaXNhYmxlZF09XCJtZW51LmJsb2NrQ2xhc3MuZGlzYWJsZWRcIiAoY2xpY2spPVwicnVuKCRldmVudCwgJ2Jsb2NrQ2xhc3MnKVwiIGkxOG5cbiAgICAgICAgICAgICAgICAgICAgICAgID5DbGFzc2UuLi5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBpZiAobWVudS5ibG9ja0lkKSB7XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gaTE4biBtYXQtbWVudS1pdGVtIFtkaXNhYmxlZF09XCJtZW51LmJsb2NrSWQuZGlzYWJsZWRcIiAoY2xpY2spPVwicnVuKCRldmVudCwgJ2Jsb2NrSWQnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+SUQuLi5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9tYXQtbWVudT5cbiAgICAgICAgICAgIEBpZiAobWVudS5hZGRDb2x1bW5CZWZvcmUpIHtcbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cInRhYmxlTWVudVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBpMThuPlRhYmxlYXU8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBmb250SWNvbj1cImFycm93X2Ryb3BfZG93blwiIC8+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA8bWF0LW1lbnUgI3RhYmxlTWVudT1cIm1hdE1lbnVcIj5cbiAgICAgICAgICAgICAgICBAaWYgKG1lbnUuaW5zZXJ0VGFibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0LW1lbnUtaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm1lbnUuaW5zZXJ0VGFibGUuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJ1bigkZXZlbnQsICdpbnNlcnRUYWJsZScpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGkxOG5cbiAgICAgICAgICAgICAgICAgICAgICAgID5JbnPDqXJlciB1biB0YWJsZWF1XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAaWYgKG1lbnUuZGVsZXRlVGFibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0LW1lbnUtaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm1lbnUuZGVsZXRlVGFibGUuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJ1bigkZXZlbnQsICdkZWxldGVUYWJsZScpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGkxOG5cbiAgICAgICAgICAgICAgICAgICAgICAgID5TdXBwcmltZXIgbGUgdGFibGVhdVxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgQGlmIChtZW51Lm1lcmdlQ2VsbHMpIHtcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIFtkaXNhYmxlZF09XCJtZW51Lm1lcmdlQ2VsbHMuZGlzYWJsZWRcIiAoY2xpY2spPVwicnVuKCRldmVudCwgJ21lcmdlQ2VsbHMnKVwiIGkxOG5cbiAgICAgICAgICAgICAgICAgICAgICAgID5GdXNpb25uZXIgbGVzIGNlbGx1bGVzXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAaWYgKG1lbnUuc3BsaXRDZWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSBbZGlzYWJsZWRdPVwibWVudS5zcGxpdENlbGwuZGlzYWJsZWRcIiAoY2xpY2spPVwicnVuKCRldmVudCwgJ3NwbGl0Q2VsbCcpXCIgaTE4blxuICAgICAgICAgICAgICAgICAgICAgICAgPlNjaW5kZXIgbGVzIGNlbGx1bGVzXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAaWYgKG1lbnUuY2VsbEJhY2tncm91bmRDb2xvcikge1xuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXQtbWVudS1pdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwibWVudS5jZWxsQmFja2dyb3VuZENvbG9yLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJydW4oJGV2ZW50LCAnY2VsbEJhY2tncm91bmRDb2xvcicpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGkxOG5cbiAgICAgICAgICAgICAgICAgICAgICAgID5Db3VsZXVyIGRlIGZvbmQuLi5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBpZiAobWVudS50YWJsZUNsYXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSBbZGlzYWJsZWRdPVwibWVudS50YWJsZUNsYXNzLmRpc2FibGVkXCIgKGNsaWNrKT1cInJ1bigkZXZlbnQsICd0YWJsZUNsYXNzJylcIiBpMThuXG4gICAgICAgICAgICAgICAgICAgICAgICA+Q2xhc3NlLi4uXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAaWYgKG1lbnUudGFibGVJZCkge1xuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGkxOG4gbWF0LW1lbnUtaXRlbSBbZGlzYWJsZWRdPVwibWVudS50YWJsZUlkLmRpc2FibGVkXCIgKGNsaWNrKT1cInJ1bigkZXZlbnQsICd0YWJsZUlkJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPklELi4uXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8bWF0LWRpdmlkZXIgLz5cbiAgICAgICAgICAgICAgICBAaWYgKG1lbnUuYWRkQ29sdW1uQmVmb3JlKSB7XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdC1tZW51LWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJtZW51LmFkZENvbHVtbkJlZm9yZS5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicnVuKCRldmVudCwgJ2FkZENvbHVtbkJlZm9yZScpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGkxOG5cbiAgICAgICAgICAgICAgICAgICAgICAgID5JbnPDqXJlciB1bmUgY29sb25uZSBhdmFudFxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgQGlmIChtZW51LmFkZENvbHVtbkFmdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdC1tZW51LWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJtZW51LmFkZENvbHVtbkFmdGVyLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJydW4oJGV2ZW50LCAnYWRkQ29sdW1uQWZ0ZXInKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBpMThuXG4gICAgICAgICAgICAgICAgICAgICAgICA+SW5zw6lyZXIgdW5lIGNvbG9ubmUgYXByw6hzXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAaWYgKG1lbnUuZGVsZXRlQ29sdW1uKSB7XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdC1tZW51LWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJtZW51LmRlbGV0ZUNvbHVtbi5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicnVuKCRldmVudCwgJ2RlbGV0ZUNvbHVtbicpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGkxOG5cbiAgICAgICAgICAgICAgICAgICAgICAgID5TdXBwcmltZXIgbGEgY29sb25uZVxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPG1hdC1kaXZpZGVyIC8+XG4gICAgICAgICAgICAgICAgQGlmIChtZW51LmFkZFJvd0JlZm9yZSkge1xuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXQtbWVudS1pdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwibWVudS5hZGRSb3dCZWZvcmUuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJ1bigkZXZlbnQsICdhZGRSb3dCZWZvcmUnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBpMThuXG4gICAgICAgICAgICAgICAgICAgICAgICA+SW5zw6lyZXIgdW5lIGxpZ25lIGF2YW50XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAaWYgKG1lbnUuYWRkUm93QWZ0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0LW1lbnUtaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm1lbnUuYWRkUm93QWZ0ZXIuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJ1bigkZXZlbnQsICdhZGRSb3dBZnRlcicpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGkxOG5cbiAgICAgICAgICAgICAgICAgICAgICAgID5JbnPDqXJlciB1bmUgbGlnbmUgYXByw6hzXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAaWYgKG1lbnUuZGVsZXRlUm93KSB7XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSBbZGlzYWJsZWRdPVwibWVudS5kZWxldGVSb3cuZGlzYWJsZWRcIiAoY2xpY2spPVwicnVuKCRldmVudCwgJ2RlbGV0ZVJvdycpXCIgaTE4blxuICAgICAgICAgICAgICAgICAgICAgICAgPlN1cHByaW1lciBsYSBsaWduZVxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPG1hdC1kaXZpZGVyIC8+XG4gICAgICAgICAgICAgICAgQGlmIChtZW51LnRvZ2dsZUhlYWRlckNvbHVtbikge1xuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXQtbWVudS1pdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwibWVudS50b2dnbGVIZWFkZXJDb2x1bW4uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJ1bigkZXZlbnQsICd0b2dnbGVIZWFkZXJDb2x1bW4nKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBpMThuXG4gICAgICAgICAgICAgICAgICAgICAgICA+RW50w6p0ZSBkZSBjb2xvbm5lXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAaWYgKG1lbnUudG9nZ2xlSGVhZGVyUm93KSB7XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdC1tZW51LWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJtZW51LnRvZ2dsZUhlYWRlclJvdy5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicnVuKCRldmVudCwgJ3RvZ2dsZUhlYWRlclJvdycpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGkxOG5cbiAgICAgICAgICAgICAgICAgICAgICAgID5FbnTDqnRlIGRlIGxpZ25lXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAaWYgKG1lbnUudG9nZ2xlSGVhZGVyQ2VsbCkge1xuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXQtbWVudS1pdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwibWVudS50b2dnbGVIZWFkZXJDZWxsLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJydW4oJGV2ZW50LCAndG9nZ2xlSGVhZGVyQ2VsbCcpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGkxOG5cbiAgICAgICAgICAgICAgICAgICAgICAgID5FbnTDqnRlIGRlIGNlbGx1bGVcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9tYXQtbWVudT5cbiAgICAgICAgICAgIEBpZiAoaW1hZ2VVcGxvYWRlcikge1xuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIG5hdHVyYWxGaWxlRHJvcFxuICAgICAgICAgICAgICAgICAgICBbc2VsZWN0YWJsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgW2Jyb2FkY2FzdF09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgIGkxOG4tbWF0VG9vbHRpcFxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiSW5zw6lyZXIgdW5lIGltYWdlXCJcbiAgICAgICAgICAgICAgICAgICAgKGZpbGVDaGFuZ2UpPVwidXBsb2FkKCRldmVudClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGZvbnRJY29uPVwiaW5zZXJ0X3Bob3RvXCIgLz5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAobWVudS5hbGlnbkxlZnQpIHtcbiAgICAgICAgICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAgaGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvcj5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChtZW51LmFsaWduTGVmdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm1lbnUuYWxpZ25MZWZ0LmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJtZW51LmFsaWduTGVmdC5hY3RpdmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJydW4oJGV2ZW50LCAnYWxpZ25MZWZ0JylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkxOG4tbWF0VG9vbHRpcFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJBbGlnbmVyIGdhdWNoZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGZvbnRJY29uPVwiZm9ybWF0X2FsaWduX2xlZnRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZT5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBAaWYgKG1lbnUuYWxpZ25DZW50ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJtZW51LmFsaWduQ2VudGVyLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJtZW51LmFsaWduQ2VudGVyLmFjdGl2ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJ1bigkZXZlbnQsICdhbGlnbkNlbnRlcicpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpMThuLW1hdFRvb2x0aXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiQ2VudHJlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGZvbnRJY29uPVwiZm9ybWF0X2FsaWduX2NlbnRlclwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1idXR0b24tdG9nZ2xlPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBpZiAobWVudS5hbGlnblJpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwibWVudS5hbGlnblJpZ2h0LmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJtZW51LmFsaWduUmlnaHQuYWN0aXZlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicnVuKCRldmVudCwgJ2FsaWduUmlnaHQnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaTE4bi1tYXRUb29sdGlwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkFsaWduZXIgZHJvaXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gZm9udEljb249XCJmb3JtYXRfYWxpZ25fcmlnaHRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZT5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBAaWYgKG1lbnUuYWxpZ25KdXN0aWZ5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwibWVudS5hbGlnbkp1c3RpZnkuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cIm1lbnUuYWxpZ25KdXN0aWZ5LmFjdGl2ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJ1bigkZXZlbnQsICdhbGlnbkp1c3RpZnknKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaTE4bi1tYXRUb29sdGlwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkp1c3RpZmllclwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGZvbnRJY29uPVwiZm9ybWF0X2FsaWduX2p1c3RpZnlcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZT5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvbWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXA+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKG1lbnUudW5kbykge1xuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJtZW51LnVuZG8uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicnVuKCRldmVudCwgJ3VuZG8nKVwiXG4gICAgICAgICAgICAgICAgICAgIGkxOG4tbWF0VG9vbHRpcFxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiQW5udWxlclwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gZm9udEljb249XCJ1bmRvXCIgLz5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAobWVudS5yZWRvKSB7XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm1lbnUucmVkby5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJydW4oJGV2ZW50LCAncmVkbycpXCJcbiAgICAgICAgICAgICAgICAgICAgaTE4bi1tYXRUb29sdGlwXG4gICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJSZWZhaXJlXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBmb250SWNvbj1cInJlZG9cIiAvPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmIChtZW51LndyYXBCdWxsZXRMaXN0ICYmIG1lbnUud3JhcEJ1bGxldExpc3Quc2hvdykge1xuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJtZW51LndyYXBCdWxsZXRMaXN0LmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJ1bigkZXZlbnQsICd3cmFwQnVsbGV0TGlzdCcpXCJcbiAgICAgICAgICAgICAgICAgICAgaTE4bi1tYXRUb29sdGlwXG4gICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJMaXN0ZSDDoCBwdWNlXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBmb250SWNvbj1cImZvcm1hdF9saXN0X2J1bGxldGVkXCIgLz5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAobWVudS53cmFwT3JkZXJlZExpc3QgJiYgbWVudS53cmFwT3JkZXJlZExpc3Quc2hvdykge1xuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJtZW51LndyYXBPcmRlcmVkTGlzdC5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJydW4oJGV2ZW50LCAnd3JhcE9yZGVyZWRMaXN0JylcIlxuICAgICAgICAgICAgICAgICAgICBpMThuLW1hdFRvb2x0aXBcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkxpc3RlIMOgIG51bcOpcm9cIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGZvbnRJY29uPVwiZm9ybWF0X2xpc3RfbnVtYmVyZWRcIiAvPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmIChtZW51LndyYXBCbG9ja1F1b3RlICYmIG1lbnUud3JhcEJsb2NrUXVvdGUuc2hvdykge1xuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJtZW51LndyYXBCbG9ja1F1b3RlLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJ1bigkZXZlbnQsICd3cmFwQmxvY2tRdW90ZScpXCJcbiAgICAgICAgICAgICAgICAgICAgaTE4bi1tYXRUb29sdGlwXG4gICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJDaXRhdGlvblwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gZm9udEljb249XCJmb3JtYXRfcXVvdGVcIiAvPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmIChtZW51LmpvaW5VcCAmJiBtZW51LmpvaW5VcC5zaG93KSB7XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm1lbnUuam9pblVwLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJ1bigkZXZlbnQsICdqb2luVXAnKVwiXG4gICAgICAgICAgICAgICAgICAgIGkxOG4tbWF0VG9vbHRpcFxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiRnVzaW9ubmVyIGF2ZWMgbCfDqWzDqW1lbnQgZHUgaGF1dFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gZm9udEljb249XCJtb3ZlX3VwXCIgLz5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAobWVudS5saWZ0ICYmIG1lbnUubGlmdC5zaG93KSB7XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm1lbnUubGlmdC5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJydW4oJGV2ZW50LCAnbGlmdCcpXCJcbiAgICAgICAgICAgICAgICAgICAgaTE4bi1tYXRUb29sdGlwXG4gICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJEw6lzaW5kZW50ZXJcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGZvbnRJY29uPVwiZm9ybWF0X2luZGVudF9kZWNyZWFzZVwiIC8+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKG1lbnUuc2VsZWN0UGFyZW50Tm9kZSAmJiBtZW51LnNlbGVjdFBhcmVudE5vZGUuc2hvdykge1xuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJtZW51LnNlbGVjdFBhcmVudE5vZGUuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicnVuKCRldmVudCwgJ3NlbGVjdFBhcmVudE5vZGUnKVwiXG4gICAgICAgICAgICAgICAgICAgIGkxOG4tbWF0VG9vbHRpcFxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiU8OpbGVjdGlvbm5lciBsJ8OpbMOpbWVudCBwYXJlbnRcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGZvbnRJY29uPVwic2VsZWN0X2FsbFwiIC8+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxufVxuPGRpdiBjbGFzcz1cImVkaXRvci1jb250YWluZXJcIiAjZWRpdG9yPjwvZGl2PlxuIl19
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ecodev-natural-editor.mjs","sources":["../../../projects/natural-editor/src/lib/custom-css/custom-css.directive.ts","../../../projects/natural-editor/src/lib/utils/image.ts","../../../projects/natural-editor/src/lib/utils/schema/paragraph-with-alignment.ts","../../../projects/natural-editor/src/lib/utils/schema/heading.ts","../../../projects/natural-editor/src/lib/utils/schema/table.ts","../../../projects/natural-editor/src/lib/utils/schema/schema.ts","../../../projects/natural-editor/src/lib/utils/items/item.ts","../../../projects/natural-editor/src/lib/utils/items/text-align-item.ts","../../../projects/natural-editor/src/lib/color-dialog/color-dialog.component.ts","../../../projects/natural-editor/src/lib/color-dialog/color-dialog.component.html","../../../projects/natural-editor/src/lib/utils/items/cell-background-color-item.ts","../../../projects/natural-editor/src/lib/link-dialog/link-dialog.component.ts","../../../projects/natural-editor/src/lib/link-dialog/link-dialog.component.html","../../../projects/natural-editor/src/lib/utils/items/utils.ts","../../../projects/natural-editor/src/lib/utils/items/link-item.ts","../../../projects/natural-editor/src/lib/utils/items/horizontal-rule-item.ts","../../../projects/natural-editor/src/lib/utils/items/wrap-list-item.ts","../../../projects/natural-editor/src/lib/class-dialog/class-dialog.component.ts","../../../projects/natural-editor/src/lib/class-dialog/class-dialog.component.html","../../../projects/natural-editor/src/lib/utils/items/class-item.ts","../../../projects/natural-editor/src/lib/id-dialog/id-dialog.component.ts","../../../projects/natural-editor/src/lib/id-dialog/id-dialog.component.html","../../../projects/natural-editor/src/lib/utils/items/id-item.ts","../../../projects/natural-editor/src/lib/utils/items/table-item.ts","../../../projects/natural-editor/src/lib/utils/menu.ts","../../../projects/natural-editor/src/lib/utils/inputrules.ts","../../../projects/natural-editor/src/lib/utils/keymap.ts","../../../projects/natural-editor/src/lib/editor/editor.component.ts","../../../projects/natural-editor/src/lib/editor/editor.component.html","../../../projects/natural-editor/src/public-api.ts","../../../projects/natural-editor/src/ecodev-natural-editor.ts"],"sourcesContent":["import {Directive, HostBinding, Inject, Input, OnDestroy} from '@angular/core';\nimport {DOCUMENT} from '@angular/common';\n\n/**\n * Prefix all CSS selectors with the given selector\n *\n * This is meant to be relatively simple and might not cover advanced CSS syntax\n */\nexport function prefixCss(prefix: string, css: string): string {\n prefix = '\\n' + prefix + ' ';\n\n return css\n .replace(/([^{}]*){/gs, selectors =>\n selectors\n .split(',')\n .map(selector => {\n if (selector.trim().startsWith('@media')) {\n return selector.trim();\n } else {\n return prefix + selector.trim();\n }\n })\n .join(','),\n )\n .trim();\n}\n\nlet uniqueId = 0;\nlet componentCount = 0;\n\n/**\n * Inject custom CSS into component and scope the CSS only to this component\n *\n * Usage :\n *\n * ```html\n * <div [naturalCustomCss]=\".my-class {background: red}\">\n * <p class=\"my-class\">foo bar</p>\n * </div>\n * ```\n */\n@Directive({\n selector: '[naturalCustomCss]',\n standalone: true,\n})\nexport class NaturalCustomCssDirective implements OnDestroy {\n private style: HTMLStyleElement | null = null;\n\n @HostBinding('attr.data-natural-id') private readonly id = 'n' + ++uniqueId;\n\n @Input({required: true})\n public set naturalCustomCss(value: string | undefined) {\n if (value && !this.style) {\n this.style = this.document.createElement('style');\n this.document.head.appendChild(this.style);\n }\n\n if (this.style) {\n this.style.innerHTML = value ? prefixCss(`[data-natural-id=${this.id}]`, value) : '';\n }\n }\n\n public constructor(@Inject(DOCUMENT) private readonly document: Document) {}\n\n public ngOnDestroy(): void {\n this.style?.remove();\n\n // Reset uniqueId if we have no component alive anymore, so that we never reach max int\n componentCount--;\n if (componentCount <= 0) {\n uniqueId = 0;\n }\n }\n}\n","import {Decoration, DecorationSet, EditorView} from 'prosemirror-view';\nimport {EditorState, Plugin} from 'prosemirror-state';\nimport {Observable} from 'rxjs';\nimport {Schema} from 'prosemirror-model';\nimport {Inject, Injectable} from '@angular/core';\nimport {DOCUMENT} from '@angular/common';\n\nexport type ImageUploader = (file: File) => Observable<string>;\n\n@Injectable({providedIn: 'root'})\nexport class ImagePlugin {\n public readonly plugin: Plugin<DecorationSet>;\n\n public constructor(@Inject(DOCUMENT) document: Document) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const self = this;\n this.plugin = new Plugin<DecorationSet>({\n state: {\n init(): DecorationSet {\n return DecorationSet.empty;\n },\n apply(tr, set): DecorationSet {\n // Adjust decoration positions to changes made by the transaction\n set = set.map(tr.mapping, tr.doc);\n\n // See if the transaction adds or removes any placeholders\n const action = tr.getMeta(self.plugin);\n if (action?.add) {\n const widget = document.createElement('placeholder');\n const deco = Decoration.widget(action.add.pos, widget, {id: action.add.id});\n set = set.add(tr.doc, [deco]);\n } else if (action?.remove) {\n set = set.remove(set.find(undefined, undefined, spec => spec.id === action.remove.id));\n }\n\n return set;\n },\n },\n props: {\n decorations(state: EditorState): DecorationSet | undefined {\n return this.getState(state);\n },\n },\n });\n }\n\n private findPlaceholder(state: EditorState, id: Record<string, never>): number | null {\n const decorators = this.plugin.getState(state);\n const found = decorators?.find(undefined, undefined, spec => spec.id === id);\n return found?.length ? found[0].from : null;\n }\n\n public startImageUpload(view: EditorView, file: File, uploader: ImageUploader, schema: Schema): void {\n // A fresh object to act as the ID for this upload\n const id = {};\n\n // Replace the selection with a placeholder\n const tr = view.state.tr;\n if (!tr.selection.empty) {\n tr.deleteSelection();\n }\n\n tr.setMeta(this.plugin, {add: {id, pos: tr.selection.from}});\n view.dispatch(tr);\n\n uploader(file).subscribe({\n next: url => {\n const pos = this.findPlaceholder(view.state, id);\n // If the content around the placeholder has been deleted, drop\n // the image\n if (pos === null) {\n return;\n }\n\n // Otherwise, insert it at the placeholder's position, and remove\n // the placeholder\n view.dispatch(\n view.state.tr\n .replaceWith(pos, pos, schema.nodes.image.create({src: url}))\n .setMeta(this.plugin, {remove: {id}}),\n );\n },\n error: () => {\n // On failure, just clean up the placeholder\n view?.dispatch(tr.setMeta(this.plugin, {remove: {id}}));\n },\n });\n }\n}\n","import {NodeSpec} from 'prosemirror-model';\n\nconst ALIGN_PATTERN = /(left|right|center|justify)/;\ntype Attributes = {\n align: null | string;\n class: string;\n id: string;\n};\n\n/**\n * A plain paragraph textblock. Represented in the DOM\n * as a `<p>` element.\n *\n * https://github.com/ProseMirror/prosemirror-schema-basic/blob/master/src/schema-basic.js\n */\nexport const paragraphWithAlignment: NodeSpec = {\n attrs: {\n align: {default: null},\n class: {default: null},\n id: {default: null},\n },\n content: 'inline*',\n group: 'block',\n parseDOM: [\n {\n tag: 'p',\n getAttrs: (dom: Node | string): null | Attributes => {\n if (!(dom instanceof HTMLElement)) {\n return null;\n }\n\n const {textAlign} = dom.style;\n\n let align: string | null = dom.getAttribute('align') || textAlign || '';\n align = ALIGN_PATTERN.test(align) ? align : null;\n\n const id = dom.getAttribute('id') || '';\n\n return {align, class: dom.className, id};\n },\n },\n ],\n toDOM: node => {\n const {align, id} = node.attrs;\n const attrs: Record<string, string> = {};\n\n let style = '';\n if (align && align !== 'left') {\n style += `text-align: ${align};`;\n }\n\n if (style) {\n attrs.style = style;\n }\n\n if (id) {\n attrs.id = id;\n }\n\n if (node.attrs.class) {\n attrs.class = node.attrs.class;\n }\n\n return ['p', attrs, 0];\n },\n};\n","import {Attrs, NodeSpec} from 'prosemirror-model';\n\ntype Attributes = {\n class: string;\n id: null | string;\n level: number;\n};\n\nconst getAttrsForLevel = function (level: number): (node: HTMLElement | string) => Attrs | false | null {\n return (dom: Node | string): null | Attributes => {\n if (!(dom instanceof HTMLElement)) {\n return null;\n }\n const id = dom.getAttribute('id') || null;\n const attrs: Attributes = {level: level, class: dom.className, id: id};\n\n return attrs;\n };\n};\n\n/**\n * A heading textblock, with a `level` attribute that should hold the number 1 to 6,\n * with optional ID and class attributes. Parsed and serialized as `<h1>` to <h6>`\n *\n * https://github.com/ProseMirror/prosemirror-schema-basic/blob/master/src/schema-basic.js\n */\nexport const heading: NodeSpec = {\n attrs: {\n level: {default: 1},\n class: {default: null},\n id: {default: null},\n },\n content: 'inline*',\n group: 'block',\n defining: true,\n parseDOM: [\n {\n tag: 'h1',\n getAttrs: getAttrsForLevel(1),\n },\n {\n tag: 'h2',\n getAttrs: getAttrsForLevel(2),\n },\n {\n tag: 'h3',\n getAttrs: getAttrsForLevel(3),\n },\n {\n tag: 'h4',\n getAttrs: getAttrsForLevel(4),\n },\n {\n tag: 'h5',\n getAttrs: getAttrsForLevel(5),\n },\n {\n tag: 'h6',\n getAttrs: getAttrsForLevel(6),\n },\n ],\n toDOM: node => {\n const {id} = node.attrs;\n const attrs: Record<string, string> = {};\n\n if (id) {\n attrs.id = id;\n }\n\n if (node.attrs.class) {\n attrs.class = node.attrs.class;\n }\n\n return ['h' + node.attrs.level, attrs, 0];\n },\n};\n","import {MutableAttrs, TableNodes, TableNodesOptions} from 'prosemirror-tables';\nimport {Attrs, Node as ProsemirrorNode} from 'prosemirror-model';\n\ntype CellAttributes = TableNodesOptions['cellAttributes'];\n\nfunction getCellAttrs(dom: Node | string, extraAttrs: CellAttributes): null | Attrs {\n if (!(dom instanceof HTMLElement)) {\n return null;\n }\n\n const widthAttr = dom.getAttribute('data-colwidth');\n const widths = widthAttr && /^\\d+(,\\d+)*$/.test(widthAttr) ? widthAttr.split(',').map(s => Number(s)) : null;\n const colspan = Number(dom.getAttribute('colspan') || 1);\n const result: MutableAttrs = {\n colspan,\n rowspan: Number(dom.getAttribute('rowspan') || 1),\n colwidth: widths && widths.length == colspan ? widths : null,\n };\n\n for (const prop in extraAttrs) {\n const getter = extraAttrs[prop].getFromDOM;\n const value = getter?.(dom);\n if (value != null) result[prop] = value;\n }\n\n return result;\n}\n\nfunction setCellAttrs(node: ProsemirrorNode, extraAttrs: CellAttributes): undefined | Record<string, string> {\n const attrs: Record<string, string> = {};\n if (node.attrs.colspan != 1) attrs.colspan = node.attrs.colspan;\n if (node.attrs.rowspan != 1) attrs.rowspan = node.attrs.rowspan;\n if (node.attrs.colwidth) attrs['data-colwidth'] = node.attrs.colwidth.join(',');\n\n for (const prop in extraAttrs) {\n const setter = extraAttrs[prop].setDOMAttr;\n if (setter) setter(node.attrs[prop], attrs);\n }\n\n return attrs;\n}\n\n/**\n * This function creates a set of [node\n * specs](http://prosemirror.net/docs/ref/#model.SchemaSpec.nodes) for\n * `table`, `table_row`, and `table_cell` nodes types.\n *\n * It is very directly inspired by prosemirror-table\n */\nexport function tableNodes(options: TableNodesOptions): TableNodes {\n const extraAttrs = options.cellAttributes || {};\n const cellAttrs: CellAttributes = {\n colspan: {default: 1},\n rowspan: {default: 1},\n colwidth: {default: null},\n };\n\n for (const prop in extraAttrs) {\n cellAttrs[prop] = {\n default: extraAttrs[prop].default,\n };\n }\n\n return {\n table: {\n attrs: {\n class: {default: null},\n id: {default: ''},\n },\n content: 'table_row+',\n tableRole: 'table',\n isolating: true,\n group: options.tableGroup,\n parseDOM: [\n {\n tag: 'table',\n getAttrs: (dom: Node | string): null | Attrs => {\n if (!(dom instanceof HTMLElement)) {\n return null;\n }\n\n return {\n class: dom.className,\n id: dom.id,\n };\n },\n },\n ],\n toDOM: node => {\n const attrs: Record<string, string> = {};\n if (node.attrs.class) {\n attrs.class = node.attrs.class;\n }\n if (node.attrs.id) {\n attrs.id = node.attrs.id;\n }\n\n return ['table', attrs, ['tbody', 0]];\n },\n },\n table_row: {\n content: '(table_cell | table_header)*',\n tableRole: 'row',\n parseDOM: [{tag: 'tr'}],\n toDOM: () => {\n return ['tr', 0];\n },\n },\n table_cell: {\n content: options.cellContent,\n attrs: cellAttrs,\n tableRole: 'cell',\n isolating: true,\n parseDOM: [{tag: 'td', getAttrs: dom => getCellAttrs(dom, extraAttrs)}],\n toDOM: node => {\n return ['td', setCellAttrs(node, extraAttrs), 0];\n },\n },\n table_header: {\n content: options.cellContent,\n attrs: cellAttrs,\n tableRole: 'header_cell',\n isolating: true,\n parseDOM: [{tag: 'th', getAttrs: dom => getCellAttrs(dom, extraAttrs)}],\n toDOM: node => {\n return ['th', setCellAttrs(node, extraAttrs), 0];\n },\n },\n };\n}\n","import {marks, nodes} from 'prosemirror-schema-basic';\nimport {addListNodes} from 'prosemirror-schema-list';\nimport {Schema} from 'prosemirror-model';\nimport {paragraphWithAlignment} from './paragraph-with-alignment';\nimport {heading} from './heading';\nimport {tableNodes} from './table';\n\n// Keep only basic elements\ntype BasicNodes = Omit<typeof nodes, 'image' | 'code_block' | 'blockquote' | 'horizontal_rule'>;\nconst basicNodes: BasicNodes = {\n doc: nodes.doc,\n paragraph: nodes.paragraph,\n heading: nodes.heading,\n text: nodes.text,\n hard_break: nodes.hard_break,\n};\n\ntype BasicMarks = Omit<typeof marks, 'code'>;\nconst basicMarks: BasicMarks = {\n link: marks.link,\n em: marks.em,\n strong: marks.strong,\n};\n\nconst tmpSchema = new Schema({nodes: basicNodes, marks: basicMarks});\n\nexport const basicSchema = new Schema({\n nodes: addListNodes(tmpSchema.spec.nodes, 'paragraph block*', 'block'),\n marks: tmpSchema.spec.marks,\n});\n\nconst tmpSchema2 = new Schema({\n nodes: {\n ...nodes,\n heading: heading,\n ...tableNodes({\n tableGroup: 'block',\n cellContent: 'block+',\n cellAttributes: {\n background: {\n default: null,\n getFromDOM(dom) {\n return dom.style.backgroundColor || null;\n },\n setDOMAttr(value, attrs) {\n if (typeof value === 'string' && value) {\n attrs.style = ((attrs.style as string) || '') + `background-color: ${value};`;\n }\n },\n },\n },\n }),\n paragraph: paragraphWithAlignment,\n },\n marks: basicMarks,\n});\n\nexport const advancedSchema = new Schema({\n nodes: addListNodes(tmpSchema2.spec.nodes, 'paragraph block*', 'block'),\n marks: basicMarks,\n});\n","import {MenuItemSpec} from 'prosemirror-menu';\nimport {EditorState} from 'prosemirror-state';\nimport {EditorView} from 'prosemirror-view';\n\n/**\n * One item of the menu.\n *\n * This is the equivalent of `MenuItem` but without all the rendering logic since we use Angular\n * templates for rendering. Also it caches the state of the item everytime the editor state changes,\n * so Angular can query the state as often as needed without performance hit.\n */\nexport class Item {\n /**\n * Whether the item is 'active' (for example, the item for toggling the strong mark might be active when the cursor is in strong text).\n */\n public active = false;\n\n /**\n * Button is shown but disabled, because the item cannot be (un-)applied\n */\n public disabled = false;\n\n /**\n * Whether the item is shown at the moment\n */\n public show = true;\n\n public constructor(public readonly spec: MenuItemSpec) {}\n\n /**\n * Update the item state according to the editor state\n */\n public update(view: EditorView, state: EditorState): void {\n if (this.spec.active) {\n this.active = this.spec.active(state);\n }\n\n if (this.spec.enable) {\n this.disabled = !this.spec.enable(state);\n }\n\n if (this.spec.select) {\n this.show = this.spec.select(state);\n }\n }\n}\n","import {Node, NodeType, Schema} from 'prosemirror-model';\nimport {AllSelection, TextSelection, Transaction} from 'prosemirror-state';\nimport {Item} from './item';\n\ntype Alignment = 'left' | 'right' | 'center' | 'justify';\n\nfunction setTextAlign(tr: Transaction, schema: Schema, alignment: null | Alignment): Transaction {\n const {selection, doc} = tr;\n if (!selection || !doc) {\n return tr;\n }\n const {from, to} = selection;\n const {nodes} = schema;\n\n const tasks: {\n node: Node;\n pos: number;\n nodeType: NodeType;\n }[] = [];\n\n alignment = alignment || null;\n\n const allowedNodeTypes = new Set([\n nodes.paragraph,\n // nodes['blockquote'],\n // nodes['listItem'],\n // nodes['heading'],\n ]);\n\n doc.nodesBetween(from, to, (node, pos) => {\n const nodeType = node.type;\n const align = node.attrs.align || null;\n if (align !== alignment && allowedNodeTypes.has(nodeType)) {\n tasks.push({\n node,\n pos,\n nodeType,\n });\n }\n return true;\n });\n\n if (!tasks.length) {\n return tr;\n }\n\n tasks.forEach(job => {\n const {node, pos, nodeType} = job;\n const newAttrs = {\n ...node.attrs,\n align: alignment ? alignment : null,\n };\n\n tr = tr.setNodeMarkup(pos, nodeType, newAttrs, node.marks);\n });\n\n return tr;\n}\n\nexport class TextAlignItem extends Item {\n public constructor(alignment: Alignment) {\n super({\n active: state => {\n const {selection, doc} = state;\n const {from, to} = selection;\n let keepLooking = true;\n let active = false;\n doc.nodesBetween(from, to, node => {\n if (keepLooking && node.attrs.align === alignment) {\n keepLooking = false;\n active = true;\n }\n return keepLooking;\n });\n\n return active;\n },\n\n enable: state => {\n const {selection} = state;\n return selection instanceof TextSelection || selection instanceof AllSelection;\n },\n\n run: (state, dispatch): boolean => {\n const {schema, selection} = state;\n\n const tr = setTextAlign(state.tr.setSelection(selection), schema, this.active ? null : alignment);\n if (tr.docChanged) {\n dispatch?.(tr);\n return true;\n } else {\n return false;\n }\n },\n });\n }\n}\n","import {Component, Inject} from '@angular/core';\nimport {MAT_DIALOG_DATA, MatDialogRef, MatDialogModule} from '@angular/material/dialog';\nimport {FormControl, FormGroup, Validators, FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport {ifValid} from '@ecodev/natural';\nimport {MatInputModule} from '@angular/material/input';\nimport {MatFormFieldModule} from '@angular/material/form-field';\nimport {NaturalIconDirective} from '@ecodev/natural';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatButtonModule} from '@angular/material/button';\n\nexport type ColorDialogData = {\n /**\n * Empty string means no color set at all. Anything else must be a valid CSS color in hexa format.\n *\n * Eg:\n *\n * - `\"\"`\n * - `\"#ff4000\"`\n */\n color: string;\n};\n\n@Component({\n templateUrl: './color-dialog.component.html',\n styleUrl: './color-dialog.component.scss',\n standalone: true,\n imports: [\n MatDialogModule,\n FormsModule,\n ReactiveFormsModule,\n MatButtonModule,\n MatIconModule,\n NaturalIconDirective,\n MatFormFieldModule,\n MatInputModule,\n ],\n})\nexport class ColorDialogComponent {\n public readonly colors: string[][] = [\n [\n '#000000',\n '#111111',\n '#1c1c1c',\n '#333333',\n '#666666',\n '#808080',\n '#999999',\n '#b2b2b2',\n '#cccccc',\n '#dddddd',\n '#eeeeee',\n '#ffffff',\n ],\n [\n '#ffff00',\n '#ffbf00',\n '#ff8000',\n '#ff4000',\n '#ff0000',\n '#bf0041',\n '#800080',\n '#55308d',\n '#2a6099',\n '#158466',\n '#00a933',\n '#81d41a',\n ],\n [\n '#ffffd7',\n '#fff5ce',\n '#ffdbb6',\n '#ffd8ce',\n '#ffd7d7',\n '#f7d1d5',\n '#e0c2cd',\n '#dedce6',\n '#dee6ef',\n '#dee7e5',\n '#dde8cb',\n '#f6f9d4',\n ],\n [\n '#ffffa6',\n '#ffe994',\n '#ffb66c',\n '#ffaa95',\n '#ffa6a6',\n '#ec9ba4',\n '#bf819e',\n '#b7b3ca',\n '#b4c7dc',\n '#b3cac7',\n '#afd095',\n '#e8f2a1',\n ],\n [\n '#ffff6d',\n '#ffde59',\n '#ff972f',\n '#ff7b59',\n '#ff6d6d',\n '#e16173',\n '#a1467e',\n '#8e86ae',\n '#729fcf',\n '#81aca6',\n '#77bc65',\n '#d4ea6b',\n ],\n [\n '#ffff38',\n '#ffd428',\n '#ff860d',\n '#ff5429',\n '#ff3838',\n '#d62e4e',\n '#8d1d75',\n '#6b5e9b',\n '#5983b0',\n '#50938a',\n '#3faf46',\n '#bbe33d',\n ],\n [\n '#e6e905',\n '#e8a202',\n '#ea7500',\n '#ed4c05',\n '#f10d0c',\n '#a7074b',\n '#780373',\n '#5b277d',\n '#3465a4',\n '#168253',\n '#069a2e',\n '#5eb91e',\n ],\n [\n '#acb20c',\n '#b47804',\n '#b85c00',\n '#be480a',\n '#c9211e',\n '#861141',\n '#650953',\n '#55215b',\n '#355269',\n '#1e6a39',\n '#127622',\n '#468a1a',\n ],\n [\n '#706e0c',\n '#784b04',\n '#7b3d00',\n '#813709',\n '#8d281e',\n '#611729',\n '#4e102d',\n '#481d32',\n '#383d3c',\n '#28471f',\n '#224b12',\n '#395511',\n ],\n [\n '#443205',\n '#472702',\n '#492300',\n '#4b2204',\n '#50200c',\n '#41190d',\n '#3b160e',\n '#3a1a0f',\n '#362413',\n '#302709',\n '#2e2706',\n '#342a06',\n ],\n ];\n\n public readonly colorControl = new FormControl('', {\n validators: Validators.pattern(/^#\\p{Hex_Digit}{6}/u),\n nonNullable: true,\n });\n public readonly form = new FormGroup({\n color: this.colorControl,\n });\n\n public constructor(\n @Inject(MAT_DIALOG_DATA) data: ColorDialogData,\n private dialogRef: MatDialogRef<ColorDialogComponent, ColorDialogData>,\n ) {\n this.form.setValue(data);\n }\n\n public maybeConfirm(): void {\n ifValid(this.form).subscribe(() => this.confirm());\n }\n\n private confirm(): void {\n this.dialogRef.close(this.form.getRawValue());\n }\n\n public selectColor(color: string): void {\n this.colorControl.setValue(color);\n this.maybeConfirm();\n }\n}\n","<h2 i18n mat-dialog-title>Sélectionner une couleur</h2>\n\n<mat-dialog-content [formGroup]=\"form\">\n <div>\n @for (row of colors; track row) {\n <div>\n @for (color of row; track color) {\n <div class=\"color\" [style]=\"{backgroundColor: color}\" (click)=\"selectColor(color)\"> </div>\n }\n </div>\n }\n </div>\n\n <div>\n <button mat-button (click)=\"selectColor('')\">\n <mat-icon naturalIcon=\"format_color_reset\" />\n <span i18n>Transparent</span></button\n >\n </div>\n\n <mat-form-field>\n <mat-label i18n>Couleur</mat-label>\n <input matInput [formControl]=\"colorControl\" (keydown.enter)=\"maybeConfirm()\" cdkFocusInitial />\n <div\n class=\"sample\"\n matTextSuffix\n [style]=\"{backgroundColor: colorControl.valid ? colorControl.value : ''}\"\n ></div>\n @if (colorControl.hasError('pattern')) {\n <mat-error i18n>Doit être le format hexadecimal. Par exemple: #ff4000 </mat-error>\n }\n </mat-form-field>\n</mat-dialog-content>\n\n<mat-dialog-actions align=\"end\">\n <button mat-button mat-dialog-close i18n>Annuler</button>\n <button mat-stroked-button (click)=\"maybeConfirm()\" [disabled]=\"!form.valid\"><span i18n>Valider</span></button>\n</mat-dialog-actions>\n","import {EditorState, Transaction} from 'prosemirror-state';\nimport {CellSelection, isInTable, selectionCell, setCellAttr} from 'prosemirror-tables';\nimport {EditorView} from 'prosemirror-view';\nimport {Item} from './item';\nimport {MatDialog} from '@angular/material/dialog';\nimport {ColorDialogComponent, ColorDialogData} from '../../color-dialog/color-dialog.component';\n\nconst setCellBackgroundColor = setCellAttr.bind(null, 'background');\n\nfunction findFirstClassInSelection(state: EditorState): string {\n if (!isInTable(state)) {\n return '';\n }\n\n // For single cell selection\n const $cell = selectionCell(state);\n let foundColor: string = $cell?.nodeAfter?.attrs.background ?? '';\n if (foundColor) {\n return foundColor;\n }\n\n // For multiple cells selection\n let keepLooking = true;\n if (state.selection instanceof CellSelection) {\n state.selection.forEachCell(node => {\n const color = node.attrs.background;\n if (keepLooking && color) {\n keepLooking = false;\n foundColor = color;\n }\n });\n }\n\n return foundColor;\n}\n\nexport class CellBackgroundColorItem extends Item {\n public constructor(dialog: MatDialog) {\n super({\n enable(state: EditorState): boolean {\n // Pretend to set a unique color that is not already set, to test if we can any color at all\n const cmd = setCellBackgroundColor('#000001');\n\n return cmd(state);\n },\n run(state: EditorState, dispatch: (p: Transaction) => void, view: EditorView): void {\n dialog\n .open<ColorDialogComponent, ColorDialogData, ColorDialogData>(ColorDialogComponent, {\n data: {\n color: findFirstClassInSelection(state),\n },\n })\n .afterClosed()\n .subscribe(result => {\n if (dispatch && result) {\n const cmd = setCellBackgroundColor(result.color);\n cmd(state, dispatch);\n }\n\n view.focus();\n });\n },\n });\n }\n}\n","import {Component, Inject} from '@angular/core';\nimport {MAT_DIALOG_DATA, MatDialogRef, MatDialogModule} from '@angular/material/dialog';\nimport {FormControl, FormGroup, Validators, FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport {ifValid} from '@ecodev/natural';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatInputModule} from '@angular/material/input';\nimport {MatFormFieldModule} from '@angular/material/form-field';\n\nexport type LinkDialogData = {\n href: string;\n title?: string;\n};\n\n@Component({\n templateUrl: './link-dialog.component.html',\n styleUrl: './link-dialog.component.scss',\n standalone: true,\n imports: [MatDialogModule, FormsModule, ReactiveFormsModule, MatFormFieldModule, MatInputModule, MatButtonModule],\n})\nexport class LinkDialogComponent {\n public readonly hrefControl = new FormControl('', {validators: Validators.required, nonNullable: true});\n public readonly titleControl = new FormControl('', {nonNullable: true});\n public readonly form = new FormGroup({\n href: this.hrefControl,\n title: this.titleControl,\n });\n\n public constructor(\n @Inject(MAT_DIALOG_DATA) data: LinkDialogData,\n private dialogRef: MatDialogRef<LinkDialogComponent, LinkDialogData>,\n ) {\n this.form.setValue({title: '', ...data});\n }\n\n public maybeConfirm(): void {\n ifValid(this.form).subscribe(() => this.confirm());\n }\n\n private confirm(): void {\n this.dialogRef.close(this.form.getRawValue());\n }\n}\n","<h2 i18n mat-dialog-title>Insérer un lien</h2>\n\n<mat-dialog-content [formGroup]=\"form\">\n <mat-form-field>\n <mat-label i18n>URL</mat-label>\n <input matInput [formControl]=\"hrefControl\" (keydown.enter)=\"maybeConfirm()\" />\n @if (hrefControl.hasError('required')) {\n <mat-error i18n>Ce champ est requis</mat-error>\n }\n </mat-form-field>\n <mat-form-field>\n <mat-label i18n>Titre</mat-label>\n <input matInput [formControl]=\"titleControl\" (keydown.enter)=\"maybeConfirm()\" />\n </mat-form-field>\n</mat-dialog-content>\n\n<mat-dialog-actions align=\"end\">\n <button mat-button mat-dialog-close i18n>Annuler</button>\n <button mat-stroked-button (click)=\"maybeConfirm()\" [disabled]=\"!form.valid\"><span i18n>Valider</span></button>\n</mat-dialog-actions>\n","import {Command, EditorState} from 'prosemirror-state';\nimport {MarkType} from 'prosemirror-model';\nimport {MenuItem, MenuItemSpec} from 'prosemirror-menu';\nimport {Item} from './item';\nimport {toggleMark} from 'prosemirror-commands';\n\nexport function markActive(state: EditorState, type: MarkType): boolean {\n const {from, $from, to, empty} = state.selection;\n if (empty) {\n return !!type.isInSet(state.storedMarks || $from.marks());\n } else {\n return state.doc.rangeHasMark(from, to, type);\n }\n}\n\n/**\n * Convert built-in `MenuItem` into our Angular specific `Item`\n */\nexport function menuItemToItem(item: MenuItem): Item {\n return new Item(item.spec);\n}\n\n/**\n * From a `Command`, creates a new `Item` that will have an automatic `enable` spec\n */\nexport function cmdToItem(cmd: Command, options: Partial<MenuItemSpec> = {}): Item {\n const passedOptions: MenuItemSpec = {\n run: cmd,\n ...options,\n };\n\n if (!options.enable && !options.select) {\n passedOptions.enable = state => cmd(state);\n }\n\n return new Item(passedOptions);\n}\n\n/**\n * From a `MarkType`, creates a new `Item` that will have an automatic `active` and `enable` spec\n */\nexport function markTypeToItem(markType: MarkType): Item {\n return cmdToItem(toggleMark(markType), {\n active(state: EditorState): boolean {\n return markActive(state, markType);\n },\n });\n}\n\nexport function selectionContainsNodeType(state: EditorState, allowedNodeTypes: string[]): boolean {\n const {selection, doc} = state;\n const {from, to} = selection;\n let keepLooking = true;\n let found = false;\n\n doc.nodesBetween(from, to, node => {\n if (keepLooking && allowedNodeTypes.includes(node.type.name)) {\n keepLooking = false;\n found = true;\n }\n\n return keepLooking;\n });\n\n return found;\n}\n","import {Item} from './item';\nimport {MarkType} from 'prosemirror-model';\nimport {MatDialog} from '@angular/material/dialog';\nimport {EditorState, Transaction} from 'prosemirror-state';\nimport {EditorView} from 'prosemirror-view';\nimport {toggleMark} from 'prosemirror-commands';\nimport {LinkDialogComponent, LinkDialogData} from '../../link-dialog/link-dialog.component';\nimport {markActive} from './utils';\n\nexport class LinkItem extends Item {\n public constructor(markType: MarkType, dialog: MatDialog) {\n super({\n active(state: EditorState): boolean {\n return markActive(state, markType);\n },\n enable(state: EditorState): boolean {\n return !state.selection.empty;\n },\n run(state: EditorState, dispatch: (p: Transaction) => void, view: EditorView): void {\n if (markActive(state, markType)) {\n toggleMark(markType)(state, dispatch);\n return;\n }\n\n dialog\n .open<LinkDialogComponent, LinkDialogData, LinkDialogData>(LinkDialogComponent, {\n data: {\n href: '',\n title: '',\n },\n })\n .afterClosed()\n .subscribe(result => {\n if (result) {\n if (!result.title) {\n delete result.title;\n }\n\n toggleMark(markType, result)(view.state, view.dispatch);\n }\n\n view.focus();\n });\n },\n });\n }\n}\n","import {Item} from './item';\nimport {EditorState} from 'prosemirror-state';\nimport {NodeType} from 'prosemirror-model';\n\nfunction canInsert(state: EditorState, nodeType: NodeType): boolean {\n const $from = state.selection.$from;\n for (let d = $from.depth; d >= 0; d--) {\n const index = $from.index(d);\n if ($from.node(d).canReplaceWith(index, index, nodeType)) {\n return true;\n }\n }\n\n return false;\n}\n\nexport class HorizontalRuleItem extends Item {\n public constructor(hr: NodeType) {\n super({\n enable(state): boolean {\n return canInsert(state, hr);\n },\n run(state, dispatch): void {\n dispatch(state.tr.replaceSelectionWith(hr.create()));\n },\n });\n }\n}\n","import {NodeType} from 'prosemirror-model';\nimport {Item} from './item';\nimport {wrapInList} from 'prosemirror-schema-list';\nimport {cmdToItem} from './utils';\n\nexport function wrapListItem(nodeType: NodeType): Item {\n return cmdToItem(wrapInList(nodeType));\n}\n","import {Component, Inject} from '@angular/core';\nimport {MAT_DIALOG_DATA, MatDialogRef, MatDialogModule} from '@angular/material/dialog';\nimport {FormControl, FormGroup, Validators, FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport {ifValid} from '@ecodev/natural';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatInputModule} from '@angular/material/input';\nimport {MatFormFieldModule} from '@angular/material/form-field';\n\nexport type ClassDialogData = {\n /**\n * CSS class names\n *\n * Eg:\n *\n * - `\"\"`\n * - `\"my-class my-other-class\"`\n */\n class: string;\n};\n\n@Component({\n templateUrl: './class-dialog.component.html',\n styleUrl: './class-dialog.component.scss',\n standalone: true,\n imports: [MatDialogModule, FormsModule, ReactiveFormsModule, MatFormFieldModule, MatInputModule, MatButtonModule],\n})\nexport class ClassDialogComponent {\n public readonly classControl = new FormControl('', {\n validators: Validators.pattern(/(^\\s*(-?[_a-zA-Z]+[_a-zA-Z0-9-]*\\s*)+)/),\n nonNullable: true,\n });\n public readonly form = new FormGroup({\n class: this.classControl,\n });\n\n public constructor(\n @Inject(MAT_DIALOG_DATA) data: ClassDialogData,\n private dialogRef: MatDialogRef<ClassDialogComponent, ClassDialogData>,\n ) {\n this.form.setValue(data);\n }\n\n public maybeConfirm(): void {\n ifValid(this.form).subscribe(() => this.confirm());\n }\n\n private confirm(): void {\n this.dialogRef.close(this.form.getRawValue());\n }\n}\n","<h2 i18n mat-dialog-title>Saisir les classes CSS</h2>\n\n<mat-dialog-content [formGroup]=\"form\">\n <mat-form-field>\n <mat-label i18n>Classes CSS</mat-label>\n <input matInput [formControl]=\"classControl\" (keydown.enter)=\"maybeConfirm()\" cdkFocusInitial />\n @if (classControl.hasError('pattern')) {\n <mat-error i18n>Doit être un ou plusieurs nom de classe CSS</mat-error>\n }\n </mat-form-field>\n</mat-dialog-content>\n\n<mat-dialog-actions align=\"end\">\n <button mat-button mat-dialog-close i18n>Annuler</button>\n <button mat-stroked-button (click)=\"maybeConfirm()\" [disabled]=\"!form.valid\"><span i18n>Valider</span></button>\n</mat-dialog-actions>\n","import {Node, NodeType} from 'prosemirror-model';\nimport {EditorState, Transaction} from 'prosemirror-state';\nimport {Item} from './item';\nimport {selectionContainsNodeType} from './utils';\nimport {MatDialog} from '@angular/material/dialog';\nimport {ClassDialogComponent, ClassDialogData} from '../../class-dialog/class-dialog.component';\n\nfunction setClass(tr: Transaction, classValue: string, allowedNodeTypes: string[]): Transaction {\n const {selection, doc} = tr;\n if (!selection || !doc) {\n return tr;\n }\n const {from, to} = selection;\n\n const tasks: {\n node: Node;\n pos: number;\n nodeType: NodeType;\n }[] = [];\n\n doc.nodesBetween(from, to, (node, pos) => {\n const nodeType = node.type;\n const currentClass = node.attrs.class || null;\n if (currentClass !== classValue && allowedNodeTypes.includes(nodeType.name)) {\n tasks.push({\n node,\n pos,\n nodeType,\n });\n }\n return true;\n });\n\n if (!tasks.length) {\n return tr;\n }\n\n tasks.forEach(job => {\n const {node, pos, nodeType} = job;\n const newAttrs = {\n ...node.attrs,\n class: classValue ? classValue : null,\n };\n\n tr = tr.setNodeMarkup(pos, nodeType, newAttrs, node.marks);\n });\n\n return tr;\n}\n\n/**\n * Returns the first `class` attribute that is non-empty in the selection.\n * If not found, return empty string.\n */\nfunction findFirstClassInSelection(state: EditorState, allowedNodeTypes: string[]): string {\n const {selection, doc} = state;\n const {from, to} = selection;\n let keepLooking = true;\n let foundClass = '';\n\n doc.nodesBetween(from, to, node => {\n if (keepLooking && allowedNodeTypes.includes(node.type.name) && node.attrs.class) {\n keepLooking = false;\n foundClass = node.attrs.class;\n }\n\n return keepLooking;\n });\n\n return foundClass;\n}\n\nexport class ClassItem extends Item {\n public constructor(dialog: MatDialog, nodeTypes: string[]) {\n super({\n active: state => {\n return !!findFirstClassInSelection(state, nodeTypes);\n },\n\n enable: state => {\n return selectionContainsNodeType(state, nodeTypes);\n },\n\n run: (state, dispatch, view): void => {\n dialog\n .open<ClassDialogComponent, ClassDialogData, ClassDialogData>(ClassDialogComponent, {\n data: {\n class: findFirstClassInSelection(state, nodeTypes),\n },\n })\n .afterClosed()\n .subscribe(result => {\n if (dispatch && result) {\n const {selection} = state;\n\n const tr = setClass(state.tr.setSelection(selection), result.class, nodeTypes);\n if (tr.docChanged) {\n dispatch?.(tr);\n }\n }\n\n view.focus();\n });\n },\n });\n }\n}\n","import {Component, Inject} from '@angular/core';\nimport {MAT_DIALOG_DATA, MatDialogRef, MatDialogModule} from '@angular/material/dialog';\nimport {FormControl, FormGroup, Validators, FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport {ifValid} from '@ecodev/natural';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatInputModule} from '@angular/material/input';\nimport {MatFormFieldModule} from '@angular/material/form-field';\n\nexport type IdDialogData = {\n /**\n * ID name\n *\n * Eg:\n *\n * - `\"\"`\n * - `\"my-id\"`\n */\n id: string;\n};\n\n@Component({\n templateUrl: './id-dialog.component.html',\n styleUrl: './id-dialog.component.scss',\n standalone: true,\n imports: [MatDialogModule, FormsModule, ReactiveFormsModule, MatFormFieldModule, MatInputModule, MatButtonModule],\n})\nexport class IdDialogComponent {\n public readonly idControl = new FormControl('', {\n validators: Validators.pattern(/(^(-?[_a-zA-Z]+[_a-zA-Z0-9-]*)+)/),\n nonNullable: true,\n });\n public readonly form = new FormGroup({\n id: this.idControl,\n });\n\n public constructor(\n @Inject(MAT_DIALOG_DATA) data: IdDialogData,\n private dialogRef: MatDialogRef<IdDialogComponent, IdDialogData>,\n ) {\n this.form.setValue(data);\n }\n\n public maybeConfirm(): void {\n ifValid(this.form).subscribe(() => this.confirm());\n }\n\n private confirm(): void {\n this.dialogRef.close(this.form.getRawValue());\n }\n}\n","<h2 i18n mat-dialog-title>Saisir le ID</h2>\n\n<mat-dialog-content [formGroup]=\"form\">\n <mat-form-field>\n <mat-label i18n>ID</mat-label>\n <input matInput [formControl]=\"idControl\" (keydown.enter)=\"maybeConfirm()\" cdkFocusInitial />\n @if (idControl.hasError('pattern')) {\n <mat-error i18n>Doit être un ID valide</mat-error>\n }\n </mat-form-field>\n</mat-dialog-content>\n\n<mat-dialog-actions align=\"end\">\n <button mat-button mat-dialog-close i18n>Annuler</button>\n <button mat-stroked-button (click)=\"maybeConfirm()\" [disabled]=\"!form.valid\"><span i18n>Valider</span></button>\n</mat-dialog-actions>\n","import {Node, NodeType} from 'prosemirror-model';\nimport {EditorState, Transaction} from 'prosemirror-state';\nimport {Item} from './item';\nimport {selectionContainsNodeType} from './utils';\nimport {MatDialog} from '@angular/material/dialog';\nimport {IdDialogComponent, IdDialogData} from '../../id-dialog/id-dialog.component';\n\nfunction setId(tr: Transaction, idValue: string, allowedNodeTypes: string[]): Transaction {\n const {selection, doc} = tr;\n if (!selection || !doc) {\n return tr;\n }\n const {from, to} = selection;\n\n const tasks: {\n node: Node;\n pos: number;\n nodeType: NodeType;\n }[] = [];\n\n doc.nodesBetween(from, to, (node, pos) => {\n const nodeType = node.type;\n const currentId = node.attrs.id || null;\n if (currentId !== idValue && allowedNodeTypes.includes(nodeType.name)) {\n tasks.push({\n node,\n pos,\n nodeType,\n });\n }\n return true;\n });\n\n if (!tasks.length) {\n return tr;\n }\n\n tasks.forEach(job => {\n const {node, pos, nodeType} = job;\n const newAttrs = {\n ...node.attrs,\n id: idValue ? idValue : null,\n };\n\n tr = tr.setNodeMarkup(pos, nodeType, newAttrs, node.marks);\n });\n\n return tr;\n}\n\n/**\n * Returns the first `id` attribute that is non-empty in the selection.\n * If not found, return empty string.\n */\nfunction findFirstIdInSelection(state: EditorState, allowedNodeTypes: string[]): string {\n const {selection, doc} = state;\n const {from, to} = selection;\n let keepLooking = true;\n let foundId = '';\n\n doc.nodesBetween(from, to, node => {\n if (keepLooking && allowedNodeTypes.includes(node.type.name) && node.attrs.id) {\n keepLooking = false;\n foundId = node.attrs.id;\n }\n\n return keepLooking;\n });\n\n return foundId;\n}\n\nexport class IdItem extends Item {\n public constructor(dialog: MatDialog, nodeTypes: string[]) {\n super({\n active: state => {\n return !!findFirstIdInSelection(state, nodeTypes);\n },\n\n enable: state => {\n return selectionContainsNodeType(state, nodeTypes);\n },\n\n run: (state, dispatch, view): void => {\n dialog\n .open<IdDialogComponent, IdDialogData, IdDialogData>(IdDialogComponent, {\n data: {\n id: findFirstIdInSelection(state, nodeTypes),\n },\n })\n .afterClosed()\n .subscribe(result => {\n if (dispatch && result) {\n const {selection} = state;\n\n const tr = setId(state.tr.setSelection(selection), result.id, nodeTypes);\n if (tr.docChanged) {\n dispatch?.(tr);\n }\n }\n\n view.focus();\n });\n },\n });\n }\n}\n","import {EditorState, TextSelection, Transaction} from 'prosemirror-state';\nimport {Fragment, Node as ProsemirrorNode, NodeType} from 'prosemirror-model';\nimport {tableNodeTypes} from 'prosemirror-tables';\nimport {Item} from './item';\n\nfunction createCell(\n cellType: NodeType,\n cellContent?: Fragment | ProsemirrorNode | ProsemirrorNode[],\n): ProsemirrorNode | null | undefined {\n return cellContent ? cellType.createChecked(null, cellContent) : cellType.createAndFill();\n}\n\nfunction createTable(\n state: EditorState,\n rowsCount: number,\n colsCount: number,\n withHeaderRow: boolean,\n cellContent?: Fragment | ProsemirrorNode | ProsemirrorNode[],\n): ProsemirrorNode {\n const types = tableNodeTypes(state.schema);\n const headerCells = [];\n const cells = [];\n\n for (let index = 0; index < colsCount; index += 1) {\n const cell = createCell(types.cell, cellContent);\n\n if (cell) {\n cells.push(cell);\n }\n\n if (withHeaderRow) {\n const headerCell = createCell(types.header_cell, cellContent);\n\n if (headerCell) {\n headerCells.push(headerCell);\n }\n }\n }\n\n const rows = [];\n\n for (let index = 0; index < rowsCount; index += 1) {\n rows.push(types.row.createChecked(null, withHeaderRow && index === 0 ? headerCells : cells));\n }\n\n return types.table.createChecked(null, rows);\n}\n\nfunction addTable(\n state: EditorState,\n dispatch?: (tr: Transaction) => void,\n {\n rowsCount = 3,\n colsCount = 3,\n withHeaderRow = true,\n cellContent,\n }: {\n rowsCount?: number;\n colsCount?: number;\n withHeaderRow?: boolean;\n cellContent?: Fragment | ProsemirrorNode | ProsemirrorNode[];\n } = {},\n): void {\n const offset = state.tr.selection.anchor + 1;\n\n const nodes = createTable(state, rowsCount, colsCount, withHeaderRow, cellContent);\n const tr = state.tr.replaceSelectionWith(nodes).scrollIntoView();\n const resolvedPos = tr.doc.resolve(offset);\n\n // move cursor into table\n tr.setSelection(TextSelection.near(resolvedPos));\n\n dispatch?.(tr);\n}\n\nexport class AddTableItem extends Item {\n public constructor() {\n super({run: (editor, tr) => addTable(editor, tr)});\n }\n}\n","import {\n blockTypeItem,\n joinUpItem,\n liftItem,\n redoItem,\n selectParentNodeItem,\n undoItem,\n wrapItem,\n} from 'prosemirror-menu';\nimport {MarkType, NodeType, Schema} from 'prosemirror-model';\nimport {MatDialog} from '@angular/material/dialog';\nimport {\n addColumnAfter,\n addColumnBefore,\n addRowAfter,\n addRowBefore,\n deleteColumn,\n deleteRow,\n deleteTable,\n mergeCells,\n splitCell,\n toggleHeaderCell,\n toggleHeaderColumn,\n toggleHeaderRow,\n} from 'prosemirror-tables';\nimport {Item} from './items/item';\nimport {paragraphWithAlignment} from './schema/paragraph-with-alignment';\nimport {TextAlignItem} from './items/text-align-item';\nimport {CellBackgroundColorItem} from './items/cell-background-color-item';\nimport {LinkItem} from './items/link-item';\nimport {HorizontalRuleItem} from './items/horizontal-rule-item';\nimport {cmdToItem, markTypeToItem, menuItemToItem} from './items/utils';\nimport {wrapListItem} from './items/wrap-list-item';\nimport {ClassItem} from './items/class-item';\nimport {IdItem} from './items/id-item';\nimport {AddTableItem} from './items/table-item';\n\nexport type Key =\n | 'toggleStrong'\n | 'toggleEm'\n | 'toggleCode'\n | 'toggleLink'\n | 'wrapBulletList'\n | 'wrapOrderedList'\n | 'wrapBlockQuote'\n | 'makeParagraph'\n | 'makeCodeBlock'\n | 'makeHead1'\n | 'makeHead2'\n | 'makeHead3'\n | 'makeHead4'\n | 'makeHead5'\n | 'makeHead6'\n | 'alignLeft'\n | 'alignRight'\n | 'alignCenter'\n | 'alignJustify'\n | 'insertHorizontalRule'\n | 'joinUp'\n | 'lift'\n | 'selectParentNode'\n | 'undo'\n | 'redo'\n | 'insertTable'\n | 'addColumnBefore'\n | 'addColumnAfter'\n | 'deleteColumn'\n | 'addRowBefore'\n | 'addRowAfter'\n | 'deleteRow'\n | 'deleteTable'\n | 'mergeCells'\n | 'splitCell'\n | 'toggleHeaderColumn'\n | 'toggleHeaderRow'\n | 'toggleHeaderCell'\n | 'cellBackgroundColor'\n | 'tableClass'\n | 'tableId'\n | 'blockClass'\n | 'blockId';\n\nexport type MenuItems = Partial<Record<Key, Item>>;\n\n/**\n * Given a schema, look for default mark and node types in it and\n * return an object with relevant menu items relating to those marks:\n */\nexport function buildMenuItems(schema: Schema, dialog: MatDialog): MenuItems {\n const r: MenuItems = {\n joinUp: menuItemToItem(joinUpItem),\n lift: menuItemToItem(liftItem),\n selectParentNode: menuItemToItem(selectParentNodeItem),\n undo: menuItemToItem(undoItem),\n redo: menuItemToItem(redoItem),\n };\n\n let type: MarkType | NodeType | undefined;\n type = schema.marks.strong;\n if (type) {\n r.toggleStrong = markTypeToItem(type);\n }\n\n type = schema.marks.em;\n if (type) {\n r.toggleEm = markTypeToItem(type);\n }\n\n type = schema.marks.code;\n if (type) {\n r.toggleCode = markTypeToItem(type);\n }\n\n type = schema.marks.link;\n if (type) {\n r.toggleLink = new LinkItem(type, dialog);\n }\n\n type = schema.nodes.bullet_list;\n if (type) {\n r.wrapBulletList = wrapListItem(type);\n }\n\n type = schema.nodes.ordered_list;\n if (type) {\n r.wrapOrderedList = wrapListItem(type);\n }\n\n type = schema.nodes.blockquote;\n if (type) {\n r.wrapBlockQuote = menuItemToItem(wrapItem(type, {}));\n }\n\n type = schema.nodes.paragraph;\n if (type) {\n r.makeParagraph = menuItemToItem(blockTypeItem(type, {}));\n\n if (type.spec === paragraphWithAlignment) {\n r.alignLeft = new TextAlignItem('left');\n r.alignRight = new TextAlignItem('right');\n r.alignCenter = new TextAlignItem('center');\n r.alignJustify = new TextAlignItem('justify');\n }\n }\n\n type = schema.nodes.code_block;\n if (type) {\n r.makeCodeBlock = menuItemToItem(blockTypeItem(type, {}));\n }\n\n type = schema.nodes.heading;\n if (type) {\n r.makeHead1 = menuItemToItem(blockTypeItem(type, {attrs: {level: 1}}));\n r.makeHead2 = menuItemToItem(blockTypeItem(type, {attrs: {level: 2}}));\n r.makeHead3 = menuItemToItem(blockTypeItem(type, {attrs: {level: 3}}));\n r.makeHead4 = menuItemToItem(blockTypeItem(type, {attrs: {level: 4}}));\n r.makeHead5 = menuItemToItem(blockTypeItem(type, {attrs: {level: 5}}));\n r.makeHead6 = menuItemToItem(blockTypeItem(type, {attrs: {level: 6}}));\n }\n if (schema.nodes.paragraph?.spec === paragraphWithAlignment) {\n r.blockId = new IdItem(dialog, ['heading', 'paragraph']);\n r.blockClass = new ClassItem(dialog, ['heading', 'paragraph']);\n }\n\n type = schema.nodes.horizontal_rule;\n if (type) {\n r.insertHorizontalRule = new HorizontalRuleItem(type);\n }\n\n type = schema.nodes.table;\n if (type) {\n r.insertTable = new AddTableItem();\n r.addColumnBefore = cmdToItem(addColumnBefore);\n r.addColumnAfter = cmdToItem(addColumnAfter);\n r.deleteColumn = cmdToItem(deleteColumn);\n r.addRowBefore = cmdToItem(addRowBefore);\n r.addRowAfter = cmdToItem(addRowAfter);\n r.deleteRow = cmdToItem(deleteRow);\n r.deleteTable = cmdToItem(deleteTable);\n r.mergeCells = cmdToItem(mergeCells);\n r.splitCell = cmdToItem(splitCell);\n r.toggleHeaderColumn = cmdToItem(toggleHeaderColumn);\n r.toggleHeaderRow = cmdToItem(toggleHeaderRow);\n r.toggleHeaderCell = cmdToItem(toggleHeaderCell);\n r.cellBackgroundColor = new CellBackgroundColorItem(dialog);\n r.tableClass = new ClassItem(dialog, ['table']);\n r.tableId = new IdItem(dialog, ['table']);\n }\n\n return r;\n}\n","import {\n ellipsis,\n emDash,\n InputRule,\n inputRules,\n textblockTypeInputRule,\n wrappingInputRule,\n} from 'prosemirror-inputrules';\nimport {NodeType, Schema} from 'prosemirror-model';\nimport {Plugin} from 'prosemirror-state';\n\n/**\n * Given a blockquote node type, returns an input rule that turns `\"> \"`\n * at the start of a textblock into a blockquote.\n */\nfunction blockQuoteRule(nodeType: NodeType): InputRule {\n return wrappingInputRule(/^\\s*>\\s$/, nodeType);\n}\n\n/**\n * Given a list node type, returns an input rule that turns a number\n * followed by a dot at the start of a textblock into an ordered list.\n */\nfunction orderedListRule(nodeType: NodeType): InputRule {\n return wrappingInputRule(\n /^(\\d+)\\.\\s$/,\n nodeType,\n match => ({order: +match[1]}),\n (match, node) => node.childCount + node.attrs.order === +match[1],\n );\n}\n\n/**\n * Given a list node type, returns an input rule that turns a bullet\n * (dash, plush, or asterisk) at the start of a textblock into a\n * bullet list.\n */\nfunction bulletListRule(nodeType: NodeType): InputRule {\n return wrappingInputRule(/^\\s*([-+*])\\s$/, nodeType);\n}\n\n/**\n * Given a code block node type, returns an input rule that turns a\n * textblock starting with three backticks into a code block.\n */\nfunction codeBlockRule(nodeType: NodeType): InputRule {\n return textblockTypeInputRule(/^```$/, nodeType);\n}\n\n/**\n * Given a node type and a maximum level, creates an input rule that\n * turns up to that number of `#` characters followed by a space at\n * the start of a textblock into a heading whose level corresponds to\n * the number of `#` signs.\n */\nfunction headingRule(nodeType: NodeType, maxLevel: number): InputRule {\n return textblockTypeInputRule(new RegExp('^(#{1,' + maxLevel + '})\\\\s$'), nodeType, match => ({\n level: match[1].length,\n }));\n}\n\n/**\n * A set of input rules for creating the basic block quotes, lists,\n * code blocks, and heading.\n */\nexport function buildInputRules(schema: Schema): Plugin {\n const rules = [ellipsis, emDash];\n\n let type = schema.nodes.blockquote;\n if (type) {\n rules.push(blockQuoteRule(type));\n }\n\n type = schema.nodes.ordered_list;\n if (type) {\n rules.push(orderedListRule(type));\n }\n\n type = schema.nodes.bullet_list;\n if (type) {\n rules.push(bulletListRule(type));\n }\n\n type = schema.nodes.code_block;\n if (type) {\n rules.push(codeBlockRule(type));\n }\n\n type = schema.nodes.heading;\n if (type) {\n rules.push(headingRule(type, 6));\n }\n\n return inputRules({rules});\n}\n","import {\n chainCommands,\n exitCode,\n joinDown,\n joinUp,\n lift,\n selectParentNode,\n setBlockType,\n toggleMark,\n wrapIn,\n} from 'prosemirror-commands';\nimport {liftListItem, sinkListItem, splitListItem, wrapInList} from 'prosemirror-schema-list';\nimport {redo, undo} from 'prosemirror-history';\nimport {undoInputRule} from 'prosemirror-inputrules';\nimport {MarkType, NodeType, Schema} from 'prosemirror-model';\nimport {Command} from 'prosemirror-state';\n\ntype Keymap = Record<string, Command>;\n\n/**\n * Inspect the given schema looking for marks and nodes from the\n * basic schema, and if found, add key bindings related to them.\n * This will add:\n *\n * * **Mod-b** for toggling [strong](#schema-basic.StrongMark)\n * * **Mod-i** for toggling [emphasis](#schema-basic.EmMark)\n * * **Mod-`** for toggling [code font](#schema-basic.CodeMark)\n * * **Ctrl-Shift-0** for making the current textblock a paragraph\n * * **Ctrl-Shift-1** to **Ctrl-Shift-Digit6** for making the current\n * textblock a heading of the corresponding level\n * * **Ctrl-Shift-Backslash** to make the current textblock a code block\n * * **Ctrl-Shift-8** to wrap the selection in an ordered list\n * * **Ctrl-Shift-9** to wrap the selection in a bullet list\n * * **Ctrl->** to wrap the selection in a block quote\n * * **Enter** to split a non-empty textblock in a list item while at\n * the same time splitting the list item\n * * **Mod-Enter** to insert a hard break\n * * **Mod-_** to insert a horizontal rule\n * * **Backspace** to undo an input rule\n * * **Alt-ArrowUp** to `joinUp`\n * * **Alt-ArrowDown** to `joinDown`\n * * **Mod-BracketLeft** to `lift`\n * * **Escape** to `selectParentNode`\n *\n * You can suppress or map these bindings by passing a `mapKeys`\n * argument, which maps key names (say `\"Mod-B\"` to either `false`, to\n * remove the binding, or a new key name string.\n */\nexport function buildKeymap(schema: Schema, isMac: boolean): Keymap {\n const keys: Keymap = {};\n\n keys['Mod-z'] = undo;\n keys['Shift-Mod-z'] = redo;\n keys.Backspace = undoInputRule;\n if (!isMac) {\n keys['Mod-y'] = redo;\n }\n\n keys['Alt-ArrowUp'] = joinUp;\n keys['Alt-ArrowDown'] = joinDown;\n keys['Mod-BracketLeft'] = lift;\n keys.Escape = selectParentNode;\n\n let type: MarkType | NodeType = schema.marks.strong;\n if (type) {\n keys['Mod-b'] = toggleMark(type);\n keys['Mod-B'] = toggleMark(type);\n }\n\n type = schema.marks.em;\n if (type) {\n keys['Mod-i'] = toggleMark(type);\n keys['Mod-I'] = toggleMark(type);\n }\n\n type = schema.marks.code;\n if (type) {\n keys['Mod-`'] = toggleMark(type);\n }\n\n type = schema.nodes.bullet_list;\n if (type) {\n keys['Shift-Ctrl-8'] = wrapInList(type);\n }\n\n type = schema.nodes.ordered_list;\n if (type) {\n keys['Shift-Ctrl-9'] = wrapInList(type);\n }\n\n type = schema.nodes.blockquote;\n if (type) {\n keys['Ctrl->'] = wrapIn(type);\n }\n\n type = schema.nodes.hard_break;\n if (type) {\n const br = type;\n const cmd = chainCommands(exitCode, (state, dispatch) => {\n dispatch?.(state.tr.replaceSelectionWith(br.create()).scrollIntoView());\n return true;\n });\n keys['Mod-Enter'] = cmd;\n keys['Shift-Enter'] = cmd;\n if (isMac) {\n keys['Ctrl-Enter'] = cmd;\n }\n }\n\n type = schema.nodes.list_item;\n if (type) {\n keys.Enter = splitListItem(type);\n keys['Mod-['] = liftListItem(type);\n keys['Mod-]'] = sinkListItem(type);\n }\n\n type = schema.nodes.paragraph;\n if (type) {\n keys['Shift-Ctrl-0'] = setBlockType(type);\n }\n\n type = schema.nodes.code_block;\n if (type) {\n keys['Shift-Ctrl-\\\\'] = setBlockType(type);\n }\n\n type = schema.nodes.heading;\n if (type) {\n for (let i = 1; i <= 6; i++) {\n keys['Shift-Ctrl-' + i] = setBlockType(type, {level: i});\n }\n }\n\n type = schema.nodes.horizontal_rule;\n if (type) {\n const hr = type;\n keys['Mod-_'] = (state, dispatch) => {\n dispatch?.(state.tr.replaceSelectionWith(hr.create()).scrollIntoView());\n return true;\n };\n }\n\n return keys;\n}\n","import {\n Component,\n ElementRef,\n EventEmitter,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n Self,\n ViewChild,\n} from '@angular/core';\nimport {ControlValueAccessor, NgControl} from '@angular/forms';\nimport {EditorView} from 'prosemirror-view';\nimport {EditorState, Plugin, Transaction} from 'prosemirror-state';\nimport {DOMParser, DOMSerializer, Schema} from 'prosemirror-model';\nimport {DOCUMENT} from '@angular/common';\nimport {MatDialog} from '@angular/material/dialog';\nimport {goToNextCell, tableEditing} from 'prosemirror-tables';\nimport {keymap} from 'prosemirror-keymap';\nimport {ImagePlugin, ImageUploader} from '../utils/image';\nimport {advancedSchema, basicSchema} from '../utils/schema/schema';\nimport {buildMenuItems, Key, MenuItems} from '../utils/menu';\nimport {history} from 'prosemirror-history';\nimport {baseKeymap} from 'prosemirror-commands';\nimport {dropCursor} from 'prosemirror-dropcursor';\nimport {gapCursor} from 'prosemirror-gapcursor';\nimport {buildInputRules} from '../utils/inputrules';\nimport {buildKeymap} from '../utils/keymap';\nimport {NaturalFileDropDirective} from '@ecodev/natural';\nimport {MatDividerModule} from '@angular/material/divider';\nimport {MatMenuModule} from '@angular/material/menu';\nimport {MatButtonToggleModule} from '@angular/material/button-toggle';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatTooltipModule} from '@angular/material/tooltip';\nimport {MatButtonModule} from '@angular/material/button';\n\n/**\n * Prosemirror component\n *\n * Usage :\n *\n * ```html\n * <natural-editor [(ngModel)]=\"htmlString\"></natural-editor>\n * ```\n */\n// @dynamic\n@Component({\n selector: 'natural-editor',\n templateUrl: './editor.component.html',\n styleUrl: './editor.component.scss',\n providers: [ImagePlugin],\n standalone: true,\n imports: [\n MatButtonModule,\n MatTooltipModule,\n MatIconModule,\n MatButtonToggleModule,\n MatMenuModule,\n MatDividerModule,\n NaturalFileDropDirective,\n ],\n})\nexport class NaturalEditorComponent implements OnInit, OnDestroy, ControlValueAccessor {\n private view: EditorView | null = null;\n\n @ViewChild('editor', {read: ElementRef, static: true}) private editor!: ElementRef<HTMLElement>;\n\n @Output() public readonly contentChange = new EventEmitter<string>();\n\n /**\n * Callback to upload an image.\n *\n * If given it will enable advanced schema, including image and tables.\n * It must be given on initialization and cannot be changed later on.\n */\n @Input() public imageUploader: ImageUploader | null = null;\n\n private schema: Schema = basicSchema;\n\n /**\n * Interface with ControlValueAccessor\n * Notifies parent model / form controller\n */\n private onChange?: (value: string | null) => void;\n\n /**\n * HTML string\n */\n private content = '';\n\n public menu: MenuItems | null = null;\n\n /**\n * If subscribed to, then the save button will be shown and click events forwarded\n */\n @Output() public readonly save = new EventEmitter<void>();\n\n public disabled = false;\n\n public constructor(\n @Optional() @Self() public readonly ngControl: NgControl,\n @Inject(DOCUMENT) private readonly document: Document,\n private readonly dialog: MatDialog,\n private readonly imagePlugin: ImagePlugin,\n ) {\n if (this.ngControl !== null) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n public ngOnInit(): void {\n this.schema = this.imageUploader ? advancedSchema : basicSchema;\n this.menu = buildMenuItems(this.schema, this.dialog);\n const serializer = DOMSerializer.fromSchema(this.schema);\n const state = this.createState();\n\n this.view = new EditorView(this.editor.nativeElement, {\n state: state,\n editable: () => !this.disabled,\n dispatchTransaction: (transaction: Transaction) => {\n if (!this.view) {\n return;\n }\n\n const newState = this.view.state.apply(transaction);\n this.view.updateState(newState);\n\n // Transform doc into HTML string\n const dom = serializer.serializeFragment(this.view.state.doc as any);\n const el = this.document.createElement('_');\n el.appendChild(dom);\n\n const newContent = el.innerHTML;\n if (this.content === newContent || this.disabled) {\n return;\n }\n\n this.content = el.innerHTML;\n\n if (this.onChange) {\n this.onChange(this.content);\n }\n this.contentChange.emit(this.content);\n },\n });\n this.update();\n }\n\n public writeValue(val: string | undefined): void {\n if (typeof val === 'string' && val !== this.content) {\n this.content = val;\n }\n\n if (this.view !== null) {\n const state = this.createState();\n this.view.updateState(state);\n }\n }\n\n private createState(): EditorState {\n const template = this.document.createElement('_');\n template.innerHTML = '<div>' + this.content + '</div>';\n if (!template.firstChild) {\n throw new Error('child of template element could not be created');\n }\n\n const parser = DOMParser.fromSchema(this.schema);\n const doc = parser.parse(template.firstChild);\n\n return EditorState.create({\n doc: doc,\n plugins: this.createPlugins(),\n });\n }\n\n private createPlugins(): Plugin[] {\n const isMac = !!this.document.defaultView?.navigator.platform.match(/Mac/);\n\n const plugins = [\n buildInputRules(this.schema),\n keymap(buildKeymap(this.schema, isMac)),\n keymap(baseKeymap),\n dropCursor(),\n gapCursor(),\n history(),\n new Plugin({\n props: {\n attributes: {class: 'ProseMirror-example-setup-style'},\n },\n }),\n new Plugin({\n view: () => this,\n }),\n ];\n\n if (this.schema === advancedSchema) {\n plugins.push(\n this.imagePlugin.plugin,\n tableEditing(),\n keymap({\n Tab: goToNextCell(1),\n 'Shift-Tab': goToNextCell(-1),\n }),\n );\n }\n\n return plugins;\n }\n\n /**\n * Called by Prosemirror whenever the editor state changes. So we update our menu states.\n */\n public update(): void {\n if (!this.view || !this.menu) {\n return;\n }\n\n for (const item of Object.values(this.menu)) {\n item.update(this.view, this.view.state);\n }\n }\n\n public registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n public registerOnTouched(): void {\n // noop\n }\n\n public setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n public ngOnDestroy(): void {\n if (this.view) {\n this.view.destroy();\n this.view = null;\n }\n }\n\n public run(event: Event, key: Key): void {\n if (!this.view || !this.menu) {\n return;\n }\n\n const item = this.menu[key];\n if (!item || item.disabled || !item.show) {\n return;\n }\n\n item.spec.run(this.view.state, this.view.dispatch, this.view, event);\n this.view.focus();\n }\n\n public upload(file: File): void {\n if (!this.view || !this.imageUploader) {\n return;\n }\n\n if (this.view.state.selection.$from.parent.inlineContent) {\n this.imagePlugin.startImageUpload(this.view, file, this.imageUploader, this.schema);\n }\n\n this.view.focus();\n }\n}\n","@if (menu && !this.disabled) {\n <div class=\"menu-container\">\n <div class=\"menu\">\n @if (save.observed) {\n <button mat-icon-button (click)=\"save.emit()\" i18n-matTooltip matTooltip=\"Enregistrer\">\n <mat-icon fontIcon=\"save\" />\n </button>\n }\n <mat-button-toggle-group hideMultipleSelectionIndicator multiple>\n @if (menu.toggleStrong) {\n <mat-button-toggle\n [disabled]=\"menu.toggleStrong.disabled\"\n [checked]=\"menu.toggleStrong.active\"\n (click)=\"run($event, 'toggleStrong')\"\n i18n-matTooltip\n matTooltip=\"Gras\"\n >\n <mat-icon fontIcon=\"format_bold\" />\n </mat-button-toggle>\n }\n @if (menu.toggleEm) {\n <mat-button-toggle\n [disabled]=\"menu.toggleEm.disabled\"\n [checked]=\"menu.toggleEm.active\"\n (click)=\"run($event, 'toggleEm')\"\n i18n-matTooltip\n matTooltip=\"Italique\"\n >\n <mat-icon fontIcon=\"format_italic\" />\n </mat-button-toggle>\n }\n @if (menu.toggleCode) {\n <mat-button-toggle\n [disabled]=\"menu.toggleCode.disabled\"\n [checked]=\"menu.toggleCode.active\"\n (click)=\"run($event, 'toggleCode')\"\n i18n-matTooltip\n matTooltip=\"Code\"\n >\n <mat-icon fontIcon=\"code\" />\n </mat-button-toggle>\n }\n @if (menu.toggleLink) {\n <mat-button-toggle\n [disabled]=\"menu.toggleLink.disabled\"\n [checked]=\"menu.toggleLink.active\"\n (click)=\"run($event, 'toggleLink')\"\n i18n-matTooltip\n matTooltip=\"Insérer un lien...\"\n >\n <mat-icon fontIcon=\"insert_link\" />\n </mat-button-toggle>\n }\n </mat-button-toggle-group>\n <button mat-button [matMenuTriggerFor]=\"blockMenu\">\n <span i18n>Type</span>\n <mat-icon fontIcon=\"arrow_drop_down\" />\n </button>\n <mat-menu #blockMenu=\"matMenu\">\n @if (menu.makeParagraph) {\n <button\n mat-menu-item\n [disabled]=\"menu.makeParagraph.disabled\"\n (click)=\"run($event, 'makeParagraph')\"\n i18n\n >Paragraphe\n </button>\n }\n @if (menu.makeCodeBlock) {\n <button\n mat-menu-item\n [disabled]=\"menu.makeCodeBlock.disabled\"\n (click)=\"run($event, 'makeCodeBlock')\"\n i18n\n >Code\n </button>\n }\n @if (menu.makeHead1) {\n <button mat-menu-item [disabled]=\"menu.makeHead1.disabled\" (click)=\"run($event, 'makeHead1')\" i18n\n >Titre 1\n </button>\n }\n @if (menu.makeHead2) {\n <button mat-menu-item [disabled]=\"menu.makeHead2.disabled\" (click)=\"run($event, 'makeHead2')\" i18n\n >Titre 2\n </button>\n }\n @if (menu.makeHead3) {\n <button mat-menu-item [disabled]=\"menu.makeHead3.disabled\" (click)=\"run($event, 'makeHead3')\" i18n\n >Titre 3\n </button>\n }\n @if (menu.makeHead4) {\n <button mat-menu-item [disabled]=\"menu.makeHead4.disabled\" (click)=\"run($event, 'makeHead4')\" i18n\n >Titre 4\n </button>\n }\n @if (menu.makeHead5) {\n <button mat-menu-item [disabled]=\"menu.makeHead5.disabled\" (click)=\"run($event, 'makeHead5')\" i18n\n >Titre 5\n </button>\n }\n @if (menu.makeHead6) {\n <button mat-menu-item [disabled]=\"menu.makeHead6.disabled\" (click)=\"run($event, 'makeHead6')\" i18n\n >Titre 6\n </button>\n }\n <mat-divider />\n @if (menu.blockClass) {\n <button mat-menu-item [disabled]=\"menu.blockClass.disabled\" (click)=\"run($event, 'blockClass')\" i18n\n >Classe...\n </button>\n }\n @if (menu.blockId) {\n <button i18n mat-menu-item [disabled]=\"menu.blockId.disabled\" (click)=\"run($event, 'blockId')\"\n >ID...\n </button>\n }\n </mat-menu>\n @if (menu.addColumnBefore) {\n <button mat-button [matMenuTriggerFor]=\"tableMenu\">\n <span i18n>Tableau</span>\n <mat-icon fontIcon=\"arrow_drop_down\" />\n </button>\n }\n <mat-menu #tableMenu=\"matMenu\">\n @if (menu.insertTable) {\n <button\n mat-menu-item\n [disabled]=\"menu.insertTable.disabled\"\n (click)=\"run($event, 'insertTable')\"\n i18n\n >Insérer un tableau\n </button>\n }\n @if (menu.deleteTable) {\n <button\n mat-menu-item\n [disabled]=\"menu.deleteTable.disabled\"\n (click)=\"run($event, 'deleteTable')\"\n i18n\n >Supprimer le tableau\n </button>\n }\n @if (menu.mergeCells) {\n <button mat-menu-item [disabled]=\"menu.mergeCells.disabled\" (click)=\"run($event, 'mergeCells')\" i18n\n >Fusionner les cellules\n </button>\n }\n @if (menu.splitCell) {\n <button mat-menu-item [disabled]=\"menu.splitCell.disabled\" (click)=\"run($event, 'splitCell')\" i18n\n >Scinder les cellules\n </button>\n }\n @if (menu.cellBackgroundColor) {\n <button\n mat-menu-item\n [disabled]=\"menu.cellBackgroundColor.disabled\"\n (click)=\"run($event, 'cellBackgroundColor')\"\n i18n\n >Couleur de fond...\n </button>\n }\n @if (menu.tableClass) {\n <button mat-menu-item [disabled]=\"menu.tableClass.disabled\" (click)=\"run($event, 'tableClass')\" i18n\n >Classe...\n </button>\n }\n @if (menu.tableId) {\n <button i18n mat-menu-item [disabled]=\"menu.tableId.disabled\" (click)=\"run($event, 'tableId')\"\n >ID...\n </button>\n }\n <mat-divider />\n @if (menu.addColumnBefore) {\n <button\n mat-menu-item\n [disabled]=\"menu.addColumnBefore.disabled\"\n (click)=\"run($event, 'addColumnBefore')\"\n i18n\n >Insérer une colonne avant\n </button>\n }\n @if (menu.addColumnAfter) {\n <button\n mat-menu-item\n [disabled]=\"menu.addColumnAfter.disabled\"\n (click)=\"run($event, 'addColumnAfter')\"\n i18n\n >Insérer une colonne après\n </button>\n }\n @if (menu.deleteColumn) {\n <button\n mat-menu-item\n [disabled]=\"menu.deleteColumn.disabled\"\n (click)=\"run($event, 'deleteColumn')\"\n i18n\n >Supprimer la colonne\n </button>\n }\n <mat-divider />\n @if (menu.addRowBefore) {\n <button\n mat-menu-item\n [disabled]=\"menu.addRowBefore.disabled\"\n (click)=\"run($event, 'addRowBefore')\"\n i18n\n >Insérer une ligne avant\n </button>\n }\n @if (menu.addRowAfter) {\n <button\n mat-menu-item\n [disabled]=\"menu.addRowAfter.disabled\"\n (click)=\"run($event, 'addRowAfter')\"\n i18n\n >Insérer une ligne après\n </button>\n }\n @if (menu.deleteRow) {\n <button mat-menu-item [disabled]=\"menu.deleteRow.disabled\" (click)=\"run($event, 'deleteRow')\" i18n\n >Supprimer la ligne\n </button>\n }\n <mat-divider />\n @if (menu.toggleHeaderColumn) {\n <button\n mat-menu-item\n [disabled]=\"menu.toggleHeaderColumn.disabled\"\n (click)=\"run($event, 'toggleHeaderColumn')\"\n i18n\n >Entête de colonne\n </button>\n }\n @if (menu.toggleHeaderRow) {\n <button\n mat-menu-item\n [disabled]=\"menu.toggleHeaderRow.disabled\"\n (click)=\"run($event, 'toggleHeaderRow')\"\n i18n\n >Entête de ligne\n </button>\n }\n @if (menu.toggleHeaderCell) {\n <button\n mat-menu-item\n [disabled]=\"menu.toggleHeaderCell.disabled\"\n (click)=\"run($event, 'toggleHeaderCell')\"\n i18n\n >Entête de cellule\n </button>\n }\n </mat-menu>\n @if (imageUploader) {\n <button\n mat-icon-button\n naturalFileDrop\n [selectable]=\"true\"\n [broadcast]=\"false\"\n i18n-matTooltip\n matTooltip=\"Insérer une image\"\n (fileChange)=\"upload($event)\"\n >\n <mat-icon fontIcon=\"insert_photo\" />\n </button>\n }\n @if (menu.alignLeft) {\n <mat-button-toggle-group hideSingleSelectionIndicator>\n @if (menu.alignLeft) {\n <mat-button-toggle\n [disabled]=\"menu.alignLeft.disabled\"\n [checked]=\"menu.alignLeft.active\"\n (click)=\"run($event, 'alignLeft')\"\n i18n-matTooltip\n matTooltip=\"Aligner gauche\"\n >\n <mat-icon fontIcon=\"format_align_left\" />\n </mat-button-toggle>\n }\n @if (menu.alignCenter) {\n <mat-button-toggle\n [disabled]=\"menu.alignCenter.disabled\"\n [checked]=\"menu.alignCenter.active\"\n (click)=\"run($event, 'alignCenter')\"\n i18n-matTooltip\n matTooltip=\"Centrer\"\n >\n <mat-icon fontIcon=\"format_align_center\" />\n </mat-button-toggle>\n }\n @if (menu.alignRight) {\n <mat-button-toggle\n [disabled]=\"menu.alignRight.disabled\"\n [checked]=\"menu.alignRight.active\"\n (click)=\"run($event, 'alignRight')\"\n i18n-matTooltip\n matTooltip=\"Aligner droite\"\n >\n <mat-icon fontIcon=\"format_align_right\" />\n </mat-button-toggle>\n }\n @if (menu.alignJustify) {\n <mat-button-toggle\n [disabled]=\"menu.alignJustify.disabled\"\n [checked]=\"menu.alignJustify.active\"\n (click)=\"run($event, 'alignJustify')\"\n i18n-matTooltip\n matTooltip=\"Justifier\"\n >\n <mat-icon fontIcon=\"format_align_justify\" />\n </mat-button-toggle>\n }\n </mat-button-toggle-group>\n }\n @if (menu.undo) {\n <button\n mat-icon-button\n [disabled]=\"menu.undo.disabled\"\n (click)=\"run($event, 'undo')\"\n i18n-matTooltip\n matTooltip=\"Annuler\"\n >\n <mat-icon fontIcon=\"undo\" />\n </button>\n }\n @if (menu.redo) {\n <button\n mat-icon-button\n [disabled]=\"menu.redo.disabled\"\n (click)=\"run($event, 'redo')\"\n i18n-matTooltip\n matTooltip=\"Refaire\"\n >\n <mat-icon fontIcon=\"redo\" />\n </button>\n }\n @if (menu.wrapBulletList && menu.wrapBulletList.show) {\n <button\n mat-icon-button\n [disabled]=\"menu.wrapBulletList.disabled\"\n (click)=\"run($event, 'wrapBulletList')\"\n i18n-matTooltip\n matTooltip=\"Liste à puce\"\n >\n <mat-icon fontIcon=\"format_list_bulleted\" />\n </button>\n }\n @if (menu.wrapOrderedList && menu.wrapOrderedList.show) {\n <button\n mat-icon-button\n [disabled]=\"menu.wrapOrderedList.disabled\"\n (click)=\"run($event, 'wrapOrderedList')\"\n i18n-matTooltip\n matTooltip=\"Liste à numéro\"\n >\n <mat-icon fontIcon=\"format_list_numbered\" />\n </button>\n }\n @if (menu.wrapBlockQuote && menu.wrapBlockQuote.show) {\n <button\n mat-icon-button\n [disabled]=\"menu.wrapBlockQuote.disabled\"\n (click)=\"run($event, 'wrapBlockQuote')\"\n i18n-matTooltip\n matTooltip=\"Citation\"\n >\n <mat-icon fontIcon=\"format_quote\" />\n </button>\n }\n @if (menu.joinUp && menu.joinUp.show) {\n <button\n mat-icon-button\n [disabled]=\"menu.joinUp.disabled\"\n (click)=\"run($event, 'joinUp')\"\n i18n-matTooltip\n matTooltip=\"Fusionner avec l'élément du haut\"\n >\n <mat-icon fontIcon=\"move_up\" />\n </button>\n }\n @if (menu.lift && menu.lift.show) {\n <button\n mat-icon-button\n [disabled]=\"menu.lift.disabled\"\n (click)=\"run($event, 'lift')\"\n i18n-matTooltip\n matTooltip=\"Désindenter\"\n >\n <mat-icon fontIcon=\"format_indent_decrease\" />\n </button>\n }\n @if (menu.selectParentNode && menu.selectParentNode.show) {\n <button\n mat-icon-button\n [disabled]=\"menu.selectParentNode.disabled\"\n (click)=\"run($event, 'selectParentNode')\"\n i18n-matTooltip\n matTooltip=\"Sélectionner l'élément parent\"\n >\n <mat-icon fontIcon=\"select_all\" />\n </button>\n }\n </div>\n </div>\n}\n<div class=\"editor-container\" #editor></div>\n","/// <reference types=\"@angular/localize\" />\n\n/*\n * Public API Surface of natural-editor\n */\n\nexport {NaturalCustomCssDirective} from './lib/custom-css/custom-css.directive';\nexport {NaturalEditorComponent} from './lib/editor/editor.component';\nexport {ImageUploader} from './lib/utils/image';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i6","findFirstClassInSelection","i2","i3.ImagePlugin","i5"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ecodev-natural-editor.mjs","sources":["../../../projects/natural-editor/src/lib/custom-css/custom-css.directive.ts","../../../projects/natural-editor/src/lib/utils/image.ts","../../../projects/natural-editor/src/lib/utils/schema/paragraph-with-alignment.ts","../../../projects/natural-editor/src/lib/utils/schema/heading.ts","../../../projects/natural-editor/src/lib/utils/schema/table.ts","../../../projects/natural-editor/src/lib/utils/schema/schema.ts","../../../projects/natural-editor/src/lib/utils/items/item.ts","../../../projects/natural-editor/src/lib/utils/items/text-align-item.ts","../../../projects/natural-editor/src/lib/color-dialog/color-dialog.component.ts","../../../projects/natural-editor/src/lib/color-dialog/color-dialog.component.html","../../../projects/natural-editor/src/lib/utils/items/cell-background-color-item.ts","../../../projects/natural-editor/src/lib/link-dialog/link-dialog.component.ts","../../../projects/natural-editor/src/lib/link-dialog/link-dialog.component.html","../../../projects/natural-editor/src/lib/utils/items/utils.ts","../../../projects/natural-editor/src/lib/utils/items/link-item.ts","../../../projects/natural-editor/src/lib/utils/items/horizontal-rule-item.ts","../../../projects/natural-editor/src/lib/utils/items/wrap-list-item.ts","../../../projects/natural-editor/src/lib/class-dialog/class-dialog.component.ts","../../../projects/natural-editor/src/lib/class-dialog/class-dialog.component.html","../../../projects/natural-editor/src/lib/utils/items/class-item.ts","../../../projects/natural-editor/src/lib/id-dialog/id-dialog.component.ts","../../../projects/natural-editor/src/lib/id-dialog/id-dialog.component.html","../../../projects/natural-editor/src/lib/utils/items/id-item.ts","../../../projects/natural-editor/src/lib/utils/items/table-item.ts","../../../projects/natural-editor/src/lib/utils/menu.ts","../../../projects/natural-editor/src/lib/utils/inputrules.ts","../../../projects/natural-editor/src/lib/utils/keymap.ts","../../../projects/natural-editor/src/lib/editor/editor.component.ts","../../../projects/natural-editor/src/lib/editor/editor.component.html","../../../projects/natural-editor/src/public-api.ts","../../../projects/natural-editor/src/ecodev-natural-editor.ts"],"sourcesContent":["import {Directive, HostBinding, Inject, Input, OnDestroy} from '@angular/core';\nimport {DOCUMENT} from '@angular/common';\n\n/**\n * Prefix all CSS selectors with the given selector\n *\n * This is meant to be relatively simple and might not cover advanced CSS syntax\n */\nexport function prefixCss(prefix: string, css: string): string {\n prefix = '\\n' + prefix + ' ';\n\n return css\n .replace(/([^{}]*){/gs, selectors =>\n selectors\n .split(',')\n .map(selector => {\n if (selector.trim().startsWith('@media')) {\n return selector.trim();\n } else {\n return prefix + selector.trim();\n }\n })\n .join(','),\n )\n .trim();\n}\n\nlet uniqueId = 0;\nlet componentCount = 0;\n\n/**\n * Inject custom CSS into component and scope the CSS only to this component\n *\n * Usage :\n *\n * ```html\n * <div [naturalCustomCss]=\".my-class {background: red}\">\n * <p class=\"my-class\">foo bar</p>\n * </div>\n * ```\n */\n@Directive({\n selector: '[naturalCustomCss]',\n standalone: true,\n})\nexport class NaturalCustomCssDirective implements OnDestroy {\n private style: HTMLStyleElement | null = null;\n\n @HostBinding('attr.data-natural-id') private readonly id = 'n' + ++uniqueId;\n\n @Input({required: true})\n public set naturalCustomCss(value: string | undefined) {\n if (value && !this.style) {\n this.style = this.document.createElement('style');\n this.document.head.appendChild(this.style);\n }\n\n if (this.style) {\n this.style.innerHTML = value ? prefixCss(`[data-natural-id=${this.id}]`, value) : '';\n }\n }\n\n public constructor(@Inject(DOCUMENT) private readonly document: Document) {}\n\n public ngOnDestroy(): void {\n this.style?.remove();\n\n // Reset uniqueId if we have no component alive anymore, so that we never reach max int\n componentCount--;\n if (componentCount <= 0) {\n uniqueId = 0;\n }\n }\n}\n","import {Decoration, DecorationSet, EditorView} from 'prosemirror-view';\nimport {EditorState, Plugin} from 'prosemirror-state';\nimport {Observable} from 'rxjs';\nimport {Schema} from 'prosemirror-model';\nimport {Inject, Injectable} from '@angular/core';\nimport {DOCUMENT} from '@angular/common';\n\nexport type ImageUploader = (file: File) => Observable<string>;\n\n@Injectable({providedIn: 'root'})\nexport class ImagePlugin {\n public readonly plugin: Plugin<DecorationSet>;\n\n public constructor(@Inject(DOCUMENT) document: Document) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const self = this;\n this.plugin = new Plugin<DecorationSet>({\n state: {\n init(): DecorationSet {\n return DecorationSet.empty;\n },\n apply(tr, set): DecorationSet {\n // Adjust decoration positions to changes made by the transaction\n set = set.map(tr.mapping, tr.doc);\n\n // See if the transaction adds or removes any placeholders\n const action = tr.getMeta(self.plugin);\n if (action?.add) {\n const widget = document.createElement('placeholder');\n const deco = Decoration.widget(action.add.pos, widget, {id: action.add.id});\n set = set.add(tr.doc, [deco]);\n } else if (action?.remove) {\n set = set.remove(set.find(undefined, undefined, spec => spec.id === action.remove.id));\n }\n\n return set;\n },\n },\n props: {\n decorations(state: EditorState): DecorationSet | undefined {\n return this.getState(state);\n },\n },\n });\n }\n\n private findPlaceholder(state: EditorState, id: Record<string, never>): number | null {\n const decorators = this.plugin.getState(state);\n const found = decorators?.find(undefined, undefined, spec => spec.id === id);\n return found?.length ? found[0].from : null;\n }\n\n public startImageUpload(view: EditorView, file: File, uploader: ImageUploader, schema: Schema): void {\n // A fresh object to act as the ID for this upload\n const id = {};\n\n // Replace the selection with a placeholder\n const tr = view.state.tr;\n if (!tr.selection.empty) {\n tr.deleteSelection();\n }\n\n tr.setMeta(this.plugin, {add: {id, pos: tr.selection.from}});\n view.dispatch(tr);\n\n uploader(file).subscribe({\n next: url => {\n const pos = this.findPlaceholder(view.state, id);\n // If the content around the placeholder has been deleted, drop\n // the image\n if (pos === null) {\n return;\n }\n\n // Otherwise, insert it at the placeholder's position, and remove\n // the placeholder\n view.dispatch(\n view.state.tr\n .replaceWith(pos, pos, schema.nodes.image.create({src: url}))\n .setMeta(this.plugin, {remove: {id}}),\n );\n },\n error: () => {\n // On failure, just clean up the placeholder\n view?.dispatch(tr.setMeta(this.plugin, {remove: {id}}));\n },\n });\n }\n}\n","import {NodeSpec} from 'prosemirror-model';\n\nconst ALIGN_PATTERN = /(left|right|center|justify)/;\ntype Attributes = {\n align: null | string;\n class: string;\n id: string;\n};\n\n/**\n * A plain paragraph textblock. Represented in the DOM\n * as a `<p>` element.\n *\n * https://github.com/ProseMirror/prosemirror-schema-basic/blob/master/src/schema-basic.js\n */\nexport const paragraphWithAlignment: NodeSpec = {\n attrs: {\n align: {default: null},\n class: {default: null},\n id: {default: null},\n },\n content: 'inline*',\n group: 'block',\n parseDOM: [\n {\n tag: 'p',\n getAttrs: (dom: Node | string): null | Attributes => {\n if (!(dom instanceof HTMLElement)) {\n return null;\n }\n\n const {textAlign} = dom.style;\n\n let align: string | null = dom.getAttribute('align') || textAlign || '';\n align = ALIGN_PATTERN.test(align) ? align : null;\n\n const id = dom.getAttribute('id') || '';\n\n return {align, class: dom.className, id};\n },\n },\n ],\n toDOM: node => {\n const {align, id} = node.attrs;\n const attrs: Record<string, string> = {};\n\n let style = '';\n if (align && align !== 'left') {\n style += `text-align: ${align};`;\n }\n\n if (style) {\n attrs.style = style;\n }\n\n if (id) {\n attrs.id = id;\n }\n\n if (node.attrs.class) {\n attrs.class = node.attrs.class;\n }\n\n return ['p', attrs, 0];\n },\n};\n","import {Attrs, NodeSpec} from 'prosemirror-model';\n\ntype Attributes = {\n class: string;\n id: null | string;\n level: number;\n};\n\nconst getAttrsForLevel = function (level: number): (node: HTMLElement | string) => Attrs | false | null {\n return (dom: Node | string): null | Attributes => {\n if (!(dom instanceof HTMLElement)) {\n return null;\n }\n const id = dom.getAttribute('id') || null;\n const attrs: Attributes = {level: level, class: dom.className, id: id};\n\n return attrs;\n };\n};\n\n/**\n * A heading textblock, with a `level` attribute that should hold the number 1 to 6,\n * with optional ID and class attributes. Parsed and serialized as `<h1>` to <h6>`\n *\n * https://github.com/ProseMirror/prosemirror-schema-basic/blob/master/src/schema-basic.js\n */\nexport const heading: NodeSpec = {\n attrs: {\n level: {default: 1},\n class: {default: null},\n id: {default: null},\n },\n content: 'inline*',\n group: 'block',\n defining: true,\n parseDOM: [\n {\n tag: 'h1',\n getAttrs: getAttrsForLevel(1),\n },\n {\n tag: 'h2',\n getAttrs: getAttrsForLevel(2),\n },\n {\n tag: 'h3',\n getAttrs: getAttrsForLevel(3),\n },\n {\n tag: 'h4',\n getAttrs: getAttrsForLevel(4),\n },\n {\n tag: 'h5',\n getAttrs: getAttrsForLevel(5),\n },\n {\n tag: 'h6',\n getAttrs: getAttrsForLevel(6),\n },\n ],\n toDOM: node => {\n const {id} = node.attrs;\n const attrs: Record<string, string> = {};\n\n if (id) {\n attrs.id = id;\n }\n\n if (node.attrs.class) {\n attrs.class = node.attrs.class;\n }\n\n return ['h' + node.attrs.level, attrs, 0];\n },\n};\n","import {MutableAttrs, TableNodes, TableNodesOptions} from 'prosemirror-tables';\nimport {Attrs, Node as ProsemirrorNode} from 'prosemirror-model';\n\ntype CellAttributes = TableNodesOptions['cellAttributes'];\n\nfunction getCellAttrs(dom: Node | string, extraAttrs: CellAttributes): null | Attrs {\n if (!(dom instanceof HTMLElement)) {\n return null;\n }\n\n const widthAttr = dom.getAttribute('data-colwidth');\n const widths = widthAttr && /^\\d+(,\\d+)*$/.test(widthAttr) ? widthAttr.split(',').map(s => Number(s)) : null;\n const colspan = Number(dom.getAttribute('colspan') || 1);\n const result: MutableAttrs = {\n colspan,\n rowspan: Number(dom.getAttribute('rowspan') || 1),\n colwidth: widths && widths.length == colspan ? widths : null,\n };\n\n for (const prop in extraAttrs) {\n const getter = extraAttrs[prop].getFromDOM;\n const value = getter?.(dom);\n if (value != null) result[prop] = value;\n }\n\n return result;\n}\n\nfunction setCellAttrs(node: ProsemirrorNode, extraAttrs: CellAttributes): undefined | Record<string, string> {\n const attrs: Record<string, string> = {};\n if (node.attrs.colspan != 1) attrs.colspan = node.attrs.colspan;\n if (node.attrs.rowspan != 1) attrs.rowspan = node.attrs.rowspan;\n if (node.attrs.colwidth) attrs['data-colwidth'] = node.attrs.colwidth.join(',');\n\n for (const prop in extraAttrs) {\n const setter = extraAttrs[prop].setDOMAttr;\n if (setter) setter(node.attrs[prop], attrs);\n }\n\n return attrs;\n}\n\n/**\n * This function creates a set of [node\n * specs](http://prosemirror.net/docs/ref/#model.SchemaSpec.nodes) for\n * `table`, `table_row`, and `table_cell` nodes types.\n *\n * It is very directly inspired by prosemirror-table\n */\nexport function tableNodes(options: TableNodesOptions): TableNodes {\n const extraAttrs = options.cellAttributes || {};\n const cellAttrs: CellAttributes = {\n colspan: {default: 1},\n rowspan: {default: 1},\n colwidth: {default: null},\n };\n\n for (const prop in extraAttrs) {\n cellAttrs[prop] = {\n default: extraAttrs[prop].default,\n };\n }\n\n return {\n table: {\n attrs: {\n class: {default: null},\n id: {default: ''},\n },\n content: 'table_row+',\n tableRole: 'table',\n isolating: true,\n group: options.tableGroup,\n parseDOM: [\n {\n tag: 'table',\n getAttrs: (dom: Node | string): null | Attrs => {\n if (!(dom instanceof HTMLElement)) {\n return null;\n }\n\n return {\n class: dom.className,\n id: dom.id,\n };\n },\n },\n ],\n toDOM: node => {\n const attrs: Record<string, string> = {};\n if (node.attrs.class) {\n attrs.class = node.attrs.class;\n }\n if (node.attrs.id) {\n attrs.id = node.attrs.id;\n }\n\n return ['table', attrs, ['tbody', 0]];\n },\n },\n table_row: {\n content: '(table_cell | table_header)*',\n tableRole: 'row',\n parseDOM: [{tag: 'tr'}],\n toDOM: () => {\n return ['tr', 0];\n },\n },\n table_cell: {\n content: options.cellContent,\n attrs: cellAttrs,\n tableRole: 'cell',\n isolating: true,\n parseDOM: [{tag: 'td', getAttrs: dom => getCellAttrs(dom, extraAttrs)}],\n toDOM: node => {\n return ['td', setCellAttrs(node, extraAttrs), 0];\n },\n },\n table_header: {\n content: options.cellContent,\n attrs: cellAttrs,\n tableRole: 'header_cell',\n isolating: true,\n parseDOM: [{tag: 'th', getAttrs: dom => getCellAttrs(dom, extraAttrs)}],\n toDOM: node => {\n return ['th', setCellAttrs(node, extraAttrs), 0];\n },\n },\n };\n}\n","import {marks, nodes} from 'prosemirror-schema-basic';\nimport {addListNodes} from 'prosemirror-schema-list';\nimport {Schema} from 'prosemirror-model';\nimport {paragraphWithAlignment} from './paragraph-with-alignment';\nimport {heading} from './heading';\nimport {tableNodes} from './table';\n\n// Keep only basic elements\ntype BasicNodes = Omit<typeof nodes, 'image' | 'code_block' | 'blockquote' | 'horizontal_rule'>;\nconst basicNodes: BasicNodes = {\n doc: nodes.doc,\n paragraph: nodes.paragraph,\n heading: nodes.heading,\n text: nodes.text,\n hard_break: nodes.hard_break,\n};\n\ntype BasicMarks = Omit<typeof marks, 'code'>;\nconst basicMarks: BasicMarks = {\n link: marks.link,\n em: marks.em,\n strong: marks.strong,\n};\n\nconst tmpSchema = new Schema({nodes: basicNodes, marks: basicMarks});\n\nexport const basicSchema = new Schema({\n nodes: addListNodes(tmpSchema.spec.nodes, 'paragraph block*', 'block'),\n marks: tmpSchema.spec.marks,\n});\n\nconst tmpSchema2 = new Schema({\n nodes: {\n ...nodes,\n heading: heading,\n ...tableNodes({\n tableGroup: 'block',\n cellContent: 'block+',\n cellAttributes: {\n background: {\n default: null,\n getFromDOM(dom) {\n return dom.style.backgroundColor || null;\n },\n setDOMAttr(value, attrs) {\n if (typeof value === 'string' && value) {\n attrs.style = ((attrs.style as string) || '') + `background-color: ${value};`;\n }\n },\n },\n },\n }),\n paragraph: paragraphWithAlignment,\n },\n marks: basicMarks,\n});\n\nexport const advancedSchema = new Schema({\n nodes: addListNodes(tmpSchema2.spec.nodes, 'paragraph block*', 'block'),\n marks: basicMarks,\n});\n","import {MenuItemSpec} from 'prosemirror-menu';\nimport {EditorState} from 'prosemirror-state';\nimport {EditorView} from 'prosemirror-view';\n\n/**\n * One item of the menu.\n *\n * This is the equivalent of `MenuItem` but without all the rendering logic since we use Angular\n * templates for rendering. Also it caches the state of the item everytime the editor state changes,\n * so Angular can query the state as often as needed without performance hit.\n */\nexport class Item {\n /**\n * Whether the item is 'active' (for example, the item for toggling the strong mark might be active when the cursor is in strong text).\n */\n public active = false;\n\n /**\n * Button is shown but disabled, because the item cannot be (un-)applied\n */\n public disabled = false;\n\n /**\n * Whether the item is shown at the moment\n */\n public show = true;\n\n public constructor(public readonly spec: MenuItemSpec) {}\n\n /**\n * Update the item state according to the editor state\n */\n public update(view: EditorView, state: EditorState): void {\n if (this.spec.active) {\n this.active = this.spec.active(state);\n }\n\n if (this.spec.enable) {\n this.disabled = !this.spec.enable(state);\n }\n\n if (this.spec.select) {\n this.show = this.spec.select(state);\n }\n }\n}\n","import {Node, NodeType, Schema} from 'prosemirror-model';\nimport {AllSelection, TextSelection, Transaction} from 'prosemirror-state';\nimport {Item} from './item';\n\ntype Alignment = 'left' | 'right' | 'center' | 'justify';\n\nfunction setTextAlign(tr: Transaction, schema: Schema, alignment: null | Alignment): Transaction {\n const {selection, doc} = tr;\n if (!selection || !doc) {\n return tr;\n }\n const {from, to} = selection;\n const {nodes} = schema;\n\n const tasks: {\n node: Node;\n pos: number;\n nodeType: NodeType;\n }[] = [];\n\n alignment = alignment || null;\n\n const allowedNodeTypes = new Set([\n nodes.paragraph,\n // nodes['blockquote'],\n // nodes['listItem'],\n // nodes['heading'],\n ]);\n\n doc.nodesBetween(from, to, (node, pos) => {\n const nodeType = node.type;\n const align = node.attrs.align || null;\n if (align !== alignment && allowedNodeTypes.has(nodeType)) {\n tasks.push({\n node,\n pos,\n nodeType,\n });\n }\n return true;\n });\n\n if (!tasks.length) {\n return tr;\n }\n\n tasks.forEach(job => {\n const {node, pos, nodeType} = job;\n const newAttrs = {\n ...node.attrs,\n align: alignment ? alignment : null,\n };\n\n tr = tr.setNodeMarkup(pos, nodeType, newAttrs, node.marks);\n });\n\n return tr;\n}\n\nexport class TextAlignItem extends Item {\n public constructor(alignment: Alignment) {\n super({\n active: state => {\n const {selection, doc} = state;\n const {from, to} = selection;\n let keepLooking = true;\n let active = false;\n doc.nodesBetween(from, to, node => {\n if (keepLooking && node.attrs.align === alignment) {\n keepLooking = false;\n active = true;\n }\n return keepLooking;\n });\n\n return active;\n },\n\n enable: state => {\n const {selection} = state;\n return selection instanceof TextSelection || selection instanceof AllSelection;\n },\n\n run: (state, dispatch): boolean => {\n const {schema, selection} = state;\n\n const tr = setTextAlign(state.tr.setSelection(selection), schema, this.active ? null : alignment);\n if (tr.docChanged) {\n dispatch?.(tr);\n return true;\n } else {\n return false;\n }\n },\n });\n }\n}\n","import {Component, Inject} from '@angular/core';\nimport {MAT_DIALOG_DATA, MatDialogRef, MatDialogModule} from '@angular/material/dialog';\nimport {FormControl, FormGroup, Validators, FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport {ifValid} from '@ecodev/natural';\nimport {MatInputModule} from '@angular/material/input';\nimport {MatFormFieldModule} from '@angular/material/form-field';\nimport {NaturalIconDirective} from '@ecodev/natural';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatButtonModule} from '@angular/material/button';\n\nexport type ColorDialogData = {\n /**\n * Empty string means no color set at all. Anything else must be a valid CSS color in hexa format.\n *\n * Eg:\n *\n * - `\"\"`\n * - `\"#ff4000\"`\n */\n color: string;\n};\n\n@Component({\n templateUrl: './color-dialog.component.html',\n styleUrl: './color-dialog.component.scss',\n standalone: true,\n imports: [\n MatDialogModule,\n FormsModule,\n ReactiveFormsModule,\n MatButtonModule,\n MatIconModule,\n NaturalIconDirective,\n MatFormFieldModule,\n MatInputModule,\n ],\n})\nexport class ColorDialogComponent {\n public readonly colors: string[][] = [\n [\n '#000000',\n '#111111',\n '#1c1c1c',\n '#333333',\n '#666666',\n '#808080',\n '#999999',\n '#b2b2b2',\n '#cccccc',\n '#dddddd',\n '#eeeeee',\n '#ffffff',\n ],\n [\n '#ffff00',\n '#ffbf00',\n '#ff8000',\n '#ff4000',\n '#ff0000',\n '#bf0041',\n '#800080',\n '#55308d',\n '#2a6099',\n '#158466',\n '#00a933',\n '#81d41a',\n ],\n [\n '#ffffd7',\n '#fff5ce',\n '#ffdbb6',\n '#ffd8ce',\n '#ffd7d7',\n '#f7d1d5',\n '#e0c2cd',\n '#dedce6',\n '#dee6ef',\n '#dee7e5',\n '#dde8cb',\n '#f6f9d4',\n ],\n [\n '#ffffa6',\n '#ffe994',\n '#ffb66c',\n '#ffaa95',\n '#ffa6a6',\n '#ec9ba4',\n '#bf819e',\n '#b7b3ca',\n '#b4c7dc',\n '#b3cac7',\n '#afd095',\n '#e8f2a1',\n ],\n [\n '#ffff6d',\n '#ffde59',\n '#ff972f',\n '#ff7b59',\n '#ff6d6d',\n '#e16173',\n '#a1467e',\n '#8e86ae',\n '#729fcf',\n '#81aca6',\n '#77bc65',\n '#d4ea6b',\n ],\n [\n '#ffff38',\n '#ffd428',\n '#ff860d',\n '#ff5429',\n '#ff3838',\n '#d62e4e',\n '#8d1d75',\n '#6b5e9b',\n '#5983b0',\n '#50938a',\n '#3faf46',\n '#bbe33d',\n ],\n [\n '#e6e905',\n '#e8a202',\n '#ea7500',\n '#ed4c05',\n '#f10d0c',\n '#a7074b',\n '#780373',\n '#5b277d',\n '#3465a4',\n '#168253',\n '#069a2e',\n '#5eb91e',\n ],\n [\n '#acb20c',\n '#b47804',\n '#b85c00',\n '#be480a',\n '#c9211e',\n '#861141',\n '#650953',\n '#55215b',\n '#355269',\n '#1e6a39',\n '#127622',\n '#468a1a',\n ],\n [\n '#706e0c',\n '#784b04',\n '#7b3d00',\n '#813709',\n '#8d281e',\n '#611729',\n '#4e102d',\n '#481d32',\n '#383d3c',\n '#28471f',\n '#224b12',\n '#395511',\n ],\n [\n '#443205',\n '#472702',\n '#492300',\n '#4b2204',\n '#50200c',\n '#41190d',\n '#3b160e',\n '#3a1a0f',\n '#362413',\n '#302709',\n '#2e2706',\n '#342a06',\n ],\n ];\n\n public readonly colorControl = new FormControl('', {\n validators: Validators.pattern(/^#\\p{Hex_Digit}{6}/u),\n nonNullable: true,\n });\n public readonly form = new FormGroup({\n color: this.colorControl,\n });\n\n public constructor(\n @Inject(MAT_DIALOG_DATA) data: ColorDialogData,\n private dialogRef: MatDialogRef<ColorDialogComponent, ColorDialogData>,\n ) {\n this.form.setValue(data);\n }\n\n public maybeConfirm(): void {\n ifValid(this.form).subscribe(() => this.confirm());\n }\n\n private confirm(): void {\n this.dialogRef.close(this.form.getRawValue());\n }\n\n public selectColor(color: string): void {\n this.colorControl.setValue(color);\n this.maybeConfirm();\n }\n}\n","<h2 i18n mat-dialog-title>Sélectionner une couleur</h2>\n\n<mat-dialog-content [formGroup]=\"form\">\n <div>\n @for (row of colors; track row) {\n <div>\n @for (color of row; track color) {\n <div class=\"color\" [style]=\"{backgroundColor: color}\" (click)=\"selectColor(color)\"> </div>\n }\n </div>\n }\n </div>\n\n <div>\n <button mat-button (click)=\"selectColor('')\">\n <mat-icon naturalIcon=\"format_color_reset\" />\n <span i18n>Transparent</span></button\n >\n </div>\n\n <mat-form-field>\n <mat-label i18n>Couleur</mat-label>\n <input matInput [formControl]=\"colorControl\" (keydown.enter)=\"maybeConfirm()\" cdkFocusInitial />\n <div\n class=\"sample\"\n matTextSuffix\n [style]=\"{backgroundColor: colorControl.valid ? colorControl.value : ''}\"\n ></div>\n @if (colorControl.hasError('pattern')) {\n <mat-error i18n>Doit être le format hexadecimal. Par exemple: #ff4000 </mat-error>\n }\n </mat-form-field>\n</mat-dialog-content>\n\n<mat-dialog-actions align=\"end\">\n <button mat-button mat-dialog-close i18n>Annuler</button>\n <button mat-stroked-button (click)=\"maybeConfirm()\" [disabled]=\"!form.valid\"><span i18n>Valider</span></button>\n</mat-dialog-actions>\n","import {EditorState, Transaction} from 'prosemirror-state';\nimport {CellSelection, isInTable, selectionCell, setCellAttr} from 'prosemirror-tables';\nimport {EditorView} from 'prosemirror-view';\nimport {Item} from './item';\nimport {MatDialog} from '@angular/material/dialog';\nimport {ColorDialogComponent, ColorDialogData} from '../../color-dialog/color-dialog.component';\n\nconst setCellBackgroundColor = setCellAttr.bind(null, 'background');\n\nfunction findFirstClassInSelection(state: EditorState): string {\n if (!isInTable(state)) {\n return '';\n }\n\n // For single cell selection\n const $cell = selectionCell(state);\n let foundColor: string = $cell?.nodeAfter?.attrs.background ?? '';\n if (foundColor) {\n return foundColor;\n }\n\n // For multiple cells selection\n let keepLooking = true;\n if (state.selection instanceof CellSelection) {\n state.selection.forEachCell(node => {\n const color = node.attrs.background;\n if (keepLooking && color) {\n keepLooking = false;\n foundColor = color;\n }\n });\n }\n\n return foundColor;\n}\n\nexport class CellBackgroundColorItem extends Item {\n public constructor(dialog: MatDialog) {\n super({\n enable(state: EditorState): boolean {\n // Pretend to set a unique color that is not already set, to test if we can any color at all\n const cmd = setCellBackgroundColor('#000001');\n\n return cmd(state);\n },\n run(state: EditorState, dispatch: (p: Transaction) => void, view: EditorView): void {\n dialog\n .open<ColorDialogComponent, ColorDialogData, ColorDialogData>(ColorDialogComponent, {\n data: {\n color: findFirstClassInSelection(state),\n },\n })\n .afterClosed()\n .subscribe(result => {\n if (dispatch && result) {\n const cmd = setCellBackgroundColor(result.color);\n cmd(state, dispatch);\n }\n\n view.focus();\n });\n },\n });\n }\n}\n","import {Component, Inject} from '@angular/core';\nimport {MAT_DIALOG_DATA, MatDialogRef, MatDialogModule} from '@angular/material/dialog';\nimport {FormControl, FormGroup, Validators, FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport {ifValid} from '@ecodev/natural';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatInputModule} from '@angular/material/input';\nimport {MatFormFieldModule} from '@angular/material/form-field';\n\nexport type LinkDialogData = {\n href: string;\n title?: string;\n};\n\n@Component({\n templateUrl: './link-dialog.component.html',\n styleUrl: './link-dialog.component.scss',\n standalone: true,\n imports: [MatDialogModule, FormsModule, ReactiveFormsModule, MatFormFieldModule, MatInputModule, MatButtonModule],\n})\nexport class LinkDialogComponent {\n public readonly hrefControl = new FormControl('', {validators: Validators.required, nonNullable: true});\n public readonly titleControl = new FormControl('', {nonNullable: true});\n public readonly form = new FormGroup({\n href: this.hrefControl,\n title: this.titleControl,\n });\n\n public constructor(\n @Inject(MAT_DIALOG_DATA) data: LinkDialogData,\n private dialogRef: MatDialogRef<LinkDialogComponent, LinkDialogData>,\n ) {\n this.form.setValue({title: '', ...data});\n }\n\n public maybeConfirm(): void {\n ifValid(this.form).subscribe(() => this.confirm());\n }\n\n private confirm(): void {\n this.dialogRef.close(this.form.getRawValue());\n }\n}\n","<h2 i18n mat-dialog-title>Insérer un lien</h2>\n\n<mat-dialog-content [formGroup]=\"form\">\n <mat-form-field>\n <mat-label i18n>URL</mat-label>\n <input matInput [formControl]=\"hrefControl\" (keydown.enter)=\"maybeConfirm()\" />\n @if (hrefControl.hasError('required')) {\n <mat-error i18n>Ce champ est requis</mat-error>\n }\n </mat-form-field>\n <mat-form-field>\n <mat-label i18n>Titre</mat-label>\n <input matInput [formControl]=\"titleControl\" (keydown.enter)=\"maybeConfirm()\" />\n </mat-form-field>\n</mat-dialog-content>\n\n<mat-dialog-actions align=\"end\">\n <button mat-button mat-dialog-close i18n>Annuler</button>\n <button mat-stroked-button (click)=\"maybeConfirm()\" [disabled]=\"!form.valid\"><span i18n>Valider</span></button>\n</mat-dialog-actions>\n","import {Command, EditorState} from 'prosemirror-state';\nimport {MarkType} from 'prosemirror-model';\nimport {MenuItem, MenuItemSpec} from 'prosemirror-menu';\nimport {Item} from './item';\nimport {toggleMark} from 'prosemirror-commands';\n\nexport function markActive(state: EditorState, type: MarkType): boolean {\n const {from, $from, to, empty} = state.selection;\n if (empty) {\n return !!type.isInSet(state.storedMarks || $from.marks());\n } else {\n return state.doc.rangeHasMark(from, to, type);\n }\n}\n\n/**\n * Convert built-in `MenuItem` into our Angular specific `Item`\n */\nexport function menuItemToItem(item: MenuItem): Item {\n return new Item(item.spec);\n}\n\n/**\n * From a `Command`, creates a new `Item` that will have an automatic `enable` spec\n */\nexport function cmdToItem(cmd: Command, options: Partial<MenuItemSpec> = {}): Item {\n const passedOptions: MenuItemSpec = {\n run: cmd,\n ...options,\n };\n\n if (!options.enable && !options.select) {\n passedOptions.enable = state => cmd(state);\n }\n\n return new Item(passedOptions);\n}\n\n/**\n * From a `MarkType`, creates a new `Item` that will have an automatic `active` and `enable` spec\n */\nexport function markTypeToItem(markType: MarkType): Item {\n return cmdToItem(toggleMark(markType), {\n active(state: EditorState): boolean {\n return markActive(state, markType);\n },\n });\n}\n\nexport function selectionContainsNodeType(state: EditorState, allowedNodeTypes: string[]): boolean {\n const {selection, doc} = state;\n const {from, to} = selection;\n let keepLooking = true;\n let found = false;\n\n doc.nodesBetween(from, to, node => {\n if (keepLooking && allowedNodeTypes.includes(node.type.name)) {\n keepLooking = false;\n found = true;\n }\n\n return keepLooking;\n });\n\n return found;\n}\n","import {Item} from './item';\nimport {MarkType} from 'prosemirror-model';\nimport {MatDialog} from '@angular/material/dialog';\nimport {EditorState, Transaction} from 'prosemirror-state';\nimport {EditorView} from 'prosemirror-view';\nimport {toggleMark} from 'prosemirror-commands';\nimport {LinkDialogComponent, LinkDialogData} from '../../link-dialog/link-dialog.component';\nimport {markActive} from './utils';\n\nexport class LinkItem extends Item {\n public constructor(markType: MarkType, dialog: MatDialog) {\n super({\n active(state: EditorState): boolean {\n return markActive(state, markType);\n },\n enable(state: EditorState): boolean {\n return !state.selection.empty;\n },\n run(state: EditorState, dispatch: (p: Transaction) => void, view: EditorView): void {\n if (markActive(state, markType)) {\n toggleMark(markType)(state, dispatch);\n return;\n }\n\n dialog\n .open<LinkDialogComponent, LinkDialogData, LinkDialogData>(LinkDialogComponent, {\n data: {\n href: '',\n title: '',\n },\n })\n .afterClosed()\n .subscribe(result => {\n if (result) {\n if (!result.title) {\n delete result.title;\n }\n\n toggleMark(markType, result)(view.state, view.dispatch);\n }\n\n view.focus();\n });\n },\n });\n }\n}\n","import {Item} from './item';\nimport {EditorState} from 'prosemirror-state';\nimport {NodeType} from 'prosemirror-model';\n\nfunction canInsert(state: EditorState, nodeType: NodeType): boolean {\n const $from = state.selection.$from;\n for (let d = $from.depth; d >= 0; d--) {\n const index = $from.index(d);\n if ($from.node(d).canReplaceWith(index, index, nodeType)) {\n return true;\n }\n }\n\n return false;\n}\n\nexport class HorizontalRuleItem extends Item {\n public constructor(hr: NodeType) {\n super({\n enable(state): boolean {\n return canInsert(state, hr);\n },\n run(state, dispatch): void {\n dispatch(state.tr.replaceSelectionWith(hr.create()));\n },\n });\n }\n}\n","import {NodeType} from 'prosemirror-model';\nimport {Item} from './item';\nimport {wrapInList} from 'prosemirror-schema-list';\nimport {cmdToItem} from './utils';\n\nexport function wrapListItem(nodeType: NodeType): Item {\n return cmdToItem(wrapInList(nodeType));\n}\n","import {Component, Inject} from '@angular/core';\nimport {MAT_DIALOG_DATA, MatDialogRef, MatDialogModule} from '@angular/material/dialog';\nimport {FormControl, FormGroup, Validators, FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport {ifValid} from '@ecodev/natural';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatInputModule} from '@angular/material/input';\nimport {MatFormFieldModule} from '@angular/material/form-field';\n\nexport type ClassDialogData = {\n /**\n * CSS class names\n *\n * Eg:\n *\n * - `\"\"`\n * - `\"my-class my-other-class\"`\n */\n class: string;\n};\n\n@Component({\n templateUrl: './class-dialog.component.html',\n styleUrl: './class-dialog.component.scss',\n standalone: true,\n imports: [MatDialogModule, FormsModule, ReactiveFormsModule, MatFormFieldModule, MatInputModule, MatButtonModule],\n})\nexport class ClassDialogComponent {\n public readonly classControl = new FormControl('', {\n validators: Validators.pattern(/(^\\s*(-?[_a-zA-Z]+[_a-zA-Z0-9-]*\\s*)+)/),\n nonNullable: true,\n });\n public readonly form = new FormGroup({\n class: this.classControl,\n });\n\n public constructor(\n @Inject(MAT_DIALOG_DATA) data: ClassDialogData,\n private dialogRef: MatDialogRef<ClassDialogComponent, ClassDialogData>,\n ) {\n this.form.setValue(data);\n }\n\n public maybeConfirm(): void {\n ifValid(this.form).subscribe(() => this.confirm());\n }\n\n private confirm(): void {\n this.dialogRef.close(this.form.getRawValue());\n }\n}\n","<h2 i18n mat-dialog-title>Saisir les classes CSS</h2>\n\n<mat-dialog-content [formGroup]=\"form\">\n <mat-form-field>\n <mat-label i18n>Classes CSS</mat-label>\n <input matInput [formControl]=\"classControl\" (keydown.enter)=\"maybeConfirm()\" cdkFocusInitial />\n @if (classControl.hasError('pattern')) {\n <mat-error i18n>Doit être un ou plusieurs nom de classe CSS</mat-error>\n }\n </mat-form-field>\n</mat-dialog-content>\n\n<mat-dialog-actions align=\"end\">\n <button mat-button mat-dialog-close i18n>Annuler</button>\n <button mat-stroked-button (click)=\"maybeConfirm()\" [disabled]=\"!form.valid\"><span i18n>Valider</span></button>\n</mat-dialog-actions>\n","import {Node, NodeType} from 'prosemirror-model';\nimport {EditorState, Transaction} from 'prosemirror-state';\nimport {Item} from './item';\nimport {selectionContainsNodeType} from './utils';\nimport {MatDialog} from '@angular/material/dialog';\nimport {ClassDialogComponent, ClassDialogData} from '../../class-dialog/class-dialog.component';\n\nfunction setClass(tr: Transaction, classValue: string, allowedNodeTypes: string[]): Transaction {\n const {selection, doc} = tr;\n if (!selection || !doc) {\n return tr;\n }\n const {from, to} = selection;\n\n const tasks: {\n node: Node;\n pos: number;\n nodeType: NodeType;\n }[] = [];\n\n doc.nodesBetween(from, to, (node, pos) => {\n const nodeType = node.type;\n const currentClass = node.attrs.class || null;\n if (currentClass !== classValue && allowedNodeTypes.includes(nodeType.name)) {\n tasks.push({\n node,\n pos,\n nodeType,\n });\n }\n return true;\n });\n\n if (!tasks.length) {\n return tr;\n }\n\n tasks.forEach(job => {\n const {node, pos, nodeType} = job;\n const newAttrs = {\n ...node.attrs,\n class: classValue ? classValue : null,\n };\n\n tr = tr.setNodeMarkup(pos, nodeType, newAttrs, node.marks);\n });\n\n return tr;\n}\n\n/**\n * Returns the first `class` attribute that is non-empty in the selection.\n * If not found, return empty string.\n */\nfunction findFirstClassInSelection(state: EditorState, allowedNodeTypes: string[]): string {\n const {selection, doc} = state;\n const {from, to} = selection;\n let keepLooking = true;\n let foundClass = '';\n\n doc.nodesBetween(from, to, node => {\n if (keepLooking && allowedNodeTypes.includes(node.type.name) && node.attrs.class) {\n keepLooking = false;\n foundClass = node.attrs.class;\n }\n\n return keepLooking;\n });\n\n return foundClass;\n}\n\nexport class ClassItem extends Item {\n public constructor(dialog: MatDialog, nodeTypes: string[]) {\n super({\n active: state => {\n return !!findFirstClassInSelection(state, nodeTypes);\n },\n\n enable: state => {\n return selectionContainsNodeType(state, nodeTypes);\n },\n\n run: (state, dispatch, view): void => {\n dialog\n .open<ClassDialogComponent, ClassDialogData, ClassDialogData>(ClassDialogComponent, {\n data: {\n class: findFirstClassInSelection(state, nodeTypes),\n },\n })\n .afterClosed()\n .subscribe(result => {\n if (dispatch && result) {\n const {selection} = state;\n\n const tr = setClass(state.tr.setSelection(selection), result.class, nodeTypes);\n if (tr.docChanged) {\n dispatch?.(tr);\n }\n }\n\n view.focus();\n });\n },\n });\n }\n}\n","import {Component, Inject} from '@angular/core';\nimport {MAT_DIALOG_DATA, MatDialogRef, MatDialogModule} from '@angular/material/dialog';\nimport {FormControl, FormGroup, Validators, FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport {ifValid} from '@ecodev/natural';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatInputModule} from '@angular/material/input';\nimport {MatFormFieldModule} from '@angular/material/form-field';\n\nexport type IdDialogData = {\n /**\n * ID name\n *\n * Eg:\n *\n * - `\"\"`\n * - `\"my-id\"`\n */\n id: string;\n};\n\n@Component({\n templateUrl: './id-dialog.component.html',\n styleUrl: './id-dialog.component.scss',\n standalone: true,\n imports: [MatDialogModule, FormsModule, ReactiveFormsModule, MatFormFieldModule, MatInputModule, MatButtonModule],\n})\nexport class IdDialogComponent {\n public readonly idControl = new FormControl('', {\n validators: Validators.pattern(/(^(-?[_a-zA-Z]+[_a-zA-Z0-9-]*)+)/),\n nonNullable: true,\n });\n public readonly form = new FormGroup({\n id: this.idControl,\n });\n\n public constructor(\n @Inject(MAT_DIALOG_DATA) data: IdDialogData,\n private dialogRef: MatDialogRef<IdDialogComponent, IdDialogData>,\n ) {\n this.form.setValue(data);\n }\n\n public maybeConfirm(): void {\n ifValid(this.form).subscribe(() => this.confirm());\n }\n\n private confirm(): void {\n this.dialogRef.close(this.form.getRawValue());\n }\n}\n","<h2 i18n mat-dialog-title>Saisir le ID</h2>\n\n<mat-dialog-content [formGroup]=\"form\">\n <mat-form-field>\n <mat-label i18n>ID</mat-label>\n <input matInput [formControl]=\"idControl\" (keydown.enter)=\"maybeConfirm()\" cdkFocusInitial />\n @if (idControl.hasError('pattern')) {\n <mat-error i18n>Doit être un ID valide</mat-error>\n }\n </mat-form-field>\n</mat-dialog-content>\n\n<mat-dialog-actions align=\"end\">\n <button mat-button mat-dialog-close i18n>Annuler</button>\n <button mat-stroked-button (click)=\"maybeConfirm()\" [disabled]=\"!form.valid\"><span i18n>Valider</span></button>\n</mat-dialog-actions>\n","import {Node, NodeType} from 'prosemirror-model';\nimport {EditorState, Transaction} from 'prosemirror-state';\nimport {Item} from './item';\nimport {selectionContainsNodeType} from './utils';\nimport {MatDialog} from '@angular/material/dialog';\nimport {IdDialogComponent, IdDialogData} from '../../id-dialog/id-dialog.component';\n\nfunction setId(tr: Transaction, idValue: string, allowedNodeTypes: string[]): Transaction {\n const {selection, doc} = tr;\n if (!selection || !doc) {\n return tr;\n }\n const {from, to} = selection;\n\n const tasks: {\n node: Node;\n pos: number;\n nodeType: NodeType;\n }[] = [];\n\n doc.nodesBetween(from, to, (node, pos) => {\n const nodeType = node.type;\n const currentId = node.attrs.id || null;\n if (currentId !== idValue && allowedNodeTypes.includes(nodeType.name)) {\n tasks.push({\n node,\n pos,\n nodeType,\n });\n }\n return true;\n });\n\n if (!tasks.length) {\n return tr;\n }\n\n tasks.forEach(job => {\n const {node, pos, nodeType} = job;\n const newAttrs = {\n ...node.attrs,\n id: idValue ? idValue : null,\n };\n\n tr = tr.setNodeMarkup(pos, nodeType, newAttrs, node.marks);\n });\n\n return tr;\n}\n\n/**\n * Returns the first `id` attribute that is non-empty in the selection.\n * If not found, return empty string.\n */\nfunction findFirstIdInSelection(state: EditorState, allowedNodeTypes: string[]): string {\n const {selection, doc} = state;\n const {from, to} = selection;\n let keepLooking = true;\n let foundId = '';\n\n doc.nodesBetween(from, to, node => {\n if (keepLooking && allowedNodeTypes.includes(node.type.name) && node.attrs.id) {\n keepLooking = false;\n foundId = node.attrs.id;\n }\n\n return keepLooking;\n });\n\n return foundId;\n}\n\nexport class IdItem extends Item {\n public constructor(dialog: MatDialog, nodeTypes: string[]) {\n super({\n active: state => {\n return !!findFirstIdInSelection(state, nodeTypes);\n },\n\n enable: state => {\n return selectionContainsNodeType(state, nodeTypes);\n },\n\n run: (state, dispatch, view): void => {\n dialog\n .open<IdDialogComponent, IdDialogData, IdDialogData>(IdDialogComponent, {\n data: {\n id: findFirstIdInSelection(state, nodeTypes),\n },\n })\n .afterClosed()\n .subscribe(result => {\n if (dispatch && result) {\n const {selection} = state;\n\n const tr = setId(state.tr.setSelection(selection), result.id, nodeTypes);\n if (tr.docChanged) {\n dispatch?.(tr);\n }\n }\n\n view.focus();\n });\n },\n });\n }\n}\n","import {EditorState, TextSelection, Transaction} from 'prosemirror-state';\nimport {Fragment, Node as ProsemirrorNode, NodeType} from 'prosemirror-model';\nimport {tableNodeTypes} from 'prosemirror-tables';\nimport {Item} from './item';\n\nfunction createCell(\n cellType: NodeType,\n cellContent?: Fragment | ProsemirrorNode | ProsemirrorNode[],\n): ProsemirrorNode | null | undefined {\n return cellContent ? cellType.createChecked(null, cellContent) : cellType.createAndFill();\n}\n\nfunction createTable(\n state: EditorState,\n rowsCount: number,\n colsCount: number,\n withHeaderRow: boolean,\n cellContent?: Fragment | ProsemirrorNode | ProsemirrorNode[],\n): ProsemirrorNode {\n const types = tableNodeTypes(state.schema);\n const headerCells = [];\n const cells = [];\n\n for (let index = 0; index < colsCount; index += 1) {\n const cell = createCell(types.cell, cellContent);\n\n if (cell) {\n cells.push(cell);\n }\n\n if (withHeaderRow) {\n const headerCell = createCell(types.header_cell, cellContent);\n\n if (headerCell) {\n headerCells.push(headerCell);\n }\n }\n }\n\n const rows = [];\n\n for (let index = 0; index < rowsCount; index += 1) {\n rows.push(types.row.createChecked(null, withHeaderRow && index === 0 ? headerCells : cells));\n }\n\n return types.table.createChecked(null, rows);\n}\n\nfunction addTable(\n state: EditorState,\n dispatch?: (tr: Transaction) => void,\n {\n rowsCount = 3,\n colsCount = 3,\n withHeaderRow = true,\n cellContent,\n }: {\n rowsCount?: number;\n colsCount?: number;\n withHeaderRow?: boolean;\n cellContent?: Fragment | ProsemirrorNode | ProsemirrorNode[];\n } = {},\n): void {\n const offset = state.tr.selection.anchor + 1;\n\n const nodes = createTable(state, rowsCount, colsCount, withHeaderRow, cellContent);\n const tr = state.tr.replaceSelectionWith(nodes).scrollIntoView();\n const resolvedPos = tr.doc.resolve(offset);\n\n // move cursor into table\n tr.setSelection(TextSelection.near(resolvedPos));\n\n dispatch?.(tr);\n}\n\nexport class AddTableItem extends Item {\n public constructor() {\n super({run: (editor, tr) => addTable(editor, tr)});\n }\n}\n","import {\n blockTypeItem,\n joinUpItem,\n liftItem,\n redoItem,\n selectParentNodeItem,\n undoItem,\n wrapItem,\n} from 'prosemirror-menu';\nimport {MarkType, NodeType, Schema} from 'prosemirror-model';\nimport {MatDialog} from '@angular/material/dialog';\nimport {\n addColumnAfter,\n addColumnBefore,\n addRowAfter,\n addRowBefore,\n deleteColumn,\n deleteRow,\n deleteTable,\n mergeCells,\n splitCell,\n toggleHeaderCell,\n toggleHeaderColumn,\n toggleHeaderRow,\n} from 'prosemirror-tables';\nimport {Item} from './items/item';\nimport {paragraphWithAlignment} from './schema/paragraph-with-alignment';\nimport {TextAlignItem} from './items/text-align-item';\nimport {CellBackgroundColorItem} from './items/cell-background-color-item';\nimport {LinkItem} from './items/link-item';\nimport {HorizontalRuleItem} from './items/horizontal-rule-item';\nimport {cmdToItem, markTypeToItem, menuItemToItem} from './items/utils';\nimport {wrapListItem} from './items/wrap-list-item';\nimport {ClassItem} from './items/class-item';\nimport {IdItem} from './items/id-item';\nimport {AddTableItem} from './items/table-item';\n\nexport type Key =\n | 'toggleStrong'\n | 'toggleEm'\n | 'toggleCode'\n | 'toggleLink'\n | 'wrapBulletList'\n | 'wrapOrderedList'\n | 'wrapBlockQuote'\n | 'makeParagraph'\n | 'makeCodeBlock'\n | 'makeHead1'\n | 'makeHead2'\n | 'makeHead3'\n | 'makeHead4'\n | 'makeHead5'\n | 'makeHead6'\n | 'alignLeft'\n | 'alignRight'\n | 'alignCenter'\n | 'alignJustify'\n | 'insertHorizontalRule'\n | 'joinUp'\n | 'lift'\n | 'selectParentNode'\n | 'undo'\n | 'redo'\n | 'insertTable'\n | 'addColumnBefore'\n | 'addColumnAfter'\n | 'deleteColumn'\n | 'addRowBefore'\n | 'addRowAfter'\n | 'deleteRow'\n | 'deleteTable'\n | 'mergeCells'\n | 'splitCell'\n | 'toggleHeaderColumn'\n | 'toggleHeaderRow'\n | 'toggleHeaderCell'\n | 'cellBackgroundColor'\n | 'tableClass'\n | 'tableId'\n | 'blockClass'\n | 'blockId';\n\nexport type MenuItems = Partial<Record<Key, Item>>;\n\n/**\n * Given a schema, look for default mark and node types in it and\n * return an object with relevant menu items relating to those marks:\n */\nexport function buildMenuItems(schema: Schema, dialog: MatDialog): MenuItems {\n const r: MenuItems = {\n joinUp: menuItemToItem(joinUpItem),\n lift: menuItemToItem(liftItem),\n selectParentNode: menuItemToItem(selectParentNodeItem),\n undo: menuItemToItem(undoItem),\n redo: menuItemToItem(redoItem),\n };\n\n let type: MarkType | NodeType | undefined;\n type = schema.marks.strong;\n if (type) {\n r.toggleStrong = markTypeToItem(type);\n }\n\n type = schema.marks.em;\n if (type) {\n r.toggleEm = markTypeToItem(type);\n }\n\n type = schema.marks.code;\n if (type) {\n r.toggleCode = markTypeToItem(type);\n }\n\n type = schema.marks.link;\n if (type) {\n r.toggleLink = new LinkItem(type, dialog);\n }\n\n type = schema.nodes.bullet_list;\n if (type) {\n r.wrapBulletList = wrapListItem(type);\n }\n\n type = schema.nodes.ordered_list;\n if (type) {\n r.wrapOrderedList = wrapListItem(type);\n }\n\n type = schema.nodes.blockquote;\n if (type) {\n r.wrapBlockQuote = menuItemToItem(wrapItem(type, {}));\n }\n\n type = schema.nodes.paragraph;\n if (type) {\n r.makeParagraph = menuItemToItem(blockTypeItem(type, {}));\n\n if (type.spec === paragraphWithAlignment) {\n r.alignLeft = new TextAlignItem('left');\n r.alignRight = new TextAlignItem('right');\n r.alignCenter = new TextAlignItem('center');\n r.alignJustify = new TextAlignItem('justify');\n }\n }\n\n type = schema.nodes.code_block;\n if (type) {\n r.makeCodeBlock = menuItemToItem(blockTypeItem(type, {}));\n }\n\n type = schema.nodes.heading;\n if (type) {\n r.makeHead1 = menuItemToItem(blockTypeItem(type, {attrs: {level: 1}}));\n r.makeHead2 = menuItemToItem(blockTypeItem(type, {attrs: {level: 2}}));\n r.makeHead3 = menuItemToItem(blockTypeItem(type, {attrs: {level: 3}}));\n r.makeHead4 = menuItemToItem(blockTypeItem(type, {attrs: {level: 4}}));\n r.makeHead5 = menuItemToItem(blockTypeItem(type, {attrs: {level: 5}}));\n r.makeHead6 = menuItemToItem(blockTypeItem(type, {attrs: {level: 6}}));\n }\n if (schema.nodes.paragraph?.spec === paragraphWithAlignment) {\n r.blockId = new IdItem(dialog, ['heading', 'paragraph']);\n r.blockClass = new ClassItem(dialog, ['heading', 'paragraph']);\n }\n\n type = schema.nodes.horizontal_rule;\n if (type) {\n r.insertHorizontalRule = new HorizontalRuleItem(type);\n }\n\n type = schema.nodes.table;\n if (type) {\n r.insertTable = new AddTableItem();\n r.addColumnBefore = cmdToItem(addColumnBefore);\n r.addColumnAfter = cmdToItem(addColumnAfter);\n r.deleteColumn = cmdToItem(deleteColumn);\n r.addRowBefore = cmdToItem(addRowBefore);\n r.addRowAfter = cmdToItem(addRowAfter);\n r.deleteRow = cmdToItem(deleteRow);\n r.deleteTable = cmdToItem(deleteTable);\n r.mergeCells = cmdToItem(mergeCells);\n r.splitCell = cmdToItem(splitCell);\n r.toggleHeaderColumn = cmdToItem(toggleHeaderColumn);\n r.toggleHeaderRow = cmdToItem(toggleHeaderRow);\n r.toggleHeaderCell = cmdToItem(toggleHeaderCell);\n r.cellBackgroundColor = new CellBackgroundColorItem(dialog);\n r.tableClass = new ClassItem(dialog, ['table']);\n r.tableId = new IdItem(dialog, ['table']);\n }\n\n return r;\n}\n","import {\n ellipsis,\n emDash,\n InputRule,\n inputRules,\n textblockTypeInputRule,\n wrappingInputRule,\n} from 'prosemirror-inputrules';\nimport {NodeType, Schema} from 'prosemirror-model';\nimport {Plugin} from 'prosemirror-state';\n\n/**\n * Given a blockquote node type, returns an input rule that turns `\"> \"`\n * at the start of a textblock into a blockquote.\n */\nfunction blockQuoteRule(nodeType: NodeType): InputRule {\n return wrappingInputRule(/^\\s*>\\s$/, nodeType);\n}\n\n/**\n * Given a list node type, returns an input rule that turns a number\n * followed by a dot at the start of a textblock into an ordered list.\n */\nfunction orderedListRule(nodeType: NodeType): InputRule {\n return wrappingInputRule(\n /^(\\d+)\\.\\s$/,\n nodeType,\n match => ({order: +match[1]}),\n (match, node) => node.childCount + node.attrs.order === +match[1],\n );\n}\n\n/**\n * Given a list node type, returns an input rule that turns a bullet\n * (dash, plush, or asterisk) at the start of a textblock into a\n * bullet list.\n */\nfunction bulletListRule(nodeType: NodeType): InputRule {\n return wrappingInputRule(/^\\s*([-+*])\\s$/, nodeType);\n}\n\n/**\n * Given a code block node type, returns an input rule that turns a\n * textblock starting with three backticks into a code block.\n */\nfunction codeBlockRule(nodeType: NodeType): InputRule {\n return textblockTypeInputRule(/^```$/, nodeType);\n}\n\n/**\n * Given a node type and a maximum level, creates an input rule that\n * turns up to that number of `#` characters followed by a space at\n * the start of a textblock into a heading whose level corresponds to\n * the number of `#` signs.\n */\nfunction headingRule(nodeType: NodeType, maxLevel: number): InputRule {\n return textblockTypeInputRule(new RegExp('^(#{1,' + maxLevel + '})\\\\s$'), nodeType, match => ({\n level: match[1].length,\n }));\n}\n\n/**\n * A set of input rules for creating the basic block quotes, lists,\n * code blocks, and heading.\n */\nexport function buildInputRules(schema: Schema): Plugin {\n const rules = [ellipsis, emDash];\n\n let type = schema.nodes.blockquote;\n if (type) {\n rules.push(blockQuoteRule(type));\n }\n\n type = schema.nodes.ordered_list;\n if (type) {\n rules.push(orderedListRule(type));\n }\n\n type = schema.nodes.bullet_list;\n if (type) {\n rules.push(bulletListRule(type));\n }\n\n type = schema.nodes.code_block;\n if (type) {\n rules.push(codeBlockRule(type));\n }\n\n type = schema.nodes.heading;\n if (type) {\n rules.push(headingRule(type, 6));\n }\n\n return inputRules({rules});\n}\n","import {\n chainCommands,\n exitCode,\n joinDown,\n joinUp,\n lift,\n selectParentNode,\n setBlockType,\n toggleMark,\n wrapIn,\n} from 'prosemirror-commands';\nimport {liftListItem, sinkListItem, splitListItem, wrapInList} from 'prosemirror-schema-list';\nimport {redo, undo} from 'prosemirror-history';\nimport {undoInputRule} from 'prosemirror-inputrules';\nimport {MarkType, NodeType, Schema} from 'prosemirror-model';\nimport {Command} from 'prosemirror-state';\n\ntype Keymap = Record<string, Command>;\n\n/**\n * Inspect the given schema looking for marks and nodes from the\n * basic schema, and if found, add key bindings related to them.\n * This will add:\n *\n * * **Mod-b** for toggling [strong](#schema-basic.StrongMark)\n * * **Mod-i** for toggling [emphasis](#schema-basic.EmMark)\n * * **Mod-`** for toggling [code font](#schema-basic.CodeMark)\n * * **Ctrl-Shift-0** for making the current textblock a paragraph\n * * **Ctrl-Shift-1** to **Ctrl-Shift-Digit6** for making the current\n * textblock a heading of the corresponding level\n * * **Ctrl-Shift-Backslash** to make the current textblock a code block\n * * **Ctrl-Shift-8** to wrap the selection in an ordered list\n * * **Ctrl-Shift-9** to wrap the selection in a bullet list\n * * **Ctrl->** to wrap the selection in a block quote\n * * **Enter** to split a non-empty textblock in a list item while at\n * the same time splitting the list item\n * * **Mod-Enter** to insert a hard break\n * * **Mod-_** to insert a horizontal rule\n * * **Backspace** to undo an input rule\n * * **Alt-ArrowUp** to `joinUp`\n * * **Alt-ArrowDown** to `joinDown`\n * * **Mod-BracketLeft** to `lift`\n * * **Escape** to `selectParentNode`\n *\n * You can suppress or map these bindings by passing a `mapKeys`\n * argument, which maps key names (say `\"Mod-B\"` to either `false`, to\n * remove the binding, or a new key name string.\n */\nexport function buildKeymap(schema: Schema, isMac: boolean): Keymap {\n const keys: Keymap = {};\n\n keys['Mod-z'] = undo;\n keys['Shift-Mod-z'] = redo;\n keys.Backspace = undoInputRule;\n if (!isMac) {\n keys['Mod-y'] = redo;\n }\n\n keys['Alt-ArrowUp'] = joinUp;\n keys['Alt-ArrowDown'] = joinDown;\n keys['Mod-BracketLeft'] = lift;\n keys.Escape = selectParentNode;\n\n let type: MarkType | NodeType = schema.marks.strong;\n if (type) {\n keys['Mod-b'] = toggleMark(type);\n keys['Mod-B'] = toggleMark(type);\n }\n\n type = schema.marks.em;\n if (type) {\n keys['Mod-i'] = toggleMark(type);\n keys['Mod-I'] = toggleMark(type);\n }\n\n type = schema.marks.code;\n if (type) {\n keys['Mod-`'] = toggleMark(type);\n }\n\n type = schema.nodes.bullet_list;\n if (type) {\n keys['Shift-Ctrl-8'] = wrapInList(type);\n }\n\n type = schema.nodes.ordered_list;\n if (type) {\n keys['Shift-Ctrl-9'] = wrapInList(type);\n }\n\n type = schema.nodes.blockquote;\n if (type) {\n keys['Ctrl->'] = wrapIn(type);\n }\n\n type = schema.nodes.hard_break;\n if (type) {\n const br = type;\n const cmd = chainCommands(exitCode, (state, dispatch) => {\n dispatch?.(state.tr.replaceSelectionWith(br.create()).scrollIntoView());\n return true;\n });\n keys['Mod-Enter'] = cmd;\n keys['Shift-Enter'] = cmd;\n if (isMac) {\n keys['Ctrl-Enter'] = cmd;\n }\n }\n\n type = schema.nodes.list_item;\n if (type) {\n keys.Enter = splitListItem(type);\n keys['Mod-['] = liftListItem(type);\n keys['Mod-]'] = sinkListItem(type);\n }\n\n type = schema.nodes.paragraph;\n if (type) {\n keys['Shift-Ctrl-0'] = setBlockType(type);\n }\n\n type = schema.nodes.code_block;\n if (type) {\n keys['Shift-Ctrl-\\\\'] = setBlockType(type);\n }\n\n type = schema.nodes.heading;\n if (type) {\n for (let i = 1; i <= 6; i++) {\n keys['Shift-Ctrl-' + i] = setBlockType(type, {level: i});\n }\n }\n\n type = schema.nodes.horizontal_rule;\n if (type) {\n const hr = type;\n keys['Mod-_'] = (state, dispatch) => {\n dispatch?.(state.tr.replaceSelectionWith(hr.create()).scrollIntoView());\n return true;\n };\n }\n\n return keys;\n}\n","import {\n Component,\n ElementRef,\n EventEmitter,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n Self,\n ViewChild,\n} from '@angular/core';\nimport {ControlValueAccessor, NgControl} from '@angular/forms';\nimport {EditorView} from 'prosemirror-view';\nimport {EditorState, Plugin, Transaction} from 'prosemirror-state';\nimport {DOMParser, DOMSerializer, Schema} from 'prosemirror-model';\nimport {DOCUMENT} from '@angular/common';\nimport {MatDialog} from '@angular/material/dialog';\nimport {goToNextCell, tableEditing} from 'prosemirror-tables';\nimport {keymap} from 'prosemirror-keymap';\nimport {ImagePlugin, ImageUploader} from '../utils/image';\nimport {advancedSchema, basicSchema} from '../utils/schema/schema';\nimport {buildMenuItems, Key, MenuItems} from '../utils/menu';\nimport {history} from 'prosemirror-history';\nimport {baseKeymap} from 'prosemirror-commands';\nimport {dropCursor} from 'prosemirror-dropcursor';\nimport {gapCursor} from 'prosemirror-gapcursor';\nimport {buildInputRules} from '../utils/inputrules';\nimport {buildKeymap} from '../utils/keymap';\nimport {NaturalFileDropDirective} from '@ecodev/natural';\nimport {MatDividerModule} from '@angular/material/divider';\nimport {MatMenuModule} from '@angular/material/menu';\nimport {MatButtonToggleModule} from '@angular/material/button-toggle';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatTooltipModule} from '@angular/material/tooltip';\nimport {MatButtonModule} from '@angular/material/button';\n\n/**\n * Prosemirror component\n *\n * Usage :\n *\n * ```html\n * <natural-editor [(ngModel)]=\"htmlString\" />\n * ```\n */\n// @dynamic\n@Component({\n selector: 'natural-editor',\n templateUrl: './editor.component.html',\n styleUrl: './editor.component.scss',\n providers: [ImagePlugin],\n standalone: true,\n imports: [\n MatButtonModule,\n MatTooltipModule,\n MatIconModule,\n MatButtonToggleModule,\n MatMenuModule,\n MatDividerModule,\n NaturalFileDropDirective,\n ],\n})\nexport class NaturalEditorComponent implements OnInit, OnDestroy, ControlValueAccessor {\n private view: EditorView | null = null;\n\n @ViewChild('editor', {read: ElementRef, static: true}) private editor!: ElementRef<HTMLElement>;\n\n @Output() public readonly contentChange = new EventEmitter<string>();\n\n /**\n * Callback to upload an image.\n *\n * If given it will enable advanced schema, including image and tables.\n * It must be given on initialization and cannot be changed later on.\n */\n @Input() public imageUploader: ImageUploader | null = null;\n\n private schema: Schema = basicSchema;\n\n /**\n * Interface with ControlValueAccessor\n * Notifies parent model / form controller\n */\n private onChange?: (value: string | null) => void;\n\n /**\n * HTML string\n */\n private content = '';\n\n public menu: MenuItems | null = null;\n\n /**\n * If subscribed to, then the save button will be shown and click events forwarded\n */\n @Output() public readonly save = new EventEmitter<void>();\n\n public disabled = false;\n\n public constructor(\n @Optional() @Self() public readonly ngControl: NgControl,\n @Inject(DOCUMENT) private readonly document: Document,\n private readonly dialog: MatDialog,\n private readonly imagePlugin: ImagePlugin,\n ) {\n if (this.ngControl !== null) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n public ngOnInit(): void {\n this.schema = this.imageUploader ? advancedSchema : basicSchema;\n this.menu = buildMenuItems(this.schema, this.dialog);\n const serializer = DOMSerializer.fromSchema(this.schema);\n const state = this.createState();\n\n this.view = new EditorView(this.editor.nativeElement, {\n state: state,\n editable: () => !this.disabled,\n dispatchTransaction: (transaction: Transaction) => {\n if (!this.view) {\n return;\n }\n\n const newState = this.view.state.apply(transaction);\n this.view.updateState(newState);\n\n // Transform doc into HTML string\n const dom = serializer.serializeFragment(this.view.state.doc as any);\n const el = this.document.createElement('_');\n el.appendChild(dom);\n\n const newContent = el.innerHTML;\n if (this.content === newContent || this.disabled) {\n return;\n }\n\n this.content = el.innerHTML;\n\n if (this.onChange) {\n this.onChange(this.content);\n }\n this.contentChange.emit(this.content);\n },\n });\n this.update();\n }\n\n public writeValue(val: string | undefined): void {\n if (typeof val === 'string' && val !== this.content) {\n this.content = val;\n }\n\n if (this.view !== null) {\n const state = this.createState();\n this.view.updateState(state);\n }\n }\n\n private createState(): EditorState {\n const template = this.document.createElement('_');\n template.innerHTML = '<div>' + this.content + '</div>';\n if (!template.firstChild) {\n throw new Error('child of template element could not be created');\n }\n\n const parser = DOMParser.fromSchema(this.schema);\n const doc = parser.parse(template.firstChild);\n\n return EditorState.create({\n doc: doc,\n plugins: this.createPlugins(),\n });\n }\n\n private createPlugins(): Plugin[] {\n const isMac = !!this.document.defaultView?.navigator.platform.match(/Mac/);\n\n const plugins = [\n buildInputRules(this.schema),\n keymap(buildKeymap(this.schema, isMac)),\n keymap(baseKeymap),\n dropCursor(),\n gapCursor(),\n history(),\n new Plugin({\n props: {\n attributes: {class: 'ProseMirror-example-setup-style'},\n },\n }),\n new Plugin({\n view: () => this,\n }),\n ];\n\n if (this.schema === advancedSchema) {\n plugins.push(\n this.imagePlugin.plugin,\n tableEditing(),\n keymap({\n Tab: goToNextCell(1),\n 'Shift-Tab': goToNextCell(-1),\n }),\n );\n }\n\n return plugins;\n }\n\n /**\n * Called by Prosemirror whenever the editor state changes. So we update our menu states.\n */\n public update(): void {\n if (!this.view || !this.menu) {\n return;\n }\n\n for (const item of Object.values(this.menu)) {\n item.update(this.view, this.view.state);\n }\n }\n\n public registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n public registerOnTouched(): void {\n // noop\n }\n\n public setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n public ngOnDestroy(): void {\n if (this.view) {\n this.view.destroy();\n this.view = null;\n }\n }\n\n public run(event: Event, key: Key): void {\n if (!this.view || !this.menu) {\n return;\n }\n\n const item = this.menu[key];\n if (!item || item.disabled || !item.show) {\n return;\n }\n\n item.spec.run(this.view.state, this.view.dispatch, this.view, event);\n this.view.focus();\n }\n\n public upload(file: File): void {\n if (!this.view || !this.imageUploader) {\n return;\n }\n\n if (this.view.state.selection.$from.parent.inlineContent) {\n this.imagePlugin.startImageUpload(this.view, file, this.imageUploader, this.schema);\n }\n\n this.view.focus();\n }\n}\n","@if (menu && !this.disabled) {\n <div class=\"menu-container\">\n <div class=\"menu\">\n @if (save.observed) {\n <button mat-icon-button (click)=\"save.emit()\" i18n-matTooltip matTooltip=\"Enregistrer\">\n <mat-icon fontIcon=\"save\" />\n </button>\n }\n <mat-button-toggle-group hideMultipleSelectionIndicator multiple>\n @if (menu.toggleStrong) {\n <mat-button-toggle\n [disabled]=\"menu.toggleStrong.disabled\"\n [checked]=\"menu.toggleStrong.active\"\n (click)=\"run($event, 'toggleStrong')\"\n i18n-matTooltip\n matTooltip=\"Gras\"\n >\n <mat-icon fontIcon=\"format_bold\" />\n </mat-button-toggle>\n }\n @if (menu.toggleEm) {\n <mat-button-toggle\n [disabled]=\"menu.toggleEm.disabled\"\n [checked]=\"menu.toggleEm.active\"\n (click)=\"run($event, 'toggleEm')\"\n i18n-matTooltip\n matTooltip=\"Italique\"\n >\n <mat-icon fontIcon=\"format_italic\" />\n </mat-button-toggle>\n }\n @if (menu.toggleCode) {\n <mat-button-toggle\n [disabled]=\"menu.toggleCode.disabled\"\n [checked]=\"menu.toggleCode.active\"\n (click)=\"run($event, 'toggleCode')\"\n i18n-matTooltip\n matTooltip=\"Code\"\n >\n <mat-icon fontIcon=\"code\" />\n </mat-button-toggle>\n }\n @if (menu.toggleLink) {\n <mat-button-toggle\n [disabled]=\"menu.toggleLink.disabled\"\n [checked]=\"menu.toggleLink.active\"\n (click)=\"run($event, 'toggleLink')\"\n i18n-matTooltip\n matTooltip=\"Insérer un lien...\"\n >\n <mat-icon fontIcon=\"insert_link\" />\n </mat-button-toggle>\n }\n </mat-button-toggle-group>\n <button mat-button [matMenuTriggerFor]=\"blockMenu\">\n <span i18n>Type</span>\n <mat-icon fontIcon=\"arrow_drop_down\" />\n </button>\n <mat-menu #blockMenu=\"matMenu\">\n @if (menu.makeParagraph) {\n <button\n mat-menu-item\n [disabled]=\"menu.makeParagraph.disabled\"\n (click)=\"run($event, 'makeParagraph')\"\n i18n\n >Paragraphe\n </button>\n }\n @if (menu.makeCodeBlock) {\n <button\n mat-menu-item\n [disabled]=\"menu.makeCodeBlock.disabled\"\n (click)=\"run($event, 'makeCodeBlock')\"\n i18n\n >Code\n </button>\n }\n @if (menu.makeHead1) {\n <button mat-menu-item [disabled]=\"menu.makeHead1.disabled\" (click)=\"run($event, 'makeHead1')\" i18n\n >Titre 1\n </button>\n }\n @if (menu.makeHead2) {\n <button mat-menu-item [disabled]=\"menu.makeHead2.disabled\" (click)=\"run($event, 'makeHead2')\" i18n\n >Titre 2\n </button>\n }\n @if (menu.makeHead3) {\n <button mat-menu-item [disabled]=\"menu.makeHead3.disabled\" (click)=\"run($event, 'makeHead3')\" i18n\n >Titre 3\n </button>\n }\n @if (menu.makeHead4) {\n <button mat-menu-item [disabled]=\"menu.makeHead4.disabled\" (click)=\"run($event, 'makeHead4')\" i18n\n >Titre 4\n </button>\n }\n @if (menu.makeHead5) {\n <button mat-menu-item [disabled]=\"menu.makeHead5.disabled\" (click)=\"run($event, 'makeHead5')\" i18n\n >Titre 5\n </button>\n }\n @if (menu.makeHead6) {\n <button mat-menu-item [disabled]=\"menu.makeHead6.disabled\" (click)=\"run($event, 'makeHead6')\" i18n\n >Titre 6\n </button>\n }\n <mat-divider />\n @if (menu.blockClass) {\n <button mat-menu-item [disabled]=\"menu.blockClass.disabled\" (click)=\"run($event, 'blockClass')\" i18n\n >Classe...\n </button>\n }\n @if (menu.blockId) {\n <button i18n mat-menu-item [disabled]=\"menu.blockId.disabled\" (click)=\"run($event, 'blockId')\"\n >ID...\n </button>\n }\n </mat-menu>\n @if (menu.addColumnBefore) {\n <button mat-button [matMenuTriggerFor]=\"tableMenu\">\n <span i18n>Tableau</span>\n <mat-icon fontIcon=\"arrow_drop_down\" />\n </button>\n }\n <mat-menu #tableMenu=\"matMenu\">\n @if (menu.insertTable) {\n <button\n mat-menu-item\n [disabled]=\"menu.insertTable.disabled\"\n (click)=\"run($event, 'insertTable')\"\n i18n\n >Insérer un tableau\n </button>\n }\n @if (menu.deleteTable) {\n <button\n mat-menu-item\n [disabled]=\"menu.deleteTable.disabled\"\n (click)=\"run($event, 'deleteTable')\"\n i18n\n >Supprimer le tableau\n </button>\n }\n @if (menu.mergeCells) {\n <button mat-menu-item [disabled]=\"menu.mergeCells.disabled\" (click)=\"run($event, 'mergeCells')\" i18n\n >Fusionner les cellules\n </button>\n }\n @if (menu.splitCell) {\n <button mat-menu-item [disabled]=\"menu.splitCell.disabled\" (click)=\"run($event, 'splitCell')\" i18n\n >Scinder les cellules\n </button>\n }\n @if (menu.cellBackgroundColor) {\n <button\n mat-menu-item\n [disabled]=\"menu.cellBackgroundColor.disabled\"\n (click)=\"run($event, 'cellBackgroundColor')\"\n i18n\n >Couleur de fond...\n </button>\n }\n @if (menu.tableClass) {\n <button mat-menu-item [disabled]=\"menu.tableClass.disabled\" (click)=\"run($event, 'tableClass')\" i18n\n >Classe...\n </button>\n }\n @if (menu.tableId) {\n <button i18n mat-menu-item [disabled]=\"menu.tableId.disabled\" (click)=\"run($event, 'tableId')\"\n >ID...\n </button>\n }\n <mat-divider />\n @if (menu.addColumnBefore) {\n <button\n mat-menu-item\n [disabled]=\"menu.addColumnBefore.disabled\"\n (click)=\"run($event, 'addColumnBefore')\"\n i18n\n >Insérer une colonne avant\n </button>\n }\n @if (menu.addColumnAfter) {\n <button\n mat-menu-item\n [disabled]=\"menu.addColumnAfter.disabled\"\n (click)=\"run($event, 'addColumnAfter')\"\n i18n\n >Insérer une colonne après\n </button>\n }\n @if (menu.deleteColumn) {\n <button\n mat-menu-item\n [disabled]=\"menu.deleteColumn.disabled\"\n (click)=\"run($event, 'deleteColumn')\"\n i18n\n >Supprimer la colonne\n </button>\n }\n <mat-divider />\n @if (menu.addRowBefore) {\n <button\n mat-menu-item\n [disabled]=\"menu.addRowBefore.disabled\"\n (click)=\"run($event, 'addRowBefore')\"\n i18n\n >Insérer une ligne avant\n </button>\n }\n @if (menu.addRowAfter) {\n <button\n mat-menu-item\n [disabled]=\"menu.addRowAfter.disabled\"\n (click)=\"run($event, 'addRowAfter')\"\n i18n\n >Insérer une ligne après\n </button>\n }\n @if (menu.deleteRow) {\n <button mat-menu-item [disabled]=\"menu.deleteRow.disabled\" (click)=\"run($event, 'deleteRow')\" i18n\n >Supprimer la ligne\n </button>\n }\n <mat-divider />\n @if (menu.toggleHeaderColumn) {\n <button\n mat-menu-item\n [disabled]=\"menu.toggleHeaderColumn.disabled\"\n (click)=\"run($event, 'toggleHeaderColumn')\"\n i18n\n >Entête de colonne\n </button>\n }\n @if (menu.toggleHeaderRow) {\n <button\n mat-menu-item\n [disabled]=\"menu.toggleHeaderRow.disabled\"\n (click)=\"run($event, 'toggleHeaderRow')\"\n i18n\n >Entête de ligne\n </button>\n }\n @if (menu.toggleHeaderCell) {\n <button\n mat-menu-item\n [disabled]=\"menu.toggleHeaderCell.disabled\"\n (click)=\"run($event, 'toggleHeaderCell')\"\n i18n\n >Entête de cellule\n </button>\n }\n </mat-menu>\n @if (imageUploader) {\n <button\n mat-icon-button\n naturalFileDrop\n [selectable]=\"true\"\n [broadcast]=\"false\"\n i18n-matTooltip\n matTooltip=\"Insérer une image\"\n (fileChange)=\"upload($event)\"\n >\n <mat-icon fontIcon=\"insert_photo\" />\n </button>\n }\n @if (menu.alignLeft) {\n <mat-button-toggle-group hideSingleSelectionIndicator>\n @if (menu.alignLeft) {\n <mat-button-toggle\n [disabled]=\"menu.alignLeft.disabled\"\n [checked]=\"menu.alignLeft.active\"\n (click)=\"run($event, 'alignLeft')\"\n i18n-matTooltip\n matTooltip=\"Aligner gauche\"\n >\n <mat-icon fontIcon=\"format_align_left\" />\n </mat-button-toggle>\n }\n @if (menu.alignCenter) {\n <mat-button-toggle\n [disabled]=\"menu.alignCenter.disabled\"\n [checked]=\"menu.alignCenter.active\"\n (click)=\"run($event, 'alignCenter')\"\n i18n-matTooltip\n matTooltip=\"Centrer\"\n >\n <mat-icon fontIcon=\"format_align_center\" />\n </mat-button-toggle>\n }\n @if (menu.alignRight) {\n <mat-button-toggle\n [disabled]=\"menu.alignRight.disabled\"\n [checked]=\"menu.alignRight.active\"\n (click)=\"run($event, 'alignRight')\"\n i18n-matTooltip\n matTooltip=\"Aligner droite\"\n >\n <mat-icon fontIcon=\"format_align_right\" />\n </mat-button-toggle>\n }\n @if (menu.alignJustify) {\n <mat-button-toggle\n [disabled]=\"menu.alignJustify.disabled\"\n [checked]=\"menu.alignJustify.active\"\n (click)=\"run($event, 'alignJustify')\"\n i18n-matTooltip\n matTooltip=\"Justifier\"\n >\n <mat-icon fontIcon=\"format_align_justify\" />\n </mat-button-toggle>\n }\n </mat-button-toggle-group>\n }\n @if (menu.undo) {\n <button\n mat-icon-button\n [disabled]=\"menu.undo.disabled\"\n (click)=\"run($event, 'undo')\"\n i18n-matTooltip\n matTooltip=\"Annuler\"\n >\n <mat-icon fontIcon=\"undo\" />\n </button>\n }\n @if (menu.redo) {\n <button\n mat-icon-button\n [disabled]=\"menu.redo.disabled\"\n (click)=\"run($event, 'redo')\"\n i18n-matTooltip\n matTooltip=\"Refaire\"\n >\n <mat-icon fontIcon=\"redo\" />\n </button>\n }\n @if (menu.wrapBulletList && menu.wrapBulletList.show) {\n <button\n mat-icon-button\n [disabled]=\"menu.wrapBulletList.disabled\"\n (click)=\"run($event, 'wrapBulletList')\"\n i18n-matTooltip\n matTooltip=\"Liste à puce\"\n >\n <mat-icon fontIcon=\"format_list_bulleted\" />\n </button>\n }\n @if (menu.wrapOrderedList && menu.wrapOrderedList.show) {\n <button\n mat-icon-button\n [disabled]=\"menu.wrapOrderedList.disabled\"\n (click)=\"run($event, 'wrapOrderedList')\"\n i18n-matTooltip\n matTooltip=\"Liste à numéro\"\n >\n <mat-icon fontIcon=\"format_list_numbered\" />\n </button>\n }\n @if (menu.wrapBlockQuote && menu.wrapBlockQuote.show) {\n <button\n mat-icon-button\n [disabled]=\"menu.wrapBlockQuote.disabled\"\n (click)=\"run($event, 'wrapBlockQuote')\"\n i18n-matTooltip\n matTooltip=\"Citation\"\n >\n <mat-icon fontIcon=\"format_quote\" />\n </button>\n }\n @if (menu.joinUp && menu.joinUp.show) {\n <button\n mat-icon-button\n [disabled]=\"menu.joinUp.disabled\"\n (click)=\"run($event, 'joinUp')\"\n i18n-matTooltip\n matTooltip=\"Fusionner avec l'élément du haut\"\n >\n <mat-icon fontIcon=\"move_up\" />\n </button>\n }\n @if (menu.lift && menu.lift.show) {\n <button\n mat-icon-button\n [disabled]=\"menu.lift.disabled\"\n (click)=\"run($event, 'lift')\"\n i18n-matTooltip\n matTooltip=\"Désindenter\"\n >\n <mat-icon fontIcon=\"format_indent_decrease\" />\n </button>\n }\n @if (menu.selectParentNode && menu.selectParentNode.show) {\n <button\n mat-icon-button\n [disabled]=\"menu.selectParentNode.disabled\"\n (click)=\"run($event, 'selectParentNode')\"\n i18n-matTooltip\n matTooltip=\"Sélectionner l'élément parent\"\n >\n <mat-icon fontIcon=\"select_all\" />\n </button>\n }\n </div>\n </div>\n}\n<div class=\"editor-container\" #editor></div>\n","/// <reference types=\"@angular/localize\" />\n\n/*\n * Public API Surface of natural-editor\n */\n\nexport {NaturalCustomCssDirective} from './lib/custom-css/custom-css.directive';\nexport {NaturalEditorComponent} from './lib/editor/editor.component';\nexport {ImageUploader} from './lib/utils/image';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i6","findFirstClassInSelection","i2","i3.ImagePlugin","i5"],"mappings":"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"}
|
|
@@ -10,7 +10,7 @@ import * as i0 from "@angular/core";
|
|
|
10
10
|
* Usage :
|
|
11
11
|
*
|
|
12
12
|
* ```html
|
|
13
|
-
* <natural-editor [(ngModel)]="htmlString"
|
|
13
|
+
* <natural-editor [(ngModel)]="htmlString" />
|
|
14
14
|
* ```
|
|
15
15
|
*/
|
|
16
16
|
export declare class NaturalEditorComponent implements OnInit, OnDestroy, ControlValueAccessor {
|