@osovitny/anatoly 2.14.21 → 2.14.23

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,32 +27,46 @@ 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
+ this.isButtonVisible = true;
33
+ //Outputs
34
+ this.generating = new EventEmitter();
32
35
  }
33
36
  ngOnInit() {
34
37
  this.setWatchers();
35
38
  }
36
39
  setWatchers() {
37
- this.formGroup.get(this.watchedControlName).valueChanges.subscribe(val => {
38
- this.generateUrlSlug();
39
- });
40
+ if (this.watchedControlName) {
41
+ this.formGroup.get(this.watchedControlName).valueChanges.subscribe(val => {
42
+ let text = this.getFormValue(this.watchedControlName);
43
+ this.generateUrlSlug(text);
44
+ });
45
+ }
40
46
  }
41
- generateUrlSlug() {
42
- let name = this.getFormValue(this.watchedControlName);
43
- let slugedText = Utils.slugify(name);
44
- this.setFormValue(this.controlName, slugedText);
47
+ generateUrlSlug(text) {
48
+ let slugedText = Utils.slugify(text);
49
+ let event = { urlSlug: slugedText };
50
+ this.generating.emit(event);
51
+ this.setFormValue(this.controlName, event.urlSlug);
52
+ this.hrefGo = `${event.urlSlug}`;
53
+ }
54
+ onUrlSlugChange() {
55
+ let text = this.getFormValue(this.controlName);
56
+ this.generateUrlSlug(text);
45
57
  }
46
58
  }
47
59
  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"] }] });
60
+ UrlSlugComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: UrlSlugComponent, selector: "anatoly-forms-urlslug", inputs: { title: "title", isTitleVisible: "isTitleVisible", isButtonVisible: "isButtonVisible", 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' (keyup)=onUrlSlugChange()/>\r\n <a *ngIf=\"isButtonVisible\" href=\"{{urlPrefix}}{{hrefGo}}\" target=\"_blank\" class=\"btn btn-outline-primary\">Go</a>\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
61
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: UrlSlugComponent, decorators: [{
50
62
  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" }]
63
+ 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' (keyup)=onUrlSlugChange()/>\r\n <a *ngIf=\"isButtonVisible\" href=\"{{urlPrefix}}{{hrefGo}}\" target=\"_blank\" class=\"btn btn-outline-primary\">Go</a>\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
64
  }], ctorParameters: function () { return []; }, propDecorators: { title: [{
53
65
  type: Input
54
66
  }], isTitleVisible: [{
55
67
  type: Input
68
+ }], isButtonVisible: [{
69
+ type: Input
56
70
  }], controlName: [{
57
71
  type: Input
58
72
  }], controlTitle: [{
@@ -63,5 +77,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImpor
63
77
  type: Input
64
78
  }], urlPrefix: [{
65
79
  type: Input
80
+ }], generating: [{
81
+ type: Output
66
82
  }] } });
