', {
'class': item_struct.cssClass + " cell",
}).appendTo(row)
);
}.bind( this ));
this._disableRow( row );
this.lastRowIdx = idx;
return row;
},
// _clickOnRow: function( event ) {
// this._selectRow($( event.currentTarget ));
// },
_selectRow: function( row , evt) {
if( this.rowSelected ){
this.rowSelected.removeClass( this.options.rowSelectedClass );
this._disableRow( this.rowSelected );
}
this.rowSelected = row;
this.rowSelectedIdx = parseInt(row[0].getAttribute( 'rowId' ));
this.rowSelected.addClass( this.options.rowSelectedClass );
this._enableRow( this.rowSelected );
if (evt) {
document.elementFromPoint(evt.pageX,evt.pageY).click();
}
if( this.options.onSelectRow )
this.options.onSelectRow.call( this, this.rowSelectedIdx );
},
_enableRow: function( row ) {
if( row.find( 'input' ).length ){
row.find( 'input' ).removeAttr( 'disabled' );
row.find( '.disabledClickFix' ).remove();
}
},
_disableRow: function( row ) {
if( row.find( 'input:not([type=checkbox])' ).length )
row.find( 'input:not([type=checkbox])' ).attr( 'disabled', 'disabled' );
/* fix bug in FireFox: disabled input prevent event firing */
if( !row.find( 'div.disabledClickFix').length ){
var divFix = $( '', {
'class': 'disabledClickFix'
}) //.on('click', this._selectRow.bind( this, row ) )
.appendTo(row);
// can not use bind with $el like parameter because bind use apply and transform [el] to el
divFix[0].addEventListener( 'click', function(_this, row) {
return function(evt) {
_this._selectRow(row, evt);
}
}(this,row), true)
}
},
_valueChange: function (event) {
/* if row added and focus fired the selected idx can be wrong */
var value = event.target.value
if( event.target.type == "checkbox" )
value = event.target.checked ;
if( event.target ){
var parentRow = $(event.target).parents('.row[rowid]');
if( parentRow.length ){
var rowId = parseInt(parentRow.attr('rowId'))
// console.log([rowId, this.getSelectedRowIdx()])
if( typeof(rowId) == 'number' && rowId == this.getSelectedRowIdx()){
this.element.trigger( 'rowValueChange', [ this.getSelectedRowIdx(), $(event.target).attr('alias'), value ])
}
}
}
},
/* Public methods */
addNewRow: function( row ) {
// console.log([row])
if( !row || row.length != this.options.struct.length ){
row = [];
[].forEach.call( this.options.struct, function(it, idx) {
row[idx] = "";
})
}
var addedRow= this._addRow( row );
this._selectRow( addedRow );
// addedRow.click();
if( this.rowSelected.find( 'input' ).length ){
this.rowSelected.find( 'input' )[0].focus();
}
addedRow[0].scrollIntoView( true ); // if true, the scrolled element is aligned with the top of the scroll area
},
removeSelectedRow: function( /*row*/ ) {
if( this.rowSelected ){
this.rowSelected.remove();
/* after remove select next row */
if( this.selectRow(this.rowSelectedIdx+1) ){}
else if( this.selectRow(this.rowSelectedIdx-1) ){}
else {this.rowSelectedIdx = -1;}
}
},
selectRow: function (rowidx) {
var row = this.element.find('.' + this.options.trClass + '.row[rowid='+rowidx+']' );
if( row.length ) {
this._selectRow( row );
return true;
} else {
return false;
}
// row.click();
},
getSelectedRow: function () {
return this.rowSelected;
},
getSelectedRowIdx: function () {
return this.rowSelectedIdx;
},
getData: function() {
var data = [];
[].forEach.call( this.element.find('.' + this.options.trClass + '.row' ), function( row, idx ) {
data[idx] = [];
[].forEach.call( this.options.struct , function ( struct_cell, iidx ) {
var d = null;
switch( struct_cell.input_type ) {
case 'text':
case 'number':
d = $(row).find( '.' + struct_cell.cssClass +' input[ type='+struct_cell.input_type+']' )[0].value;
break;
case 'checkbox':
d = $(row).find( '.' + struct_cell.cssClass +' input[ type='+struct_cell.input_type+']' )[0].checked;
break;
case 'select':
d = $(row).find( '.' + struct_cell.cssClass +' select' )[0].selected;
break;
}
data[idx][iidx] = d;
}.bind(this));
}.bind(this));
return data;
},
getRowData: function( rowidx ) {
var data = {},
row = this.element.find('.' + this.options.trClass + '.row[rowid='+rowidx+']' );
if( row.length ){
row = row[0];
[].forEach.call( this.options.struct , function ( struct_cell/*, iidx */) {
var d = null;
switch( struct_cell.input_type ) {
case 'text':
case 'number':
d = $(row).find( '.' + struct_cell.cssClass +' input[ type='+struct_cell.input_type+']' )[0].value;
break;
case 'checkbox':
d = $(row).find( '.' + struct_cell.cssClass +' input[ type='+struct_cell.input_type+']' )[0].checked;
break;
case 'select':
d = $(row).find( '.' + struct_cell.cssClass +' select' )[0].selected;
break;
}
data[struct_cell.alias] = d;
}.bind(this));
} else {
alert( 'rowid error' );
}
return data;
},
updateRow: function ( rowidx, alias, value, dontFireEvent ) {
var row = this.element.find( '.' + this.options.trClass + '.row[rowid='+rowidx+']' )[0];
if( row ){
[].forEach.call( this.options.struct , function ( struct_cell/*, iidx */) {
if( struct_cell.alias == alias ){
switch( struct_cell.input_type ) {
case 'text':
case 'number':
$(row).find( '.' + struct_cell.cssClass +' input[ type='+struct_cell.input_type+']' )[0].value = value;
break;
case 'checkbox':
if( /(checked|true)/ig.test( value ) )
$(row).find( '.' + struct_cell.cssClass +' input[ type='+struct_cell.input_type+']' )[0].attr( 'checked', 'checked');
else
$(row).find( '.' + struct_cell.cssClass +' input[ type='+struct_cell.input_type+']' )[0].removeAttr( 'checked' );
break;
case 'select':
$(row).find( '.' + struct_cell.cssClass +' select' )[0].value =value ;
break;
}
}
})
}
if( !dontFireEvent )
this.element.trigger( 'rowValueChange', [ rowidx , alias, value ]);
},
reset: function () {
this.element.find('.' + this.options.trClass + '.row' ).remove();
this.rowSelected = null;
this.rowSelectedIdx = -1;
this.lastRowIdx = -1;
},
getRowOrder: function () {
var a = [];
[].forEach.call( this.element.find('.' + this.options.trClass + '.row' ), function( row, idx ) {
a[idx] = $(row).attr( 'rowId' );
});
return a;
}
});
}) ( window, jQuery )