@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.
Files changed (314) hide show
  1. package/.angulardoc.json +3 -3
  2. package/CHANGELOG.md +145 -135
  3. package/CONTRIBUTORS.md +16 -16
  4. package/README.md +102 -102
  5. package/angular.json +162 -153
  6. package/karma.conf.js +31 -31
  7. package/package.json +87 -84
  8. package/public/3rdpartylicenses.txt +301 -21
  9. package/public/assets/NoSleep.min.js +1 -1
  10. package/public/assets/fontawesome6/css/all.min.css +6 -0
  11. package/public/assets/fontawesome6/webfonts/fa-brands-400.ttf +0 -0
  12. package/public/assets/fontawesome6/webfonts/fa-brands-400.woff2 +0 -0
  13. package/public/assets/fontawesome6/webfonts/fa-regular-400.ttf +0 -0
  14. package/public/assets/fontawesome6/webfonts/fa-regular-400.woff2 +0 -0
  15. package/public/assets/fontawesome6/webfonts/fa-solid-900.ttf +0 -0
  16. package/public/assets/fontawesome6/webfonts/fa-solid-900.woff2 +0 -0
  17. package/public/assets/fontawesome6/webfonts/fa-v4compatibility.ttf +0 -0
  18. package/public/assets/fontawesome6/webfonts/fa-v4compatibility.woff2 +0 -0
  19. package/public/assets/icon-192x192.png +0 -0
  20. package/public/assets/icon-256x256.png +0 -0
  21. package/public/assets/icon-384x384.png +0 -0
  22. package/public/assets/icon-512x512.png +0 -0
  23. package/public/assets/steelseries-min.js +25 -25
  24. package/public/assets/steelseries-min.js.map +8 -8
  25. package/public/assets/steelseries.js +15834 -15834
  26. package/public/assets/svg-autopilot-inkscape-plain.svg +983 -983
  27. package/public/assets/svg-wind-inkscape.svg +1358 -1358
  28. package/public/assets/tween.js +381 -381
  29. package/public/index.html +19 -20
  30. package/public/main-es2018.98175eb4c61ccaf7eb17.js +1 -0
  31. package/public/main-es5.98175eb4c61ccaf7eb17.js +1 -0
  32. package/public/manifest.json +33 -0
  33. package/public/polyfills-es2018.3a61665863c173cd6ba3.js +1 -0
  34. package/public/polyfills-es5.44827ae4ff4e41de51fb.js +1 -0
  35. package/public/runtime-es2018.baedb88c6d2abacae2b8.js +1 -0
  36. package/public/runtime-es5.baedb88c6d2abacae2b8.js +1 -0
  37. package/public/styles.b92ae2c466c89712209d.css +5 -0
  38. package/src/app/alarm-menu/alarm-menu.component.html +55 -55
  39. package/src/app/alarm-menu/alarm-menu.component.scss +52 -53
  40. package/src/app/alarm-menu/alarm-menu.component.spec.ts +25 -25
  41. package/src/app/alarm-menu/alarm-menu.component.ts +186 -186
  42. package/src/app/app-help/app-help.component.css +4 -4
  43. package/src/app/app-help/app-help.component.html +135 -135
  44. package/src/app/app-help/app-help.component.ts +45 -45
  45. package/src/app/app.component.css +39 -39
  46. package/src/app/app.component.html +93 -93
  47. package/src/app/app.component.scss +79 -79
  48. package/src/app/app.component.spec.ts +32 -32
  49. package/src/app/app.component.ts +191 -192
  50. package/src/app/app.module.ts +200 -200
  51. package/src/app/config.blank.const.ts +51 -51
  52. package/src/app/config.blank.notification.const.ts +19 -19
  53. package/src/app/config.blank.units.const.ts +23 -23
  54. package/src/app/config.demo.const.ts +383 -383
  55. package/src/app/data-browser/data-browser.component.css +29 -29
  56. package/src/app/data-browser/data-browser.component.html +44 -44
  57. package/src/app/data-browser/data-browser.component.spec.ts +25 -25
  58. package/src/app/data-browser/data-browser.component.ts +91 -91
  59. package/src/app/data-browser-row/data-browser-row-unit-modal.html +17 -17
  60. package/src/app/data-browser-row/data-browser-row.component.css +9 -9
  61. package/src/app/data-browser-row/data-browser-row.component.html +4 -4
  62. package/src/app/data-browser-row/data-browser-row.component.ts +78 -78
  63. package/src/app/data-set.service.ts +273 -273
  64. package/src/app/dynamic-widget.directive.ts +11 -11
  65. package/src/app/gauge-steel/gauge-steel.component.css +4 -4
  66. package/src/app/gauge-steel/gauge-steel.component.html +4 -4
  67. package/src/app/gauge-steel/gauge-steel.component.spec.ts +25 -25
  68. package/src/app/gauge-steel/gauge-steel.component.ts +282 -282
  69. package/src/app/gauges-module/base-gauge.ts +300 -300
  70. package/src/app/gauges-module/linear-gauge.ts +49 -49
  71. package/src/app/gauges-module/radial-gauge.ts +47 -47
  72. package/src/app/layout-split/layout-split.component.html +30 -30
  73. package/src/app/layout-split/layout-split.component.scss +33 -33
  74. package/src/app/layout-split/layout-split.component.spec.ts +25 -25
  75. package/src/app/layout-split/layout-split.component.ts +59 -59
  76. package/src/app/layout-splits.service.ts +284 -284
  77. package/src/app/modal-path-selector/modal-path-selector.component.html +62 -62
  78. package/src/app/modal-path-selector/modal-path-selector.component.scss +39 -39
  79. package/src/app/modal-path-selector/modal-path-selector.component.spec.ts +25 -25
  80. package/src/app/modal-path-selector/modal-path-selector.component.ts +132 -132
  81. package/src/app/modal-widget/modal-widget.component.css +32 -32
  82. package/src/app/modal-widget/modal-widget.component.html +341 -341
  83. package/src/app/modal-widget/modal-widget.component.spec.ts +25 -25
  84. package/src/app/modal-widget/modal-widget.component.ts +84 -84
  85. package/src/app/notifications.service.ts +392 -392
  86. package/src/app/object-keys.pipe.spec.ts +8 -8
  87. package/src/app/object-keys.pipe.ts +13 -13
  88. package/src/app/reset-config/reset-config.component.html +3 -3
  89. package/src/app/reset-config/reset-config.component.spec.ts +25 -25
  90. package/src/app/reset-config/reset-config.component.ts +31 -31
  91. package/src/app/root-display/root-display.component.html +4 -4
  92. package/src/app/root-display/root-display.component.spec.ts +25 -25
  93. package/src/app/root-display/root-display.component.ts +57 -57
  94. package/src/app/safe.pipe.ts +15 -15
  95. package/src/app/settings/settings.component.css +9 -9
  96. package/src/app/settings/settings.component.html +25 -25
  97. package/src/app/settings/settings.component.spec.ts +25 -25
  98. package/src/app/settings/settings.component.ts +22 -22
  99. package/src/app/settings-config/settings-config.component.css +38 -38
  100. package/src/app/settings-config/settings-config.component.spec.ts +25 -25
  101. package/src/app/settings-config/settings-config.component.ts +161 -161
  102. package/src/app/settings-datasets/settings-datasets.component.html +43 -43
  103. package/src/app/settings-datasets/settings-datasets.component.scss +39 -39
  104. package/src/app/settings-datasets/settings-datasets.component.spec.ts +25 -25
  105. package/src/app/settings-datasets/settings-datasets.component.ts +98 -98
  106. package/src/app/settings-datasets/settings-datasets.modal.html +54 -54
  107. package/src/app/settings-notifications/settings-notifications.component.html +65 -65
  108. package/src/app/settings-notifications/settings-notifications.component.spec.ts +25 -25
  109. package/src/app/settings-notifications/settings-notifications.component.ts +29 -29
  110. package/src/app/settings-signalk/settings-signalk.component.html +8 -8
  111. package/src/app/settings-signalk/settings-signalk.component.spec.ts +25 -25
  112. package/src/app/settings-signalk/settings-signalk.component.ts +174 -174
  113. package/src/app/settings-units/settings-units.component.css +4 -4
  114. package/src/app/settings-units/settings-units.component.html +19 -19
  115. package/src/app/settings-units/settings-units.component.spec.ts +25 -25
  116. package/src/app/settings-units/settings-units.component.ts +62 -62
  117. package/src/app/settings-zones/settings-zones.component.css +21 -21
  118. package/src/app/settings-zones/settings-zones.component.html +70 -70
  119. package/src/app/settings-zones/settings-zones.modal.html +38 -38
  120. package/src/app/signalk-connection.service.ts +344 -344
  121. package/src/app/signalk-delta.service.spec.ts +15 -15
  122. package/src/app/signalk-delta.service.ts +97 -97
  123. package/src/app/signalk-full.service.ts +99 -99
  124. package/src/app/signalk-interfaces.ts +129 -129
  125. package/src/app/signalk-requests.service.spec.ts +12 -12
  126. package/src/app/signalk-requests.service.ts +180 -180
  127. package/src/app/svg-autopilot/svg-autopilot.component.html +1036 -1036
  128. package/src/app/svg-autopilot/svg-autopilot.component.spec.ts +25 -25
  129. package/src/app/svg-autopilot/svg-autopilot.component.ts +174 -174
  130. package/src/app/svg-simple-linear-gauge/svg-simple-linear-gauge.component.html +119 -119
  131. package/src/app/svg-simple-linear-gauge/svg-simple-linear-gauge.component.spec.ts +25 -25
  132. package/src/app/svg-simple-linear-gauge/svg-simple-linear-gauge.component.ts +49 -49
  133. package/src/app/svg-wind/svg-wind.component.html +969 -969
  134. package/src/app/svg-wind/svg-wind.component.scss +76 -76
  135. package/src/app/svg-wind/svg-wind.component.spec.ts +25 -25
  136. package/src/app/svg-wind/svg-wind.component.ts +280 -280
  137. package/src/app/unit-window/unit-window.component.css +37 -37
  138. package/src/app/unit-window/unit-window.component.html +8 -8
  139. package/src/app/unit-window/unit-window.component.spec.ts +25 -25
  140. package/src/app/unit-window/unit-window.component.ts +134 -134
  141. package/src/app/unit-window/unit-window.modal.html +24 -24
  142. package/src/app/units.service.ts +300 -300
  143. package/src/app/widget-autopilot/widget-autopilot.component.html +78 -85
  144. package/src/app/widget-autopilot/widget-autopilot.component.scss +191 -191
  145. package/src/app/widget-autopilot/widget-autopilot.component.spec.ts +25 -25
  146. package/src/app/widget-autopilot/widget-autopilot.component.ts +774 -781
  147. package/src/app/widget-blank/widget-blank.component.scss +21 -22
  148. package/src/app/widget-blank/widget-blank.component.spec.ts +25 -25
  149. package/src/app/widget-blank/widget-blank.component.ts +17 -17
  150. package/src/app/widget-gauge/widget-gauge.component.css +25 -25
  151. package/src/app/widget-gauge/widget-gauge.component.html +29 -29
  152. package/src/app/widget-gauge/widget-gauge.component.spec.ts +25 -25
  153. package/src/app/widget-gauge/widget-gauge.component.ts +120 -120
  154. package/src/app/widget-gauge-ng-linear/widget-gauge-ng-linear.component.html +126 -126
  155. package/src/app/widget-gauge-ng-linear/widget-gauge-ng-linear.component.scss +94 -93
  156. package/src/app/widget-gauge-ng-linear/widget-gauge-ng-linear.component.spec.ts +25 -25
  157. package/src/app/widget-gauge-ng-linear/widget-gauge-ng-linear.component.ts +424 -424
  158. package/src/app/widget-gauge-ng-radial/widget-gauge-ng-radial.component.html +1 -1
  159. package/src/app/widget-gauge-ng-radial/widget-gauge-ng-radial.component.scss +69 -69
  160. package/src/app/widget-gauge-ng-radial/widget-gauge-ng-radial.component.spec.ts +25 -25
  161. package/src/app/widget-gauge-ng-radial/widget-gauge-ng-radial.component.ts +553 -553
  162. package/src/app/widget-historical/widget-historical.component.html +14 -14
  163. package/src/app/widget-historical/widget-historical.component.spec.ts +25 -25
  164. package/src/app/widget-historical/widget-historical.component.ts +306 -306
  165. package/src/app/widget-iframe/widget-iframe.component.css +11 -11
  166. package/src/app/widget-iframe/widget-iframe.component.html +21 -21
  167. package/src/app/widget-iframe/widget-iframe.component.spec.ts +25 -25
  168. package/src/app/widget-iframe/widget-iframe.component.ts +63 -63
  169. package/src/app/widget-list.service.ts +135 -135
  170. package/src/app/widget-manager.service.ts +141 -141
  171. package/src/app/widget-numeric/widget-numeric.component.html +1 -1
  172. package/src/app/widget-numeric/widget-numeric.component.scss +3 -3
  173. package/src/app/widget-numeric/widget-numeric.component.spec.ts +25 -25
  174. package/src/app/widget-simple-linear/widget-simple-linear.component.html +28 -28
  175. package/src/app/widget-simple-linear/widget-simple-linear.component.scss +64 -64
  176. package/src/app/widget-simple-linear/widget-simple-linear.component.spec.ts +25 -25
  177. package/src/app/widget-simple-linear/widget-simple-linear.component.ts +199 -199
  178. package/src/app/widget-state/widget-state.component.html +27 -27
  179. package/src/app/widget-state/widget-state.component.scss +68 -68
  180. package/src/app/widget-state/widget-state.component.spec.ts +25 -25
  181. package/src/app/widget-state/widget-state.component.ts +178 -178
  182. package/src/app/widget-switch/widget-switch.component.css +69 -69
  183. package/src/app/widget-switch/widget-switch.component.html +17 -17
  184. package/src/app/widget-switch/widget-switch.component.spec.ts +25 -25
  185. package/src/app/widget-switch/widget-switch.component.ts +134 -134
  186. package/src/app/widget-text-generic/widget-text-generic.component.html +9 -9
  187. package/src/app/widget-text-generic/widget-text-generic.component.spec.ts +25 -25
  188. package/src/app/widget-tutorial/widget-tutorial.component.html +34 -34
  189. package/src/app/widget-tutorial/widget-tutorial.component.spec.ts +25 -25
  190. package/src/app/widget-tutorial/widget-tutorial.component.ts +18 -18
  191. package/src/app/widget-unknown/widget-unknown.component.spec.ts +25 -25
  192. package/src/app/widget-wind/widget-wind.component.css +23 -23
  193. package/src/app/widget-wind/widget-wind.component.html +20 -20
  194. package/src/app/widget-wind/widget-wind.component.spec.ts +25 -25
  195. package/src/app/widget-wind/widget-wind.component.ts +369 -369
  196. package/src/assets/NoSleep.min.js +1 -1
  197. package/src/assets/fontawesome6/css/all.min.css +6 -0
  198. package/src/assets/fontawesome6/webfonts/fa-brands-400.ttf +0 -0
  199. package/src/assets/fontawesome6/webfonts/fa-brands-400.woff2 +0 -0
  200. package/src/assets/fontawesome6/webfonts/fa-regular-400.ttf +0 -0
  201. package/src/assets/fontawesome6/webfonts/fa-regular-400.woff2 +0 -0
  202. package/src/assets/fontawesome6/webfonts/fa-solid-900.ttf +0 -0
  203. package/src/assets/fontawesome6/webfonts/fa-solid-900.woff2 +0 -0
  204. package/src/assets/fontawesome6/webfonts/fa-v4compatibility.ttf +0 -0
  205. package/src/assets/fontawesome6/webfonts/fa-v4compatibility.woff2 +0 -0
  206. package/src/assets/icon-192x192.png +0 -0
  207. package/src/assets/icon-256x256.png +0 -0
  208. package/src/assets/icon-384x384.png +0 -0
  209. package/src/assets/icon-512x512.png +0 -0
  210. package/src/assets/steelseries-min.js +25 -25
  211. package/src/assets/steelseries-min.js.map +8 -8
  212. package/src/assets/steelseries.js +15834 -15834
  213. package/src/assets/svg-autopilot-inkscape-plain.svg +983 -983
  214. package/src/assets/svg-wind-inkscape.svg +1358 -1358
  215. package/src/assets/tween.js +381 -381
  216. package/src/index.html +20 -20
  217. package/src/main.ts +11 -11
  218. package/src/manifest.json +33 -0
  219. package/src/polyfills.ts +80 -76
  220. package/src/styles.scss +11 -11
  221. package/src/themes/darkBlueTheme.scss +117 -116
  222. package/src/themes/defaultTheme.scss +50 -49
  223. package/src/themes/highContrastTheme.scss +47 -46
  224. package/src/themes/modernTheme.scss +143 -142
  225. package/src/themes/nightMode.scss +185 -184
  226. package/src/themes/platypusTheme.scss +80 -79
  227. package/src/themes/signalkTheme.scss +112 -111
  228. package/src/tsconfig.app.json +15 -15
  229. package/src/tsconfig.spec.json +20 -20
  230. package/tsconfig.json +23 -23
  231. package/tslint.json +143 -143
  232. package/public/assets/font-awesome/HELP-US-OUT.txt +0 -7
  233. package/public/assets/font-awesome/css/font-awesome.css +0 -2337
  234. package/public/assets/font-awesome/css/font-awesome.min.css +0 -4
  235. package/public/assets/font-awesome/desktop.ini +0 -4
  236. package/public/assets/font-awesome/fonts/FontAwesome.otf +0 -0
  237. package/public/assets/font-awesome/fonts/fontawesome-webfont.eot +0 -0
  238. package/public/assets/font-awesome/fonts/fontawesome-webfont.svg +0 -2671
  239. package/public/assets/font-awesome/fonts/fontawesome-webfont.ttf +0 -0
  240. package/public/assets/font-awesome/fonts/fontawesome-webfont.woff +0 -0
  241. package/public/assets/font-awesome/fonts/fontawesome-webfont.woff2 +0 -0
  242. package/public/assets/font-awesome/less/animated.less +0 -34
  243. package/public/assets/font-awesome/less/bordered-pulled.less +0 -25
  244. package/public/assets/font-awesome/less/core.less +0 -12
  245. package/public/assets/font-awesome/less/fixed-width.less +0 -6
  246. package/public/assets/font-awesome/less/font-awesome.less +0 -18
  247. package/public/assets/font-awesome/less/icons.less +0 -789
  248. package/public/assets/font-awesome/less/larger.less +0 -13
  249. package/public/assets/font-awesome/less/list.less +0 -19
  250. package/public/assets/font-awesome/less/mixins.less +0 -60
  251. package/public/assets/font-awesome/less/path.less +0 -15
  252. package/public/assets/font-awesome/less/rotated-flipped.less +0 -20
  253. package/public/assets/font-awesome/less/screen-reader.less +0 -5
  254. package/public/assets/font-awesome/less/stacked.less +0 -20
  255. package/public/assets/font-awesome/less/variables.less +0 -800
  256. package/public/assets/font-awesome/scss/_animated.scss +0 -34
  257. package/public/assets/font-awesome/scss/_bordered-pulled.scss +0 -25
  258. package/public/assets/font-awesome/scss/_core.scss +0 -12
  259. package/public/assets/font-awesome/scss/_fixed-width.scss +0 -6
  260. package/public/assets/font-awesome/scss/_icons.scss +0 -789
  261. package/public/assets/font-awesome/scss/_larger.scss +0 -13
  262. package/public/assets/font-awesome/scss/_list.scss +0 -19
  263. package/public/assets/font-awesome/scss/_mixins.scss +0 -60
  264. package/public/assets/font-awesome/scss/_path.scss +0 -15
  265. package/public/assets/font-awesome/scss/_rotated-flipped.scss +0 -20
  266. package/public/assets/font-awesome/scss/_screen-reader.scss +0 -5
  267. package/public/assets/font-awesome/scss/_stacked.scss +0 -20
  268. package/public/assets/font-awesome/scss/_variables.scss +0 -800
  269. package/public/assets/font-awesome/scss/font-awesome.scss +0 -18
  270. package/public/main-es2018.ab0adc5af3ab3e70c849.js +0 -1
  271. package/public/main-es5.ab0adc5af3ab3e70c849.js +0 -1
  272. package/public/polyfills-es2018.713f95af1f028e444854.js +0 -1
  273. package/public/polyfills-es5.c78877945523541d2597.js +0 -1
  274. package/public/runtime-es2018.a4dadbc03350107420a4.js +0 -1
  275. package/public/runtime-es5.a4dadbc03350107420a4.js +0 -1
  276. package/public/styles.71bb0d04cad96b5efbe1.css +0 -19
  277. package/src/assets/font-awesome/HELP-US-OUT.txt +0 -7
  278. package/src/assets/font-awesome/css/font-awesome.css +0 -2337
  279. package/src/assets/font-awesome/css/font-awesome.min.css +0 -4
  280. package/src/assets/font-awesome/desktop.ini +0 -4
  281. package/src/assets/font-awesome/fonts/FontAwesome.otf +0 -0
  282. package/src/assets/font-awesome/fonts/fontawesome-webfont.eot +0 -0
  283. package/src/assets/font-awesome/fonts/fontawesome-webfont.svg +0 -2671
  284. package/src/assets/font-awesome/fonts/fontawesome-webfont.ttf +0 -0
  285. package/src/assets/font-awesome/fonts/fontawesome-webfont.woff +0 -0
  286. package/src/assets/font-awesome/fonts/fontawesome-webfont.woff2 +0 -0
  287. package/src/assets/font-awesome/less/animated.less +0 -34
  288. package/src/assets/font-awesome/less/bordered-pulled.less +0 -25
  289. package/src/assets/font-awesome/less/core.less +0 -12
  290. package/src/assets/font-awesome/less/fixed-width.less +0 -6
  291. package/src/assets/font-awesome/less/font-awesome.less +0 -18
  292. package/src/assets/font-awesome/less/icons.less +0 -789
  293. package/src/assets/font-awesome/less/larger.less +0 -13
  294. package/src/assets/font-awesome/less/list.less +0 -19
  295. package/src/assets/font-awesome/less/mixins.less +0 -60
  296. package/src/assets/font-awesome/less/path.less +0 -15
  297. package/src/assets/font-awesome/less/rotated-flipped.less +0 -20
  298. package/src/assets/font-awesome/less/screen-reader.less +0 -5
  299. package/src/assets/font-awesome/less/stacked.less +0 -20
  300. package/src/assets/font-awesome/less/variables.less +0 -800
  301. package/src/assets/font-awesome/scss/_animated.scss +0 -34
  302. package/src/assets/font-awesome/scss/_bordered-pulled.scss +0 -25
  303. package/src/assets/font-awesome/scss/_core.scss +0 -12
  304. package/src/assets/font-awesome/scss/_fixed-width.scss +0 -6
  305. package/src/assets/font-awesome/scss/_icons.scss +0 -789
  306. package/src/assets/font-awesome/scss/_larger.scss +0 -13
  307. package/src/assets/font-awesome/scss/_list.scss +0 -19
  308. package/src/assets/font-awesome/scss/_mixins.scss +0 -60
  309. package/src/assets/font-awesome/scss/_path.scss +0 -15
  310. package/src/assets/font-awesome/scss/_rotated-flipped.scss +0 -20
  311. package/src/assets/font-awesome/scss/_screen-reader.scss +0 -5
  312. package/src/assets/font-awesome/scss/_stacked.scss +0 -20
  313. package/src/assets/font-awesome/scss/_variables.scss +0 -800
  314. 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
  }