📄 mootable.js
字号:
}.pass(h.element, this));
}
if( !h.options.fixedWidth ){
var handle = new Element('div').addClass('resize').injectInside( h.element );
handle.setHTML(' ');
var resizer = new Drag.Base(h.element, {
handle: handle,
modifiers:{x: 'width'},
onComplete: function(){
if( h.element.getSize().size.x < 10 ) {
h.element.setStyle('width', '10px');
this._setHeaderWidth();
}
this._setWidthCookie( h.element );
this._setColumnWidths();
this.thead.removeClass('dragging');
h.element.removeClass('dragging');
}.bind(this),
onStart: function(ele){
if( this.options.sortable) this.dragging = true;
this.thead.addClass('dragging');
ele.addClass('dragging');
}.bind(this),
onDrag: function(ele){
this._setHeaderWidth();
}.bind(this)
} );
// best fit
handle.addEvent('dblclick', this.bestFit.pass( h.element.col,this) );
}
h.element.addEvent('mouseover', function(){
this.addClass('mouseover');
});
h.element.addEvent('mouseout', function(){
this.removeClass('mouseover');
});
},
_createRow: function( data ){
var row = {};
row.element = new Element( 'tr' );
row.cols = [];
i=0;
this._fireEvent( 'beforeRow', data );
switch( $type( data ) ){
case 'array':
for(var i=0; i<this.headers.length; i++ ){
var cell = this._createCell( data[i] );
cell.element.addClass('c'+i).injectInside(row.element);
row.cols.push(cell);
}
break;
case 'object':
row.data = data;
for(var i=0; i<this.headers.length; i++ ){
header = this.headers[i];
var text = header.options.key ? data[header.options.key] : ' ';
var cell = this._createCell( text, header.options.fade );
cell.element.addClass('c'+i).injectInside(row.element);
row.cols.push(cell);
}
break;
default:
// bad object
break;
}
this._fireEvent( 'afterRow', [data, row] );
return row;
},
addRow: function( data ){
var row = this._createRow( data );
row.element.injectInside(this.tablebody);
row.element.addClass( this.rows.length % 2 == 0 ? 'even' : 'odd' );
this.rows.push( row );
},
_createCell: function( value, fade ){
if( !$chk(fade) ){ fade = true; }
var cell = {};
cell.value = value;
cell.element = new Element('td');
cell.element.setHTML('<div class="cell">'+( fade ? this.fade : '' )+'<span>'+value+'</span> </div>');
return cell;
},
_setColumnWidths: function(){
this._setWidths();
if( this.rows.length > 0 ){
for(i=0;i<this.headers.length;i++){
var w = this.headers[i].element.getStyle('width');
w = window.ie ? (w.replace(/px/,"") - 2)+'px' : w;
//this.rows[0].cols[i].element.setProperty('width', w);
this.rows[0].cols[i].element.setStyle('width', w);
}
}
this._setWidths();
},
_setHeaderWidth: function(){
var width=0;
this.headers.each(function(h){
width += h.element.getSize().size.x;
});
this.thead_tr.setStyle('width', width+'px');
this.tablewidth = width;
},
_setWidths: function(){
this._setHeaderWidth();
var width = this.thead_tr.getSize().size.x;
this.table.setStyle( 'width', this.thead_tr.getStyle('width'));
this.table.setProperty( 'width', this.thead_tr.getStyle('width'));
this.tbody.fireEvent('scroll');
},
_copyProperties: function(from,to){
//to.setProperty( 'class', from.getProperty('class') || '' );
//to.setProperty( 'style', from.getProperty('style') || '' );
},
_initDisplayOptions: function(){
this.displayOptions = new Element('div').addClass('mootable_options');
this.form = new Element('form').injectInside( this.displayOptions );
var i=0;
this.headers.each( function( header ){
var id = 'mootable_h'+i;
var checkbox = new Element('input').setProperty('type','checkbox').setProperty('id',id).setProperty('name',id).injectInside(this.form);
checkbox.setProperty('checked', 'true');
checkbox.addEvent('click', this.toggleColumn.pass(i,this) );
var label = new Element('label').setProperty('for',id).setProperty('htmlFor',id).setHTML(header.value).injectInside(this.form);
i++;
if( i < this.headers.length ){
new Element('br').injectAfter(label);
}
}, this);
this.displayOptionsTrigger = new Element('div').addClass('displayTrigger').injectInside( this.thead );
this.displayOptionsTrigger.addEvent('click', this._toggleDisplayOptions.bind(this) );
this.displayOptions.addClass('displayOptions').injectAfter( this.displayOptionsTrigger );
},
toggleColumn: function( col ){
var checked = this.form['mootable_h'+col].checked;
this.rows.each( function(row){
row.cols[col].element.setStyle('display', checked ? '' : 'none');
});
this.headers[col].element.setStyle('display', checked ? '' : 'none');
this._setHeaderWidth();
this._setWidths();
},
_toggleDisplayOptions: function(ev){
if( this.displayOptions.getStyle('display') == 'none' ){
this.displayOptions.setStyle('display', 'block');
document.addEvent('mousemove', this._monitorDisplayOptions.bind(this) );
}
else{
this.displayOptions.setStyle('display', 'none');
document.removeEvent( 'mousemove', this._monitorDisplayOptions );
}
},
_monitorDisplayOptions: function(ev){
var e = new Event( ev );
var pos = this.displayOptions.getPosition();
if( e.page.x < pos.left || e.page.x > (pos.left + pos.width) ){
this.displayOptions.setStyle('display', 'none');
document.removeEvent( 'mousemove', this._monitorDisplayOptions );
}
else if( e.page.y < pos.top || e.page.y > (pos.top + pos.height) ){
this.displayOptions.setStyle('display', 'none');
document.removeEvent( 'mousemove', this._monitorDisplayOptions );
}
},
_zebra: function(){
var c = 0;
this.rows.each( function(row) {
row.element.addClass( c%2 == 0 ? 'odd' : 'even' );
row.element.removeClass( c%2 == 1 ? 'odd' : 'even' );
c++;
});
},
_setWidthCookie: function( ele ){
Cookie.set('mootable_h_'+this.headers[ele.col].value , ele.getStyle('width') );
},
_getWidthCookie: function( ele ){
return Cookie.get('mootable_h_'+this.headers[ele.col].value);
},
sort: function( col ){
this._fireEvent('sortStart');
if( this.rows.length == 0 ){
return;
}
this.rows[0].cols.each( function( col ){
col.element.setProperty('width', '');
col.element.setStyle('width', 'auto' );
} );
if( this.dragging ){
this.dragging = false;
return;
}
if( $chk(this.sortby) ){
this.headers[this.sortby].element.removeClass( 'sorted_'+ (this.sortasc ? 'asc' : 'desc' ) );
}
if( $chk(this.sortby) && this.sortby == col ){
this.sortasc = !this.sortasc;
}
else if( $chk(this.sortby) ){
this.sortby2 = this.sortby;
this.sortasc = true;
}
this.sortby = col;
this.headers[this.sortby].element.addClass( 'sorted_'+ (this.sortasc ? 'asc' : 'desc' ) );
this.rows.sort( this.rowCompare.bind(this) );
this.rows.each( function( item ){
item.element.remove();
});
i=0;
this.rows.each( function( item ){
item.element.addClass( i%2 == 0 ? 'even' : 'odd' );
item.element.removeClass( i%2 == 0 ? 'odd' : 'even' );
item.element.injectInside(this.tablebody);
i++;
}, this );
this._setColumnWidths();
this._setWidths();
this._fireEvent('sortFinish');
},
rowCompare: function( r1, r2 ){
a = r1.cols[this.sortby].value;
b = r2.cols[this.sortby].value;
if( a > b ){
return this.sortasc ? 1 : -1;
}
if( a < b ){
return this.sortasc ? -1 : 1;
}
if( this.sortby2 ){
a = r1.cols[this.sortby2].value;
b = r2.cols[this.sortby2].value;
if( a > b ){
return this.sortasc ? 1 : -1;
}
if( a < b ){
return this.sortasc ? -1 : 1;
}
}
return 0;
},
bestFit: function(col){
var max = 0;
this.table.getElements('td.c'+col+' span').each( function( el ){
s = el.getSize().size.x;
if( s > max ) max = s;
});
this.headers[col].element.setStyle('width', (max+(this.headers[col].options.fade && this.options.fade ? 5 : 0)) + 'px' );
this._setWidthCookie( this.headers[col].element );
this._setHeaderWidth();
this._setColumnWidths( this.headers[col] );
},
addEvent: function(type, fn){
this.events = this.events || {};
this.events[type] = this.events[type] || {'keys': []};
if (!this.events[type].keys.test(fn)){
this.events[type].keys.push(fn);
}
return this;
},
_fireEvent: function(type,args){
if (this.events && this.events[type]){
this.events[type].keys.each(function(fn){
fn.bind(this, args)();
}, this);
}
}
});
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -