@osovitny/anatoly 2.14.21 → 2.14.22

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.
@@ -14,7 +14,7 @@
14
14
  </file>
15
15
  */
16
16
  //Node
17
- import { Component, Input } from '@angular/core';
17
+ import { Component, Input, EventEmitter, Output } from '@angular/core';
18
18
  //App
19
19
  import { BaseEditComponent } from '../../../components/base-edit.component';
20
20
  import { Utils } from '../../../../core/utils';
@@ -27,28 +27,34 @@ export class UrlSlugComponent extends BaseEditComponent {
27
27
  constructor() {
28
28
  super();
29
29
  //Inputs
30
- this.title = 'Permalink';
30
+ this.title = 'Permalink:';
31
31
  this.isTitleVisible = true;
32
+ //Outputs
33
+ this.generating = new EventEmitter();
32
34
  }
33
35
  ngOnInit() {
34
36
  this.setWatchers();
35
37
  }
36
38
  setWatchers() {
37
- this.formGroup.get(this.watchedControlName).valueChanges.subscribe(val => {
38
- this.generateUrlSlug();
39
- });
39
+ if (this.watchedControlName) {
40
+ this.formGroup.get(this.watchedControlName).valueChanges.subscribe(val => {
41
+ this.generateUrlSlug();
42
+ });
43
+ }
40
44
  }
41
45
  generateUrlSlug() {
42
46
  let name = this.getFormValue(this.watchedControlName);
43
47
  let slugedText = Utils.slugify(name);
44
- this.setFormValue(this.controlName, slugedText);
48
+ let event = { urlSlug: slugedText };
49
+ this.generating.emit(event);
50
+ this.setFormValue(this.controlName, event.urlSlug);
45
51
  }
46
52
  }
47
53
  UrlSlugComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: UrlSlugComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
48
- UrlSlugComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: UrlSlugComponent, selector: "anatoly-forms-urlslug", inputs: { title: "title", isTitleVisible: "isTitleVisible", controlName: "controlName", controlTitle: "controlTitle", class: "class", watchedControlName: "watchedControlName", urlPrefix: "urlPrefix" }, usesInheritance: true, ngImport: i0, template: "<div [formGroup]='formGroup' class=\"{'has-error': isControlInvalid(controlName)} form-group {{class}}\">\r\n <label *ngIf='isTitleVisible' class='col-form-label'>{{ title }} <strong>{{ urlPrefix }} </strong></label>\r\n <input [formControlName]='controlName' type='text' placeholder='Type url slug here' class='form-control' />\r\n <anatoly-item-validation-summary [formGroup]='formGroup'\r\n [formSubmitted]='formSubmitted'\r\n [controlName]='controlName'\r\n [controlTitle]='controlTitle'>\r\n </anatoly-item-validation-summary>\r\n</div>\r\n", dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i3.NativeElementDirective, selector: "[formControl], [formControlName]" }, { kind: "component", type: i4.ItemValidationSummaryComponent, selector: "anatoly-item-validation-summary", inputs: ["controlName", "controlTitle"] }] });
54
+ UrlSlugComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: UrlSlugComponent, selector: "anatoly-forms-urlslug", inputs: { title: "title", isTitleVisible: "isTitleVisible", controlName: "controlName", controlTitle: "controlTitle", class: "class", watchedControlName: "watchedControlName", urlPrefix: "urlPrefix" }, outputs: { generating: "generating" }, usesInheritance: true, ngImport: i0, template: "<div [formGroup]='formGroup' class=\"d-flex permalink form-group {'has-error': isControlInvalid(controlName)} {{class}}\">\r\n <label *ngIf='isTitleVisible' class='col-form-label'> {{ title }} <span> {{ urlPrefix }} </span></label>\r\n <input [formControlName]='controlName' type='text' placeholder='Type url slug here' class='form-control' (generating)='generateUrlSlug()'/>\r\n <anatoly-item-validation-summary [formGroup]='formGroup'\r\n [formSubmitted]='formSubmitted'\r\n [controlName]='controlName'\r\n [controlTitle]='controlTitle'>\r\n </anatoly-item-validation-summary>\r\n</div>\r\n\r\n", dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i3.NativeElementDirective, selector: "[formControl], [formControlName]" }, { kind: "component", type: i4.ItemValidationSummaryComponent, selector: "anatoly-item-validation-summary", inputs: ["controlName", "controlTitle"] }] });
49
55
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: UrlSlugComponent, decorators: [{
50
56
  type: Component,
51
- args: [{ selector: 'anatoly-forms-urlslug', template: "<div [formGroup]='formGroup' class=\"{'has-error': isControlInvalid(controlName)} form-group {{class}}\">\r\n <label *ngIf='isTitleVisible' class='col-form-label'>{{ title }} <strong>{{ urlPrefix }} </strong></label>\r\n <input [formControlName]='controlName' type='text' placeholder='Type url slug here' class='form-control' />\r\n <anatoly-item-validation-summary [formGroup]='formGroup'\r\n [formSubmitted]='formSubmitted'\r\n [controlName]='controlName'\r\n [controlTitle]='controlTitle'>\r\n </anatoly-item-validation-summary>\r\n</div>\r\n" }]
57
+ args: [{ selector: 'anatoly-forms-urlslug', template: "<div [formGroup]='formGroup' class=\"d-flex permalink form-group {'has-error': isControlInvalid(controlName)} {{class}}\">\r\n <label *ngIf='isTitleVisible' class='col-form-label'> {{ title }} <span> {{ urlPrefix }} </span></label>\r\n <input [formControlName]='controlName' type='text' placeholder='Type url slug here' class='form-control' (generating)='generateUrlSlug()'/>\r\n <anatoly-item-validation-summary [formGroup]='formGroup'\r\n [formSubmitted]='formSubmitted'\r\n [controlName]='controlName'\r\n [controlTitle]='controlTitle'>\r\n </anatoly-item-validation-summary>\r\n</div>\r\n\r\n" }]
52
58
  }], ctorParameters: function () { return []; }, propDecorators: { title: [{
53
59
  type: Input
54
60
  }], isTitleVisible: [{
@@ -63,5 +69,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImpor
63
69
  type: Input
64
70
  }], urlPrefix: [{
65
71
  type: Input
72
+ }], generating: [{
73
+ type: Output
66
74
  }] } });
