UNPKG

@grptx/ng-canvas-gauges

Version:

Angular 14+ component wrapper for the canvas-gauges lib written by @Mikhus

1 lines 21.4 kB
{"version":3,"file":"grptx-ng-canvas-gauges.mjs","sources":["../../../projects/ng-canvas-gauges/src/lib/base-gauge.ts","../../../projects/ng-canvas-gauges/src/lib/linear-gauge.ts","../../../projects/ng-canvas-gauges/src/lib/radial-gauge.ts","../../../projects/ng-canvas-gauges/src/lib/gauges.module.ts","../../../projects/ng-canvas-gauges/src/public_api.ts","../../../projects/ng-canvas-gauges/src/grptx-ng-canvas-gauges.ts"],"sourcesContent":["/*!\n * The MIT License (MIT)\n *\n * Copyright (c) 2017 Vlad Martynenko <vladimir.martynenko.work@gmail.com>\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { ViewChild, Input, NgZone, ElementRef, OnInit, AfterViewInit, Directive } from '@angular/core';\nimport * as CanvasGauges from 'canvas-gauges';\nimport * as Rx from 'rx-dom-html';\n\n\n\n// String utils\nconst toCamelCase = (str: string) => str.replace(/(\\-\\w)/g, (matches) => matches[1].toUpperCase());\n\nconst toKebabCase = (str: string) => str.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();\n\nconst attributeName2PropertyName = (attrName: string) => toCamelCase(attrName);\n\n\n\n\n/**\n * Base gauge component for the Gauges rendering\n * T - Type of the Gauge to be rendered (Currently RadialGauge, LinearGauge from the original library)\n * T2 - Type of config options used by the particular gauge (RadialGaugeOptions, LinearGaugeOptions)\n */\n@Directive()\nexport abstract class BaseGauge<T extends CanvasGauges.BaseGauge, T2 extends CanvasGauges.GenericOptions>\n implements OnInit, AfterViewInit {\n\n /**\n * Canvas element on the template used by the library to draw gauge element\n */\n @ViewChild('gauge', { static: true })\n protected canvas: ElementRef;\n\n /**\n * A gauge instance responsible for rendering and updates on the canvas.\n * Subclasses should initialize in their ngOnInit implementation.\n */\n protected gauge: T;\n\n\n /**\n * Flag indicating that OnViewInit life-cycle has completed\n */\n private isInited = false;\n\n /**\n * value property of gauge prior to component view initialization\n */\n private preInitValue: number;\n\n /**\n * options property of gauge prior to component view initialization\n */\n private preInitOptions: T2;\n\n\n /**\n * Listen for attribute changes, i.e., options properties that are stored\n * as attributes on this ElementRef\n */\n private domListener: MutationObserver;\n\n\n /**\n *\n * @param el - reference to the element of the whole component, used to scrape options declared on the component itself\n * @param zone - required to redraw gauge outside of Angular, due to animation lags caused by the ovewritten function of the ngZone\n */\n constructor(private el: ElementRef, public zone: NgZone) {\n }\n\n\n /**\n * Subclasses should instantiate the CanvasGauge object in the child component\n */\n abstract ngOnInit(): void;\n\n\n /**\n * Returns gauges properties as an options object.\n * Option properties consist of the attribute-based properties and those\n * explicitly set.\n * @returns <T2>\n */\n public get options(): T2 {\n\n const options = {} as T2;\n options.renderTo = this.canvas.nativeElement;\n\n // Map attribute-based options onto options.\n // Requries converting kebab style attribute names to camelCase property names\n for (const attr of this.el.nativeElement.attributes) {\n const prop = attributeName2PropertyName(attr.name);\n options[prop] = CanvasGauges.DomObserver.parse(attr.value);\n }\n\n // merge preOptons with attribute-based properties\n // tslint:disable-next-line:forin\n for (const prop in this.preInitOptions) {\n options[prop] = this.preInitOptions[prop];\n }\n\n // clear the preInitOptions as they have already been merged\n // with the attribute-based properties\n if (this.isInited) {\n this.preInitOptions = null;\n }\n\n return options;\n }\n\n\n /**\n * Assign gauge options at anytime in the lifecycle.\n * @param newOptions - assign the style and size properties\n */\n @Input()\n public set options(newOptions: T2) {\n\n // cache newOptions as preInitOptions until gauge is ready\n if (!this.isInited) {\n this.preInitOptions = newOptions;\n return;\n }\n\n this.update(newOptions);\n }\n\n\n /**\n * Assign the value of the gauge visual indicator such as a needle or pointer\n * @param newValue the guage new value\n */\n @Input()\n public set value(newValue: number) {\n\n // case new gauge value as preInitValue until the gauge is ready\n if (!this.isInited) {\n this.preInitValue = newValue;\n return;\n }\n\n this.zone.runOutsideAngular(() => {\n this.gauge.value = newValue;\n });\n }\n\n\n /**\n * Update the gauge options. Do not use until after OnViewInit() before using.\n *\n * Special implementation note - options.properties are maintained as\n * attribute name->value on this component's elementRef. Thus this method\n * maps each newOptions property onto the property's corresponding attribute.\n * The attribute update triggers a DOM mutation event which \"this\" listens for.\n * See #listenForDOMEvents()\n *\n * @param newOptions - the options to update the gauge\n */\n public update(newOptions: T2 | {}) {\n\n // map all options onto this element's attributes\n // Then attribute changes will be detected and pushed to the gauge.update()\n if (!newOptions) { return; }\n\n // tslint:disable-next-line:forin\n for (const prop in newOptions) {\n const val = newOptions[prop].toString();\n\n if (prop === 'value') {\n // short circuit the value property update by calling\n // the gauge.value api directly for efficient animated update\n this.value = CanvasGauges.DomObserver.parse(val);\n } else {\n const attrName = toKebabCase(prop);\n this.el.nativeElement.setAttribute(attrName, val);\n }\n }\n }\n\n\n /**\n * Perform gauge initialization.\n * Subclasses that override this method must this super version\n * for proper operation.\n */\n public ngAfterViewInit() {\n\n // initial update of gauge properties\n this.initGauge();\n\n this.listenForDOMEvents();\n\n this.isInited = true;\n }\n\n\n /**\n * Listen for attribute-change events that are created when updating\n * the options of this gauge.\n */\n protected listenForDOMEvents() {\n // Listen to gauge element for attribute changes\n // Convert all changed attribtues into a GenericOptions or subclass\n // Update the gauge with the new options.\n this.domListener =\n Rx.DOM.fromMutationObserver(this.el.nativeElement, { attributes: true }).\n subscribe(changes => {\n const newOptions = {} as T2;\n changes.forEach(change => {\n if ('attributes' === change.type) {\n // console.log('DOM, change', change.attributeName);\n newOptions[attributeName2PropertyName(change.attributeName)] =\n CanvasGauges.DomObserver.parse(\n this.el.nativeElement.getAttribute(change.attributeName));\n }\n });\n\n this.basicUpdate(newOptions);\n });\n }\n\n\n /**\n * Discontinue listening for attribute change events.\n */\n protected stopListeningForDOMEvents() {\n if (this.domListener) {\n this.domListener.disconnect();\n this.domListener = null;\n }\n }\n\n\n /**\n * Initalize the gauge with all options defined by attributes and\n * parent component options.\n */\n protected initGauge() {\n const options = this.options;\n if (this.preInitValue) {\n options.value = this.preInitValue;\n }\n\n // init options.renderTo if needed\n if (!options.hasOwnProperty('renderTo') || !options.renderTo) {\n options.renderTo = this.canvas.nativeElement;\n }\n\n this.basicUpdate(options);\n }\n\n\n /**\n * Performs the gauge update using the current options\n * @param options The options for the guage\n */\n protected basicUpdate(options: T2) {\n\n // treat the value property special and update it through the\n // value getter.\n if (typeof options.value === 'number') {\n\n // use gauge api directly for most efficient update method\n this.value = options.value;\n\n // filter value property from options to avoid redundant\n // processing by gauge\n delete options.value;\n }\n\n // do nothing if no option properties to update\n if (Object.keys(options).length) {\n this.gauge.update(options);\n }\n }\n\n}\n\n\n\n","/*!\n * The MIT License (MIT)\n *\n * Copyright (c) 2017 Vlad Martynenko <vladimir.martynenko.work@gmail.com>\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport {Component, NgZone, ElementRef, OnInit} from '@angular/core';\nimport {BaseGauge} from './base-gauge';\nimport * as CanvasGauges from 'canvas-gauges';\n\nexport { LinearGaugeOptions } from 'canvas-gauges';\n\n/**\n * Implements Linear Gauge from the original library\n */\n@Component({\n // tslint:disable-next-line:component-selector\n selector: 'linear-gauge',\n template: '<canvas #gauge></canvas>'\n})\n// tslint:disable-next-line:component-class-suffix\nexport class LinearGauge extends BaseGauge<CanvasGauges.LinearGauge, CanvasGauges.LinearGaugeOptions> implements OnInit {\n\n constructor(el: ElementRef, zone: NgZone) {\n super(el, zone);\n }\n\n\n ngOnInit(): void {\n this.gauge = new CanvasGauges.LinearGauge(this.options).draw();\n }\n}\n","/*!\n * The MIT License (MIT)\n *\n * Copyright (c) 2017 Vlad Martynenko <vladimir.martynenko.work@gmail.com>\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Component, NgZone, ElementRef, OnInit } from '@angular/core';\nimport { BaseGauge } from './base-gauge';\nimport * as CanvasGauges from 'canvas-gauges';\n\nexport { RadialGaugeOptions } from 'canvas-gauges';\n\n/**\n * Implements Radial Gauge from the original library\n */\n@Component({\n // tslint:disable-next-line:component-selector\n selector: 'radial-gauge',\n template: '<canvas #gauge></canvas>'\n})\n// tslint:disable-next-line:component-class-suffix\nexport class RadialGauge extends BaseGauge<CanvasGauges.RadialGauge, CanvasGauges.RadialGaugeOptions> implements OnInit {\n constructor(el: ElementRef, zone: NgZone) {\n super(el, zone);\n }\n\n ngOnInit() {\n this.gauge = new CanvasGauges.RadialGauge(this.options).draw();\n }\n}\n","import { NgModule } from '@angular/core';\nimport { LinearGauge } from './linear-gauge';\nimport { RadialGauge } from './radial-gauge';\n\n@NgModule({\n declarations: [\n LinearGauge,\n RadialGauge],\n imports: [\n ],\n exports: [\n LinearGauge,\n RadialGauge]\n})\nexport class GaugesModule { }\n","/*\n * Public API Surface of ng-canvas-gauges\n */\nexport * from './lib/gauges.module';\n\n// components\nexport * from './lib/linear-gauge';\nexport * from './lib/radial-gauge';\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}