ng-cw-v12
Version:
Angular UI Component Library
152 lines • 17.6 kB
JavaScript
import { Directive, Input } from '@angular/core';
import { annotate } from "rough-notation";
import * as i0 from "@angular/core";
export class HighlighterDirective {
constructor(el, renderer) {
this.el = el;
this.renderer = renderer;
/** 荧光笔类型 */
this.ncType = 'highlight';
/** 是否开启动画效果 */
this._animate = true;
/** 动画持续时间,单位ms */
this.ncAnimationDuration = 800;
/** 荧光笔颜色 */
this.ncColor = "#ffd1dc";
/** 荧光笔宽度,单位px */
this.ncStrokeWidth = 1.5;
/** 荧光笔内边距,单位px */
this.ncPadding = 2;
/** 动画迭代次数 */
this.ncIterations = 2;
/** 括号类型,仅当ncType为bracket时有效 */
this.ncBrackets = ['left', 'right'];
/** 动画默认从左往右绘制,若要从右往左绘制请设置成true */
this._rtl = false;
/** 可手动切换该值来显示或隐藏荧光笔 */
this._enabled = true;
this.isInitialized = false;
}
set ncAnimate(val) {
this._animate = val !== null && val !== undefined && val !== false && val !== 'false';
}
get ncAnimate() {
return this._animate;
}
set ncRtl(val) {
this._rtl = val !== null && val !== undefined && val !== false && val !== 'false';
}
get ncRtl() {
return this._rtl;
}
set ncEnabled(val) {
this._enabled = val !== null && val !== undefined && val !== false && val !== 'false';
}
get ncEnabled() {
return this._enabled;
}
ngOnInit() {
this.create();
this.isInitialized = true;
if (this.ncEnabled) {
this.show();
}
}
ngOnDestroy() {
if (this.annotation) {
this.annotation.remove();
}
}
ngOnChanges(changes) {
if (this.isInitialized) {
if (changes['ncType']) {
this.annotation.type = this.ncType;
}
if (changes['ncAnimate']) {
this.annotation.animate = this.ncAnimate;
}
if (changes['ncAnimationDuration']) {
this.annotation.animationDuration = this.ncAnimationDuration;
}
if (changes['ncColor']) {
this.annotation.color = this.ncColor;
}
if (changes['ncStrokeWidth']) {
this.annotation.strokeWidth = this.ncStrokeWidth;
}
if (changes['ncPadding']) {
this.annotation.padding = this.ncPadding;
}
if (changes['ncIterations']) {
this.annotation.iterations = this.ncIterations;
}
if (changes['ncBrackets']) {
this.annotation.brackets = this.ncBrackets;
}
if (changes['ncRtl']) {
this.annotation.rtl = this.ncRtl;
}
if (changes['ncEnabled']) {
if (this.ncEnabled) {
this.show();
}
else {
this.hide();
}
}
}
}
create() {
//svg会生成在宿主的同级。这里设置宿主的父级为相对定位。使svg相对于宿主父级定位,防止svg在向上查找定位父级时出现一些不可控的问题
const elementPosition = getComputedStyle(this.el.nativeElement.parentElement).position;
if (!elementPosition || elementPosition === 'static') {
this.renderer.setStyle(this.el.nativeElement.parentElement, 'position', 'relative');
}
this.annotation = annotate(this.el.nativeElement, {
type: this.ncType,
animate: this.ncAnimate,
animationDuration: this.ncAnimationDuration,
color: this.ncColor,
strokeWidth: this.ncStrokeWidth,
padding: this.ncPadding,
iterations: this.ncIterations,
brackets: this.ncBrackets,
rtl: this.ncRtl,
});
}
show() {
this.annotation.show();
}
hide() {
this.annotation.hide();
}
}
HighlighterDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.5", ngImport: i0, type: HighlighterDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
HighlighterDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.1.5", type: HighlighterDirective, selector: "[ncHighlighter]", inputs: { ncType: "ncType", ncAnimate: "ncAnimate", ncAnimationDuration: "ncAnimationDuration", ncColor: "ncColor", ncStrokeWidth: "ncStrokeWidth", ncPadding: "ncPadding", ncIterations: "ncIterations", ncBrackets: "ncBrackets", ncRtl: "ncRtl", ncEnabled: "ncEnabled" }, usesOnChanges: true, ngImport: i0 });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.5", ngImport: i0, type: HighlighterDirective, decorators: [{
type: Directive,
args: [{
selector: '[ncHighlighter]'
}]
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }]; }, propDecorators: { ncType: [{
type: Input
}], ncAnimate: [{
type: Input
}], ncAnimationDuration: [{
type: Input
}], ncColor: [{
type: Input
}], ncStrokeWidth: [{
type: Input
}], ncPadding: [{
type: Input
}], ncIterations: [{
type: Input
}], ncBrackets: [{
type: Input
}], ncRtl: [{
type: Input
}], ncEnabled: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlnaGxpZ2h0ZXIuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9oaWdobGlnaHRlci9oaWdobGlnaHRlci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxLQUFLLEVBQTBELE1BQU0sZUFBZSxDQUFDO0FBQ3JILE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFRMUMsTUFBTSxPQUFPLG9CQUFvQjtJQThDL0IsWUFBb0IsRUFBYyxFQUFVLFFBQW1CO1FBQTNDLE9BQUUsR0FBRixFQUFFLENBQVk7UUFBVSxhQUFRLEdBQVIsUUFBUSxDQUFXO1FBN0MvRCxZQUFZO1FBQ0gsV0FBTSxHQUFlLFdBQVcsQ0FBQztRQUMxQyxlQUFlO1FBQ1AsYUFBUSxHQUFZLElBQUksQ0FBQztRQVFqQyxrQkFBa0I7UUFDVCx3QkFBbUIsR0FBVyxHQUFHLENBQUM7UUFDM0MsWUFBWTtRQUNILFlBQU8sR0FBVyxTQUFTLENBQUM7UUFDckMsaUJBQWlCO1FBQ1Isa0JBQWEsR0FBVyxHQUFHLENBQUM7UUFDckMsa0JBQWtCO1FBQ1QsY0FBUyxHQUFpRSxDQUFDLENBQUM7UUFDckYsYUFBYTtRQUNKLGlCQUFZLEdBQVcsQ0FBQyxDQUFDO1FBQ2xDLCtCQUErQjtRQUN0QixlQUFVLEdBQW9DLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3pFLGtDQUFrQztRQUMxQixTQUFJLEdBQVksS0FBSyxDQUFDO1FBUTlCLHVCQUF1QjtRQUNmLGFBQVEsR0FBWSxJQUFJLENBQUM7UUFVekIsa0JBQWEsR0FBWSxLQUFLLENBQUM7SUFFNEIsQ0FBQztJQXpDcEUsSUFDSSxTQUFTLENBQUMsR0FBcUI7UUFDakMsSUFBSSxDQUFDLFFBQVEsR0FBRyxHQUFHLEtBQUssSUFBSSxJQUFJLEdBQUcsS0FBSyxTQUFTLElBQUks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QkFBaUI7aUJBQzVCO3lIQUdVLE1BQU07c0JBQWQsS0FBSztnQkFJRixTQUFTO3NCQURaLEtBQUs7Z0JBUUcsbUJBQW1CO3NCQUEzQixLQUFLO2dCQUVHLE9BQU87c0JBQWYsS0FBSztnQkFFRyxhQUFhO3NCQUFyQixLQUFLO2dCQUVHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBRUcsWUFBWTtzQkFBcEIsS0FBSztnQkFFRyxVQUFVO3NCQUFsQixLQUFLO2dCQUlGLEtBQUs7c0JBRFIsS0FBSztnQkFVRixTQUFTO3NCQURaLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIElucHV0LCBPbkluaXQsIFNpbXBsZUNoYW5nZXMsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBSZW5kZXJlcjIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgYW5ub3RhdGUgfSBmcm9tIFwicm91Z2gtbm90YXRpb25cIjtcclxuXHJcbmV4cG9ydCB0eXBlIE5jVHlwZVR5cGUgPSAndW5kZXJsaW5lJyB8ICdib3gnIHwgJ2NpcmNsZScgfCAnaGlnaGxpZ2h0JyB8ICdzdHJpa2UtdGhyb3VnaCcgfCAnY3Jvc3NlZC1vZmYnIHwgJ2JyYWNrZXQnO1xyXG5leHBvcnQgdHlwZSBOY0JyYWNrZXRUeXBlID0gJ2xlZnQnIHwgJ3JpZ2h0JyB8ICd0b3AnIHwgJ2JvdHRvbSc7XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogJ1tuY0hpZ2hsaWdodGVyXSdcclxufSlcclxuZXhwb3J0IGNsYXNzIEhpZ2hsaWdodGVyRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XHJcbiAgLyoqIOiNp+WFieeslOexu+WeiyAqL1xyXG4gIEBJbnB1dCgpIG5jVHlwZTogTmNUeXBlVHlwZSA9ICdoaWdobGlnaHQnO1xyXG4gIC8qKiDmmK/lkKblvIDlkK/liqjnlLvmlYjmnpwgKi9cclxuICBwcml2YXRlIF9hbmltYXRlOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKVxyXG4gIHNldCBuY0FuaW1hdGUodmFsOiBib29sZWFuIHwgc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9hbmltYXRlID0gdmFsICE9PSBudWxsICYmIHZhbCAhPT0gdW5kZWZpbmVkICYmIHZhbCAhPT0gZmFsc2UgJiYgdmFsICE9PSAnZmFsc2UnO1xyXG4gIH1cclxuICBnZXQgbmNBbmltYXRlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2FuaW1hdGU7XHJcbiAgfVxyXG4gIC8qKiDliqjnlLvmjIHnu63ml7bpl7TvvIzljZXkvY1tcyAqL1xyXG4gIEBJbnB1dCgpIG5jQW5pbWF0aW9uRHVyYXRpb246IG51bWJlciA9IDgwMDtcclxuICAvKiog6I2n5YWJ56yU6aKc6ImyICovXHJcbiAgQElucHV0KCkgbmNDb2xvcjogc3RyaW5nID0gXCIjZmZkMWRjXCI7XHJcbiAgLyoqIOiNp+WFieeslOWuveW6pu+8jOWNleS9jXB4ICovXHJcbiAgQElucHV0KCkgbmNTdHJva2VXaWR0aDogbnVtYmVyID0gMS41O1xyXG4gIC8qKiDojaflhYnnrJTlhoXovrnot53vvIzljZXkvY1weCAqL1xyXG4gIEBJbnB1dCgpIG5jUGFkZGluZzogbnVtYmVyIHwgW251bWJlciwgbnVtYmVyXSB8IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdID0gMjtcclxuICAvKiog5Yqo55S76L+t5Luj5qyh5pWwICovXHJcbiAgQElucHV0KCkgbmNJdGVyYXRpb25zOiBudW1iZXIgPSAyO1xyXG4gIC8qKiDmi6zlj7fnsbvlnovvvIzku4XlvZNuY1R5cGXkuLpicmFja2V05pe25pyJ5pWIICovXHJcbiAgQElucHV0KCkgbmNCcmFja2V0czogTmNCcmFja2V0VHlwZSB8IE5jQnJhY2tldFR5cGVbXSA9IFsnbGVmdCcsICdyaWdodCddO1xyXG4gIC8qKiDliqjnlLvpu5jorqTku47lt6blvoDlj7Pnu5jliLbvvIzoi6XopoHku47lj7PlvoDlt6bnu5jliLbor7forr7nva7miJB0cnVlICovXHJcbiAgcHJpdmF0ZSBfcnRsOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KClcclxuICBzZXQgbmNSdGwodmFsOiBib29sZWFuIHwgc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9ydGwgPSB2YWwgIT09IG51bGwgJiYgdmFsICE9PSB1bmRlZmluZWQgJiYgdmFsICE9PSBmYWxzZSAmJiB2YWwgIT09ICdmYWxzZSc7XHJcbiAgfVxyXG4gIGdldCBuY1J0bCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9ydGw7XHJcbiAgfVxyXG4gIC8qKiDlj6/miYvliqjliIfmjaLor6XlgLzmnaXmmL7npLrmiJbpmpDol4/ojaflhYnnrJQgKi9cclxuICBwcml2YXRlIF9lbmFibGVkOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKVxyXG4gIHNldCBuY0VuYWJsZWQodmFsOiBib29sZWFuIHwgc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9lbmFibGVkID0gdmFsICE9PSBudWxsICYmIHZhbCAhPT0gdW5kZWZpbmVkICYmIHZhbCAhPT0gZmFsc2UgJiYgdmFsICE9PSAnZmFsc2UnO1xyXG4gIH1cclxuICBnZXQgbmNFbmFibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2VuYWJsZWQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFubm90YXRpb246IGFueTtcclxuICBwcml2YXRlIGlzSW5pdGlhbGl6ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlbDogRWxlbWVudFJlZiwgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmNyZWF0ZSgpO1xyXG4gICAgdGhpcy5pc0luaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLm5jRW5hYmxlZCkge1xyXG4gICAgICB0aGlzLnNob3coKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgaWYgKHRoaXMuYW5ub3RhdGlvbikge1xyXG4gICAgICB0aGlzLmFubm90YXRpb24ucmVtb3ZlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICBpZiAodGhpcy5pc0luaXRpYWxpemVkKSB7XHJcbiAgICAgIGlmIChjaGFuZ2VzWyduY1R5cGUnXSkge1xyXG4gICAgICAgIHRoaXMuYW5ub3RhdGlvbi50eXBlID0gdGhpcy5uY1R5cGU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNoYW5nZXNbJ25jQW5pbWF0ZSddKSB7XHJcbiAgICAgICAgdGhpcy5hbm5vdGF0aW9uLmFuaW1hdGUgPSB0aGlzLm5jQW5pbWF0ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY2hhbmdlc1snbmNBbmltYXRpb25EdXJhdGlvbiddKSB7XHJcbiAgICAgICAgdGhpcy5hbm5vdGF0aW9uLmFuaW1hdGlvbkR1cmF0aW9uID0gdGhpcy5uY0FuaW1hdGlvbkR1cmF0aW9uO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjaGFuZ2VzWyduY0NvbG9yJ10pIHtcclxuICAgICAgICB0aGlzLmFubm90YXRpb24uY29sb3IgPSB0aGlzLm5jQ29sb3I7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNoYW5nZXNbJ25jU3Ryb2tlV2lkdGgnXSkge1xyXG4gICAgICAgIHRoaXMuYW5ub3RhdGlvbi5zdHJva2VXaWR0aCA9IHRoaXMubmNTdHJva2VXaWR0aDtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY2hhbmdlc1snbmNQYWRkaW5nJ10pIHtcclxuICAgICAgICB0aGlzLmFubm90YXRpb24ucGFkZGluZyA9IHRoaXMubmNQYWRkaW5nO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjaGFuZ2VzWyduY0l0ZXJhdGlvbnMnXSkge1xyXG4gICAgICAgIHRoaXMuYW5ub3RhdGlvbi5pdGVyYXRpb25zID0gdGhpcy5uY0l0ZXJhdGlvbnM7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNoYW5nZXNbJ25jQnJhY2tldHMnXSkge1xyXG4gICAgICAgIHRoaXMuYW5ub3RhdGlvbi5icmFja2V0cyA9IHRoaXMubmNCcmFja2V0cztcclxuICAgICAgfVxyXG4gICAgICBpZiAoY2hhbmdlc1snbmNSdGwnXSkge1xyXG4gICAgICAgIHRoaXMuYW5ub3RhdGlvbi5ydGwgPSB0aGlzLm5jUnRsO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjaGFuZ2VzWyduY0VuYWJsZWQnXSkge1xyXG4gICAgICAgIGlmICh0aGlzLm5jRW5hYmxlZCkge1xyXG4gICAgICAgICAgdGhpcy5zaG93KCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuaGlkZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY3JlYXRlKCkge1xyXG4gICAgLy9zdmfkvJrnlJ/miJDlnKjlrr/kuLvnmoTlkIznuqfjgILov5nph4zorr7nva7lrr/kuLvnmoTniLbnuqfkuLrnm7jlr7nlrprkvY3jgILkvb9zdmfnm7jlr7nkuo7lrr/kuLvniLbnuqflrprkvY3vvIzpmLLmraJzdmflnKjlkJHkuIrmn6Xmib7lrprkvY3niLbnuqfml7blh7rnjrDkuIDkupvkuI3lj6/mjqfnmoTpl67pophcclxuICAgIGNvbnN0IGVsZW1lbnRQb3NpdGlvbiA9IGdldENvbXB1dGVkU3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQpLnBvc2l0aW9uO1xyXG4gICAgaWYgKCFlbGVtZW50UG9zaXRpb24gfHwgZWxlbWVudFBvc2l0aW9uID09PSAnc3RhdGljJykge1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50LCAncG9zaXRpb24nLCAncmVsYXRpdmUnKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmFubm90YXRpb24gPSBhbm5vdGF0ZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIHtcclxuICAgICAgdHlwZTogdGhpcy5uY1R5cGUsXHJcbiAgICAgIGFuaW1hdGU6IHRoaXMubmNBbmltYXRlLFxyXG4gICAgICBhbmltYXRpb25EdXJhdGlvbjogdGhpcy5uY0FuaW1hdGlvbkR1cmF0aW9uLFxyXG4gICAgICBjb2xvcjogdGhpcy5uY0NvbG9yLFxyXG4gICAgICBzdHJva2VXaWR0aDogdGhpcy5uY1N0cm9rZVdpZHRoLFxyXG4gICAgICBwYWRkaW5nOiB0aGlzLm5jUGFkZGluZyxcclxuICAgICAgaXRlcmF0aW9uczogdGhpcy5uY0l0ZXJhdGlvbnMsXHJcbiAgICAgIGJyYWNrZXRzOiB0aGlzLm5jQnJhY2tldHMsXHJcbiAgICAgIHJ0bDogdGhpcy5uY1J0bCxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2hvdygpIHtcclxuICAgIHRoaXMuYW5ub3RhdGlvbi5zaG93KCk7XHJcbiAgfVxyXG5cclxuICBoaWRlKCkge1xyXG4gICAgdGhpcy5hbm5vdGF0aW9uLmhpZGUoKTtcclxuICB9XHJcbn0iXX0=