blob: d4194cf7e6ed4a6620706439c18947352e30e369 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/* global define, module, require, exports */
(function (root, factory) {
if (typeof define === 'function' && define.amd) {
define(['jquery'], function ($) {
return (nf.FilteredDialogCommon = factory($));
});
} else if (typeof exports === 'object' && typeof module === 'object') {
module.exports = (nf.FilteredDialogCommon = factory(require('jquery')));
} else {
nf.FilteredDialogCommon = factory(root.$);
}
}(this, function ($) {
'use strict';
var nfFilteredDialogCommon = {
/**
* Registers keydown event on dialog's filter input in order to navigate the grid's rows via keyboard arrow keys.
*
* @argument {string} filter Filter input box selector
* @argument {object} grid SlickGrid reference
* @argument {object} dataview Current grid dataset
*/
addKeydownListener: function (filter, grid, dataview) {
var navigationKeys = [$.ui.keyCode.UP, $.ui.keyCode.PAGE_UP, $.ui.keyCode.DOWN, $.ui.keyCode.PAGE_DOWN];
// setup the navigation
$(filter).off('keydown').on('keydown', function(e) {
var code = e.keyCode ? e.keyCode : e.which;
// nonmodified navigation keys only
if ($.inArray(code, navigationKeys) === -1 || e.shiftKey || e.altKey || e.ctrlKey) {
return;
}
var selected = grid.getSelectedRows();
if (selected.length > 0) {
if (code === $.ui.keyCode.PAGE_UP) {
grid.navigatePageUp();
return;
}
if (code === $.ui.keyCode.PAGE_DOWN) {
grid.navigatePageDown();
return;
}
// grid multi-select = false
var nextIndex = selected[0];
// get the following/previous row
if (code === $.ui.keyCode.UP) {
nextIndex = Math.max(nextIndex - 1, 0);
} else {
nextIndex = Math.min(nextIndex + 1, dataview.getLength() - 1);
}
nfFilteredDialogCommon.choseRow(grid, nextIndex);
// ensure the newly selected row is visible
grid.scrollRowIntoView(nextIndex, false);
}
});
},
/**
* Selects the first row and activates the first cell within given SlickGrid.
*
* @argument {object} grid SlickGrid reference
*/
choseFirstRow: function (grid) {
nfFilteredDialogCommon.choseRow(grid, 0);
},
/**
* Selects given row and activates the first cell in the row within given SlickGrid.
*
* @argument {object} grid SlickGrid reference
* @argument {int} index Row index
*/
choseRow: function (grid, index) {
grid.setSelectedRows([index]);
grid.setActiveCell(index, 0);
}
};
return nfFilteredDialogCommon;
}));