diff --git a/web/pgadmin/feature_tests/copy_selected_query_results_feature_test.py b/web/pgadmin/feature_tests/copy_selected_query_results_feature_test.py
index ac667001..fa784ee6 100644
--- a/web/pgadmin/feature_tests/copy_selected_query_results_feature_test.py
+++ b/web/pgadmin/feature_tests/copy_selected_query_results_feature_test.py
@@ -81,7 +81,7 @@ class CopySelectedQueryResultsFeatureTest(BaseFeatureTest):
def _copies_row_using_keyboard_shortcut(self):
pyperclip.copy("old clipboard contents")
- self.page.find_by_xpath("//*[contains(@class, 'slick-row')]/*[1]/input[@type='checkbox']").click()
+ self.page.find_by_xpath("//*[contains(@class, 'slick-row')]/*[1]").click()
ActionChains(self.page.driver).key_down(Keys.CONTROL).send_keys('c').key_up(Keys.CONTROL).perform()
diff --git a/web/pgadmin/static/img/select-all-icon.png b/web/pgadmin/static/img/select-all-icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..bdb8878975b8fde309cd6a586f5c826d6e81571e
GIT binary patch
literal 132
zcmeAS@N?(olHy`uVBq!ia0vp^AT}2V8<6ZZI=>f4F%}28J29*~C-V}>vGa6s43UuR
zJ>$v6puod&@W;!Tug@oPYUthk6=M>pm?o!N?4WeXd51unp3Ow=_!KAZ+6&I&Jr~*}
dgCZOogzNtqSzXk>V+J&d!PC{xWt~$(69BVECldew
literal 0
HcmV?d00001
diff --git a/web/pgadmin/static/js/selection/active_cell_capture.js b/web/pgadmin/static/js/selection/active_cell_capture.js
index 0abb7355..10572736 100644
--- a/web/pgadmin/static/js/selection/active_cell_capture.js
+++ b/web/pgadmin/static/js/selection/active_cell_capture.js
@@ -1,7 +1,7 @@
define([
'jquery',
'sources/selection/range_selection_helper'
-], function ($, rangeSelectionHelper) {
+], function ($, RangeSelectionHelper) {
var ActiveCellCapture = function () {
var KEY_RIGHT = 39;
@@ -10,6 +10,8 @@ define([
var KEY_DOWN = 40;
var bypassDefaultActiveCellRangeChange = false;
+ var isColumnsResized = false;
+ var isMouseInHeader = false;
var grid;
var init = function (slickGrid) {
@@ -19,6 +21,9 @@ define([
grid.onClick.subscribe(onClickHandler);
grid.onActiveCellChanged.subscribe(onActiveCellChangedHandler);
grid.onKeyDown.subscribe(onKeyDownHandler);
+ grid.onHeaderMouseEnter.subscribe(onHeaderMouseEnterHandler);
+ grid.onHeaderMouseLeave.subscribe(onHeaderMouseLeaveHandler);
+ grid.onColumnsResized.subscribe(onColumnsResizedHandler);
};
var destroy = function () {
@@ -26,6 +31,9 @@ define([
grid.onHeaderClick.unsubscribe(onHeaderClickHandler);
grid.onActiveCellChanged.unsubscribe(onActiveCellChangedHandler);
grid.onKeyDown.unsubscribe(onKeyDownHandler);
+ grid.onHeaderMouseEnter.unsubscribe(onHeaderMouseEnterHandler);
+ grid.onHeaderMouseLeave.unsubscribe(onHeaderMouseLeaveHandler);
+ grid.onColumnsResized.unsubscribe(onColumnsResizedHandler);
};
$.extend(this, {
@@ -39,6 +47,12 @@ define([
}
function onHeaderClickHandler(event, args) {
+ if (isColumnsResizedAndCurrentlyInHeader()) {
+ isColumnsResized = false;
+ event.stopPropagation();
+ return;
+ }
+
bypassDefaultActiveCellRangeChange = true;
var clickedColumn = args.column.pos + 1;
@@ -57,6 +71,19 @@ define([
return row >= grid.getDataLength();
}
+ function onHeaderMouseLeaveHandler() {
+ isMouseInHeader = false;
+ }
+
+ function onHeaderMouseEnterHandler() {
+ isMouseInHeader = true;
+ isColumnsResized = false;
+ }
+
+ function onColumnsResizedHandler() {
+ isColumnsResized = true;
+ }
+
function onClickHandler(event, args) {
if (isRowHeader(args.cell)) {
bypassDefaultActiveCellRangeChange = true;
@@ -91,15 +118,19 @@ define([
}
}
+ function isColumnsResizedAndCurrentlyInHeader() {
+ return isMouseInHeader && isColumnsResized;
+ }
+
function isClickingLastClickedHeader(clickedRow, clickedColumn) {
return hasActiveCell() && grid.getActiveCell().row === clickedRow && grid.getActiveCell().cell === clickedColumn;
}
function isClickingInSelectedColumn(clickedColumn) {
- var column = rangeSelectionHelper.rangeForColumn(grid, clickedColumn);
+ var column = RangeSelectionHelper.rangeForColumn(grid, clickedColumn);
var cellSelectionModel = grid.getSelectionModel();
var ranges = cellSelectionModel.getSelectedRanges();
- return rangeSelectionHelper.isRangeSelected(ranges, column);
+ return RangeSelectionHelper.isRangeSelected(ranges, column);
}
function isRowHeader(cellClicked) {
@@ -107,10 +138,10 @@ define([
}
function isClickingInSelectedRow(rowClicked) {
- var row = rangeSelectionHelper.rangeForRow(grid, rowClicked);
+ var row = RangeSelectionHelper.rangeForRow(grid, rowClicked);
var cellSelectionModel = grid.getSelectionModel();
var ranges = cellSelectionModel.getSelectedRanges();
- return rangeSelectionHelper.isRangeSelected(ranges, row);
+ return RangeSelectionHelper.isRangeSelected(ranges, row);
}
function isSingleRangeSelected() {
diff --git a/web/pgadmin/static/js/selection/column_selector.js b/web/pgadmin/static/js/selection/column_selector.js
index b03c8cf3..8806b68c 100644
--- a/web/pgadmin/static/js/selection/column_selector.js
+++ b/web/pgadmin/static/js/selection/column_selector.js
@@ -1,4 +1,8 @@
-define(['jquery', 'sources/selection/range_selection_helper', 'slickgrid'], function ($, rangeSelectionHelper) {
+define([
+ 'jquery',
+ 'sources/selection/range_selection_helper',
+ 'slickgrid'
+], function ($, RangeSelectionHelper) {
var ColumnSelector = function () {
var Slick = window.Slick;
var gridEventBus = new Slick.EventHandler();
@@ -16,11 +20,6 @@ define(['jquery', 'sources/selection/range_selection_helper', 'slickgrid'], func
}
$columnHeader.toggleClass('selected');
- if (!hasClickedOnCheckbox(event)) {
- var $checkbox = $("[data-id='checkbox-" + columnDefinition.id + "']");
- toggleCheckbox($checkbox);
- }
-
updateRanges(grid, columnDefinition.id);
}
});
@@ -29,14 +28,14 @@ define(['jquery', 'sources/selection/range_selection_helper', 'slickgrid'], func
};
var handleSelectedRangesChanged = function (grid, event, ranges) {
- $('[data-cell-type="column-header-row"] input:checked')
- .each(function (index, checkbox) {
- var $checkbox = $(checkbox);
- var columnIndex = grid.getColumnIndex($checkbox.data('column-id'));
- var isStillSelected = rangeSelectionHelper.isRangeSelected(ranges,
- rangeSelectionHelper.rangeForColumn(grid, columnIndex));
+ $('.slick-header-column.selected')
+ .each(function (index, columnHeader) {
+ var $spanHeaderColumn = $(columnHeader).find('[data-cell-type="column-header-row"]');
+ var columnIndex = grid.getColumnIndex($spanHeaderColumn.data('column-id'));
+ var isStillSelected = RangeSelectionHelper.isRangeSelected(ranges,
+ RangeSelectionHelper.rangeForColumn(grid, columnIndex));
if (!isStillSelected) {
- toggleCheckbox($checkbox);
+ $(columnHeader).toggleClass('selected')
}
});
};
@@ -47,13 +46,13 @@ define(['jquery', 'sources/selection/range_selection_helper', 'slickgrid'], func
var columnIndex = grid.getColumnIndex(columnId);
- var columnRange = rangeSelectionHelper.rangeForColumn(grid, columnIndex);
+ var columnRange = RangeSelectionHelper.rangeForColumn(grid, columnIndex);
var newRanges;
- if (rangeSelectionHelper.isRangeSelected(ranges, columnRange)) {
- newRanges = rangeSelectionHelper.removeRange(ranges, columnRange);
+ if (RangeSelectionHelper.isRangeSelected(ranges, columnRange)) {
+ newRanges = RangeSelectionHelper.removeRange(ranges, columnRange);
} else {
- if (rangeSelectionHelper.areAllRangesSingleColumns(ranges, grid)) {
- newRanges = rangeSelectionHelper.addRange(ranges, columnRange);
+ if (RangeSelectionHelper.areAllRangesSingleColumns(ranges, grid)) {
+ newRanges = RangeSelectionHelper.addRange(ranges, columnRange);
} else {
newRanges = [columnRange];
}
@@ -61,36 +60,21 @@ define(['jquery', 'sources/selection/range_selection_helper', 'slickgrid'], func
selectionModel.setSelectedRanges(newRanges);
};
- var hasClickedOnCheckbox = function (event) {
- return event.target.type == "checkbox"
- };
-
-
var hasClickedChildOfColumnHeader = function (event) {
return !$(event.target).hasClass("slick-header-column");
};
- var toggleCheckbox = function (checkbox) {
- if (checkbox.prop("checked")) {
- checkbox.prop("checked", false)
- } else {
- checkbox.prop("checked", true)
- }
- };
-
var isColumnSelectable = function (columnDefinition) {
return columnDefinition.selectable !== false;
};
- var getColumnDefinitionsWithCheckboxes = function (columnDefinitions) {
+ var getColumnDefinitions = function (columnDefinitions) {
return _.map(columnDefinitions, function (columnDefinition) {
if (isColumnSelectable(columnDefinition)) {
var name =
"" +
- " " +
+ " data-test='output-column-header'" +
+ " data-column-id='" + columnDefinition.id + "'>" +
" " + columnDefinition.name + "" +
"";
return _.extend(columnDefinition, {
@@ -104,7 +88,7 @@ define(['jquery', 'sources/selection/range_selection_helper', 'slickgrid'], func
$.extend(this, {
"init": init,
- "getColumnDefinitionsWithCheckboxes": getColumnDefinitionsWithCheckboxes
+ "getColumnDefinitions": getColumnDefinitions
});
};
return ColumnSelector;
diff --git a/web/pgadmin/static/js/selection/grid_selector.js b/web/pgadmin/static/js/selection/grid_selector.js
index 90eeacf8..ae4ab96d 100644
--- a/web/pgadmin/static/js/selection/grid_selector.js
+++ b/web/pgadmin/static/js/selection/grid_selector.js
@@ -23,18 +23,26 @@ define(['jquery',
grid.registerPlugin(columnSelector);
};
- var getColumnDefinitionsWithCheckboxes = function (columnDefinitions) {
- columnDefinitions = columnSelector.getColumnDefinitionsWithCheckboxes(columnDefinitions);
- columnDefinitions = rowSelector.getColumnDefinitionsWithCheckboxes(columnDefinitions);
+ var getColumnDefinitions = function (columnDefinitions) {
+ columnDefinitions = columnSelector.getColumnDefinitions(columnDefinitions);
+ columnDefinitions = rowSelector.getColumnDefinitions(columnDefinitions);
columnDefinitions[0].selectAllOnClick = true;
- columnDefinitions[0].name = '' + columnDefinitions[0].name;
+ columnDefinitions[0].name = '' +
+ '
' +
+ columnDefinitions[0].name +
+ '' +
+ '';
return columnDefinitions;
};
function handleSelectedRangesChanged(grid) {
- $("[data-id='checkbox-select-all']").prop("checked", RangeSelectionHelper.isEntireGridSelected(grid));
+ if(RangeSelectionHelper.isEntireGridSelected(grid)) {
+ $("[data-id='select-all']").addClass("selected");
+ } else {
+ $("[data-id='select-all']").removeClass("selected");
+ }
}
function toggleSelectAll(grid) {
@@ -52,7 +60,7 @@ define(['jquery',
$.extend(this, {
"init": init,
- "getColumnDefinitionsWithCheckboxes": getColumnDefinitionsWithCheckboxes
+ "getColumnDefinitions": getColumnDefinitions
});
};
diff --git a/web/pgadmin/static/js/selection/row_selector.js b/web/pgadmin/static/js/selection/row_selector.js
index 9e539353..1088f879 100644
--- a/web/pgadmin/static/js/selection/row_selector.js
+++ b/web/pgadmin/static/js/selection/row_selector.js
@@ -1,4 +1,4 @@
-define(['jquery', 'sources/selection/range_selection_helper', 'slickgrid'], function ($, rangeSelectionHelper) {
+define(['jquery', 'sources/selection/range_selection_helper', 'slickgrid'], function ($, RangeSelectionHelper) {
var RowSelector = function () {
var Slick = window.Slick;
@@ -13,23 +13,25 @@ define(['jquery', 'sources/selection/range_selection_helper', 'slickgrid'], func
var handleClick = function (grid, event, args) {
if (grid.getColumns()[args.cell].id === 'row-header-column') {
- if (event.target.type != "checkbox") {
- var checkbox = $(event.target).find('input[type="checkbox"]');
- toggleCheckbox($(checkbox));
+ var $rowHeaderSpan = $(event.target);
+
+ if($rowHeaderSpan.data('cell-type') != "row-header-selector") {
+ $rowHeaderSpan = $(event.target).find('[data-cell-type="row-header-selector"]');
}
+ $rowHeaderSpan.toggleClass('selected');
updateRanges(grid, args.row);
}
};
var handleSelectedRangesChanged = function (grid, event, ranges) {
- $('[data-cell-type="row-header-checkbox"]:checked')
- .each(function (index, checkbox) {
- var $checkbox = $(checkbox);
- var row = parseInt($checkbox.data('row'));
- var isStillSelected = rangeSelectionHelper.isRangeSelected(ranges,
- rangeSelectionHelper.rangeForRow(grid, row));
+ $('[data-cell-type="row-header-selector"].selected')
+ .each(function (index, rowHeaderSpan) {
+ var $rowHeaderSpan = $(rowHeaderSpan);
+ var row = parseInt($rowHeaderSpan.data('row'));
+ var isStillSelected = RangeSelectionHelper.isRangeSelected(ranges,
+ RangeSelectionHelper.rangeForRow(grid, row));
if (!isStillSelected) {
- toggleCheckbox($checkbox);
+ $rowHeaderSpan.toggleClass('selected');
}
});
};
@@ -38,47 +40,40 @@ define(['jquery', 'sources/selection/range_selection_helper', 'slickgrid'], func
var selectionModel = grid.getSelectionModel();
var ranges = selectionModel.getSelectedRanges();
- var rowRange = rangeSelectionHelper.rangeForRow(grid, rowId);
+ var rowRange = RangeSelectionHelper.rangeForRow(grid, rowId);
var newRanges;
- if (rangeSelectionHelper.isRangeSelected(ranges, rowRange)) {
- newRanges = rangeSelectionHelper.removeRange(ranges, rowRange);
+ if (RangeSelectionHelper.isRangeSelected(ranges, rowRange)) {
+ newRanges = RangeSelectionHelper.removeRange(ranges, rowRange);
} else {
- if (rangeSelectionHelper.areAllRangesSingleRows(ranges, grid)) {
- newRanges = rangeSelectionHelper.addRange(ranges, rowRange);
+ if (RangeSelectionHelper.areAllRangesSingleRows(ranges, grid)) {
+ newRanges = RangeSelectionHelper.addRange(ranges, rowRange);
} else {
newRanges = [rowRange];
}
}
selectionModel.setSelectedRanges(newRanges);
- }
-
- var toggleCheckbox = function (checkbox) {
- if (checkbox.prop("checked")) {
- checkbox.prop("checked", false)
- } else {
- checkbox.prop("checked", true)
- }
};
- var getColumnDefinitionsWithCheckboxes = function (columnDefinitions) {
+ var getColumnDefinitions = function (columnDefinitions) {
columnDefinitions.unshift({
id: 'row-header-column',
name: '',
selectable: false,
focusable: false,
formatter: function (rowIndex) {
- return ''
- }
+ 'data-cell-type="row-header-selector"/>'
+ },
+ width: 30
});
return columnDefinitions;
};
$.extend(this, {
"init": init,
- "getColumnDefinitionsWithCheckboxes": getColumnDefinitionsWithCheckboxes
+ "getColumnDefinitions": getColumnDefinitions
});
};
diff --git a/web/pgadmin/tools/sqleditor/static/css/sqleditor.css b/web/pgadmin/tools/sqleditor/static/css/sqleditor.css
index d2d9d079..8695b11e 100644
--- a/web/pgadmin/tools/sqleditor/static/css/sqleditor.css
+++ b/web/pgadmin/tools/sqleditor/static/css/sqleditor.css
@@ -469,6 +469,6 @@ input.editor-checkbox:focus {
}
.select-all-icon {
- margin-left: 12px;
+ margin-left: 9px;
vertical-align: bottom;
}
\ No newline at end of file
diff --git a/web/pgadmin/tools/sqleditor/templates/sqleditor/js/sqleditor.js b/web/pgadmin/tools/sqleditor/templates/sqleditor/js/sqleditor.js
index c064a9bb..310c6f5b 100644
--- a/web/pgadmin/tools/sqleditor/templates/sqleditor/js/sqleditor.js
+++ b/web/pgadmin/tools/sqleditor/templates/sqleditor/js/sqleditor.js
@@ -631,7 +631,7 @@ define(
});
var gridSelector = new GridSelector();
- grid_columns = gridSelector.getColumnDefinitionsWithCheckboxes(grid_columns);
+ grid_columns = gridSelector.getColumnDefinitions(grid_columns);
var grid_options = {
editable: true,
diff --git a/web/regression/javascript/selection/active_cell_capture_spec.js b/web/regression/javascript/selection/active_cell_capture_spec.js
index 46c24776..a0bd3848 100644
--- a/web/regression/javascript/selection/active_cell_capture_spec.js
+++ b/web/regression/javascript/selection/active_cell_capture_spec.js
@@ -13,7 +13,12 @@ define([
], function (ActiveCellCapture, RangeSelectionHelper) {
describe('ActiveCellCapture', function () {
var grid, activeCellPlugin, getSelectedRangesSpy, setSelectedRangesSpy;
- var onHeaderClickFunction, onClickFunction;
+ var onHeaderClickFunction;
+ var onClickFunction;
+ var onColumnsResizedFunction;
+ var onHeaderMouseEnterFunction;
+ var onHeaderMouseLeaveFunction;
+
beforeEach(function () {
getSelectedRangesSpy = jasmine.createSpy('getSelectedRangesSpy');
setSelectedRangesSpy = jasmine.createSpy('setSelectedRangesSpy');
@@ -38,6 +43,9 @@ define([
onHeaderClick: jasmine.createSpy('onHeaderClick'),
onClick: jasmine.createSpy('onClick'),
onKeyDown: jasmine.createSpyObj('onKeyDown', ['subscribe']),
+ onColumnsResized: jasmine.createSpyObj('onColumnsResized', ['subscribe']),
+ onHeaderMouseEnter: jasmine.createSpyObj('onHeaderMouseEnter', ['subscribe']),
+ onHeaderMouseLeave: jasmine.createSpyObj('onHeaderMouseLeave', ['subscribe']),
getDataLength: function () { return 10 },
@@ -47,13 +55,30 @@ define([
};
activeCellPlugin = new ActiveCellCapture();
- grid.onHeaderClick.subscribe = jasmine.createSpy('subscribe').and.callFake(function (callback) {
- onHeaderClickFunction = callback.bind(activeCellPlugin);
- });
+ grid.onHeaderClick.subscribe =
+ jasmine.createSpy('subscribe').and.callFake(function (callback) {
+ onHeaderClickFunction = callback.bind(activeCellPlugin);
+ });
- grid.onClick.subscribe = jasmine.createSpy('subscribe').and.callFake(function (callback) {
- onClickFunction = callback.bind(activeCellPlugin);
- });
+ grid.onClick.subscribe =
+ jasmine.createSpy('subscribe').and.callFake(function (callback) {
+ onClickFunction = callback.bind(activeCellPlugin);
+ });
+
+ grid.onColumnsResized.subscribe =
+ jasmine.createSpy('subscribe').and.callFake(function (callback) {
+ onColumnsResizedFunction = callback.bind(activeCellPlugin);
+ });
+
+ grid.onHeaderMouseEnter.subscribe =
+ jasmine.createSpy('subscribe').and.callFake(function (callback) {
+ onHeaderMouseEnterFunction = callback.bind(activeCellPlugin);
+ });
+
+ grid.onHeaderMouseLeave.subscribe =
+ jasmine.createSpy('subscribe').and.callFake(function (callback) {
+ onHeaderMouseLeaveFunction = callback.bind(activeCellPlugin);
+ });
activeCellPlugin.init(grid);
});
@@ -93,13 +118,91 @@ define([
describe('when the same column is clicked', function () {
beforeEach(function () {
- onHeaderClickFunction({}, {column: {pos: 1}})
+ onHeaderClickFunction({}, {column: {pos: 1}});
});
it('should reset the active cell', function () {
expect(grid.resetActiveCell).toHaveBeenCalled();
});
});
+
+ describe('when mouse is inside the header row', function () {
+ beforeEach(function () {
+ onHeaderMouseEnterFunction({}, {});
+ });
+
+ describe('when user finishes resizing the selected column', function () {
+ var eventSpy;
+
+ beforeEach(function () {
+ eventSpy = jasmine.createSpyObj('event', ['stopPropagation']);
+ onColumnsResizedFunction({}, {grid: grid});
+ onHeaderClickFunction(eventSpy, {column: {pos: 1}});
+ });
+
+ it('should not deselect the current selected column', function () {
+ expect(grid.setActiveCell).not.toHaveBeenCalled();
+ expect(grid.resetActiveCell).not.toHaveBeenCalled();
+ });
+
+ it('should prevent further event propagation', function () {
+ expect(eventSpy.stopPropagation).toHaveBeenCalled();
+ });
+
+ describe('when the user clicks the resized column header', function () {
+ beforeEach(function () {
+ eventSpy.stopPropagation.calls.reset();
+ onHeaderClickFunction(eventSpy, {column: {pos: 2}});
+ });
+
+ it('should change the active cell', function () {
+ expect(grid.setActiveCell).toHaveBeenCalledWith(0, 3);
+ expect(grid.resetActiveCell).not.toHaveBeenCalled();
+ });
+
+ it('should allow further event propagation', function () {
+ expect(eventSpy.stopPropagation).not.toHaveBeenCalled();
+ });
+ });
+ });
+ });
+
+ describe('when mouse is outside the header row', function () {
+ beforeEach(function () {
+ onHeaderMouseEnterFunction({}, {});
+ onHeaderMouseLeaveFunction({}, {});
+ });
+
+ describe('when user finishes resizing the selected column', function () {
+ beforeEach(function () {
+ onColumnsResizedFunction({}, {grid: grid});
+ });
+
+ it('should not deselect the current selected column', function () {
+ expect(grid.setActiveCell).not.toHaveBeenCalled();
+ expect(grid.resetActiveCell).not.toHaveBeenCalled();
+ });
+
+ describe('when the user clicks another column header', function () {
+ var eventSpy;
+
+ beforeEach(function () {
+ eventSpy = jasmine.createSpyObj('event', ['stopPropagation']);
+ onHeaderMouseEnterFunction({}, {});
+ onHeaderClickFunction(eventSpy, {column: {pos: 3}});
+ });
+
+ it('should change the active cell', function () {
+ expect(grid.setActiveCell).toHaveBeenCalledWith(0, 4);
+ expect(grid.resetActiveCell).not.toHaveBeenCalled();
+ });
+
+ it('should allow further event propagation', function () {
+ expect(eventSpy.stopPropagation).not.toHaveBeenCalled();
+ });
+ });
+ });
+ });
});
describe('when three non-consecutive columns are selected', function () {
diff --git a/web/regression/javascript/selection/column_selector_spec.js b/web/regression/javascript/selection/column_selector_spec.js
index 2b0c645f..7e6f2a5f 100644
--- a/web/regression/javascript/selection/column_selector_spec.js
+++ b/web/regression/javascript/selection/column_selector_spec.js
@@ -62,26 +62,6 @@ define(
];
});
- describe("when a column is not selectable", function () {
- it("does not create a checkbox for selecting the column", function () {
- var checkboxColumn = {
- name: 'some-column-name-4',
- selectable: false
- };
- columns.push(checkboxColumn);
-
- setupGrid(columns);
-
- expect(container.find('.slick-header-columns input').length).toBe(3)
- });
- });
-
- it("renders a checkbox in the column header", function () {
- setupGrid(columns);
-
- expect(container.find('.slick-header-columns input').length).toBe(3)
- });
-
it("displays the name of the column", function () {
setupGrid(columns);
@@ -93,7 +73,7 @@ define(
it("preserves the other attributes of column definitions", function () {
var columnSelector = new ColumnSelector();
- var selectableColumns = columnSelector.getColumnDefinitionsWithCheckboxes(columns);
+ var selectableColumns = columnSelector.getColumnDefinitions(columns);
expect(selectableColumns[1].id).toBe('1');
});
@@ -102,7 +82,7 @@ define(
var grid, cellSelectionModel;
beforeEach(function () {
var columnSelector = new ColumnSelector();
- columns = columnSelector.getColumnDefinitionsWithCheckboxes(columns);
+ columns = columnSelector.getColumnDefinitions(columns);
data = [];
for (var i = 0; i < 10; i++) {
data.push({
@@ -134,7 +114,7 @@ define(
expectOnlyTheFirstColumnToBeSelected(selectedRanges);
});
- xit("toggles a selected class to the header cell", function () {
+ it("toggles a selected class to the header cell", function () {
container.find('.slick-header-column:contains(second column)').click();
expect($(container.find('.slick-header-column:contains(second column)')).hasClass('selected'))
.toBe(true);
@@ -217,7 +197,7 @@ define(
expectOnlyTheFirstColumnToBeSelected(selectedRanges);
});
- xit("toggles a selected class to the header cell", function () {
+ it("toggles a selected class to the header cell", function () {
container.find('.slick-header-column span.column-description:contains(second column)').click();
expect($(container.find('.slick-header-column:contains(second column)')).hasClass('selected'))
.toBe(true);
@@ -225,8 +205,8 @@ define(
container.find('.slick-header-column span.column-description:contains(second column)').click();
expect($(container.find('.slick-header-column:contains(second column)')).hasClass('selected'))
.toBe(false);
-
});
+ });
describe("when a row is selected", function () {
beforeEach(function () {
@@ -234,81 +214,74 @@ define(
cellSelectionModel.setSelectedRanges(selectedRanges);
});
- it("deselects the row", function () {
- container.find('.slick-header-column')[1].click();
- var selectedRanges = cellSelectionModel.getSelectedRanges();
+ it("deselects the row", function () {
+ container.find('.slick-header-column')[1].click();
+ var selectedRanges = cellSelectionModel.getSelectedRanges();
+
+ expect(selectedRanges.length).toBe(1);
- expect(selectedRanges.length).toBe(1);
+ var column = selectedRanges[0];
- var column = selectedRanges[0];
+ expect(column.fromCell).toBe(1);
+ expect(column.toCell).toBe(1);
+ expect(column.fromRow).toBe(0);
+ expect(column.toRow).toBe(9);
+ })
+ });
- expect(column.fromCell).toBe(1);
- expect(column.toCell).toBe(1);
- expect(column.fromRow).toBe(0);
- expect(column.toRow).toBe(9);
- })
+ describe("clicking a second time", function () {
+ beforeEach(function () {
+ container.find('.slick-header-column')[1].click();
});
- describe("clicking a second time", function () {
- beforeEach(function () {
- container.find('.slick-header-column')[1].click();
- });
+ it("deselects the column", function () {
+ container.find('.slick-header-column')[1].click();
+ var selectedRanges = cellSelectionModel.getSelectedRanges();
- it("unchecks checkbox", function () {
- container.find('.slick-header-column')[1].click();
- expect($(container.find('.slick-header-columns input')[1]).is(':checked')).toBeFalsy();
- });
+ expect(selectedRanges.length).toEqual(0);
+ })
+ });
- it("deselects the column", function () {
- container.find('.slick-header-column')[1].click();
- var selectedRanges = cellSelectionModel.getSelectedRanges();
+ describe("when the column is not selectable", function () {
+ it("does not select the column", function () {
+ $(container.find('.slick-header-column:contains(some-non-selectable-column)')).click();
+ var selectedRanges = cellSelectionModel.getSelectedRanges();
- expect(selectedRanges.length).toEqual(0);
- })
+ expect(selectedRanges.length).toEqual(0);
});
+ });
- describe("when the column is not selectable", function () {
- it("does not select the column", function () {
- $(container.find('.slick-header-column:contains(some-non-selectable-column)')).click();
- var selectedRanges = cellSelectionModel.getSelectedRanges();
-
- expect(selectedRanges.length).toEqual(0);
- });
+ describe("when the column is deselected through setSelectedRanges", function () {
+ beforeEach(function () {
+ container.find('.slick-header-column')[1].click();
});
- describe("when the column is deselected through setSelectedRanges", function () {
- beforeEach(function () {
- container.find('.slick-header-column')[1].click();
- });
-
- xit("removes selected class from header", function () {
- cellSelectionModel.setSelectedRanges([]);
+ it("removes selected class from header", function () {
+ cellSelectionModel.setSelectedRanges([]);
- expect($(container.find('.slick-header-column')[1]).hasClass('selected'))
- .toBe(false);
-
- });
+ expect($(container.find('.slick-header-column')[1]).hasClass('selected'))
+ .toBe(false);
});
+ });
- describe("when a non-column range was already selected", function () {
- beforeEach(function () {
- var selectedRanges = [new Slick.Range(0, 0, 1, 0)];
- cellSelectionModel.setSelectedRanges(selectedRanges);
- });
+ describe("when a non-column range was already selected", function () {
+ beforeEach(function () {
+ var selectedRanges = [new Slick.Range(0, 0, 1, 0)];
+ cellSelectionModel.setSelectedRanges(selectedRanges);
+ });
- it("deselects the non-column range", function () {
- container.find('.slick-header-column:contains(some-column-name)').click();
+ it("deselects the non-column range", function () {
+ container.find('.slick-header-column:contains(some-column-name)').click();
- var selectedRanges = cellSelectionModel.getSelectedRanges();
- expectOnlyTheFirstColumnToBeSelected(selectedRanges);
- })
- });
+ var selectedRanges = cellSelectionModel.getSelectedRanges();
+ expectOnlyTheFirstColumnToBeSelected(selectedRanges);
+ })
});
-
});
+
function setupGrid(columns) {
var columnSelector = new ColumnSelector();
- columns = columnSelector.getColumnDefinitionsWithCheckboxes(columns);
+ columns = columnSelector.getColumnDefinitions(columns);
var grid = new SlickGrid(container, data, columns, options);
var cellSelectionModel = new Slick.CellSelectionModel();
@@ -337,6 +310,5 @@ define(
$(container.find('.grid-canvas')).trigger(pressEvent);
}
-
});
- });
+ });
\ No newline at end of file
diff --git a/web/regression/javascript/selection/grid_selector_spec.js b/web/regression/javascript/selection/grid_selector_spec.js
index 05d1208d..5ea63692 100644
--- a/web/regression/javascript/selection/grid_selector_spec.js
+++ b/web/regression/javascript/selection/grid_selector_spec.js
@@ -22,7 +22,7 @@ define(["jquery",
}];
gridSelector = new GridSelector();
- columns = gridSelector.getColumnDefinitionsWithCheckboxes(columns);
+ columns = gridSelector.getColumnDefinitions(columns);
data = [];
for (var i = 0; i < 10; i++) {
@@ -50,11 +50,7 @@ define(["jquery",
expect(leftmostColumn.id).toBe('row-header-column');
});
- it("renders checkboxes for selecting columns", function () {
- expect(container.find('[data-test="output-column-header"] input').length).toBe(2)
- });
-
- it("renders a checkbox for selecting all the cells", function () {
+ it("renders a button for selecting all the cells", function () {
expect(container.find("[title='Select/Deselect All']").length).toBe(1);
});
@@ -71,20 +67,14 @@ define(["jquery",
expect(selectedRange.toRow).toBe(9);
});
- it("checks the checkbox", function () {
+ it("adds selected class", function () {
container.find("[title='Select/Deselect All']").parent().click();
- expect($(container.find("[data-id='checkbox-select-all']")).is(':checked')).toBeTruthy();
- })
+ expect($(container.find("[data-id='select-all']")).hasClass('selected')).toBeTruthy();
+ });
});
- describe("when the main checkbox in the corner gets selected", function () {
- it("unchecks all the columns", function () {
- container.find("[title='Select/Deselect All']").click();
-
- expect($(container.find('.slick-header-columns input')[1]).is(':checked')).toBeFalsy();
- expect($(container.find('.slick-header-columns input')[2]).is(':checked')).toBeFalsy();
- });
+ describe("when the select all button in the corner gets selected", function () {
it("selects all the cells", function () {
container.find("[title='Select/Deselect All']").click();
@@ -98,7 +88,7 @@ define(["jquery",
expect(selectedRange.toRow).toBe(9);
});
- describe("when the main checkbox in the corner gets deselected", function () {
+ describe("when the select all button in the corner gets deselected", function () {
beforeEach(function () {
container.find("[title='Select/Deselect All']").click();
});
@@ -116,11 +106,10 @@ define(["jquery",
container.find("[title='Select/Deselect All']").click();
});
- it("unchecks the main checkbox", function () {
- var ranges = [new Slick.Range(0, 0, 0, 1)];
- rowSelectionModel.setSelectedRanges(ranges);
+ it("removes the selected class", function () {
+ container.find("[title='Select/Deselect All']").parent().click();
- expect($(container.find("[title='Select/Deselect All']")).is(':checked')).toBeFalsy();
+ expect($(container.find("[data-id='select-all']")).hasClass('selected')).toBeFalsy();
});
});
});
diff --git a/web/regression/javascript/selection/row_selector_spec.js b/web/regression/javascript/selection/row_selector_spec.js
index 5907c449..78348bca 100644
--- a/web/regression/javascript/selection/row_selector_spec.js
+++ b/web/regression/javascript/selection/row_selector_spec.js
@@ -36,7 +36,7 @@ define(
for (var i = 0; i < 10; i++) {
data.push(['some-value-' + i, 'second value ' + i]);
}
- columnDefinitions = rowSelector.getColumnDefinitionsWithCheckboxes(columnDefinitions);
+ columnDefinitions = rowSelector.getColumnDefinitions(columnDefinitions);
grid = new SlickGrid(container, data, columnDefinitions);
grid.registerPlugin(new ActiveCellCapture());
@@ -64,7 +64,7 @@ define(
it("renders a span on the leftmost column", function () {
expect(container.find('.slick-row').length).toBe(10);
- expect(container.find('.slick-row .slick-cell:first-child input[type="checkbox"]').length).toBe(10);
+ expect(container.find('.slick-row .slick-cell:first-child span[data-cell-type="row-header-selector"]').length).toBe(10);
});
it("preserves the other attributes of column definitions", function () {
@@ -75,17 +75,17 @@ define(
describe("selecting rows", function () {
describe("when the user clicks a row header span", function () {
it("selects the row", function () {
- container.find('.slick-row .slick-cell:first-child input[type="checkbox"]')[0].click();
+ container.find('.slick-row .slick-cell:first-child span[data-cell-type="row-header-selector"]')[0].click();
var selectedRanges = cellSelectionModel.getSelectedRanges();
expectOnlyTheFirstRowToBeSelected(selectedRanges);
});
- it("checks the checkbox", function () {
- container.find('.slick-row .slick-cell:first-child input[type="checkbox"]')[5].click();
+ it("add selected class to span", function () {
+ container.find('.slick-row .slick-cell:first-child span[data-cell-type="row-header-selector"]')[5].click();
- expect($(container.find('.slick-row .slick-cell:first-child input[type="checkbox"]')[5])
- .is(':checked')).toBeTruthy();
+ expect($(container.find('.slick-row .slick-cell:first-child span[data-cell-type="row-header-selector"]')[5])
+ .hasClass('selected')).toBeTruthy();
});
});
@@ -97,11 +97,11 @@ define(
expectOnlyTheFirstRowToBeSelected(selectedRanges);
});
- it("checks the checkbox", function () {
+ it("add selected class to span", function () {
container.find('.slick-row .slick-cell:first-child')[7].click();
- expect($(container.find('.slick-row .slick-cell:first-child input[type="checkbox"]')[7])
- .is(':checked')).toBeTruthy();
+ expect($(container.find('.slick-row .slick-cell:first-child span[data-cell-type="row-header-selector"]')[7])
+ .hasClass('selected')).toBeTruthy();
});
});
@@ -142,11 +142,11 @@ define(
container.find('.slick-row .slick-cell:first-child')[4].click();
});
- it("should uncheck the checkbox", function () {
+ it("should remove the selected class", function () {
cellSelectionModel.setSelectedRanges([]);
- expect($(container.find('.slick-row .slick-cell:first-child input[type="checkbox"]')[4])
- .is(':checked')).toBeFalsy();
+ expect($(container.find('.slick-row .slick-cell:first-child span[data-cell-type="row-header-selector"]')[4])
+ .hasClass('selected')).toBeFalsy();
});
});
@@ -155,10 +155,10 @@ define(
container.find('.slick-row .slick-cell:first-child')[1].click();
});
- it("unchecks checkbox", function () {
+ it("removes the selected class", function () {
container.find('.slick-row .slick-cell:first-child')[1].click();
- expect($(container.find('.slick-row .slick-cell:first-child input[type="checkbox"]')[1])
- .is(':checked')).toBeFalsy();
+ expect($(container.find('.slick-row .slick-cell:first-child span[data-cell-type="row-header-selector"]')[1])
+ .hasClass('selected')).toBeFalsy();
});
it("unselects the row", function () {
diff --git a/web/regression/javascript/slickgrid/cell_selector_spec.js b/web/regression/javascript/slickgrid/cell_selector_spec.js
index f1178541..841ea72b 100644
--- a/web/regression/javascript/slickgrid/cell_selector_spec.js
+++ b/web/regression/javascript/slickgrid/cell_selector_spec.js
@@ -9,13 +9,13 @@
define(["jquery",
"slickgrid/slick.grid",
- "slickgrid/slick.rowselectionmodel",
+ "slickgrid/slick.cellselectionmodel",
"sources/slickgrid/cell_selector",
"sources/selection/range_selection_helper"
],
- function ($, SlickGrid, RowSelectionModel, CellSelector, RangeSelectionHelper) {
+ function ($, SlickGrid, CellSelectionModel, CellSelector, RangeSelectionHelper) {
describe("CellSelector", function () {
- var container, columns, cellSelector, data, rowSelectionModel, grid;
+ var container, columns, cellSelector, data, cellSelectionModel, grid;
beforeEach(function () {
container = $("