From a18ea0a9afedbf3d0cf0dd180dda1324c3861dcd Mon Sep 17 00:00:00 2001 From: Ilyas Ronef Date: Fri, 29 Nov 2019 17:00:38 +0300 Subject: [PATCH 01/22] * Minor changes. --- ddColorTools.php | 179 +++++++++++++++++++++++++++++++++++++---------- 1 file changed, 141 insertions(+), 38 deletions(-) diff --git a/ddColorTools.php b/ddColorTools.php index 551c6af..a65f90d 100644 --- a/ddColorTools.php +++ b/ddColorTools.php @@ -2,47 +2,103 @@ /** * ddColorTools * @version 2.0 (2017-05-22) - * + * * @desc Преобразует цвет в соответствии со смещением по тону, яркости или насыщенности. - * + * * @uses PHP >= 5.6. - * @uses MODXEvo.snippet.ddGetDocumentField >= 2.4 - * - * @param $inputColor {string} - Цвет в hex (например: ffffff). @required - * @param $inputColor_docField {string} - Имя поля (в котором содержится цвет) которое необходимо получить. Default: —. - * @param $inputColor_docId {integer} - ID документа, поле которого нужно получить. Default: —. - * @param $offset_h {string} - Смещение цветового тона в градусах [-360;+360]. "+" - прибавить, "-" - отнять, без знака - задать, "abs" - округлить до макс. или мин. значения, "r" - инвертировать. Default: '+0'. - * @param $offset_s {string} - Смещение насыщенности в процентах [-100;+100]. "+" - прибавить, "-" - отнять, без знака - задать, "abs" - округлить до макс. или мин. значения, "r" - инвертировать. Default: '+0'. - * @param $offset_b {string} - Смещение яркости в процентах [-100;+100]. "+" - прибавить, "-" - отнять, без знака - задать, "abs" - округлить до макс. или мин. значения, "r" - инвертировать. Default: '+0'. - * @param $outputFormat {'hex'|'hsb'} - Какой формат цвета возвращать. Default: 'hex'. - * + * @uses (MODX)EvolutionCMS.snippets.ddGetDocumentField >= 2.4 + * + * @param $inputColor {string} — Цвет в HEX. @required + * @example `ffffff` + * @example `#ffffff` + * @param $inputColor_docField {string} — Имя поля (в котором содержится цвет) которое необходимо получить. Default: —. + * @param $inputColor_docId {integer} — ID документа, поле которого нужно получить. Default: —. + * @param $offset_h {string} — Смещение цветового тона в градусах [-360;+360]. `+` — прибавить, `-` — отнять, без знака — задать, `abs` — округлить до макс. или мин. значения, `r` — инвертировать. Default: `'+0'`. + * @param $offset_s {string} — Смещение насыщенности в процентах [-100;+100]. `+` — прибавить, `-` — отнять, без знака — задать, `abs` — округлить до макс. или мин. значения, `r` — инвертировать. Default: `'+0'`. + * @param $offset_b {string} — Смещение яркости в процентах [-100;+100]. `+` — прибавить, `-` — отнять, без знака — задать, `abs` — округлить до макс. или мин. значения, `r` — инвертировать. Default: `'+0'`. + * @param $outputFormat {'hex'|'hsb'} — Какой формат цвета возвращать. Default: `'hex'`. + * * @copyright 2011–2017 DivanDesign {@link http://www.DivanDesign.biz } */ //Если задано имя поля, которое необходимо получить if(isset($inputColor_docField)){ - $inputColor = $modx->runSnippet('ddGetDocumentField', ['id' => $inputColor_docId, 'field' => $inputColor_docField]); + $inputColor = $modx->runSnippet( + 'ddGetDocumentField', + [ + 'id' => $inputColor_docId, + 'field' => $inputColor_docField + ] + ); } if(isset($inputColor)){ - $hsbRange = ['H' => isset($offset_h) ? $offset_h : '+0', 'S' => isset($offset_s) ? $offset_s : '+0', 'B' => isset($offset_b) ? $offset_b : '+0']; - $outputFormat = isset($outputFormat) ? $outputFormat : 'hex'; + $hsbRange = [ + 'H' => + isset($offset_h) ? + $offset_h : + '+0' + , + 'S' => + isset($offset_s) ? + $offset_s : + '+0' + , + 'B' => + isset($offset_b) ? + $offset_b : + '+0' + ]; - $hsbMax = ['H' => 360, 'S' => 100, 'B' => 100]; + $outputFormat = + isset($outputFormat) ? + $outputFormat : + 'hex' + ; + + $hsbMax = [ + 'H' => 360, + 'S' => 100, + 'B' => 100 + ]; //Удалим из цвета символ '#' - $inputColor = str_replace('#', '', $inputColor); + $inputColor = str_replace( + '#', + '', + $inputColor + ); if(!function_exists('ddHEXtoHSB')){ function ddHEXtoHSB($hex){ //Получаем цвета в 10чной системе - $red = hexdec(substr($hex, 0, 2)); - $gre = hexdec(substr($hex, 2, 2)); - $blu = hexdec(substr($hex, 4, 2)); + $red = hexdec(substr( + $hex, + 0, + 2 + )); + $gre = hexdec(substr( + $hex, + 2, + 2 + )); + $blu = hexdec(substr( + $hex, + 4, + 2 + )); //Находим максимальное и минимальное значения - $max = max($red, $gre, $blu); - $min = min($red, $gre, $blu); + $max = max( + $red, + $gre, + $blu + ); + $min = min( + $red, + $gre, + $blu + ); $hsb = []; //Вычисляем яркость (от 0 до 100) @@ -134,15 +190,33 @@ function ddHSBtoHEX($hsb){ //Преобразуем цвет в HSB $hsb = ddHEXtoHSB($inputColor); - foreach($hsb AS $key => $val){ - $sim = preg_replace('/\d/', '', $hsbRange[$key]); - $hsbRange[$key] = preg_replace('/\D/', '', $hsbRange[$key]); + foreach( + $hsb as + $key => + $val + ){ + $sim = preg_replace( + '/\d/', + '', + $hsbRange[$key] + ); + $hsbRange[$key] = preg_replace( + '/\D/', + '', + $hsbRange[$key] + ); //Если нужно прибавить - if(strpos($sim, '+') !== false){ + if(strpos( + $sim, + '+' + ) !== false){ $hsb[$key] += $hsbRange[$key]; //Если нужно отнять - }else if(strpos($sim, '-') !== false){ + }else if(strpos( + $sim, + '-' + ) !== false){ $hsb[$key] -= $hsbRange[$key]; //Если нужно приравнять (если есть хоть какое-то число) }else if(strlen($hsbRange[$key]) > 0){ @@ -150,36 +224,65 @@ function ddHSBtoHEX($hsb){ } //Если нужно задать максимальное, либо минимальное значение - if(strpos($sim, 'abs') !== false){ + if(strpos( + $sim, + 'abs' + ) !== false){ //Если меньше 50% — 0, в противном случае — максимальное значение - $hsb[$key] = ($hsb[$key] < ($hsbMax[$key] / 2)) ? 0 : $hsbMax[$key]; + $hsb[$key] = + $hsb[$key] < ($hsbMax[$key] / 2) ? + 0 : + $hsbMax[$key] + ; } //Если нужно инвертировать - if(strpos($sim, 'r') !== false){ + if(strpos( + $sim, + 'r' + ) !== false){ $hsb[$key] = $hsbMax[$key] + (-1 * $hsb[$key]); } //Обрабатываем слишком маленькие значения - if($hsb[$key] < 0) $hsb[$key] = $hsbMax[$key] + $hsb[$key]; + if($hsb[$key] < 0){ + $hsb[$key] = $hsbMax[$key] + $hsb[$key]; + } } //Обрабатываем слишком большие значения - if($hsb['H'] > $hsbMax['H']) $hsb['H'] = $hsb['H'] - $hsbMax['H']; - if($hsb['S'] > $hsbMax['S']) $hsb['S'] = $hsbMax['S']; - if($hsb['B'] > $hsbMax['B']) $hsb['B'] = $hsbMax['B']; + if($hsb['H'] > $hsbMax['H']){ + $hsb['H'] = $hsb['H'] - $hsbMax['H']; + } + if($hsb['S'] > $hsbMax['S']){ + $hsb['S'] = $hsbMax['S']; + } + if($hsb['B'] > $hsbMax['B']){ + $hsb['B'] = $hsbMax['B']; + } //Результат $result = null; switch($outputFormat){ case 'hsb': - $result = $hsb['H'] . ',' .$hsb['S'] . ',' .$hsb['B']; - break; + $result = + $hsb['H'] . + ',' . + $hsb['S'] . + ',' . + $hsb['B'] + ; + break; + case 'hex': - $result = implode('', ddHSBtoHEX($hsb)); - break; + $result = implode( + '', + ddHSBtoHEX($hsb) + ); + break; } + return $result; } ?> \ No newline at end of file From b6b6b9386dae2e1c891e8f0a6add29f012631535 Mon Sep 17 00:00:00 2001 From: Ilyas Ronef Date: Fri, 29 Nov 2019 17:07:32 +0300 Subject: [PATCH 02/22] * The `outputFormat` parameter was renamed as `result_outputFormat`. --- ddColorTools.php | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/ddColorTools.php b/ddColorTools.php index a65f90d..c195d46 100644 --- a/ddColorTools.php +++ b/ddColorTools.php @@ -16,11 +16,22 @@ * @param $offset_h {string} — Смещение цветового тона в градусах [-360;+360]. `+` — прибавить, `-` — отнять, без знака — задать, `abs` — округлить до макс. или мин. значения, `r` — инвертировать. Default: `'+0'`. * @param $offset_s {string} — Смещение насыщенности в процентах [-100;+100]. `+` — прибавить, `-` — отнять, без знака — задать, `abs` — округлить до макс. или мин. значения, `r` — инвертировать. Default: `'+0'`. * @param $offset_b {string} — Смещение яркости в процентах [-100;+100]. `+` — прибавить, `-` — отнять, без знака — задать, `abs` — округлить до макс. или мин. значения, `r` — инвертировать. Default: `'+0'`. - * @param $outputFormat {'hex'|'hsb'} — Какой формат цвета возвращать. Default: `'hex'`. + * @param $result_outputFormat {'hex'|'hsb'} — Какой формат цвета возвращать. Default: `'hex'`. * * @copyright 2011–2017 DivanDesign {@link http://www.DivanDesign.biz } */ +//Include (MODX)EvolutionCMS.libraries.ddTools +require_once($modx->getConfig('base_path') . 'assets/libs/ddTools/modx.ddtools.class.php'); + +//Для обратной совместимости +extract(ddTools::verifyRenamedParams( + $params, + [ + 'result_outputFormat' => 'outputFormat' + ] +)); + //Если задано имя поля, которое необходимо получить if(isset($inputColor_docField)){ $inputColor = $modx->runSnippet( @@ -50,9 +61,9 @@ '+0' ]; - $outputFormat = - isset($outputFormat) ? - $outputFormat : + $result_outputFormat = + isset($result_outputFormat) ? + $result_outputFormat : 'hex' ; @@ -264,7 +275,7 @@ function ddHSBtoHEX($hsb){ //Результат $result = null; - switch($outputFormat){ + switch($result_outputFormat){ case 'hsb': $result = $hsb['H'] . From 99c9d8e1d56b2654df07fbd386a797615ce1c260 Mon Sep 17 00:00:00 2001 From: Ilyas Ronef Date: Fri, 29 Nov 2019 17:17:20 +0300 Subject: [PATCH 03/22] + `result_tpl`. + `result_tpl_placeholders`. --- ddColorTools.php | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/ddColorTools.php b/ddColorTools.php index c195d46..dcc13f4 100644 --- a/ddColorTools.php +++ b/ddColorTools.php @@ -6,7 +6,8 @@ * @desc Преобразует цвет в соответствии со смещением по тону, яркости или насыщенности. * * @uses PHP >= 5.6. - * @uses (MODX)EvolutionCMS.snippets.ddGetDocumentField >= 2.4 + * @uses [(MODX)EvolutionCMS.libraries.ddTools](https://code.divandesign.biz/modx/ddtools) >= 0.28 + * @uses [(MODX)EvolutionCMS.snippets.ddGetDocumentField](https://code.divandesign.biz/modx/ddgetdocumentfield) >= 2.4 * * @param $inputColor {string} — Цвет в HEX. @required * @example `ffffff` @@ -17,6 +18,10 @@ * @param $offset_s {string} — Смещение насыщенности в процентах [-100;+100]. `+` — прибавить, `-` — отнять, без знака — задать, `abs` — округлить до макс. или мин. значения, `r` — инвертировать. Default: `'+0'`. * @param $offset_b {string} — Смещение яркости в процентах [-100;+100]. `+` — прибавить, `-` — отнять, без знака — задать, `abs` — округлить до макс. или мин. значения, `r` — инвертировать. Default: `'+0'`. * @param $result_outputFormat {'hex'|'hsb'} — Какой формат цвета возвращать. Default: `'hex'`. + * @param $result_tpl {string_chunkName|string} — Chunk to parse result (chunk name or code via `@CODE:` prefix). Availiable placeholders: `[+ddResult+]`, `[+ddH+]`, `[+ddS+]`, `[+ddB+]`. Default: ``. + * @param $result_tpl_placeholders {stirng_json|string_queryFormated} — Additional data as [JSON](https://en.wikipedia.org/wiki/JSON) or [Query string](https://en.wikipedia.org/wiki/Query_string) has to be passed into `result_tpl`. Default: ``. + * @example `{"pladeholder1": "value1", "pagetitle": "My awesome pagetitle!"}` + * @example `pladeholder1=value1&pagetitle=My awesome pagetitle!` * * @copyright 2011–2017 DivanDesign {@link http://www.DivanDesign.biz } */ @@ -294,6 +299,31 @@ function ddHSBtoHEX($hsb){ break; } + if (!empty($result_tpl)){ + $result = [ + 'ddResult' => $result, + 'ddH' => $hsb['H'], + 'ddS' => $hsb['S'], + 'ddB' => $hsb['B'] + ]; + + //Если есть дополнительные данные + if ( + isset($result_tpl_placeholders) && + trim($result_tpl_placeholders) != '' + ){ + $result = array_merge( + $result, + ddTools::encodedStringToArray($result_tpl_placeholders) + ); + } + + $result = ddTools::parseText([ + 'text' => $modx->getTpl($result_tpl), + 'data' => $result + ]); + } + return $result; } ?> \ No newline at end of file From 7b1c2de918ade0f3cc477be1d2fd1ab3b9c4e047 Mon Sep 17 00:00:00 2001 From: Ilyas Ronef Date: Fri, 29 Nov 2019 18:08:26 +0300 Subject: [PATCH 04/22] + All `offset_` parameters supports multiple operations. --- ddColorTools.php | 137 ++++++++++++++++++++++++++--------------------- 1 file changed, 77 insertions(+), 60 deletions(-) diff --git a/ddColorTools.php b/ddColorTools.php index dcc13f4..e14c56a 100644 --- a/ddColorTools.php +++ b/ddColorTools.php @@ -14,9 +14,12 @@ * @example `#ffffff` * @param $inputColor_docField {string} — Имя поля (в котором содержится цвет) которое необходимо получить. Default: —. * @param $inputColor_docId {integer} — ID документа, поле которого нужно получить. Default: —. - * @param $offset_h {string} — Смещение цветового тона в градусах [-360;+360]. `+` — прибавить, `-` — отнять, без знака — задать, `abs` — округлить до макс. или мин. значения, `r` — инвертировать. Default: `'+0'`. - * @param $offset_s {string} — Смещение насыщенности в процентах [-100;+100]. `+` — прибавить, `-` — отнять, без знака — задать, `abs` — округлить до макс. или мин. значения, `r` — инвертировать. Default: `'+0'`. - * @param $offset_b {string} — Смещение яркости в процентах [-100;+100]. `+` — прибавить, `-` — отнять, без знака — задать, `abs` — округлить до макс. или мин. значения, `r` — инвертировать. Default: `'+0'`. + * @param $offset_h {string_commaSeparated} — Операции смещения цветового тона через запятую. Default: `'+0'`. + * @param $offset_h[i] {string} — Смещение цветового тона в градусах [-360;+360]. `+` — прибавить, `-` — отнять, без знака — задать, `abs` — округлить до макс. или мин. значения, `r` — инвертировать. @required + * @param $offset_s {string_commaSeparated} — Операции смещения насыщенности через запятую. Default: `'+0'`. + * @param $offset_s[i] {string_commaSeparated} — Смещение насыщенности в процентах [-100;+100]. `+` — прибавить, `-` — отнять, без знака — задать, `abs` — округлить до макс. или мин. значения, `r` — инвертировать. @required + * @param $offset_b {string_commaSeparated} — Операции смещения яркости через запятую. Default: `'+0'`. + * @param $offset_b[i] {string_commaSeparated} — Смещение яркости в процентах [-100;+100]. `+` — прибавить, `-` — отнять, без знака — задать, `abs` — округлить до макс. или мин. значения, `r` — инвертировать. @required * @param $result_outputFormat {'hex'|'hsb'} — Какой формат цвета возвращать. Default: `'hex'`. * @param $result_tpl {string_chunkName|string} — Chunk to parse result (chunk name or code via `@CODE:` prefix). Availiable placeholders: `[+ddResult+]`, `[+ddH+]`, `[+ddS+]`, `[+ddB+]`. Default: ``. * @param $result_tpl_placeholders {stirng_json|string_queryFormated} — Additional data as [JSON](https://en.wikipedia.org/wiki/JSON) or [Query string](https://en.wikipedia.org/wiki/Query_string) has to be passed into `result_tpl`. Default: ``. @@ -52,18 +55,27 @@ $hsbRange = [ 'H' => isset($offset_h) ? - $offset_h : - '+0' + explode( + ',', + $offset_h + ) : + ['+0'] , 'S' => isset($offset_s) ? - $offset_s : - '+0' + explode( + ',', + $offset_s + ) : + ['+0'] , 'B' => isset($offset_b) ? - $offset_b : - '+0' + explode( + ',', + $offset_b + ) : + ['+0'] ]; $result_outputFormat = @@ -211,58 +223,63 @@ function ddHSBtoHEX($hsb){ $key => $val ){ - $sim = preg_replace( - '/\d/', - '', - $hsbRange[$key] - ); - $hsbRange[$key] = preg_replace( - '/\D/', - '', - $hsbRange[$key] - ); - - //Если нужно прибавить - if(strpos( - $sim, - '+' - ) !== false){ - $hsb[$key] += $hsbRange[$key]; - //Если нужно отнять - }else if(strpos( - $sim, - '-' - ) !== false){ - $hsb[$key] -= $hsbRange[$key]; + foreach ( + $hsbRange[$key] as + $operation + ){ + $sim = preg_replace( + '/\d/', + '', + $operation + ); + $operation = preg_replace( + '/\D/', + '', + $operation + ); + + //Если нужно прибавить + if(strpos( + $sim, + '+' + ) !== false){ + $hsb[$key] += $operation; + //Если нужно отнять + }else if(strpos( + $sim, + '-' + ) !== false){ + $hsb[$key] -= $operation; //Если нужно приравнять (если есть хоть какое-то число) - }else if(strlen($hsbRange[$key]) > 0){ - $hsb[$key] = $hsbRange[$key]; - } - - //Если нужно задать максимальное, либо минимальное значение - if(strpos( - $sim, - 'abs' - ) !== false){ - //Если меньше 50% — 0, в противном случае — максимальное значение - $hsb[$key] = - $hsb[$key] < ($hsbMax[$key] / 2) ? - 0 : - $hsbMax[$key] - ; - } - - //Если нужно инвертировать - if(strpos( - $sim, - 'r' - ) !== false){ - $hsb[$key] = $hsbMax[$key] + (-1 * $hsb[$key]); - } - - //Обрабатываем слишком маленькие значения - if($hsb[$key] < 0){ - $hsb[$key] = $hsbMax[$key] + $hsb[$key]; + }else if(strlen($operation) > 0){ + $hsb[$key] = $operation; + } + + //Если нужно задать максимальное, либо минимальное значение + if(strpos( + $sim, + 'abs' + ) !== false){ + //Если меньше 50% — 0, в противном случае — максимальное значение + $hsb[$key] = + $hsb[$key] < ($hsbMax[$key] / 2) ? + 0 : + $hsbMax[$key] + ; + } + + //Если нужно инвертировать + if(strpos( + $sim, + 'r' + ) !== false){ + $hsb[$key] = $hsbMax[$key] + (-1 * $hsb[$key]); + } + + //Обрабатываем слишком маленькие значения + if($hsb[$key] < 0){ + $hsb[$key] = $hsbMax[$key] + $hsb[$key]; + } } } From af7b92bb84733339d890abe0d1229d1c4722ecc0 Mon Sep 17 00:00:00 2001 From: Ilyas Ronef Date: Sat, 30 Nov 2019 12:10:21 +0300 Subject: [PATCH 05/22] * Support the new version of EvolutionCMS.snippets.ddGetDocumentField. --- ddColorTools.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ddColorTools.php b/ddColorTools.php index e14c56a..bf5b633 100644 --- a/ddColorTools.php +++ b/ddColorTools.php @@ -7,7 +7,7 @@ * * @uses PHP >= 5.6. * @uses [(MODX)EvolutionCMS.libraries.ddTools](https://code.divandesign.biz/modx/ddtools) >= 0.28 - * @uses [(MODX)EvolutionCMS.snippets.ddGetDocumentField](https://code.divandesign.biz/modx/ddgetdocumentfield) >= 2.4 + * @uses [(MODX)EvolutionCMS.snippets.ddGetDocumentField](https://code.divandesign.biz/modx/ddgetdocumentfield) >= 2.8 * * @param $inputColor {string} — Цвет в HEX. @required * @example `ffffff` @@ -45,8 +45,8 @@ $inputColor = $modx->runSnippet( 'ddGetDocumentField', [ - 'id' => $inputColor_docId, - 'field' => $inputColor_docField + 'docId' => $inputColor_docId, + 'docField' => $inputColor_docField ] ); } From 55685f6b2ab6be5806bcd6c4c1f9c382ac5a328d Mon Sep 17 00:00:00 2001 From: Ilyas Ronef Date: Sat, 30 Nov 2019 13:30:49 +0300 Subject: [PATCH 06/22] * Attention! Backward compatibility is broken. * `HSB` renamed as `HSL` inside the snippet. * If `result_outputFormat` == `hsl` then full color string will be returned (`hsl(0, 0%, 0%)`). --- ddColorTools.php | 127 +++++++++++++++++++++++++++-------------------- 1 file changed, 72 insertions(+), 55 deletions(-) diff --git a/ddColorTools.php b/ddColorTools.php index bf5b633..e0334bb 100644 --- a/ddColorTools.php +++ b/ddColorTools.php @@ -18,10 +18,10 @@ * @param $offset_h[i] {string} — Смещение цветового тона в градусах [-360;+360]. `+` — прибавить, `-` — отнять, без знака — задать, `abs` — округлить до макс. или мин. значения, `r` — инвертировать. @required * @param $offset_s {string_commaSeparated} — Операции смещения насыщенности через запятую. Default: `'+0'`. * @param $offset_s[i] {string_commaSeparated} — Смещение насыщенности в процентах [-100;+100]. `+` — прибавить, `-` — отнять, без знака — задать, `abs` — округлить до макс. или мин. значения, `r` — инвертировать. @required - * @param $offset_b {string_commaSeparated} — Операции смещения яркости через запятую. Default: `'+0'`. - * @param $offset_b[i] {string_commaSeparated} — Смещение яркости в процентах [-100;+100]. `+` — прибавить, `-` — отнять, без знака — задать, `abs` — округлить до макс. или мин. значения, `r` — инвертировать. @required - * @param $result_outputFormat {'hex'|'hsb'} — Какой формат цвета возвращать. Default: `'hex'`. - * @param $result_tpl {string_chunkName|string} — Chunk to parse result (chunk name or code via `@CODE:` prefix). Availiable placeholders: `[+ddResult+]`, `[+ddH+]`, `[+ddS+]`, `[+ddB+]`. Default: ``. + * @param $offset_l {string_commaSeparated} — Операции смещения яркости через запятую. Default: `'+0'`. + * @param $offset_l[i] {string_commaSeparated} — Смещение яркости в процентах [-100;+100]. `+` — прибавить, `-` — отнять, без знака — задать, `abs` — округлить до макс. или мин. значения, `r` — инвертировать. @required + * @param $result_outputFormat {'hex'|'hsl'} — Какой формат цвета возвращать. Default: `'hex'`. + * @param $result_tpl {string_chunkName|string} — Chunk to parse result (chunk name or code via `@CODE:` prefix). Availiable placeholders: `[+ddResult+]`, `[+ddH+]`, `[+ddS+]`, `[+ddL+]`. Default: ``. * @param $result_tpl_placeholders {stirng_json|string_queryFormated} — Additional data as [JSON](https://en.wikipedia.org/wiki/JSON) or [Query string](https://en.wikipedia.org/wiki/Query_string) has to be passed into `result_tpl`. Default: ``. * @example `{"pladeholder1": "value1", "pagetitle": "My awesome pagetitle!"}` * @example `pladeholder1=value1&pagetitle=My awesome pagetitle!` @@ -52,7 +52,7 @@ } if(isset($inputColor)){ - $hsbRange = [ + $hslRange = [ 'H' => isset($offset_h) ? explode( @@ -69,11 +69,11 @@ ) : ['+0'] , - 'B' => - isset($offset_b) ? + 'L' => + isset($offset_l) ? explode( ',', - $offset_b + $offset_l ) : ['+0'] ]; @@ -84,10 +84,10 @@ 'hex' ; - $hsbMax = [ + $hslMax = [ 'H' => 360, 'S' => 100, - 'B' => 100 + 'L' => 100 ]; //Удалим из цвета символ '#' @@ -97,8 +97,8 @@ $inputColor ); - if(!function_exists('ddHEXtoHSB')){ - function ddHEXtoHSB($hex){ + if(!function_exists('ddHEXtoHSL')){ + function ddHEXtoHSL($hex){ //Получаем цвета в 10чной системе $red = hexdec(substr( $hex, @@ -128,41 +128,56 @@ function ddHEXtoHSB($hex){ $blu ); - $hsb = []; + $hsl = []; //Вычисляем яркость (от 0 до 100) - $hsb['B'] = round($max * 100 / 255); + $hsl['L'] = round(($max + $min) / 2 * 100 / 255); //Если цвет серый if($max == $min){ - $hsb['S'] = 0; - $hsb['H'] = 0; + $hsl['S'] = 0; + $hsl['H'] = 0; }else{ //Вычисляем насыщенность - $hsb['S'] = round(100 * ($max - $min) / $max); + $hsl['S'] = round( + ( + $hsl['L'] > 50 ? + ( + ($max - $min) / + (2 * 255 - $max - $min) + ) : + ( + ($max - $min) / + ($max + $min) + ) + ) * + 100 + ); + //Вычисляем тон $hue = 0; $tmpR = ($max - $red) / ($max - $min); $tmpG = ($max - $gre) / ($max - $min); - $tmpB = ($max - $blu) / ($max - $min); + $tmpL = ($max - $blu) / ($max - $min); if($red == $max){ - $hue = $tmpB - $tmpG; + $hue = $tmpL - $tmpG; }else if($gre == $max){ - $hue = 2 + $tmpR - $tmpB; + $hue = 2 + $tmpR - $tmpL; }else if($blu == $max){ $hue = 4 + $tmpG - $tmpR; } - $hsb['H'] = (round($hue * 60) + 360) % 360; + + $hsl['H'] = (round($hue * 60) + 360) % 360; } - return $hsb; + return $hsl; } } - if(!function_exists('ddHSBtoHEX')){ - function ddHSBtoHEX($hsb){ - $sat = $hsb['S']; - $bri = $hsb['B']; + if(!function_exists('ddHSLtoHEX')){ + function ddHSLtoHEX($hsl){ + $sat = $hsl['S']; + $bri = $hsl['L']; $rgb = []; @@ -172,7 +187,7 @@ function ddHSBtoHEX($hsb){ $rgb['G'] = $bri; $rgb['B'] = $bri; }else{ - $hue = ($hsb['H'] + 360) % 360; + $hue = ($hsl['H'] + 360) % 360; $hue2 = floor($hue / 60); $dif = ($hue % 60) / 60; @@ -215,16 +230,16 @@ function ddHSBtoHEX($hsb){ } } - //Преобразуем цвет в HSB - $hsb = ddHEXtoHSB($inputColor); + //Преобразуем цвет в HSL + $hsl = ddHEXtoHSL($inputColor); foreach( - $hsb as + $hsl as $key => $val ){ foreach ( - $hsbRange[$key] as + $hslRange[$key] as $operation ){ $sim = preg_replace( @@ -243,16 +258,16 @@ function ddHSBtoHEX($hsb){ $sim, '+' ) !== false){ - $hsb[$key] += $operation; + $hsl[$key] += $operation; //Если нужно отнять }else if(strpos( $sim, '-' ) !== false){ - $hsb[$key] -= $operation; + $hsl[$key] -= $operation; //Если нужно приравнять (если есть хоть какое-то число) }else if(strlen($operation) > 0){ - $hsb[$key] = $operation; + $hsl[$key] = $operation; } //Если нужно задать максимальное, либо минимальное значение @@ -261,10 +276,10 @@ function ddHSBtoHEX($hsb){ 'abs' ) !== false){ //Если меньше 50% — 0, в противном случае — максимальное значение - $hsb[$key] = - $hsb[$key] < ($hsbMax[$key] / 2) ? + $hsl[$key] = + $hsl[$key] < ($hslMax[$key] / 2) ? 0 : - $hsbMax[$key] + $hslMax[$key] ; } @@ -273,45 +288,47 @@ function ddHSBtoHEX($hsb){ $sim, 'r' ) !== false){ - $hsb[$key] = $hsbMax[$key] + (-1 * $hsb[$key]); + $hsl[$key] = $hslMax[$key] + (-1 * $hsl[$key]); } //Обрабатываем слишком маленькие значения - if($hsb[$key] < 0){ - $hsb[$key] = $hsbMax[$key] + $hsb[$key]; + if($hsl[$key] < 0){ + $hsl[$key] = $hslMax[$key] + $hsl[$key]; } } } //Обрабатываем слишком большие значения - if($hsb['H'] > $hsbMax['H']){ - $hsb['H'] = $hsb['H'] - $hsbMax['H']; + if($hsl['H'] > $hslMax['H']){ + $hsl['H'] = $hsl['H'] - $hslMax['H']; } - if($hsb['S'] > $hsbMax['S']){ - $hsb['S'] = $hsbMax['S']; + if($hsl['S'] > $hslMax['S']){ + $hsl['S'] = $hslMax['S']; } - if($hsb['B'] > $hsbMax['B']){ - $hsb['B'] = $hsbMax['B']; + if($hsl['L'] > $hslMax['L']){ + $hsl['L'] = $hslMax['L']; } //Результат $result = null; switch($result_outputFormat){ - case 'hsb': + case 'hsl': $result = - $hsb['H'] . - ',' . - $hsb['S'] . + 'hsl(' . + $hsl['H'] . ',' . - $hsb['B'] + $hsl['S'] . + '%,' . + $hsl['L'] . + '%)' ; break; case 'hex': $result = implode( '', - ddHSBtoHEX($hsb) + ddHSLtoHEX($hsl) ); break; } @@ -319,9 +336,9 @@ function ddHSBtoHEX($hsb){ if (!empty($result_tpl)){ $result = [ 'ddResult' => $result, - 'ddH' => $hsb['H'], - 'ddS' => $hsb['S'], - 'ddB' => $hsb['B'] + 'ddH' => $hsl['H'], + 'ddS' => $hsl['S'], + 'ddL' => $hsl['L'] ]; //Если есть дополнительные данные From b0e561f86431b3c9970a78ccabab45b0b179f50b Mon Sep 17 00:00:00 2001 From: Ilyas Ronef Date: Sat, 30 Nov 2019 13:37:12 +0300 Subject: [PATCH 07/22] * The snippet must return an empty string even if result is absent. --- ddColorTools.php | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/ddColorTools.php b/ddColorTools.php index e0334bb..bf2d072 100644 --- a/ddColorTools.php +++ b/ddColorTools.php @@ -40,6 +40,9 @@ ] )); +//The snippet must return an empty string even if result is absent +$snippetResult = ''; + //Если задано имя поля, которое необходимо получить if(isset($inputColor_docField)){ $inputColor = $modx->runSnippet( @@ -309,12 +312,9 @@ function ddHSLtoHEX($hsl){ $hsl['L'] = $hslMax['L']; } - //Результат - $result = null; - switch($result_outputFormat){ case 'hsl': - $result = + $snippetResult = 'hsl(' . $hsl['H'] . ',' . @@ -326,7 +326,7 @@ function ddHSLtoHEX($hsl){ break; case 'hex': - $result = implode( + $snippetResult = implode( '', ddHSLtoHEX($hsl) ); @@ -334,8 +334,8 @@ function ddHSLtoHEX($hsl){ } if (!empty($result_tpl)){ - $result = [ - 'ddResult' => $result, + $snippetResult = [ + 'ddResult' => $snippetResult, 'ddH' => $hsl['H'], 'ddS' => $hsl['S'], 'ddL' => $hsl['L'] @@ -346,18 +346,18 @@ function ddHSLtoHEX($hsl){ isset($result_tpl_placeholders) && trim($result_tpl_placeholders) != '' ){ - $result = array_merge( - $result, + $snippetResult = array_merge( + $snippetResult, ddTools::encodedStringToArray($result_tpl_placeholders) ); } - $result = ddTools::parseText([ + $snippetResult = ddTools::parseText([ 'text' => $modx->getTpl($result_tpl), - 'data' => $result + 'data' => $snippetResult ]); } - - return $result; } + +return $snippetResult; ?> \ No newline at end of file From 3ae6e94615bafe8d36880f990968e94b7e513301 Mon Sep 17 00:00:00 2001 From: Ilyas Ronef Date: Wed, 11 Mar 2020 22:02:27 +0300 Subject: [PATCH 08/22] * Minor changes. --- ddColorTools.php | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/ddColorTools.php b/ddColorTools.php index bf2d072..df7fba3 100644 --- a/ddColorTools.php +++ b/ddColorTools.php @@ -30,10 +30,13 @@ */ //Include (MODX)EvolutionCMS.libraries.ddTools -require_once($modx->getConfig('base_path') . 'assets/libs/ddTools/modx.ddtools.class.php'); +require_once( + $modx->getConfig('base_path') . + 'assets/libs/ddTools/modx.ddtools.class.php' +); //Для обратной совместимости -extract(ddTools::verifyRenamedParams( +extract(\ddTools::verifyRenamedParams( $params, [ 'result_outputFormat' => 'outputFormat' @@ -348,11 +351,11 @@ function ddHSLtoHEX($hsl){ ){ $snippetResult = array_merge( $snippetResult, - ddTools::encodedStringToArray($result_tpl_placeholders) + \ddTools::encodedStringToArray($result_tpl_placeholders) ); } - $snippetResult = ddTools::parseText([ + $snippetResult = \ddTools::parseText([ 'text' => $modx->getTpl($result_tpl), 'data' => $snippetResult ]); From d75fa87aa0ccdc1f61574352b1e77a8dbd086b51 Mon Sep 17 00:00:00 2001 From: Ilyas Ronef Date: Fri, 8 May 2020 05:04:31 +0300 Subject: [PATCH 09/22] + Composer.json. --- composer.json | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 composer.json diff --git a/composer.json b/composer.json new file mode 100644 index 0000000..1e0cf66 --- /dev/null +++ b/composer.json @@ -0,0 +1,28 @@ +{ + "name": "dd/evolutioncms-snippets-ddcolortools", + "type": "modxevo-snippet", + "version": "2.0.0", + "description": "Преобразует цвет в соответствии со смещением по тону, яркости или насыщенности.", + "keywords": [ + "modx", + "modx evo", + "modx evolution", + "evo", + "evo cms", + "evolutioncms", + "evolution cms", + "dd group", + "dd studio", + "divandesign", + "ddcolortools", + "color tools", + "color convert", + "hsl convert", + "rgb to hsl" + ], + "require": { + "php": ">=5.4.0", + "dd/evolutioncms-libraries-ddtools": ">=0.30.0", + "dd/evolutioncms-snippets-ddgetdocumentfield": ">=2.8.0" + } +} \ No newline at end of file From 74e1a8b606692570e61ac158a75a326c0dfa01a3 Mon Sep 17 00:00:00 2001 From: Ilyas Ronef Date: Fri, 8 May 2020 05:05:01 +0300 Subject: [PATCH 10/22] * File name refactoring. --- ddColorTools.php => ddColorTools_snippet.php | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename ddColorTools.php => ddColorTools_snippet.php (100%) diff --git a/ddColorTools.php b/ddColorTools_snippet.php similarity index 100% rename from ddColorTools.php rename to ddColorTools_snippet.php From 506021144d62b423656bac9d8e7d405012edff1d Mon Sep 17 00:00:00 2001 From: Ilyas Ronef Date: Fri, 8 May 2020 05:09:22 +0300 Subject: [PATCH 11/22] * Attention! (MODX)EvolutionCMS.snippets.ddGetDocumentField >= 2.10.1 is required. * Compatibility with (MODX)EvolutionCMS.snippets.ddGetDocumentField >= 2.10.1. --- composer.json | 2 +- ddColorTools_snippet.php | 13 +++++++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/composer.json b/composer.json index 1e0cf66..80c9f60 100644 --- a/composer.json +++ b/composer.json @@ -23,6 +23,6 @@ "require": { "php": ">=5.4.0", "dd/evolutioncms-libraries-ddtools": ">=0.30.0", - "dd/evolutioncms-snippets-ddgetdocumentfield": ">=2.8.0" + "dd/evolutioncms-snippets-ddgetdocumentfield": ">=2.10.1" } } \ No newline at end of file diff --git a/ddColorTools_snippet.php b/ddColorTools_snippet.php index df7fba3..7d136b6 100644 --- a/ddColorTools_snippet.php +++ b/ddColorTools_snippet.php @@ -7,7 +7,7 @@ * * @uses PHP >= 5.6. * @uses [(MODX)EvolutionCMS.libraries.ddTools](https://code.divandesign.biz/modx/ddtools) >= 0.28 - * @uses [(MODX)EvolutionCMS.snippets.ddGetDocumentField](https://code.divandesign.biz/modx/ddgetdocumentfield) >= 2.8 + * @uses [(MODX)EvolutionCMS.snippets.ddGetDocumentField](https://code.divandesign.biz/modx/ddgetdocumentfield) >= 2.10.1 * * @param $inputColor {string} — Цвет в HEX. @required * @example `ffffff` @@ -45,14 +45,19 @@ //The snippet must return an empty string even if result is absent $snippetResult = ''; - //Если задано имя поля, которое необходимо получить if(isset($inputColor_docField)){ $inputColor = $modx->runSnippet( 'ddGetDocumentField', [ - 'docId' => $inputColor_docId, - 'docField' => $inputColor_docField + 'dataProviderParams' => '{ + "resourceId": "' . + $inputColor_docId . + '", + "resourceFields": "' . + $inputColor_docField . + '", + }' ] ); } From c8d5ebf3432fb5d0c8245b393e96b75e3ad5a425 Mon Sep 17 00:00:00 2001 From: Ilyas Ronef Date: Fri, 8 May 2020 05:11:55 +0300 Subject: [PATCH 12/22] * Attention! (MODX)EvolutionCMS.libraries.ddTools >= 0.32 is required. * Compatibility with (MODX)EvolutionCMS.libraries.ddTools >= 0.32. --- composer.json | 2 +- ddColorTools_snippet.php | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/composer.json b/composer.json index 80c9f60..7646278 100644 --- a/composer.json +++ b/composer.json @@ -22,7 +22,7 @@ ], "require": { "php": ">=5.4.0", - "dd/evolutioncms-libraries-ddtools": ">=0.30.0", + "dd/evolutioncms-libraries-ddtools": ">=0.32.0", "dd/evolutioncms-snippets-ddgetdocumentfield": ">=2.10.1" } } \ No newline at end of file diff --git a/ddColorTools_snippet.php b/ddColorTools_snippet.php index 7d136b6..d37b84f 100644 --- a/ddColorTools_snippet.php +++ b/ddColorTools_snippet.php @@ -6,7 +6,7 @@ * @desc Преобразует цвет в соответствии со смещением по тону, яркости или насыщенности. * * @uses PHP >= 5.6. - * @uses [(MODX)EvolutionCMS.libraries.ddTools](https://code.divandesign.biz/modx/ddtools) >= 0.28 + * @uses [(MODX)EvolutionCMS.libraries.ddTools](https://code.divandesign.biz/modx/ddtools) >= 0.32 * @uses [(MODX)EvolutionCMS.snippets.ddGetDocumentField](https://code.divandesign.biz/modx/ddgetdocumentfield) >= 2.10.1 * * @param $inputColor {string} — Цвет в HEX. @required @@ -36,12 +36,12 @@ ); //Для обратной совместимости -extract(\ddTools::verifyRenamedParams( - $params, - [ +extract(\ddTools::verifyRenamedParams([ + 'params' => $params, + 'compliance' => [ 'result_outputFormat' => 'outputFormat' ] -)); +])); //The snippet must return an empty string even if result is absent $snippetResult = ''; From 0b61c70c6c7e09feaee8194e20e9db787eac10b8 Mon Sep 17 00:00:00 2001 From: Ilyas Ronef Date: Fri, 8 May 2020 05:19:59 +0300 Subject: [PATCH 13/22] * Variable names refactoring. --- ddColorTools_snippet.php | 122 +++++++++++++++++++-------------------- 1 file changed, 61 insertions(+), 61 deletions(-) diff --git a/ddColorTools_snippet.php b/ddColorTools_snippet.php index d37b84f..60eb9fa 100644 --- a/ddColorTools_snippet.php +++ b/ddColorTools_snippet.php @@ -116,12 +116,12 @@ function ddHEXtoHSL($hex){ 0, 2 )); - $gre = hexdec(substr( + $green = hexdec(substr( $hex, 2, 2 )); - $blu = hexdec(substr( + $blue = hexdec(substr( $hex, 4, 2 @@ -130,28 +130,28 @@ function ddHEXtoHSL($hex){ //Находим максимальное и минимальное значения $max = max( $red, - $gre, - $blu + $green, + $blue ); $min = min( $red, - $gre, - $blu + $green, + $blue ); - $hsl = []; + $resultHsl = []; //Вычисляем яркость (от 0 до 100) - $hsl['L'] = round(($max + $min) / 2 * 100 / 255); + $resultHsl['L'] = round(($max + $min) / 2 * 100 / 255); //Если цвет серый if($max == $min){ - $hsl['S'] = 0; - $hsl['H'] = 0; + $resultHsl['S'] = 0; + $resultHsl['H'] = 0; }else{ //Вычисляем насыщенность - $hsl['S'] = round( + $resultHsl['S'] = round( ( - $hsl['L'] > 50 ? + $resultHsl['L'] > 50 ? ( ($max - $min) / (2 * 255 - $max - $min) @@ -167,67 +167,67 @@ function ddHEXtoHSL($hex){ //Вычисляем тон $hue = 0; $tmpR = ($max - $red) / ($max - $min); - $tmpG = ($max - $gre) / ($max - $min); - $tmpL = ($max - $blu) / ($max - $min); + $tmpG = ($max - $green) / ($max - $min); + $tmpL = ($max - $blue) / ($max - $min); if($red == $max){ $hue = $tmpL - $tmpG; - }else if($gre == $max){ + }else if($green == $max){ $hue = 2 + $tmpR - $tmpL; - }else if($blu == $max){ + }else if($blue == $max){ $hue = 4 + $tmpG - $tmpR; } - $hsl['H'] = (round($hue * 60) + 360) % 360; + $resultHsl['H'] = (round($hue * 60) + 360) % 360; } - return $hsl; + return $resultHsl; } } if(!function_exists('ddHSLtoHEX')){ function ddHSLtoHEX($hsl){ - $sat = $hsl['S']; - $bri = $hsl['L']; + $saturation = $hsl['S']; + $lightness = $hsl['L']; $rgb = []; //Если цвет серый - if($sat == 0){ - $rgb['R'] = $bri; - $rgb['G'] = $bri; - $rgb['B'] = $bri; + if($saturation == 0){ + $rgb['R'] = $lightness; + $rgb['G'] = $lightness; + $rgb['B'] = $lightness; }else{ $hue = ($hsl['H'] + 360) % 360; $hue2 = floor($hue / 60); $dif = ($hue % 60) / 60; - $mid1 = $bri * (100 - $sat * $dif) / 100; - $mid2 = $bri * (100 - $sat * (1 - $dif)) / 100; - $min = $bri * (100 - $sat) / 100; + $mid1 = $lightness * (100 - $saturation * $dif) / 100; + $mid2 = $lightness * (100 - $saturation * (1 - $dif)) / 100; + $min = $lightness * (100 - $saturation) / 100; if($hue2 == 0){ - $rgb['R'] = $bri; + $rgb['R'] = $lightness; $rgb['G'] = $mid2; $rgb['B'] = $min; }else if($hue2 == 1){ $rgb['R'] = $mid1; - $rgb['G'] = $bri; + $rgb['G'] = $lightness; $rgb['B'] = $min; }else if($hue2 == 2){ $rgb['R'] = $min; - $rgb['G'] = $bri; + $rgb['G'] = $lightness; $rgb['B'] = $mid2; }else if($hue2 == 3){ $rgb['R'] = $min; $rgb['G'] = $mid1; - $rgb['B'] = $bri; + $rgb['B'] = $lightness; }else if($hue2 == 4){ $rgb['R'] = $mid2; $rgb['G'] = $min; - $rgb['B'] = $bri; + $rgb['B'] = $lightness; }else{ - $rgb['R'] = $bri; + $rgb['R'] = $lightness; $rgb['G'] = $min; $rgb['B'] = $mid1; } @@ -242,10 +242,10 @@ function ddHSLtoHEX($hsl){ } //Преобразуем цвет в HSL - $hsl = ddHEXtoHSL($inputColor); + $inputColorHsl = ddHEXtoHSL($inputColor); foreach( - $hsl as + $inputColorHsl as $key => $val ){ @@ -253,7 +253,7 @@ function ddHSLtoHEX($hsl){ $hslRange[$key] as $operation ){ - $sim = preg_replace( + $operation_sign = preg_replace( '/\d/', '', $operation @@ -266,29 +266,29 @@ function ddHSLtoHEX($hsl){ //Если нужно прибавить if(strpos( - $sim, + $operation_sign, '+' ) !== false){ - $hsl[$key] += $operation; + $inputColorHsl[$key] += $operation; //Если нужно отнять }else if(strpos( - $sim, + $operation_sign, '-' ) !== false){ - $hsl[$key] -= $operation; + $inputColorHsl[$key] -= $operation; //Если нужно приравнять (если есть хоть какое-то число) }else if(strlen($operation) > 0){ - $hsl[$key] = $operation; + $inputColorHsl[$key] = $operation; } //Если нужно задать максимальное, либо минимальное значение if(strpos( - $sim, + $operation_sign, 'abs' ) !== false){ //Если меньше 50% — 0, в противном случае — максимальное значение - $hsl[$key] = - $hsl[$key] < ($hslMax[$key] / 2) ? + $inputColorHsl[$key] = + $inputColorHsl[$key] < ($hslMax[$key] / 2) ? 0 : $hslMax[$key] ; @@ -296,39 +296,39 @@ function ddHSLtoHEX($hsl){ //Если нужно инвертировать if(strpos( - $sim, + $operation_sign, 'r' ) !== false){ - $hsl[$key] = $hslMax[$key] + (-1 * $hsl[$key]); + $inputColorHsl[$key] = $hslMax[$key] + (-1 * $inputColorHsl[$key]); } //Обрабатываем слишком маленькие значения - if($hsl[$key] < 0){ - $hsl[$key] = $hslMax[$key] + $hsl[$key]; + if($inputColorHsl[$key] < 0){ + $inputColorHsl[$key] = $hslMax[$key] + $inputColorHsl[$key]; } } } //Обрабатываем слишком большие значения - if($hsl['H'] > $hslMax['H']){ - $hsl['H'] = $hsl['H'] - $hslMax['H']; + if($inputColorHsl['H'] > $hslMax['H']){ + $inputColorHsl['H'] = $inputColorHsl['H'] - $hslMax['H']; } - if($hsl['S'] > $hslMax['S']){ - $hsl['S'] = $hslMax['S']; + if($inputColorHsl['S'] > $hslMax['S']){ + $inputColorHsl['S'] = $hslMax['S']; } - if($hsl['L'] > $hslMax['L']){ - $hsl['L'] = $hslMax['L']; + if($inputColorHsl['L'] > $hslMax['L']){ + $inputColorHsl['L'] = $hslMax['L']; } switch($result_outputFormat){ case 'hsl': $snippetResult = 'hsl(' . - $hsl['H'] . + $inputColorHsl['H'] . ',' . - $hsl['S'] . + $inputColorHsl['S'] . '%,' . - $hsl['L'] . + $inputColorHsl['L'] . '%)' ; break; @@ -336,7 +336,7 @@ function ddHSLtoHEX($hsl){ case 'hex': $snippetResult = implode( '', - ddHSLtoHEX($hsl) + ddHSLtoHEX($inputColorHsl) ); break; } @@ -344,9 +344,9 @@ function ddHSLtoHEX($hsl){ if (!empty($result_tpl)){ $snippetResult = [ 'ddResult' => $snippetResult, - 'ddH' => $hsl['H'], - 'ddS' => $hsl['S'], - 'ddL' => $hsl['L'] + 'ddH' => $inputColorHsl['H'], + 'ddS' => $inputColorHsl['S'], + 'ddL' => $inputColorHsl['L'] ]; //Если есть дополнительные данные From 341b2865c1b0e073b70ec359c3a671f4327485dd Mon Sep 17 00:00:00 2001 From: Ilyas Ronef Date: Fri, 8 May 2020 05:27:26 +0300 Subject: [PATCH 14/22] * Minor changes. --- ddColorTools_snippet.php | 83 ++++++++++++++++++++++++++++++++-------- 1 file changed, 66 insertions(+), 17 deletions(-) diff --git a/ddColorTools_snippet.php b/ddColorTools_snippet.php index 60eb9fa..1412e49 100644 --- a/ddColorTools_snippet.php +++ b/ddColorTools_snippet.php @@ -26,7 +26,7 @@ * @example `{"pladeholder1": "value1", "pagetitle": "My awesome pagetitle!"}` * @example `pladeholder1=value1&pagetitle=My awesome pagetitle!` * - * @copyright 2011–2017 DivanDesign {@link http://www.DivanDesign.biz } + * @copyright 2011–2017 DD Group {@link http://www.DivanDesign.biz } */ //Include (MODX)EvolutionCMS.libraries.ddTools @@ -35,7 +35,7 @@ 'assets/libs/ddTools/modx.ddtools.class.php' ); -//Для обратной совместимости +//Backward compatibility extract(\ddTools::verifyRenamedParams([ 'params' => $params, 'compliance' => [ @@ -166,9 +166,18 @@ function ddHEXtoHSL($hex){ //Вычисляем тон $hue = 0; - $tmpR = ($max - $red) / ($max - $min); - $tmpG = ($max - $green) / ($max - $min); - $tmpL = ($max - $blue) / ($max - $min); + $tmpR = + ($max - $red) / + ($max - $min) + ; + $tmpG = + ($max - $green) / + ($max - $min) + ; + $tmpL = + ($max - $blue) / + ($max - $min) + ; if($red == $max){ $hue = $tmpL - $tmpG; @@ -178,7 +187,13 @@ function ddHEXtoHSL($hex){ $hue = 4 + $tmpG - $tmpR; } - $resultHsl['H'] = (round($hue * 60) + 360) % 360; + $resultHsl['H'] = + ( + round($hue * 60) + + 360 + ) % + 360 + ; } return $resultHsl; @@ -201,10 +216,31 @@ function ddHSLtoHEX($hsl){ $hue = ($hsl['H'] + 360) % 360; $hue2 = floor($hue / 60); - $dif = ($hue % 60) / 60; - $mid1 = $lightness * (100 - $saturation * $dif) / 100; - $mid2 = $lightness * (100 - $saturation * (1 - $dif)) / 100; - $min = $lightness * (100 - $saturation) / 100; + $dif = + ($hue % 60) / + 60 + ; + $mid1 = + $lightness * + ( + 100 - + $saturation * $dif + ) / + 100 + ; + $mid2 = + $lightness * + ( + 100 - + $saturation * (1 - $dif) + ) / + 100 + ; + $min = + $lightness * + (100 - $saturation) / + 100 + ; if($hue2 == 0){ $rgb['R'] = $lightness; @@ -232,12 +268,19 @@ function ddHSLtoHEX($hsl){ $rgb['B'] = $mid1; } } + //Обходим массив и преобразовываем все значения в hex (предварительно переводим из системы счисления от 0 до 100 в от 0 до 255) - return array_map(create_function('$a', ' - $res = dechex(round($a*255/100)); - //Если не хватает ноля, дописываем - return (strlen($res) < 2) ? "0".$res : $res; - '), $rgb); + return array_map( + create_function( + '$a', + ' + $res = dechex(round($a*255/100)); + //Если не хватает ноля, дописываем + return (strlen($res) < 2) ? "0".$res : $res; + ' + ), + $rgb + ); } } @@ -299,12 +342,18 @@ function ddHSLtoHEX($hsl){ $operation_sign, 'r' ) !== false){ - $inputColorHsl[$key] = $hslMax[$key] + (-1 * $inputColorHsl[$key]); + $inputColorHsl[$key] = + $hslMax[$key] + + (-1 * $inputColorHsl[$key]) + ; } //Обрабатываем слишком маленькие значения if($inputColorHsl[$key] < 0){ - $inputColorHsl[$key] = $hslMax[$key] + $inputColorHsl[$key]; + $inputColorHsl[$key] = + $hslMax[$key] + + $inputColorHsl[$key] + ; } } } From 7facc73a2a6b46d967e80447afedad937cf60cd1 Mon Sep 17 00:00:00 2001 From: Ilyas Ronef Date: Fri, 8 May 2020 05:38:56 +0300 Subject: [PATCH 15/22] =?UTF-8?q?+=20Parameters=20=E2=86=92=20`inputColor`?= =?UTF-8?q?:=20Added=20the=20ability=20to=20set=20as=20HSL.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ddColorTools_snippet.php | 62 +++++++++++++++++++++++++++++++++------- 1 file changed, 51 insertions(+), 11 deletions(-) diff --git a/ddColorTools_snippet.php b/ddColorTools_snippet.php index 1412e49..b0b591c 100644 --- a/ddColorTools_snippet.php +++ b/ddColorTools_snippet.php @@ -9,9 +9,11 @@ * @uses [(MODX)EvolutionCMS.libraries.ddTools](https://code.divandesign.biz/modx/ddtools) >= 0.32 * @uses [(MODX)EvolutionCMS.snippets.ddGetDocumentField](https://code.divandesign.biz/modx/ddgetdocumentfield) >= 2.10.1 * - * @param $inputColor {string} — Цвет в HEX. @required + * @param $inputColor {string} — Input color as HEX or HSL, case-insensitive. @required * @example `ffffff` - * @example `#ffffff` + * @example `#FFFFFF` + * @example `hsl(0, 0%, 100%)` + * @example `HSL(0, 0, 100)` * @param $inputColor_docField {string} — Имя поля (в котором содержится цвет) которое необходимо получить. Default: —. * @param $inputColor_docId {integer} — ID документа, поле которого нужно получить. Default: —. * @param $offset_h {string_commaSeparated} — Операции смещения цветового тона через запятую. Default: `'+0'`. @@ -101,13 +103,6 @@ 'L' => 100 ]; - //Удалим из цвета символ '#' - $inputColor = str_replace( - '#', - '', - $inputColor - ); - if(!function_exists('ddHEXtoHSL')){ function ddHEXtoHSL($hex){ //Получаем цвета в 10чной системе @@ -284,8 +279,53 @@ function ddHSLtoHEX($hsl){ } } - //Преобразуем цвет в HSL - $inputColorHsl = ddHEXtoHSL($inputColor); + //Case-insensitive + $inputColor = strtolower($inputColor); + + //If input color set as HSL + if ( + strpos( + $inputColor, + 'hsl' + ) !== false + ){ + //Remove unwanted chars + $inputColor = str_replace( + [ + 'hsl', + '(', + ')', + //Space + ' ', + //Tab + ' ' + ], + '', + $inputColor + ); + + $inputColor = explode( + ',', + $inputColor + ); + + $inputColorHsl = [ + 'H' => $inputColor[0], + 'S' => $inputColor[1], + 'L' => $inputColor[2] + ]; + //AS RGB + }else{ + //Удалим из цвета символ '#' + $inputColor = str_replace( + '#', + '', + $inputColor + ); + + //Преобразуем цвет в HSL + $inputColorHsl = ddHEXtoHSL($inputColor); + } foreach( $inputColorHsl as From ee97b6b38ee571350e17a21248d62feb12e4be54 Mon Sep 17 00:00:00 2001 From: Ilyas Ronef Date: Fri, 8 May 2020 11:05:22 +0300 Subject: [PATCH 16/22] + README. + README_ru. --- README.md | 134 ++++++++++++++++++++++++++++++++++++++- README_ru.md | 132 ++++++++++++++++++++++++++++++++++++++ ddColorTools_snippet.php | 27 +------- 3 files changed, 266 insertions(+), 27 deletions(-) create mode 100644 README_ru.md diff --git a/README.md b/README.md index 7eaef82..7b17008 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,132 @@ -# ddColorTools +# (MODX)EvolutionCMS.snippets.ddColorTools -Преобразует цвет в соответствии со смещением по тону, яркости или насыщенности. -___ \ No newline at end of file +Converts the color to match the offset in tone, brightness, or saturation. + + +## Requires + +* PHP >= 5.6 +* [(MODX)EvolutionCMS.libraries.ddTools](https://code.divandesign.biz/modx/ddtools) >= 0.32 +* [(MODX)EvolutionCMS.snippets.ddGetDocumentField](https://code.divandesign.biz/modx/ddgetdocumentfield) >= 2.10.1 + + +## Documentation + + +### Installation + +Elements → Snippets: Create a new snippet with the following data: + +1. Snippet name: `ddColorTools`. +2. Description: `2.0 Converts the color to match the offset in tone, brightness, or saturation.`. +3. Category: `Core`. +4. Parse DocBlock: `no`. +5. Snippet code (php): Insert content of the `ddColorTools_snippet.php` file from the archive. + + +### Parameters description + + +#### Input color + +* `inputColor` + * Desctription: Input color as HEX or HSL, case-insensitive. + Valid format examples: + * `ffffff` + * `#FFFFFF` + * `hsl(0, 0%, 100%)` + * `HSL(0, 0, 100)` + * Valid values: `string` + * **Required** + +* `inputColor_docField` + * Desctription: The name of the document field / TV which value is required to get. + If the parameter is passed then the input string will be taken from the field / TV and `inputColor` will be ignored. + * Valid values: `string` + * Default value: — + +* `inputColor_docId` + * Desctription: ID of the document which field/TV value is required to get. + `inputColor_docId` equals the current document id since `inputString_docId` is unset. + * Valid values: `integer` + * Default value: — + + +#### Color modification + +All parameters can contain the following special operators: +1. `+` (e. g. `+10`) — plus +2. `-` (e. g. `-10`) — minus +3. `abs` — round to max or min value +4. `r` — invert +5. without operator (e. g. `10`) — just set equal to + +* `offset_h` + * Desctription: Operations of the hue offset separated by commas. + * Valid values: `stringCommaSeparated` + * Default value: `'+0'` + +* `offset_h[i]` + * Desctription: Offset of the hue in degrees (`[-360; +360]`). + * Valid values: `string` + * **Required** + +* `offset_s` + * Desctription: Operations of the saturation offset separated by commas. + * Valid values: `stringCommaSeparated` + * Default value: `'+0'` + +* `offset_s[i]` + * Desctription: Offset of the saturation in persents (`[-100; +100]`). + * Valid values: `string` + * **Required** + +* `offset_l` + * Desctription: Operations of the lightness offset separated by commas. + * Valid values: `stringCommaSeparated` + * Default value: `'+0'` + +* `offset_l[i]` + * Desctription: Offset of the lightness in persents (`[-100; +100]`). + * Valid values: `string` + * **Required** + + +#### Output + +* `result_outputFormat` + * Desctription: Output color format. + * Valid values: + * `'hex'` + * `'hsl'` + * Default value: `'hex'` + +* `result_tpl` + * Desctription: Chunk to parse result. + Available placeholders: + * `[+ddResult+]` — full color string + * `[+ddH+]` — hue + * `[+ddS+]` — saturation + * `[+ddL+]` — lightness + * Valid values: + * `stringChunkName` + * `string` — use inline templates starting with `@CODE:` + * Default value: — + +* `result_tpl_placeholders` + * Desctription: + Additional data has to be passed into the `result_tpl`. + Nested objects and arrays are supported too: + * `{"someOne": "1", "someTwo": "test" }` => `[+someOne+], [+someTwo+]`. + * `{"some": {"a": "one", "b": "two"} }` => `[+some.a+]`, `[+some.b+]`. + * `{"some": ["one", "two"] }` => `[+some.0+]`, `[+some.1+]`. + * Valid values: + * `stringJsonObject` — as [JSON](https://en.wikipedia.org/wiki/JSON) + * `stringQueryFormated` — as [Query string](https://en.wikipedia.org/wiki/Query_string) + * Default value: — + + +## [Home page →](https://code.divandesign.biz/modx/ddcolortools) + + + \ No newline at end of file diff --git a/README_ru.md b/README_ru.md new file mode 100644 index 0000000..b5c36cb --- /dev/null +++ b/README_ru.md @@ -0,0 +1,132 @@ +# (MODX)EvolutionCMS.snippets.ddColorTools + +Преобразует цвет в соответствии со смещением по тону, яркости или насыщенности. + + +## Использует + +* PHP >= 5.6 +* [(MODX)EvolutionCMS.libraries.ddTools](https://code.divandesign.biz/modx/ddtools) >= 0.32 +* [(MODX)EvolutionCMS.snippets.ddGetDocumentField](https://code.divandesign.biz/modx/ddgetdocumentfield) >= 2.10.1 + + +## Документация + + +### Установка + +Элементы → Сниппеты: Создайте новый сниппет со следующими параметрами: + +1. Название сниппета: `ddColorTools`. +2. Описание: `2.0 Преобразует цвет в соответствии со смещением по тону, яркости или насыщенности.`. +3. Категория: `Core`. +4. Анализировать DocBlock: `no`. +5. Код сниппета (php): Вставьте содержимое файла `ddColorTools_snippet.php` из архива. + + +### Описание параметров + + +#### Исходный цвет + +* `inputColor` + * Описание: Исходный цвет в HEX или HSL, значение регистронезависимо. + Примеры валидных значений: + * `ffffff` + * `#FFFFFF` + * `hsl(0, 0%, 100%)` + * `HSL(0, 0, 100)` + * Допустимые значения: `string` + * **Обязателен** + +* `inputColor_docField` + * Описание: Имя поля документа / TV, содержащего значение. + Если задать этот параметр, параметр `inputColor` игнорируется, значение получается из указанного поля документа. + * Допустимые значения: `string` + * Значение по умолчанию: — + +* `inputColor_docId` + * Описание: ID документа, значение поля которого нужно получить. + Если не задан, берётся ID текущего документа. + * Допустимые значения: `integer` + * Значение по умолчанию: — + + +#### Модификация цвета + +Все параметры могут содержать следующие специальные операторы: +1. `+` (например, `+10`) — прибавить +2. `-` (например, `-10`) — отнять +3. `abs` — округлить до максимального или минимального значения +4. `r` — инвертировать +5. без оператора (например, `10`) — просто установить, как указано + +* `offset_h` + * Описание: Операции смещения цветового тона через запятую. + * Допустимые значения: `stringCommaSeparated` + * Значение по умолчанию: `'+0'` + +* `offset_h[i]` + * Описание: Смещение цветового тона в градусах (`[-360; +360]`). + * Допустимые значения: `string` + * **Обязателен** + +* `offset_s` + * Описание: Операции смещения насыщенности через запятую. + * Допустимые значения: `stringCommaSeparated` + * Значение по умолчанию: `'+0'` + +* `offset_s[i]` + * Описание: Смещение насыщенности в процентах (`[-100; +100]`). + * Допустимые значения: `string` + * **Обязателен** + +* `offset_l` + * Описание: Операции смещения яркости через запятую. + * Допустимые значения: `stringCommaSeparated` + * Значение по умолчанию: `'+0'` + +* `offset_l[i]` + * Описание: Смещение яркости в процентах (`[-100; +100]`). + * Допустимые значения: `string` + * **Обязателен** + + +#### Вывод результата + +* `result_outputFormat` + * Описание: В каком формате возвращать цвет? + * Допустимые значения: + * `'hex'` + * `'hsl'` + * Значение по умолчанию: `'hex'` + +* `result_tpl` + * Описание: Чанк, через который выводить (если нужно). + Доступные плейсхолдеры: + * `[+ddResult+]` — полная строка цвета + * `[+ddH+]` — цветовой тон + * `[+ddS+]` — насыщенность + * `[+ddL+]` — яркость + * Допустимые значения: + * `stringChunkName` + * `string` — передавать код напрямую без чанка можно начиная значение с `@CODE:` + * Значение по умолчанию: — + +* `result_tpl_placeholders` + * Описание: + Дополнительные данные, которые будут переданы в чанк `result_tpl`. + Вложенные объекты и массивы также поддерживаются: + * `{"someOne": "1", "someTwo": "test" }` => `[+someOne+], [+someTwo+]`. + * `{"some": {"a": "one", "b": "two"} }` => `[+some.a+]`, `[+some.b+]`. + * `{"some": ["one", "two"] }` => `[+some.0+]`, `[+some.1+]`. + * Допустимые значения: + * `stringJsonObject` — as [JSON](https://en.wikipedia.org/wiki/JSON) + * `stringQueryFormated` — as [Query string](https://en.wikipedia.org/wiki/Query_string) + * Значение по умолчанию: — + + +## [Home page →](https://code.divandesign.biz/modx/ddcolortools) + + + \ No newline at end of file diff --git a/ddColorTools_snippet.php b/ddColorTools_snippet.php index b0b591c..9d27e67 100644 --- a/ddColorTools_snippet.php +++ b/ddColorTools_snippet.php @@ -3,32 +3,11 @@ * ddColorTools * @version 2.0 (2017-05-22) * - * @desc Преобразует цвет в соответствии со смещением по тону, яркости или насыщенности. + * @see README.md * - * @uses PHP >= 5.6. - * @uses [(MODX)EvolutionCMS.libraries.ddTools](https://code.divandesign.biz/modx/ddtools) >= 0.32 - * @uses [(MODX)EvolutionCMS.snippets.ddGetDocumentField](https://code.divandesign.biz/modx/ddgetdocumentfield) >= 2.10.1 + * @link https://code.divandesign.biz/modx/ddcolortools * - * @param $inputColor {string} — Input color as HEX or HSL, case-insensitive. @required - * @example `ffffff` - * @example `#FFFFFF` - * @example `hsl(0, 0%, 100%)` - * @example `HSL(0, 0, 100)` - * @param $inputColor_docField {string} — Имя поля (в котором содержится цвет) которое необходимо получить. Default: —. - * @param $inputColor_docId {integer} — ID документа, поле которого нужно получить. Default: —. - * @param $offset_h {string_commaSeparated} — Операции смещения цветового тона через запятую. Default: `'+0'`. - * @param $offset_h[i] {string} — Смещение цветового тона в градусах [-360;+360]. `+` — прибавить, `-` — отнять, без знака — задать, `abs` — округлить до макс. или мин. значения, `r` — инвертировать. @required - * @param $offset_s {string_commaSeparated} — Операции смещения насыщенности через запятую. Default: `'+0'`. - * @param $offset_s[i] {string_commaSeparated} — Смещение насыщенности в процентах [-100;+100]. `+` — прибавить, `-` — отнять, без знака — задать, `abs` — округлить до макс. или мин. значения, `r` — инвертировать. @required - * @param $offset_l {string_commaSeparated} — Операции смещения яркости через запятую. Default: `'+0'`. - * @param $offset_l[i] {string_commaSeparated} — Смещение яркости в процентах [-100;+100]. `+` — прибавить, `-` — отнять, без знака — задать, `abs` — округлить до макс. или мин. значения, `r` — инвертировать. @required - * @param $result_outputFormat {'hex'|'hsl'} — Какой формат цвета возвращать. Default: `'hex'`. - * @param $result_tpl {string_chunkName|string} — Chunk to parse result (chunk name or code via `@CODE:` prefix). Availiable placeholders: `[+ddResult+]`, `[+ddH+]`, `[+ddS+]`, `[+ddL+]`. Default: ``. - * @param $result_tpl_placeholders {stirng_json|string_queryFormated} — Additional data as [JSON](https://en.wikipedia.org/wiki/JSON) or [Query string](https://en.wikipedia.org/wiki/Query_string) has to be passed into `result_tpl`. Default: ``. - * @example `{"pladeholder1": "value1", "pagetitle": "My awesome pagetitle!"}` - * @example `pladeholder1=value1&pagetitle=My awesome pagetitle!` - * - * @copyright 2011–2017 DD Group {@link http://www.DivanDesign.biz } + * @copyright 2011–2017 DD Group {@link https://DivanDesign.biz } */ //Include (MODX)EvolutionCMS.libraries.ddTools From 2f429f822a9b1c07002315c187fccde6a61483cf Mon Sep 17 00:00:00 2001 From: Ilyas Ronef Date: Fri, 8 May 2020 11:08:34 +0300 Subject: [PATCH 17/22] =?UTF-8?q?*=20Parameters=20=E2=86=92=20`result=5Fou?= =?UTF-8?q?tputFormat`=20=E2=86=92=20Default=20value:=20Is=20equal=20to=20?= =?UTF-8?q?`hsl`=20instead=20of=20`hex`.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- README_ru.md | 2 +- ddColorTools_snippet.php | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 7b17008..b058d1e 100644 --- a/README.md +++ b/README.md @@ -99,7 +99,7 @@ All parameters can contain the following special operators: * Valid values: * `'hex'` * `'hsl'` - * Default value: `'hex'` + * Default value: `'hsl'` * `result_tpl` * Desctription: Chunk to parse result. diff --git a/README_ru.md b/README_ru.md index b5c36cb..17aeb5d 100644 --- a/README_ru.md +++ b/README_ru.md @@ -99,7 +99,7 @@ * Допустимые значения: * `'hex'` * `'hsl'` - * Значение по умолчанию: `'hex'` + * Значение по умолчанию: `'hsl'` * `result_tpl` * Описание: Чанк, через который выводить (если нужно). diff --git a/ddColorTools_snippet.php b/ddColorTools_snippet.php index 9d27e67..24e4bf0 100644 --- a/ddColorTools_snippet.php +++ b/ddColorTools_snippet.php @@ -73,7 +73,7 @@ $result_outputFormat = isset($result_outputFormat) ? $result_outputFormat : - 'hex' + 'hsl' ; $hslMax = [ From 500d25dd50f4ad60e3ef1650ef1b6d63e30c2d39 Mon Sep 17 00:00:00 2001 From: Ilyas Ronef Date: Fri, 8 May 2020 11:12:37 +0300 Subject: [PATCH 18/22] =?UTF-8?q?+=20Parameters=20=E2=86=92=20`result=5Fou?= =?UTF-8?q?tputFormat`:=20Case-insensitive.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 6 ++++-- README_ru.md | 6 ++++-- ddColorTools_snippet.php | 2 +- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index b058d1e..043d6fa 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,8 @@ Elements → Snippets: Create a new snippet with the following data: #### Input color * `inputColor` - * Desctription: Input color as HEX or HSL, case-insensitive. + * Desctription: Input color as HEX or HSL. + Case-insensitive. Valid format examples: * `ffffff` * `#FFFFFF` @@ -95,7 +96,8 @@ All parameters can contain the following special operators: #### Output * `result_outputFormat` - * Desctription: Output color format. + * Desctription: Output color format. + Case-insensitive. * Valid values: * `'hex'` * `'hsl'` diff --git a/README_ru.md b/README_ru.md index 17aeb5d..d3c6e93 100644 --- a/README_ru.md +++ b/README_ru.md @@ -30,7 +30,8 @@ #### Исходный цвет * `inputColor` - * Описание: Исходный цвет в HEX или HSL, значение регистронезависимо. + * Описание: Исходный цвет в HEX или HSL. + Значение регистронезависимо. Примеры валидных значений: * `ffffff` * `#FFFFFF` @@ -95,7 +96,8 @@ #### Вывод результата * `result_outputFormat` - * Описание: В каком формате возвращать цвет? + * Описание: В каком формате возвращать цвет? + Значение регистронезависимо. * Допустимые значения: * `'hex'` * `'hsl'` diff --git a/ddColorTools_snippet.php b/ddColorTools_snippet.php index 24e4bf0..f72bce0 100644 --- a/ddColorTools_snippet.php +++ b/ddColorTools_snippet.php @@ -72,7 +72,7 @@ $result_outputFormat = isset($result_outputFormat) ? - $result_outputFormat : + strtolower($result_outputFormat) : 'hsl' ; From ac44b2521e587a1437b2759d1779c4b70326ba3a Mon Sep 17 00:00:00 2001 From: Ilyas Ronef Date: Fri, 8 May 2020 11:16:32 +0300 Subject: [PATCH 19/22] =?UTF-8?q?*=20Composer.json:=20=09*=20`description`?= =?UTF-8?q?:=20English=20text.=20=09+=20`keywords`:=20Added=20several=20ne?= =?UTF-8?q?w=20keywords.=20=09*=20`require`=20=E2=86=92=20`php`:=20Version?= =?UTF-8?q?=20fixed.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- composer.json | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/composer.json b/composer.json index 7646278..1416553 100644 --- a/composer.json +++ b/composer.json @@ -2,7 +2,7 @@ "name": "dd/evolutioncms-snippets-ddcolortools", "type": "modxevo-snippet", "version": "2.0.0", - "description": "Преобразует цвет в соответствии со смещением по тону, яркости или насыщенности.", + "description": "Converts the color to match the offset in tone, brightness, or saturation.", "keywords": [ "modx", "modx evo", @@ -18,10 +18,12 @@ "color tools", "color convert", "hsl convert", - "rgb to hsl" + "rgb convert", + "rgb to hsl", + "hsl to rgb" ], "require": { - "php": ">=5.4.0", + "php": ">=5.6.0", "dd/evolutioncms-libraries-ddtools": ">=0.32.0", "dd/evolutioncms-snippets-ddgetdocumentfield": ">=2.10.1" } From 079fe86173baa25c864112bfcbf240b9c0196057 Mon Sep 17 00:00:00 2001 From: Ilyas Ronef Date: Fri, 8 May 2020 11:18:36 +0300 Subject: [PATCH 20/22] + CHANGELOG. + CHANGELOG_ru. --- CHANGELOG.md | 9 +++++++++ CHANGELOG_ru.md | 9 +++++++++ 2 files changed, 18 insertions(+) create mode 100644 CHANGELOG.md create mode 100644 CHANGELOG_ru.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..c395c4e --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,9 @@ +# (MODX)EvolutionCMS.snippets.ddColorTools changelog + + +## Version 2.0 (2017-05-22) +* \+ Initial commit. + + + + \ No newline at end of file diff --git a/CHANGELOG_ru.md b/CHANGELOG_ru.md new file mode 100644 index 0000000..851fb6d --- /dev/null +++ b/CHANGELOG_ru.md @@ -0,0 +1,9 @@ +# (MODX)EvolutionCMS.snippets.ddColorTools changelog + + +## Версия 2.0 (2017-05-22) +* \+ Начальный кэммит. + + + + \ No newline at end of file From 71633e5d94e1797894672dc754cc2c38c695aeb1 Mon Sep 17 00:00:00 2001 From: Ilyas Ronef Date: Fri, 8 May 2020 11:43:17 +0300 Subject: [PATCH 21/22] =?UTF-8?q?-=20Parameters=20=E2=86=92=20`result=5Fou?= =?UTF-8?q?tputFormat`:=20The=20old=20name=20`outputFormat`=20is=20no=20lo?= =?UTF-8?q?nger=20supported.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ddColorTools_snippet.php | 8 -------- 1 file changed, 8 deletions(-) diff --git a/ddColorTools_snippet.php b/ddColorTools_snippet.php index f72bce0..1f3e8e0 100644 --- a/ddColorTools_snippet.php +++ b/ddColorTools_snippet.php @@ -16,14 +16,6 @@ 'assets/libs/ddTools/modx.ddtools.class.php' ); -//Backward compatibility -extract(\ddTools::verifyRenamedParams([ - 'params' => $params, - 'compliance' => [ - 'result_outputFormat' => 'outputFormat' - ] -])); - //The snippet must return an empty string even if result is absent $snippetResult = ''; //Если задано имя поля, которое необходимо получить From c0ae302a1eb644f8944997f7a294e9f5a7b278f2 Mon Sep 17 00:00:00 2001 From: Ilyas Ronef Date: Fri, 8 May 2020 12:02:41 +0300 Subject: [PATCH 22/22] Prerelease --- CHANGELOG.md | 26 ++++++++++++++++++++++++++ CHANGELOG_ru.md | 26 ++++++++++++++++++++++++++ README.md | 2 +- README_ru.md | 2 +- composer.json | 2 +- ddColorTools_snippet.php | 4 ++-- 6 files changed, 57 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c395c4e..4c561a8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,32 @@ # (MODX)EvolutionCMS.snippets.ddColorTools changelog +## Version 3.0 (2020-05-08) +* \* Attention! (MODX)EvolutionCMS.snippets.ddGetDocumentField >= 2.10.1 is required. +* \* Attention! (MODX)EvolutionCMS.libraries.ddTools >= 0.32 is required. +* \* Attention! Backward compatibility is broken: + * \* `HSB` renamed as `HSL` inside the snippet. + * \* Parameters: + * \* The following were renamed: + * \* `offset_b` → `offset_l` + * \* `outputFormat` → `result_outputFormat` + * \* `result_outputFormat`: + * \* If equal to `hsl` then full color string will be returned (`hsl(0, 0%, 0%)`). + * \* Default value: Is equal to `hsl` instead of `hex`. +* \+ Parameters → `inputColor`: Added the ability to set as HSL. +* \+ Parameters → `offset_` (all): Supports multiple operations. +* \+ Parameters → `result_outputFormat`: Case-insensitive. +* \+ Parameters → `result_tpl`. +* \+ Parameters → `result_tpl_placeholders`. +* \* The snippet will return an empty string even if result is absent. +* \* Refactoring. +* \+ Composer.json. +* \+ README. +* \+ README_ru. +* \+ CHANGELOG. +* \+ CHANGELOG_ru. + + ## Version 2.0 (2017-05-22) * \+ Initial commit. diff --git a/CHANGELOG_ru.md b/CHANGELOG_ru.md index 851fb6d..753ed09 100644 --- a/CHANGELOG_ru.md +++ b/CHANGELOG_ru.md @@ -1,6 +1,32 @@ # (MODX)EvolutionCMS.snippets.ddColorTools changelog +## Version 3.0 (2020-05-08) +* \* Внимание! Требуется (MODX)EvolutionCMS.snippets.ddGetDocumentField >= 2.10.1. +* \* Внимание! Требуется (MODX)EvolutionCMS.libraries.ddTools >= 0.32. +* \* Внимание! Обратная совместимость нарушена: + * \* `HSB` переименован в `HSL` внутри сниппета. + * \* Параметры: + * \* Следующие переименованы: + * \* `offset_b` → `offset_l` + * \* `outputFormat` → `result_outputFormat` + * \* `result_outputFormat`: + * \* Если равен `hsl` — будет возвращёно полное представление цвета (`hsl(0, 0%, 0%)`). + * \* Значение по умолчанию: Равно `hsl` вместо `hex`. +* \+ Параметры → `inputColor`: Добавлена возможность задавать в формате HSL. +* \+ Параметры → `offset_` (все): Добавлена поддержка множественных операций. +* \+ Параметры → `result_outputFormat`: Значение регистронезависимо. +* \+ Параметры → `result_tpl`. +* \+ Параметры → `result_tpl_placeholders`. +* \* Сниппет вернёт пустую строку в случае если результ пуст. +* \* Рефакторинг. +* \+ Composer.json. +* \+ README. +* \+ README_ru. +* \+ CHANGELOG. +* \+ CHANGELOG_ru. + + ## Версия 2.0 (2017-05-22) * \+ Начальный кэммит. diff --git a/README.md b/README.md index 043d6fa..22c4a53 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ Converts the color to match the offset in tone, brightness, or saturation. Elements → Snippets: Create a new snippet with the following data: 1. Snippet name: `ddColorTools`. -2. Description: `2.0 Converts the color to match the offset in tone, brightness, or saturation.`. +2. Description: `3.0 Converts the color to match the offset in tone, brightness, or saturation.`. 3. Category: `Core`. 4. Parse DocBlock: `no`. 5. Snippet code (php): Insert content of the `ddColorTools_snippet.php` file from the archive. diff --git a/README_ru.md b/README_ru.md index d3c6e93..b3e354b 100644 --- a/README_ru.md +++ b/README_ru.md @@ -18,7 +18,7 @@ Элементы → Сниппеты: Создайте новый сниппет со следующими параметрами: 1. Название сниппета: `ddColorTools`. -2. Описание: `2.0 Преобразует цвет в соответствии со смещением по тону, яркости или насыщенности.`. +2. Описание: `3.0 Преобразует цвет в соответствии со смещением по тону, яркости или насыщенности.`. 3. Категория: `Core`. 4. Анализировать DocBlock: `no`. 5. Код сниппета (php): Вставьте содержимое файла `ddColorTools_snippet.php` из архива. diff --git a/composer.json b/composer.json index 1416553..77af0c5 100644 --- a/composer.json +++ b/composer.json @@ -1,7 +1,7 @@ { "name": "dd/evolutioncms-snippets-ddcolortools", "type": "modxevo-snippet", - "version": "2.0.0", + "version": "3.0.0", "description": "Converts the color to match the offset in tone, brightness, or saturation.", "keywords": [ "modx", diff --git a/ddColorTools_snippet.php b/ddColorTools_snippet.php index 1f3e8e0..5052e51 100644 --- a/ddColorTools_snippet.php +++ b/ddColorTools_snippet.php @@ -1,13 +1,13 @@