Blame | Last modification | View Log | RSS feed
/** File: AutoFill.min.js* Version: 1.1.1* Author: Allan Jardine (www.sprymedia.co.uk)** Copyright 2010-2011 Allan Jardine, all rights reserved.** This source file is free software, under either the GPL v2 license or a* BSD (3 point) style license, as supplied with this software.** This source file is distributed in the hope that it will be useful, but* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY* or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details.*/var AutoFill;(function(d){AutoFill=function(b,a){if(!this.CLASS||this.CLASS!="AutoFill")alert("Warning: AutoFill must be initialised with the keyword 'new'");else if(d.fn.dataTableExt.fnVersionCheck("1.7.0")){this.s={filler:{height:0,width:0},border:{width:2},drag:{startX:-1,startY:-1,startTd:null,endTd:null,dragging:false},screen:{interval:null,y:0,height:0,scrollTop:0},scroller:{top:0,bottom:0},columns:[]};this.dom={table:null,filler:null,borderTop:null,borderRight:null,borderBottom:null,borderLeft:null,currentTarget:null};this.fnSettings=function(){return this.s};this._fnInit(b,a);return this}else alert("Warning: AutoFill requires DataTables 1.7 or greater - www.datatables.net/download")};AutoFill.prototype={_fnInit:function(b,a){var c=this,e;this.s.dt=b.fnSettings();this.dom.table=this.s.dt.nTable;b=0;for(e=this.s.dt.aoColumns.length;b<e;b++)this._fnAddColumn(b);typeof a!="undefined"&&typeof a.aoColumnDefs!="undefined"&&this._fnColumnDefs(a.aoColumnDefs);typeof a!="undefined"&&typeof a.aoColumns!="undefined"&&this._fnColumnsAll(a.aoColumns);a=document.createElement("div");a.className="AutoFill_filler";document.body.appendChild(a);this.dom.filler=a;a.style.display="block";this.s.filler.height=d(a).height();this.s.filler.width=d(a).width();a.style.display="none";e=document.body;if(c.s.dt.oScroll.sY!==""){c.s.dt.nTable.parentNode.style.position="relative";e=c.s.dt.nTable.parentNode}b=document.createElement("div");b.className="AutoFill_border";e.appendChild(b);this.dom.borderTop=b;b=document.createElement("div");b.className="AutoFill_border";e.appendChild(b);this.dom.borderRight=b;b=document.createElement("div");b.className="AutoFill_border";e.appendChild(b);this.dom.borderBottom=b;b=document.createElement("div");b.className="AutoFill_border";e.appendChild(b);this.dom.borderLeft=b;d(a).mousedown(function(f){this.onselectstart=function(){return false};c._fnFillerDragStart.call(c,f);return false});d("tbody>tr>td",this.dom.table).live("mouseover mouseout",function(f){c._fnFillerDisplay.call(c,f)})},_fnColumnDefs:function(b){var a,c,e,f,h,g;for(a=b.length-1;a>=0;a--){g=b[a].aTargets;c=0;for(f=g.length;c<f;c++)if(typeof g[c]=="number"&&g[c]>=0)this._fnColumnOptions(g[c],b[a]);else if(typeof g[c]=="number"&&g[c]<0)this._fnColumnOptions(this.s.dt.aoColumns.length+g[c],b[a]);else if(typeof g[c]=="string"){e=0;for(h=this.s.dt.aoColumns.length;e<h;e++)if(g[c]=="_all"||this.s.dt.aoColumns[e].nTh.className.indexOf(g[c])!=-1)this._fnColumnOptions(e,b[a])}}},_fnColumnsAll:function(b){for(var a=0,c=this.s.dt.aoColumns.length;a<c;a++)this._fnColumnOptions(a,b[a])},_fnAddColumn:function(b){this.s.columns[b]={enable:true,read:this._fnReadCell,write:this._fnWriteCell,step:this._fnStep,complete:null}},_fnColumnOptions:function(b,a){if(typeof a.bEnable!="undefined")this.s.columns[b].enable=a.bEnable;if(typeof a.fnRead!="undefined")this.s.columns[b].read=a.fnRead;if(typeof a.fnWrite!="undefined")this.s.columns[b].write=a.fnWrite;if(typeof a.fnStep!="undefined")this.s.columns[b].step=a.fnStep;if(typeof a.fnCallback!="undefined")this.s.columns[b].complete=a.fnCallback},_fnTargetCoords:function(b){var a=b.parentNode;return{x:d("td",a).index(b),y:d("tr",a.parentNode).index(a)}},_fnUpdateBorder:function(b,a){var c=this.s.border.width,e=d(b).offset(),f=d(a).offset();b=e.left-c;var h=f.left+d(a).outerWidth(),g=e.top-c,j=f.top+d(a).outerHeight(),k=f.left+d(a).outerWidth()-e.left+2*c;a=f.top+d(a).outerHeight()-e.top+2*c;if(this.s.dt.oScroll.sY!==""){c=d(this.s.dt.nTable.parentNode).offset();e=d(this.s.dt.nTable.parentNode).scrollTop();f=d(this.s.dt.nTable.parentNode).scrollLeft();b-=c.left-f;h-=c.left-f;g-=c.top-e;j-=c.top-e}c=this.dom.borderTop.style;c.top=g+"px";c.left=b+"px";c.height=this.s.border.width+"px";c.width=k+"px";c=this.dom.borderBottom.style;c.top=j+"px";c.left=b+"px";c.height=this.s.border.width+"px";c.width=k+"px";c=this.dom.borderLeft.style;c.top=g+"px";c.left=b+"px";c.height=a+"px";c.width=this.s.border.width+"px";c=this.dom.borderRight.style;c.top=g+"px";c.left=h+"px";c.height=a+"px";c.width=this.s.border.width+"px"},_fnFillerDragStart:function(b){var a=this,c=this.dom.currentTarget;this.s.drag.dragging=true;a.dom.borderTop.style.display="block";a.dom.borderRight.style.display="block";a.dom.borderBottom.style.display="block";a.dom.borderLeft.style.display="block";var e=this._fnTargetCoords(c);this.s.drag.startX=e.x;this.s.drag.startY=e.y;this.s.drag.startTd=c;this.s.drag.endTd=c;this._fnUpdateBorder(c,c);d(document).bind("mousemove.AutoFill",function(f){a._fnFillerDragMove.call(a,f)});d(document).bind("mouseup.AutoFill",function(f){a._fnFillerFinish.call(a,f)});this.s.screen.y=b.pageY;this.s.screen.height=d(window).height();this.s.screen.scrollTop=d(document).scrollTop();if(this.s.dt.oScroll.sY!==""){this.s.scroller.top=d(this.s.dt.nTable.parentNode).offset().top;this.s.scroller.bottom=this.s.scroller.top+d(this.s.dt.nTable.parentNode).height()}this.s.screen.interval=setInterval(function(){var f=d(document).scrollTop();a.s.screen.y+=f-a.s.screen.scrollTop;if(a.s.screen.height-a.s.screen.y+f<50)d("html, body").animate({scrollTop:f+50},240,"linear");else a.s.screen.y-f<50&&d("html, body").animate({scrollTop:f-50},240,"linear");if(a.s.dt.oScroll.sY!=="")if(a.s.screen.y>a.s.scroller.bottom-50)d(a.s.dt.nTable.parentNode).animate({scrollTop:d(a.s.dt.nTable.parentNode).scrollTop()+50},240,"linear");else a.s.screen.y<a.s.scroller.top+50&&d(a.s.dt.nTable.parentNode).animate({scrollTop:d(a.s.dt.nTable.parentNode).scrollTop()-50},240,"linear")},250)},_fnFillerDragMove:function(b){if(b.target&&b.target.nodeName.toUpperCase()=="TD"&&b.target!=this.s.drag.endTd){var a=this._fnTargetCoords(b.target);if(a.x!=this.s.drag.startX){b.target=d("tbody>tr:eq("+a.y+")>td:eq("+this.s.drag.startX+")",this.dom.table)[0];a=this._fnTargetCoords(b.target)}if(a.x==this.s.drag.startX){var c=this.s.drag;c.endTd=b.target;a.y>=this.s.drag.startY?this._fnUpdateBorder(c.startTd,c.endTd):this._fnUpdateBorder(c.endTd,c.startTd);this._fnFillerPosition(b.target)}}this.s.screen.y=b.pageY;this.s.screen.scrollTop=d(document).scrollTop();if(this.s.dt.oScroll.sY!==""){this.s.scroller.scrollTop=d(this.s.dt.nTable.parentNode).scrollTop();this.s.scroller.top=d(this.s.dt.nTable.parentNode).offset().top;this.s.scroller.bottom=this.s.scroller.top+d(this.s.dt.nTable.parentNode).height()}},_fnFillerFinish:function(){d(document).unbind("mousemove.AutoFill");d(document).unbind("mouseup.AutoFill");this.dom.borderTop.style.display="none";this.dom.borderRight.style.display="none";this.dom.borderBottom.style.display="none";this.dom.borderLeft.style.display="none";this.s.drag.dragging=false;clearInterval(this.s.screen.interval);var b=this._fnTargetCoords(this.s.drag.startTd),a=this._fnTargetCoords(this.s.drag.endTd),c=[],e;if(b.y<=a.y){e=true;for(i=b.y;i<=a.y;i++)c.push(d("tbody>tr:eq("+i+")>td:eq("+b.x+")",this.dom.table)[0])}else{e=false;for(i=b.y;i>=a.y;i--)c.push(d("tbody>tr:eq("+i+")>td:eq("+b.x+")",this.dom.table)[0])}b=b.x;a=false;var f=[],h=this._fnPrep(this.s.columns[b].read.call(this,this.s.drag.startTd));i=0;for(iLen=c.length;i<iLen;i++){if(i==iLen-1)a=true;var g=this.s.columns[b].read.call(this,c[i]),j=this.s.columns[b].step.call(this,c[i],h,i,e,"SPRYMEDIA_AUTOFILL_STEPPER");this.s.columns[b].write.call(this,c[i],j,a);f.push({td:c[i],newValue:j,oldValue:g})}this.s.columns[b].complete!==null&&this.s.columns[b].complete.call(this,f)},_fnPrep:function(b){var a=b.match(/[\d\.]+/g);if(!a||a.length===0)return{iStart:0,sStr:b,sPostFix:""};var c=a[a.length-1];a=parseInt(c,10);var e=new RegExp("^(.*)"+c+"(.*?)$");c=c.match(/\./)?"."+c.split(".")[1]:"";return{iStart:a,sStr:b.replace(e,"$1SPRYMEDIA_AUTOFILL_STEPPER$2"),sPostFix:c}},_fnStep:function(b,a,c,e,f){b=e?a.iStart+c:a.iStart-c;if(isNaN(b))b="";return a.sStr.replace(f,b+a.sPostFix)},_fnReadCell:function(b){var a=d("input",b);if(a.length>0)return d(a).val();a=d("select",b);if(a.length>0)return d(a).val();return b.innerHTML},_fnWriteCell:function(b,a,c){var e=d("input",b);if(e.length>0)d(e).val(a);else{e=d("select",b);if(e.length>0)d(e).val(a);else{b=this.s.dt.oInstance.fnGetPosition(b);this.s.dt.oInstance.fnUpdate(a,b[0],b[2],c)}}},_fnFillerDisplay:function(b){if(!this.s.drag.dragging)if(this.s.columns[this._fnTargetCoords(b.target).x].enable){var a=this.dom.filler;if(b.type=="mouseover"){this.dom.currentTarget=b.target;this._fnFillerPosition(b.target);a.style.display="block"}else if(!b.relatedTarget||!b.relatedTarget.className.match(/AutoFill/))a.style.display="none"}},_fnFillerPosition:function(b){var a=d(b).offset(),c=this.dom.filler;c.style.top=a.top-this.s.filler.height/2-1+d(b).outerHeight()+"px";c.style.left=a.left-this.s.filler.width/2-1+d(b).outerWidth()+"px"}};AutoFill.prototype.CLASS="AutoFill";AutoFill.VERSION="1.1.1";AutoFill.prototype.VERSION="1.1.1"})(jQuery);