|
@@ -1,4 +1,4 @@
|
|
|
-<header></header>
|
|
|
+<header>RGB</header>
|
|
|
|
|
|
<body>
|
|
|
<script>
|
|
@@ -6,12 +6,19 @@
|
|
|
#r = 0
|
|
|
#g = 0
|
|
|
#b = 0
|
|
|
+ onError(message){
|
|
|
+ //throw new Error(message);
|
|
|
+ console.log(`ERROR: ${message}`);
|
|
|
+ }
|
|
|
checkChannelValue(val) {
|
|
|
val = +val
|
|
|
if (typeof val !== "number" || val < 0 || val > 255) {
|
|
|
- throw new Error(`invalid channel value: ${val}`)
|
|
|
+ this.onError(`invalid channel value: ${val}`)
|
|
|
}
|
|
|
}
|
|
|
+ toHex(val){
|
|
|
+ return val.toString(16).padStart(2, '0').toUpperCase();
|
|
|
+ }
|
|
|
get r() {
|
|
|
return this.#r;
|
|
|
}
|
|
@@ -42,36 +49,34 @@
|
|
|
this.b = parseInt(`${match[3]}`, 16);
|
|
|
return;
|
|
|
}
|
|
|
- throw new Error(`incorrect hex color parameter: ${val}`);
|
|
|
+ this.onError(`incorrect hex color parameter: ${val}`);
|
|
|
}
|
|
|
get hex() {
|
|
|
- return `#${this.r.toString(16).toUpperCase()}${this.g.toString(16).toUpperCase()}${this.b.toString(16).toUpperCase()}`;
|
|
|
+ return `#${this.toHex(this.r)}${this.toHex(this.g)}${this.toHex(this.b)}`;
|
|
|
}
|
|
|
set rgb(val) {
|
|
|
let matchColors = /^rgb\((\d{1,3}), (\d{1,3}), (\d{1,3})\)$/;
|
|
|
let match = matchColors.exec(val);
|
|
|
- if (match !== null && match.length == 3) {
|
|
|
+ if (match !== null && match.length == 4) {
|
|
|
this.r = match[1];
|
|
|
this.g = match[2];
|
|
|
this.b = match[3];
|
|
|
return;
|
|
|
}
|
|
|
- throw new Error(`incorrect rgb color parameter: ${val}`);
|
|
|
+ this.onError(`incorrect rgb color parameter: ${val}`);
|
|
|
}
|
|
|
get rgb() {
|
|
|
return `rgb(${this.r}, ${this.g}, ${this.b})`;
|
|
|
}
|
|
|
|
|
|
- /* constructor(r, g, b) {
|
|
|
- this.r = r;
|
|
|
- this.g = g;
|
|
|
- this.b = b;
|
|
|
- }*/
|
|
|
+
|
|
|
constructor(colorString) {
|
|
|
- if (colorString.startsWith("#"))
|
|
|
- this.hex = colorString;
|
|
|
- else
|
|
|
- this.rgb = colorString;
|
|
|
+ if (colorString) {
|
|
|
+ if (colorString.startsWith(`#`))
|
|
|
+ this.hex = colorString;
|
|
|
+ else
|
|
|
+ this.rgb = colorString;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
}
|
|
@@ -79,19 +84,29 @@
|
|
|
if (actual != expected)
|
|
|
throw new Error(`not expected value. actual: ${actual}, expected: ${expected}`);
|
|
|
}
|
|
|
- //let color = new RGB('#AABBFF');
|
|
|
- //assertAreEqual(color.hex, '#AABBFF');
|
|
|
- let color = new RGB ('rgb(55, 49, 121)');
|
|
|
- assertAreEqual(color.rgb, ('55, 49, 121'));
|
|
|
+ let color = new RGB('#AABBFF');
|
|
|
+ assertAreEqual(color.hex, '#AABBFF');
|
|
|
+ color = new RGB('rgb(55, 49, 121)');
|
|
|
+ assertAreEqual(color.rgb, `rgb(55, 49, 121)`);
|
|
|
assertAreEqual(color.hex, `#373179`);
|
|
|
- //*color.rgb = `rgb(55, 49, 121)`;
|
|
|
- //assertAreEqual(color.r, 55);
|
|
|
- //assertAreEqual(color.g, 49);
|
|
|
- // assertAreEqual(color.b, 121);
|
|
|
- //assertAreEqual(color.rgb, `rgb(55, 49, 121)`);
|
|
|
- //assertAreEqual(color.hex, `#373179`);
|
|
|
- </script>
|
|
|
-</body>
|
|
|
-
|
|
|
-
|
|
|
+ color.rgb = `rgb(55, 49, 121)`;
|
|
|
+ assertAreEqual(color.r, 55);
|
|
|
+ assertAreEqual(color.g, 49);
|
|
|
+ assertAreEqual(color.b, 121);
|
|
|
+ assertAreEqual(color.rgb, `rgb(55, 49, 121)`);
|
|
|
+ assertAreEqual(color.hex, `#373179`);
|
|
|
+ const rgb = new RGB()
|
|
|
+ rgb.r = 15
|
|
|
+ rgb.g = 128
|
|
|
+ rgb.b = 192
|
|
|
+ console.log(rgb.hex) //#0F80C0
|
|
|
+ console.log(rgb.rgb) //rgb(15,128,192)
|
|
|
+ rgb.hex = '#203040'
|
|
|
+ console.log(rgb.rgb) //rgb(32, 48, 64)
|
|
|
+ rgb.rgb = 'rgb(100, 90, 50)'
|
|
|
+ console.log(rgb.r, rgb.g, rgb.b) //100, 90, 50
|
|
|
|
|
|
+ rgb.r = 1000 //RangeError
|
|
|
+ rgb.hex = 'дичь' //SyntaxError
|
|
|
+ </script>
|
|
|
+</body>
|