From a57634941fa23c46b2af4017dddc849d0c659ae7 Mon Sep 17 00:00:00 2001 From: Andre Schuurman Date: Thu, 15 Oct 2015 17:46:44 +0200 Subject: [PATCH 1/8] Move remaining ajaxcrud specific logic from ModalRemote.js to controller generator and allow for more flexible use of forceReload parameter. --- src/assets/ModalRemote.js | 2 +- src/assets/ModalRemote.min.js | 2 +- src/generators/default/controller.php | 8 ++++---- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/assets/ModalRemote.js b/src/assets/ModalRemote.js index 26629be..3dadcdb 100644 --- a/src/assets/ModalRemote.js +++ b/src/assets/ModalRemote.js @@ -277,7 +277,7 @@ function ModalRemote(modalId){ // reload datatable if response contain forceReload field if(response.forceReload !== undefined && response.forceReload){ - $.pjax.reload({container:'#crud-datatable-pjax'}); + $.pjax.reload({container:response.forceReload}); } // close modal if response contain forceClose field diff --git a/src/assets/ModalRemote.min.js b/src/assets/ModalRemote.min.js index e57c277..1345060 100644 --- a/src/assets/ModalRemote.min.js +++ b/src/assets/ModalRemote.min.js @@ -1 +1 @@ -function ModalRemote(t){function i(t,i,n){var a=this;$.ajax({url:t,method:i,data:n,beforeSend:function(){o.call(a)},error:function(t){e.call(a,t)},success:function(t){s.call(a,t)}})}function o(){this.show(),this.displayLoading()}function e(t){this.setTitle(t.status+t.statusText),this.setContent(t.responseText),this.addButton("Close","btn btn-default",function(){this.hide()})}function s(t){if(void 0!==t.forceReload&&t.forceReload&&$.pjax.reload({container:"#crud-datatable-pjax"}),void 0!==t.forceClose&&t.forceClose)return void this.hide();if(void 0!==t.size&&this.setSize(t.size),void 0!==t.title&&this.setTitle(t.title),void 0!==t.content&&this.setContent(t.content),void 0!==t.footer&&this.setFooter(t.footer),void 0!==$(this.content).find("form")[0]){var i=$(this.content).find("form")[0],n=$(this.footer).find('[type="submit"]')[0];if(void 0===n)console.warn("Modal have form but have not any submit button");else{var a=this;$(n).click(function(){var t=$(i).attr("action"),n=$(i).hasAttr("method")?$(i).attr("method"):"GET",l=$(i).serializeArray();$.ajax({url:t,method:n,data:l,beforeSend:function(){o.call(a)},error:function(t){e.call(a,t)},success:function(t){s.call(a,t)}})})}}}this.defauls={okLabel:"OK",cancelLabel:"Cancel",loadingTitle:"Loading"},this.modal=$(t),this.dialog-$(t).find(".modal-dialog"),this.header=$(t).find(".modal-header"),this.content=$(t).find(".modal-body"),this.footer=$(t).find(".modal-footer"),this.loadingContent='
',this.show=function(){this.clear(),$(this.modal).modal("show")},this.hide=function(){$(this.modal).modal("hide")},this.toggle=function(){$(this.modal).modal("toggle")},this.clear=function(){$(this.modal).find(".modal-title").remove(),$(this.content).html(""),$(this.footer).html("")},this.setHeader=function(t){$(this.header).html(t)},this.setContent=function(t){$(this.content).html(t)},this.setFooter=function(t){$(this.footer).html(t)},this.setTitle=function(t){$(this.header).find("h4.modal-title").remove(),$(this.header).append('")},this.hidenCloseButton=function(){$(this.header).find("button.close").hide()},this.showCloseButton=function(){$(this.header).find("button.close").show()},this.addButton=function(t,i,o){buttonElm=document.createElement("button"),buttonElm.setAttribute("class",null===i?"btn btn-primary":i),buttonElm.innerHTML=t;var e=this;$(this.footer).append(buttonElm),null!==o&&$(buttonElm).click(function(){o.call(e,this,event)})},this.displayLoading=function(){this.setContent(this.loadingContent),this.setTitle(this.defauls.loadingTitle)},this.confirm=function(t,i,o,e,s,n){void 0!==t&&this.setTitle(t),void 0!==i&&this.setContent(i),this.addButton(void 0===o?this.defauls.okLabel:o,"btn btn-primary",s),this.addButton(void 0===e?this.defauls.cancelLabel:e,"btn btn-default pull-left",n)},this.setSize=function(t){$(this.dialog).removeClass("modal-lg"),$(this.dialog).removeClass("modal-sm"),"large"==t?$(this.dialog).addClass("modal-lg"):"small"==t?$(this.dialog).addClass("modal-sm"):"normal"!==t&&console.warn("Not define size"+t)},this.remote=function(t,o){var e=$(t).attr($(t).hasAttr("href")?"href":"data-url"),s=$(t).hasAttr("data-request-method")?$(t).attr("data-request-method"):"GET",n=$(t).hasAttr("data-modal-size")?$(t).attr("data-modal-size"):"normal";if($(t).hasAttr("data-confirm-title")||$(t).hasAttr("data-confirm-message")){this.show(),this.setSize(n);var a=this;this.confirm($(t).attr("data-confirm-title"),$(t).attr("data-confirm-message"),$(t).attr("data-confirm-ok"),$(t).attr("data-confirm-cancel"),function(){i.call(a,e,s,o)},function(){this.hide()})}else i.call(this,e,s,o)}}!function(t){t.fn.hasAttr=function(t){return void 0!==this.attr(t)}}(jQuery); \ No newline at end of file +function ModalRemote(t){function i(t,i,n){var a=this;$.ajax({url:t,method:i,data:n,beforeSend:function(){o.call(a)},error:function(t){e.call(a,t)},success:function(t){s.call(a,t)}})}function o(){this.show(),this.displayLoading()}function e(t){this.setTitle(t.status+t.statusText),this.setContent(t.responseText),this.addButton("Close","btn btn-default",function(){this.hide()})}function s(t){if(void 0!==t.forceReload&&t.forceReload&&$.pjax.reload({container: t.forceReload}),void 0!==t.forceClose&&t.forceClose)return void this.hide();if(void 0!==t.size&&this.setSize(t.size),void 0!==t.title&&this.setTitle(t.title),void 0!==t.content&&this.setContent(t.content),void 0!==t.footer&&this.setFooter(t.footer),void 0!==$(this.content).find("form")[0]){var i=$(this.content).find("form")[0],n=$(this.footer).find('[type="submit"]')[0];if(void 0===n)console.warn("Modal have form but have not any submit button");else{var a=this;$(n).click(function(){var t=$(i).attr("action"),n=$(i).hasAttr("method")?$(i).attr("method"):"GET",l=$(i).serializeArray();$.ajax({url:t,method:n,data:l,beforeSend:function(){o.call(a)},error:function(t){e.call(a,t)},success:function(t){s.call(a,t)}})})}}}this.defauls={okLabel:"OK",cancelLabel:"Cancel",loadingTitle:"Loading"},this.modal=$(t),this.dialog-$(t).find(".modal-dialog"),this.header=$(t).find(".modal-header"),this.content=$(t).find(".modal-body"),this.footer=$(t).find(".modal-footer"),this.loadingContent='
',this.show=function(){this.clear(),$(this.modal).modal("show")},this.hide=function(){$(this.modal).modal("hide")},this.toggle=function(){$(this.modal).modal("toggle")},this.clear=function(){$(this.modal).find(".modal-title").remove(),$(this.content).html(""),$(this.footer).html("")},this.setHeader=function(t){$(this.header).html(t)},this.setContent=function(t){$(this.content).html(t)},this.setFooter=function(t){$(this.footer).html(t)},this.setTitle=function(t){$(this.header).find("h4.modal-title").remove(),$(this.header).append('")},this.hidenCloseButton=function(){$(this.header).find("button.close").hide()},this.showCloseButton=function(){$(this.header).find("button.close").show()},this.addButton=function(t,i,o){buttonElm=document.createElement("button"),buttonElm.setAttribute("class",null===i?"btn btn-primary":i),buttonElm.innerHTML=t;var e=this;$(this.footer).append(buttonElm),null!==o&&$(buttonElm).click(function(){o.call(e,this,event)})},this.displayLoading=function(){this.setContent(this.loadingContent),this.setTitle(this.defauls.loadingTitle)},this.confirm=function(t,i,o,e,s,n){void 0!==t&&this.setTitle(t),void 0!==i&&this.setContent(i),this.addButton(void 0===o?this.defauls.okLabel:o,"btn btn-primary",s),this.addButton(void 0===e?this.defauls.cancelLabel:e,"btn btn-default pull-left",n)},this.setSize=function(t){$(this.dialog).removeClass("modal-lg"),$(this.dialog).removeClass("modal-sm"),"large"==t?$(this.dialog).addClass("modal-lg"):"small"==t?$(this.dialog).addClass("modal-sm"):"normal"!==t&&console.warn("Not define size"+t)},this.remote=function(t,o){var e=$(t).attr($(t).hasAttr("href")?"href":"data-url"),s=$(t).hasAttr("data-request-method")?$(t).attr("data-request-method"):"GET",n=$(t).hasAttr("data-modal-size")?$(t).attr("data-modal-size"):"normal";if($(t).hasAttr("data-confirm-title")||$(t).hasAttr("data-confirm-message")){this.show(),this.setSize(n);var a=this;this.confirm($(t).attr("data-confirm-title"),$(t).attr("data-confirm-message"),$(t).attr("data-confirm-ok"),$(t).attr("data-confirm-cancel"),function(){i.call(a,e,s,o)},function(){this.hide()})}else i.call(this,e,s,o)}}!function(t){t.fn.hasAttr=function(t){return void 0!==this.attr(t)}}(jQuery); \ No newline at end of file diff --git a/src/generators/default/controller.php b/src/generators/default/controller.php index 93b97b2..732450d 100644 --- a/src/generators/default/controller.php +++ b/src/generators/default/controller.php @@ -142,7 +142,7 @@ public function actionCreate() ]; }else if($model->load($request->post()) && $model->save()){ return [ - 'forceReload'=>'true', + 'forceReload'=>'#crud-datatable-pjax', 'title'=> "Create new ", 'content'=>'Create success', 'footer'=> Html::button('Close',['class'=>'btn btn-default pull-left','data-dismiss'=>"modal"]). @@ -203,7 +203,7 @@ public function actionUpdate() ]; }else if($model->load($request->post()) && $model->save()){ return [ - 'forceReload'=>'true', + 'forceReload'=>'#crud-datatable-pjax', 'title'=> " #"., 'content'=>$this->renderPartial('view', [ 'model' => $model, @@ -252,7 +252,7 @@ public function actionDelete() * Process for ajax request */ Yii::$app->response->format = Response::FORMAT_JSON; - return ['forceClose'=>true,'forceReload'=>true]; + return ['forceClose'=>true,'forceReload'=>'#crud-datatable-pjax']; }else{ /* * Process for non-ajax request @@ -284,7 +284,7 @@ public function actionBulkDelete() * Process for ajax request */ Yii::$app->response->format = Response::FORMAT_JSON; - return ['forceClose'=>true,'forceReload'=>true]; + return ['forceClose'=>true,'forceReload'=>'#crud-datatable-pjax']; }else{ /* * Process for non-ajax request From b5bd80712ee828aa0d28e8e6515a6a18fc70013f Mon Sep 17 00:00:00 2001 From: Andre Schuurman Date: Thu, 15 Oct 2015 22:53:55 +0200 Subject: [PATCH 2/8] Fixed typo ajaxCrubModal to ajaxCrudModal --- src/assets/ajaxcrud.js | 2 +- src/assets/ajaxcrud.min.js | 2 +- src/generators/default/views/index.php | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/assets/ajaxcrud.js b/src/assets/ajaxcrud.js index 9cde446..140c024 100644 --- a/src/assets/ajaxcrud.js +++ b/src/assets/ajaxcrud.js @@ -8,7 +8,7 @@ $(document).ready(function(){ // Create instance of Modal Remote // This instance will be controller all business logic of modal - modal = new ModalRemote('#ajaxCrubModal'); + modal = new ModalRemote('#ajaxCrudModal'); // Catch click event of all button want to open modal diff --git a/src/assets/ajaxcrud.min.js b/src/assets/ajaxcrud.min.js index 03915e0..fe37bd8 100644 --- a/src/assets/ajaxcrud.min.js +++ b/src/assets/ajaxcrud.min.js @@ -1 +1 @@ -$(document).ready(function(){modal=new ModalRemote("#ajaxCrubModal"),$(document).on("click",'[role="modal-remote"]',function(e){e.preventDefault(),modal.remote(this,null)}),$(document).on("click",'[role="modal-remote-bulk"]',function(e){e.preventDefault();var t=[];$('input:checkbox[name="selection[]"]').each(function(){this.checked&&t.push($(this).val())}),0==t.length?(modal.show(),modal.setTitle("Have no selection"),modal.setContent("You must select item for do this action"),modal.addButton("Close","btn btn-default",function(){this.hide()})):modal.remote(this,{pks:JSON.stringify(t)})})}); \ No newline at end of file +$(document).ready(function(){modal=new ModalRemote("#ajaxCrudModal"),$(document).on("click",'[role="modal-remote"]',function(e){e.preventDefault(),modal.remote(this,null)}),$(document).on("click",'[role="modal-remote-bulk"]',function(e){e.preventDefault();var t=[];$('input:checkbox[name="selection[]"]').each(function(){this.checked&&t.push($(this).val())}),0==t.length?(modal.show(),modal.setTitle("Have no selection"),modal.setContent("You must select item for do this action"),modal.addButton("Close","btn btn-default",function(){this.hide()})):modal.remote(this,{pks:JSON.stringify(t)})})}); \ No newline at end of file diff --git a/src/generators/default/views/index.php b/src/generators/default/views/index.php index e54c8b1..80f07db 100644 --- a/src/generators/default/views/index.php +++ b/src/generators/default/views/index.php @@ -74,7 +74,7 @@ "ajaxCrubModal", + "id"=>"ajaxCrudModal", "footer"=>"",// always need it for jquery plugin ])?>'."\n"?> '?> From ddb0e8386a79159a069397d23f4013f2b9f4f478 Mon Sep 17 00:00:00 2001 From: Andre Schuurman Date: Thu, 15 Oct 2015 23:15:57 +0200 Subject: [PATCH 3/8] Use non-minified ja files in dev debug mode. --- src/CrudAsset.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/CrudAsset.php b/src/CrudAsset.php index 0f484e2..ac8be8f 100644 --- a/src/CrudAsset.php +++ b/src/CrudAsset.php @@ -19,12 +19,12 @@ class CrudAsset extends AssetBundle public $css = [ 'ajaxcrud.css' ]; - public $js = [ - //'ModalRemote.js', - //'ajaxcrud.js', + public $js = YII_DEBUG ? [ + 'ModalRemote.js', + 'ajaxcrud.js', + ]:[ 'ModalRemote.min.js', 'ajaxcrud.min.js', - ]; public $depends = [ 'yii\web\YiiAsset', From 3c96bdd940086bbb758f29c6c2d6bcdd192192d0 Mon Sep 17 00:00:00 2001 From: Andre Schuurman Date: Fri, 16 Oct 2015 13:56:59 +0200 Subject: [PATCH 4/8] Fix PHP mistake; move js classes logic to init. --- src/CrudAsset.php | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/CrudAsset.php b/src/CrudAsset.php index ac8be8f..44d82fa 100644 --- a/src/CrudAsset.php +++ b/src/CrudAsset.php @@ -19,13 +19,7 @@ class CrudAsset extends AssetBundle public $css = [ 'ajaxcrud.css' ]; - public $js = YII_DEBUG ? [ - 'ModalRemote.js', - 'ajaxcrud.js', - ]:[ - 'ModalRemote.min.js', - 'ajaxcrud.min.js', - ]; + public $depends = [ 'yii\web\YiiAsset', 'yii\bootstrap\BootstrapAsset', @@ -33,6 +27,16 @@ class CrudAsset extends AssetBundle 'kartik\grid\GridViewAsset', ]; - - + public function init() { + // In dev mode use non-minified javascripts + $this->js = YII_DEBUG ? [ + 'ModalRemote.js', + 'ajaxcrud.js', + ]:[ + 'ModalRemote.min.js', + 'ajaxcrud.min.js', + ]; + + parent::init(); + } } From c417e99de51b2b79a89dfbd5f14bc4a05c4df8a3 Mon Sep 17 00:00:00 2001 From: Andre Schuurman Date: Fri, 6 Nov 2015 16:33:28 +0100 Subject: [PATCH 5/8] To allow for CSS and JS functionality in forms, use renderAjax instead of renderPartial. --- src/generators/default/controller.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/generators/default/controller.php b/src/generators/default/controller.php index 732450d..81a7b96 100644 --- a/src/generators/default/controller.php +++ b/src/generators/default/controller.php @@ -101,7 +101,7 @@ public function actionView() Yii::$app->response->format = Response::FORMAT_JSON; return [ 'title'=> " #"., - 'content'=>$this->renderPartial('view', [ + 'content'=>$this->renderAjax('view', [ 'model' => $this->findModel(), ]), 'footer'=> Html::button('Close',['class'=>'btn btn-default pull-left','data-dismiss'=>"modal"]). @@ -133,7 +133,7 @@ public function actionCreate() if($request->isGet){ return [ 'title'=> "Create new ", - 'content'=>$this->renderPartial('create', [ + 'content'=>$this->renderAjax('create', [ 'model' => $model, ]), 'footer'=> Html::button('Close',['class'=>'btn btn-default pull-left','data-dismiss'=>"modal"]). @@ -152,7 +152,7 @@ public function actionCreate() }else{ return [ 'title'=> "Create new ", - 'content'=>$this->renderPartial('create', [ + 'content'=>$this->renderAjax('create', [ 'model' => $model, ]), 'footer'=> Html::button('Close',['class'=>'btn btn-default pull-left','data-dismiss'=>"modal"]). @@ -195,7 +195,7 @@ public function actionUpdate() if($request->isGet){ return [ 'title'=> "Update #"., - 'content'=>$this->renderPartial('update', [ + 'content'=>$this->renderAjax('update', [ 'model' => $model, ]), 'footer'=> Html::button('Close',['class'=>'btn btn-default pull-left','data-dismiss'=>"modal"]). @@ -205,7 +205,7 @@ public function actionUpdate() return [ 'forceReload'=>'#crud-datatable-pjax', 'title'=> " #"., - 'content'=>$this->renderPartial('view', [ + 'content'=>$this->renderAjax('view', [ 'model' => $model, ]), 'footer'=> Html::button('Close',['class'=>'btn btn-default pull-left','data-dismiss'=>"modal"]). @@ -214,7 +214,7 @@ public function actionUpdate() }else{ return [ 'title'=> "Update #"., - 'content'=>$this->renderPartial('update', [ + 'content'=>$this->renderAjax('update', [ 'model' => $model, ]), 'footer'=> Html::button('Close',['class'=>'btn btn-default pull-left','data-dismiss'=>"modal"]). From 50de351425c265ab442fd12bc13f9309ec9ad9de Mon Sep 17 00:00:00 2001 From: Andre Schuurman Date: Fri, 6 Nov 2015 17:02:51 +0100 Subject: [PATCH 6/8] Add backward compatibility for wrong spelling of ajaxCrubModal and for forceReload = true. Fixed spelling typo of 'defauls'. --- src/assets/ModalRemote.js | 18 +++++++++++------- src/assets/ModalRemote.min.js | 10 +++++++++- src/assets/ajaxcrud.js | 14 +++++++++----- src/assets/ajaxcrud.min.js | 3 ++- 4 files changed, 31 insertions(+), 14 deletions(-) diff --git a/src/assets/ModalRemote.js b/src/assets/ModalRemote.js index 3dadcdb..e95627f 100644 --- a/src/assets/ModalRemote.js +++ b/src/assets/ModalRemote.js @@ -15,10 +15,10 @@ function ModalRemote(modalId){ - this.defauls = { + this.defaults = { okLabel:"OK", cancelLabel:"Cancel", - loadingTitle:"Loading", + loadingTitle:"Loading" }; this.modal = $(modalId); @@ -140,7 +140,7 @@ function ModalRemote(modalId){ */ this.displayLoading = function(){ this.setContent(this.loadingContent); - this.setTitle(this.defauls.loadingTitle); + this.setTitle(this.defaults.loadingTitle); } /** @@ -159,8 +159,8 @@ function ModalRemote(modalId){ if(message!==undefined){ this.setContent(message); } - this.addButton(okLabel===undefined?this.defauls.okLabel:okLabel,'btn btn-primary',okCallback); - this.addButton(cancelLabel===undefined?this.defauls.cancelLabel:cancelLabel,'btn btn-default pull-left',cancelCallback); + this.addButton(okLabel===undefined?this.defaults.okLabel:okLabel,'btn btn-primary',okCallback); + this.addButton(cancelLabel===undefined?this.defaults.cancelLabel:cancelLabel,'btn btn-default pull-left',cancelCallback); } /** @@ -276,8 +276,12 @@ function ModalRemote(modalId){ function successRemoteResponse(response){ // reload datatable if response contain forceReload field - if(response.forceReload !== undefined && response.forceReload){ - $.pjax.reload({container:response.forceReload}); + if(response.forceReload !== undefined && response.forceReload) { + if (response.forceReload == 'true') { + $.pjax.reload({container: '#crud-datatable-pjax'}); + } else { + $.pjax.reload({container: response.forceReload}); + } } // close modal if response contain forceClose field diff --git a/src/assets/ModalRemote.min.js b/src/assets/ModalRemote.min.js index 1345060..02d1d5a 100644 --- a/src/assets/ModalRemote.min.js +++ b/src/assets/ModalRemote.min.js @@ -1 +1,9 @@ -function ModalRemote(t){function i(t,i,n){var a=this;$.ajax({url:t,method:i,data:n,beforeSend:function(){o.call(a)},error:function(t){e.call(a,t)},success:function(t){s.call(a,t)}})}function o(){this.show(),this.displayLoading()}function e(t){this.setTitle(t.status+t.statusText),this.setContent(t.responseText),this.addButton("Close","btn btn-default",function(){this.hide()})}function s(t){if(void 0!==t.forceReload&&t.forceReload&&$.pjax.reload({container: t.forceReload}),void 0!==t.forceClose&&t.forceClose)return void this.hide();if(void 0!==t.size&&this.setSize(t.size),void 0!==t.title&&this.setTitle(t.title),void 0!==t.content&&this.setContent(t.content),void 0!==t.footer&&this.setFooter(t.footer),void 0!==$(this.content).find("form")[0]){var i=$(this.content).find("form")[0],n=$(this.footer).find('[type="submit"]')[0];if(void 0===n)console.warn("Modal have form but have not any submit button");else{var a=this;$(n).click(function(){var t=$(i).attr("action"),n=$(i).hasAttr("method")?$(i).attr("method"):"GET",l=$(i).serializeArray();$.ajax({url:t,method:n,data:l,beforeSend:function(){o.call(a)},error:function(t){e.call(a,t)},success:function(t){s.call(a,t)}})})}}}this.defauls={okLabel:"OK",cancelLabel:"Cancel",loadingTitle:"Loading"},this.modal=$(t),this.dialog-$(t).find(".modal-dialog"),this.header=$(t).find(".modal-header"),this.content=$(t).find(".modal-body"),this.footer=$(t).find(".modal-footer"),this.loadingContent='
',this.show=function(){this.clear(),$(this.modal).modal("show")},this.hide=function(){$(this.modal).modal("hide")},this.toggle=function(){$(this.modal).modal("toggle")},this.clear=function(){$(this.modal).find(".modal-title").remove(),$(this.content).html(""),$(this.footer).html("")},this.setHeader=function(t){$(this.header).html(t)},this.setContent=function(t){$(this.content).html(t)},this.setFooter=function(t){$(this.footer).html(t)},this.setTitle=function(t){$(this.header).find("h4.modal-title").remove(),$(this.header).append('")},this.hidenCloseButton=function(){$(this.header).find("button.close").hide()},this.showCloseButton=function(){$(this.header).find("button.close").show()},this.addButton=function(t,i,o){buttonElm=document.createElement("button"),buttonElm.setAttribute("class",null===i?"btn btn-primary":i),buttonElm.innerHTML=t;var e=this;$(this.footer).append(buttonElm),null!==o&&$(buttonElm).click(function(){o.call(e,this,event)})},this.displayLoading=function(){this.setContent(this.loadingContent),this.setTitle(this.defauls.loadingTitle)},this.confirm=function(t,i,o,e,s,n){void 0!==t&&this.setTitle(t),void 0!==i&&this.setContent(i),this.addButton(void 0===o?this.defauls.okLabel:o,"btn btn-primary",s),this.addButton(void 0===e?this.defauls.cancelLabel:e,"btn btn-default pull-left",n)},this.setSize=function(t){$(this.dialog).removeClass("modal-lg"),$(this.dialog).removeClass("modal-sm"),"large"==t?$(this.dialog).addClass("modal-lg"):"small"==t?$(this.dialog).addClass("modal-sm"):"normal"!==t&&console.warn("Not define size"+t)},this.remote=function(t,o){var e=$(t).attr($(t).hasAttr("href")?"href":"data-url"),s=$(t).hasAttr("data-request-method")?$(t).attr("data-request-method"):"GET",n=$(t).hasAttr("data-modal-size")?$(t).attr("data-modal-size"):"normal";if($(t).hasAttr("data-confirm-title")||$(t).hasAttr("data-confirm-message")){this.show(),this.setSize(n);var a=this;this.confirm($(t).attr("data-confirm-title"),$(t).attr("data-confirm-message"),$(t).attr("data-confirm-ok"),$(t).attr("data-confirm-cancel"),function(){i.call(a,e,s,o)},function(){this.hide()})}else i.call(this,e,s,o)}}!function(t){t.fn.hasAttr=function(t){return void 0!==this.attr(t)}}(jQuery); \ No newline at end of file +(function(b){b.fn.hasAttr=function(b){return void 0!==this.attr(b)}})(jQuery); +function ModalRemote(b){function h(a,d,c){var e=this;$.ajax({url:a,method:d,data:c,beforeSend:function(){k.call(e)},error:function(a){l.call(e,a)},success:function(a){m.call(e,a)}})}function k(){this.show();this.displayLoading()}function l(a){this.setTitle(a.status+a.statusText);this.setContent(a.responseText);this.addButton("Close","btn btn-default",function(a,c){this.hide()})}function m(a){void 0!==a.forceReload&&a.forceReload&&("true"==a.forceReload?$.pjax.reload({container:"#crud-datatable-pjax"}): + $.pjax.reload({container:a.forceReload}));if(void 0!==a.forceClose&&a.forceClose)this.hide();else if(void 0!==a.size&&this.setSize(a.size),void 0!==a.title&&this.setTitle(a.title),void 0!==a.content&&this.setContent(a.content),void 0!==a.footer&&this.setFooter(a.footer),void 0!==$(this.content).find("form")[0]){var d=$(this.content).find("form")[0];a=$(this.footer).find('[type="submit"]')[0];if(void 0===a)console.warn("Modal have form but have not any submit button");else{var c=this;$(a).click(function(a){a= + $(d).attr("action");var b=$(d).hasAttr("method")?$(d).attr("method"):"GET",f=$(d).serializeArray();$.ajax({url:a,method:b,data:f,beforeSend:function(){k.call(c)},error:function(a){l.call(c,a)},success:function(a){m.call(c,a)}})})}}}this.defaults={okLabel:"OK",cancelLabel:"Cancel",loadingTitle:"Loading"};this.modal=$(b);this.dialog-$(b).find(".modal-dialog");this.header=$(b).find(".modal-header");this.content=$(b).find(".modal-body");this.footer=$(b).find(".modal-footer");this.loadingContent='
'; + this.show=function(){this.clear();$(this.modal).modal("show")};this.hide=function(){$(this.modal).modal("hide")};this.toggle=function(){$(this.modal).modal("toggle")};this.clear=function(){$(this.modal).find(".modal-title").remove();$(this.content).html("");$(this.footer).html("")};this.setHeader=function(a){$(this.header).html(a)};this.setContent=function(a){$(this.content).html(a)};this.setFooter=function(a){$(this.footer).html(a)};this.setTitle=function(a){$(this.header).find("h4.modal-title").remove(); + $(this.header).append('")};this.hidenCloseButton=function(){$(this.header).find("button.close").hide()};this.showCloseButton=function(){$(this.header).find("button.close").show()};this.addButton=function(a,d,c){buttonElm=document.createElement("button");buttonElm.setAttribute("class",null===d?"btn btn-primary":d);buttonElm.innerHTML=a;var b=this;$(this.footer).append(buttonElm);null!==c&&$(buttonElm).click(function(){c.call(b,this,event)})};this.displayLoading=function(){this.setContent(this.loadingContent); + this.setTitle(this.defaults.loadingTitle)};this.confirm=function(a,d,c,b,g,f){void 0!==a&&this.setTitle(a);void 0!==d&&this.setContent(d);this.addButton(void 0===c?this.defaults.okLabel:c,"btn btn-primary",g);this.addButton(void 0===b?this.defaults.cancelLabel:b,"btn btn-default pull-left",f)};this.setSize=function(a){$(this.dialog).removeClass("modal-lg");$(this.dialog).removeClass("modal-sm");"large"==a?$(this.dialog).addClass("modal-lg"):"small"==a?$(this.dialog).addClass("modal-sm"):"normal"!== + a&&console.warn("Not define size"+a)};this.remote=function(a,b){var c=$(a).hasAttr("href")?$(a).attr("href"):$(a).attr("data-url"),e=$(a).hasAttr("data-request-method")?$(a).attr("data-request-method"):"GET",g=$(a).hasAttr("data-modal-size")?$(a).attr("data-modal-size"):"normal";if($(a).hasAttr("data-confirm-title")||$(a).hasAttr("data-confirm-message")){this.show();this.setSize(g);var f=this;this.confirm($(a).attr("data-confirm-title"),$(a).attr("data-confirm-message"),$(a).attr("data-confirm-ok"), + $(a).attr("data-confirm-cancel"),function(a){h.call(f,c,e,b)},function(a){this.hide()})}else h.call(this,c,e,b)}}; \ No newline at end of file diff --git a/src/assets/ajaxcrud.js b/src/assets/ajaxcrud.js index 140c024..7a0f722 100644 --- a/src/assets/ajaxcrud.js +++ b/src/assets/ajaxcrud.js @@ -8,13 +8,17 @@ $(document).ready(function(){ // Create instance of Modal Remote // This instance will be controller all business logic of modal - modal = new ModalRemote('#ajaxCrudModal'); + // Backwards compatible lookup of ajaxCrubModal + if ($('#ajaxCrubModal').length>0 && $('#ajaxCrudModal').length == 0) { + modal = new ModalRemote('#ajaxCrubModal'); + } else { + modal = new ModalRemote('#ajaxCrudModal'); + } - // Catch click event of all button want to open modal $(document).on('click','[role="modal-remote"]',function(event){ event.preventDefault(); - modal.remote(this,null); + modal.remote(this,null); }); // Catch click event of all button want to open modal @@ -30,8 +34,8 @@ $(document).ready(function(){ if(selectedIds.length==0){ modal.show(); - modal.setTitle('Have no selection'); - modal.setContent('You must select item for do this action'); + modal.setTitle('No selection'); + modal.setContent('You must select item(s) to use this action'); modal.addButton("Close",'btn btn-default',function(button,event){ this.hide(); }); diff --git a/src/assets/ajaxcrud.min.js b/src/assets/ajaxcrud.min.js index fe37bd8..22018e2 100644 --- a/src/assets/ajaxcrud.min.js +++ b/src/assets/ajaxcrud.min.js @@ -1 +1,2 @@ -$(document).ready(function(){modal=new ModalRemote("#ajaxCrudModal"),$(document).on("click",'[role="modal-remote"]',function(e){e.preventDefault(),modal.remote(this,null)}),$(document).on("click",'[role="modal-remote-bulk"]',function(e){e.preventDefault();var t=[];$('input:checkbox[name="selection[]"]').each(function(){this.checked&&t.push($(this).val())}),0==t.length?(modal.show(),modal.setTitle("Have no selection"),modal.setContent("You must select item for do this action"),modal.addButton("Close","btn btn-default",function(){this.hide()})):modal.remote(this,{pks:JSON.stringify(t)})})}); \ No newline at end of file +$(document).ready(function(){modal=0<$("#ajaxCrubModal").length&&0==$("#ajaxCrudModal").length?new ModalRemote("#ajaxCrubModal"):new ModalRemote("#ajaxCrudModal");$(document).on("click",'[role="modal-remote"]',function(a){a.preventDefault();modal.remote(this,null)});$(document).on("click",'[role="modal-remote-bulk"]',function(a){a.preventDefault();var b=[];$('input:checkbox[name="selection[]"]').each(function(){this.checked&&b.push($(this).val())});0==b.length?(modal.show(),modal.setTitle("No selection"), + modal.setContent("You must select item(s) to use this action"),modal.addButton("Close","btn btn-default",function(a,b){this.hide()})):modal.remote(this,{pks:JSON.stringify(b)})})}); \ No newline at end of file From 03e4f5ae7c4e1c16c0b4d16c775c87e956bec902 Mon Sep 17 00:00:00 2001 From: Andre Schuurman Date: Fri, 6 Nov 2015 17:29:17 +0100 Subject: [PATCH 7/8] Fixed bug https://github.com/johnitvn/yii2-ajaxcrud/issues/31. --- src/assets/ModalRemote.js | 2 +- src/assets/ModalRemote.min.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/assets/ModalRemote.js b/src/assets/ModalRemote.js index e95627f..8368435 100644 --- a/src/assets/ModalRemote.js +++ b/src/assets/ModalRemote.js @@ -23,7 +23,7 @@ function ModalRemote(modalId){ this.modal = $(modalId); - this.dialog - $(modalId).find('.modal-dialog'); + this.dialog = $(modalId).find('.modal-dialog'); this.header = $(modalId).find('.modal-header'); diff --git a/src/assets/ModalRemote.min.js b/src/assets/ModalRemote.min.js index 02d1d5a..f8afb16 100644 --- a/src/assets/ModalRemote.min.js +++ b/src/assets/ModalRemote.min.js @@ -1,7 +1,7 @@ (function(b){b.fn.hasAttr=function(b){return void 0!==this.attr(b)}})(jQuery); function ModalRemote(b){function h(a,d,c){var e=this;$.ajax({url:a,method:d,data:c,beforeSend:function(){k.call(e)},error:function(a){l.call(e,a)},success:function(a){m.call(e,a)}})}function k(){this.show();this.displayLoading()}function l(a){this.setTitle(a.status+a.statusText);this.setContent(a.responseText);this.addButton("Close","btn btn-default",function(a,c){this.hide()})}function m(a){void 0!==a.forceReload&&a.forceReload&&("true"==a.forceReload?$.pjax.reload({container:"#crud-datatable-pjax"}): $.pjax.reload({container:a.forceReload}));if(void 0!==a.forceClose&&a.forceClose)this.hide();else if(void 0!==a.size&&this.setSize(a.size),void 0!==a.title&&this.setTitle(a.title),void 0!==a.content&&this.setContent(a.content),void 0!==a.footer&&this.setFooter(a.footer),void 0!==$(this.content).find("form")[0]){var d=$(this.content).find("form")[0];a=$(this.footer).find('[type="submit"]')[0];if(void 0===a)console.warn("Modal have form but have not any submit button");else{var c=this;$(a).click(function(a){a= - $(d).attr("action");var b=$(d).hasAttr("method")?$(d).attr("method"):"GET",f=$(d).serializeArray();$.ajax({url:a,method:b,data:f,beforeSend:function(){k.call(c)},error:function(a){l.call(c,a)},success:function(a){m.call(c,a)}})})}}}this.defaults={okLabel:"OK",cancelLabel:"Cancel",loadingTitle:"Loading"};this.modal=$(b);this.dialog-$(b).find(".modal-dialog");this.header=$(b).find(".modal-header");this.content=$(b).find(".modal-body");this.footer=$(b).find(".modal-footer");this.loadingContent='
'; + $(d).attr("action");var b=$(d).hasAttr("method")?$(d).attr("method"):"GET",f=$(d).serializeArray();$.ajax({url:a,method:b,data:f,beforeSend:function(){k.call(c)},error:function(a){l.call(c,a)},success:function(a){m.call(c,a)}})})}}}this.defaults={okLabel:"OK",cancelLabel:"Cancel",loadingTitle:"Loading"};this.modal=$(b);this.dialog=$(b).find(".modal-dialog");this.header=$(b).find(".modal-header");this.content=$(b).find(".modal-body");this.footer=$(b).find(".modal-footer");this.loadingContent='
'; this.show=function(){this.clear();$(this.modal).modal("show")};this.hide=function(){$(this.modal).modal("hide")};this.toggle=function(){$(this.modal).modal("toggle")};this.clear=function(){$(this.modal).find(".modal-title").remove();$(this.content).html("");$(this.footer).html("")};this.setHeader=function(a){$(this.header).html(a)};this.setContent=function(a){$(this.content).html(a)};this.setFooter=function(a){$(this.footer).html(a)};this.setTitle=function(a){$(this.header).find("h4.modal-title").remove(); $(this.header).append('")};this.hidenCloseButton=function(){$(this.header).find("button.close").hide()};this.showCloseButton=function(){$(this.header).find("button.close").show()};this.addButton=function(a,d,c){buttonElm=document.createElement("button");buttonElm.setAttribute("class",null===d?"btn btn-primary":d);buttonElm.innerHTML=a;var b=this;$(this.footer).append(buttonElm);null!==c&&$(buttonElm).click(function(){c.call(b,this,event)})};this.displayLoading=function(){this.setContent(this.loadingContent); this.setTitle(this.defaults.loadingTitle)};this.confirm=function(a,d,c,b,g,f){void 0!==a&&this.setTitle(a);void 0!==d&&this.setContent(d);this.addButton(void 0===c?this.defaults.okLabel:c,"btn btn-primary",g);this.addButton(void 0===b?this.defaults.cancelLabel:b,"btn btn-default pull-left",f)};this.setSize=function(a){$(this.dialog).removeClass("modal-lg");$(this.dialog).removeClass("modal-sm");"large"==a?$(this.dialog).addClass("modal-lg"):"small"==a?$(this.dialog).addClass("modal-sm"):"normal"!== From 6e7acd248ea3768946fef8c80a4fec8371b8a1d0 Mon Sep 17 00:00:00 2001 From: Andre Schuurman Date: Sat, 14 Nov 2015 00:09:50 +0100 Subject: [PATCH 8/8] Pull request #38 Fix ModalRemote event bug. --- src/assets/ModalRemote.js | 2 +- src/assets/ModalRemote.min.js | 10 +--------- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/src/assets/ModalRemote.js b/src/assets/ModalRemote.js index 8368435..40a1d83 100644 --- a/src/assets/ModalRemote.js +++ b/src/assets/ModalRemote.js @@ -129,7 +129,7 @@ function ModalRemote(modalId){ var instance = this; $(this.footer).append(buttonElm); if(callback!==null){ - $(buttonElm).click(function(){ + $(buttonElm).click(function(event){ callback.call(instance,this,event); }); } diff --git a/src/assets/ModalRemote.min.js b/src/assets/ModalRemote.min.js index f8afb16..921f8b6 100644 --- a/src/assets/ModalRemote.min.js +++ b/src/assets/ModalRemote.min.js @@ -1,9 +1 @@ -(function(b){b.fn.hasAttr=function(b){return void 0!==this.attr(b)}})(jQuery); -function ModalRemote(b){function h(a,d,c){var e=this;$.ajax({url:a,method:d,data:c,beforeSend:function(){k.call(e)},error:function(a){l.call(e,a)},success:function(a){m.call(e,a)}})}function k(){this.show();this.displayLoading()}function l(a){this.setTitle(a.status+a.statusText);this.setContent(a.responseText);this.addButton("Close","btn btn-default",function(a,c){this.hide()})}function m(a){void 0!==a.forceReload&&a.forceReload&&("true"==a.forceReload?$.pjax.reload({container:"#crud-datatable-pjax"}): - $.pjax.reload({container:a.forceReload}));if(void 0!==a.forceClose&&a.forceClose)this.hide();else if(void 0!==a.size&&this.setSize(a.size),void 0!==a.title&&this.setTitle(a.title),void 0!==a.content&&this.setContent(a.content),void 0!==a.footer&&this.setFooter(a.footer),void 0!==$(this.content).find("form")[0]){var d=$(this.content).find("form")[0];a=$(this.footer).find('[type="submit"]')[0];if(void 0===a)console.warn("Modal have form but have not any submit button");else{var c=this;$(a).click(function(a){a= - $(d).attr("action");var b=$(d).hasAttr("method")?$(d).attr("method"):"GET",f=$(d).serializeArray();$.ajax({url:a,method:b,data:f,beforeSend:function(){k.call(c)},error:function(a){l.call(c,a)},success:function(a){m.call(c,a)}})})}}}this.defaults={okLabel:"OK",cancelLabel:"Cancel",loadingTitle:"Loading"};this.modal=$(b);this.dialog=$(b).find(".modal-dialog");this.header=$(b).find(".modal-header");this.content=$(b).find(".modal-body");this.footer=$(b).find(".modal-footer");this.loadingContent='
'; - this.show=function(){this.clear();$(this.modal).modal("show")};this.hide=function(){$(this.modal).modal("hide")};this.toggle=function(){$(this.modal).modal("toggle")};this.clear=function(){$(this.modal).find(".modal-title").remove();$(this.content).html("");$(this.footer).html("")};this.setHeader=function(a){$(this.header).html(a)};this.setContent=function(a){$(this.content).html(a)};this.setFooter=function(a){$(this.footer).html(a)};this.setTitle=function(a){$(this.header).find("h4.modal-title").remove(); - $(this.header).append('")};this.hidenCloseButton=function(){$(this.header).find("button.close").hide()};this.showCloseButton=function(){$(this.header).find("button.close").show()};this.addButton=function(a,d,c){buttonElm=document.createElement("button");buttonElm.setAttribute("class",null===d?"btn btn-primary":d);buttonElm.innerHTML=a;var b=this;$(this.footer).append(buttonElm);null!==c&&$(buttonElm).click(function(){c.call(b,this,event)})};this.displayLoading=function(){this.setContent(this.loadingContent); - this.setTitle(this.defaults.loadingTitle)};this.confirm=function(a,d,c,b,g,f){void 0!==a&&this.setTitle(a);void 0!==d&&this.setContent(d);this.addButton(void 0===c?this.defaults.okLabel:c,"btn btn-primary",g);this.addButton(void 0===b?this.defaults.cancelLabel:b,"btn btn-default pull-left",f)};this.setSize=function(a){$(this.dialog).removeClass("modal-lg");$(this.dialog).removeClass("modal-sm");"large"==a?$(this.dialog).addClass("modal-lg"):"small"==a?$(this.dialog).addClass("modal-sm"):"normal"!== - a&&console.warn("Not define size"+a)};this.remote=function(a,b){var c=$(a).hasAttr("href")?$(a).attr("href"):$(a).attr("data-url"),e=$(a).hasAttr("data-request-method")?$(a).attr("data-request-method"):"GET",g=$(a).hasAttr("data-modal-size")?$(a).attr("data-modal-size"):"normal";if($(a).hasAttr("data-confirm-title")||$(a).hasAttr("data-confirm-message")){this.show();this.setSize(g);var f=this;this.confirm($(a).attr("data-confirm-title"),$(a).attr("data-confirm-message"),$(a).attr("data-confirm-ok"), - $(a).attr("data-confirm-cancel"),function(a){h.call(f,c,e,b)},function(a){this.hide()})}else h.call(this,c,e,b)}}; \ No newline at end of file +function ModalRemote(t){function i(t,i,n){var s=this;$.ajax({url:t,method:i,data:n,beforeSend:function(){o.call(s)},error:function(t){e.call(s,t)},success:function(t){a.call(s,t)}})}function o(){this.show(),this.displayLoading()}function e(t){this.setTitle(t.status+t.statusText),this.setContent(t.responseText),this.addButton("Close","btn btn-default",function(t,i){this.hide()})}function a(t){if(void 0!==t.forceReload&&t.forceReload&&("true"==t.forceReload?$.pjax.reload({container:"#crud-datatable-pjax"}):$.pjax.reload({container:t.forceReload})),void 0!==t.forceClose&&t.forceClose)return void this.hide();if(void 0!==t.size&&this.setSize(t.size),void 0!==t.title&&this.setTitle(t.title),void 0!==t.content&&this.setContent(t.content),void 0!==t.footer&&this.setFooter(t.footer),void 0!==$(this.content).find("form")[0]){var i=$(this.content).find("form")[0],n=$(this.footer).find('[type="submit"]')[0];if(void 0===n)console.warn("Modal have form but have not any submit button");else{var s=this;$(n).click(function(t){var n=$(i).attr("action"),l=$(i).hasAttr("method")?$(i).attr("method"):"GET",d=$(i).serializeArray();$.ajax({url:n,method:l,data:d,beforeSend:function(){o.call(s)},error:function(t){e.call(s,t)},success:function(t){a.call(s,t)}})})}}}this.defaults={okLabel:"OK",cancelLabel:"Cancel",loadingTitle:"Loading"},this.modal=$(t),this.dialog=$(t).find(".modal-dialog"),this.header=$(t).find(".modal-header"),this.content=$(t).find(".modal-body"),this.footer=$(t).find(".modal-footer"),this.loadingContent='
',this.show=function(){this.clear(),$(this.modal).modal("show")},this.hide=function(){$(this.modal).modal("hide")},this.toggle=function(){$(this.modal).modal("toggle")},this.clear=function(){$(this.modal).find(".modal-title").remove(),$(this.content).html(""),$(this.footer).html("")},this.setHeader=function(t){$(this.header).html(t)},this.setContent=function(t){$(this.content).html(t)},this.setFooter=function(t){$(this.footer).html(t)},this.setTitle=function(t){$(this.header).find("h4.modal-title").remove(),$(this.header).append('")},this.hidenCloseButton=function(){$(this.header).find("button.close").hide()},this.showCloseButton=function(){$(this.header).find("button.close").show()},this.addButton=function(t,i,o){buttonElm=document.createElement("button"),buttonElm.setAttribute("class",null===i?"btn btn-primary":i),buttonElm.innerHTML=t;var e=this;$(this.footer).append(buttonElm),null!==o&&$(buttonElm).click(function(t){o.call(e,this,t)})},this.displayLoading=function(){this.setContent(this.loadingContent),this.setTitle(this.defaults.loadingTitle)},this.confirm=function(t,i,o,e,a,n){void 0!==t&&this.setTitle(t),void 0!==i&&this.setContent(i),this.addButton(void 0===o?this.defaults.okLabel:o,"btn btn-primary",a),this.addButton(void 0===e?this.defaults.cancelLabel:e,"btn btn-default pull-left",n)},this.setSize=function(t){$(this.dialog).removeClass("modal-lg"),$(this.dialog).removeClass("modal-sm"),"large"==t?$(this.dialog).addClass("modal-lg"):"small"==t?$(this.dialog).addClass("modal-sm"):"normal"!==t&&console.warn("Not define size"+t)},this.remote=function(t,o){var e=$(t).hasAttr("href")?$(t).attr("href"):$(t).attr("data-url"),a=$(t).hasAttr("data-request-method")?$(t).attr("data-request-method"):"GET",n=$(t).hasAttr("data-modal-size")?$(t).attr("data-modal-size"):"normal";if($(t).hasAttr("data-confirm-title")||$(t).hasAttr("data-confirm-message")){this.show(),this.setSize(n);var s=this;this.confirm($(t).attr("data-confirm-title"),$(t).attr("data-confirm-message"),$(t).attr("data-confirm-ok"),$(t).attr("data-confirm-cancel"),function(t){i.call(s,e,a,o)},function(t){this.hide()})}else i.call(this,e,a,o)}}!function(t){t.fn.hasAttr=function(t){return void 0!==this.attr(t)}}(jQuery); \ No newline at end of file