| @@ 16-346 (lines=331) @@ | ||
| 13 | * @since Version 0.2 |
|
| 14 | * @filesource |
|
| 15 | */ |
|
| 16 | class Scriptaculous extends Prototype |
|
| 17 | { |
|
| 18 | public $TOGGLE_EFFECTS = ['toggle_appear', 'toggle_slide', 'toggle_blind']; |
|
| 19 | ||
| 20 | /** |
|
| 21 | * Scriptaculous constructor. |
|
| 22 | */ |
|
| 23 | public function __construct() |
|
| 24 | { |
|
| 25 | } |
|
| 26 | ||
| 27 | /** |
|
| 28 | * @param $element_id |
|
| 29 | * @param null $options |
|
| 30 | * @return string |
|
| 31 | */ |
|
| 32 | public function dragable_element($element_id, $options = null) |
|
| 33 | { |
|
| 34 | return $this->tag($this->_dragable_element_js($element_id, $options)); |
|
| 35 | } |
|
| 36 | ||
| 37 | /** |
|
| 38 | * @param $element_id |
|
| 39 | * @param null $options |
|
| 40 | * @return string |
|
| 41 | */ |
|
| 42 | public function drop_receiving_element($element_id, $options = null) |
|
| 43 | { |
|
| 44 | return $this->tag($this->_drop_receiving_element($element_id, $options)); |
|
| 45 | } |
|
| 46 | ||
| 47 | /** |
|
| 48 | * @param $name |
|
| 49 | * @param bool $element_id |
|
| 50 | * @param null $js_options |
|
| 51 | * @return string |
|
| 52 | */ |
|
| 53 | public function visual_effect($name, $element_id = false, $js_options = null) |
|
| 54 | { |
|
| 55 | $element = $element_id ? "'$element_id'" : 'element'; |
|
| 56 | ||
| 57 | $js_queue = ''; |
|
| 58 | if (isset($js_options) && is_array($js_options['queue'])) { |
|
| 59 | } elseif (isset($js_options)) { |
|
| 60 | $js_queue = "'$js_options'"; |
|
| 61 | } |
|
| 62 | ||
| 63 | if (in_array($name, $this->TOGGLE_EFFECTS)) { |
|
| 64 | return "Effect.toggle($element,'" . str_replace('toggle_', '', $name) . "'," . $this->_options_for_javascript($js_options) . ')'; |
|
| 65 | } else { |
|
| 66 | return 'new Effect.' . ucwords($name) . "($element," . $this->_options_for_javascript($js_options) . ')'; |
|
| 67 | } |
|
| 68 | } |
|
| 69 | ||
| 70 | /** |
|
| 71 | * @param $element_id |
|
| 72 | * @param null $options |
|
| 73 | * @return string |
|
| 74 | */ |
|
| 75 | public function sortabe_element($element_id, $options = null) |
|
| 76 | { |
|
| 77 | return $this->tag($this->_sortabe_element($element_id, $options)); |
|
| 78 | } |
|
| 79 | ||
| 80 | ///////////////////////////////////////////////////////////////////////////////////// |
|
| 81 | // Private functions |
|
| 82 | ///////////////////////////////////////////////////////////////////////////////////// |
|
| 83 | ||
| 84 | /** |
|
| 85 | * @param $element_id |
|
| 86 | * @param $options |
|
| 87 | * @return string |
|
| 88 | */ |
|
| 89 | ||
| 90 | public function _sortabe_element($element_id, $options) |
|
| 91 | { |
|
| 92 | //if (isset($options['with'])) |
|
| 93 | { |
|
| 94 | $options['with'] = "Sortable.serialize('$element_id')"; |
|
| 95 | } |
|
| 96 | ||
| 97 | //if (isset($option['onUpdate'])) |
|
| 98 | { |
|
| 99 | $options['onUpdate'] = 'function(){' . $this->remote_function($options) . '}'; |
|
| 100 | } |
|
| 101 | ||
| 102 | foreach ($options as $var => $val) { |
|
| 103 | if (in_array($var, $this->AJAX_OPTIONS)) { |
|
| 104 | unset($options[$var]); |
|
| 105 | } |
|
| 106 | } |
|
| 107 | ||
| 108 | $arr = ['tag', 'overlap', 'contraint', 'handle']; |
|
| 109 | ||
| 110 | foreach ($arr as $var) { |
|
| 111 | if (isset($options[$var])) { |
|
| 112 | $options[$var] = "'" . $options[$var] . "'"; |
|
| 113 | } |
|
| 114 | } |
|
| 115 | ||
| 116 | if (isset($options['containment'])) { |
|
| 117 | $options['containment'] = $this->_array_or_string_for_javascript($options['containment']); |
|
| 118 | } |
|
| 119 | ||
| 120 | if (isset($options['only'])) { |
|
| 121 | $options['only'] = $this->_array_or_string_for_javascript($options['only']); |
|
| 122 | } |
|
| 123 | ||
| 124 | return "Sortable.create('$element_id'," . $this->_options_for_javascript($options) . ')'; |
|
| 125 | } |
|
| 126 | ||
| 127 | /** |
|
| 128 | * @param $element_id |
|
| 129 | * @param $options |
|
| 130 | * @return string |
|
| 131 | */ |
|
| 132 | public function _dragable_element_js($element_id, $options) |
|
| 133 | { |
|
| 134 | return 'new Draggable(\'' . $element_id . '\',' . $this->_options_for_javascript($options) . ')'; |
|
| 135 | } |
|
| 136 | ||
| 137 | /** |
|
| 138 | * @param $element_id |
|
| 139 | * @param $options |
|
| 140 | * @return string |
|
| 141 | */ |
|
| 142 | public function _drop_receiving_element($element_id, $options) |
|
| 143 | { |
|
| 144 | ||
| 145 | //if (isset($options['with'])) |
|
| 146 | { |
|
| 147 | $options['with'] = '\'id=\' + encodeURIComponent(element.id)'; |
|
| 148 | } |
|
| 149 | ||
| 150 | //if (isset($option['onDrop'])) |
|
| 151 | { |
|
| 152 | $options['onDrop'] = 'function(element){' . $this->remote_function($options) . '}'; |
|
| 153 | } |
|
| 154 | ||
| 155 | if (is_array($options)) { |
|
| 156 | foreach ($options as $var => $val) { |
|
| 157 | if (in_array($var, $this->AJAX_OPTIONS)) { |
|
| 158 | unset($options[$var]); |
|
| 159 | } |
|
| 160 | } |
|
| 161 | } |
|
| 162 | ||
| 163 | if (isset($options['accept'])) { |
|
| 164 | $options['accept'] = $this->_array_or_string_for_javascript($options['accept']); |
|
| 165 | } |
|
| 166 | ||
| 167 | if (isset($options['hoverclass'])) { |
|
| 168 | $options['hoverclass'] = "'" . $options['hoverclass'] . "'"; |
|
| 169 | } |
|
| 170 | ||
| 171 | return 'Droppables.add(\'' . $element_id . '\',' . $this->_options_for_javascript($options) . ')'; |
|
| 172 | } |
|
| 173 | ||
| 174 | ///////////////////////////////////////////////////////////////////////////////////// |
|
| 175 | // Merged Javascript macro |
|
| 176 | ///////////////////////////////////////////////////////////////////////////////////// |
|
| 177 | ||
| 178 | /** |
|
| 179 | * @param $field_id |
|
| 180 | * @param $options |
|
| 181 | * @param bool $tag |
|
| 182 | * @return string |
|
| 183 | */ |
|
| 184 | public function in_place_editor($field_id, $options, $tag = true) |
|
| 185 | { |
|
| 186 | $function = 'new Ajax.InPlaceEditor('; |
|
| 187 | $function .= "'$field_id', "; |
|
| 188 | $function .= "'" . $options['url'] . "'"; |
|
| 189 | ||
| 190 | $js_options = []; |
|
| 191 | if (isset($options['cancel_text'])) { |
|
| 192 | $js_options['cancelText'] = $options['cancel_text']; |
|
| 193 | } |
|
| 194 | if (isset($options['save_text'])) { |
|
| 195 | $js_options['okText'] = $options['save_text']; |
|
| 196 | } |
|
| 197 | if (isset($options['loading_text'])) { |
|
| 198 | $js_options['loadingText'] = $options['loading_text']; |
|
| 199 | } |
|
| 200 | if (isset($options['rows'])) { |
|
| 201 | $js_options['rows'] = $options['rows']; |
|
| 202 | } |
|
| 203 | if (isset($options['cols'])) { |
|
| 204 | $js_options['cols'] = $options['cols']; |
|
| 205 | } |
|
| 206 | if (isset($options['size'])) { |
|
| 207 | $js_options['size'] = $options['size']; |
|
| 208 | } |
|
| 209 | if (isset($options['external_control'])) { |
|
| 210 | $js_options['externalControl'] = "'" . $options['external_control'] . "'"; |
|
| 211 | } |
|
| 212 | if (isset($options['load_text_url'])) { |
|
| 213 | $js_options['loadTextURL'] = "'" . $options['load_text_url'] . "'"; |
|
| 214 | } |
|
| 215 | if (isset($options['options'])) { |
|
| 216 | $js_options['ajaxOptions'] = $options['options']; |
|
| 217 | } |
|
| 218 | if (isset($options['script'])) { |
|
| 219 | $js_options['evalScripts'] = $options['script']; |
|
| 220 | } |
|
| 221 | if (isset($options['with'])) { |
|
| 222 | $js_options['callback'] = 'function(form) { return ' . $options['with'] . ' }'; |
|
| 223 | } |
|
| 224 | ||
| 225 | $function .= ', ' . $this->_options_for_javascript($js_options) . ' )'; |
|
| 226 | if ($tag) { |
|
| 227 | return $this->tag($function); |
|
| 228 | } else { |
|
| 229 | return $function; |
|
| 230 | } |
|
| 231 | } |
|
| 232 | ||
| 233 | /** |
|
| 234 | * @param $object |
|
| 235 | * @param null $tag_options |
|
| 236 | * @param null $in_place_editor_options |
|
| 237 | * @return string |
|
| 238 | */ |
|
| 239 | public function in_place_editor_field($object, $tag_options = null, $in_place_editor_options = null) |
|
| 240 | { |
|
| 241 | $ret_val = ''; |
|
| 242 | $ret_val .= '<span id="' . $object . '" class="in_place_editor_field">' . (isset($tag_options['value']) ? $tag_options['value'] : '') . '</span>'; |
|
| 243 | $ret_val .= $this->in_place_editor($object, $in_place_editor_options); |
|
| 244 | ||
| 245 | return $ret_val; |
|
| 246 | } |
|
| 247 | ||
| 248 | /** |
|
| 249 | * @param $field_id |
|
| 250 | * @param $options |
|
| 251 | * @return mixed |
|
| 252 | */ |
|
| 253 | public function auto_complete_field($field_id, $options) |
|
| 254 | { |
|
| 255 | $function = "var $field_id" . '_auto_completer = new Ajax.Autocompleter('; |
|
| 256 | $function .= "'$field_id', "; |
|
| 257 | $function .= "'" . (isset($options['update']) ? $options['update'] : $field_id . '_auto_complete') . "', "; |
|
| 258 | $function .= "'" . $options['url'] . "'"; |
|
| 259 | ||
| 260 | $js_options = []; |
|
| 261 | if (isset($options['tokens'])) { |
|
| 262 | $js_options['tokens'] = $this->javascript->_array_or_string_for_javascript($options['tokens']); |
|
| 263 | } |
|
| 264 | if (isset($options['with'])) { |
|
| 265 | $js_options['callback'] = 'function(element, value) { return ' . $options['with'] . ' }'; |
|
| 266 | } |
|
| 267 | if (isset($options['indicator'])) { |
|
| 268 | $js_options['indicator'] = "'" . $options['indicator'] . "'"; |
|
| 269 | } |
|
| 270 | if (isset($options['select'])) { |
|
| 271 | $js_options['select'] = "'" . $options['select'] . "'"; |
|
| 272 | } |
|
| 273 | ||
| 274 | foreach (['on_show' => 'onShow', 'on_hide' => 'onHide', 'min_chars' => 'min_chars'] as $var => $val) { |
|
| 275 | if (isset($options[$var])) { |
|
| 276 | $js_options['$val'] = $options['var']; |
|
| 277 | } |
|
| 278 | } |
|
| 279 | ||
| 280 | $function .= ', ' . $this->_options_for_javascript($js_options) . ' )'; |
|
| 281 | ||
| 282 | return $this->tag($function); |
|
| 283 | } |
|
| 284 | ||
| 285 | /** |
|
| 286 | * @param $entries |
|
| 287 | * @param $field |
|
| 288 | * @param null $phrase |
|
| 289 | */ |
|
| 290 | public function auto_complete_results($entries, $field, $phrase = null) |
|
| 291 | { |
|
| 292 | if (!is_array($entries)) { |
|
| 293 | return; |
|
| 294 | } |
|
| 295 | $ret_val = '<ul>'; |
|
| 296 | // Complete this function |
|
| 297 | } |
|
| 298 | ||
| 299 | /** |
|
| 300 | * @param $object |
|
| 301 | * @param null $tag_options |
|
| 302 | * @param null $completion_options |
|
| 303 | * @return string |
|
| 304 | */ |
|
| 305 | public function text_field_with_auto_complete($object, $tag_options = null, $completion_options = null) |
|
| 306 | { |
|
| 307 | $ret_val = isset($completion_options['skip_style']) ? '' : $this->_auto_complete_stylesheet(); |
|
| 308 | $ret_val .= '<input autocomplete="off" id="' |
|
| 309 | . $object |
|
| 310 | . '" name="' |
|
| 311 | . $object |
|
| 312 | . '" size="' |
|
| 313 | . (isset($tag_options['size']) ? $tag_options['size'] : 30) |
|
| 314 | . '" type="text" value="' |
|
| 315 | . (isset($tag_options['size']) ? $tag_options['value'] : '') |
|
| 316 | . '" ' |
|
| 317 | . (isset($tag_options['class']) ? 'class = "' |
|
| 318 | . $tag_options['class'] |
|
| 319 | . '" ' : '') |
|
| 320 | . '>'; |
|
| 321 | ||
| 322 | $ret_val .= '<div id="' . $object . '_auto_complete" class="auto_complete"></div>'; |
|
| 323 | $ret_val .= $this->auto_complete_field($object, $completion_options); |
|
| 324 | ||
| 325 | return $ret_val; |
|
| 326 | } |
|
| 327 | ||
| 328 | /** |
|
| 329 | * @return string |
|
| 330 | */ |
|
| 331 | public function _auto_complete_stylesheet() |
|
| 332 | { |
|
| 333 | return '<style> div.auto_complete { |
|
| 334 | width: 350px; |
|
| 335 | background: #fff; |
|
| 336 | } |
|
| 337 | div.auto_complete ul { |
|
| 338 | border:1px solid #888; |
|
| 339 | margin:0; |
|
| 340 | padding:0; |
|
| 341 | width:100%; |
|
| 342 | list-style-type:none; |
|
| 343 | } |
|
| 344 | div.auto_complete ul li { |
|
| 345 | margin:0; |
|
| 346 | padding:3px; |
|
| 347 | } |
|
| 348 | div.auto_complete ul li.selected { |
|
| 349 | background-color: #ffb; |
|
| @@ 16-343 (lines=328) @@ | ||
| 13 | * @since Version 0.2 |
|
| 14 | * @filesource |
|
| 15 | */ |
|
| 16 | class Scriptaculous extends Prototype |
|
| 17 | { |
|
| 18 | public $TOGGLE_EFFECTS = ['toggle_appear', 'toggle_slide', 'toggle_blind']; |
|
| 19 | ||
| 20 | /** |
|
| 21 | * Scriptaculous constructor. |
|
| 22 | */ |
|
| 23 | public function __construct() |
|
| 24 | { |
|
| 25 | } |
|
| 26 | ||
| 27 | /** |
|
| 28 | * @param $element_id |
|
| 29 | * @param null $options |
|
| 30 | * @return string |
|
| 31 | */ |
|
| 32 | public function dragable_element($element_id, $options = null) |
|
| 33 | { |
|
| 34 | return $this->tag($this->_dragable_element_js($element_id, $options)); |
|
| 35 | } |
|
| 36 | ||
| 37 | /** |
|
| 38 | * @param $element_id |
|
| 39 | * @param null $options |
|
| 40 | * @return string |
|
| 41 | */ |
|
| 42 | public function drop_receiving_element($element_id, $options = null) |
|
| 43 | { |
|
| 44 | return $this->tag($this->_drop_receiving_element($element_id, $options)); |
|
| 45 | } |
|
| 46 | ||
| 47 | /** |
|
| 48 | * @param $name |
|
| 49 | * @param bool $element_id |
|
| 50 | * @param null $js_options |
|
| 51 | * @return string |
|
| 52 | */ |
|
| 53 | public function visual_effect($name, $element_id = false, $js_options = null) |
|
| 54 | { |
|
| 55 | $element = $element_id ? "'$element_id'" : 'element'; |
|
| 56 | ||
| 57 | $js_queue = ''; |
|
| 58 | if (isset($js_options) && is_array($js_options['queue'])) { |
|
| 59 | } elseif (isset($js_options)) { |
|
| 60 | $js_queue = "'$js_options'"; |
|
| 61 | } |
|
| 62 | ||
| 63 | if (in_array($name, $this->TOGGLE_EFFECTS)) { |
|
| 64 | return "Effect.toggle($element,'" . str_replace('toggle_', '', $name) . "'," . $this->_options_for_javascript($js_options) . ')'; |
|
| 65 | } else { |
|
| 66 | return 'new Effect.' . ucwords($name) . "($element," . $this->_options_for_javascript($js_options) . ')'; |
|
| 67 | } |
|
| 68 | } |
|
| 69 | ||
| 70 | /** |
|
| 71 | * @param $element_id |
|
| 72 | * @param null $options |
|
| 73 | * @return string |
|
| 74 | */ |
|
| 75 | public function sortabe_element($element_id, $options = null) |
|
| 76 | { |
|
| 77 | return $this->tag($this->_sortabe_element($element_id, $options)); |
|
| 78 | } |
|
| 79 | ||
| 80 | ///////////////////////////////////////////////////////////////////////////////////// |
|
| 81 | // Private functions |
|
| 82 | ///////////////////////////////////////////////////////////////////////////////////// |
|
| 83 | ||
| 84 | /** |
|
| 85 | * @param $element_id |
|
| 86 | * @param $options |
|
| 87 | * @return string |
|
| 88 | */ |
|
| 89 | public function _sortabe_element($element_id, $options) |
|
| 90 | { |
|
| 91 | //if (isset($options['with'])) { |
|
| 92 | $options['with'] = "Sortable.serialize('$element_id')"; |
|
| 93 | // } |
|
| 94 | ||
| 95 | //if (isset($option['onUpdate'])) { |
|
| 96 | $options['onUpdate'] = 'function(){' . $this->remote_function($options) . '}'; |
|
| 97 | //} |
|
| 98 | ||
| 99 | foreach ($options as $var => $val) { |
|
| 100 | if (in_array($var, $this->AJAX_OPTIONS)) { |
|
| 101 | unset($options[$var]); |
|
| 102 | } |
|
| 103 | } |
|
| 104 | ||
| 105 | $arr = ['tag', 'overlap', 'contraint', 'handle']; |
|
| 106 | ||
| 107 | foreach ($arr as $var) { |
|
| 108 | if (isset($options[$var])) { |
|
| 109 | $options[$var] = "'" . $options[$var] . "'"; |
|
| 110 | } |
|
| 111 | } |
|
| 112 | ||
| 113 | if (isset($options['containment'])) { |
|
| 114 | $options['containment'] = $this->_array_or_string_for_javascript($options['containment']); |
|
| 115 | } |
|
| 116 | ||
| 117 | if (isset($options['only'])) { |
|
| 118 | $options['only'] = $this->_array_or_string_for_javascript($options['only']); |
|
| 119 | } |
|
| 120 | ||
| 121 | return "Sortable.create('$element_id'," . $this->_options_for_javascript($options) . ')'; |
|
| 122 | } |
|
| 123 | ||
| 124 | /** |
|
| 125 | * @param $element_id |
|
| 126 | * @param $options |
|
| 127 | * @return string |
|
| 128 | */ |
|
| 129 | public function _dragable_element_js($element_id, $options) |
|
| 130 | { |
|
| 131 | return 'new Draggable(\'' . $element_id . '\',' . $this->_options_for_javascript($options) . ')'; |
|
| 132 | } |
|
| 133 | ||
| 134 | /** |
|
| 135 | * @param $element_id |
|
| 136 | * @param $options |
|
| 137 | * @return string |
|
| 138 | */ |
|
| 139 | public function _drop_receiving_element($element_id, $options) |
|
| 140 | { |
|
| 141 | ||
| 142 | //if (isset($options['with'])) { |
|
| 143 | $options['with'] = '\'id=\' + encodeURIComponent(element.id)'; |
|
| 144 | // } |
|
| 145 | ||
| 146 | //if (isset($option['onDrop'])) |
|
| 147 | ||
| 148 | { |
|
| 149 | $options['onDrop'] = 'function(element){' . $this->remote_function($options) . '}'; |
|
| 150 | } |
|
| 151 | ||
| 152 | if (is_array($options)) { |
|
| 153 | foreach ($options as $var => $val) { |
|
| 154 | if (in_array($var, $this->AJAX_OPTIONS)) { |
|
| 155 | unset($options[$var]); |
|
| 156 | } |
|
| 157 | } |
|
| 158 | } |
|
| 159 | ||
| 160 | if (isset($options['accept'])) { |
|
| 161 | $options['accept'] = $this->_array_or_string_for_javascript($options['accept']); |
|
| 162 | } |
|
| 163 | ||
| 164 | if (isset($options['hoverclass'])) { |
|
| 165 | $options['hoverclass'] = "'" . $options['hoverclass'] . "'"; |
|
| 166 | } |
|
| 167 | ||
| 168 | return 'Droppables.add(\'' . $element_id . '\',' . $this->_options_for_javascript($options) . ')'; |
|
| 169 | } |
|
| 170 | ||
| 171 | ///////////////////////////////////////////////////////////////////////////////////// |
|
| 172 | // Merged Javascript macro |
|
| 173 | ///////////////////////////////////////////////////////////////////////////////////// |
|
| 174 | ||
| 175 | /** |
|
| 176 | * @param $field_id |
|
| 177 | * @param $options |
|
| 178 | * @param bool $tag |
|
| 179 | * @return string |
|
| 180 | */ |
|
| 181 | public function in_place_editor($field_id, $options, $tag = true) |
|
| 182 | { |
|
| 183 | $function = 'new Ajax.InPlaceEditor('; |
|
| 184 | $function .= "'$field_id', "; |
|
| 185 | $function .= "'" . $options['url'] . "'"; |
|
| 186 | ||
| 187 | $js_options = []; |
|
| 188 | if (isset($options['cancel_text'])) { |
|
| 189 | $js_options['cancelText'] = $options['cancel_text']; |
|
| 190 | } |
|
| 191 | if (isset($options['save_text'])) { |
|
| 192 | $js_options['okText'] = $options['save_text']; |
|
| 193 | } |
|
| 194 | if (isset($options['loading_text'])) { |
|
| 195 | $js_options['loadingText'] = $options['loading_text']; |
|
| 196 | } |
|
| 197 | if (isset($options['rows'])) { |
|
| 198 | $js_options['rows'] = $options['rows']; |
|
| 199 | } |
|
| 200 | if (isset($options['cols'])) { |
|
| 201 | $js_options['cols'] = $options['cols']; |
|
| 202 | } |
|
| 203 | if (isset($options['size'])) { |
|
| 204 | $js_options['size'] = $options['size']; |
|
| 205 | } |
|
| 206 | if (isset($options['external_control'])) { |
|
| 207 | $js_options['externalControl'] = "'" . $options['external_control'] . "'"; |
|
| 208 | } |
|
| 209 | if (isset($options['load_text_url'])) { |
|
| 210 | $js_options['loadTextURL'] = "'" . $options['load_text_url'] . "'"; |
|
| 211 | } |
|
| 212 | if (isset($options['options'])) { |
|
| 213 | $js_options['ajaxOptions'] = $options['options']; |
|
| 214 | } |
|
| 215 | if (isset($options['script'])) { |
|
| 216 | $js_options['evalScripts'] = $options['script']; |
|
| 217 | } |
|
| 218 | if (isset($options['with'])) { |
|
| 219 | $js_options['callback'] = 'function(form) { return ' . $options['with'] . ' }'; |
|
| 220 | } |
|
| 221 | ||
| 222 | $function .= ', ' . $this->_options_for_javascript($js_options) . ' )'; |
|
| 223 | if ($tag) { |
|
| 224 | return $this->tag($function); |
|
| 225 | } else { |
|
| 226 | return $function; |
|
| 227 | } |
|
| 228 | } |
|
| 229 | ||
| 230 | /** |
|
| 231 | * @param $object |
|
| 232 | * @param null $tag_options |
|
| 233 | * @param null $in_place_editor_options |
|
| 234 | * @return string |
|
| 235 | */ |
|
| 236 | public function in_place_editor_field($object, $tag_options = null, $in_place_editor_options = null) |
|
| 237 | { |
|
| 238 | $ret_val = ''; |
|
| 239 | $ret_val .= '<span id="' . $object . '" class="in_place_editor_field">' . (isset($tag_options['value']) ? $tag_options['value'] : '') . '</span>'; |
|
| 240 | $ret_val .= $this->in_place_editor($object, $in_place_editor_options); |
|
| 241 | ||
| 242 | return $ret_val; |
|
| 243 | } |
|
| 244 | ||
| 245 | /** |
|
| 246 | * @param $field_id |
|
| 247 | * @param $options |
|
| 248 | * @return mixed |
|
| 249 | */ |
|
| 250 | public function auto_complete_field($field_id, $options) |
|
| 251 | { |
|
| 252 | $function = "var $field_id" . '_auto_completer = new Ajax.Autocompleter('; |
|
| 253 | $function .= "'$field_id', "; |
|
| 254 | $function .= "'" . (isset($options['update']) ? $options['update'] : $field_id . '_auto_complete') . "', "; |
|
| 255 | $function .= "'" . $options['url'] . "'"; |
|
| 256 | ||
| 257 | $js_options = []; |
|
| 258 | if (isset($options['tokens'])) { |
|
| 259 | $js_options['tokens'] = $this->javascript->_array_or_string_for_javascript($options['tokens']); |
|
| 260 | } |
|
| 261 | if (isset($options['with'])) { |
|
| 262 | $js_options['callback'] = 'function(element, value) { return ' . $options['with'] . ' }'; |
|
| 263 | } |
|
| 264 | if (isset($options['indicator'])) { |
|
| 265 | $js_options['indicator'] = "'" . $options['indicator'] . "'"; |
|
| 266 | } |
|
| 267 | if (isset($options['select'])) { |
|
| 268 | $js_options['select'] = "'" . $options['select'] . "'"; |
|
| 269 | } |
|
| 270 | ||
| 271 | foreach (['on_show' => 'onShow', 'on_hide' => 'onHide', 'min_chars' => 'min_chars'] as $var => $val) { |
|
| 272 | if (isset($options[$var])) { |
|
| 273 | $js_options['$val'] = $options['var']; |
|
| 274 | } |
|
| 275 | } |
|
| 276 | ||
| 277 | $function .= ', ' . $this->_options_for_javascript($js_options) . ' )'; |
|
| 278 | ||
| 279 | return $this->tag($function); |
|
| 280 | } |
|
| 281 | ||
| 282 | /** |
|
| 283 | * @param $entries |
|
| 284 | * @param $field |
|
| 285 | * @param null $phrase |
|
| 286 | */ |
|
| 287 | public function auto_complete_results($entries, $field, $phrase = null) |
|
| 288 | { |
|
| 289 | if (!is_array($entries)) { |
|
| 290 | return; |
|
| 291 | } |
|
| 292 | $ret_val = '<ul>'; |
|
| 293 | // Complete this function |
|
| 294 | } |
|
| 295 | ||
| 296 | /** |
|
| 297 | * @param $object |
|
| 298 | * @param null $tag_options |
|
| 299 | * @param null $completion_options |
|
| 300 | * @return string |
|
| 301 | */ |
|
| 302 | public function text_field_with_auto_complete($object, $tag_options = null, $completion_options = null) |
|
| 303 | { |
|
| 304 | $ret_val = isset($completion_options['skip_style']) ? '' : $this->_auto_complete_stylesheet(); |
|
| 305 | $ret_val .= '<input autocomplete="off" id="' |
|
| 306 | . $object |
|
| 307 | . '" name="' |
|
| 308 | . $object |
|
| 309 | . '" size="' |
|
| 310 | . (isset($tag_options['size']) ? $tag_options['size'] : 30) |
|
| 311 | . '" type="text" value="' |
|
| 312 | . (isset($tag_options['size']) ? $tag_options['value'] : '') |
|
| 313 | . '" ' |
|
| 314 | . (isset($tag_options['class']) ? 'class = "' |
|
| 315 | . $tag_options['class'] |
|
| 316 | . '" ' : '') |
|
| 317 | . '>'; |
|
| 318 | ||
| 319 | $ret_val .= '<div id="' . $object . '_auto_complete" class="auto_complete"></div>'; |
|
| 320 | $ret_val .= $this->auto_complete_field($object, $completion_options); |
|
| 321 | ||
| 322 | return $ret_val; |
|
| 323 | } |
|
| 324 | ||
| 325 | /** |
|
| 326 | * @return string |
|
| 327 | */ |
|
| 328 | public function _auto_complete_stylesheet() |
|
| 329 | { |
|
| 330 | return '<style> div.auto_complete { |
|
| 331 | width: 350px; |
|
| 332 | background: #fff; |
|
| 333 | } |
|
| 334 | div.auto_complete ul { |
|
| 335 | border:1px solid #888; |
|
| 336 | margin:0; |
|
| 337 | padding:0; |
|
| 338 | width:100%; |
|
| 339 | list-style-type:none; |
|
| 340 | } |
|
| 341 | div.auto_complete ul li { |
|
| 342 | margin:0; |
|
| 343 | padding:3px; |
|
| 344 | } |
|
| 345 | div.auto_complete ul li.selected { |
|
| 346 | background-color: #ffb; |
|