67
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXJsc2x1Zy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmF0b2x5L3NyYy9saWIvdWkvZm9ybXMvY29tcG9uZW50cy91cmxzbHVnL3VybHNsdWcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5hdG9seS9zcmMvbGliL3VpL2Zvcm1zL2NvbXBvbmVudHMvdXJsc2x1Zy91cmxzbHVnLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztFQWNFO0FBRUYsTUFBTTtBQUNOLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpELEtBQUs7QUFDTCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7OztBQU0vQyxNQUFNLE9BQU8sZ0JBQWlCLFNBQVEsaUJBQWlCO0lBVXJEO1FBQ0UsS0FBSyxFQUFFLENBQUM7UUFWVixRQUFRO1FBQ0MsVUFBSyxHQUFXLFdBQVcsQ0FBQztRQUM1QixtQkFBYyxHQUFHLElBQUksQ0FBQztJQVMvQixDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDdkUsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3RELElBQUksVUFBVSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFckMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ2xELENBQUM7OzZHQTdCVSxnQkFBZ0I7aUdBQWhCLGdCQUFnQiw4UkMzQjdCLDhvQkFTQTsyRkRrQmEsZ0JBQWdCO2tCQUo1QixTQUFTOytCQUNFLHVCQUF1QjswRUFLeEIsS0FBSztzQkFBYixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbjxmaWxlPlxyXG4gIFByb2plY3Q6XHJcbiAgICBAb3Nvdml0bnkvYW5hdG9seVxyXG5cclxuICBBdXRob3JzOlxyXG4gICAgVmFkaW0gT3Nvdml0bnlcclxuICAgIEFuYXRvbHkgT3Nvdml0bnlcclxuXHJcbiAgQ3JlYXRlZDpcclxuICAgIDAyIEF1ZyAyMDIyXHJcblxyXG4gIENvcHlyaWdodCAoYykgMjAxNy0yMDIyIE9zb3ZpdG55IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuPC9maWxlPlxyXG4qL1xyXG5cclxuLy9Ob2RlXHJcbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnOyBcclxuXHJcbi8vQXBwXHJcbmltcG9ydCB7IEJhc2VFZGl0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vY29tcG9uZW50cy9iYXNlLWVkaXQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVXRpbHMgfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3V0aWxzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYW5hdG9seS1mb3Jtcy11cmxzbHVnJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdXJsc2x1Zy5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFVybFNsdWdDb21wb25lbnQgZXh0ZW5kcyBCYXNlRWRpdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgLy9JbnB1dHNcclxuICBASW5wdXQoKSB0aXRsZTogc3RyaW5nID0gJ1Blcm1hbGluayc7XHJcbiAgQElucHV0KCkgaXNUaXRsZVZpc2libGUgPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGNvbnRyb2xOYW1lOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgY29udHJvbFRpdGxlOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgY2xhc3M6IHN0cmluZztcclxuICBASW5wdXQoKSB3YXRjaGVkQ29udHJvbE5hbWU6IHN0cmluZztcclxuICBASW5wdXQoKSB1cmxQcmVmaXg6IHN0cmluZztcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLnNldFdhdGNoZXJzKCk7XHJcbiAgfVxyXG5cclxuICBzZXRXYXRjaGVycygpIHtcclxuICAgIHRoaXMuZm9ybUdyb3VwLmdldCh0aGlzLndhdGNoZWRDb250cm9sTmFtZSkudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSh2YWwgPT4ge1xyXG4gICAgICB0aGlzLmdlbmVyYXRlVXJsU2x1ZygpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZW5lcmF0ZVVybFNsdWcoKSB7XHJcbiAgICBsZXQgbmFtZSA9IHRoaXMuZ2V0Rm9ybVZhbHVlKHRoaXMud2F0Y2hlZENvbnRyb2xOYW1lKTtcclxuICAgIGxldCBzbHVnZWRUZXh0ID0gVXRpbHMuc2x1Z2lmeShuYW1lKTtcclxuXHJcbiAgICB0aGlzLnNldEZvcm1WYWx1ZSh0aGlzLmNvbnRyb2xOYW1lLCBzbHVnZWRUZXh0KTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBbZm9ybUdyb3VwXT0nZm9ybUdyb3VwJyAgY2xhc3M9XCJ7J2hhcy1lcnJvcic6IGlzQ29udHJvbEludmFsaWQoY29udHJvbE5hbWUpfSBmb3JtLWdyb3VwIHt7Y2xhc3N9fVwiPlxyXG4gIDxsYWJlbCAqbmdJZj0naXNUaXRsZVZpc2libGUnIGNsYXNzPSdjb2wtZm9ybS1sYWJlbCc+e3sgdGl0bGUgfX0gPHN0cm9uZz57eyB1cmxQcmVmaXggfX0gPC9zdHJvbmc+PC9sYWJlbD5cclxuICA8aW5wdXQgW2Zvcm1Db250cm9sTmFtZV09J2NvbnRyb2xOYW1lJyB0eXBlPSd0ZXh0JyBwbGFjZWhvbGRlcj0nVHlwZSB1cmwgc2x1ZyBoZXJlJyBjbGFzcz0nZm9ybS1jb250cm9sJyAvPlxyXG4gIDxhbmF0b2x5LWl0ZW0tdmFsaWRhdGlvbi1zdW1tYXJ5IFtmb3JtR3JvdXBdPSdmb3JtR3JvdXAnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1TdWJtaXR0ZWRdPSdmb3JtU3VibWl0dGVkJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb250cm9sTmFtZV09J2NvbnRyb2xOYW1lJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb250cm9sVGl0bGVdPSdjb250cm9sVGl0bGUnPlxyXG4gIDwvYW5hdG9seS1pdGVtLXZhbGlkYXRpb24tc3VtbWFyeT5cclxuPC9kaXY+XHJcbiJdfQ==
75
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXJsc2x1Zy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmF0b2x5L3NyYy9saWIvdWkvZm9ybXMvY29tcG9uZW50cy91cmxzbHVnL3VybHNsdWcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5hdG9seS9zcmMvbGliL3VpL2Zvcm1zL2NvbXBvbmVudHMvdXJsc2x1Zy91cmxzbHVnLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztFQWNFO0FBRUYsTUFBTTtBQUNOLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFL0UsS0FBSztBQUNMLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7O0FBTS9DLE1BQU0sT0FBTyxnQkFBaUIsU0FBUSxpQkFBaUI7SUFhckQ7UUFDRSxLQUFLLEVBQUUsQ0FBQztRQWJWLFFBQVE7UUFDQyxVQUFLLEdBQVcsWUFBWSxDQUFDO1FBQzdCLG1CQUFjLEdBQUcsSUFBSSxDQUFDO1FBTy9CLFNBQVM7UUFDQyxlQUFVLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7SUFJN0QsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtZQUMzQixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUN2RSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDekIsQ0FBQyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUN0RCxJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JDLElBQUksS0FBSyxHQUFHLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxDQUFDO1FBRXBDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTVCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDckQsQ0FBQzs7NkdBckNVLGdCQUFnQjtpR0FBaEIsZ0JBQWdCLHFVQzNCN0Isa3NCQVVBOzJGRGlCYSxnQkFBZ0I7a0JBSjVCLFNBQVM7K0JBQ0UsdUJBQXVCOzBFQUt4QixLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUdJLFVBQVU7c0JBQW5CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG48ZmlsZT5cclxuICBQcm9qZWN0OlxyXG4gICAgQG9zb3ZpdG55L2FuYXRvbHlcclxuXHJcbiAgQXV0aG9yczpcclxuICAgIFZhZGltIE9zb3ZpdG55XHJcbiAgICBBbmF0b2x5IE9zb3ZpdG55XHJcblxyXG4gIENyZWF0ZWQ6XHJcbiAgICAwMiBBdWcgMjAyMlxyXG5cclxuICBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMiBPc292aXRueSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbjwvZmlsZT5cclxuKi9cclxuXHJcbi8vTm9kZVxyXG5pbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIEV2ZW50RW1pdHRlciwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG4vL0FwcFxyXG5pbXBvcnQgeyBCYXNlRWRpdENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2NvbXBvbmVudHMvYmFzZS1lZGl0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFV0aWxzIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS91dGlscyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FuYXRvbHktZm9ybXMtdXJsc2x1ZycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3VybHNsdWcuY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVcmxTbHVnQ29tcG9uZW50IGV4dGVuZHMgQmFzZUVkaXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIC8vSW5wdXRzXHJcbiAgQElucHV0KCkgdGl0bGU6IHN0cmluZyA9ICdQZXJtYWxpbms6JztcclxuICBASW5wdXQoKSBpc1RpdGxlVmlzaWJsZSA9IHRydWU7XHJcbiAgQElucHV0KCkgY29udHJvbE5hbWU6IHN0cmluZztcclxuICBASW5wdXQoKSBjb250cm9sVGl0bGU6IHN0cmluZztcclxuICBASW5wdXQoKSBjbGFzczogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHdhdGNoZWRDb250cm9sTmFtZTogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHVybFByZWZpeDogc3RyaW5nO1xyXG5cclxuICAvL091dHB1dHNcclxuICBAT3V0cHV0KCkgZ2VuZXJhdGluZzogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgc3VwZXIoKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5zZXRXYXRjaGVycygpO1xyXG4gIH1cclxuXHJcbiAgc2V0V2F0Y2hlcnMoKSB7XHJcbiAgICBpZiAodGhpcy53YXRjaGVkQ29udHJvbE5hbWUpIHtcclxuICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KHRoaXMud2F0Y2hlZENvbnRyb2xOYW1lKS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHZhbCA9PiB7XHJcbiAgICAgICAgdGhpcy5nZW5lcmF0ZVVybFNsdWcoKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZW5lcmF0ZVVybFNsdWcoKSB7XHJcbiAgICBsZXQgbmFtZSA9IHRoaXMuZ2V0Rm9ybVZhbHVlKHRoaXMud2F0Y2hlZENvbnRyb2xOYW1lKTtcclxuICAgIGxldCBzbHVnZWRUZXh0ID0gVXRpbHMuc2x1Z2lmeShuYW1lKTtcclxuICAgIGxldCBldmVudCA9IHsgdXJsU2x1Zzogc2x1Z2VkVGV4dCB9O1xyXG5cclxuICAgIHRoaXMuZ2VuZXJhdGluZy5lbWl0KGV2ZW50KTtcclxuXHJcbiAgICB0aGlzLnNldEZvcm1WYWx1ZSh0aGlzLmNvbnRyb2xOYW1lLCBldmVudC51cmxTbHVnKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBbZm9ybUdyb3VwXT0nZm9ybUdyb3VwJyAgY2xhc3M9XCJkLWZsZXggcGVybWFsaW5rIGZvcm0tZ3JvdXAgeydoYXMtZXJyb3InOiBpc0NvbnRyb2xJbnZhbGlkKGNvbnRyb2xOYW1lKX0gIHt7Y2xhc3N9fVwiPlxyXG4gIDxsYWJlbCAqbmdJZj0naXNUaXRsZVZpc2libGUnIGNsYXNzPSdjb2wtZm9ybS1sYWJlbCc+IHt7IHRpdGxlIH19IDxzcGFuPiB7eyB1cmxQcmVmaXggfX0gPC9zcGFuPjwvbGFiZWw+XHJcbiAgPGlucHV0IFtmb3JtQ29udHJvbE5hbWVdPSdjb250cm9sTmFtZScgdHlwZT0ndGV4dCcgcGxhY2Vob2xkZXI9J1R5cGUgdXJsIHNsdWcgaGVyZScgY2xhc3M9J2Zvcm0tY29udHJvbCcgKGdlbmVyYXRpbmcpPSdnZW5lcmF0ZVVybFNsdWcoKScvPlxyXG4gIDxhbmF0b2x5LWl0ZW0tdmFsaWRhdGlvbi1zdW1tYXJ5IFtmb3JtR3JvdXBdPSdmb3JtR3JvdXAnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1TdWJtaXR0ZWRdPSdmb3JtU3VibWl0dGVkJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb250cm9sTmFtZV09J2NvbnRyb2xOYW1lJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb250cm9sVGl0bGVdPSdjb250cm9sVGl0bGUnPlxyXG4gIDwvYW5hdG9seS1pdGVtLXZhbGlkYXRpb24tc3VtbWFyeT5cclxuPC9kaXY+XHJcblxyXG4iXX0=
@@ -3882,28 +3882,34 @@ class UrlSlugComponent extends BaseEditComponent {
3882
3882
  constructor() {
3883
3883
  super();
3884
3884
  //Inputs
3885
- this.title = 'Permalink';
3885
+ this.title = 'Permalink:';
3886
3886
  this.isTitleVisible = true;
3887
+ //Outputs
3888
+ this.generating = new EventEmitter();
3887
3889
  }
3888
3890
  ngOnInit() {
3889
3891
  this.setWatchers();
3890
3892
  }
3891
3893
  setWatchers() {
3892
- this.formGroup.get(this.watchedControlName).valueChanges.subscribe(val => {
3893
- this.generateUrlSlug();
3894
- });
3894
+ if (this.watchedControlName) {
3895
+ this.formGroup.get(this.watchedControlName).valueChanges.subscribe(val => {
3896
+ this.generateUrlSlug();
3897
+ });
3898
+ }
3895
3899
  }
3896
3900
  generateUrlSlug() {
3897
3901
  let name = this.getFormValue(this.watchedControlName);
3898
3902
  let slugedText = Utils.slugify(name);
3899
- this.setFormValue(this.controlName, slugedText);
3903
+ let event = { urlSlug: slugedText };
3904
+ this.generating.emit(event);
3905
+ this.setFormValue(this.controlName, event.urlSlug);
3900
3906
  }
3901
3907
  }
