Commit 44d485fc authored by targoo's avatar targoo

WIP D8

parent dffc2f7d
......@@ -61,3 +61,7 @@ More info
-----------------------------------------------------------------------------
http://www.w3.org/TR/css3-color/#color
https://github.com/mikeemoo/ColorJizz-PHP
http://www.colorhexa.com/ff0000
https://github.com/PrimalPHP/Color/blob/master/lib/Primal/Color/Parser.php
https://github.com/matthewbaggett/php-color/blob/master/Color.php
<?php
/**
* @file
* An color field with a custom color picker using the Field Types API.
* A color field with a custom color picker using the Field Types API.
*/
use Drupal\Core\Routing\RouteMatchInterface;
......@@ -33,26 +33,34 @@ function color_field_help($route_name, RouteMatchInterface $route_match) {
}
/**
* Helper: Convert RGB to HEX6
*
* @param $rgb Must be an array indexed on r, g and b.
* Implements hook_theme().
*/
function color_field_rgb2hex($rgb = FALSE) {
$hex = '';
$hex .= str_pad(dechex($rgb[0]), 2, "0", STR_PAD_LEFT);
$hex .= str_pad(dechex($rgb[1]), 2, "0", STR_PAD_LEFT);
$hex .= str_pad(dechex($rgb[2]), 2, "0", STR_PAD_LEFT);
return $hex; // returns the hex value including the number sign (#)
function color_field_theme() {
$theme = [];
$theme['color_field_swatch'] = array(
'variables' => array(
'color' => NULL,
'width' => NULL,
'height' => NULL,
),
);
return $theme;
}
/**
* Helper: Convert HEX6 to RGB
*
* @param $hex.
* Prepares variables for the color swatch templates.
*
* This template outputs a separate title and link.
*
* Default template: link-formatter-link-separate.html.twig.
*
* @param array $variables
* An associative array containing:
* - color: The color background.
* - width: The width of the color swatch.
* - height: The height of the color swatch.
*/
function color_field_hex2rgb($hex = FALSE) {
$r = hexdec(substr($hex,0,2));
$g = hexdec(substr($hex,2,2));
$b = hexdec(substr($hex,-2));
return compact('r', 'g', 'b');
function template_preprocess_color_field_swatch(&$variables) {
}
<?php
/**
* @file
* Contains Drupal\color_field\Color.
*/
namespace Drupal\color_field;
class Color {
/**
* The color.
*
* @var string
*/
protected $color;
/**
* The opacity.
*
* @var float
*/
protected $opacity;
/**
* Creates a Color instance.
*
* @param string $color The color.
* @param float $opacity The opacity.
*/
public function __construct($color, $opacity) {
$this->color = $color;
$this->opacity = $opacity;
}
/**
* {@inheritdoc}
*/
public function getColor() {
return $this->color;
}
/**
* {@inheritdoc}
*/
public function getOpacity() {
return $this->opacity;
}
/**
* Returns the string representation of the color (color, opacity).
*
* @return string
*/
public function __toString() {
return $this->color . ' ' . $this->opacity;
}
}
<?php
/**
* @file
* Contains Drupal\color_field\Color.
*/
namespace Drupal\color_field;
abstract class ColorBase implements ColorInterface {
/**
* @var
*/
protected $opacity;
/**
* Convert the color to Hex format
*
* @return ColorHex
* The color in Hex format.
*/
abstract function toHex();
/**
* Convert the color to RGB format
*
* @return ColorRGB
* The color in RGB format.
*/
abstract function toRGB();
/**
* Convert the color to a string format
*
* @return String
* The color in string format.
*/
abstract function toString();
/**
* Get the opacity
*
* @return float
* The opacity value between 0 and 1.
*/
public function getOpacity() {
return $this->opacity | 1;
}
static $patterns = array(
'cmyk' => '/^(?:device-)?cmyk\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3}),\s*(\d+(?:\.\d+)?|\.\d+)\s*\)/',
'rgba' => '/^rgba\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3}),\s*(\d+(?:\.\d+)?|\.\d+)\s*\)/',
'rgb' => '/^rgb\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})\)$/',
'hsla' => '/^hsla\((\d{1,3}),\s*(\d{1,3})%,\s*(\d{1,3})%,\s*(\d+(?:\.\d+)?|\.\d+)\s*\)/',
'hsl' => '/^hsl\((\d{1,3}),\s*(\d{1,3})%,\s*(\d{1,3})%\)$/',
'hsva' => '/^hsva\((\d{1,3}),\s*(\d{1,3})%,\s*(\d{1,3})%,\s*(\d+(?:\.\d+)?|\.\d+)\s*\)$/',
'hsv' => '/^hsv\((\d{1,3}),\s*(\d{1,3})%,\s*(\d{1,3})%\)$/',
'hex6' => '/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/',
'hex3' => '/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/'
);
static $named_colors = array(
"aliceblue" => "f0f8ff",
"antiquewhite" => "faebd7",
"aqua" => "00ffff",
"aquamarine" => "7fffd4",
"azure" => "f0ffff",
"beige" => "f5f5dc",
"bisque" => "ffe4c4",
"black" => "000000",
"blanchedalmond" => "ffebcd",
"blue" => "0000ff",
"blueviolet" => "8a2be2",
"brown" => "a52a2a",
"burlywood" => "deb887",
"cadetblue" => "5f9ea0",
"chartreuse" => "7fff00",
"chocolate" => "d2691e",
"coral" => "ff7f50",
"cornflowerblue" => "6495ed",
"cornsilk" => "fff8dc",
"crimson" => "dc143c",
"cyan" => "00ffff",
"darkblue" => "00008b",
"darkcyan" => "008b8b",
"darkgoldenrod" => "b8860b",
"darkgray" => "a9a9a9",
"darkgreen" => "006400",
"darkkhaki" => "bdb76b",
"darkmagenta" => "8b008b",
"darkolivegreen" => "556b2f",
"darkorange" => "ff8c00",
"darkorchid" => "9932cc",
"darkred" => "8b0000",
"darksalmon" => "e9967a",
"darkseagreen" => "8fbc8f",
"darkslateblue" => "483d8b",
"darkslategray" => "2f4f4f",
"darkturquoise" => "00ced1",
"darkviolet" => "9400d3",
"deeppink" => "ff1493",
"deepskyblue" => "00bfff",
"dimgray" => "696969",
"dodgerblue" => "1e90ff",
"feldspar" => "d19275",
"firebrick" => "b22222",
"floralwhite" => "fffaf0",
"forestgreen" => "228b22",
"fuchsia" => "ff00ff",
"gainsboro" => "dcdcdc",
"ghostwhite" => "f8f8ff",
"gold" => "ffd700",
"goldenrod" => "daa520",
"gray" => "808080",
"green" => "008000",
"greenyellow" => "adff2f",
"honeydew" => "f0fff0",
"hotpink" => "ff69b4",
"indianred " => "cd5c5c",
"indigo " => "4b0082",
"ivory" => "fffff0",
"khaki" => "f0e68c",
"lavender" => "e6e6fa",
"lavenderblush" => "fff0f5",
"lawngreen" => "7cfc00",
"lemonchiffon" => "fffacd",
"lightblue" => "add8e6",
"lightcoral" => "f08080",
"lightcyan" => "e0ffff",
"lightgoldenrodyellow" => "fafad2",
"lightgrey" => "d3d3d3",
"lightgreen" => "90ee90",
"lightpink" => "ffb6c1",
"lightsalmon" => "ffa07a",
"lightseagreen" => "20b2aa",
"lightskyblue" => "87cefa",
"lightslateblue" => "8470ff",
"lightslategray" => "778899",
"lightsteelblue" => "b0c4de",
"lightyellow" => "ffffe0",
"lime" => "00ff00",
"limegreen" => "32cd32",
"linen" => "faf0e6",
"magenta" => "ff00ff",
"maroon" => "800000",
"mediumaquamarine" => "66cdaa",
"mediumblue" => "0000cd",
"mediumorchid" => "ba55d3",
"mediumpurple" => "9370d8",
"mediumseagreen" => "3cb371",
"mediumslateblue" => "7b68ee",
"mediumspringgreen" => "00fa9a",
"mediumturquoise" => "48d1cc",
"mediumvioletred" => "c71585",
"midnightblue" => "191970",
"mintcream" => "f5fffa",
"mistyrose" => "ffe4e1",
"moccasin" => "ffe4b5",
"navajowhite" => "ffdead",
"navy" => "000080",
"oldlace" => "fdf5e6",
"olive" => "808000",
"olivedrab" => "6b8e23",
"orange" => "ffa500",
"orangered" => "ff4500",
"orchid" => "da70d6",
"palegoldenrod" => "eee8aa",
"palegreen" => "98fb98",
"paleturquoise" => "afeeee",
"palevioletred" => "d87093",
"papayawhip" => "ffefd5",
"peachpuff" => "ffdab9",
"peru" => "cd853f",
"pink" => "ffc0cb",
"plum" => "dda0dd",
"powderblue" => "b0e0e6",
"purple" => "800080",
"red" => "ff0000",
"rosybrown" => "bc8f8f",
"royalblue" => "4169e1",
"saddlebrown" => "8b4513",
"salmon" => "fa8072",
"sandybrown" => "f4a460",
"seagreen" => "2e8b57",
"seashell" => "fff5ee",
"sienna" => "a0522d",
"silver" => "c0c0c0",
"skyblue" => "87ceeb",
"slateblue" => "6a5acd",
"slategray" => "708090",
"snow" => "fffafa",
"springgreen" => "00ff7f",
"steelblue" => "4682b4",
"tan" => "d2b48c",
"teal" => "008080",
"thistle" => "d8bfd8",
"tomato" => "ff6347",
"turquoise" => "40e0d0",
"violet" => "ee82ee",
"violetred" => "d02090",
"wheat" => "f5deb3",
"white" => "ffffff",
"whitesmoke" => "f5f5f5",
"yellow" => "ffff00",
"yellowgreen" => "9acd32"
);
}
<?php
/**
* @file
* Contains Drupal\color_field\ColorCMY.
*/
namespace Drupal\color_field;
/**
* ColorCMY represents the CMY color format.
*/
class ColorCMY extends ColorBase {
/**
* The cyan
* @var float
*/
private $cyan;
/**
* The magenta
* @var float
*/
private $magenta;
/**
* The yellow
* @var float
*/
private $yellow;
/**
* Create a new CMYK color
*
* @param float $cyan
* The cyan
* @param float $magenta
* The magenta
* @param float $yellow
* The yellow
* @param float $opacity
* The opacity
*/
public function __construct($cyan, $magenta, $yellow, $opacity) {
$this->cyan = $cyan;
$this->magenta = $magenta;
$this->yellow = $yellow;
$this->opacity = floatval($opacity);
}
/**
* Get the amount of Cyan
*
* @return int The amount of cyan
*/
public function getCyan() {
return $this->cyan;
}
/**
* Get the amount of Magenta
*
* @return int The amount of magenta
*/
public function getMagenta() {
return $this->magenta;
}
/**
* Get the amount of Yellow
*
* @return int The amount of yellow
*/
public function getYellow() {
return $this->yellow;
}
/**
* A string representation of this color in the current format
*
* @param bool $opacity
* Whether or not to display the opacity.
*
* @return string
* The color in format: #RRGGBB
*/
public function toString($opacity = TRUE) {
}
/**
* {@inheritdoc}
*/
public function toHex() {
return $this->toRGB()->toHex();
}
/**
* {@inheritdoc}
*/
public function toRGB() {
$red = (1 - $this->cyan) * 255;
$green = (1 - $this->magenta) * 255;
$blue = (1 - $this->yellow) * 255;
return new ColorRGB($red, $green, $blue, $this->getOpacity());
}
/**
* {@inheritdoc}
*/
public function toCMY() {
$cyan = ($this->cyan * (1 - $this->key) + $this->key);
$magenta = ($this->magenta * (1 - $this->key) + $this->key);
$yellow = ($this->yellow * (1 - $this->key) + $this->key);
return new ColorCMY($cyan, $magenta, $yellow);
}
}
<?php
/**
* @file
* Contains Drupal\color_field\ColorCMYK.
*/
namespace Drupal\color_field;
/**
* ColorCMYK represents the CMYK color format.
*/
class ColorCMYK extends ColorBase {
/**
* The cyan
* @var float
*/
private $cyan;
/**
* The magenta
* @var float
*/
private $magenta;
/**
* The yellow
* @var float
*/
private $yellow;
/**
* The key (black)
* @var float
*/
private $key;
/**
* Create a new CMYK color
*
* @param float $cyan The cyan
* @param float $magenta The magenta
* @param float $yellow The yellow
* @param float $key The key (black)
* @param float $opacity
* The opacity
*/
public function __construct($cyan, $magenta, $yellow, $key, $opacity) {
$this->cyan = $cyan;
$this->magenta = $magenta;
$this->yellow = $yellow;
$this->key = $key;
$this->opacity = floatval($opacity);
}
/**
* Get the amount of Cyan
*
* @return int The amount of cyan
*/
public function getCyan() {
return $this->cyan;
}
/**
* Get the amount of Magenta
*
* @return int The amount of magenta
*/
public function getMagenta() {
return $this->magenta;
}
/**
* Get the amount of Yellow
*
* @return int The amount of yellow
*/
public function getYellow() {
return $this->yellow;
}
/**
* Get the key (black)
*
* @return int The amount of black
*/
public function getKey() {
return $this->key;
}
/**
* A string representation of this color in the current format
*
* @param bool $opacity
* Whether or not to display the opacity.
*
* @return string
* The color in format: #RRGGBB
*/
public function toString($opacity = TRUE) {
}
/**
* {@inheritdoc}
*/
public function toHex() {
return $this->toRGB()->toHex();
}
/**
* {@inheritdoc}
*/
public function toRGB() {
return $this->toCMY()->toRGB();
}
/**
* {@inheritdoc}
*/
public function toCMY() {
$cyan = ($this->cyan * (1 - $this->key) + $this->key);
$magenta = ($this->magenta * (1 - $this->key) + $this->key);
$yellow = ($this->yellow * (1 - $this->key) + $this->key);
return new ColorCMY($cyan, $magenta, $yellow, $this->getOpacity());
}
}
<?php
/**
* @file
* Contains Drupal\color_field\ColorHex.
*/
namespace Drupal\color_field;
/**
* Hex represents the Hex color format
*/
class ColorHex extends ColorBase {
/**
* The Hex triplet of the color.
* @var int
*/
private $color;
/**
* Create a new Hex from a string.
*
* @param string $color
* The string hex value (i.e. "FFFFFF").
* @param string $opacity
* The opacity value.
* @return ColorHex
* The ColorHex object.
* @throws Exception
*/
public function __construct($color, $opacity) {
$color = strtolower($color);
if (substr($color, 0, 1) === '#') {
$color = substr($color, 1);
}
if (strlen($color) === 3) {
$color = str_repeat($color[0], 2) . str_repeat($color[1], 2) . str_repeat($color[2], 2);
}
if (!preg_match('/[0-9A-F]{6}/i', $color)) {
// @throws exception.
}
$this->color = hexdec($color);
$this->opacity = floatval($opacity);
return $this;
}
/**
* A string representation of this color in the current format
*
* @param bool $opacity
* Whether or not to display the opacity.
*
* @return string
* The color in format: #RRGGBB
*/
public function toString($opacity = TRUE) {
$rgb = $this->toRGB();
$hex = '#';
$hex .= str_pad(dechex($rgb->getRed()), 2, "0", STR_PAD_LEFT);
$hex .= str_pad(dechex($rgb->getGreen()), 2, "0", STR_PAD_LEFT);
$hex .= str_pad(dechex($rgb->getBlue()), 2, "0", STR_PAD_LEFT);
if ($opacity) {
$hex .= ' ' . $this->getOpacity();
}
return strtoupper($hex);
}
/**
* {@inheritdoc}
*/
public function toHex() {
return $this;
}
/**
* {@inheritdoc}
*/
public function toRGB() {
$red = (($this->color & 0xFF0000) >> 16);
$green = (($this->color & 0x00FF00) >> 8);
$blue = (($this->color & 0x0000FF));
return new ColorRGB($red, $green, $blue, $this->getOpacity());
}
}
<?php
/**
* @file
* Contains Drupal\color_field\ColorInterface.
*/
namespace Drupal\color_field;
/**
* Defines a common interface for color classes.
*/
interface ColorInterface {
public function toString();
public function toHex();
public function toRGB();
//public function toHSV();
//public function toHSL();
//public function toRGB();
//public function toCMYK();
//public function toCSS();
}
<?php
/**
* @file
* Contains Drupal\color_field\ColorRGB.
*/
namespace Drupal\color_field;
/**
* RGB represents the RGB color format
*/
class ColorRGB extends ColorBase {
/**
* The red value (0-255)
* @var float
*/
private $red;
/**
* The green value (0-255)
* @var float
*/
private $green;
/**
* The blue value (0-255)
* @var float
*/
private $blue;
/**
* Create a new RGB color
*
* @param int $red
* The red (0-255)
* @param int $green
* The green (0-255)
* @param int $blue
* The blue (0-255)
* @param float $opacity
* The opacity
*
* @throws Exception
*/
public function __construct($red, $green, $blue, $opacity) {
if ($red < 0 || $red > 255) {
// @throws exception.
}
if ($green < 0 || $green > 255) {
// @throws exception.
}
if ($blue < 0 || $blue