diff --git a/src/CrudAsset.php b/src/CrudAsset.php index 0f484e2..44d82fa 100644 --- a/src/CrudAsset.php +++ b/src/CrudAsset.php @@ -19,13 +19,7 @@ class CrudAsset extends AssetBundle public $css = [ 'ajaxcrud.css' ]; - public $js = [ - //'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(); + } } diff --git a/src/assets/ModalRemote.js b/src/assets/ModalRemote.js index 9d49674..40a1d83 100644 --- a/src/assets/ModalRemote.js +++ b/src/assets/ModalRemote.js @@ -15,15 +15,15 @@ function ModalRemote(modalId){ - this.defauls = { + this.defaults = { okLabel:"OK", cancelLabel:"Cancel", - loadingTitle:"Loading", + loadingTitle:"Loading" }; this.modal = $(modalId); - this.dialog - $(modalId).find('.modal-dialog'); + this.dialog = $(modalId).find('.modal-dialog'); this.header = $(modalId).find('.modal-header'); @@ -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:'#crud-datatable-pjax'}); + 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 dd59430..921f8b6 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(event){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 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 diff --git a/src/assets/ajaxcrud.js b/src/assets/ajaxcrud.js index 9cde446..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('#ajaxCrubModal'); + // 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 03915e0..22018e2 100644 --- a/src/assets/ajaxcrud.min.js +++ b/src/assets/ajaxcrud.min.js @@ -1 +1,2 @@ -$(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=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 diff --git a/src/generators/default/controller.php b/src/generators/default/controller.php index 93b97b2..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"]). @@ -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"]). @@ -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"]). @@ -203,9 +203,9 @@ public function actionUpdate() ]; }else if($model->load($request->post()) && $model->save()){ return [ - 'forceReload'=>'true', + '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"]). @@ -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 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"?> '?>