-
Notifications
You must be signed in to change notification settings - Fork 1
/
InputRange.php
142 lines (124 loc) · 2.99 KB
/
InputRange.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
<?php
/**
* inputrange extension for Contao Open Source CMS
*
* Copyright © 2014 ETES GmbH
*
* @package inputrange
* @author Sebastian Leitz <sebastian.leitz@etes.de>
* @license LGPLv3
*/
/**
* Class Inputrange
*
* Provide a input field of the "range" type with multiple settings
*/
class InputRange extends Widget
{
/**
* Submit user input
* @var boolean
*/
protected $blnSubmitInput = true;
/**
* Add a for attribute
* @var boolean
*/
protected $blnForAttribute = true;
/**
* Template
* @var string
*/
protected $strTemplate = 'form_widget_output';
/**
* Add specific attributes
* @param string
* @param mixed
*/
public function __set($strKey, $varValue)
{
switch ($strKey)
{
case 'mandatory':
if ($varValue)
{
$this->arrAttributes['required'] = 'required';
}
else
{
unset($this->arrAttributes['required']);
}
parent::__set($strKey, $varValue);
break;
default:
parent::__set($strKey, $varValue);
break;
}
}
/**
* Generate the widget and return it as string
* @return string
*/
public function generate()
{
if ($this->strFormat != 'html5')
{
return '<span style="color:red">This form widget is only supported in HTML5 documents.</span>';
}
$strBuffer = '';
$strBuffer .= sprintf('<input type="range" name="%s" id="ctrl_%s" class="range%s" min="%s" max="%s"%s value="%s"%s>',
$this->strName,
$this->strId,
(strlen($this->strClass) ? ' ' . $this->strClass : ''),
$this->minimum,
$this->maximum,
(strlen($this->step) ? ' step="' . $this->step . '"' : ''),
specialchars($this->varValue),
(strlen($this->datalist) ? ' list="dlist_' . $this->strId . '"' : '').
' onchange="output_' . $this->strId . '.value=value"'.
' oninput="output_' . $this->strId . '.value=value"'.
$this->getAttributes());
if (strlen($this->datalist))
{
$strBuffer .= "\n";
$strBuffer .= '<datalist id="dlist_' . $this->strId . '">';
foreach (explode(',', specialchars($this->datalist)) as $item)
{
$strBuffer .= '<option>' . $item . '</option>';
}
$strBuffer .= '</datalist>';
}
return $strBuffer;
}
/**
* Generate an <output> field for the widget
* @return string
*/
public function generateOutput()
{
return sprintf('<output id="output_%s" for="ctrl_%s"%s>%s</output>',
$this->strId,
$this->strId,
(strlen($this->strClass) ? ' class="' . $this->strClass . '"' : ''),
specialchars($this->varValue));
}
/**
* Custom RegEx validation of comma separated values
* @param string
* @param string
* @param \Widget
* @return boolean
*/
public function validateCommaSeparatedDigits($strRegexp, $varValue, \Widget $objWidget)
{
if ($strRegexp == 'commaseparateddigits')
{
if (!preg_match('/^(([0-9])*.)?[0-9]+(,( )*(([0-9])*.)?[0-9]+)*$/', $varValue))
{
$objWidget->addError('Field ' . $objWidget->label . ' can only contain comma separated digits');
}
return true;
}
return false;
}
}