3902
3908
  UrlSlugComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: UrlSlugComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3903
- UrlSlugComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: UrlSlugComponent, selector: "anatoly-forms-urlslug", inputs: { title: "title", isTitleVisible: "isTitleVisible", controlName: "controlName", controlTitle: "controlTitle", class: "class", watchedControlName: "watchedControlName", urlPrefix: "urlPrefix" }, usesInheritance: true, ngImport: i0, template: "<div [formGroup]='formGroup' class=\"{'has-error': isControlInvalid(controlName)} form-group {{class}}\">\r\n <label *ngIf='isTitleVisible' class='col-form-label'>{{ title }} <strong>{{ urlPrefix }} </strong></label>\r\n <input [formControlName]='controlName' type='text' placeholder='Type url slug here' class='form-control' />\r\n <anatoly-item-validation-summary [formGroup]='formGroup'\r\n [formSubmitted]='formSubmitted'\r\n [controlName]='controlName'\r\n [controlTitle]='controlTitle'>\r\n </anatoly-item-validation-summary>\r\n</div>\r\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$5.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: NativeElementDirective, selector: "[formControl], [formControlName]" }, { kind: "component", type: ItemValidationSummaryComponent, selector: "anatoly-item-validation-summary", inputs: ["controlName", "controlTitle"] }] });
3909
+ UrlSlugComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: UrlSlugComponent, selector: "anatoly-forms-urlslug", inputs: { title: "title", isTitleVisible: "isTitleVisible", controlName: "controlName", controlTitle: "controlTitle", class: "class", watchedControlName: "watchedControlName", urlPrefix: "urlPrefix" }, outputs: { generating: "generating" }, usesInheritance: true, ngImport: i0, template: "<div [formGroup]='formGroup' class=\"d-flex permalink form-group {'has-error': isControlInvalid(controlName)} {{class}}\">\r\n <label *ngIf='isTitleVisible' class='col-form-label'> {{ title }} <span> {{ urlPrefix }} </span></label>\r\n <input [formControlName]='controlName' type='text' placeholder='Type url slug here' class='form-control' (generating)='generateUrlSlug()'/>\r\n <anatoly-item-validation-summary [formGroup]='formGroup'\r\n [formSubmitted]='formSubmitted'\r\n [controlName]='controlName'\r\n [controlTitle]='controlTitle'>\r\n </anatoly-item-validation-summary>\r\n</div>\r\n\r\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$5.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: NativeElementDirective, selector: "[formControl], [formControlName]" }, { kind: "component", type: ItemValidationSummaryComponent, selector: "anatoly-item-validation-summary", inputs: ["controlName", "controlTitle"] }] });
3904
3910
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: UrlSlugComponent, decorators: [{
3905
3911
  type: Component,
3906
- args: [{ selector: 'anatoly-forms-urlslug', template: "<div [formGroup]='formGroup' class=\"{'has-error': isControlInvalid(controlName)} form-group {{class}}\">\r\n <label *ngIf='isTitleVisible' class='col-form-label'>{{ title }} <strong>{{ urlPrefix }} </strong></label>\r\n <input [formControlName]='controlName' type='text' placeholder='Type url slug here' class='form-control' />\r\n <anatoly-item-validation-summary [formGroup]='formGroup'\r\n [formSubmitted]='formSubmitted'\r\n [controlName]='controlName'\r\n [controlTitle]='controlTitle'>\r\n </anatoly-item-validation-summary>\r\n</div>\r\n" }]
3912
+ args: [{ selector: 'anatoly-forms-urlslug', template: "<div [formGroup]='formGroup' class=\"d-flex permalink form-group {'has-error': isControlInvalid(controlName)} {{class}}\">\r\n <label *ngIf='isTitleVisible' class='col-form-label'> {{ title }} <span> {{ urlPrefix }} </span></label>\r\n <input [formControlName]='controlName' type='text' placeholder='Type url slug here' class='form-control' (generating)='generateUrlSlug()'/>\r\n <anatoly-item-validation-summary [formGroup]='formGroup'\r\n [formSubmitted]='formSubmitted'\r\n [controlName]='controlName'\r\n [controlTitle]='controlTitle'>\r\n </anatoly-item-validation-summary>\r\n</div>\r\n\r\n" }]
3907
3913
  }], ctorParameters: function () { return []; }, propDecorators: { title: [{
3908
3914
  type: Input
3909
3915
  }], isTitleVisible: [{
@@ -3918,6 +3924,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImpor
3918
3924
  type: Input
3919
3925
  }], urlPrefix: [{
3920
3926
  type: Input
3927
+ }], generating: [{
3928
+ type: Output
3921
3929
  }] } });
3922
3930
 
3923
3931
  /*