diff --git a/package-lock.json b/package-lock.json index c2f8bdb..b49d5b6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,8 +1,42 @@ { "name": "homecontrol-control-base", - "version": "1.1.0", - "lockfileVersion": 1, + "version": "1.3.0", + "lockfileVersion": 2, "requires": true, + "packages": { + "": { + "version": "1.3.0", + "license": "UNLICENSED", + "dependencies": { + "merge-options": "^1.0.1", + "node-object-hash": "^1.4.1" + } + }, + "node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/merge-options": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-1.0.1.tgz", + "integrity": "sha512-iuPV41VWKWBIOpBsjoxjDZw8/GbSfZ2mk7N1453bwMrfzdrIk7EzBd+8UVR6rkw67th7xnk9Dytl3J+lHPdxvg==", + "dependencies": { + "is-plain-obj": "^1.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/node-object-hash": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/node-object-hash/-/node-object-hash-1.4.1.tgz", + "integrity": "sha512-JQVqSM5/mOaUoUhCYR0t1vgm8RFo7qpJtPvnoFCLeqQh1xrfmr3BCD3nGBnACzpIEF7F7EVgqGD3O4lao/BY/A==" + } + }, "dependencies": { "is-plain-obj": { "version": "1.1.0", diff --git a/package.json b/package.json index f1f2790..57730b5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "homecontrol-control-base", - "version": "1.3.0", + "version": "1.3.1", "description": "Base class which all hc-controls inherit from", "main": "index.js", "scripts": { diff --git a/utils.js b/utils.js index dc4ab64..b355951 100644 --- a/utils.js +++ b/utils.js @@ -11,6 +11,15 @@ function clamp(value, min, max) { return Math.min(max, Math.max(min, value)); } +function hue2rgb(p, q, t) { + if (t < 0) t += 1; + if (t > 1) t -= 1; + if (t < 1/6) return p + (q - p) * 6 * t; + if (t < 1/2) return q; + if (t < 2/3) return p + (q - p) * (2/3 - t) * 6; + return p; +} + function HSL_to_RGB(hsl) { let h = hsl.hue / 360; let s = hsl.sat / 100; @@ -41,12 +50,17 @@ function RGB_to_HSL(rgb) { let g = rgb.green / 255; let b = rgb.blue / 255; - let max = Math.max(r, g, b), min = Math.min(r, g, b); + let max = Math.max(r, g, b); + let min = Math.min(r, g, b); + + let h = 0; + let s = 0; if (max == min || max - min < 0.01) { - h = s = 0; // achromatic + h = 0; // achromatic + s = 0; } else { - var d = max - min; + let d = max - min; s = d / (2 - max - min); switch (max) { @@ -78,5 +92,6 @@ module.exports = { clamp, HSL_to_RGB, RGB_to_HSL, + hue2rgb, asyncTimeout, }; \ No newline at end of file