From 20dfa3c9ea390e02de1b56b77186eb319a241253 Mon Sep 17 00:00:00 2001 From: UndefinedOffset Date: Tue, 15 May 2012 11:04:40 -0300 Subject: [PATCH] Coding convention updates Moved text labels into translations Added class documentation to the GridFieldSortableRows class --- code/forms/GridFieldSortableRows.php | 268 ++++++++++---------- css/GridFieldSortableRows.css | 6 +- javascript/GridFieldSortableRows.js | 105 ++++---- lang/en.yml | 4 + templates/Includes/GridFieldSortableRows.ss | 14 +- 5 files changed, 212 insertions(+), 185 deletions(-) create mode 100644 lang/en.yml diff --git a/code/forms/GridFieldSortableRows.php b/code/forms/GridFieldSortableRows.php index ef7ac48..29bdd59 100644 --- a/code/forms/GridFieldSortableRows.php +++ b/code/forms/GridFieldSortableRows.php @@ -1,142 +1,156 @@ sortColumn=$sortColumn; + $this->sortColumn = $sortColumn; } - - /** - * Returns a map where the keys are fragment names and the values are pieces of HTML to add to these fragments. - * @param GridField $gridField Grid Field Reference - * @return {array} Map where the keys are fragment names and the values are pieces of HTML to add to these fragments. - */ - public function getHTMLFragments($gridField) { - $state=$gridField->State->GridFieldSortableRows; - if(!is_bool($state->sortableToggle)) { - $state->sortableToggle=false; - } - - - //Sort order toggle - $sortOrderToggle=new GridField_FormAction($gridField, 'sortablerows_toggle', 'Allow drag and drop re-ordering', 'saveGridRowSort', null); - $sortOrderToggle->addExtraClass('sortablerows_toggle'); - - - //Disable Pagenator - $disablePagenator=new GridField_FormAction($gridField, 'sortablerows_disablepagenator', 'Disable Pagenator', 'sortableRowsDisablePaginator', null); - $disablePagenator->addExtraClass('sortablerows_disablepagenator'); - - - $forTemplate=new ArrayData(array( - 'SortableToggle'=>$sortOrderToggle, - 'PagenatorToggle'=>$disablePagenator, - 'Checked'=>($state->sortableToggle==true ? ' checked="checked"':'') - )); - - - //Inject Requirements - Requirements::css('SortableGridField/css/GridFieldSortableRows.css'); - Requirements::javascript('SortableGridField/javascript/GridFieldSortableRows.js'); - - - return array( - 'header'=>$forTemplate->renderWith('GridFieldSortableRows', array('Colspan'=>count($gridField->getColumns()))) - ); - - return array(); - } - - /** - * Manipulate the datalist as needed by this grid modifier. - * @param {GridField} $gridField Grid Field Reference - * @param {SS_List} $dataList Data List to adjust - * @return {DataList} Modified Data List + + /** + * Returns a map where the keys are fragment names and the values are pieces of HTML to add to these fragments. + * @param GridField $gridField Grid Field Reference + * @return Array Map where the keys are fragment names and the values are pieces of HTML to add to these fragments. */ - public function getManipulatedData(GridField $gridField, SS_List $dataList) { - $state=$gridField->State->GridFieldSortableHeader; + public function getHTMLFragments($gridField) { + $state = $gridField->State->GridFieldSortableRows; + if(!is_bool($state->sortableToggle)) { + $state->sortableToggle = false; + } + + + //Sort order toggle + $sortOrderToggle = Object::create( + 'GridField_FormAction', + $gridField, + 'sortablerows-toggle', + _t('GridFieldSortableRows.ALLOW_DRAG_DROP', '_Allow drag and drop re-ordering'), + 'saveGridRowSort', + null + )->addExtraClass('sortablerows-toggle'); + + + //Disable Pagenator + $disablePagenator = Object::create( + 'GridField_FormAction', + $gridField, + 'sortablerows-disablepagenator', + _t('GridFieldSortableRows.DISABLE_PAGINATOR', '_Disable Pagenator'), + 'sortableRowsDisablePaginator', + null + )->addExtraClass('sortablerows-disablepagenator'); + + + $data = array('SortableToggle' => $sortOrderToggle, + 'PagenatorToggle' => $disablePagenator, + 'Checked' => ($state->sortableToggle == true ? ' checked = "checked"':'')); + + $forTemplate = new ArrayData($data); + + + //Inject Requirements + Requirements::css('SortableGridField/css/GridFieldSortableRows.css'); + Requirements::javascript('SortableGridField/javascript/GridFieldSortableRows.js'); + + + $args = array('Colspan' => count($gridField->getColumns())); + + return array('header' => $forTemplate->renderWith('GridFieldSortableRows', $args)); + } + + /** + * Manipulate the datalist as needed by this grid modifier. + * @param GridField $gridField Grid Field Reference + * @param SS_List $dataList Data List to adjust + * @return DataList Modified Data List + */ + public function getManipulatedData(GridField $gridField, SS_List $dataList) { + $state = $gridField->State->GridFieldSortableHeader; if ($state && !empty($state->SortColumn)) { return $dataList; } - - return $dataList->sort($this->sortColumn); - } - - /** - * Return a list of the actions handled by this action provider. - * @param GridField $gridField Grid Field Reference - * @return {array} Array with action identifier strings. - */ - public function getActions($gridField) { - return array('saveGridRowSort', 'sortableRowsDisablePaginator'); - } - - /** - * Handle an action on the given grid field. - * @param {GridField} $gridField Grid Field Reference - * @param {string} $actionName Action identifier, see {@link getActions()}. - * @param {array} $arguments Arguments relevant for this - * @param {array} $data All form data - */ - public function handleAction(GridField $gridField, $actionName, $arguments, $data) { - $state=$gridField->State->GridFieldSortableRows; - if(!is_bool($state->sortableToggle)) { - $state->sortableToggle=false; - }else if($state->sortableToggle==true) { - if($gridField->getConfig()->getComponentsByType('GridFieldPaginator')) { - $gridField->getConfig()->removeComponentsByType('GridFieldPaginator'); - $gridField->getConfig()->addComponent(new GridFieldFooter()); - } - - $gridField->getConfig()->removeComponentsByType('GridFieldFilterHeader'); - $gridField->getConfig()->removeComponentsByType('GridFieldSortableHeader'); - } - - - if($actionName=='savegridrowsort') { - return $this->saveGridRowSort($gridField, $data); - } - } - - /** - * Handles saving of the row sort order - * @param {GridField} $gridField Grid Field Reference - * @param {array} $data Data submitted in the request - */ - private function saveGridRowSort(GridField $gridField, $data) { - if(empty($data['Items'])) { - user_error('No items to sort', E_USER_ERROR); - } - - $className=$gridField->getModelClass(); - $owner=$gridField->Form->getRecord(); - $items=$gridField->getList(); - $many_many=($items instanceof ManyManyList); - $sortColumn=$this->sortColumn; - - - if($many_many) { - list($parentClass, $componentClass, $parentField, $componentField, $table)=$owner->many_many($gridField->getName()); - } - - - $data['Items']=explode(',', $data['Items']); - for($sort=0;$sort$sortColumn=$sort+1; - $obj->write(); - } - } - } + + return $dataList->sort($this->sortColumn); + } + + /** + * Return a list of the actions handled by this action provider. + * @param GridField $gridField Grid Field Reference + * @return Array Array with action identifier strings. + */ + public function getActions($gridField) { + return array('saveGridRowSort', 'sortableRowsDisablePaginator'); + } + + /** + * Handle an action on the given grid field. + * @param GridField $gridField Grid Field Reference + * @param String $actionName Action identifier, see {@link getActions()}. + * @param Array $arguments Arguments relevant for this + * @param Array $data All form data + */ + public function handleAction(GridField $gridField, $actionName, $arguments, $data) { + $state = $gridField->State->GridFieldSortableRows; + if (!is_bool($state->sortableToggle)) { + $state->sortableToggle = false; + } else if ($state->sortableToggle == true) { + if ($gridField->getConfig()->getComponentsByType('GridFieldPaginator')) { + $gridField->getConfig()->removeComponentsByType('GridFieldPaginator'); + $gridField->getConfig()->addComponent(new GridFieldFooter()); + } + + $gridField->getConfig()->removeComponentsByType('GridFieldFilterHeader'); + $gridField->getConfig()->removeComponentsByType('GridFieldSortableHeader'); + } + + + if ($actionName == 'savegridrowsort') { + return $this->saveGridRowSort($gridField, $data); + } + } + + /** + * Handles saving of the row sort order + * @param GridField $gridField Grid Field Reference + * @param Array $data Data submitted in the request + */ + private function saveGridRowSort(GridField $gridField, $data) { + if (empty($data['Items'])) { + user_error('No items to sort', E_USER_ERROR); + } + + $className = $gridField->getModelClass(); + $owner = $gridField->Form->getRecord(); + $items = $gridField->getList(); + $many_many = ($items instanceof ManyManyList); + $sortColumn = $this->sortColumn; + + + if ($many_many) { + list($parentClass, $componentClass, $parentField, $componentField, $table) = $owner->many_many($gridField->getName()); + } + + + $data['Items'] = explode(',', $data['Items']); + for($sort = 0;$sort$sortColumn = $sort+1; + $obj->write(); + } + } + } } ?> \ No newline at end of file diff --git a/css/GridFieldSortableRows.css b/css/GridFieldSortableRows.css index b9b1359..971fb57 100644 --- a/css/GridFieldSortableRows.css +++ b/css/GridFieldSortableRows.css @@ -1,11 +1,11 @@ .cms table.ss-gridfield-table thead tr th.sortablerowsheading { - border-bottom: 1px solid rgba(0, 0, 0, 0.1); + border-bottom: 1px solid rgba(0, 0, 0, 0.1); } .cms table.ss-gridfield-table thead tr th.sortablerowsheading .gridfield-sortablerows button { - display: none; + display: none; } .cms table.ss-gridfield-table.dragSorting tbody tr td { - cursor: move; + cursor: move; } \ No newline at end of file diff --git a/javascript/GridFieldSortableRows.js b/javascript/GridFieldSortableRows.js index c4ce54d..816aa82 100644 --- a/javascript/GridFieldSortableRows.js +++ b/javascript/GridFieldSortableRows.js @@ -1,50 +1,59 @@ (function($) { - $('.ss-gridfield .gridfield-sortablerows input').entwine({ - onmatch: function() { - var refCheckbox=$(this); - - var gridField=$(this).getGridField(); - - if($(this).is(':checked')) { - gridField.find('table').addClass('dragSorting'); - }else { - gridField.find('table').removeClass('dragSorting'); - } - - gridField.find('tbody').sortable({ - disabled: ($(this).is(':checked')==false), - helper: function(e, ui) { - //Maintains width of the columns - ui.children().each(function() { - $(this).width($(this).width()); - }); - - return ui; - }, - update: function(event, ui) { - var dataRows=[]; - var gridItems=gridField.getItems(); - var button=refCheckbox.parent().find('.sortablerows_toggle'); - - - for(var i=0;i - -
- Allow drag and drop re-ordering - $SortableToggle - $PagenatorToggle -
- + +
+ <%t GridFieldSortableRows.ALLOW_DRAG_DROP "_Allow drag and drop re-ordering" %> + $SortableToggle + $PagenatorToggle +
+ \ No newline at end of file