Updating AjaxHelper docblocks and fixing code formatting -- lines wrap at 100 characters. Fixes #5701.

git-svn-id: https://svn.cakephp.org/repo/branches/1.2.x.x@7852 3807eeeb-6ff5-0310-8944-8be069107fe0
This commit is contained in:
nate 2008-11-08 22:15:43 +00:00
parent e9953e3f93
commit ab152bd291

View file

@ -58,49 +58,78 @@ class AjaxHelper extends AppHelper {
* *
* @var array * @var array
*/ */
var $callbacks = array('complete', 'create', 'exception', 'failure', 'interactive', 'loading', 'loaded', 'success', 'uninitialized'); var $callbacks = array(
'complete', 'create', 'exception', 'failure', 'interactive', 'loading',
'loaded', 'success', 'uninitialized'
);
/** /**
* Names of AJAX options. * Names of AJAX options.
* *
* @var array * @var array
*/ */
var $ajaxOptions = array('after', 'asynchronous', 'before', 'confirm', 'condition', 'contentType', 'encoding', 'evalScripts', 'failure', 'fallback', 'form', 'indicator', 'insertion', 'interactive', 'loaded', 'loading', 'method', 'onCreate', 'onComplete', 'onException', 'onFailure', 'onInteractive', 'onLoaded', 'onLoading', 'onSuccess', 'onUninitialized', 'parameters', 'position', 'postBody', 'requestHeaders', 'success', 'type', 'update', 'with'); var $ajaxOptions = array(
'after', 'asynchronous', 'before', 'confirm', 'condition', 'contentType', 'encoding',
'evalScripts', 'failure', 'fallback', 'form', 'indicator', 'insertion', 'interactive',
'loaded', 'loading', 'method', 'onCreate', 'onComplete', 'onException', 'onFailure',
'onInteractive', 'onLoaded', 'onLoading', 'onSuccess', 'onUninitialized', 'parameters',
'position', 'postBody', 'requestHeaders', 'success', 'type', 'update', 'with'
);
/** /**
* Options for draggable. * Options for draggable.
* *
* @var array * @var array
*/ */
var $dragOptions = array('handle', 'revert', 'snap', 'zindex', 'constraint', 'change', 'ghosting', 'starteffect', 'reverteffect', 'endeffect'); var $dragOptions = array(
'handle', 'revert', 'snap', 'zindex', 'constraint', 'change', 'ghosting',
'starteffect', 'reverteffect', 'endeffect'
);
/** /**
* Options for droppable. * Options for droppable.
* *
* @var array * @var array
*/ */
var $dropOptions = array('accept', 'containment', 'greedy', 'hoverclass', 'onHover', 'onDrop', 'overlap'); var $dropOptions = array(
'accept', 'containment', 'greedy', 'hoverclass', 'onHover', 'onDrop', 'overlap'
);
/** /**
* Options for sortable. * Options for sortable.
* *
* @var array * @var array
*/ */
var $sortOptions = array('constraint', 'containment', 'dropOnEmpty', 'ghosting', 'handle', 'hoverclass', 'onUpdate', 'onChange', 'only', 'overlap', 'scroll', 'scrollSensitivity', 'scrollSpeed', 'tag', 'tree', 'treeTag', 'update'); var $sortOptions = array(
'constraint', 'containment', 'dropOnEmpty', 'ghosting', 'handle', 'hoverclass', 'onUpdate',
'onChange', 'only', 'overlap', 'scroll', 'scrollSensitivity', 'scrollSpeed', 'tag', 'tree',
'treeTag', 'update'
);
/** /**
* Options for slider. * Options for slider.
* *
* @var array * @var array
*/ */
var $sliderOptions = array('alignX', 'alignY', 'axis', 'disabled', 'handleDisabled', 'handleImage', 'increment', 'maximum', 'minimum', 'onChange', 'onSlide', 'range', 'sliderValue', 'values'); var $sliderOptions = array(
'alignX', 'alignY', 'axis', 'disabled', 'handleDisabled', 'handleImage', 'increment',
'maximum', 'minimum', 'onChange', 'onSlide', 'range', 'sliderValue', 'values'
);
/** /**
* Options for in-place editor. * Options for in-place editor.
* *
* @var array * @var array
*/ */
var $editorOptions = array('okText', 'cancelText', 'savingText', 'formId', 'externalControl', 'rows', 'cols', 'size', 'highlightcolor', 'highlightendcolor', 'savingClassName', 'formClassName', 'loadTextURL', 'loadingText', 'callback', 'ajaxOptions', 'clickToEditText', 'collection', 'okButton', 'cancelLink', 'submitOnBlur'); var $editorOptions = array(
'okText', 'cancelText', 'savingText', 'formId', 'externalControl', 'rows', 'cols', 'size',
'highlightcolor', 'highlightendcolor', 'savingClassName', 'formClassName', 'loadTextURL',
'loadingText', 'callback', 'ajaxOptions', 'clickToEditText', 'collection', 'okButton',
'cancelLink', 'submitOnBlur'
);
/** /**
* Options for auto-complete editor. * Options for auto-complete editor.
* *
* @var array * @var array
*/ */
var $autoCompleteOptions = array('afterUpdateElement', 'callback', 'frequency', 'indicator', 'minChars', 'onShow', 'onHide', 'parameters', 'paramName', 'tokens', 'updateElement'); var $autoCompleteOptions = array(
'afterUpdateElement', 'callback', 'frequency', 'indicator', 'minChars', 'onShow', 'onHide',
'parameters', 'paramName', 'tokens', 'updateElement'
);
/** /**
* Output buffer for Ajax update content * Output buffer for Ajax update content
* *
@ -187,11 +216,13 @@ class AjaxHelper extends AppHelper {
if (empty($options['fallback']) || !isset($options['fallback'])) { if (empty($options['fallback']) || !isset($options['fallback'])) {
$options['fallback'] = $href; $options['fallback'] = $href;
} }
$htmlOptions = array_merge(array('id' => 'link' . intval(mt_rand()), 'onclick' => ''), $htmlOptions); $htmlDefaults = array('id' => 'link' . intval(mt_rand()), 'onclick' => '');
$htmlOptions = array_merge($htmlDefaults, $htmlOptions);
$htmlOptions['onclick'] .= ' event.returnValue = false; return false;'; $htmlOptions['onclick'] .= ' event.returnValue = false; return false;';
$return = $this->Html->link($title, $href, $htmlOptions, null, $escapeTitle); $return = $this->Html->link($title, $href, $htmlOptions, null, $escapeTitle);
$script = $this->Javascript->event("'{$htmlOptions['id']}'", "click", $this->remoteFunction($options)); $callback = $this->remoteFunction($options);
$script = $this->Javascript->event("'{$htmlOptions['id']}'", "click", $callback);
if (is_string($script)) { if (is_string($script)) {
$return .= $script; $return .= $script;
@ -248,30 +279,40 @@ class AjaxHelper extends AppHelper {
/** /**
* Periodically call remote url via AJAX. * Periodically call remote url via AJAX.
* *
* Periodically calls the specified url (<i>options[url]</i>) every <i>options[frequency]</i> seconds (default is 10). * Periodically calls the specified url (<i>options[url]</i>) every <i>options[frequency]</i>
* Usually used to update a specified div (<i>options[update]</i>) with the results of the remote call. * seconds (default is 10). Usually used to update a specified div (<i>options[update]</i>) with
* The options for specifying the target with url and defining callbacks is the same as linkToRemote. * the results of the remote call. The options for specifying the target with url and defining
* callbacks is the same as AjaxHelper::link().
* *
* @param array $options Callback options * @param array $options Callback options
* @return string Javascript code * @return string Javascript code
* @see AjaxHelper::link()
*/ */
function remoteTimer($options = null) { function remoteTimer($options = null) {
$frequency = (isset($options['frequency'])) ? $options['frequency'] : 10; $frequency = (isset($options['frequency'])) ? $options['frequency'] : 10;
$code = "new PeriodicalExecuter(function() {" . $this->remoteFunction($options) . "}, $frequency)"; $callback = $this->remoteFunction($options);
$code = "new PeriodicalExecuter(function() {{$callback}}, $frequency)";
return $this->Javascript->codeBlock($code); return $this->Javascript->codeBlock($code);
} }
/** /**
* Returns form tag that will submit using Ajax. * Returns form tag that will submit using Ajax.
* *
* Returns a form tag that will submit using XMLHttpRequest in the background instead of the regular * Returns a form tag that will submit using XMLHttpRequest in the background instead of the regular
* reloading POST arrangement. Even though it's using Javascript to serialize the form elements, the form submission * reloading POST arrangement. Even though it's using Javascript to serialize the form elements,
* will work just like a regular submission as viewed by the receiving side (all elements available in params). * the form submission will work just like a regular submission as viewed by the receiving side
* The options for defining callbacks is the same as link(). * (all elements available in params). The options for defining callbacks is the same
* as AjaxHelper::link().
* *
* @param array $params Form target * @param mixed $params Either a string identifying the form target, or an array of method
* parameters, including:
* - 'params' => Acts as the form target
* - 'type' => 'post' or 'get'
* - 'options' => An array containing all HTML and script options used to
* generate the form tag and Ajax request.
* @param array $type How form data is posted: 'get' or 'post' * @param array $type How form data is posted: 'get' or 'post'
* @param array $options Callback/HTML options * @param array $options Callback/HTML options
* @return string JavaScript/HTML code * @return string JavaScript/HTML code
* @see AjaxHelper::link()
*/ */
function form($params = null, $type = 'post', $options = array()) { function form($params = null, $type = 'post', $options = array()) {
$model = false; $model = false;
@ -283,25 +324,33 @@ class AjaxHelper extends AppHelper {
$options['url'] = array('action' => $params); $options['url'] = array('action' => $params);
} }
$htmlOptions = array_merge(array( $htmlDefaults = array(
'id' => 'form' . intval(mt_rand()), 'onsubmit' => "event.returnValue = false; return false;", 'id' => 'form' . intval(mt_rand()),
'type' => $type), 'onsubmit' => "event.returnValue = false; return false;",
$this->__getHtmlOptions($options, array('model', 'with')) 'type' => $type
); );
$htmlOptions = $this->__getHtmlOptions($options, array('model', 'with'));
$htmlOptions = array_merge($htmlDefaults, $htmlOptions);
$options = array_merge(array('model' => $model,'with' => "Form.serialize('{$htmlOptions['id']}')"), $options); $defaults = array('model' => $model, 'with' => "Form.serialize('{$htmlOptions['id']}')");
return $this->Form->create($options['model'], $htmlOptions) $options = array_merge($defaults, $options);
. $this->Javascript->event("'" . $htmlOptions['id']. "'", 'submit', $this->remoteFunction($options)); $callback = $this->remoteFunction($options);
$form = $this->Form->create($options['model'], $htmlOptions);
$script = $this->Javascript->event("'" . $htmlOptions['id']. "'", 'submit', $callback);
return $form . $script;
} }
/** /**
* Returns a button input tag that will submit using Ajax * Returns a button input tag that will submit using Ajax
* *
* Returns a button input tag that will submit form using XMLHttpRequest in the background instead of regular * Returns a button input tag that will submit form using XMLHttpRequest in the background instead
* reloading POST arrangement. <i>options</i> argument is the same as in <i>form_remote_tag</i> * of regular reloading POST arrangement. <i>options</i> argument is the same as
* in AjaxHelper::form().
* *
* @param string $title Input button title * @param string $title Input button title
* @param array $options Callback options * @param array $options Callback options
* @return string Ajaxed input button * @return string Ajaxed input button
* @see AjaxHelper::form()
*/ */
function submit($title = 'Submit', $options = array()) { function submit($title = 'Submit', $options = array()) {
$htmlOptions = $this->__getHtmlOptions($options); $htmlOptions = $this->__getHtmlOptions($options);
@ -315,8 +364,11 @@ class AjaxHelper extends AppHelper {
} }
$htmlOptions['onclick'] = "event.returnValue = false; return false;"; $htmlOptions['onclick'] = "event.returnValue = false; return false;";
return $this->Form->submit($title, $htmlOptions) $callback = $this->remoteFunction($options);
. $this->Javascript->event('"' . $htmlOptions['id'] . '"', 'click', $this->remoteFunction($options));
$form = $this->Form->submit($title, $htmlOptions);
$script = $this->Javascript->event('"' . $htmlOptions['id'] . '"', 'click', $callback);
return $form . $script;
} }
/** /**
* Observe field and call ajax on change. * Observe field and call ajax on change.
@ -354,7 +406,9 @@ class AjaxHelper extends AppHelper {
if (!isset($options['frequency']) || intval($options['frequency']) == 0) { if (!isset($options['frequency']) || intval($options['frequency']) == 0) {
$observer = 'EventObserver'; $observer = 'EventObserver';
} }
return $this->Javascript->codeBlock($this->_buildObserver('Form.Element.' . $observer, $field, $options)); return $this->Javascript->codeBlock(
$this->_buildObserver('Form.Element.' . $observer, $field, $options)
);
} }
/** /**
* Observe entire form and call ajax on change. * Observe entire form and call ajax on change.
@ -376,7 +430,9 @@ class AjaxHelper extends AppHelper {
if (!isset($options['frequency']) || intval($options['frequency']) == 0) { if (!isset($options['frequency']) || intval($options['frequency']) == 0) {
$observer = 'EventObserver'; $observer = 'EventObserver';
} }
return $this->Javascript->codeBlock($this->_buildObserver('Form.' . $observer, $form, $options)); return $this->Javascript->codeBlock(
$this->_buildObserver('Form.' . $observer, $form, $options)
);
} }
/** /**
* Create a text field with Autocomplete. * Create a text field with Autocomplete.
@ -402,7 +458,11 @@ class AjaxHelper extends AppHelper {
$options['id'] = Inflector::camelize(str_replace(".", "_", $field)); $options['id'] = Inflector::camelize(str_replace(".", "_", $field));
} }
$divOptions = array('id' => $options['id'] . "_autoComplete", 'class' => isset($options['class']) ? $options['class'] : 'auto_complete'); $divOptions = array(
'id' => $options['id'] . "_autoComplete",
'class' => isset($options['class']) ? $options['class'] : 'auto_complete'
);
if (isset($options['div_id'])) { if (isset($options['div_id'])) {
$divOptions['id'] = $options['div_id']; $divOptions['id'] = $options['div_id'];
unset($options['div_id']); unset($options['div_id']);
@ -426,11 +486,13 @@ class AjaxHelper extends AppHelper {
$options = $this->_optionsToString($options, array('paramName', 'indicator')); $options = $this->_optionsToString($options, array('paramName', 'indicator'));
$options = $this->_buildOptions($options, $this->autoCompleteOptions); $options = $this->_buildOptions($options, $this->autoCompleteOptions);
return $this->Form->text($field, $htmlOptions) . "\n" .
$this->Html->div(null, '', $divOptions) . "\n" . $text = $this->Form->text($field, $htmlOptions);
$this->Javascript->codeBlock("{$var}new Ajax.Autocompleter('" . $htmlOptions['id'] $div = $this->Html->div(null, '', $divOptions);
. "', '" . $divOptions['id'] . "', '" . $this->Html->url($url) . "', " . $script = "{$var}new Ajax.Autocompleter('{$htmlOptions['id']}', '{$divOptions['id']}', '";
$options . ");"); $script .= $this->Html->url($url) . "', {$options});";
return "{$text}\n{$div}\n" . $this->Javascript->codeBlock($script);
} }
/** /**
* Creates an Ajax-updateable DIV element * Creates an Ajax-updateable DIV element
@ -492,7 +554,9 @@ class AjaxHelper extends AppHelper {
$var = 'var ' . $options['var'] . ' = '; $var = 'var ' . $options['var'] . ' = ';
unset($options['var']); unset($options['var']);
} }
$options = $this->_buildOptions($this->_optionsToString($options, array('handle', 'constraint')), $this->dragOptions); $options = $this->_buildOptions(
$this->_optionsToString($options, array('handle', 'constraint')), $this->dragOptions
);
return $this->Javascript->codeBlock("{$var}new Draggable('$id', " .$options . ");"); return $this->Javascript->codeBlock("{$var}new Draggable('$id', " .$options . ");");
} }
/** /**
@ -510,7 +574,9 @@ class AjaxHelper extends AppHelper {
} else if (isset($options['accept'])) { } else if (isset($options['accept'])) {
$options['accept'] = $this->Javascript->object($options['accept']); $options['accept'] = $this->Javascript->object($options['accept']);
} }
$options = $this->_buildOptions($this->_optionsToString($options, $optionsString), $this->dropOptions); $options = $this->_buildOptions(
$this->_optionsToString($options, $optionsString), $this->dropOptions
);
return $this->Javascript->codeBlock("Droppables.add('{$id}', {$options});"); return $this->Javascript->codeBlock("Droppables.add('{$id}', {$options});");
} }
/** /**
@ -526,14 +592,20 @@ class AjaxHelper extends AppHelper {
* @return string JavaScript block to create a droppable element * @return string JavaScript block to create a droppable element
*/ */
function dropRemote($id, $options = array(), $ajaxOptions = array()) { function dropRemote($id, $options = array(), $ajaxOptions = array()) {
$options['onDrop'] = "function(element, droppable, event) {" . $this->remoteFunction($ajaxOptions) . "}"; $callback = $this->remoteFunction($ajaxOptions);
$options['onDrop'] = "function(element, droppable, event) {{$callback}}";
$optionsString = array('overlap', 'hoverclass'); $optionsString = array('overlap', 'hoverclass');
if (!isset($options['accept']) || !is_array($options['accept'])) { if (!isset($options['accept']) || !is_array($options['accept'])) {
$optionsString[] = 'accept'; $optionsString[] = 'accept';
} else if (isset($options['accept'])) { } else if (isset($options['accept'])) {
$options['accept'] = $this->Javascript->object($options['accept']); $options['accept'] = $this->Javascript->object($options['accept']);
} }
$options = $this->_buildOptions($this->_optionsToString($options, $optionsString), $this->dropOptions);
$options = $this->_buildOptions(
$this->_optionsToString($options, $optionsString),
$this->dropOptions
);
return $this->Javascript->codeBlock("Droppables.add('{$id}', {$options});"); return $this->Javascript->codeBlock("Droppables.add('{$id}', {$options});");
} }
/** /**
@ -552,12 +624,15 @@ class AjaxHelper extends AppHelper {
$var = 'var ' . $id . ' = '; $var = 'var ' . $id . ' = ';
} }
$options = $this->_optionsToString($options, array('axis', 'handleImage', 'handleDisabled')); $options = $this->_optionsToString($options, array(
'axis', 'handleImage', 'handleDisabled'
));
$callbacks = array('change', 'slide'); $callbacks = array('change', 'slide');
foreach ($callbacks as $callback) { foreach ($callbacks as $callback) {
if (isset($options[$callback])) { if (isset($options[$callback])) {
$options['on' . ucfirst($callback)] = 'function(value) {' . $options[$callback] . '}'; $call = $options[$callback];
$options['on' . ucfirst($callback)] = "function(value) {{$call}}";
unset($options[$callback]); unset($options[$callback]);
} }
} }
@ -567,7 +642,8 @@ class AjaxHelper extends AppHelper {
} }
$options = $this->_buildOptions($options, $this->sliderOptions); $options = $this->_buildOptions($options, $this->sliderOptions);
return $this->Javascript->codeBlock("{$var}new Control.Slider('$id', '$trackId', $options);"); $script = "{$var}new Control.Slider('$id', '$trackId', $options);";
return $this->Javascript->codeBlock($script);
} }
/** /**
* Makes an Ajax In Place editor control. * Makes an Ajax In Place editor control.
@ -603,9 +679,14 @@ class AjaxHelper extends AppHelper {
unset($options['var']); unset($options['var']);
} }
$options = $this->_optionsToString($options, array('okText', 'cancelText', 'savingText', 'formId', 'externalControl', 'highlightcolor', 'highlightendcolor', 'savingClassName', 'formClassName', 'loadTextURL', 'loadingText', 'clickToEditText', 'okButton', 'cancelLink')); $options = $this->_optionsToString($options, array(
'okText', 'cancelText', 'savingText', 'formId', 'externalControl', 'highlightcolor',
'highlightendcolor', 'savingClassName', 'formClassName', 'loadTextURL', 'loadingText',
'clickToEditText', 'okButton', 'cancelLink'
));
$options = $this->_buildOptions($options, $this->editorOptions); $options = $this->_buildOptions($options, $this->editorOptions);
return $this->Javascript->codeBlock("{$var}new Ajax.{$type}('{$id}', '{$url}', {$options});"); $script = "{$var}new Ajax.{$type}('{$id}', '{$url}', {$options});";
return $this->Javascript->codeBlock($script);
} }
/** /**
* Makes a list or group of floated objects sortable. * Makes a list or group of floated objects sortable.
@ -627,8 +708,17 @@ class AjaxHelper extends AppHelper {
$block = $options['block']; $block = $options['block'];
unset($options['block']); unset($options['block']);
} }
$strings = array('tag', 'constraint', 'only', 'handle', 'hoverclass', 'tree', 'treeTag', 'update', 'overlap'); $strings = array(
if (isset($options['scroll']) && $options['scroll'] != 'window' && strpos($options['scroll'], '$(') !== 0) { 'tag', 'constraint', 'only', 'handle', 'hoverclass', 'tree',
'treeTag', 'update', 'overlap'
);
$scrollIsObject = (
isset($options['scroll']) &&
$options['scroll'] != 'window' &&
strpos($options['scroll'], '$(') !== 0
);
if ($scrollIsObject) {
$strings[] = 'scroll'; $strings[] = 'scroll';
} }
@ -636,6 +726,7 @@ class AjaxHelper extends AppHelper {
$options = array_merge($options, $this->_buildCallbacks($options)); $options = array_merge($options, $this->_buildCallbacks($options));
$options = $this->_buildOptions($options, $this->sortOptions); $options = $this->_buildOptions($options, $this->sortOptions);
$result = "Sortable.create('$id', $options);"; $result = "Sortable.create('$id', $options);";
if (!$block) { if (!$block) {
return $result; return $result;
} }
@ -650,7 +741,9 @@ class AjaxHelper extends AppHelper {
function __optionsForAjax($options) { function __optionsForAjax($options) {
if (isset($options['indicator'])) { if (isset($options['indicator'])) {
if (isset($options['loading'])) { if (isset($options['loading'])) {
if (!empty($options['loading']) && substr(trim($options['loading']), -1, 1) != ';') { $loading = $options['loading'];
if (!empty($loading) && substr(trim($loading), -1, 1) != ';') {
$options['loading'] .= '; '; $options['loading'] .= '; ';
} }
$options['loading'] .= "Element.show('{$options['indicator']}');"; $options['loading'] .= "Element.show('{$options['indicator']}');";
@ -658,7 +751,9 @@ class AjaxHelper extends AppHelper {
$options['loading'] = "Element.show('{$options['indicator']}');"; $options['loading'] = "Element.show('{$options['indicator']}');";
} }
if (isset($options['complete'])) { if (isset($options['complete'])) {
if (!empty($options['complete']) && substr(trim($options['complete']), -1, 1) != ';') { $complete = $options['complete'];
if (!empty($complete) && substr(trim($complete), -1, 1) != ';') {
$options['complete'] .= '; '; $options['complete'] .= '; ';
} }
$options['complete'] .= "Element.hide('{$options['indicator']}');"; $options['complete'] .= "Element.hide('{$options['indicator']}');";
@ -672,8 +767,13 @@ class AjaxHelper extends AppHelper {
array('asynchronous' => 'true', 'evalScripts' => 'true'), array('asynchronous' => 'true', 'evalScripts' => 'true'),
$this->_buildCallbacks($options) $this->_buildCallbacks($options)
); );
$options = $this->_optionsToString($options, array('contentType', 'encoding', 'fallback', 'method', 'postBody', 'update', 'url'));
$jsOptions = array_merge($jsOptions, array_intersect_key($options, array_flip(array('contentType', 'encoding', 'method', 'postBody')))); $options = $this->_optionsToString($options, array(
'contentType', 'encoding', 'fallback', 'method', 'postBody', 'update', 'url'
));
$jsOptions = array_merge($jsOptions, array_intersect_key($options, array_flip(array(
'contentType', 'encoding', 'method', 'postBody'
))));
foreach ($options as $key => $value) { foreach ($options as $key => $value) {
switch ($key) { switch ($key) {
@ -684,7 +784,8 @@ class AjaxHelper extends AppHelper {
$jsOptions['evalScripts'] = ($value) ? 'true' : 'false'; $jsOptions['evalScripts'] = ($value) ? 'true' : 'false';
break; break;
case 'position': case 'position':
$jsOptions['insertion'] = "Insertion." . Inflector::camelize($options['position']); $pos = Inflector::camelize($options['position']);
$jsOptions['insertion'] = "Insertion.{$pos}";
break; break;
case 'with': case 'with':
$jsOptions['parameters'] = $options['with']; $jsOptions['parameters'] = $options['with'];
@ -766,10 +867,10 @@ class AjaxHelper extends AppHelper {
} }
$callback = $this->remoteFunction($options); $callback = $this->remoteFunction($options);
$javascript = "new $klass('$name', "; $hasFrequency = !(!isset($options['frequency']) || intval($options['frequency']) == 0);
$javascript .= (!isset($options['frequency']) || intval($options['frequency']) == 0 ? '' : $options['frequency'] . ', ' ) . "function(element, value) {"; $frequency = $hasFrequency ? $options['frequency'] . ', ' : '';
$javascript .= "$callback})";
return $javascript; return "new $klass('$name', {$frequency}function(element, value) {{$callback}})";
} }
/** /**
* Return Javascript text for callbacks. * Return Javascript text for callbacks.
@ -800,7 +901,14 @@ class AjaxHelper extends AppHelper {
break; break;
} }
if (isset($options['bind'])) { if (isset($options['bind'])) {
if ((is_array($options['bind']) && in_array($callback, $options['bind'])) || (is_string($options['bind']) && strpos($options['bind'], $callback) !== false)) { $bind = $options['bind'];
$hasBinding = (
(is_array($bind) && in_array($callback, $bind)) ||
(is_string($bind) && strpos($bind, $callback) !== false)
);
if ($hasBinding) {
$callbacks[$name] .= ".bind(this)"; $callbacks[$name] .= ".bind(this)";
} }
} }
@ -818,7 +926,12 @@ class AjaxHelper extends AppHelper {
*/ */
function _optionsToString($options, $stringOpts = array()) { function _optionsToString($options, $stringOpts = array()) {
foreach ($stringOpts as $option) { foreach ($stringOpts as $option) {
if (isset($options[$option]) && !empty($options[$option]) && is_string($options[$option]) && $options[$option][0] != "'") { $hasOption = (
isset($options[$option]) && !empty($options[$option]) &&
is_string($options[$option]) && $options[$option][0] != "'"
);
if ($hasOption) {
if ($options[$option] === true || $options[$option] === 'true') { if ($options[$option] === true || $options[$option] === 'true') {
$options[$option] = 'true'; $options[$option] = 'true';
} elseif ($options[$option] === false || $options[$option] === 'false') { } elseif ($options[$option] === false || $options[$option] === 'false') {
@ -853,7 +966,9 @@ class AjaxHelper extends AppHelper {
} }
} }
$out = 'var __ajaxUpdater__ = {' . join(", \n", $data) . '};' . "\n"; $out = 'var __ajaxUpdater__ = {' . join(", \n", $data) . '};' . "\n";
$out .= 'for (n in __ajaxUpdater__) { if (typeof __ajaxUpdater__[n] == "string" && $(n)) Element.update($(n), unescape(decodeURIComponent(__ajaxUpdater__[n]))); }'; $out .= 'for (n in __ajaxUpdater__) { if (typeof __ajaxUpdater__[n] == "string"';
$out .= ' && $(n)) Element.update($(n), unescape(decodeURIComponent(';
$out .= '__ajaxUpdater__[n]))); }';
e($this->Javascript->codeBlock($out, false)); e($this->Javascript->codeBlock($out, false));
} }
$scripts = $this->Javascript->getCache(); $scripts = $this->Javascript->getCache();
@ -866,4 +981,5 @@ class AjaxHelper extends AppHelper {
} }
} }
} }
?> ?>