UNPKG

ng-cw-v12

Version:

Angular UI Component Library

152 lines 17.6 kB
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=