67
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXJsc2x1Zy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmF0b2x5L3NyYy9saWIvdWkvZm9ybXMvY29tcG9uZW50cy91cmxzbHVnL3VybHNsdWcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5hdG9seS9zcmMvbGliL3VpL2Zvcm1zL2NvbXBvbmVudHMvdXJsc2x1Zy91cmxzbHVnLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztFQWNFO0FBRUYsTUFBTTtBQUNOLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpELEtBQUs7QUFDTCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7OztBQU0vQyxNQUFNLE9BQU8sZ0JBQWlCLFNBQVEsaUJBQWlCO0lBVXJEO1FBQ0UsS0FBSyxFQUFFLENBQUM7UUFWVixRQUFRO1FBQ0MsVUFBSyxHQUFXLFdBQVcsQ0FBQztRQUM1QixtQkFBYyxHQUFHLElBQUksQ0FBQztJQVMvQixDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDdkUsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3RELElBQUksVUFBVSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFckMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ2xELENBQUM7OzZHQTdCVSxnQkFBZ0I7aUdBQWhCLGdCQUFnQiw4UkMzQjdCLDhvQkFTQTsyRkRrQmEsZ0JBQWdCO2tCQUo1QixTQUFTOytCQUNFLHVCQUF1QjswRUFLeEIsS0FBSztzQkFBYixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbjxmaWxlPlxyXG4gIFByb2plY3Q6XHJcbiAgICBAb3Nvdml0bnkvYW5hdG9seVxyXG5cclxuICBBdXRob3JzOlxyXG4gICAgVmFkaW0gT3Nvdml0bnlcclxuICAgIEFuYXRvbHkgT3Nvdml0bnlcclxuXHJcbiAgQ3JlYXRlZDpcclxuICAgIDAyIEF1ZyAyMDIyXHJcblxyXG4gIENvcHlyaWdodCAoYykgMjAxNy0yMDIyIE9zb3ZpdG55IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuPC9maWxlPlxyXG4qL1xyXG5cclxuLy9Ob2RlXHJcbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnOyBcclxuXHJcbi8vQXBwXHJcbmltcG9ydCB7IEJhc2VFZGl0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vY29tcG9uZW50cy9iYXNlLWVkaXQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVXRpbHMgfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3V0aWxzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYW5hdG9seS1mb3Jtcy11cmxzbHVnJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdXJsc2x1Zy5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFVybFNsdWdDb21wb25lbnQgZXh0ZW5kcyBCYXNlRWRpdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgLy9JbnB1dHNcclxuICBASW5wdXQoKSB0aXRsZTogc3RyaW5nID0gJ1Blcm1hbGluayc7XHJcbiAgQElucHV0KCkgaXNUaXRsZVZpc2libGUgPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGNvbnRyb2xOYW1lOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgY29udHJvbFRpdGxlOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgY2xhc3M6IHN0cmluZztcclxuICBASW5wdXQoKSB3YXRjaGVkQ29udHJvbE5hbWU6IHN0cmluZztcclxuICBASW5wdXQoKSB1cmxQcmVmaXg6IHN0cmluZztcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLnNldFdhdGNoZXJzKCk7XHJcbiAgfVxyXG5cclxuICBzZXRXYXRjaGVycygpIHtcclxuICAgIHRoaXMuZm9ybUdyb3VwLmdldCh0aGlzLndhdGNoZWRDb250cm9sTmFtZSkudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSh2YWwgPT4ge1xyXG4gICAgICB0aGlzLmdlbmVyYXRlVXJsU2x1ZygpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZW5lcmF0ZVVybFNsdWcoKSB7XHJcbiAgICBsZXQgbmFtZSA9IHRoaXMuZ2V0Rm9ybVZhbHVlKHRoaXMud2F0Y2hlZENvbnRyb2xOYW1lKTtcclxuICAgIGxldCBzbHVnZWRUZXh0ID0gVXRpbHMuc2x1Z2lmeShuYW1lKTtcclxuXHJcbiAgICB0aGlzLnNldEZvcm1WYWx1ZSh0aGlzLmNvbnRyb2xOYW1lLCBzbHVnZWRUZXh0KTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBbZm9ybUdyb3VwXT0nZm9ybUdyb3VwJyAgY2xhc3M9XCJ7J2hhcy1lcnJvcic6IGlzQ29udHJvbEludmFsaWQoY29udHJvbE5hbWUpfSBmb3JtLWdyb3VwIHt7Y2xhc3N9fVwiPlxyXG4gIDxsYWJlbCAqbmdJZj0naXNUaXRsZVZpc2libGUnIGNsYXNzPSdjb2wtZm9ybS1sYWJlbCc+e3sgdGl0bGUgfX0gPHN0cm9uZz57eyB1cmxQcmVmaXggfX0gPC9zdHJvbmc+PC9sYWJlbD5cclxuICA8aW5wdXQgW2Zvcm1Db250cm9sTmFtZV09J2NvbnRyb2xOYW1lJyB0eXBlPSd0ZXh0JyBwbGFjZWhvbGRlcj0nVHlwZSB1cmwgc2x1ZyBoZXJlJyBjbGFzcz0nZm9ybS1jb250cm9sJyAvPlxyXG4gIDxhbmF0b2x5LWl0ZW0tdmFsaWRhdGlvbi1zdW1tYXJ5IFtmb3JtR3JvdXBdPSdmb3JtR3JvdXAnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1TdWJtaXR0ZWRdPSdmb3JtU3VibWl0dGVkJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb250cm9sTmFtZV09J2NvbnRyb2xOYW1lJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb250cm9sVGl0bGVdPSdjb250cm9sVGl0bGUnPlxyXG4gIDwvYW5hdG9seS1pdGVtLXZhbGlkYXRpb24tc3VtbWFyeT5cclxuPC9kaXY+XHJcbiJdfQ==
83
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXJsc2x1Zy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmF0b2x5L3NyYy9saWIvdWkvZm9ybXMvY29tcG9uZW50cy91cmxzbHVnL3VybHNsdWcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5hdG9seS9zcmMvbGliL3VpL2Zvcm1zL2NvbXBvbmVudHMvdXJsc2x1Zy91cmxzbHVnLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztFQWNFO0FBRUYsTUFBTTtBQUNOLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFL0UsS0FBSztBQUNMLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7O0FBTS9DLE1BQU0sT0FBTyxnQkFBaUIsU0FBUSxpQkFBaUI7SUFnQnJEO1FBQ0UsS0FBSyxFQUFFLENBQUM7UUFkVixRQUFRO1FBQ0MsVUFBSyxHQUFXLFlBQVksQ0FBQztRQUM3QixtQkFBYyxHQUFHLElBQUksQ0FBQztRQUN0QixvQkFBZSxHQUFHLElBQUksQ0FBQztRQU9oQyxTQUFTO1FBQ0MsZUFBVSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO0lBSTdELENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFDM0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDdkUsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztnQkFDdEQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM3QixDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUVELGVBQWUsQ0FBQyxJQUFJO1FBQ2xCLElBQUksVUFBVSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckMsSUFBSSxLQUFLLEdBQUcsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUM7UUFFcEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFNUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNwRCxJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFBO0lBQ2xDLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QixDQUFDOzs2R0E5Q1UsZ0JBQWdCO2lHQUFoQixnQkFBZ0IseVdDM0I3Qix5ekJBV0E7MkZEZ0JhLGdCQUFnQjtrQkFKNUIsU0FBUzsrQkFDRSx1QkFBdUI7MEVBT3hCLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFHSSxVQUFVO3NCQUFuQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuPGZpbGU+XHJcbiAgUHJvamVjdDpcclxuICAgIEBvc292aXRueS9hbmF0b2x5XHJcblxyXG4gIEF1dGhvcnM6XHJcbiAgICBWYWRpbSBPc292aXRueVxyXG4gICAgQW5hdG9seSBPc292aXRueVxyXG5cclxuICBDcmVhdGVkOlxyXG4gICAgMDIgQXVnIDIwMjJcclxuXHJcbiAgQ29weXJpZ2h0IChjKSAyMDE3LTIwMjIgT3Nvdml0bnkgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG48L2ZpbGU+XHJcbiovXHJcblxyXG4vL05vZGVcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBFdmVudEVtaXR0ZXIsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuLy9BcHBcclxuaW1wb3J0IHsgQmFzZUVkaXRDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzL2Jhc2UtZWRpdC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBVdGlscyB9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvdXRpbHMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhbmF0b2x5LWZvcm1zLXVybHNsdWcnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi91cmxzbHVnLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgVXJsU2x1Z0NvbXBvbmVudCBleHRlbmRzIEJhc2VFZGl0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBocmVmR286IHN0cmluZztcclxuXHJcbiAgLy9JbnB1dHNcclxuICBASW5wdXQoKSB0aXRsZTogc3RyaW5nID0gJ1Blcm1hbGluazonO1xyXG4gIEBJbnB1dCgpIGlzVGl0bGVWaXNpYmxlID0gdHJ1ZTtcclxuICBASW5wdXQoKSBpc0J1dHRvblZpc2libGUgPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGNvbnRyb2xOYW1lOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgY29udHJvbFRpdGxlOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgY2xhc3M6IHN0cmluZztcclxuICBASW5wdXQoKSB3YXRjaGVkQ29udHJvbE5hbWU6IHN0cmluZztcclxuICBASW5wdXQoKSB1cmxQcmVmaXg6IHN0cmluZztcclxuXHJcbiAgLy9PdXRwdXRzXHJcbiAgQE91dHB1dCgpIGdlbmVyYXRpbmc6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuc2V0V2F0Y2hlcnMoKTtcclxuICB9XHJcblxyXG4gIHNldFdhdGNoZXJzKCkge1xyXG4gICAgaWYgKHRoaXMud2F0Y2hlZENvbnRyb2xOYW1lKSB7XHJcbiAgICAgIHRoaXMuZm9ybUdyb3VwLmdldCh0aGlzLndhdGNoZWRDb250cm9sTmFtZSkudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSh2YWwgPT4ge1xyXG4gICAgICAgIGxldCB0ZXh0ID0gdGhpcy5nZXRGb3JtVmFsdWUodGhpcy53YXRjaGVkQ29udHJvbE5hbWUpO1xyXG4gICAgICAgIHRoaXMuZ2VuZXJhdGVVcmxTbHVnKHRleHQpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdlbmVyYXRlVXJsU2x1Zyh0ZXh0KSB7XHJcbiAgICBsZXQgc2x1Z2VkVGV4dCA9IFV0aWxzLnNsdWdpZnkodGV4dCk7XHJcbiAgICBsZXQgZXZlbnQgPSB7IHVybFNsdWc6IHNsdWdlZFRleHQgfTtcclxuXHJcbiAgICB0aGlzLmdlbmVyYXRpbmcuZW1pdChldmVudCk7XHJcblxyXG4gICAgdGhpcy5zZXRGb3JtVmFsdWUodGhpcy5jb250cm9sTmFtZSwgIGV2ZW50LnVybFNsdWcpO1xyXG4gICAgdGhpcy5ocmVmR28gPSBgJHtldmVudC51cmxTbHVnfWBcclxuICB9XHJcblxyXG4gIG9uVXJsU2x1Z0NoYW5nZSgpe1xyXG4gICAgbGV0IHRleHQgPSB0aGlzLmdldEZvcm1WYWx1ZSh0aGlzLmNvbnRyb2xOYW1lKTtcclxuICAgIHRoaXMuZ2VuZXJhdGVVcmxTbHVnKHRleHQpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IFtmb3JtR3JvdXBdPSdmb3JtR3JvdXAnICBjbGFzcz1cImQtZmxleCBwZXJtYWxpbmsgZm9ybS1ncm91cCB7J2hhcy1lcnJvcic6IGlzQ29udHJvbEludmFsaWQoY29udHJvbE5hbWUpfSAge3tjbGFzc319XCI+XHJcbiAgPGxhYmVsICpuZ0lmPSdpc1RpdGxlVmlzaWJsZScgY2xhc3M9J2NvbC1mb3JtLWxhYmVsJz4ge3sgdGl0bGUgfX0gPHNwYW4+IHt7IHVybFByZWZpeCB9fSA8L3NwYW4+PC9sYWJlbD5cclxuICA8aW5wdXQgW2Zvcm1Db250cm9sTmFtZV09J2NvbnRyb2xOYW1lJyB0eXBlPSd0ZXh0JyBwbGFjZWhvbGRlcj0nVHlwZSB1cmwgc2x1ZyBoZXJlJyBjbGFzcz0nZm9ybS1jb250cm9sJyAoa2V5dXApPW9uVXJsU2x1Z0NoYW5nZSgpLz5cclxuICA8YSAqbmdJZj1cImlzQnV0dG9uVmlzaWJsZVwiIGhyZWY9XCJ7e3VybFByZWZpeH19e3tocmVmR299fVwiIHRhcmdldD1cIl9ibGFua1wiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnlcIj5HbzwvYT5cclxuICA8YW5hdG9seS1pdGVtLXZhbGlkYXRpb24tc3VtbWFyeSBbZm9ybUdyb3VwXT0nZm9ybUdyb3VwJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtU3VibWl0dGVkXT0nZm9ybVN1Ym1pdHRlZCdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29udHJvbE5hbWVdPSdjb250cm9sTmFtZSdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29udHJvbFRpdGxlXT0nY29udHJvbFRpdGxlJz5cclxuICA8L2FuYXRvbHktaXRlbS12YWxpZGF0aW9uLXN1bW1hcnk+XHJcbjwvZGl2PlxyXG5cclxuIl19
@@ -3882,32 +3882,46 @@ 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
+ this.isButtonVisible = true;
3888
+ //Outputs
3889
+ this.generating = new EventEmitter();
3887
3890
  }
