From 343d711660e83b47c664e74fb8ec735da06a0a07 Mon Sep 17 00:00:00 2001 From: "Portugal, Marcelo" Date: Sat, 3 Feb 2018 00:31:54 -0500 Subject: [PATCH] feat(expandAllButton): Add ability to hide expand all button. fix #6555 --- misc/tutorial/216_expandable_grid.ngdoc | 271 ++++++++------ src/features/expandable/js/expandable.js | 17 +- .../templates/expandableTopRowHeader.html | 12 +- .../expandable/test/expandable.spec.js | 339 ++++++++++++++---- src/less/cell.less | 6 + src/less/grid.less | 6 + 6 files changed, 468 insertions(+), 183 deletions(-) diff --git a/misc/tutorial/216_expandable_grid.ngdoc b/misc/tutorial/216_expandable_grid.ngdoc index 8979772d9c..a905cba2b6 100644 --- a/misc/tutorial/216_expandable_grid.ngdoc +++ b/misc/tutorial/216_expandable_grid.ngdoc @@ -45,17 +45,19 @@ appears when you quickly scroll through the grid. var app = angular.module('app', ['ngTouch', 'ui.grid', 'ui.grid.expandable', 'ui.grid.selection', 'ui.grid.pinning']); - app.controller('MainCtrl', ['$scope', '$http', '$log', function ($scope, $http, $log) { - $scope.gridOptions = { + app.controller('MainCtrl', function MainCtrl($http, $log) { + var vm = this; + + vm.gridOptions = { expandableRowTemplate: 'expandableRowTemplate.html', expandableRowHeight: 150, //subGridVariable will be available in subGrid scope expandableRowScope: { subGridVariable: 'subGridScopeVariable' } - } + }; - $scope.gridOptions.columnDefs = [ + vm.gridOptions.columnDefs = [ { name: 'id' }, { name: 'name'}, { name: 'age'}, @@ -68,137 +70,149 @@ appears when you quickly scroll through the grid. for(i = 0; i < data.length; i++){ data[i].subGridOptions = { - columnDefs: [ {name:"Id", field:"id"},{name:"Name", field:"name"} ], + columnDefs: [{name: 'Id', field: 'id'}, {name: 'Name', field: 'name'}], data: data[i].friends - } + }; } - $scope.gridOptions.data = data; + vm.gridOptions.data = data; }); - $scope.gridOptions.onRegisterApi = function(gridApi){ - $scope.gridApi = gridApi; + vm.gridOptions.onRegisterApi = function(gridApi){ + vm.gridApi = gridApi; }; - $scope.expandAllRows = function() { - $scope.gridApi.expandable.expandAllRows(); - } + vm.expandAllRows = function() { + vm.gridApi.expandable.expandAllRows(); + }; - $scope.collapseAllRows = function() { - $scope.gridApi.expandable.collapseAllRows(); - } - }]); + vm.collapseAllRows = function() { + vm.gridApi.expandable.collapseAllRows(); + }; - app.controller('SecondCtrl', ['$scope', '$http', '$log', function ($scope, $http, $log) { - $scope.gridOptions = { - enableRowSelection: true, - expandableRowTemplate: 'expandableRowTemplate.html', - expandableRowHeight: 150 - } + vm.toggleExpandAllBtn = function() { + vm.gridOptions.showExpandAllButton = !vm.gridOptions.showExpandAllButton; + }; + }); - $scope.gridOptions.columnDefs = [ - { name: 'id', pinnedLeft:true }, - { name: 'name'}, - { name: 'age'}, - { name: 'address.city'} - ]; - - $http.get('/data/500_complex.json') - .then(function(response) { - var data = response.data; - - for(i = 0; i < data.length; i++){ - data[i].subGridOptions = { - columnDefs: [ {name:"Id", field:"id"},{name:"Name", field:"name"} ], - data: data[i].friends - } - } - $scope.gridOptions.data = data; - }); - }]); - - app.controller('ThirdCtrl', ['$scope', '$http', '$log', function ($scope, $http, $log) { - $scope.gridOptions = { - expandableRowTemplate: 'expandableRowTemplate.html', - expandableRowHeight: 150, - onRegisterApi: function (gridApi) { - gridApi.expandable.on.rowExpandedStateChanged($scope, function (row) { - if (row.isExpanded) { - row.entity.subGridOptions = { - columnDefs: [ - { name: 'name'}, - { name: 'gender'}, - { name: 'company'} - ]}; - - $http.get('/data/100.json') - .then(function(response) { - row.entity.subGridOptions.data = response.data; - }); - } - }); - } - } + app.controller('SecondCtrl', function SecondCtrl($http, $log) { + var vm = this; - $scope.gridOptions.columnDefs = [ - { name: 'id', pinnedLeft:true }, - { name: 'name'}, - { name: 'age'}, - { name: 'address.city'} - ]; - - $http.get('/data/500_complex.json') - .then(function(response) { - $scope.gridOptions.data = response.data; - }); - }]); - app.controller('FourthCtrl', ['$scope', '$http', '$log', function ($scope, $http, $log) { - $scope.gridOptions = { - enableRowSelection: true, - expandableRowTemplate: 'expandableRowTemplate.html', - expandableRowHeight: 150 - } + vm.gridOptions = { + enableRowSelection: true, + expandableRowTemplate: 'expandableRowTemplate.html', + expandableRowHeight: 150 + } + + vm.gridOptions.columnDefs = [ + { name: 'id', pinnedLeft:true }, + { name: 'name'}, + { name: 'age'}, + { name: 'address.city'} + ]; + + $http.get('/data/500_complex.json') + .then(function(response) { + var data = response.data; + + for(i = 0; i < data.length; i++) { + data[i].subGridOptions = { + columnDefs: [{name: 'Id', field: 'id'}, {name: 'Name', field: 'name'}], + data: data[i].friends + }; + } + vm.gridOptions.data = data; + }); + }); + + app.controller('ThirdCtrl', function ThirdCtrl($scope, $http, $log) { + var vm = this; + + vm.gridOptions = { + expandableRowTemplate: 'expandableRowTemplate.html', + expandableRowHeight: 150, + onRegisterApi: function (gridApi) { + gridApi.expandable.on.rowExpandedStateChanged($scope, function (row) { + if (row.isExpanded) { + row.entity.subGridOptions = { + columnDefs: [ + { name: 'name'}, + { name: 'gender'}, + { name: 'company'} + ]}; - $scope.gridOptions.columnDefs = [ - { name: 'id', pinnedLeft:true }, - { name: 'name'}, - { name: 'age'}, - { name: 'address.city'} - ]; - - $http.get('/data/500_complex.json') - .then(function(response) { - var data = response.data; - - for(i = 0; i < data.length; i++){ - data[i].subGridOptions = { - columnDefs: [ {name:"Id", field:"id"},{name:"Name", field:"name"} ], - data: data[i].friends, - disableRowExpandable : (i % 2 === 0) - } - } - $scope.gridOptions.data = data; - }); - }]); + $http.get('/data/100.json') + .then(function(response) { + row.entity.subGridOptions.data = response.data; + }); + } + }); + } + }; + + vm.gridOptions.columnDefs = [ + { name: 'id', pinnedLeft:true }, + { name: 'name'}, + { name: 'age'}, + { name: 'address.city'} + ]; + + $http.get('/data/500_complex.json') + .then(function(response) { + vm.gridOptions.data = response.data; + }); + }); + + app.controller('FourthCtrl', function FourthCtrl($http, $log) { + var vm = this; + + vm.gridOptions = { + enableRowSelection: true, + expandableRowTemplate: 'expandableRowTemplate.html', + expandableRowHeight: 150 + }; + + vm.gridOptions.columnDefs = [ + { name: 'id', pinnedLeft:true }, + { name: 'name'}, + { name: 'age'}, + { name: 'address.city'} + ]; + + $http.get('/data/500_complex.json') + .then(function(response) { + var data = response.data; + + for(i = 0; i < data.length; i++) { + data[i].subGridOptions = { + columnDefs: [{name: 'Id', field: 'id'}, {name: 'Name', field: 'name'}], + data: data[i].friends, + disableRowExpandable : (i % 2 === 0) + }; + } + vm.gridOptions.data = data; + }); + }); -
+
- - + + +
-
+
Expandable rows works with checkboxes from selection and left pins -
-
+
+
Retrieve data for subGrid when expanding -
-
+
+
Toggle expand subGrid control -
-
+
+
@@ -210,4 +224,33 @@ appears when you quickly scroll through the grid.
+ + var gridTestUtils = require('../../test/e2e/gridTestUtils.spec.js'), + GridObjectTest = require('../../test/e2e/gridObjectTestUtils.spec.js'), + grid1 = new GridObjectTest('grid1'); + + describe('216 Expandable Grid', function() { + // Reload the page before each test if on Firefox. Chrome does it automatically. + gridTestUtils.firefoxReload(); + + it('should load the header values should be as expected', function() { + grid1.expectHeaderColumns(['Id', 'Name', 'Age', 'Address.City']); + }); + + describe('Toggle Expand All Visibility', function() { + var expandAllButton, emptyCellContent; + + it('should display the expand all button by default', function() { + expandAllButton = element( by.css('#grid1 .ui-grid-expandable-buttons-cell .ui-grid-icon-button') ); + expect(expandAllButton.isDisplayed()).toBe(true); + }); + it('should hide the expand all button when the Toggle Expand All Visibility button is clicked', function() { + element( by.id('toggleVisibility') ).click(); + + emptyCellContent = element( by.css('#grid1 .ui-grid-expandable-buttons-cell .ui-grid-cell-empty') ); + expect(emptyCellContent.isDisplayed()).toBe(true); + }); + }); + }); + diff --git a/src/features/expandable/js/expandable.js b/src/features/expandable/js/expandable.js index 97dff83bb3..8fc17df155 100644 --- a/src/features/expandable/js/expandable.js +++ b/src/features/expandable/js/expandable.js @@ -45,6 +45,21 @@ */ grid.options.enableExpandable = grid.options.enableExpandable !== false; + /** + * @ngdoc object + * @name showExpandAllButton + * @propertyOf ui.grid.expandable.api:GridOptions + * @description Whether or not to display the expand all button, allows you to hide expand all button on specific grids + * within your application, or in specific modes on _this_ grid. Defaults to true. + * @example + *
+         *    $scope.gridOptions = {
+         *      showExpandAllButton: false
+         *    }
+         *  
+ */ + grid.options.showExpandAllButton = grid.options.showExpandAllButton !== false; + /** * @ngdoc object * @name expandableRowHeight @@ -62,7 +77,7 @@ /** * @ngdoc object - * @name + * @name expandableRowHeaderWidth * @propertyOf ui.grid.expandable.api:GridOptions * @description Width in pixels of the expandable column. Defaults to 40 * @example diff --git a/src/features/expandable/templates/expandableTopRowHeader.html b/src/features/expandable/templates/expandableTopRowHeader.html index ec63fe78db..a491f23e0b 100644 --- a/src/features/expandable/templates/expandableTopRowHeader.html +++ b/src/features/expandable/templates/expandableTopRowHeader.html @@ -1,10 +1,10 @@ -
-
- +
+ +
diff --git a/src/features/expandable/test/expandable.spec.js b/src/features/expandable/test/expandable.spec.js index b44f44f5b5..e67b8f1b43 100644 --- a/src/features/expandable/test/expandable.spec.js +++ b/src/features/expandable/test/expandable.spec.js @@ -1,84 +1,299 @@ -describe('ui.grid.expandable', function () { +describe('ui.grid.expandable', function() { + 'use strict'; - var scope, element, timeout; + var $compile, $httpBackend, $rootScope, $timeout; - beforeEach(module('ui.grid.expandable')); + beforeEach(function() { + module('ui.grid.expandable'); - beforeEach(inject(function (_$compile_, $rootScope, $timeout, $httpBackend) { + inject(function(_$compile_, _$httpBackend_, _$rootScope_, _$timeout_) { + $compile = _$compile_; + $httpBackend = _$httpBackend_; + $rootScope = _$rootScope_; + $timeout = _$timeout_; + }); + }); - var $compile = _$compile_; - scope = $rootScope; - timeout = $timeout; + describe('ui-grid-expandable directive', function() { + var element, scope; - scope.gridOptions = { - expandableRowTemplate: 'expandableRowTemplate.html', - expandableRowHeight: 150, - expandableRowHeaderWidth: 40 - }; - scope.gridOptions.data = [ - { col1: 'col1', col2: 'col2' } - ]; - scope.gridOptions.onRegisterApi = function (gridApi) { - scope.gridApi = gridApi; - scope.grid = gridApi.grid; - }; + beforeEach(function() { + scope = $rootScope.$new(); - $httpBackend.when('GET', 'expandableRowTemplate.html').respond("
"); - element = angular.element('
'); + scope.gridOptions = { + expandableRowTemplate: 'expandableRowTemplate.html', + expandableRowHeight: 150, + expandableRowHeaderWidth: 40 + }; + scope.gridOptions.data = [ + { col1: 'col1', col2: 'col2' } + ]; + scope.gridOptions.onRegisterApi = function(gridApi) { + scope.gridApi = gridApi; + scope.grid = gridApi.grid; + }; + + $httpBackend.when('GET', 'expandableRowTemplate.html').respond("
"); + element = angular.element('
'); - $timeout(function () { $compile(element)(scope); + scope.$apply(); + }); + it('public api expandable should be well defined', function() { + expect(scope.gridApi.expandable).toBeDefined(); + expect(scope.gridApi.expandable.on.rowExpandedStateChanged).toBeDefined(); + expect(scope.gridApi.expandable.raise.rowExpandedStateChanged).toBeDefined(); + expect(scope.gridApi.expandable.toggleRowExpansion).toBeDefined(); + expect(scope.gridApi.expandable.expandAllRows).toBeDefined(); + expect(scope.gridApi.expandable.collapseAllRows).toBeDefined(); + expect(scope.gridApi.expandable.toggleAllRows).toBeDefined(); }); - $timeout.flush(); - })); - - it('public api expandable should be well defined', function () { - expect(scope.gridApi.expandable).toBeDefined(); - expect(scope.gridApi.expandable.on.rowExpandedStateChanged).toBeDefined(); - expect(scope.gridApi.expandable.raise.rowExpandedStateChanged).toBeDefined(); - expect(scope.gridApi.expandable.toggleRowExpansion).toBeDefined(); - expect(scope.gridApi.expandable.expandAllRows).toBeDefined(); - expect(scope.gridApi.expandable.collapseAllRows).toBeDefined(); - expect(scope.gridApi.expandable.toggleAllRows).toBeDefined(); - }); - it('expandAll and collapseAll should set and unset row.isExpanded', function () { - scope.gridApi.expandable.expandAllRows(); - scope.grid.rows.forEach(function(row) { - expect(row.isExpanded || (row.entity.subGridOptions && row.entity.subGridOptions.disableRowExpandable)).toBe(true); + it('expandAll and collapseAll should set and unset row.isExpanded', function() { + scope.gridApi.expandable.expandAllRows(); + scope.grid.rows.forEach(function(row) { + expect(row.isExpanded || (row.entity.subGridOptions && row.entity.subGridOptions.disableRowExpandable)).toBe(true); + }); + scope.gridApi.expandable.collapseAllRows(); + scope.grid.rows.forEach(function(row) { + expect(row.isExpanded).toBe(false); + }); }); - scope.gridApi.expandable.collapseAllRows(); - scope.grid.rows.forEach(function(row) { - expect(row.isExpanded).toBe(false); + + it('toggleAllRows should set and unset row.isExpanded', function() { + scope.gridApi.expandable.toggleAllRows(); + scope.grid.rows.forEach(function(row) { + expect(row.isExpanded || (row.entity.subGridOptions && row.entity.subGridOptions.disableRowExpandable)).toBe(true); + }); + scope.gridApi.expandable.toggleAllRows(); + scope.grid.rows.forEach(function(row) { + expect(row.isExpanded).toBe(false); + }); }); - }); - it('toggleAllRows should set and unset row.isExpanded', function(){ - scope.gridApi.expandable.toggleAllRows(); - scope.grid.rows.forEach(function(row){ - expect(row.isExpanded || (row.entity.subGridOptions && row.entity.subGridOptions.disableRowExpandable)).toBe(true); + it('event rowExpandedStateChanged should be fired whenever row expands', function() { + var functionCalled = false; + + scope.gridApi.expandable.on.rowExpandedStateChanged(scope, function() { + functionCalled = true; + }); + scope.gridApi.expandable.toggleRowExpansion(scope.grid.rows[0].entity); + expect(functionCalled).toBe(true); }); - scope.gridApi.expandable.toggleAllRows(); - scope.grid.rows.forEach(function(row){ - expect(row.isExpanded).toBe(false); + + it('subgrid should be added to the dom when we expand row', function() { + expect(element.find('.test').length).toBe(0); + scope.gridApi.expandable.toggleRowExpansion(scope.grid.rows[0].entity); + scope.$apply(); + $timeout(function() { + expect(element.find('.test').length).toBe(1); + }); }); }); - it('event rowExpandedStateChanged should be fired whenever row expands', function () { - var functionCalled = false; - scope.gridApi.expandable.on.rowExpandedStateChanged(scope,function(row){ - functionCalled = true; + describe('uiGridExpandableService', function() { + var grid, gridUtil, uiGridExpandableService; + + beforeEach(function() { + inject(function(_gridUtil_, _uiGridExpandableService_) { + gridUtil = _gridUtil_; + uiGridExpandableService = _uiGridExpandableService_; + }); + + grid = { + api: jasmine.createSpyObj('gridApi', ['registerEventsFromObject', 'registerMethodsFromObject']), + options: {}, + rows: [], + renderContainers: {body: {visibleRowCache: []}}, + getRow: jasmine.createSpy('getRow'), + queueGridRefresh: jasmine.createSpy('queueGridRefresh') + }; + + spyOn(gridUtil, 'logError').and.callFake(angular.noop); }); - scope.gridApi.expandable.toggleRowExpansion(scope.grid.rows[0].entity); - expect(functionCalled).toBe(true); - }); + afterEach(function() { + grid.api.registerEventsFromObject.calls.reset(); + grid.api.registerMethodsFromObject.calls.reset(); + grid.queueGridRefresh.calls.reset(); + grid.getRow.calls.reset(); + gridUtil.logError.calls.reset(); + }); + + describe('initializeGrid', function() { + beforeEach(function() { + grid.options = {}; + uiGridExpandableService.initializeGrid(grid); + }); + describe('options', function() { + it('should set expanded all to false', function() { + expect(grid.expandable.expandedAll).toBe(false); + }); + it('should default enableExpandable to true when it is true and expandableRowTemplate is defined', function() { + grid.options.enableExpandable = undefined; + grid.options.expandableRowTemplate = 'rowTemplate.html'; + uiGridExpandableService.initializeGrid(grid); + expect(grid.options.enableExpandable).toBe(true); + expect(gridUtil.logError).toHaveBeenCalled(); + }); + it('should set enableExpandable to false when expandableRowTemplate is undefined', function() { + expect(grid.options.enableExpandable).toBe(false); + }); + it('should set enableExpandable to false when it is passed in as false', function() { + grid.options.enableExpandable = false; + uiGridExpandableService.initializeGrid(grid); + expect(grid.options.enableExpandable).toBe(false); + }); + it('should default showExpandAllButton to true when it is undefined', function() { + expect(grid.options.showExpandAllButton).toBe(true); + }); + it('should set showExpandAllButton to false when it is passed in as false', function() { + grid.options.showExpandAllButton = false; + uiGridExpandableService.initializeGrid(grid); + expect(grid.options.showExpandAllButton).toBe(false); + }); + it('should default expandableRowHeight to 150 when it is undefined', function() { + expect(grid.options.expandableRowHeight).toBe(150); + }); + it('should set expandableRowHeight to the value passed in when it is defined', function() { + grid.options.expandableRowHeight = 200; + uiGridExpandableService.initializeGrid(grid); + expect(grid.options.expandableRowHeight).toBe(200); + }); + it('should default expandableRowHeaderWidth to 40 when it is undefined', function() { + expect(grid.options.expandableRowHeaderWidth).toBe(40); + }); + it('should set expandableRowHeaderWidth to the value passed in when it is defined', function() { + grid.options.expandableRowHeaderWidth = 80; + uiGridExpandableService.initializeGrid(grid); + expect(grid.options.expandableRowHeaderWidth).toBe(80); + }); + }); + describe('methods', function() { + var methods; + + beforeEach(function() { + grid.api.registerMethodsFromObject.and.callFake(function(publicMethods) { + methods = publicMethods.expandable; + }); + grid.rows = [ + {entity: {id: 1, name: 'John Doe'}, isExpanded: true}, + {entity: {id: 2, name: 'Joe Doe'}, isExpanded: false}, + {entity: {id: 3, name: 'Jane Doe'}, isExpanded: true}, + {entity: {id: 4, name: 'Peter Doe'}, isExpanded: false}, + {entity: {id: 5, name: 'Sarah Doe'}, isExpanded: false} + ]; + uiGridExpandableService.initializeGrid(grid); + }); + describe('toggleRowExpansion', function() { + beforeEach(function() { + grid.getRow.and.returnValue(null); + methods.toggleRowExpansion(grid.rows[2].entity); + }); + it('should call getRow on the grid with the row entity passed in', function() { + expect(grid.getRow).toHaveBeenCalledWith(grid.rows[2].entity); + }); + }); + describe('expandAllRows', function() { + beforeEach(function() { + grid.renderContainers.body.visibleRowCache = [ + {entity: {id: 1, name: 'John Doe'}, isExpanded: true}, + {entity: {id: 3, name: 'Jane Doe'}, isExpanded: true} + ]; + methods.expandAllRows(grid); + }); + it('should set expandedAll to true', function() { + expect(grid.expandable.expandedAll).toBe(true); + }); + it('should call queueGridRefresh', function() { + expect(grid.queueGridRefresh).toHaveBeenCalled(); + }); + }); + describe('collapseAllRows', function() { + beforeEach(function() { + grid.renderContainers.body.visibleRowCache = [ + {entity: {id: 4, name: 'Peter Doe'}, isExpanded: false}, + {entity: {id: 5, name: 'Sarah Doe'}, isExpanded: false} + ]; + methods.collapseAllRows(grid); + }); + it('should set expandedAll to false', function() { + expect(grid.expandable.expandedAll).toBe(false); + }); + it('should call queueGridRefresh', function() { + expect(grid.queueGridRefresh).toHaveBeenCalled(); + }); + }); + describe('toggleAllRows', function() { + beforeEach(function() { + methods.toggleAllRows(grid); + }); + it('should call queueGridRefresh', function() { + expect(grid.queueGridRefresh).toHaveBeenCalled(); + }); + }); + describe('expandRow', function() { + beforeEach(function() { + grid.getRow.and.returnValue(null); + methods.expandRow(grid.rows[1].entity); + }); + it('should call getRow on the grid with the row entity passed in', function() { + expect(grid.getRow).toHaveBeenCalledWith(grid.rows[1].entity); + }); + }); + describe('collapseRow', function() { + beforeEach(function() { + grid.getRow.and.returnValue(null); + methods.collapseRow(grid.rows[0].entity); + }); + it('should call getRow on the grid with the row entity passed in', function() { + expect(grid.getRow).toHaveBeenCalledWith(grid.rows[0].entity); + }); + }); + describe('getExpandedRows', function() { + it('should return the entity object for all expanded rows', function() { + expect(methods.getExpandedRows()).toEqual([ + {id: 1, name: 'John Doe'}, + {id: 3, name: 'Jane Doe'} + ]); + }); + }); + }); + describe('events', function() { + var events; + + beforeEach(function() { + grid.api.registerEventsFromObject.and.callFake(function(publicEvents) { + events = publicEvents.expandable; + }); + uiGridExpandableService.initializeGrid(grid); + }); + it('should register row expanded events as empty functions', function() { + expect(angular.isFunction(events.rowExpandedBeforeStateChanged)).toBe(true); + expect(events.rowExpandedBeforeStateChanged()).toBeUndefined(); + expect(angular.isFunction(events.rowExpandedStateChanged)).toBe(true); + expect(events.rowExpandedStateChanged()).toBeUndefined(); + }); + }); + }); + + describe('toggleRowExpansion', function() { + + }); + + describe('expandAllRows', function() { + + }); + + describe('collapseAllRows', function() { + + }); + + describe('toggleAllRows', function() { + + }); + + describe('getExpandedRows', function() { - it('subgrid should be addeed to the dom when we expand row', function () { - expect(element.find('.test').length).toBe(0); - scope.gridApi.expandable.toggleRowExpansion(scope.grid.rows[0].entity); - scope.$digest(); - timeout(function () { - expect(element.find('.test').length).toBe(1); }); }); }); diff --git a/src/less/cell.less b/src/less/cell.less index 0c84911243..b902e49176 100644 --- a/src/less/cell.less +++ b/src/less/cell.less @@ -41,3 +41,9 @@ border-bottom: solid @gridBorderWidth @borderColor; } +.ui-grid-cell-empty { + display: inline-block; + width: 10px; + height: 10px; +} + diff --git a/src/less/grid.less b/src/less/grid.less index b0b96332aa..c21887cd62 100644 --- a/src/less/grid.less +++ b/src/less/grid.less @@ -78,3 +78,9 @@ clip: rect(0,0,0,0); border: 0; } + +.ui-grid-icon-button { + background-color: transparent; + border: none; + padding: 0; +}