00001 <?php
00026 require_once "ZendX/JQuery/View/Helper/UiWidget.php";
00027
00037 class ZendX_JQuery_View_Helper_Slider extends ZendX_JQuery_View_Helper_UiWidget
00038 {
00049 public function slider($id, $value = null, array $params = array(), array $attribs = array())
00050 {
00051 if(!isset($attribs['id'])) {
00052 $attribs['id'] = $id;
00053 }
00054
00055 $jqh = ZendX_JQuery_View_Helper_JQuery::getJQueryHandler();
00056
00057 $params = $this->initializeStartingValues($value, $params);
00058 $handleCount = $this->getHandleCount($params);
00059
00060
00061 $hidden = "";
00062 if(!isset($params['change'])) {
00063 $sliderUpdateFn = 'function(e, ui) {'.PHP_EOL;
00064 for($i = 0; $i < $handleCount; $i++) {
00065
00066 if($i === 0) {
00067 $sliderHiddenId = $attribs['id'];
00068 } else {
00069 $sliderHiddenId = $attribs['id']."-".$i;
00070 }
00071 $sliderUpdateFn .= $this->getChangeCallback($jqh, $sliderHiddenId, $attribs['id'], $i);
00072
00073
00074 $startValue = $this->getHandleValue($i, $params);
00075 $hiddenAttribs = array('type' => 'hidden', 'id' => $sliderHiddenId, 'name' => $sliderHiddenId, 'value' => $startValue);
00076 $hidden .= '<input' . $this->_htmlAttribs($hiddenAttribs) . $this->getClosingBracket(). PHP_EOL;
00077 }
00078 $sliderUpdateFn .= "}".PHP_EOL;
00079 $params['change'] = new Zend_Json_Expr($sliderUpdateFn);
00080 }
00081
00082 $attribs['id'] .= "-slider";
00083
00084 if(count($params) > 0) {
00085 $params = ZendX_JQuery::encodeJson($params);
00086 } else {
00087 $params = '{}';
00088 }
00089
00090 $js = sprintf('%s("#%s").slider(%s);', $jqh, $attribs['id'], $params);
00091 $this->jquery->addOnLoad($js);
00092
00093 $html = '<div' . $this->_htmlAttribs($attribs) . '>';
00094 for($i = 0; $i < $handleCount; $i++) {
00095 $html .= '<div class="ui-slider-handle"></div>';
00096 }
00097 $html .= '</div>';
00098
00099 return $hidden.$html;
00100 }
00101
00102 protected function getChangeCallback($jqh, $sliderHiddenId, $elementId, $handlerNum)
00103 {
00104 if(version_compare($this->jquery->getUiVersion(), "1.7.0") >= 0) {
00105 return sprintf(' %s("#%s").attr("value", %s("#%s-slider").slider("values", %d));'.PHP_EOL,
00106 $jqh, $sliderHiddenId, $jqh, $elementId, $handlerNum
00107 );
00108 } else {
00109 return sprintf(' %s("#%s").attr("value", %s("#%s-slider").slider("value", %d));'.PHP_EOL,
00110 $jqh, $sliderHiddenId, $jqh, $elementId, $handlerNum
00111 );
00112 }
00113 }
00114
00115 protected function getHandleCount($params)
00116 {
00117 if(version_compare($this->jquery->getUiVersion(), "1.7.0") >= 0) {
00118 return count($params['values']);
00119 } else {
00120 return count($params['handles']);
00121 }
00122 }
00123
00124 protected function getHandleValue($handleNum, $params)
00125 {
00126 if(version_compare($this->jquery->getUiVersion(), "1.7.0") >= 0) {
00127 return $params['values'][$handleNum];
00128 } else {
00129 return $params['handles'][$handleNum]['start'];
00130 }
00131 }
00132
00133 protected function initializeStartingValues($value, $params)
00134 {
00135 $values = array();
00136 if(isset($params['value'])) {
00137 $values[] = $params['value'];
00138 unset($params['value']);
00139 } else if(isset($params['values'])) {
00140 $values = $params['values'];
00141 unset($params['values']);
00142 } else if(isset($params['handles'])) {
00143 for($i = 0; $i < count($params['handles']); $i++) {
00144 $values[] = $params['handles'][$i]['start'];
00145 }
00146 unset($params['handles']);
00147 } else if(isset($params['startValue'])) {
00148 $values[] = $params['startValue'];
00149 unset($params['startValue']);
00150 } else if(is_numeric($value)) {
00151 $values[] = $value;
00152 }
00153
00154 if(version_compare($this->jquery->getUiVersion(), "1.7.0") >= 0) {
00155 $params['values'] = $values;
00156 } else {
00157 $params['handles'] = array();
00158 for($i = 0; $i < count($values); $i++) {
00159 $params['handles'][$i]['start'] = $values[$i];
00160 }
00161 }
00162 return $params;
00163 }
00164 }