mirror of https://github.com/Squidex/squidex.git
29 changed files with 245 additions and 261 deletions
@ -1,65 +0,0 @@ |
|||||
/* |
|
||||
* Squidex Headless CMS |
|
||||
* |
|
||||
* @license |
|
||||
* Copyright (c) Squidex UG (haftungsbeschränkt). All rights reserved. |
|
||||
*/ |
|
||||
|
|
||||
import { Directive, ElementRef, forwardRef, HostListener, Renderer } from '@angular/core'; |
|
||||
import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms'; |
|
||||
|
|
||||
import { Types } from '@app/framework/internal'; |
|
||||
|
|
||||
export const SQX_LOWERCASE_INPUT_VALUE_ACCESSOR: any = { |
|
||||
provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => LowerCaseInputDirective), multi: true |
|
||||
}; |
|
||||
|
|
||||
@Directive({ |
|
||||
selector: '[sqxLowerCaseInput]', |
|
||||
providers: [SQX_LOWERCASE_INPUT_VALUE_ACCESSOR] |
|
||||
}) |
|
||||
export class LowerCaseInputDirective implements ControlValueAccessor { |
|
||||
private callChange = (v: any) => { /* NOOP */ }; |
|
||||
private callTouched = () => { /* NOOP */ }; |
|
||||
|
|
||||
constructor( |
|
||||
private readonly element: ElementRef, |
|
||||
private readonly renderer: Renderer |
|
||||
) { |
|
||||
} |
|
||||
|
|
||||
@HostListener('input', ['$event.target.value']) |
|
||||
public onChange(value: any) { |
|
||||
const normalizedValue = this.transform(value); |
|
||||
|
|
||||
this.renderer.setElementProperty(this.element.nativeElement, 'value', normalizedValue); |
|
||||
this.callChange(normalizedValue); |
|
||||
} |
|
||||
|
|
||||
@HostListener('blur') |
|
||||
public onTouched() { |
|
||||
this.callTouched(); |
|
||||
} |
|
||||
|
|
||||
public writeValue(value: string) { |
|
||||
const normalizedValue = this.transform(value); |
|
||||
|
|
||||
this.renderer.setElementProperty(this.element.nativeElement, 'value', normalizedValue); |
|
||||
} |
|
||||
|
|
||||
public setDisabledState(isDisabled: boolean): void { |
|
||||
this.renderer.setElementProperty(this.element.nativeElement, 'disabled', isDisabled); |
|
||||
} |
|
||||
|
|
||||
public registerOnChange(fn: any) { |
|
||||
this.callChange = fn; |
|
||||
} |
|
||||
|
|
||||
public registerOnTouched(fn: any) { |
|
||||
this.callTouched = fn; |
|
||||
} |
|
||||
|
|
||||
private transform(value: any): string { |
|
||||
return Types.isString(value) ? value.toLowerCase() : ''; |
|
||||
} |
|
||||
} |
|
||||
@ -1,67 +0,0 @@ |
|||||
/* |
|
||||
* Squidex Headless CMS |
|
||||
* |
|
||||
* @license |
|
||||
* Copyright (c) Squidex UG (haftungsbeschränkt). All rights reserved. |
|
||||
*/ |
|
||||
|
|
||||
import { Directive, ElementRef, forwardRef, HostListener, Renderer } from '@angular/core'; |
|
||||
import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms'; |
|
||||
|
|
||||
import slugify from 'slugify'; |
|
||||
|
|
||||
import { Types } from '@app/framework/internal'; |
|
||||
|
|
||||
export const SQX_SLUGIFY_INPUT_VALUE_ACCESSOR: any = { |
|
||||
provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => SlugifyInputDirective), multi: true |
|
||||
}; |
|
||||
|
|
||||
@Directive({ |
|
||||
selector: '[sqxSlugifyInput]', |
|
||||
providers: [SQX_SLUGIFY_INPUT_VALUE_ACCESSOR] |
|
||||
}) |
|
||||
export class SlugifyInputDirective implements ControlValueAccessor { |
|
||||
private callChange = (v: any) => { /* NOOP */ }; |
|
||||
private callTouched = () => { /* NOOP */ }; |
|
||||
|
|
||||
constructor( |
|
||||
private readonly element: ElementRef, |
|
||||
private readonly renderer: Renderer |
|
||||
) { |
|
||||
} |
|
||||
|
|
||||
@HostListener('input', ['$event.target.value']) |
|
||||
public onChange(value: any) { |
|
||||
const normalizedValue = this.transform(value); |
|
||||
|
|
||||
this.renderer.setElementProperty(this.element.nativeElement, 'value', normalizedValue); |
|
||||
this.callChange(normalizedValue); |
|
||||
} |
|
||||
|
|
||||
@HostListener('blur') |
|
||||
public onTouched() { |
|
||||
this.callTouched(); |
|
||||
} |
|
||||
|
|
||||
public writeValue(value: string) { |
|
||||
const normalizedValue = this.transform(value); |
|
||||
|
|
||||
this.renderer.setElementProperty(this.element.nativeElement, 'value', normalizedValue); |
|
||||
} |
|
||||
|
|
||||
public setDisabledState(isDisabled: boolean): void { |
|
||||
this.renderer.setElementProperty(this.element.nativeElement, 'disabled', isDisabled); |
|
||||
} |
|
||||
|
|
||||
public registerOnChange(fn: any) { |
|
||||
this.callChange = fn; |
|
||||
} |
|
||||
|
|
||||
public registerOnTouched(fn: any) { |
|
||||
this.callTouched = fn; |
|
||||
} |
|
||||
|
|
||||
private transform(value: any): string { |
|
||||
return Types.isString(value) ? slugify(value, { lower: true }) : ''; |
|
||||
} |
|
||||
} |
|
||||
@ -0,0 +1,94 @@ |
|||||
|
/* |
||||
|
* Squidex Headless CMS |
||||
|
* |
||||
|
* @license |
||||
|
* Copyright (c) Squidex UG (haftungsbeschränkt). All rights reserved. |
||||
|
*/ |
||||
|
|
||||
|
import { Directive, ElementRef, forwardRef, HostListener, Input, Renderer2 } from '@angular/core'; |
||||
|
import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms'; |
||||
|
|
||||
|
import slugify from 'slugify'; |
||||
|
|
||||
|
type Transform = (value: string) => string; |
||||
|
|
||||
|
export const TransformNoop: Transform = value => value; |
||||
|
export const TransformLowerCase: Transform = value => value.toLowerCase(); |
||||
|
export const TransformSlugify: Transform = value => slugify(value, { lower: true }); |
||||
|
export const TransformSlugifyCased: Transform = value => slugify(value, { lower: false }); |
||||
|
export const TransformUpperCase: Transform = value => value.toUpperCase(); |
||||
|
|
||||
|
import { Types } from '@app/framework/internal'; |
||||
|
|
||||
|
export const SQX_TRANSFORM_INPUT_VALUE_ACCESSOR: any = { |
||||
|
provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => TransformInputDirective), multi: true |
||||
|
}; |
||||
|
|
||||
|
@Directive({ |
||||
|
selector: '[sqxTransformInput]', |
||||
|
providers: [SQX_TRANSFORM_INPUT_VALUE_ACCESSOR] |
||||
|
}) |
||||
|
export class TransformInputDirective implements ControlValueAccessor { |
||||
|
private callChange = (v: any) => { /* NOOP */ }; |
||||
|
private callTouched = () => { /* NOOP */ }; |
||||
|
private transformer: Transform; |
||||
|
|
||||
|
@Input('sqxTransformInput') |
||||
|
public set transform(value: Transform | string) { |
||||
|
if (Types.isString(value)) { |
||||
|
if (value === 'LowerCase') { |
||||
|
this.transformer = TransformLowerCase; |
||||
|
} else if (value === 'Slugify') { |
||||
|
this.transform = TransformSlugify; |
||||
|
} else if (value === 'SlugifyCased') { |
||||
|
this.transform = TransformSlugifyCased; |
||||
|
} else if (value === 'UpperCase') { |
||||
|
this.transform = TransformUpperCase; |
||||
|
} |
||||
|
} else { |
||||
|
this.transformer = value || TransformNoop; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
constructor( |
||||
|
private readonly element: ElementRef, |
||||
|
private readonly renderer: Renderer2 |
||||
|
) { |
||||
|
} |
||||
|
|
||||
|
@HostListener('input', ['$event.target.value']) |
||||
|
public onChange(value: any) { |
||||
|
const normalizedValue = this.transformValue(value); |
||||
|
|
||||
|
this.renderer.setProperty(this.element.nativeElement, 'value', normalizedValue); |
||||
|
|
||||
|
this.callChange(normalizedValue); |
||||
|
} |
||||
|
|
||||
|
@HostListener('blur') |
||||
|
public onTouched() { |
||||
|
this.callTouched(); |
||||
|
} |
||||
|
|
||||
|
public writeValue(value: string) { |
||||
|
const normalizedValue = this.transformValue(value); |
||||
|
|
||||
|
this.renderer.setProperty(this.element.nativeElement, 'value', normalizedValue); |
||||
|
} |
||||
|
|
||||
|
public setDisabledState(isDisabled: boolean): void { |
||||
|
this.renderer.setProperty(this.element.nativeElement, 'disabled', isDisabled); |
||||
|
} |
||||
|
|
||||
|
public registerOnChange(fn: any) { |
||||
|
this.callChange = fn; |
||||
|
} |
||||
|
|
||||
|
public registerOnTouched(fn: any) { |
||||
|
this.callTouched = fn; |
||||
|
} |
||||
|
|
||||
|
private transformValue(value: any): string { |
||||
|
return Types.isString(value) ? this.transformer(value) : ''; |
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue