diff --git a/code/GridFieldBulkActionEditHandler.php b/code/GridFieldBulkActionEditHandler.php index fa0b25e..6780a70 100644 --- a/code/GridFieldBulkActionEditHandler.php +++ b/code/GridFieldBulkActionEditHandler.php @@ -45,6 +45,7 @@ class GridFieldBulkActionEditHandler extends GridFieldBulkActionHandler ->setAttribute('data-icon', 'accept') ->setAttribute('data-url', $this->gridField->Link('bulkaction/bulkedit/update')) ->setUseButtonTag(true) + ->setAttribute('src', '')//changes type to image so isn't hooked by default actions handlers ); $actions->push( @@ -73,7 +74,7 @@ class GridFieldBulkActionEditHandler extends GridFieldBulkActionHandler $editedRecordList->push( ToggleCompositeField::create( 'GFBM_'.$id, - '#'.$id.': '.DataObject::get_by_id($this->gridField->list->dataClass, $id)->getTitle(), + DataObject::get_by_id($this->gridField->list->dataClass, $id)->getTitle(), array_values($recordCMSDataFields) )->setHeadingLevel(4) ->addExtraClass('bulkEditingFieldHolder') @@ -108,7 +109,7 @@ class GridFieldBulkActionEditHandler extends GridFieldBulkActionHandler $form->setAttribute('data-pjax-fragment', 'CurrentForm Content'); Requirements::javascript(BULK_EDIT_TOOLS_PATH . '/javascript/GridFieldBulkEditingForm.js'); - Requirements::css(BULK_EDIT_TOOLS_PATH . '/css/GridFieldBulkManager.css'); + Requirements::css(BULK_EDIT_TOOLS_PATH . '/css/GridFieldBulkEditingForm.css'); Requirements::add_i18n_javascript(BULK_EDIT_TOOLS_PATH . '/javascript/lang'); if($this->request->isAjax()) @@ -150,7 +151,11 @@ class GridFieldBulkActionEditHandler extends GridFieldBulkActionHandler } } $record->write(); - - return '{done:1,recordID:'.$data['ID'].'}'; + + return json_encode(array( + 'done' => 1, + 'recordID' => $data['ID'], + 'title' => $record->getTitle() + ), JSON_NUMERIC_CHECK); } } \ No newline at end of file diff --git a/css/GridFieldBulkEditingForm.css b/css/GridFieldBulkEditingForm.css new file mode 100644 index 0000000..82c3813 --- /dev/null +++ b/css/GridFieldBulkEditingForm.css @@ -0,0 +1,33 @@ +/** + * Bulk editing styles + */ +.bulkEditingForm.hasUpdate .ui-accordion-header +{ + background-color: #f2ba11; + + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f2ba11), color-stop(100%, #df6e00)); + background-image: -webkit-linear-gradient(top, #f2ba11 0%, #df6e00 100%); + background-image: -moz-linear-gradient(top, #f2ba11 0%, #df6e00 100%); + background-image: -o-linear-gradient(top, #f2ba11 0%, #df6e00 100%); + background-image: -ms-linear-gradient(top, #f2ba11 0%, #df6e00 100%); + background-image: linear-gradient(top, #f2ba11 0%, #df6e00 100%); +} + +.bulkEditingForm.updated .ui-accordion-header +{ + background-color: #a4ca3a; + + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #a4ca3a), color-stop(100%, #59781D)); + background-image: -webkit-linear-gradient(top, #a4ca3a 0%, #59781D 100%); + background-image: -moz-linear-gradient(top, #a4ca3a 0%, #59781D 100%); + background-image: -o-linear-gradient(top, #a4ca3a 0%, #59781D 100%); + background-image: -ms-linear-gradient(top, #a4ca3a 0%, #59781D 100%); + background-image: linear-gradient(top, #a4ca3a 0%, #59781D 100%); +} + +.bulkEditingForm.hasUpdate .ui-accordion-header a, +.bulkEditingForm.updated .ui-accordion-header a +{ + color: #fff; + text-shadow: none; +} \ No newline at end of file diff --git a/javascript/GridFieldBulkEditingForm.js b/javascript/GridFieldBulkEditingForm.js index f94d2ec..347c4a1 100644 --- a/javascript/GridFieldBulkEditingForm.js +++ b/javascript/GridFieldBulkEditingForm.js @@ -18,14 +18,14 @@ } }); - $('.bulkEditingForm input, .bulkEditingForm select, .bulkEditingForm textarea').entwine({ + $('.bulkEditingForm input.text, .bulkEditingForm select, .bulkEditingForm textarea, .bulkEditingForm input.checkbox').entwine({ onchange: function(){ - var form; + var $form = this.parents('form.bulkEditingForm'); - form = this.parents('form.bulkEditingForm'); - - if ( !$(form).hasClass('hasUpdate') ) { - $(form).addClass('hasUpdate'); + $form.removeClass('updated'); + if ( !$form.hasClass('hasUpdate') ) + { + $form.addClass('hasUpdate'); } } }); @@ -37,15 +37,19 @@ onunmatch: function(){ }, onclick: function(e){ - var formsWithUpadtes, url, data, cacheBuster; + e.stopImmediatePropagation(); + + var $formsWithUpadtes = $('form.bulkEditingForm.hasUpdate'), + url = $(this).data('url'), + data, + cacheBuster + ; - formsWithUpadtes = $('form.bulkEditingForm.hasUpdate'); - $(this).data('formsToUpdate', $(formsWithUpadtes).length); - url = $(this).data('url'); + $(this).data('formsToUpdate', $formsWithUpadtes.length); - if ( $(formsWithUpadtes).length > 0 ) $(this).addClass('loading'); + if ( $formsWithUpadtes.length > 0 ) $(this).addClass('loading'); - $(formsWithUpadtes).each(function(){ + $formsWithUpadtes.each(function(){ cacheBuster = new Date().getTime() + '_' + $(this).attr('name'); data = $(this).serialize(); @@ -57,16 +61,31 @@ data: data, type: "POST", context: $(this) - }).done(function() { - var btn = $('#bulkEditingUpdateBtn'); - var totalForms = parseInt( $(btn).data('formsToUpdate') ); - var counter = parseInt( $(btn).data('completedForms') ); + }).success(function(data, textStatus, jqXHR) { + var $btn = $('#bulkEditingUpdateBtn'), + totalForms = parseInt( $btn.data('formsToUpdate') ), + counter = parseInt( $btn.data('completedForms') ), + title + ; + counter = counter + 1; - $(btn).data('completedForms', counter); + $btn.data('completedForms', counter); - $(this).removeClass('hasUpdate'); + $(this).removeClass('hasUpdate'); + $(this).addClass('updated'); + + try{ + data = $.parseJSON( data ); + }catch(er){} + + if ( data.title ) + { + $(this).find('.ui-accordion-header a').html(data.title); + } + $(this).find('.ui-accordion-header').click(); - if ( counter == totalForms ) { + if ( counter == totalForms ) + { $('#bulkEditingUpdateBtn').data('completedForms', 0); $('#bulkEditingUpdateBtn').removeClass('loading'); }