@visa/nova-angular
Version:
Visa Product Design System Nova Angular library
91 lines • 8.41 kB
JavaScript
/**
* © 2025 Visa
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
**/
import { Directive, ElementRef, HostBinding, Input } from '@angular/core';
import * as i0 from "@angular/core";
export class OpensInNewTabDirective {
constructor(el) {
this.el = el;
}
/**
* Allows user to set custom rel attribute.
* @default 'noopener noreferrer'
* @builtin true
*/
get rel() {
return this._rel;
}
set rel(value) {
this._rel = value;
}
/**
* Allows user to set custom target attribute.
* @default '_blank'
* @builtin true
*/
get target() {
return this._target;
}
set target(value) {
this._target = value;
}
/**
* Allows user to set custom aria-label attribute.
* @default '<inner-text-of-link> (opens in new tab)'
*/
get ariaLabel() {
return this._ariaLabel;
}
set ariaLabel(value) {
this._ariaLabel = value;
}
get attrRel() {
return this._rel ? this._rel : 'noopener noreferrer';
}
get attrTarget() {
return this._target ? this._target : '_blank';
}
get attrAriaLabel() {
return this._ariaLabel ? this._ariaLabel : `${this.el.nativeElement.innerText.trim()} (opens in new tab)`;
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: OpensInNewTabDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: OpensInNewTabDirective, isStandalone: true, selector: "[vOpensInNewTab], ", inputs: { rel: "rel", target: "target", ariaLabel: ["aria-label", "ariaLabel"] }, host: { properties: { "attr.rel": "this.attrRel", "attr.target": "this.attrTarget", "attr.aria-label": "this.attrAriaLabel" } }, ngImport: i0 }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: OpensInNewTabDirective, decorators: [{
type: Directive,
args: [{
standalone: true,
// tslint:disable-next-line:directive-selector
selector: '[vOpensInNewTab], '
}]
}], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { rel: [{
type: Input
}], target: [{
type: Input
}], ariaLabel: [{
type: Input,
args: ['aria-label']
}], attrRel: [{
type: HostBinding,
args: ['attr.rel']
}], attrTarget: [{
type: HostBinding,
args: ['attr.target']
}], attrAriaLabel: [{
type: HostBinding,
args: ['attr.aria-label']
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlbnMtaW4tbmV3LXRhYi5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL25vdmEtbGliL3NyYy9saWIvX3V0aWxpdGllcy9hbmd1bGFyLXNwZWNpZmljLWRpcmVjdGl2ZXMvb3BlbnMtaW4tbmV3LXRhYi5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztJQWVJO0FBQ0osT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFPMUUsTUFBTSxPQUFPLHNCQUFzQjtJQUNqQyxZQUFvQixFQUFjO1FBQWQsT0FBRSxHQUFGLEVBQUUsQ0FBWTtJQUFHLENBQUM7SUFFdEM7Ozs7T0FJRztJQUNILElBQ0ksR0FBRztRQUNMLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztJQUNuQixDQUFDO0lBQ0QsSUFBSSxHQUFHLENBQUMsS0FBYTtRQUNuQixJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBR0Q7Ozs7T0FJRztJQUNILElBQ0ksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBQ0QsSUFBSSxNQUFNLENBQUMsS0FBYTtRQUN0QixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUN2QixDQUFDO0lBR0Q7OztPQUdHO0lBQ0gsSUFDSSxTQUFTO1FBQ1gsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3pCLENBQUM7SUFDRCxJQUFJLFNBQVMsQ0FBQyxLQUFhO1FBQ3pCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQzFCLENBQUM7SUFHRCxJQUNJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDO0lBQ3ZELENBQUM7SUFDRCxJQUNJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztJQUNoRCxDQUFDO0lBQ0QsSUFDSSxhQUFhO1FBQ2YsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUscUJBQXFCLENBQUM7SUFDNUcsQ0FBQzsrR0F2RFUsc0JBQXNCO21HQUF0QixzQkFBc0I7OzRGQUF0QixzQkFBc0I7a0JBTGxDLFNBQVM7bUJBQUM7b0JBQ1QsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLDhDQUE4QztvQkFDOUMsUUFBUSxFQUFFLG9CQUFvQjtpQkFDL0I7K0VBVUssR0FBRztzQkFETixLQUFLO2dCQWVGLE1BQU07c0JBRFQsS0FBSztnQkFjRixTQUFTO3NCQURaLEtBQUs7dUJBQUMsWUFBWTtnQkFVZixPQUFPO3NCQURWLFdBQVc7dUJBQUMsVUFBVTtnQkFLbkIsVUFBVTtzQkFEYixXQUFXO3VCQUFDLGFBQWE7Z0JBS3RCLGFBQWE7c0JBRGhCLFdBQVc7dUJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiAgICAgICAgICAgICAgwqkgMjAyNSBWaXNhXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqXG4gKiovXG5pbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEhvc3RCaW5kaW5nLCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmRpcmVjdGl2ZS1zZWxlY3RvclxuICBzZWxlY3RvcjogJ1t2T3BlbnNJbk5ld1RhYl0sICdcbn0pXG5leHBvcnQgY2xhc3MgT3BlbnNJbk5ld1RhYkRpcmVjdGl2ZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWw6IEVsZW1lbnRSZWYpIHt9XG5cbiAgLyoqXG4gICAqIEFsbG93cyB1c2VyIHRvIHNldCBjdXN0b20gcmVsIGF0dHJpYnV0ZS5cbiAgICogQGRlZmF1bHQgJ25vb3BlbmVyIG5vcmVmZXJyZXInXG4gICAqIEBidWlsdGluIHRydWVcbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCByZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fcmVsO1xuICB9XG4gIHNldCByZWwodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX3JlbCA9IHZhbHVlO1xuICB9XG4gIF9yZWw6IHN0cmluZztcblxuICAvKipcbiAgICogQWxsb3dzIHVzZXIgdG8gc2V0IGN1c3RvbSB0YXJnZXQgYXR0cmlidXRlLlxuICAgKiBAZGVmYXVsdCAnX2JsYW5rJ1xuICAgKiBAYnVpbHRpbiB0cnVlXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgdGFyZ2V0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3RhcmdldDtcbiAgfVxuICBzZXQgdGFyZ2V0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl90YXJnZXQgPSB2YWx1ZTtcbiAgfVxuICBfdGFyZ2V0OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFsbG93cyB1c2VyIHRvIHNldCBjdXN0b20gYXJpYS1sYWJlbCBhdHRyaWJ1dGUuXG4gICAqIEBkZWZhdWx0ICcmbHQ7aW5uZXItdGV4dC1vZi1saW5rJmd0OyAob3BlbnMgaW4gbmV3IHRhYiknXG4gICAqL1xuICBASW5wdXQoJ2FyaWEtbGFiZWwnKVxuICBnZXQgYXJpYUxhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2FyaWFMYWJlbDtcbiAgfVxuICBzZXQgYXJpYUxhYmVsKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9hcmlhTGFiZWwgPSB2YWx1ZTtcbiAgfVxuICBfYXJpYUxhYmVsOiBzdHJpbmc7XG5cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLnJlbCcpXG4gIGdldCBhdHRyUmVsKCk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9yZWwgPyB0aGlzLl9yZWwgOiAnbm9vcGVuZXIgbm9yZWZlcnJlcic7XG4gIH1cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLnRhcmdldCcpXG4gIGdldCBhdHRyVGFyZ2V0KCk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl90YXJnZXQgPyB0aGlzLl90YXJnZXQgOiAnX2JsYW5rJztcbiAgfVxuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1sYWJlbCcpXG4gIGdldCBhdHRyQXJpYUxhYmVsKCk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9hcmlhTGFiZWwgPyB0aGlzLl9hcmlhTGFiZWwgOiBgJHt0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuaW5uZXJUZXh0LnRyaW0oKX0gKG9wZW5zIGluIG5ldyB0YWIpYDtcbiAgfVxufVxuIl19