86 lines
2.2 KiB
JavaScript
86 lines
2.2 KiB
JavaScript
(function ($) {
|
|
// register namespace
|
|
$.extend(true, window, {
|
|
"Slick": {
|
|
"CellCopyManager": CellCopyManager
|
|
}
|
|
});
|
|
|
|
|
|
function CellCopyManager() {
|
|
var _grid;
|
|
var _self = this;
|
|
var _copiedRanges;
|
|
|
|
function init(grid) {
|
|
_grid = grid;
|
|
_grid.onKeyDown.subscribe(handleKeyDown);
|
|
}
|
|
|
|
function destroy() {
|
|
_grid.onKeyDown.unsubscribe(handleKeyDown);
|
|
}
|
|
|
|
function handleKeyDown(e, args) {
|
|
var ranges;
|
|
if (!_grid.getEditorLock().isActive()) {
|
|
if (e.which == $.ui.keyCode.ESCAPE) {
|
|
if (_copiedRanges) {
|
|
e.preventDefault();
|
|
clearCopySelection();
|
|
_self.onCopyCancelled.notify({ranges: _copiedRanges});
|
|
_copiedRanges = null;
|
|
}
|
|
}
|
|
|
|
if (e.which == 67 && (e.ctrlKey || e.metaKey)) {
|
|
ranges = _grid.getSelectionModel().getSelectedRanges();
|
|
if (ranges.length != 0) {
|
|
e.preventDefault();
|
|
_copiedRanges = ranges;
|
|
markCopySelection(ranges);
|
|
_self.onCopyCells.notify({ranges: ranges});
|
|
}
|
|
}
|
|
|
|
if (e.which == 86 && (e.ctrlKey || e.metaKey)) {
|
|
if (_copiedRanges) {
|
|
e.preventDefault();
|
|
clearCopySelection();
|
|
ranges = _grid.getSelectionModel().getSelectedRanges();
|
|
_self.onPasteCells.notify({from: _copiedRanges, to: ranges});
|
|
_copiedRanges = null;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
function markCopySelection(ranges) {
|
|
var columns = _grid.getColumns();
|
|
var hash = {};
|
|
for (var i = 0; i < ranges.length; i++) {
|
|
for (var j = ranges[i].fromRow; j <= ranges[i].toRow; j++) {
|
|
hash[j] = {};
|
|
for (var k = ranges[i].fromCell; k <= ranges[i].toCell; k++) {
|
|
hash[j][columns[k].id] = "copied";
|
|
}
|
|
}
|
|
}
|
|
_grid.setCellCssStyles("copy-manager", hash);
|
|
}
|
|
|
|
function clearCopySelection() {
|
|
_grid.removeCellCssStyles("copy-manager");
|
|
}
|
|
|
|
$.extend(this, {
|
|
"init": init,
|
|
"destroy": destroy,
|
|
"clearCopySelection": clearCopySelection,
|
|
|
|
"onCopyCells": new Slick.Event(),
|
|
"onCopyCancelled": new Slick.Event(),
|
|
"onPasteCells": new Slick.Event()
|
|
});
|
|
}
|
|
})(jQuery); |