3888
3891
  ngOnInit() {
3889
3892
  this.setWatchers();
3890
3893
  }
3891
3894
  setWatchers() {
3892
- this.formGroup.get(this.watchedControlName).valueChanges.subscribe(val => {
3893
- this.generateUrlSlug();
3894
- });
3895
+ if (this.watchedControlName) {
3896
+ this.formGroup.get(this.watchedControlName).valueChanges.subscribe(val => {
3897
+ let text = this.getFormValue(this.watchedControlName);
3898
+ this.generateUrlSlug(text);
3899
+ });
3900
+ }
3895
3901
  }
3896
- generateUrlSlug() {
3897
- let name = this.getFormValue(this.watchedControlName);
3898
- let slugedText = Utils.slugify(name);
3899
- this.setFormValue(this.controlName, slugedText);
3902
+ generateUrlSlug(text) {
3903
+ let slugedText = Utils.slugify(text);
3904
+ let event = { urlSlug: slugedText };
3905
+ this.generating.emit(event);
3906
+ this.setFormValue(this.controlName, event.urlSlug);
3907
+ this.hrefGo = `${event.urlSlug}`;
3908
+ }
3909
+ onUrlSlugChange() {
3910
+ let text = this.getFormValue(this.controlName);
3911
+ this.generateUrlSlug(text);
3900
3912
  }
3901
3913
  }
