__PACKAGE__->mk_accessors(
qw/ min max round rangetext zerovalue dbtype steps start1 start2 modules /
);
sub
init{
my
(
$self
)=
@_
;
my
$step
= 10;
if
(
$self
->min) {
$self
->{min}=
int
(
$self
->min);
};
if
(
$self
->max) {
$self
->{max}=
int
(
$self
->max );
$self
->{max}++
if
(
$self
->round);
};
if
(
$self
->start1) {
$self
->{start1}=
$self
->start1; };
if
(
$self
->start2) {
$self
->{start2}=
$self
->start2; };
$self
->{value}=
''
;
my
$js_min
=
''
;
my
$js_max
=
''
;
if
(
$self
->zerovalue){
$self
->{min}-- ;
$self
->{start1}=
$self
->{min};
$self
->{max}++ ;
$self
->{start2}=
$self
->{max};
$js_min
=
'if (value1 == '
.
$self
->{min}.
') $("#'
.
$self
->name.
'_label1").html("'
.
$self
->zerovalue.
'");'
;
$js_max
=
'if (value2 == '
.
$self
->{max}.
') $("#'
.
$self
->name.
'_label2").html("'
.
$self
->zerovalue.
'");'
;
}
if
(
$self
->steps) {
$step
=
$self
->steps; }
else
{
$step
=
$self
->{max} -
$self
->{min}; };
if
(
$self
->request->{
$self
->name }) {
$self
->{value} =
$self
->request->{
$self
->name };
my
@vals
=
split
(/,/,
$self
->request->{
$self
->name });
$self
->{start1}=
$vals
[0];
$self
->{start2}=
$vals
[1];
}
@{
$self
->{modules}} = (
'jquery/jquery'
,
'jquery/ui.core.min'
,
'jquery/ui.slider.min'
);
$self
->{js} = '
$(
"#'.$self->name.'_slider"
).slider({
"steps"
:
'.$step.'
,range:true,
"min"
:
'.$self->{min}.'
,
"max"
:
'.$self->{max}.'
,
"slide"
: function(e, ui){
var value1 = $(
"#'.$self->name.'_slider"
).slider(
"value"
,0);
var value2 = $(
"#'.$self->name.'_slider"
).slider(
"value"
,1);
var field = value1+
","
+value2;
$(
"#'.$self->name.'_label1"
).html(value1.toFixed(0),0);
$(
"#'.$self->name.'_label2"
).html(value2.toFixed(0),1);
$(
"#'.$self->name.'"
).val(field);
'.$js_min.'
'.$js_max.'
}
}); ';
if
(
$self
->{start2}){
$self
->{js} .=
'$("#'
.
$self
->name.
'_slider").slider("moveTo",'
.
$self
->{start2}.
',1);'
;
}
if
(
$self
->{start1}){
$self
->{js} .=
'$("#'
.
$self
->name.
'_slider").slider("moveTo",'
.
$self
->{start1}.
',0);'
;
}
}
sub
get_value{
my
(
$self
)=
@_
;
return
0
if
((
$self
->zerovalue) && (
$self
->{value} == (
$self
->{min}-1)));
return
0
if
((
$self
->zerovalue) && (
$self
->{value} == (
$self
->{max}+1)));
return
$self
->{value};
}
sub
freeze{
my
(
$self
)=
@_
;
$self
->{js} .=
'$("#'
.
$self
->name.
'_slider").slider("disable");'
;
}
sub
get_dbix{
my
(
$self
)=
@_
;
my
$dbname
=
$self
->name
if
(
$self
->name);
$dbname
=
$self
->dbsearchfield
if
(
$self
->dbsearchfield);
my
@vals
=
split
(/,/,
$self
->get_value());
my
$low
=
$vals
[0];
my
$high
=
$vals
[1];
my
$result
= 0;
if
(
$self
->zerovalue) {
$low
=
''
if
(
$low
==
$self
->{min});
$high
=
''
if
(
$high
==
$self
->{max});
}
if
(
$self
->get_value() ne
''
) {
$result
={};
if
(
$self
->dbtype) {
$result
->{
'CAST('
.
$dbname
.
' AS '
.
$self
->dbtype.
')'
}->{
'>='
}=[
$low
]
if
(
$low
ne
''
);
$result
->{
'CAST('
.
$dbname
.
' AS '
.
$self
->dbtype.
')'
}->{
'<='
}=[
$high
]
if
(
$high
ne
''
);
}
else
{
$result
->{
$dbname
}->{
'>='
}=
$low
if
(
$low
ne
''
);
$result
->{
$dbname
}->{
'<='
}=
$high
if
(
$high
ne
''
);
}
}
return
$result
;
}
sub
render {
my
(
$self
,
$options
,
$view
)=
@_
;
if
(
$view
) {
$self
->{view}=
$view
; }
my
$request
=
$self
->request;
my
$result
=
''
;
my
$disabled
=
''
;
my
$class
=
'form_text'
;
$class
=
$self
->class
if
(
$self
->class);
my
$name
=
$self
->name;
my
$minlabel
=
$self
->{min};
my
$maxlabel
=
$self
->{max};
$minlabel
=
$self
->zerovalue
if
(
$self
->zerovalue);
$maxlabel
=
$self
->zerovalue
if
(
$self
->zerovalue);
my
$rt
=
''
;
$rt
=
'<span class="slider_label_center"> '
.
$self
->{rangetext}.
' </span>'
if
(
$self
->rangetext);
$result
=' <div class=
"slider_label"
>
<span class=
"slider_label_min"
id=
"'.$name.'_label1"
>
'.$minlabel.'
</span>
'.$rt.'
<span class=
"slider_label_max"
id=
"'.$name.'_label2"
>
'.$maxlabel.'
</span>
</div><br>
<div id=
"'.$name.'_slider"
class=
"ui-slider-2"
>
<div id=
"first"
class=
"ui-slider-handle"
>
 
;</div>
<div id=
"second"
class=
"ui-slider-handle"
>
 
;</div>
</div>
<input class=
"range_min"
type=
"hidden"
name=
"'.$name.'_min"
id=
"'.$name.'_min"
value=
""
>
<input class=
"range_max"
type=
"hidden"
name=
"'.$name.'_max"
id=
"'.$name.'_max"
value=
""
>
<input type=
"hidden"
name=
"'.$name.'"
id=
"'.$name.'"
value=
""
>
';
return
$self
->vor(
$options
).
$result
.
$self
->nach;
}
1;