RangeField::__construct()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 3
c 0
b 0
f 0
rs 10
cc 1
eloc 2
nc 1
nop 1
1
<?php
2
namespace rtens\domin\delivery\web\fields;
3
4
use rtens\domin\delivery\cli\fields\RangeField as CliRangeField;
5
use rtens\domin\delivery\web\Element;
6
use rtens\domin\delivery\web\HeadElements;
7
use rtens\domin\delivery\web\MobileDetector;
8
use rtens\domin\delivery\web\WebField;
9
use rtens\domin\Parameter;
10
use rtens\domin\reflection\types\RangeType;
11
12
class RangeField extends CliRangeField implements WebField {
13
14
    /** @var MobileDetector */
15
    private $mobile;
16
17
    public function __construct(MobileDetector $mobile) {
18
        $this->mobile = $mobile;
19
    }
20
21
    /**
22
     * @param Parameter $parameter
23
     * @param mixed $value
24
     * @return string
25
     */
26
    public function render(Parameter $parameter, $value) {
27
        /** @var RangeType $range */
28
        $range = $parameter->getType();
29
        $min = $range->getMin();
30
        $max = $range->getMax();
31
        $step = $range->getStep();
32
33
        $value = is_null($value) ? $min : (int)$value;
34
        $name = $parameter->getName();
35
        $id = str_replace(['[', ']'], ['-', ''], $name);
36
37
        return (string)new Element('div', ['class' => 'form-group', 'id' => $id], [
38
            new Element('div', ['class' => 'slider']),
39
            new Element('input', [
40
                'class' => 'amount form-control',
41
                'type' => 'number',
42
                'name' => $name,
43
                'value' => $value
44
            ]),
45
            new Element('script', [], [
46
                "$(function() {
47
                    $('#$id .slider').slider({
48
                      range: 'min',
49
                      value: $value,
50
                      min: $min,
51
                      max: $max,
52
                      step: $step,
53
                      slide: function(event, ui) {
54
                            $('#$id .amount').val(ui.value);
55
                        }
56
                    });
57
                });"
58
            ])
59
        ]);
60
    }
61
62
    /**
63
     * @param Parameter $parameter
64
     * @return array|Element[]
65
     */
66
    public function headElements(Parameter $parameter) {
67
        $elements = [
68
            HeadElements::jquery(),
69
            HeadElements::jqueryUi(),
70
            HeadElements::jqueryUiCss(),
71
        ];
72
73
        if ($this->mobile->isMobile()) {
74
            $elements[] = HeadElements::script('//cdnjs.cloudflare.com/ajax/libs/jqueryui-touch-punch/0.2.3/jquery.ui.touch-punch.min.js');
75
        }
76
77
        return $elements;
78
    }
79
}