@mxtommy/kip 1.2.3 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.angulardoc.json +3 -3
- package/CHANGELOG.md +145 -135
- package/CONTRIBUTORS.md +16 -16
- package/README.md +102 -102
- package/angular.json +162 -153
- package/karma.conf.js +31 -31
- package/package.json +87 -84
- package/public/3rdpartylicenses.txt +301 -21
- package/public/assets/NoSleep.min.js +1 -1
- package/public/assets/fontawesome6/css/all.min.css +6 -0
- package/public/assets/fontawesome6/webfonts/fa-brands-400.ttf +0 -0
- package/public/assets/fontawesome6/webfonts/fa-brands-400.woff2 +0 -0
- package/public/assets/fontawesome6/webfonts/fa-regular-400.ttf +0 -0
- package/public/assets/fontawesome6/webfonts/fa-regular-400.woff2 +0 -0
- package/public/assets/fontawesome6/webfonts/fa-solid-900.ttf +0 -0
- package/public/assets/fontawesome6/webfonts/fa-solid-900.woff2 +0 -0
- package/public/assets/fontawesome6/webfonts/fa-v4compatibility.ttf +0 -0
- package/public/assets/fontawesome6/webfonts/fa-v4compatibility.woff2 +0 -0
- package/public/assets/icon-192x192.png +0 -0
- package/public/assets/icon-256x256.png +0 -0
- package/public/assets/icon-384x384.png +0 -0
- package/public/assets/icon-512x512.png +0 -0
- package/public/assets/steelseries-min.js +25 -25
- package/public/assets/steelseries-min.js.map +8 -8
- package/public/assets/steelseries.js +15834 -15834
- package/public/assets/svg-autopilot-inkscape-plain.svg +983 -983
- package/public/assets/svg-wind-inkscape.svg +1358 -1358
- package/public/assets/tween.js +381 -381
- package/public/index.html +19 -20
- package/public/main-es2018.98175eb4c61ccaf7eb17.js +1 -0
- package/public/main-es5.98175eb4c61ccaf7eb17.js +1 -0
- package/public/manifest.json +33 -0
- package/public/polyfills-es2018.3a61665863c173cd6ba3.js +1 -0
- package/public/polyfills-es5.44827ae4ff4e41de51fb.js +1 -0
- package/public/runtime-es2018.baedb88c6d2abacae2b8.js +1 -0
- package/public/runtime-es5.baedb88c6d2abacae2b8.js +1 -0
- package/public/styles.b92ae2c466c89712209d.css +5 -0
- package/src/app/alarm-menu/alarm-menu.component.html +55 -55
- package/src/app/alarm-menu/alarm-menu.component.scss +52 -53
- package/src/app/alarm-menu/alarm-menu.component.spec.ts +25 -25
- package/src/app/alarm-menu/alarm-menu.component.ts +186 -186
- package/src/app/app-help/app-help.component.css +4 -4
- package/src/app/app-help/app-help.component.html +135 -135
- package/src/app/app-help/app-help.component.ts +45 -45
- package/src/app/app.component.css +39 -39
- package/src/app/app.component.html +93 -93
- package/src/app/app.component.scss +79 -79
- package/src/app/app.component.spec.ts +32 -32
- package/src/app/app.component.ts +191 -192
- package/src/app/app.module.ts +200 -200
- package/src/app/config.blank.const.ts +51 -51
- package/src/app/config.blank.notification.const.ts +19 -19
- package/src/app/config.blank.units.const.ts +23 -23
- package/src/app/config.demo.const.ts +383 -383
- package/src/app/data-browser/data-browser.component.css +29 -29
- package/src/app/data-browser/data-browser.component.html +44 -44
- package/src/app/data-browser/data-browser.component.spec.ts +25 -25
- package/src/app/data-browser/data-browser.component.ts +91 -91
- package/src/app/data-browser-row/data-browser-row-unit-modal.html +17 -17
- package/src/app/data-browser-row/data-browser-row.component.css +9 -9
- package/src/app/data-browser-row/data-browser-row.component.html +4 -4
- package/src/app/data-browser-row/data-browser-row.component.ts +78 -78
- package/src/app/data-set.service.ts +273 -273
- package/src/app/dynamic-widget.directive.ts +11 -11
- package/src/app/gauge-steel/gauge-steel.component.css +4 -4
- package/src/app/gauge-steel/gauge-steel.component.html +4 -4
- package/src/app/gauge-steel/gauge-steel.component.spec.ts +25 -25
- package/src/app/gauge-steel/gauge-steel.component.ts +282 -282
- package/src/app/gauges-module/base-gauge.ts +300 -300
- package/src/app/gauges-module/linear-gauge.ts +49 -49
- package/src/app/gauges-module/radial-gauge.ts +47 -47
- package/src/app/layout-split/layout-split.component.html +30 -30
- package/src/app/layout-split/layout-split.component.scss +33 -33
- package/src/app/layout-split/layout-split.component.spec.ts +25 -25
- package/src/app/layout-split/layout-split.component.ts +59 -59
- package/src/app/layout-splits.service.ts +284 -284
- package/src/app/modal-path-selector/modal-path-selector.component.html +62 -62
- package/src/app/modal-path-selector/modal-path-selector.component.scss +39 -39
- package/src/app/modal-path-selector/modal-path-selector.component.spec.ts +25 -25
- package/src/app/modal-path-selector/modal-path-selector.component.ts +132 -132
- package/src/app/modal-widget/modal-widget.component.css +32 -32
- package/src/app/modal-widget/modal-widget.component.html +341 -341
- package/src/app/modal-widget/modal-widget.component.spec.ts +25 -25
- package/src/app/modal-widget/modal-widget.component.ts +84 -84
- package/src/app/notifications.service.ts +392 -392
- package/src/app/object-keys.pipe.spec.ts +8 -8
- package/src/app/object-keys.pipe.ts +13 -13
- package/src/app/reset-config/reset-config.component.html +3 -3
- package/src/app/reset-config/reset-config.component.spec.ts +25 -25
- package/src/app/reset-config/reset-config.component.ts +31 -31
- package/src/app/root-display/root-display.component.html +4 -4
- package/src/app/root-display/root-display.component.spec.ts +25 -25
- package/src/app/root-display/root-display.component.ts +57 -57
- package/src/app/safe.pipe.ts +15 -15
- package/src/app/settings/settings.component.css +9 -9
- package/src/app/settings/settings.component.html +25 -25
- package/src/app/settings/settings.component.spec.ts +25 -25
- package/src/app/settings/settings.component.ts +22 -22
- package/src/app/settings-config/settings-config.component.css +38 -38
- package/src/app/settings-config/settings-config.component.spec.ts +25 -25
- package/src/app/settings-config/settings-config.component.ts +161 -161
- package/src/app/settings-datasets/settings-datasets.component.html +43 -43
- package/src/app/settings-datasets/settings-datasets.component.scss +39 -39
- package/src/app/settings-datasets/settings-datasets.component.spec.ts +25 -25
- package/src/app/settings-datasets/settings-datasets.component.ts +98 -98
- package/src/app/settings-datasets/settings-datasets.modal.html +54 -54
- package/src/app/settings-notifications/settings-notifications.component.html +65 -65
- package/src/app/settings-notifications/settings-notifications.component.spec.ts +25 -25
- package/src/app/settings-notifications/settings-notifications.component.ts +29 -29
- package/src/app/settings-signalk/settings-signalk.component.html +8 -8
- package/src/app/settings-signalk/settings-signalk.component.spec.ts +25 -25
- package/src/app/settings-signalk/settings-signalk.component.ts +174 -174
- package/src/app/settings-units/settings-units.component.css +4 -4
- package/src/app/settings-units/settings-units.component.html +19 -19
- package/src/app/settings-units/settings-units.component.spec.ts +25 -25
- package/src/app/settings-units/settings-units.component.ts +62 -62
- package/src/app/settings-zones/settings-zones.component.css +21 -21
- package/src/app/settings-zones/settings-zones.component.html +70 -70
- package/src/app/settings-zones/settings-zones.modal.html +38 -38
- package/src/app/signalk-connection.service.ts +344 -344
- package/src/app/signalk-delta.service.spec.ts +15 -15
- package/src/app/signalk-delta.service.ts +97 -97
- package/src/app/signalk-full.service.ts +99 -99
- package/src/app/signalk-interfaces.ts +129 -129
- package/src/app/signalk-requests.service.spec.ts +12 -12
- package/src/app/signalk-requests.service.ts +180 -180
- package/src/app/svg-autopilot/svg-autopilot.component.html +1036 -1036
- package/src/app/svg-autopilot/svg-autopilot.component.spec.ts +25 -25
- package/src/app/svg-autopilot/svg-autopilot.component.ts +174 -174
- package/src/app/svg-simple-linear-gauge/svg-simple-linear-gauge.component.html +119 -119
- package/src/app/svg-simple-linear-gauge/svg-simple-linear-gauge.component.spec.ts +25 -25
- package/src/app/svg-simple-linear-gauge/svg-simple-linear-gauge.component.ts +49 -49
- package/src/app/svg-wind/svg-wind.component.html +969 -969
- package/src/app/svg-wind/svg-wind.component.scss +76 -76
- package/src/app/svg-wind/svg-wind.component.spec.ts +25 -25
- package/src/app/svg-wind/svg-wind.component.ts +280 -280
- package/src/app/unit-window/unit-window.component.css +37 -37
- package/src/app/unit-window/unit-window.component.html +8 -8
- package/src/app/unit-window/unit-window.component.spec.ts +25 -25
- package/src/app/unit-window/unit-window.component.ts +134 -134
- package/src/app/unit-window/unit-window.modal.html +24 -24
- package/src/app/units.service.ts +300 -300
- package/src/app/widget-autopilot/widget-autopilot.component.html +78 -85
- package/src/app/widget-autopilot/widget-autopilot.component.scss +191 -191
- package/src/app/widget-autopilot/widget-autopilot.component.spec.ts +25 -25
- package/src/app/widget-autopilot/widget-autopilot.component.ts +774 -781
- package/src/app/widget-blank/widget-blank.component.scss +21 -22
- package/src/app/widget-blank/widget-blank.component.spec.ts +25 -25
- package/src/app/widget-blank/widget-blank.component.ts +17 -17
- package/src/app/widget-gauge/widget-gauge.component.css +25 -25
- package/src/app/widget-gauge/widget-gauge.component.html +29 -29
- package/src/app/widget-gauge/widget-gauge.component.spec.ts +25 -25
- package/src/app/widget-gauge/widget-gauge.component.ts +120 -120
- package/src/app/widget-gauge-ng-linear/widget-gauge-ng-linear.component.html +126 -126
- package/src/app/widget-gauge-ng-linear/widget-gauge-ng-linear.component.scss +94 -93
- package/src/app/widget-gauge-ng-linear/widget-gauge-ng-linear.component.spec.ts +25 -25
- package/src/app/widget-gauge-ng-linear/widget-gauge-ng-linear.component.ts +424 -424
- package/src/app/widget-gauge-ng-radial/widget-gauge-ng-radial.component.html +1 -1
- package/src/app/widget-gauge-ng-radial/widget-gauge-ng-radial.component.scss +69 -69
- package/src/app/widget-gauge-ng-radial/widget-gauge-ng-radial.component.spec.ts +25 -25
- package/src/app/widget-gauge-ng-radial/widget-gauge-ng-radial.component.ts +553 -553
- package/src/app/widget-historical/widget-historical.component.html +14 -14
- package/src/app/widget-historical/widget-historical.component.spec.ts +25 -25
- package/src/app/widget-historical/widget-historical.component.ts +306 -306
- package/src/app/widget-iframe/widget-iframe.component.css +11 -11
- package/src/app/widget-iframe/widget-iframe.component.html +21 -21
- package/src/app/widget-iframe/widget-iframe.component.spec.ts +25 -25
- package/src/app/widget-iframe/widget-iframe.component.ts +63 -63
- package/src/app/widget-list.service.ts +135 -135
- package/src/app/widget-manager.service.ts +141 -141
- package/src/app/widget-numeric/widget-numeric.component.html +1 -1
- package/src/app/widget-numeric/widget-numeric.component.scss +3 -3
- package/src/app/widget-numeric/widget-numeric.component.spec.ts +25 -25
- package/src/app/widget-simple-linear/widget-simple-linear.component.html +28 -28
- package/src/app/widget-simple-linear/widget-simple-linear.component.scss +64 -64
- package/src/app/widget-simple-linear/widget-simple-linear.component.spec.ts +25 -25
- package/src/app/widget-simple-linear/widget-simple-linear.component.ts +199 -199
- package/src/app/widget-state/widget-state.component.html +27 -27
- package/src/app/widget-state/widget-state.component.scss +68 -68
- package/src/app/widget-state/widget-state.component.spec.ts +25 -25
- package/src/app/widget-state/widget-state.component.ts +178 -178
- package/src/app/widget-switch/widget-switch.component.css +69 -69
- package/src/app/widget-switch/widget-switch.component.html +17 -17
- package/src/app/widget-switch/widget-switch.component.spec.ts +25 -25
- package/src/app/widget-switch/widget-switch.component.ts +134 -134
- package/src/app/widget-text-generic/widget-text-generic.component.html +9 -9
- package/src/app/widget-text-generic/widget-text-generic.component.spec.ts +25 -25
- package/src/app/widget-tutorial/widget-tutorial.component.html +34 -34
- package/src/app/widget-tutorial/widget-tutorial.component.spec.ts +25 -25
- package/src/app/widget-tutorial/widget-tutorial.component.ts +18 -18
- package/src/app/widget-unknown/widget-unknown.component.spec.ts +25 -25
- package/src/app/widget-wind/widget-wind.component.css +23 -23
- package/src/app/widget-wind/widget-wind.component.html +20 -20
- package/src/app/widget-wind/widget-wind.component.spec.ts +25 -25
- package/src/app/widget-wind/widget-wind.component.ts +369 -369
- package/src/assets/NoSleep.min.js +1 -1
- package/src/assets/fontawesome6/css/all.min.css +6 -0
- package/src/assets/fontawesome6/webfonts/fa-brands-400.ttf +0 -0
- package/src/assets/fontawesome6/webfonts/fa-brands-400.woff2 +0 -0
- package/src/assets/fontawesome6/webfonts/fa-regular-400.ttf +0 -0
- package/src/assets/fontawesome6/webfonts/fa-regular-400.woff2 +0 -0
- package/src/assets/fontawesome6/webfonts/fa-solid-900.ttf +0 -0
- package/src/assets/fontawesome6/webfonts/fa-solid-900.woff2 +0 -0
- package/src/assets/fontawesome6/webfonts/fa-v4compatibility.ttf +0 -0
- package/src/assets/fontawesome6/webfonts/fa-v4compatibility.woff2 +0 -0
- package/src/assets/icon-192x192.png +0 -0
- package/src/assets/icon-256x256.png +0 -0
- package/src/assets/icon-384x384.png +0 -0
- package/src/assets/icon-512x512.png +0 -0
- package/src/assets/steelseries-min.js +25 -25
- package/src/assets/steelseries-min.js.map +8 -8
- package/src/assets/steelseries.js +15834 -15834
- package/src/assets/svg-autopilot-inkscape-plain.svg +983 -983
- package/src/assets/svg-wind-inkscape.svg +1358 -1358
- package/src/assets/tween.js +381 -381
- package/src/index.html +20 -20
- package/src/main.ts +11 -11
- package/src/manifest.json +33 -0
- package/src/polyfills.ts +80 -76
- package/src/styles.scss +11 -11
- package/src/themes/darkBlueTheme.scss +117 -116
- package/src/themes/defaultTheme.scss +50 -49
- package/src/themes/highContrastTheme.scss +47 -46
- package/src/themes/modernTheme.scss +143 -142
- package/src/themes/nightMode.scss +185 -184
- package/src/themes/platypusTheme.scss +80 -79
- package/src/themes/signalkTheme.scss +112 -111
- package/src/tsconfig.app.json +15 -15
- package/src/tsconfig.spec.json +20 -20
- package/tsconfig.json +23 -23
- package/tslint.json +143 -143
- package/public/assets/font-awesome/HELP-US-OUT.txt +0 -7
- package/public/assets/font-awesome/css/font-awesome.css +0 -2337
- package/public/assets/font-awesome/css/font-awesome.min.css +0 -4
- package/public/assets/font-awesome/desktop.ini +0 -4
- package/public/assets/font-awesome/fonts/FontAwesome.otf +0 -0
- package/public/assets/font-awesome/fonts/fontawesome-webfont.eot +0 -0
- package/public/assets/font-awesome/fonts/fontawesome-webfont.svg +0 -2671
- package/public/assets/font-awesome/fonts/fontawesome-webfont.ttf +0 -0
- package/public/assets/font-awesome/fonts/fontawesome-webfont.woff +0 -0
- package/public/assets/font-awesome/fonts/fontawesome-webfont.woff2 +0 -0
- package/public/assets/font-awesome/less/animated.less +0 -34
- package/public/assets/font-awesome/less/bordered-pulled.less +0 -25
- package/public/assets/font-awesome/less/core.less +0 -12
- package/public/assets/font-awesome/less/fixed-width.less +0 -6
- package/public/assets/font-awesome/less/font-awesome.less +0 -18
- package/public/assets/font-awesome/less/icons.less +0 -789
- package/public/assets/font-awesome/less/larger.less +0 -13
- package/public/assets/font-awesome/less/list.less +0 -19
- package/public/assets/font-awesome/less/mixins.less +0 -60
- package/public/assets/font-awesome/less/path.less +0 -15
- package/public/assets/font-awesome/less/rotated-flipped.less +0 -20
- package/public/assets/font-awesome/less/screen-reader.less +0 -5
- package/public/assets/font-awesome/less/stacked.less +0 -20
- package/public/assets/font-awesome/less/variables.less +0 -800
- package/public/assets/font-awesome/scss/_animated.scss +0 -34
- package/public/assets/font-awesome/scss/_bordered-pulled.scss +0 -25
- package/public/assets/font-awesome/scss/_core.scss +0 -12
- package/public/assets/font-awesome/scss/_fixed-width.scss +0 -6
- package/public/assets/font-awesome/scss/_icons.scss +0 -789
- package/public/assets/font-awesome/scss/_larger.scss +0 -13
- package/public/assets/font-awesome/scss/_list.scss +0 -19
- package/public/assets/font-awesome/scss/_mixins.scss +0 -60
- package/public/assets/font-awesome/scss/_path.scss +0 -15
- package/public/assets/font-awesome/scss/_rotated-flipped.scss +0 -20
- package/public/assets/font-awesome/scss/_screen-reader.scss +0 -5
- package/public/assets/font-awesome/scss/_stacked.scss +0 -20
- package/public/assets/font-awesome/scss/_variables.scss +0 -800
- package/public/assets/font-awesome/scss/font-awesome.scss +0 -18
- package/public/main-es2018.ab0adc5af3ab3e70c849.js +0 -1
- package/public/main-es5.ab0adc5af3ab3e70c849.js +0 -1
- package/public/polyfills-es2018.713f95af1f028e444854.js +0 -1
- package/public/polyfills-es5.c78877945523541d2597.js +0 -1
- package/public/runtime-es2018.a4dadbc03350107420a4.js +0 -1
- package/public/runtime-es5.a4dadbc03350107420a4.js +0 -1
- package/public/styles.71bb0d04cad96b5efbe1.css +0 -19
- package/src/assets/font-awesome/HELP-US-OUT.txt +0 -7
- package/src/assets/font-awesome/css/font-awesome.css +0 -2337
- package/src/assets/font-awesome/css/font-awesome.min.css +0 -4
- package/src/assets/font-awesome/desktop.ini +0 -4
- package/src/assets/font-awesome/fonts/FontAwesome.otf +0 -0
- package/src/assets/font-awesome/fonts/fontawesome-webfont.eot +0 -0
- package/src/assets/font-awesome/fonts/fontawesome-webfont.svg +0 -2671
- package/src/assets/font-awesome/fonts/fontawesome-webfont.ttf +0 -0
- package/src/assets/font-awesome/fonts/fontawesome-webfont.woff +0 -0
- package/src/assets/font-awesome/fonts/fontawesome-webfont.woff2 +0 -0
- package/src/assets/font-awesome/less/animated.less +0 -34
- package/src/assets/font-awesome/less/bordered-pulled.less +0 -25
- package/src/assets/font-awesome/less/core.less +0 -12
- package/src/assets/font-awesome/less/fixed-width.less +0 -6
- package/src/assets/font-awesome/less/font-awesome.less +0 -18
- package/src/assets/font-awesome/less/icons.less +0 -789
- package/src/assets/font-awesome/less/larger.less +0 -13
- package/src/assets/font-awesome/less/list.less +0 -19
- package/src/assets/font-awesome/less/mixins.less +0 -60
- package/src/assets/font-awesome/less/path.less +0 -15
- package/src/assets/font-awesome/less/rotated-flipped.less +0 -20
- package/src/assets/font-awesome/less/screen-reader.less +0 -5
- package/src/assets/font-awesome/less/stacked.less +0 -20
- package/src/assets/font-awesome/less/variables.less +0 -800
- package/src/assets/font-awesome/scss/_animated.scss +0 -34
- package/src/assets/font-awesome/scss/_bordered-pulled.scss +0 -25
- package/src/assets/font-awesome/scss/_core.scss +0 -12
- package/src/assets/font-awesome/scss/_fixed-width.scss +0 -6
- package/src/assets/font-awesome/scss/_icons.scss +0 -789
- package/src/assets/font-awesome/scss/_larger.scss +0 -13
- package/src/assets/font-awesome/scss/_list.scss +0 -19
- package/src/assets/font-awesome/scss/_mixins.scss +0 -60
- package/src/assets/font-awesome/scss/_path.scss +0 -15
- package/src/assets/font-awesome/scss/_rotated-flipped.scss +0 -20
- package/src/assets/font-awesome/scss/_screen-reader.scss +0 -5
- package/src/assets/font-awesome/scss/_stacked.scss +0 -20
- package/src/assets/font-awesome/scss/_variables.scss +0 -800
- package/src/assets/font-awesome/scss/font-awesome.scss +0 -18
|
@@ -1,301 +1,301 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* The MIT License (MIT)
|
|
3
|
-
*
|
|
4
|
-
* Copyright (c) 2017 Vlad Martynenko <vladimir.martynenko.work@gmail.com>
|
|
5
|
-
*
|
|
6
|
-
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
7
|
-
* of this software and associated documentation files (the "Software"), to deal
|
|
8
|
-
* in the Software without restriction, including without limitation the rights
|
|
9
|
-
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
10
|
-
* copies of the Software, and to permit persons to whom the Software is
|
|
11
|
-
* furnished to do so, subject to the following conditions:
|
|
12
|
-
*
|
|
13
|
-
* The above copyright notice and this permission notice shall be included in
|
|
14
|
-
* all copies or substantial portions of the Software.
|
|
15
|
-
*
|
|
16
|
-
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
17
|
-
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
18
|
-
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
19
|
-
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
20
|
-
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
21
|
-
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
22
|
-
* SOFTWARE.
|
|
23
|
-
*/
|
|
24
|
-
|
|
25
|
-
import { ViewChild, Input, NgZone, ElementRef, OnInit, AfterViewInit, Directive } from '@angular/core';
|
|
26
|
-
import * as CanvasGauges from 'canvas-gauges';
|
|
27
|
-
import * as Rx from 'rx-dom-html';
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
// String utils
|
|
32
|
-
const toCamelCase = (str: string) => str.replace(/(\-\w)/g, (matches) => matches[1].toUpperCase());
|
|
33
|
-
|
|
34
|
-
const toKebabCase = (str: string) => str.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();
|
|
35
|
-
|
|
36
|
-
const attributeName2PropertyName = (attrName: string) => toCamelCase(attrName);
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* Base gauge component for the Gauges rendering
|
|
43
|
-
* T - Type of the Gauge to be rendered (Currently RadialGauge, LinearGauge from the original library)
|
|
44
|
-
* T2 - Type of config options used by the particular gauge (RadialGaugeOptions, LinearGaugeOptions)
|
|
45
|
-
*/
|
|
46
|
-
@Directive()
|
|
47
|
-
export abstract class BaseGauge<T extends CanvasGauges.BaseGauge, T2 extends CanvasGauges.GenericOptions>
|
|
48
|
-
implements OnInit, AfterViewInit {
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
* Canvas element on the template used by the library to draw gauge element
|
|
52
|
-
*/
|
|
53
|
-
@ViewChild('gauge', { static: true })
|
|
54
|
-
protected canvas: ElementRef;
|
|
55
|
-
|
|
56
|
-
/**
|
|
57
|
-
* A gauge instance responsible for rendering and updates on the canvas.
|
|
58
|
-
* Subclasses should initialize in their ngOnInit implementation.
|
|
59
|
-
*/
|
|
60
|
-
protected gauge: T;
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
/**
|
|
64
|
-
* Flag indicating that OnViewInit life-cycle has completed
|
|
65
|
-
*/
|
|
66
|
-
private isInited = false;
|
|
67
|
-
|
|
68
|
-
/**
|
|
69
|
-
* value property of gauge prior to component view initialization
|
|
70
|
-
*/
|
|
71
|
-
private preInitValue: number;
|
|
72
|
-
|
|
73
|
-
/**
|
|
74
|
-
* options property of gauge prior to component view initialization
|
|
75
|
-
*/
|
|
76
|
-
private preInitOptions: T2;
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
/**
|
|
80
|
-
* Listen for attribute changes, i.e., options properties that are stored
|
|
81
|
-
* as attributes on this ElementRef
|
|
82
|
-
*/
|
|
83
|
-
private domListener: MutationObserver;
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
/**
|
|
87
|
-
*
|
|
88
|
-
* @param el - reference to the element of the whole component, used to scrape options declared on the component itself
|
|
89
|
-
* @param zone - required to redraw gauge outside of Angular, due to animation lags caused by the ovewritten function of the ngZone
|
|
90
|
-
*/
|
|
91
|
-
constructor(private el: ElementRef, public zone: NgZone) {
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
/**
|
|
96
|
-
* Subclasses should instantiate the CanvasGauge object in the child component
|
|
97
|
-
*/
|
|
98
|
-
abstract ngOnInit(): void;
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
/**
|
|
102
|
-
* Returns gauges properties as an options object.
|
|
103
|
-
* Option properties consist of the attribute-based properties and those
|
|
104
|
-
* explicitly set.
|
|
105
|
-
* @returns <T2>
|
|
106
|
-
*/
|
|
107
|
-
public get options(): T2 {
|
|
108
|
-
|
|
109
|
-
const options = {} as T2;
|
|
110
|
-
options.renderTo = this.canvas.nativeElement;
|
|
111
|
-
|
|
112
|
-
// Map attribute-based options onto options.
|
|
113
|
-
// Requries converting kebab style attribute names to camelCase property names
|
|
114
|
-
for (const attr of this.el.nativeElement.attributes) {
|
|
115
|
-
const prop = attributeName2PropertyName(attr.name);
|
|
116
|
-
options[prop] = CanvasGauges.DomObserver.parse(attr.value);
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
// merge preOptons with attribute-based properties
|
|
120
|
-
// tslint:disable-next-line:forin
|
|
121
|
-
for (const prop in this.preInitOptions) {
|
|
122
|
-
options[prop] = this.preInitOptions[prop];
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
// clear the preInitOptions as they have already been merged
|
|
126
|
-
// with the attribute-based properties
|
|
127
|
-
if (this.isInited) {
|
|
128
|
-
this.preInitOptions = null;
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
return options;
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
/**
|
|
136
|
-
* Assign gauge options at anytime in the lifecycle.
|
|
137
|
-
* @param newOptions - assign the style and size properties
|
|
138
|
-
*/
|
|
139
|
-
@Input()
|
|
140
|
-
public set options(newOptions: T2) {
|
|
141
|
-
|
|
142
|
-
// cache newOptions as preInitOptions until gauge is ready
|
|
143
|
-
if (!this.isInited) {
|
|
144
|
-
this.preInitOptions = newOptions;
|
|
145
|
-
return;
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
this.update(newOptions);
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
/**
|
|
153
|
-
* Assign the value of the gauge visual indicator such as a needle or pointer
|
|
154
|
-
* @param newValue the guage new value
|
|
155
|
-
*/
|
|
156
|
-
@Input()
|
|
157
|
-
public set value(newValue: number) {
|
|
158
|
-
|
|
159
|
-
// case new gauge value as preInitValue until the gauge is ready
|
|
160
|
-
if (!this.isInited) {
|
|
161
|
-
this.preInitValue = newValue;
|
|
162
|
-
return;
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
this.zone.runOutsideAngular(() => {
|
|
166
|
-
this.gauge.value = newValue;
|
|
167
|
-
});
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
/**
|
|
172
|
-
* Update the gauge options. Do not use until after OnViewInit() before using.
|
|
173
|
-
*
|
|
174
|
-
* Special implementation note - options.properties are maintained as
|
|
175
|
-
* attribute name->value on this component's elementRef. Thus this method
|
|
176
|
-
* maps each newOptions property onto the property's corresponding attribute.
|
|
177
|
-
* The attribute update triggers a DOM mutation event which "this" listens for.
|
|
178
|
-
* See #listenForDOMEvents()
|
|
179
|
-
*
|
|
180
|
-
* @param newOptions - the options to update the gauge
|
|
181
|
-
*/
|
|
182
|
-
public update(newOptions: T2 | {}) {
|
|
183
|
-
|
|
184
|
-
// map all options onto this element's attributes
|
|
185
|
-
// Then attribute changes will be detected and pushed to the gauge.update()
|
|
186
|
-
if (!newOptions) { return; }
|
|
187
|
-
|
|
188
|
-
// tslint:disable-next-line:forin
|
|
189
|
-
for (const prop in newOptions) {
|
|
190
|
-
const val = newOptions[prop].toString();
|
|
191
|
-
|
|
192
|
-
if (prop === 'value') {
|
|
193
|
-
// short circuit the value property update by calling
|
|
194
|
-
// the gauge.value api directly for efficient animated update
|
|
195
|
-
this.value = CanvasGauges.DomObserver.parse(val);
|
|
196
|
-
} else {
|
|
197
|
-
const attrName = toKebabCase(prop);
|
|
198
|
-
this.el.nativeElement.setAttribute(attrName, val);
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
/**
|
|
205
|
-
* Perform gauge initialization.
|
|
206
|
-
* Subclasses that override this method must this super version
|
|
207
|
-
* for proper operation.
|
|
208
|
-
*/
|
|
209
|
-
public ngAfterViewInit() {
|
|
210
|
-
|
|
211
|
-
// initial update of gauge properties
|
|
212
|
-
this.initGauge();
|
|
213
|
-
|
|
214
|
-
this.listenForDOMEvents();
|
|
215
|
-
|
|
216
|
-
this.isInited = true;
|
|
217
|
-
|
|
218
|
-
if (this.preInitValue) {
|
|
219
|
-
this.value = this.preInitValue;
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
/**
|
|
225
|
-
* Listen for attribute-change events that are created when updating
|
|
226
|
-
* the options of this gauge.
|
|
227
|
-
*/
|
|
228
|
-
protected listenForDOMEvents() {
|
|
229
|
-
// Listen to gauge element for attribute changes
|
|
230
|
-
// Convert all changed attribtues into a GenericOptions or subclass
|
|
231
|
-
// Update the gauge with the new options.
|
|
232
|
-
this.domListener =
|
|
233
|
-
Rx.DOM.fromMutationObserver(this.el.nativeElement, { attributes: true }).
|
|
234
|
-
subscribe(changes => {
|
|
235
|
-
const newOptions = {} as T2;
|
|
236
|
-
changes.forEach(change => {
|
|
237
|
-
if ('attributes' === change.type) {
|
|
238
|
-
// console.log('DOM, change', change.attributeName);
|
|
239
|
-
newOptions[attributeName2PropertyName(change.attributeName)] =
|
|
240
|
-
CanvasGauges.DomObserver.parse(
|
|
241
|
-
this.el.nativeElement.getAttribute(change.attributeName));
|
|
242
|
-
}
|
|
243
|
-
});
|
|
244
|
-
|
|
245
|
-
this.basicUpdate(newOptions);
|
|
246
|
-
});
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
/**
|
|
251
|
-
* Discontinue listening for attribute change events.
|
|
252
|
-
*/
|
|
253
|
-
protected stopListeningForDOMEvents() {
|
|
254
|
-
if (this.domListener) {
|
|
255
|
-
this.domListener.disconnect();
|
|
256
|
-
this.domListener = null;
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
/**
|
|
262
|
-
* Initalize the gauge with all options defined by attributes and
|
|
263
|
-
* parent component options.
|
|
264
|
-
*/
|
|
265
|
-
protected initGauge() {
|
|
266
|
-
const options = this.options;
|
|
267
|
-
|
|
268
|
-
// init options.renderTo if needed
|
|
269
|
-
if (!options.hasOwnProperty('renderTo') || !options.renderTo) {
|
|
270
|
-
options.renderTo = this.canvas.nativeElement;
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
this.basicUpdate(options);
|
|
274
|
-
}
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
/**
|
|
278
|
-
* Performs the gauge update using the current options
|
|
279
|
-
* @param options The options for the guage
|
|
280
|
-
*/
|
|
281
|
-
protected basicUpdate(options: T2) {
|
|
282
|
-
|
|
283
|
-
// treat the value property special and update it through the
|
|
284
|
-
// value getter.
|
|
285
|
-
if (typeof options.value === 'number') {
|
|
286
|
-
|
|
287
|
-
// use gauge api directly for most efficient update method
|
|
288
|
-
this.value = options.value;
|
|
289
|
-
|
|
290
|
-
// filter value property from options to avoid redundant
|
|
291
|
-
// processing by gauge
|
|
292
|
-
delete options.value;
|
|
293
|
-
}
|
|
294
|
-
|
|
295
|
-
// do nothing if no option properties to update
|
|
296
|
-
if (Object.keys(options).length) {
|
|
297
|
-
this.gauge.update(options);
|
|
298
|
-
}
|
|
299
|
-
}
|
|
300
|
-
|
|
1
|
+
/*!
|
|
2
|
+
* The MIT License (MIT)
|
|
3
|
+
*
|
|
4
|
+
* Copyright (c) 2017 Vlad Martynenko <vladimir.martynenko.work@gmail.com>
|
|
5
|
+
*
|
|
6
|
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
7
|
+
* of this software and associated documentation files (the "Software"), to deal
|
|
8
|
+
* in the Software without restriction, including without limitation the rights
|
|
9
|
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
10
|
+
* copies of the Software, and to permit persons to whom the Software is
|
|
11
|
+
* furnished to do so, subject to the following conditions:
|
|
12
|
+
*
|
|
13
|
+
* The above copyright notice and this permission notice shall be included in
|
|
14
|
+
* all copies or substantial portions of the Software.
|
|
15
|
+
*
|
|
16
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
17
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
18
|
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
19
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
20
|
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
21
|
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
22
|
+
* SOFTWARE.
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
import { ViewChild, Input, NgZone, ElementRef, OnInit, AfterViewInit, Directive } from '@angular/core';
|
|
26
|
+
import * as CanvasGauges from 'canvas-gauges';
|
|
27
|
+
import * as Rx from 'rx-dom-html';
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
// String utils
|
|
32
|
+
const toCamelCase = (str: string) => str.replace(/(\-\w)/g, (matches) => matches[1].toUpperCase());
|
|
33
|
+
|
|
34
|
+
const toKebabCase = (str: string) => str.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();
|
|
35
|
+
|
|
36
|
+
const attributeName2PropertyName = (attrName: string) => toCamelCase(attrName);
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Base gauge component for the Gauges rendering
|
|
43
|
+
* T - Type of the Gauge to be rendered (Currently RadialGauge, LinearGauge from the original library)
|
|
44
|
+
* T2 - Type of config options used by the particular gauge (RadialGaugeOptions, LinearGaugeOptions)
|
|
45
|
+
*/
|
|
46
|
+
@Directive()
|
|
47
|
+
export abstract class BaseGauge<T extends CanvasGauges.BaseGauge, T2 extends CanvasGauges.GenericOptions>
|
|
48
|
+
implements OnInit, AfterViewInit {
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Canvas element on the template used by the library to draw gauge element
|
|
52
|
+
*/
|
|
53
|
+
@ViewChild('gauge', { static: true })
|
|
54
|
+
protected canvas: ElementRef;
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* A gauge instance responsible for rendering and updates on the canvas.
|
|
58
|
+
* Subclasses should initialize in their ngOnInit implementation.
|
|
59
|
+
*/
|
|
60
|
+
protected gauge: T;
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Flag indicating that OnViewInit life-cycle has completed
|
|
65
|
+
*/
|
|
66
|
+
private isInited = false;
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* value property of gauge prior to component view initialization
|
|
70
|
+
*/
|
|
71
|
+
private preInitValue: number;
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* options property of gauge prior to component view initialization
|
|
75
|
+
*/
|
|
76
|
+
private preInitOptions: T2;
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Listen for attribute changes, i.e., options properties that are stored
|
|
81
|
+
* as attributes on this ElementRef
|
|
82
|
+
*/
|
|
83
|
+
private domListener: MutationObserver;
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
*
|
|
88
|
+
* @param el - reference to the element of the whole component, used to scrape options declared on the component itself
|
|
89
|
+
* @param zone - required to redraw gauge outside of Angular, due to animation lags caused by the ovewritten function of the ngZone
|
|
90
|
+
*/
|
|
91
|
+
constructor(private el: ElementRef, public zone: NgZone) {
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Subclasses should instantiate the CanvasGauge object in the child component
|
|
97
|
+
*/
|
|
98
|
+
abstract ngOnInit(): void;
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Returns gauges properties as an options object.
|
|
103
|
+
* Option properties consist of the attribute-based properties and those
|
|
104
|
+
* explicitly set.
|
|
105
|
+
* @returns <T2>
|
|
106
|
+
*/
|
|
107
|
+
public get options(): T2 {
|
|
108
|
+
|
|
109
|
+
const options = {} as T2;
|
|
110
|
+
options.renderTo = this.canvas.nativeElement;
|
|
111
|
+
|
|
112
|
+
// Map attribute-based options onto options.
|
|
113
|
+
// Requries converting kebab style attribute names to camelCase property names
|
|
114
|
+
for (const attr of this.el.nativeElement.attributes) {
|
|
115
|
+
const prop = attributeName2PropertyName(attr.name);
|
|
116
|
+
options[prop] = CanvasGauges.DomObserver.parse(attr.value);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// merge preOptons with attribute-based properties
|
|
120
|
+
// tslint:disable-next-line:forin
|
|
121
|
+
for (const prop in this.preInitOptions) {
|
|
122
|
+
options[prop] = this.preInitOptions[prop];
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
// clear the preInitOptions as they have already been merged
|
|
126
|
+
// with the attribute-based properties
|
|
127
|
+
if (this.isInited) {
|
|
128
|
+
this.preInitOptions = null;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
return options;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Assign gauge options at anytime in the lifecycle.
|
|
137
|
+
* @param newOptions - assign the style and size properties
|
|
138
|
+
*/
|
|
139
|
+
@Input()
|
|
140
|
+
public set options(newOptions: T2) {
|
|
141
|
+
|
|
142
|
+
// cache newOptions as preInitOptions until gauge is ready
|
|
143
|
+
if (!this.isInited) {
|
|
144
|
+
this.preInitOptions = newOptions;
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
this.update(newOptions);
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* Assign the value of the gauge visual indicator such as a needle or pointer
|
|
154
|
+
* @param newValue the guage new value
|
|
155
|
+
*/
|
|
156
|
+
@Input()
|
|
157
|
+
public set value(newValue: number) {
|
|
158
|
+
|
|
159
|
+
// case new gauge value as preInitValue until the gauge is ready
|
|
160
|
+
if (!this.isInited) {
|
|
161
|
+
this.preInitValue = newValue;
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
this.zone.runOutsideAngular(() => {
|
|
166
|
+
this.gauge.value = newValue;
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* Update the gauge options. Do not use until after OnViewInit() before using.
|
|
173
|
+
*
|
|
174
|
+
* Special implementation note - options.properties are maintained as
|
|
175
|
+
* attribute name->value on this component's elementRef. Thus this method
|
|
176
|
+
* maps each newOptions property onto the property's corresponding attribute.
|
|
177
|
+
* The attribute update triggers a DOM mutation event which "this" listens for.
|
|
178
|
+
* See #listenForDOMEvents()
|
|
179
|
+
*
|
|
180
|
+
* @param newOptions - the options to update the gauge
|
|
181
|
+
*/
|
|
182
|
+
public update(newOptions: T2 | {}) {
|
|
183
|
+
|
|
184
|
+
// map all options onto this element's attributes
|
|
185
|
+
// Then attribute changes will be detected and pushed to the gauge.update()
|
|
186
|
+
if (!newOptions) { return; }
|
|
187
|
+
|
|
188
|
+
// tslint:disable-next-line:forin
|
|
189
|
+
for (const prop in newOptions) {
|
|
190
|
+
const val = newOptions[prop].toString();
|
|
191
|
+
|
|
192
|
+
if (prop === 'value') {
|
|
193
|
+
// short circuit the value property update by calling
|
|
194
|
+
// the gauge.value api directly for efficient animated update
|
|
195
|
+
this.value = CanvasGauges.DomObserver.parse(val);
|
|
196
|
+
} else {
|
|
197
|
+
const attrName = toKebabCase(prop);
|
|
198
|
+
this.el.nativeElement.setAttribute(attrName, val);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
/**
|
|
205
|
+
* Perform gauge initialization.
|
|
206
|
+
* Subclasses that override this method must this super version
|
|
207
|
+
* for proper operation.
|
|
208
|
+
*/
|
|
209
|
+
public ngAfterViewInit() {
|
|
210
|
+
|
|
211
|
+
// initial update of gauge properties
|
|
212
|
+
this.initGauge();
|
|
213
|
+
|
|
214
|
+
this.listenForDOMEvents();
|
|
215
|
+
|
|
216
|
+
this.isInited = true;
|
|
217
|
+
|
|
218
|
+
if (this.preInitValue) {
|
|
219
|
+
this.value = this.preInitValue;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
|
|
224
|
+
/**
|
|
225
|
+
* Listen for attribute-change events that are created when updating
|
|
226
|
+
* the options of this gauge.
|
|
227
|
+
*/
|
|
228
|
+
protected listenForDOMEvents() {
|
|
229
|
+
// Listen to gauge element for attribute changes
|
|
230
|
+
// Convert all changed attribtues into a GenericOptions or subclass
|
|
231
|
+
// Update the gauge with the new options.
|
|
232
|
+
this.domListener =
|
|
233
|
+
Rx.DOM.fromMutationObserver(this.el.nativeElement, { attributes: true }).
|
|
234
|
+
subscribe(changes => {
|
|
235
|
+
const newOptions = {} as T2;
|
|
236
|
+
changes.forEach(change => {
|
|
237
|
+
if ('attributes' === change.type) {
|
|
238
|
+
// console.log('DOM, change', change.attributeName);
|
|
239
|
+
newOptions[attributeName2PropertyName(change.attributeName)] =
|
|
240
|
+
CanvasGauges.DomObserver.parse(
|
|
241
|
+
this.el.nativeElement.getAttribute(change.attributeName));
|
|
242
|
+
}
|
|
243
|
+
});
|
|
244
|
+
|
|
245
|
+
this.basicUpdate(newOptions);
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
|
|
250
|
+
/**
|
|
251
|
+
* Discontinue listening for attribute change events.
|
|
252
|
+
*/
|
|
253
|
+
protected stopListeningForDOMEvents() {
|
|
254
|
+
if (this.domListener) {
|
|
255
|
+
this.domListener.disconnect();
|
|
256
|
+
this.domListener = null;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
|
|
261
|
+
/**
|
|
262
|
+
* Initalize the gauge with all options defined by attributes and
|
|
263
|
+
* parent component options.
|
|
264
|
+
*/
|
|
265
|
+
protected initGauge() {
|
|
266
|
+
const options = this.options;
|
|
267
|
+
|
|
268
|
+
// init options.renderTo if needed
|
|
269
|
+
if (!options.hasOwnProperty('renderTo') || !options.renderTo) {
|
|
270
|
+
options.renderTo = this.canvas.nativeElement;
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
this.basicUpdate(options);
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
|
|
277
|
+
/**
|
|
278
|
+
* Performs the gauge update using the current options
|
|
279
|
+
* @param options The options for the guage
|
|
280
|
+
*/
|
|
281
|
+
protected basicUpdate(options: T2) {
|
|
282
|
+
|
|
283
|
+
// treat the value property special and update it through the
|
|
284
|
+
// value getter.
|
|
285
|
+
if (typeof options.value === 'number') {
|
|
286
|
+
|
|
287
|
+
// use gauge api directly for most efficient update method
|
|
288
|
+
this.value = options.value;
|
|
289
|
+
|
|
290
|
+
// filter value property from options to avoid redundant
|
|
291
|
+
// processing by gauge
|
|
292
|
+
delete options.value;
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
// do nothing if no option properties to update
|
|
296
|
+
if (Object.keys(options).length) {
|
|
297
|
+
this.gauge.update(options);
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
|
|
301
301
|
}
|