From 524a96f1eb0372edad0e8a73adbaf89802422234 Mon Sep 17 00:00:00 2001 From: Jorge Bolois Date: Sun, 19 Mar 2023 14:28:35 +0100 Subject: [PATCH] Moving logic to a file. --- colorgen.js | 70 ++++++++++++++++++++++--------------------------- package.json | 2 +- src/Colorgen.js | 43 ++++++++++++++++++++++++++++++ 3 files changed, 75 insertions(+), 40 deletions(-) create mode 100644 src/Colorgen.js diff --git a/colorgen.js b/colorgen.js index 414216c..9f180cd 100755 --- a/colorgen.js +++ b/colorgen.js @@ -1,6 +1,6 @@ #!/usr/bin/env node import { program } from 'commander'; -import tinycolor from 'tinycolor2'; +import Colorgen from './src/Colorgen.js'; program.command('gen ') .description('Generates multiple colors from a given color') @@ -8,62 +8,54 @@ program.command('gen ') .option('-c, --complementary', 'Generate complementary colors instead of analogous') .action((color, options) => { const amount = options.amount; - const primary = tinycolor(color); + const colorgen = new Colorgen(color); + colorgen.amount = amount; + if (options.complementary) { - complementary(primary, amount) + complementary(colorgen.complementary()) } else { - analogous(primary, amount); + analogous(colorgen.analogous()); } }); program.parse(process.argv); -function logColor(color, name) { +function _logColor(color, name) { const { r, g, b } = color.toRgb() console.log(`\x1b[48;2;${r};${g};${b}m ${color.toHexString()} \x1b[0m [${name.toUpperCase()}]`); } -function analogous(primary, amount) { - _primary(primary, amount); - _separator(); - - const analogous = primary.analogous(12, 90); - _secondary(analogous[2], amount); - _separator(); - - _secondary(analogous[5], amount); - _separator(); - - _secondary(analogous[8], amount); - _separator(); - - _secondary(analogous[11], amount); +function _logColors(color, type = 'primary') { + _logColor(color.normal, type); + _logColor(color.dark, `dark ${type}`); + _logColor(color.darker, `dark ${type}`); } -function complementary(primary, amount) { - _primary(primary, amount); +function analogous(colors) { + _logPrimary(colors.primary); + _logSecondary(colors.secondaries[0]); + _logSecondary(colors.secondaries[1]); + _logSecondary(colors.secondaries[2]); + _logSecondary(colors.secondaries[3]); +} + +function complementary(colors) { + _logPrimary(colors.primary); + + _logSecondary(colors.secondaries[0]); +} + +function _logPrimary(color) { + _logColors(color); _separator(); - const secondary = primary.complement(); - _secondary(secondary, amount); } -function _primary(color, amount) { - logColor(color, 'primary'); - const darkPrimary = color.clone().darken(amount); - logColor(darkPrimary, 'dark primary'); - const darkerPrimary = darkPrimary.clone().darken(amount); - logColor(darkerPrimary, 'darker primary'); +function _logSecondary(color) { + _logColors(color, 'secondary'); + _separator(); } -function _secondary(color, amount) { - logColor(color, 'secondary'); - const darkSecondary = color.clone().darken(amount); - logColor(darkSecondary, 'dark secondary'); - const darkerSecondary = darkSecondary.clone().darken(amount); - logColor(darkerSecondary, 'darker secondary'); -} - -function _separator() { +function _separator() { console.log('------------------------------'); } diff --git a/package.json b/package.json index 4a17184..73c3ad1 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@midefos/colorgen", "type": "module", - "version": "0.1.1", + "version": "0.1.2", "description": "Color generator", "bin": { "colorgen": "./colorgen.js" diff --git a/src/Colorgen.js b/src/Colorgen.js new file mode 100644 index 0000000..37af0c0 --- /dev/null +++ b/src/Colorgen.js @@ -0,0 +1,43 @@ +import tinycolor from "tinycolor2"; + +export default class Colorgen { + + constructor(primary) { + this.primary = tinycolor(primary); + this.amount = 12.5; + } + + analogous() { + const primary = this._generateColor(this.primary); + const secondaries = []; + + const analogous = this.primary.analogous(12, 90); + secondaries.push(this._generateColor(analogous[2])); + secondaries.push(this._generateColor(analogous[5])); + secondaries.push(this._generateColor(analogous[8])); + secondaries.push(this._generateColor(analogous[11])); + + return { primary, secondaries }; + } + + complementary() { + const primary = this._generateColor(this.primary); + const secondaries = []; + + const complementary = this.primary.complement(); + secondaries.push(this._generateColor(complementary)); + + return { primary, secondaries }; + } + + _generateDark(color) { + return color.clone().darken(this.amount); + } + + _generateColor(normal) { + const dark = this._generateDark(normal); + const darker = this._generateDark(dark); + return { normal, dark, darker }; + } + +} \ No newline at end of file