#818660 by yched, sun: Provide an AJAX command to invoke simple jQuery methods.
parent
ff119bc0cc
commit
4e90d24dd9
|
@ -1002,7 +1002,7 @@ function ajax_command_changed($selector, $asterisk = '') {
|
||||||
* The 'css' command will instruct the client to use the jQuery css() method
|
* The 'css' command will instruct the client to use the jQuery css() method
|
||||||
* to apply the CSS arguments to elements matched by the given selector.
|
* to apply the CSS arguments to elements matched by the given selector.
|
||||||
*
|
*
|
||||||
* This command is implemented by Drupal.ajax.prototype.commands.insert()
|
* This command is implemented by Drupal.ajax.prototype.commands.css()
|
||||||
* defined in misc/ajax.js.
|
* defined in misc/ajax.js.
|
||||||
*
|
*
|
||||||
* @param $selector
|
* @param $selector
|
||||||
|
@ -1087,6 +1087,37 @@ function ajax_command_data($selector, $name, $value) {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a Drupal AJAX 'invoke' command.
|
||||||
|
*
|
||||||
|
* The 'invoke' command will instruct the client to invoke the given jQuery
|
||||||
|
* method with the supplied arguments on the elements matched by the given
|
||||||
|
* selector. Intended for simple jQuery commands, such as attr(), addClass(),
|
||||||
|
* removeClass(), toggleClass(), etc.
|
||||||
|
*
|
||||||
|
* This command is implemented by Drupal.ajax.prototype.commands.invoke()
|
||||||
|
* defined in misc/ajax.js.
|
||||||
|
*
|
||||||
|
* @param $selector
|
||||||
|
* A jQuery selector string. If the command is a response to a request from
|
||||||
|
* an #ajax form element then this value can be NULL.
|
||||||
|
* @param $method
|
||||||
|
* The jQuery method to invoke.
|
||||||
|
* @param $arguments
|
||||||
|
* (optional) A list of arguments to the jQuery $method, if any.
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
* An array suitable for use with the ajax_render() function.
|
||||||
|
*/
|
||||||
|
function ajax_command_invoke($selector, $method, array $arguments = array()) {
|
||||||
|
return array(
|
||||||
|
'command' => 'invoke',
|
||||||
|
'selector' => $selector,
|
||||||
|
'method' => $method,
|
||||||
|
'arguments' => $arguments,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a Drupal AJAX 'restripe' command.
|
* Creates a Drupal AJAX 'restripe' command.
|
||||||
*
|
*
|
||||||
|
|
|
@ -543,6 +543,14 @@ Drupal.ajax.prototype.commands = {
|
||||||
$(response.selector).data(response.name, response.value);
|
$(response.selector).data(response.name, response.value);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Command to apply a jQuery method.
|
||||||
|
*/
|
||||||
|
invoke: function (ajax, response, status) {
|
||||||
|
var $element = $(response.selector);
|
||||||
|
$element[response.method].apply($element, response.arguments);
|
||||||
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Command to restripe a table.
|
* Command to restripe a table.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -211,6 +211,15 @@ class AJAXCommandsTestCase extends AJAXTestCase {
|
||||||
);
|
);
|
||||||
$this->assertCommand($commands, $expected, "'data' AJAX command issued with correct key and value");
|
$this->assertCommand($commands, $expected, "'data' AJAX command issued with correct key and value");
|
||||||
|
|
||||||
|
// Tests the 'invoke' command.
|
||||||
|
$commands = $this->drupalPostAJAX($form_path, $edit, array('op' => t("AJAX invoke command: Invoke addClass() method.")));
|
||||||
|
$expected = array(
|
||||||
|
'command' => 'invoke',
|
||||||
|
'method' => 'addClass',
|
||||||
|
'arguments' => array('error'),
|
||||||
|
);
|
||||||
|
$this->assertCommand($commands, $expected, "'invoke' AJAX command issued with correct method and argument");
|
||||||
|
|
||||||
// Tests the 'html' command.
|
// Tests the 'html' command.
|
||||||
$commands = $this->drupalPostAJAX($form_path, $edit, array('op' => t("AJAX html: Replace the HTML in a selector.")));
|
$commands = $this->drupalPostAJAX($form_path, $edit, array('op' => t("AJAX html: Replace the HTML in a selector.")));
|
||||||
$expected = array(
|
$expected = array(
|
||||||
|
|
|
@ -176,6 +176,16 @@ function ajax_forms_test_ajax_commands_form($form, &$form_state) {
|
||||||
'#suffix' => '<div id="data_div">Data attached to this div.</div>',
|
'#suffix' => '<div id="data_div">Data attached to this div.</div>',
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// Shows the AJAX 'invoke' command.
|
||||||
|
$form['invoke_command_example'] = array(
|
||||||
|
'#value' => t("AJAX invoke command: Invoke addClass() method."),
|
||||||
|
'#type' => 'submit',
|
||||||
|
'#ajax' => array(
|
||||||
|
'callback' => 'ajax_forms_test_advanced_commands_invoke_callback',
|
||||||
|
),
|
||||||
|
'#suffix' => '<div id="invoke_div">Original contents</div>',
|
||||||
|
);
|
||||||
|
|
||||||
// Shows the AJAX 'html' command.
|
// Shows the AJAX 'html' command.
|
||||||
$form['html_command_example'] = array(
|
$form['html_command_example'] = array(
|
||||||
'#value' => t("AJAX html: Replace the HTML in a selector."),
|
'#value' => t("AJAX html: Replace the HTML in a selector."),
|
||||||
|
@ -331,6 +341,15 @@ function ajax_forms_test_advanced_commands_data_callback($form, $form_state) {
|
||||||
return array('#type' => 'ajax', '#commands' => $commands);
|
return array('#type' => 'ajax', '#commands' => $commands);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AJAX callback for 'invoke'.
|
||||||
|
*/
|
||||||
|
function ajax_forms_test_advanced_commands_invoke_callback($form, $form_state) {
|
||||||
|
$commands = array();
|
||||||
|
$commands[] = ajax_command_invoke('#invoke_div', 'addClass', array('error'));
|
||||||
|
return array('#type' => 'ajax', '#commands' => $commands);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* AJAX callback for 'html'.
|
* AJAX callback for 'html'.
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in New Issue