Text-Table-HTML-DataTables
view release on metacpan or search on metacpan
share/datatables-1.10.22/datatables.js view on Meta::CPAN
}
that._editor( null, e, true );
} );
// While Editor is busy processing, we don't want to process any key events
editor
.on('preSubmit', function () {
editorBlock = true;
} )
.on('preSubmitCancelled', function () {
editorBlock = false;
} )
.on('submitComplete', function () {
editorBlock = false;
} );
}
// Stave saving
if ( dt.settings()[0].oFeatures.bStateSave ) {
dt.on( 'stateSaveParams'+namespace, function (e, s, d) {
d.keyTable = that.s.lastFocus ?
that.s.lastFocus.cell.index() :
null;
} );
}
dt.on( 'column-visibility'+namespace, function (e) {
that._tabInput();
} );
// Redraw - retain focus on the current cell
dt.on( 'draw'+namespace, function (e) {
that._tabInput();
if ( that.s.focusDraw ) {
return;
}
var lastFocus = that.s.lastFocus;
if ( lastFocus ) {
var relative = that.s.lastFocus.relative;
var info = dt.page.info();
var row = relative.row + info.start;
if ( info.recordsDisplay === 0 ) {
return;
}
// Reverse if needed
if ( row >= info.recordsDisplay ) {
row = info.recordsDisplay - 1;
}
that._focus( row, relative.column, true, e );
}
} );
// Clipboard support
if ( this.c.clipboard ) {
this._clipboard();
}
dt.on( 'destroy'+namespace, function () {
that._blur( true );
// Event tidy up
dt.off( namespace );
$( dt.table().body() )
.off( 'click'+namespace, 'th, td' )
.off( 'dblclick'+namespace, 'th, td' );
$( document )
.off( 'mousedown'+namespace )
.off( 'keydown'+namespace )
.off( 'copy'+namespace )
.off( 'paste'+namespace );
} );
// Initial focus comes from state or options
var state = dt.state.loaded();
if ( state && state.keyTable ) {
// Wait until init is done
dt.one( 'init', function () {
var cell = dt.cell( state.keyTable );
// Ensure that the saved cell still exists
if ( cell.any() ) {
cell.focus();
}
} );
}
else if ( this.c.focus ) {
dt.cell( this.c.focus ).focus();
}
},
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Private methods
*/
/**
* Blur the control
*
* @param {boolean} [noEvents=false] Don't trigger updates / events (for destroying)
* @private
*/
_blur: function (noEvents)
{
if ( ! this.s.enable || ! this.s.lastFocus ) {
return;
}
var cell = this.s.lastFocus.cell;
$( cell.node() ).removeClass( this.c.className );
this.s.lastFocus = null;
if ( ! noEvents ) {
this._updateFixedColumns(cell.index().column);
this._emitEvent( 'key-blur', [ this.s.dt, cell ] );
}
},
/**
* Clipboard interaction handlers
*
* @private
*/
_clipboard: function () {
var dt = this.s.dt;
var that = this;
var namespace = this.s.namespace;
// IE8 doesn't support getting selected text
if ( ! window.getSelection ) {
return;
}
$(document).on( 'copy'+namespace, function (ejq) {
var e = ejq.originalEvent;
var selection = window.getSelection().toString();
var focused = that.s.lastFocus;
// Only copy cell text to clipboard if there is no other selection
// and there is a focused cell
if ( ! selection && focused ) {
e.clipboardData.setData(
'text/plain',
focused.cell.render( that.c.clipboardOrthogonal )
);
e.preventDefault();
}
} );
$(document).on( 'paste'+namespace, function (ejq) {
var e = ejq.originalEvent;
var focused = that.s.lastFocus;
var activeEl = document.activeElement;
var editor = that.c.editor;
var pastedText;
if ( focused && (! activeEl || activeEl.nodeName.toLowerCase() === 'body') ) {
e.preventDefault();
if ( window.clipboardData && window.clipboardData.getData ) {
// IE
pastedText = window.clipboardData.getData('Text');
}
else if ( e.clipboardData && e.clipboardData.getData ) {
// Everything else
pastedText = e.clipboardData.getData('text/plain');
}
if ( editor ) {
// Got Editor - need to activate inline editing,
// set the value and submit
editor
.inline( focused.cell.index() )
.set( editor.displayed()[0], pastedText )
.submit();
}
else {
// No editor, so just dump the data in
focused.cell.data( pastedText );
dt.draw(false);
}
}
} );
},
/**
* Get an array of the column indexes that KeyTable can operate on. This
* is a merge of the user supplied columns and the visible columns.
*
* @private
*/
_columns: function ()
{
var dt = this.s.dt;
var user = dt.columns( this.c.columns ).indexes();
var out = [];
dt.columns( ':visible' ).every( function (i) {
if ( user.indexOf( i ) !== -1 ) {
out.push( i );
}
} );
return out;
},
/**
* Perform excel like navigation for Editor by triggering an edit on key
* press
*
* @param {integer} key Key code for the pressed key
* @param {object} orig Original event
* @private
*/
_editor: function ( key, orig, hardEdit )
{
// If nothing focused, we can't take any action
if (! this.s.lastFocus) {
return;
}
var that = this;
var dt = this.s.dt;
var editor = this.c.editor;
share/datatables-1.10.22/datatables.js view on Meta::CPAN
if ( cell.any() ) {
that._focus( cell, null, true, e );
}
} );
this.s.tabInput = div;
}
// Insert the input element into the first cell in the table's body
var cell = this.s.dt.cell(':eq(0)', '0:visible', {page: 'current', order: 'current'}).node();
if (cell) {
$(cell).prepend(this.s.tabInput);
}
},
/**
* Update fixed columns if they are enabled and if the cell we are
* focusing is inside a fixed column
* @param {integer} column Index of the column being changed
* @private
*/
_updateFixedColumns: function( column )
{
var dt = this.s.dt;
var settings = dt.settings()[0];
if ( settings._oFixedColumns ) {
var leftCols = settings._oFixedColumns.s.iLeftColumns;
var rightCols = settings.aoColumns.length - settings._oFixedColumns.s.iRightColumns;
if (column < leftCols || column >= rightCols) {
dt.fixedColumns().update();
}
}
}
} );
/**
* KeyTable default settings for initialisation
*
* @namespace
* @name KeyTable.defaults
* @static
*/
KeyTable.defaults = {
/**
* Can focus be removed from the table
* @type {Boolean}
*/
blurable: true,
/**
* Class to give to the focused cell
* @type {String}
*/
className: 'focus',
/**
* Enable or disable clipboard support
* @type {Boolean}
*/
clipboard: true,
/**
* Orthogonal data that should be copied to clipboard
* @type {string}
*/
clipboardOrthogonal: 'display',
/**
* Columns that can be focused. This is automatically merged with the
* visible columns as only visible columns can gain focus.
* @type {String}
*/
columns: '', // all
/**
* Editor instance to automatically perform Excel like navigation
* @type {Editor}
*/
editor: null,
/**
* Trigger editing immediately on focus
* @type {boolean}
*/
editOnFocus: false,
/**
* Select a cell to automatically select on start up. `null` for no
* automatic selection
* @type {cell-selector}
*/
focus: null,
/**
* Array of keys to listen for
* @type {null|array}
*/
keys: null,
/**
* Tab index for where the table should sit in the document's tab flow
* @type {integer|null}
*/
tabIndex: null
};
KeyTable.version = "2.5.3";
$.fn.dataTable.KeyTable = KeyTable;
$.fn.DataTable.KeyTable = KeyTable;
DataTable.Api.register( 'cell.blur()', function () {
return this.iterator( 'table', function (ctx) {
if ( ctx.keytable ) {
ctx.keytable.blur();
}
} );
} );
DataTable.Api.register( 'cell().focus()', function () {
return this.iterator( 'cell', function (ctx, row, column) {
if ( ctx.keytable ) {
( run in 2.953 seconds using v1.01-cache-2.11-cpan-84e82930d8c )