//Web Forms 2.0
$(document).ready(function() {
if(document.implementation && document.implementation.hasFeature && !document.implementation.hasFeature('WebForms', '2.0'))
$(this).addWebForms();
$(this).addNonWebForms();
// collapsable headers
$('thead.collapsable', this).each(function() {
var $thead = $(this);
var sImgName = $thead.hasClass('collapsed') ? 'collapse_closed' : 'collapse_open';
$('
')
.prependTo($('th',$thead))
.click(function() {
if ($thead.hasClass('collapsed')) {
// show
$(this).attr('src', aDolImages['collapse_open']);
$thead.removeClass('collapsed').next('tbody').fadeIn(400);
} else {
// hide
$(this).attr('src', aDolImages['collapse_closed']);
$thead.addClass('collapsed').next('tbody').fadeOut(400);
}
});
});
});
(function($){
$.fn.addWebForms = function() {
$("input,select,textarea", this).each(function() {
// Slider
if(this.getAttribute("type") == "slider") {
var cur = $(this);
var slider = $("
").insertAfter(cur);
var handle = $("").appendTo(slider);
slider.css({
"position": cur.css("position") == "absolute" ? "absolute" : "relative",
"left": cur.css("left"),
"right": cur.css("right"),
"zIndex": cur.css("zIndex"),
"float": cur.css("float"),
"clear": cur.css("clear")
});
cur.css({ position: "absolute", opacity: 0, top: "-1000px", left: "-1000px" });
slider.slider({
max: cur.attr("max"),
min: cur.attr("min"),
value: this.getAttribute("value"),
step: cur.attr("step"),
change: function(e, ui) { cur[0].value = ui.value; cur[0].setAttribute("value", ui.value); }
});
slider = slider.sliderInstance();
}
// Range
// TODO: This realisation is incorrect. Read WebForms 2.0 carefully!
if(this.getAttribute("type") == "range") {
function updateHelper() {
var handlers = slider.sliderInstance().handle;
var x1 = parseInt($(handlers[0]).css('left')) + parseInt($(handlers[0]).outerWidth()) / 2;
var x2 = parseInt($(handlers[1]).css('left')) + parseInt($(handlers[1]).outerWidth()) / 2;
helper.css({
left: x1,
width: (x2-x1)
});
}
var cur = $(this);
var slider = $("").insertAfter(cur);
var helper = $('').appendTo(slider);
$('').appendTo(slider);
$('').appendTo(slider);
slider.addClass(cur.attr('class'));
cur.css({ position: "absolute", opacity: 0, top: "-1000px", left: "-1000px" });
var iMin = cur.attr("min") ? parseInt(cur.attr("min"), 10) : 0;
var iMax = cur.attr("max") ? parseInt(cur.attr("max"), 10) : 100;
var sRangeDv = cur.attr("range-divider") ? cur.attr("range-divider") : '-';
var values = cur.val().split(sRangeDv, 2); // get values
if (typeof(values[0]) != 'undefined' && values[0].length)
values[0] = parseInt(values[0]);
else
values[0] = iMin;
if (typeof(values[1]) != 'undefined' && values[1].length)
values[1] = parseInt(values[1]);
else
values[1] = iMax;
slider.slider({
range: true,
min: iMin,
max: iMax,
step: cur.attr("step"),
change: function(e, ui) {
values = ui.values;
cur.val( values[0] + sRangeDv + values[1] );
},
slide: function(e, ui) {
values = ui.values;
$(ui.handle).html(ui.value);
updateHelper();
}
});
var sliderInstance = slider.sliderInstance();
slider.sliderMoveTo(values[0], 0)
slider.sliderMoveTo(values[1], 1);
$(sliderInstance.handle[0]).html(values[0]);
$(sliderInstance.handle[1]).html(values[1]);
updateHelper()
}
// Date picker
if(this.getAttribute("type") == "date") {
$(this).datepicker({
changeYear: true,
dateFormat: 'yy-mm-dd',
defaultDate: -8030,
yearRange: ($(this).attr('min') ? $(this).attr('min') : '1900') + ':' + ($(this).attr('max') ? $(this).attr('max') : '2100')
});
if (window.navigator.appVersion.search(/Chrome\/(.*?) /) == -1 || parseInt(window.navigator.appVersion.match(/Chrome\/(\d+)\./)[1], 10) < 24)
if( this.getAttribute("allow_input") == null)
$(this).attr('readonly', 'readonly');
}
// DateTime picker
if(this.getAttribute("type") == "datetime") {
$(this)
.dynDateTime({
ifFormat: '%Y-%m-%d %H:%M:%S',
showsTime: true
});
if (window.navigator.appVersion.search(/Chrome\/(.*?) /) == -1 || parseInt(window.navigator.appVersion.match(/Chrome\/(\d+)\./)[1], 10) < 24)
if( this.getAttribute("allow_input") == null)
$(this).attr('readonly', 'readonly');
}
// Multiplyable
if (this.getAttribute('multiplyable') == 'true') {
$(this).multiplyable();
}
if (this.getAttribute('deletable') == 'true') {
$(this).inputDeletable();
}
// Counter for textareas
if (this.getAttribute('counter') == 'true') {
function updateCounter() {
if( $area.val() )
$counter.show( 300 );
else
$counter.hide( 300 );
$counterCont.html( $area.val().length );
}
var $area = $(this);
$area
.parents('td:first')
.append(
'' + _t('_Counter') + ':
' +
''
);
var $counter = $area.parent().parent().children('div.counter');
var $counterCont = $counter.children('b');
updateCounter();
$area.change( updateCounter ).keyup( updateCounter );
}
});
return this;
};
$.fn.addNonWebForms = function() {
$("input,select,textarea", this).each(function() {
// DoubleRange
if(this.getAttribute("type") == "doublerange") {
var cur = $(this);
var $slider = $("").insertAfter(cur);
$slider.addClass(cur.attr('class'));
cur.css({ position: "absolute", opacity: 0, top: "-1000px", left: "-1000px" });
var iMin = cur.attr("min") ? parseInt(cur.attr("min"), 10) : 0;
var iMax = cur.attr("max") ? parseInt(cur.attr("max"), 10) : 100;
var sRangeDv = cur.attr("range-divider") ? cur.attr("range-divider") : '-';
var values = cur.val().split(sRangeDv, 2); // get values
if (typeof(values[0]) != 'undefined' && values[0].length)
values[0] = parseInt(values[0]);
else
values[0] = iMin;
if (typeof(values[1]) != 'undefined' && values[1].length)
values[1] = parseInt(values[1]);
else
values[1] = iMax;
//alert($slider.slider);
$slider.slider({
range: true,
min: iMin,
max: iMax,
step: parseInt(cur.attr("step")) | 1,
values: values,
change: function(e, ui) {
values = ui.values;
cur.val( values[0] + sRangeDv + values[1] );
},
slide: function(e, ui) {
$(ui.handle).html(ui.value);
}
});
$('.ui-slider-handle', $slider).each(function(i){
$(this).html(values[i]);
});
}
});
return this;
};
$.fn.inputDeletable = function(oDeleteAlso) {
var sMinusUrl = aDolImages['wf_minus'];
return $(this).each( function() {
var eInput = this;
// insert "Remove" button
var $minusImg = $('
')
.click( function() {
var eParent = $(eInput).parent(':not(td)');
$(this).remove(); // remove button
$(eInput).remove(); // remove input
eParent.remove(); // remove parent (if present)
if (typeof oDeleteAlso != 'undefined')
$(oDeleteAlso).remove();
// Note: Do not delete parent only. It is present not everytime
})
.insertAfter($(this).parent());
});
return this;
};
$.fn.multiplyable = function() {
$(this).each(function() {
var $input = $(this);
var $inputParent = $input.parent();
var $wrapper = $inputParent.clone().children().remove().end();
var sPlusUrl = aDolImages['wf_plus'];
var sOtherUrl = aDolImages['wf_other'];
// insert "Other" button
if ($input.attr('add_other') == 'true') {
var $otherImg = $('
')
.insertAfter($inputParent)
.click(function(){
var $trc = $($inputParent).nextAll('div.clear_both:last');
$trc = $trc.length ? $trc : $inputParent; // just if div.clear_both doesn't exist
var $clearBoth = $('"').insertAfter($trc);
$wrapper
.clone()
.append('')
.insertAfter($trc)
.children(':first')
.inputDeletable($clearBoth)
.get(0)
.focus();
});
}
// insert "Add" button
var $plusImg = $('
')
.insertAfter($inputParent)
.click(function(){
var $trc = $($inputParent).nextAll('div.clear_both:last');
$trc = $trc.length ? $trc : $inputParent; // just if div.clear_both doesn't exist
var $clearBoth = $('"').insertAfter($trc);
$inputParent
.clone()
.children()
.removeAttr('id') // TODO: set unique id
.end()
.each(function(){
var $input = $('input', this);
if ($input.length && ($input.attr('type') == 'file' || $input.attr('type') == 'text'))
$input.val('');
})
.insertAfter($trc)
.children(':first')
.inputDeletable($clearBoth)
.get(0)
.focus();
});
});
return this;
};
})(jQuery);