From 5c27abd35fc5a541176f0d9fa4fba014ac2a4886 Mon Sep 17 00:00:00 2001 From: mark_story Date: Fri, 1 Oct 2010 22:43:46 -0400 Subject: [PATCH] Applying patch from 'hashmich' to make jQueryEngine not override the success callback. This allows you to provide a success callback and still get the html insertion when used with the update key. Tests updated. Fixes #1158 --- cake/libs/view/helpers/jquery_engine.php | 15 +++++++-------- .../libs/view/helpers/jquery_engine.test.php | 6 +++--- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/cake/libs/view/helpers/jquery_engine.php b/cake/libs/view/helpers/jquery_engine.php index 27a7b057a..e33c9db12 100644 --- a/cake/libs/view/helpers/jquery_engine.php +++ b/cake/libs/view/helpers/jquery_engine.php @@ -256,14 +256,13 @@ class JqueryEngineHelper extends JsBaseEngineHelper { $options['url'] = $url; if (isset($options['update'])) { $wrapCallbacks = isset($options['wrapCallbacks']) ? $options['wrapCallbacks'] : true; - if ($wrapCallbacks) { - $success = $this->jQueryObject . '("' . $options['update'] . '").html(data);'; - } else { - $success = sprintf( - 'function (data, textStatus) {%s("%s").html(data);}', - $this->jQueryObject, - $options['update'] - ); + $success = ''; + if(isset($options['success']) AND !empty($options['success'])) { + $success .= $options['success']; + } + $success .= $this->jQueryObject . '("' . $options['update'] . '").html(data);'; + if (!$wrapCallbacks) { + $success = 'function (data, textStatus) {' . $success . '}'; } $options['dataType'] = 'html'; $options['success'] = $success; diff --git a/cake/tests/cases/libs/view/helpers/jquery_engine.test.php b/cake/tests/cases/libs/view/helpers/jquery_engine.test.php index 033a32d6a..48b42c658 100644 --- a/cake/tests/cases/libs/view/helpers/jquery_engine.test.php +++ b/cake/tests/cases/libs/view/helpers/jquery_engine.test.php @@ -184,7 +184,7 @@ class JqueryEngineHelperTestCase extends CakeTestCase { 'method' => 'post', 'wrapCallbacks' => false )); - $expected = '$.ajax({dataType:"html", success:function (data, textStatus) {$("#updated").html(data);}, type:"post", url:"\\/people\\/edit\\/1"});'; + $expected = '$.ajax({dataType:"html", success:function (data, textStatus) {doFoo$("#updated").html(data);}, type:"post", url:"\\/people\\/edit\\/1"});'; $this->assertEqual($result, $expected); $result = $this->Jquery->request('/people/edit/1', array( @@ -195,7 +195,7 @@ class JqueryEngineHelperTestCase extends CakeTestCase { 'data' => '$("#someId").serialize()', 'wrapCallbacks' => false )); - $expected = '$.ajax({data:$("#someId").serialize(), dataType:"html", success:function (data, textStatus) {$("#updated").html(data);}, type:"post", url:"\\/people\\/edit\\/1"});'; + $expected = '$.ajax({data:$("#someId").serialize(), dataType:"html", success:function (data, textStatus) {doFoo$("#updated").html(data);}, type:"post", url:"\\/people\\/edit\\/1"});'; $this->assertEqual($result, $expected); $result = $this->Jquery->request('/people/edit/1', array( @@ -225,7 +225,7 @@ class JqueryEngineHelperTestCase extends CakeTestCase { 'data' => '$j("#someId").serialize()', 'wrapCallbacks' => false )); - $expected = '$j.ajax({data:$j("#someId").serialize(), dataType:"html", success:function (data, textStatus) {$j("#updated").html(data);}, type:"post", url:"\\/people\\/edit\\/1"});'; + $expected = '$j.ajax({data:$j("#someId").serialize(), dataType:"html", success:function (data, textStatus) {doFoo$j("#updated").html(data);}, type:"post", url:"\\/people\\/edit\\/1"});'; $this->assertEqual($result, $expected); }