Added proper visual clues about updated records

This commit is contained in:
colymba 2013-12-05 18:29:47 +02:00
parent 0eab8d9659
commit 425cf9cffe
3 changed files with 80 additions and 23 deletions

View File

@ -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);
}
}

View File

@ -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;
}

View File

@ -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');
}