3902
3914
  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"] }] });
3915
+ UrlSlugComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: UrlSlugComponent, selector: "anatoly-forms-urlslug", inputs: { title: "title", isTitleVisible: "isTitleVisible", isButtonVisible: "isButtonVisible", 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' (keyup)=onUrlSlugChange()/>\r\n <a *ngIf=\"isButtonVisible\" href=\"{{urlPrefix}}{{hrefGo}}\" target=\"_blank\" class=\"btn btn-outline-primary\">Go</a>\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
3916
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: UrlSlugComponent, decorators: [{
3905
3917
  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" }]
3918
+ 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' (keyup)=onUrlSlugChange()/>\r\n <a *ngIf=\"isButtonVisible\" href=\"{{urlPrefix}}{{hrefGo}}\" target=\"_blank\" class=\"btn btn-outline-primary\">Go</a>\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
3919
  }], ctorParameters: function () { return []; }, propDecorators: { title: [{
3908
3920
  type: Input
3909
3921
  }], isTitleVisible: [{
3910
3922
  type: Input
3923
+ }], isButtonVisible: [{
3924
+ type: Input
3911
3925
  }], controlName: [{
3912
3926
  type: Input
3913
3927
  }], controlTitle: [{
@@ -3918,6 +3932,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImpor
3918
3932
  type: Input
3919
3933
  }], urlPrefix: [{
3920
3934
  type: Input
3935
+ }], generating: [{
3936
+ type: Output
3921
3937
  }] } });
3922
3938
 
3923
3939
  /*