(function($) {
  if($.fn.decorator === undefined) {
    throw "$.decorator plugin hasn't been required"
        + "This plugin depends from 'jquery.decorator' plugin. "
        + "See https://github.com/aratak/jquery.decorator/ for details."
  }

  $.decorators = (function() { return {
    slider: function() {
      if(!$.isFunction($.fn.slider)) {
        throw "decorator.slider work with jquery-ui slider. Please, require that"
      }

      var decoree = this;
      var elementFromParams = function(attributes, html, elementName) {
        elementName = elementName || 'span';
        html = (html === undefined) ? '' : html;
        return $(document.createElement(elementName)).attr(attributes).html(html);
      };
      var minLabel = elementFromParams({'data-decorator-minlabel': true}, $(decoree).attr('min'));
      var maxLabel = elementFromParams({'data-decorator-maxlabel': true}, $(decoree).attr('max'));
      var slider = elementFromParams({'data-decorator-slider': true});
      decoree.wrapper().append(maxLabel).append(minLabel).append(slider);

      $(slider).slider({
        min: $(decoree).attr('min'),
        max: $(decoree).attr('max'),
        step: (parseInt($(decoree).attr('step')) || 1),
        value: parseInt($(decoree).val()),
        slide: function(event, ui) {
          $(decoree).val( ui.value );
        }
      });
    }
  } })();
})(jQuery)
@@ -913,24 +913,125 @@
 tr('max'));%0A
+      var currentLabel = elementFromParams(%7B'data-decorator-currentlabel': true%7D, $(decoree).val());%0A
       var sl
@@ -1161,16 +1161,129 @@
 (slider)
+.append(currentLabel);%0A%0A      $(decoree).change(function() %7B%0A        $(currentLabel).html( this.value );%0A      %7D)
 ;%0A%0A     
@@ -1508,24 +1508,24 @@
 vent, ui) %7B%0A
-
           $(
@@ -1546,24 +1546,64 @@
 ui.value );%0A
+          $(decoree).trigger(%22change%22);%0A
         %7D%0A  

add label with current value