diff options
Diffstat (limited to 'app/class/Quickcss.php')
-rw-r--r-- | app/class/Quickcss.php | 293 |
1 files changed, 293 insertions, 0 deletions
diff --git a/app/class/Quickcss.php b/app/class/Quickcss.php new file mode 100644 index 0000000..0173763 --- /dev/null +++ b/app/class/Quickcss.php @@ -0,0 +1,293 @@ +<?php + +namespace Wcms; + +class Quickcss +{ + + + private $active = []; + private $values = []; + private $units = []; + private $new = []; + private $jsoncss = []; + + private $quickcss = []; + + const COLOR = ['color', 'background-color', 'border-color', 'text-decoration-color']; + const SIZE = ['width', 'height', 'margin', 'padding', 'border-radius', 'border-width', 'left', 'right', 'top', 'bottom']; + const UNIQUE = ['background-image', 'opacity', 'font-size']; + + const OPTIONS = [ + 'text-align' => ['left', 'right', 'center', 'justify'], + 'border-style' => ['solid', 'double', 'outset', 'ridge'], + 'font-family' => ['serif', 'sans-serif', 'monospace', 'cursive', 'fantasy'], + 'text-decoration-line' => ['none', 'underline', 'overline', 'line-through', 'underline overline'], + 'display' => ['none', ] + ]; + + + private static function getselect() + { + return array_keys(self::OPTIONS); + } + + private static function getparams() + { + $params = array_merge(self::COLOR, self::SIZE, self::getselect(), self::UNIQUE); + sort($params, SORT_STRING ); + return $params; + } + + public function __construct($data) + { + $this->hydrate($data); } + + public function hydrate($data) + { + foreach ($data as $key => $value) { + $method = 'set' . $key; + + if (method_exists($this, $method)) { + $this->$method($value); + } + } + } + + public function calc() + { + $quickcss = $this->intersect($this->values,$this->active); + $quickcss = $this->merge($quickcss, $this->new); + $quickcss = $this->addunits($quickcss, $this->units); + $quickcss = $this->merge($this->jsoncss, $quickcss); + + $this->quickcss = $quickcss; + } + + + + // _________________________________________ P O S T __________________________________________________ + + public function setvalues($data) + { + if(is_array($data)) { + $this->values = $data; + } + } + + public function setunits($data) + { + if(is_array($data)) { + $this->units = $data; + } + } + + public function setactive($data) + { + if(is_array($data)) { + $this->active = $data; + } + } + + public function setnew($data) + { + if (!empty($data['element']) && !empty($data['param']) && in_array($data['param'], self::getparams())) { + $new = array($data['element'] => array($data['param'] => '')); + $this->new = $new; + } + } + + + public function setjson($jsoncss) + { + if(!empty($jsoncss) && is_string($jsoncss)) { + $jsoncss = json_decode($jsoncss); + if(is_array($jsoncss)) { + $this->jsoncss = $jsoncss; + } else { + $this->jsoncss = []; + } + } + } + + + // _______________________________________ C A L C ___________________________________________________ + + public function intersect($values, $active) + { + $intersect = array_intersect_key($values, $active); + + foreach ($intersect as $element => $css) { + $intersect[$element] = array_intersect_key($values[$element], $active[$element]); + } + return $intersect; + } + + public function merge($quickcss, $new) + { + $quickcss = array_merge_recursive($quickcss, $new); + return $quickcss; + } + + public function addunits($quickcss, $units) + { + foreach ($units as $element => $css) { + foreach ($css as $param => $unit) { + if (array_key_exists($element, $quickcss) && array_key_exists($param, $quickcss[$element])) { + $quickcss[$element][$param] = $quickcss[$element][$param] . $unit; + } + } + } + return $quickcss; + } + + + + // __________________________________________ C O M _________________________________________ + + public function tocss() + { + $string = ''; + foreach ($this->quickcss as $element => $css) { + $string .= PHP_EOL . $element . ' {'; + foreach ($css as $param => $value) { + $string .= PHP_EOL . ' ' . $param . ': ' . $value . ';'; + } + $string .= PHP_EOL . '}' . PHP_EOL; + } + return $string; + } + + public function tojson() + { + return json_encode($this->quickcss); + } + + + + + // _____________________________________________ F O R M ____________________________________________ + + public function form($action) + { + echo '<form action="' . $action . '" method="post">'; + echo '</br><input type="submit" value="submit">'; + $this->inputs($this->quickcss); + echo '</br><input type="submit" value="submit">'; + echo '</form>'; + + } + + public function inputs($quickcss) + { + echo '<h1>Add element</h1>'; + + echo '<input type="text" name="new[element]" list="used">'; + echo '<datalist id="used">'; + foreach (array_keys($quickcss) as $element) { + echo '<option value ="'.$element.'">'; + } + echo '</datalist>'; + + echo '<select name="new[param]">'; + foreach (self::getparams() as $param) { + echo '<option value="' . $param . '">' . $param . '</option>'; + } + echo '</select>'; + + foreach ($quickcss as $element => $css) { + echo '<h3>' . $element . '</h3>'; + foreach ($css as $param => $value) { + + echo '<div class="quicklabel">'; + echo '<input type="checkbox" name="active[' . $element . '][' . $param . ']" id="active[' . $element . '][' . $param . ']" checked>'; + echo '<label for="active[' . $element . '][' . $param . ']">' . $param . '</label>'; + echo '</div>'; + + echo '<div class="quickinput">'; + + if (in_array($param, self::COLOR)) { + echo '<input type="color" name="values[' . $element . '][' . $param . ']" value="' . $quickcss[$element][$param] . '" id="values[' . $element . '][' . $param . ']">'; + } + + if (in_array($param, self::SIZE)) { + $this->sizeinput($element, $param, $value); + } + + if (in_array($param, self::getselect())) { + $this->selectinput($element, $param, $value); + } + + if (in_array($param, self::UNIQUE)) { + $method = str_replace('-', '', $param) . 'input'; + if (method_exists($this, $method)) { + $this->$method($element, $param, $value); + } + } + + echo '</div>'; + } + } + + + } + + + + + + + // ____________________________________ I N P U T __________________________________ + + public function sizeinput($element, $param, $value) + { + echo '<input type="number" name="values[' . $element . '][' . $param . ']" value="' . intval($value) . '" id="values[' . $element . '][' . $param . ']">'; + + $unit = preg_replace('/\d/', '', $value); + ?> + <select name="units[<?= $element ?>][<?= $param ?>]" > + <option value="px" <?= $unit == 'px' ? 'selected' : '' ?>>px</option> + <option value="%" <?= $unit == '%' ? 'selected' : '' ?>>%</option> + </select> + <?php + + } + + public function fontsizeinput($element, $param, $value) + { + echo '<input type="number" name="values[' . $element . '][' . $param . ']" value="' . intval($value) . '" id="values[' . $element . '][' . $param . ']">'; + + $unit = preg_replace('/\d/', '', $value); + ?> + <select name="units[<?= $element ?>][<?= $param ?>]" > + <option value="px" <?= $unit == 'px' ? 'selected' : '' ?>>px</option> + <option value="em" <?= $unit == 'em' ? 'selected' : '' ?>>em</option> + </select> + <?php + + } + + public function opacityinput($element, $param, $value) + { + echo '<input type="number" name="values[' . $element . '][' . $param . ']" value="' . $value . '" id="values[' . $element . '][' . $param . ']" step="0.1" min="0" max="1">'; + } + + public function selectinput($element, $param, $value) + { + echo '<select name="values[' . $element . '][' . $param . ']">'; + foreach (self::OPTIONS[$param] as $option) { + if($option == $value) { + echo '<option value="'.$option.'" selected>'.$option.'</option>'; + } else { + echo '<option value="'.$option.'">'.$option.'</option>'; + } + } + echo '</select>'; + } + + +} + + + +?>
\ No newline at end of file |