datahub/vendor/slickgrid/2.0.1/slick.grid.min.js
Rufus Pollock d339fea2d9 [#119,view/slickgrid][m]: first pass implementation of slickgrid view courtesy of @amercader.
New setup supports:

* Column hiding
* Column reordering
* Column sorting
* Column resizing
* Fit columns to the div width

All these options are stored on the view state and applied when initializing the view if necessary.

Now also utilize slickgrid view as default grid view.
2012-05-27 23:31:42 +01:00

85 lines
34 KiB
JavaScript

(function(e){function G(){var d=!1,e=!1;this.stopPropagation=function(){d=!0};this.isPropagationStopped=function(){return d};this.stopImmediatePropagation=function(){e=!0};this.isImmediatePropagationStopped=function(){return e}}function A(){this.__nonDataRow=!0}function ba(){this.__group=!0;this.__updated=!1;this.count=0;this.title=this.value=null;this.collapsed=!1;this.totals=null}function g(){this.__groupTotals=!0;this.group=null}function f(){var d=null;this.isActive=function(e){return e?d===e:
null!==d};this.activate=function(e){if(e!==d){if(null!==d)throw"SlickGrid.EditorLock.activate: an editController is still active, can't activate another editController";if(!e.commitCurrentEdit)throw"SlickGrid.EditorLock.activate: editController must implement .commitCurrentEdit()";if(!e.cancelCurrentEdit)throw"SlickGrid.EditorLock.activate: editController must implement .cancelCurrentEdit()";d=e}};this.deactivate=function(e){if(d!==e)throw"SlickGrid.EditorLock.deactivate: specified editController is not the currently active one";
d=null};this.commitCurrentEdit=function(){return d?d.commitCurrentEdit():!0};this.cancelCurrentEdit=function(){return d?d.cancelCurrentEdit():!0}}e.extend(!0,window,{Slick:{Event:function(){var d=[];this.subscribe=function(e){d.push(e)};this.unsubscribe=function(e){for(var f=d.length-1;f>=0;f--)d[f]===e&&d.splice(f,1)};this.notify=function(e,f,g){for(var f=f||new G,g=g||this,A,ma=0;ma<d.length&&!f.isPropagationStopped()&&!f.isImmediatePropagationStopped();ma++)A=d[ma].call(g,f,e);return A}},EventData:G,
EventHandler:function(){var d=[];this.subscribe=function(e,f){d.push({event:e,handler:f});e.subscribe(f)};this.unsubscribe=function(e,f){for(var g=d.length;g--;)if(d[g].event===e&&d[g].handler===f){d.splice(g,1);e.unsubscribe(f);break}};this.unsubscribeAll=function(){for(var e=d.length;e--;)d[e].event.unsubscribe(d[e].handler);d=[]}},Range:function(d,e,f,g){if(f===void 0&&g===void 0){f=d;g=e}this.fromRow=Math.min(d,f);this.fromCell=Math.min(e,g);this.toRow=Math.max(d,f);this.toCell=Math.max(e,g);
this.isSingleRow=function(){return this.fromRow==this.toRow};this.isSingleCell=function(){return this.fromRow==this.toRow&&this.fromCell==this.toCell};this.contains=function(d,e){return d>=this.fromRow&&d<=this.toRow&&e>=this.fromCell&&e<=this.toCell};this.toString=function(){return this.isSingleCell()?"("+this.fromRow+":"+this.fromCell+")":"("+this.fromRow+":"+this.fromCell+" - "+this.toRow+":"+this.toCell+")"}},NonDataRow:A,Group:ba,GroupTotals:g,EditorLock:f,GlobalEditorLock:new f}});ba.prototype=
new A;ba.prototype.equals=function(d){return this.value===d.value&&this.count===d.count&&this.collapsed===d.collapsed};g.prototype=new A})(jQuery);/*
(c) 2009-2012 Michael Leibman
michael{dot}leibman{at}gmail{dot}com
http://github.com/mleibman/slickgrid
Distributed under MIT license.
All rights reserved.
SlickGrid v2.0
NOTES:
Cell/row DOM manipulations are done directly bypassing jQuery's DOM manipulation methods.
This increases the speed dramatically, but can only be done safely because there are no event handlers
or data associated with any cell/row DOM nodes. Cell editors must make sure they implement .destroy()
and do proper cleanup.
*/
if("undefined"===typeof jQuery)throw"SlickGrid requires jquery module to be loaded";if(!jQuery.fn.drag)throw"SlickGrid requires jquery.event.drag module to be loaded";if("undefined"===typeof Slick)throw"slick.core.js not loaded";
(function(e){e.extend(!0,window,{Slick:{Grid:function(ba,g,f,d){function fb(){if(!H){H=true;U=parseFloat(e.css(n[0],"width",true));Vb();ma(t);d.enableTextSelectionOnCells||v.bind("selectstart.ui",function(a){return e(a.target).is("input,textarea")});hb();Wb();ib();K();Xb();n.bind("resize.slickgrid",K);v.bind("scroll.slickgrid",jb);ca.bind("contextmenu.slickgrid",Yb).bind("click.slickgrid",Zb);Ka.bind("keydown.slickgrid",kb);B.bind("keydown.slickgrid",kb).bind("click.slickgrid",$b).bind("dblclick.slickgrid",
ac).bind("contextmenu.slickgrid",bc).bind("draginit",cc).bind("dragstart",dc).bind("drag",ec).bind("dragend",fc).delegate(".slick-cell","mouseenter",gc).delegate(".slick-cell","mouseleave",hc)}}function gb(a){for(var b=O.length;b>=0;b--)if(O[b]===a){O[b].destroy&&O[b].destroy();O.splice(b,1);break}}function Ub(){var a=e("<div style='position:absolute; top:-10000px; left:-10000px; width:100px; height:100px; overflow:scroll;'></div>").appendTo("body"),b={width:a.width()-a[0].clientWidth,height:a.height()-
a[0].clientHeight};a.remove();return b}function Ja(a){for(var b=P,c=na?U-G.width:U,j=0,e=f.length;e--;)j=j+(f[e].width||La.width);P=d.fullWidthRows?Math.max(j,c):j;if(P!=b){B.width(P);da.width(P);lb=P>U-G.width}(P!=b||a)&&Ma()}function ma(a){a&&a.jquery&&a.attr("unselectable","on").css("MozUserSelect","none").bind("selectstart.ui",function(){return false})}function ic(){for(var a=1E6,b=e.browser.mozilla?5E6:1E9,c=e("<div style='display:none' />").appendTo(document.body);a<=b;){c.css("height",a+1E6);
if(c.height()!==a+1E6)break;else a=a+1E6}c.remove();return a}function Xb(){for(var a=B[0];(a=a.parentNode)!=document.body&&a!=null;)(a==v[0]||a.scrollWidth!=a.clientWidth||a.scrollHeight!=a.clientHeight)&&e(a).bind("scroll.slickgrid",mb)}function hb(){function a(){e(this).addClass("ui-state-hover")}function b(){e(this).removeClass("ui-state-hover")}t.empty();da.empty();I={};for(var c=0;c<f.length;c++){var j=f[c]=e.extend({},La,f[c]);I[j.id]=c;var oa=e("<div class='ui-state-default slick-header-column' id='"+
z+j.id+"' />").html("<span class='slick-column-name'>"+j.name+"</span>").width(j.width-V).attr("title",j.toolTip||j.name||"").data("fieldId",j.id).addClass(j.headerCssClass||"").appendTo(t);(d.enableColumnReorder||j.sortable)&&oa.hover(a,b);j.sortable&&oa.append("<span class='slick-sort-indicator' />");d.showHeaderRow&&e("<div class='ui-state-default slick-headerrow-column l"+c+" r"+c+"'></div>").appendTo(da)}d.showHeaderRow&&e("<div style='display:block;height:1px;width:10000px;position:absolute;top:0;left:0;'></div>").appendTo(Q);
ta(r);nb();d.enableColumnReorder&&jc()}function Wb(){t.click(function(a){a.metaKey=a.metaKey||a.ctrlKey;if(!e(a.target).hasClass("slick-resizable-handle")){var b=e(a.target).closest(".slick-header-column");if(b.length){b=f[Na(b.data("fieldId"))];if(b.sortable&&p().commitCurrentEdit()){for(var c=null,j=0;j<r.length;j++)if(r[j].columnId==b.id){c=r[j];c.sortAsc=!c.sortAsc;break}if(a.metaKey&&d.multiColumnSort)c&&r.splice(j,1);else{if(!a.shiftKey&&!a.metaKey||!d.multiColumnSort)r=[];if(c)r.length==0&&
r.push(c);else{c={columnId:b.id,sortAsc:true};r.push(c)}}ta(r);d.multiColumnSort?l(i.onSort,{multiColumnSort:true,sortCols:e.map(r,function(a){return{sortCol:f[I[a.columnId]],sortAsc:a.sortAsc}})},a):l(i.onSort,{multiColumnSort:false,sortCol:b,sortAsc:c.sortAsc},a)}}}})}function jc(){t.sortable({containment:"parent",axis:"x",cursor:"default",tolerance:"intersection",helper:"clone",placeholder:"slick-sortable-placeholder ui-state-default slick-header-column",forcePlaceholderSize:true,start:function(a,
b){e(b.helper).addClass("slick-header-column-active")},beforeStop:function(a,b){e(b.helper).removeClass("slick-header-column-active")},stop:function(a){if(p().commitCurrentEdit()){for(var b=t.sortable("toArray"),c=[],j=0;j<b.length;j++)c.push(f[Na(b[j].replace(z,""))]);ob(c);l(i.onColumnsReordered,{});a.stopPropagation();nb()}else e(this).sortable("cancel")}})}function nb(){var a,b,c,j,oa,pb,h,g;j=t.children();j.find(".slick-resizable-handle").remove();j.each(function(a){if(f[a].resizable){h===void 0&&
(h=a);g=a}});h!==void 0&&j.each(function(k,m){if(!(k<h||d.forceFitColumns&&k>=g)){e(m);e("<div class='slick-resizable-handle' />").appendTo(m).bind("dragstart",function(g){if(!p().commitCurrentEdit())return false;c=g.pageX;e(this).parent().addClass("slick-header-column-active");var h=g=null;j.each(function(a,b){f[a].previousWidth=e(b).outerWidth()});if(d.forceFitColumns){h=g=0;for(a=k+1;a<j.length;a++){b=f[a];if(b.resizable){h!==null&&(h=b.maxWidth?h+(b.maxWidth-b.previousWidth):null);g=g+(b.previousWidth-
Math.max(b.minWidth||0,R))}}}var pa=0,i=0;for(a=0;a<=k;a++){b=f[a];if(b.resizable){i!==null&&(i=b.maxWidth?i+(b.maxWidth-b.previousWidth):null);pa=pa+(b.previousWidth-Math.max(b.minWidth||0,R))}}g===null&&(g=1E5);pa===null&&(pa=1E5);h===null&&(h=1E5);i===null&&(i=1E5);pb=c+Math.min(g,i);oa=c-Math.min(pa,h)}).bind("drag",function(e){var g=Math.min(pb,Math.max(oa,e.pageX))-c,h;if(g<0){h=g;for(a=k;a>=0;a--){b=f[a];if(b.resizable){e=Math.max(b.minWidth||0,R);if(h&&b.previousWidth+h<e){h=h+(b.previousWidth-
e);b.width=e}else{b.width=b.previousWidth+h;h=0}}}if(d.forceFitColumns){h=-g;for(a=k+1;a<j.length;a++){b=f[a];if(b.resizable)if(h&&b.maxWidth&&b.maxWidth-b.previousWidth<h){h=h-(b.maxWidth-b.previousWidth);b.width=b.maxWidth}else{b.width=b.previousWidth+h;h=0}}}}else{h=g;for(a=k;a>=0;a--){b=f[a];if(b.resizable)if(h&&b.maxWidth&&b.maxWidth-b.previousWidth<h){h=h-(b.maxWidth-b.previousWidth);b.width=b.maxWidth}else{b.width=b.previousWidth+h;h=0}}if(d.forceFitColumns){h=-g;for(a=k+1;a<j.length;a++){b=
f[a];if(b.resizable){e=Math.max(b.minWidth||0,R);if(h&&b.previousWidth+h<e){h=h+(b.previousWidth-e);b.width=e}else{b.width=b.previousWidth+h;h=0}}}}}qb();d.syncColumnCellResize&&Ma()}).bind("dragend",function(){var c;e(this).parent().removeClass("slick-header-column-active");for(a=0;a<j.length;a++){b=f[a];c=e(j[a]).outerWidth();b.previousWidth!==c&&b.rerenderOnResize&&W()}Ja(true);J();l(i.onColumnsResized,{})})}})}function Oa(a){var b=0;e.each(["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],
function(c,j){b=b+(parseFloat(a.css(j))||0)});return b}function Vb(){var a,b=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],c=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"];a=e("<div class='ui-state-default slick-header-column' style='visibility:hidden'>-</div>").appendTo(t);V=Pa=0;e.each(b,function(b,c){V=V+(parseFloat(a.css(c))||0)});e.each(c,function(b,c){Pa=Pa+(parseFloat(a.css(c))||0)});a.remove();var j=e("<div class='slick-row' />").appendTo(B);a=e("<div class='slick-cell' id='' style='visibility:hidden'>-</div>").appendTo(j);
ua=va=0;e.each(b,function(b,c){ua=ua+(parseFloat(a.css(c))||0)});e.each(c,function(b,c){va=va+(parseFloat(a.css(c))||0)});j.remove();R=Math.max(V,ua)}function ib(){X=e("<style type='text/css' rel='stylesheet' />").appendTo(e("head"));for(var a=["."+z+" .slick-header-column { left: 1000px; }","."+z+" .slick-top-panel { height:"+d.topPanelHeight+"px; }","."+z+" .slick-headerrow-columns { height:"+d.headerRowHeight+"px; }","."+z+" .slick-cell { height:"+(d.rowHeight-va)+"px; }","."+z+" .slick-row { height:"+
d.rowHeight+"px; }"],b=0;b<f.length;b++){a.push("."+z+" .l"+b+" { }");a.push("."+z+" .r"+b+" { }")}X[0].styleSheet?X[0].styleSheet.cssText=a.join(" "):X[0].appendChild(document.createTextNode(a.join(" ")))}function l(a,b,c){c=c||new Slick.EventData;b=b||{};b.grid=i;return a.notify(b,c,i)}function p(){return d.editorLock}function Na(a){return I[a]}function Qa(){var a,b,c=[],j=0,d=0,e,h=na?U-G.width:U;for(a=0;a<f.length;a++){b=f[a];c.push(b.width);d=d+b.width;b.resizable&&(j=j+(b.width-Math.max(b.minWidth,
R)))}for(e=d;d>h&&j;){var g=(d-h)/j;for(a=0;a<f.length&&d>h;a++){b=f[a];var k=c[a];if(b.resizable&&!(k<=b.minWidth||k<=R)){b=Math.max(b.minWidth,R);var i=Math.floor(g*(k-b))||1,i=Math.min(i,k-b),d=d-i,j=j-i;c[a]=c[a]-i}}if(e==d)break;e=d}for(e=d;d<h;){j=h/d;for(a=0;a<f.length&&d<h;a++){b=f[a];if(b.resizable&&!(b.maxWidth<=b.width)){g=Math.min(Math.floor(j*b.width)-b.width,b.maxWidth-b.width||1E6)||1;d=d+g;c[a]=c[a]+g}}if(e==d)break;e=d}d=false;for(a=0;a<f.length;a++){f[a].rerenderOnResize&&f[a].width!=
c[a]&&(d=true);f[a].width=c[a]}qb();Ja(true);if(d){W();J()}}function qb(){if(H)for(var a,b=0,c=t.children(),d=c.length;b<d;b++){a=e(c[b]);a.width()!==f[b].width-V&&a.width(f[b].width-V)}}function Ma(){for(var a,b,c=0,d,e=0;e<f.length;e++){d=f[e].width;b=e;if(!Y){var g=document.styleSheets;for(a=0;a<g.length;a++)if((g[a].ownerNode||g[a].owningElement)==X[0]){Y=g[a];break}if(!Y)throw Error("Cannot find stylesheet.");Ra=[];Sa=[];var g=Y.cssRules||Y.rules,h=void 0,h=void 0;for(a=0;a<g.length;a++){var i=
g[a].selectorText;if(h=/\.l\d+/.exec(i)){h=parseInt(h[0].substr(2,h[0].length-2),10);Ra[h]=g[a]}else if(h=/\.r\d+/.exec(i)){h=parseInt(h[0].substr(2,h[0].length-2),10);Sa[h]=g[a]}}}a=Ra[b];b=Sa[b];a.style.left=c+"px";b.style.right=P-c-d+"px";c=c+f[e].width}}function ta(a){r=a;var b=t.children();b.removeClass("slick-header-column-sorted").find(".slick-sort-indicator").removeClass("slick-sort-indicator-asc slick-sort-indicator-desc");e.each(r,function(a,d){if(d.sortAsc==null)d.sortAsc=true;var e=I[d.columnId];
e!=null&&b.eq(e).addClass("slick-header-column-sorted").find(".slick-sort-indicator").addClass(d.sortAsc?"slick-sort-indicator-asc":"slick-sort-indicator-desc")})}function rb(a,b){Ta=[];for(var c={},j=0;j<b.length;j++)for(var e=b[j].fromRow;e<=b[j].toRow;e++){c[e]||Ta.push(e);c[e]={};for(var g=b[j].fromCell;g<=b[j].toCell;g++)if(sb(e,g))c[e][f[g].id]=d.selectedCellCssClass}tb(d.selectedCellCssClass,c);l(i.onSelectedRowsChanged,{rows:ub()},a)}function ob(a){f=a;if(H){W();hb();X.remove();Y=null;ib();
K();Ma();jb()}}function q(){return g.getLength?g.getLength():g.length}function C(a){return g.getItem?g.getItem(a):g[a]}function ea(a){var b=w;fa=Math.min(ga-1,Math.floor(a/ha));w=Math.round(fa*wa);a=a-w;if(w!=b){var c=xa(a);vb(c.top,c.bottom);for(var e in x)x[e].style.top=e*d.rowHeight-w+"px"}if(ia!=a){Z=ia+b<a+w?1:-1;v[0].scrollTop=Ua=y=ia=a;l(i.onViewportChanged,{})}}function ya(a,b){var c=g.getItemMetadata&&g.getItemMetadata(a),e=c&&c.columns&&(c.columns[b.id]||c.columns[I[b.id]]);return e&&e.formatter||
c&&c.formatter||b.formatter||d.formatterFactory&&d.formatterFactory.getFormatter(b)||d.defaultFormatter}function wb(a,b){var c=f[b],e=g.getItemMetadata&&g.getItemMetadata(a);return(e=e&&e.columns)&&e[c.id]&&e[c.id].editor!==void 0?e[c.id].editor:e&&e[b]&&e[b].editor!==void 0?e[b].editor:c.editor||d.editorFactory&&d.editorFactory.getEditor(c)}function za(a,b){return d.dataItemColumnValueExtractor?d.dataItemColumnValueExtractor(a,b):a[b.field]}function vb(a){for(var b in x)(b=parseInt(b,10))!==m&&(b<
a.top||b>a.bottom)&&Aa(b)}function W(){k&&L();for(var a in x)Aa(a)}function Aa(a){var b=x[a];if(b){B[0].removeChild(b);delete x[a];delete Ba[a];Va--;xb++}}function yb(a){var b,c;if(a&&a.length){b=Z=0;for(c=a.length;b<c;b++){k&&m===a[b]&&L();x[a[b]]&&Aa(a[b])}}}function zb(a){yb([a])}function Wa(a){if(x[a]){var b=0;e(x[a]).children().each(function(c){var d=f[b],e=C(a);a===m&&c===u&&k?k.loadValue(C(m)):this.innerHTML=e?ya(a,d)(a,b,za(e,d),d,C(a)):"";b=b+$(a,c)});Xa(a)}}function K(){if(H){s=d.autoHeight?
d.rowHeight*(q()+(d.enableAddRow?1:0)+(d.leaveSpaceForNewRows?Ca-1:0)):parseFloat(e.css(n[0],"height",true))-parseFloat(e.css(ca[0],"height"))-Oa(ca)-(d.showTopPanel?d.topPanelHeight+Oa(aa):0)-(d.showHeaderRow?d.headerRowHeight+Oa(Q):0);Ca=Math.ceil(s/d.rowHeight);U=parseFloat(e.css(n[0],"width",true));v.height(s);d.forceFitColumns&&Qa();Da();J()}}function Da(){if(H){Ya=q()+(d.enableAddRow?1:0)+(d.leaveSpaceForNewRows?Ca-1:0);var a=na;na=!d.autoHeight&&Ya*d.rowHeight>s;var b=d.enableAddRow?q():q()-
1,c;for(c in x)c>=b&&Aa(c);b=M;N=Math.max(d.rowHeight*Ya,s-G.height);if(N<A){M=ha=N;ga=1;wa=0}else{M=A;ha=M/100;ga=Math.floor(N/ha);wa=(N-M)/(ga-1)}if(M!==b){B.css("height",M);y=v[0].scrollTop}c=y+w<=N-s;N==0||y==0?fa=w=0:c?ea(y+w):ea(N-s);M!=b&&d.autoHeight&&K();d.forceFitColumns&&a!=na&&Qa();Ja(false)}}function xa(a){a==null&&(a=y);return{top:Math.floor((a+w)/d.rowHeight),bottom:Math.ceil((a+w+s)/d.rowHeight)}}function Ab(a){var a=xa(a),b=Math.round(s/d.rowHeight);if(Z==-1){a.top=a.top-b;a.bottom=
a.bottom+3}else if(Z==1){a.top=a.top-3;a.bottom=a.bottom+b}else{a.top=a.top-3;a.bottom=a.bottom+3}a.top=Math.max(0,a.top);a.bottom=Math.min(d.enableAddRow?q():q()-1,a.bottom);return a}function Bb(){if(d.enableAsyncPostRender){clearTimeout(Za);Za=setTimeout(Cb,d.asyncPostRenderDelay)}}function Xa(a){delete Ba[a];ja=Math.min(ja,a);qa=Math.max(qa,a);Bb()}function J(){if(H){var a=xa(),b=Ab();vb(b);var c,e,i=B[0];e=[];var k=[],h=false;for(c=b.top;c<=b.bottom;c++)if(!x[c]){Va++;k.push(c);var l=e,n=c,v=
C(n),p=void 0,p="slick-row "+(n<q()&&!v?" loading":"")+(n%2==1?" odd":" even"),s=g.getItemMetadata&&g.getItemMetadata(n);s&&s.cssClasses&&(p=p+(" "+s.cssClasses));l.push("<div class='ui-widget-content "+p+"' row='"+n+"' style='top:"+(d.rowHeight*n-w)+"px'>");for(var t=s=void 0,r=0,A=f.length;r<A;r++){t=f[r];s=$(n,r);p="slick-cell l"+r+" r"+Math.min(f.length-1,r+s-1)+(t.cssClass?" "+t.cssClass:"");n===m&&r===u&&(p=p+" active");for(var z in D)D[z][n]&&D[z][n][t.id]&&(p=p+(" "+D[z][n][t.id]));l.push("<div class='"+
p+"'>");v&&l.push(ya(n,t)(n,r,za(v,t),t,v));l.push("</div>");s&&(r=r+(s-1))}l.push("</div>");o&&m===c&&(h=true);Db++}if(k.length){b=document.createElement("div");b.innerHTML=e.join("");c=0;for(e=b.childNodes.length;c<e;c++)x[k[c]]=i.appendChild(b.firstChild);h&&(o=E(m,u))}ja=a.top;qa=Math.min(d.enableAddRow?q():q()-1,a.bottom);Bb();Ua=y;Ea=null}}function jb(){y=v[0].scrollTop;var a=v[0].scrollLeft,b=Math.abs(y-ia);if(a!==Eb){Eb=a;ca[0].scrollLeft=a;aa[0].scrollLeft=a;Q[0].scrollLeft=a}if(b){Z=ia<
y?1:-1;ia=y;if(b<s)ea(y+w);else{b=w;fa=Math.min(ga-1,Math.floor(y*((N-s)/(M-s))*(1/ha)));w=Math.round(fa*wa);b!=w&&W()}Ea&&clearTimeout(Ea);Math.abs(Ua-y)<s?J():Ea=setTimeout(J,50);l(i.onViewportChanged,{})}l(i.onScroll,{scrollLeft:a,scrollTop:y})}function Cb(){for(;ja<=qa;){var a=Z>=0?ja++:qa--,b=x[a];if(b&&!(Ba[a]||a>=q())){for(var c=C(a),b=b.childNodes,e=0,g=0,i=f.length;e<i;++e){var h=f[e];h.asyncPostRender&&h.asyncPostRender(b[g],ja,c,h);++g}Ba[a]=true;Za=setTimeout(Cb,d.asyncPostRenderDelay);
break}}}function $a(a,b){var c,d,f,g,h;for(h in x){g=b&&b[h];f=a&&a[h];if(g)for(d in g)if(!f||g[d]!=f[d])(c=E(h,I[d]))&&e(c).removeClass(g[d]);if(f)for(d in f)if(!g||g[d]!=f[d])(c=E(h,I[d]))&&e(c).addClass(f[d])}}function tb(a,b){var c=D[a];D[a]=b;$a(b,c);l(i.onCellCssStylesChanged,{key:a,hash:b})}function cc(a,b){var c=ra(a);if(!c||!ab(c.row,c.cell))return false;retval=l(i.onDragInit,b,a);return a.isImmediatePropagationStopped()?retval:false}function dc(a,b){var c=ra(a);if(!c||!ab(c.row,c.cell))return false;
c=l(i.onDragStart,b,a);return a.isImmediatePropagationStopped()?c:false}function ec(a,b){return l(i.onDrag,b,a)}function fc(a,b){l(i.onDragEnd,b,a)}function kb(a){l(i.onKeyDown,{row:m,cell:u},a);if(!a.isImmediatePropagationStopped())if(!a.shiftKey&&!a.altKey&&!a.ctrlKey)if(a.which==27){if(!p().isActive())return;Fb()}else if(a.which==37)Gb();else if(a.which==39)Hb();else if(a.which==38)Ib();else if(a.which==40)Fa();else if(a.which==9)Jb();else if(a.which==13)d.editable&&(k?m===q()?Fa():Kb():p().commitCurrentEdit()&&
Ga());else return;else if(a.which==9&&a.shiftKey&&!a.ctrlKey&&!a.altKey)Lb();else return;a.stopPropagation();a.preventDefault();try{a.originalEvent.keyCode=0}catch(b){}}function $b(a){k||S();var b=ra(a);if(b&&!(k!==null&&m==b.row&&u==b.cell)){l(i.onClick,{row:b.row,cell:b.cell},a);if(!a.isImmediatePropagationStopped()&&T(b.row,b.cell)&&(!p().isActive()||p().commitCurrentEdit())){sa(b.row,false);ka(E(b.row,b.cell),b.row===q()||d.autoEdit)}}}function bc(a){var b=e(a.target).closest(".slick-cell",B);
b.length!==0&&!(o===b[0]&&k!==null)&&l(i.onContextMenu,{},a)}function ac(a){var b=ra(a);if(b&&!(k!==null&&m==b.row&&u==b.cell)){l(i.onDblClick,{row:b.row,cell:b.cell},a);a.isImmediatePropagationStopped()||d.editable&&Mb(b.row,b.cell,true)}}function Yb(a){var b=e(a.target).closest(".slick-header-column",".slick-header-columns"),b=b&&f[i.getColumnIndex(b.data("fieldId"))];l(i.onHeaderContextMenu,{column:b},a)}function Zb(a){var b=e(a.target).closest(".slick-header-column",".slick-header-columns");(b=
b&&f[i.getColumnIndex(b.data("fieldId"))])&&l(i.onHeaderClick,{column:b},a)}function gc(a){l(i.onMouseEnter,{},a)}function hc(a){l(i.onMouseLeave,{},a)}function ab(a,b){return!(a<0||a>=q()||b<0||b>=f.length)}function bb(a){var b=/l\d+/.exec(a.className);if(!b)throw"getCellFromNode: cannot get cell - "+a.className;return parseInt(b[0].substr(1,b[0].length-1),10)}function ra(a){a=e(a.target).closest(".slick-cell",B);return!a.length?null:{row:a.parent().attr("row")|0,cell:bb(a[0])}}function S(){Ka[0].focus()}
function kc(){if(o){var a=e(o).position().left,b=a+e(o).outerWidth(),c=v.scrollLeft(),d=c+v.width();a<c?v.scrollLeft(a):b>d&&v.scrollLeft(Math.min(a,b-v[0].clientWidth))}}function ka(a,b){if(o!==null){L();e(o).removeClass("active")}var c=o!==a;o=a;if(o!=null){m=parseInt(e(o).parent().attr("row"));u=cb=bb(o);e(o).addClass("active");if(d.editable&&b&&Nb(m,u)){clearTimeout(db);d.asyncEditorLoading?db=setTimeout(function(){Ga()},d.asyncEditorLoadDelay):Ga()}else S()}else m=u=null;if(c){kc();l(i.onActiveCellChanged,
Ob())}}function Nb(a,b){return a<q()&&!C(a)||f[b].cannotTriggerInsert&&a>=q()||!wb(a,b)?false:true}function L(){if(k){l(i.onBeforeCellEditorDestroy,{editor:k});k.destroy();k=null;if(o){var a=C(m);e(o).removeClass("editable invalid");if(a){var b=f[u],c=ya(m,b);o.innerHTML=c(m,u,za(a,b),b,C(m));Xa(m)}}if(e.browser.msie)if(document.selection&&document.selection.empty)document.selection.empty();else if(window.getSelection)(a=window.getSelection())&&a.removeAllRanges&&a.removeAllRanges();p().deactivate(Ha)}}
function Ga(a){if(o){if(!d.editable)throw"Grid : makeActiveCellEditable : should never get called when options.editable is false";clearTimeout(db);if(Nb(m,u)){var b=f[u],c=C(m);if(l(i.onBeforeEditCell,{row:m,cell:u,item:c,column:b})===false)S();else{p().activate(Ha);e(o).addClass("editable");if(!a)o.innerHTML="";k=new (a||wb(m,u))({grid:i,gridPosition:Ia(n[0]),position:Ia(o),container:o,column:b,item:c||{},commitChanges:Kb,cancelChanges:Fb});c&&k.loadValue(c);Pb=k.serializeValue();k.position&&mb()}}}}
function Kb(){if(p().commitCurrentEdit()){S();d.autoEdit&&Fa()}}function Fb(){p().cancelCurrentEdit()&&S()}function Ia(a){var b={top:a.offsetTop,left:a.offsetLeft,bottom:0,right:0,width:e(a).outerWidth(),height:e(a).outerHeight(),visible:true};b.bottom=b.top+b.height;b.right=b.left+b.width;for(var c=a.offsetParent;(a=a.parentNode)!=document.body;){if(b.visible&&a.scrollHeight!=a.offsetHeight&&e(a).css("overflowY")!="visible")b.visible=b.bottom>a.scrollTop&&b.top<a.scrollTop+a.clientHeight;if(b.visible&&
a.scrollWidth!=a.offsetWidth&&e(a).css("overflowX")!="visible")b.visible=b.right>a.scrollLeft&&b.left<a.scrollLeft+a.clientWidth;b.left=b.left-a.scrollLeft;b.top=b.top-a.scrollTop;if(a===c){b.left=b.left+a.offsetLeft;b.top=b.top+a.offsetTop;c=a.offsetParent}b.bottom=b.top+b.height;b.right=b.left+b.width}return b}function Qb(){return Ia(o)}function mb(){if(o){l(i.onActiveCellPositionChanged,{});if(k){var a=Qb();k.show&&k.hide&&(a.visible?k.show():k.hide());k.position&&k.position(a)}}}function Ob(){return o?
{row:m,cell:u}:null}function sa(a,b){var c=a*d.rowHeight,e=(a+1)*d.rowHeight-s+(lb?G.height:0);if((a+1)*d.rowHeight>y+s+w){ea(b?c:e);J()}else if(a*d.rowHeight<y+w){ea(b?e:c);J()}}function $(a,b){var c=g.getItemMetadata&&g.getItemMetadata(a);if(!c||!c.columns)return 1;c=(c=c.columns[f[b].id]||c.columns[b])&&c.colspan;c==="*"&&(c=f.length-b);return c||1}function Rb(a){for(var b=0;b<f.length;){if(T(a,b))return b;b=b+$(a,b)}return null}function eb(a,b){if(b>=f.length)return null;do b=b+$(a,b);while(b<
f.length&&!T(a,b));return b<f.length?{row:a,cell:b,posX:b}:null}function Sb(a,b){if(b<=0)return null;var c=Rb(a);if(c===null||c>=b)return null;for(var c={row:a,cell:c,posX:c},d;;){d=eb(c.row,c.cell,c.posX);if(!d)return null;if(d.cell>=b)return c;c=d}}function lc(a,b,c){for(var e;;){if(++a>=q()+(d.enableAddRow?1:0))return null;for(e=b=0;b<=c;){e=b;b=b+$(a,b)}if(T(a,e))return{row:a,cell:e,posX:c}}}function mc(a,b,c){for(var d;;){if(--a<0)return null;for(d=b=0;b<=c;){d=b;b=b+$(a,b)}if(T(a,d))return{row:a,
cell:d,posX:c}}}function nc(a,b,c){if(b=eb(a,b,c))return b;for(b=null;++a<q()+(d.enableAddRow?1:0);){b=Rb(a);if(b!==null)return{row:a,cell:b,posX:b}}return null}function oc(a,b,c){for(var d,e;!d;){if(d=Sb(a,b,c))break;if(--a<0)return null;b=0;e=a;for(var g=0,h=null;g<f.length;){T(e,g)&&(h=g);g=g+$(e,g)}e=h;e!==null&&(d={row:a,cell:e,posX:e})}return d}function Hb(){la("right")}function Gb(){la("left")}function Fa(){la("down")}function Ib(){la("up")}function Jb(){la("next")}function Lb(){la("prev")}
function la(a){if(o&&d.enableCellNavigation&&p().commitCurrentEdit()){S();if(a=(0,{up:mc,down:lc,left:Sb,right:eb,prev:oc,next:nc}[a])(m,u,cb)){var b=a.row==q();sa(a.row,!b);ka(E(a.row,a.cell),b||d.autoEdit);cb=a.posX}else ka(E(m,u),m==q()||d.autoEdit)}}function E(a,b){if(x[a])for(var c=e(x[a]).children(),d,f=0;f<c.length;f++){d=bb(c[f]);if(d===b)return c[f];if(d>b)break}return null}function T(a,b){if(!d.enableCellNavigation||a>=q()+(d.enableAddRow?1:0)||a<0||b>=f.length||b<0)return false;var c=g.getItemMetadata&&
g.getItemMetadata(a);if(c&&typeof c.focusable==="boolean")return c.focusable;return(c=c&&c.columns)&&c[f[b].id]&&typeof c[f[b].id].focusable==="boolean"?c[f[b].id].focusable:c&&c[b]&&typeof c[b].focusable==="boolean"?c[b].focusable:typeof f[b].focusable==="boolean"?f[b].focusable:true}function sb(a,b){if(a>=q()||a<0||b>=f.length||b<0)return false;var c=g.getItemMetadata&&g.getItemMetadata(a);if(c&&typeof c.selectable==="boolean")return c.selectable;return(c=c&&c.columns&&(c.columns[f[b].id]||c.columns[b]))&&
typeof c.selectable==="boolean"?c.selectable:typeof f[b].selectable==="boolean"?f[b].selectable:true}function Mb(a,b,c){if(H&&T(a,b)&&p().commitCurrentEdit()){sa(a,false);b=E(a,b);ka(b,c||a===q()||d.autoEdit);k||S()}}function pc(a){for(var b=[],c=f.length-1,d=0;d<a.length;d++)b.push(new Slick.Range(a[d],0,a[d],c));return b}function ub(){if(!F)throw"Selection model is not set";return Ta}var qc={explicitInitialization:false,rowHeight:25,defaultColumnWidth:80,enableAddRow:false,leaveSpaceForNewRows:false,
editable:false,autoEdit:true,enableCellNavigation:true,enableColumnReorder:true,asyncEditorLoading:false,asyncEditorLoadDelay:100,forceFitColumns:false,enableAsyncPostRender:false,asyncPostRenderDelay:60,autoHeight:false,editorLock:Slick.GlobalEditorLock,showHeaderRow:false,headerRowHeight:25,showTopPanel:false,topPanelHeight:25,formatterFactory:null,editorFactory:null,cellFlashingCssClass:"flashing",selectedCellCssClass:"selected",multiSelect:true,enableTextSelectionOnCells:false,dataItemColumnValueExtractor:null,
fullWidthRows:false,multiColumnSort:false,defaultFormatter:function(a,b,c){return c==null?"":c.toString().replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}},La={name:"",resizable:true,sortable:false,minWidth:30,rerenderOnResize:false,headerCssClass:null},N,M,ha,ga,wa,fa=0,w=0,Z=1,H=false,n,z="slickgrid_"+Math.round(1E6*Math.random()),i=this,Ka,ca,t,da,Q,aa,Tb,v,B,X,Y,Ra,Sa,s,U,P,lb,na,V=0,Pa=0,ua=0,va=0,R,Ya=0,cb,m,u,o=null,k=null,Pb,Ha,x={},Va=0,Ca,ia=0,y=0,Ua=0,Eb=0,F,Ta=[],O=[],
D={},I={},r=[],db=null,Ea=null,Za=null,Ba={},qa=null,ja=null,Db=0,xb=0;this.debug=function(){var a;a="\ncounter_rows_rendered: "+Db;a=a+("\ncounter_rows_removed: "+xb);a=a+("\nrenderedRows: "+Va);a=a+("\nnumVisibleRows: "+Ca);a=a+("\nmaxSupportedCssHeight: "+A);a=a+("\nn(umber of pages): "+ga);a=a+("\n(current) page: "+fa);a=a+("\npage height (ph): "+ha);a=a+("\nscrollDir: "+Z);alert(a)};this.eval=function(a){return eval(a)};e.extend(this,{slickGridVersion:"2.0",onScroll:new Slick.Event,
onSort:new Slick.Event,onHeaderContextMenu:new Slick.Event,onHeaderClick:new Slick.Event,onMouseEnter:new Slick.Event,onMouseLeave:new Slick.Event,onClick:new Slick.Event,onDblClick:new Slick.Event,onContextMenu:new Slick.Event,onKeyDown:new Slick.Event,onAddNewRow:new Slick.Event,onValidationError:new Slick.Event,onViewportChanged:new Slick.Event,onColumnsReordered:new Slick.Event,onColumnsResized:new Slick.Event,onCellChange:new Slick.Event,onBeforeEditCell:new Slick.Event,onBeforeCellEditorDestroy:new Slick.Event,
onBeforeDestroy:new Slick.Event,onActiveCellChanged:new Slick.Event,onActiveCellPositionChanged:new Slick.Event,onDragInit:new Slick.Event,onDragStart:new Slick.Event,onDrag:new Slick.Event,onDragEnd:new Slick.Event,onSelectedRowsChanged:new Slick.Event,onCellCssStylesChanged:new Slick.Event,registerPlugin:function(a){O.unshift(a);a.init(i)},unregisterPlugin:gb,getColumns:function(){return f},setColumns:ob,getColumnIndex:Na,updateColumnHeader:function(a,b,c){if(H){var a=I[a],d=t.children().eq(a);
if(d){f[a].name=b;f[a].toolTip=c;d.attr("title",c||b||"").children().eq(0).html(b)}}},setSortColumn:function(a,b){ta([{columnId:a,sortAsc:b}])},setSortColumns:ta,getSortColumns:function(){return r},autosizeColumns:Qa,getOptions:function(){return d},setOptions:function(a){if(p().commitCurrentEdit()){L();d.enableAddRow!==a.enableAddRow&&zb(q());d=e.extend(d,a);v.css("overflow-y",d.autoHeight?"hidden":"auto");J()}},getData:function(){return g},getDataLength:q,getDataItem:C,setData:function(a,b){g=a;
W();Da();b&&ea(0)},getSelectionModel:function(){return F},setSelectionModel:function(a){if(F){F.onSelectedRangesChanged.unsubscribe(rb);F.destroy&&F.destroy()}if(F=a){F.init(i);F.onSelectedRangesChanged.subscribe(rb)}},getSelectedRows:ub,setSelectedRows:function(a){if(!F)throw"Selection model is not set";F.setSelectedRanges(pc(a))},render:J,invalidate:function(){Da();W();J()},invalidateRow:zb,invalidateRows:yb,invalidateAllRows:W,updateCell:function(a,b){var c=E(a,b);if(c){var d=f[b],e=C(a);if(k&&
m===a&&u===b)k.loadValue(e);else{c.innerHTML=e?ya(a,d)(a,b,za(e,d),d,e):"";Xa(a)}}},updateRow:Wa,getViewport:xa,getRenderedRange:Ab,resizeCanvas:K,updateRowCount:Da,scrollRowIntoView:sa,getCanvasNode:function(){return B[0]},focus:S,getCellFromPoint:function(a,b){for(var c=Math.floor((b+w)/d.rowHeight),e=0,g=0,i=0;i<f.length&&g<a;i++){g=g+f[i].width;e++}e<0&&(e=0);return{row:c,cell:e-1}},getCellFromEvent:ra,getActiveCell:Ob,setActiveCell:function(a,b){if(H&&!(a>q()||a<0||b>=f.length||b<0)&&d.enableCellNavigation){sa(a,
false);ka(E(a,b),false)}},getActiveCellNode:function(){return o},getActiveCellPosition:Qb,resetActiveCell:function(){ka(null,false)},editActiveCell:Ga,getCellEditor:function(){return k},getCellNode:E,getCellNodeBox:function(a,b){if(!ab(a,b))return null;for(var c=a*d.rowHeight-w,e=c+d.rowHeight-1,g=0,i=0;i<b;i++)g=g+f[i].width;return{top:c,left:g,bottom:e,right:g+f[b].width}},canCellBeSelected:sb,canCellBeActive:T,navigatePrev:Lb,navigateNext:Jb,navigateUp:Ib,navigateDown:Fa,navigateLeft:Gb,navigateRight:Hb,
gotoCell:Mb,getTopPanel:function(){return Tb[0]},showTopPanel:function(){d.showTopPanel=true;aa.slideDown("fast",K)},hideTopPanel:function(){d.showTopPanel=false;aa.slideUp("fast",K)},showHeaderRowColumns:function(){d.showHeaderRow=true;Q.slideDown("fast",K)},hideHeaderRowColumns:function(){d.showHeaderRow=false;Q.slideUp("fast",K)},getHeaderRow:function(){return da[0]},getHeaderRowColumn:function(a){a=I[a];return(a=da.children().eq(a))&&a[0]},getGridPosition:function(){return Ia(n[0])},flashCell:function(a,
b,c){c=c||100;if(x[a]){var f=e(E(a,b)),g=function(a){a&&setTimeout(function(){f.queue(function(){f.toggleClass(d.cellFlashingCssClass).dequeue();g(a-1)})},c)};g(4)}},addCellCssStyles:function(a,b){if(D[a])throw"addCellCssStyles: cell CSS hash with key '"+a+"' already exists.";D[a]=b;$a(b,null);l(i.onCellCssStylesChanged,{key:a,hash:b})},setCellCssStyles:tb,removeCellCssStyles:function(a){if(D[a]){$a(null,D[a]);delete D[a];l(i.onCellCssStylesChanged,{key:a,hash:null})}},getCellCssStyles:function(a){return D[a]},
init:fb,destroy:function(){p().cancelCurrentEdit();l(i.onBeforeDestroy,{});for(var a=0;a<O.length;a++)gb(O[a]);d.enableColumnReorder&&t.sortable&&t.sortable("destroy");B.parents().unbind("scroll.slickgrid");n.unbind(".slickgrid");X.remove();Y=null;B.unbind("draginit dragstart dragend drag");n.empty().removeClass(z)},getEditorLock:p,getEditController:function(){return Ha}});n=e(ba);if(n.length<1)throw Error("SlickGrid requires a valid container, "+ba+" does not exist in the DOM.");A=A||ic();G=G||Ub();
d=e.extend({},qc,d);La.width=d.defaultColumnWidth;if(d.enableColumnReorder&&!e.fn.sortable)throw Error("SlickGrid's 'enableColumnReorder = true' option requires jquery-ui.sortable module to be loaded");Ha={commitCurrentEdit:function(){var a=C(m),b=f[u];if(k){if(k.isValueChanged()){var c=k.validate();if(c.valid){if(m<q()){c={row:m,cell:u,editor:k,serializedValue:k.serializeValue(),prevSerializedValue:Pb,execute:function(){this.editor.applyValue(a,this.serializedValue);Wa(this.row)},undo:function(){this.editor.applyValue(a,
this.prevSerializedValue);Wa(this.row)}};if(d.editCommandHandler){L();d.editCommandHandler(a,b,c)}else{c.execute();L()}l(i.onCellChange,{row:m,cell:u,item:a})}else{c={};k.applyValue(c,k.serializeValue());L();l(i.onAddNewRow,{item:c,column:b})}return!p().isActive()}e(o).addClass("invalid");e(o).stop(true,true).effect("highlight",{color:"red"},300);l(i.onValidationError,{editor:k,cellNode:o,validationResults:c,row:m,cell:u,column:b});k.focus();return false}L()}return true},cancelCurrentEdit:function(){L();
return true}};n.empty().css("overflow","hidden").css("outline",0).addClass(z).addClass("ui-widget");/relative|absolute|fixed/.test(n.css("position"))||n.css("position","relative");Ka=e("<div tabIndex='0' hideFocus style='position:fixed;width:0;height:0;top:0;left:0;outline:0;'></div>").appendTo(n);ca=e("<div class='slick-header ui-state-default' style='overflow:hidden;position:relative;' />").appendTo(n);t=e("<div class='slick-header-columns' style='width:10000px; left:-1000px' />").appendTo(ca);
Q=e("<div class='slick-headerrow ui-state-default' style='overflow:hidden;position:relative;' />").appendTo(n);da=e("<div class='slick-headerrow-columns' />").appendTo(Q);aa=e("<div class='slick-top-panel-scroller ui-state-default' style='overflow:hidden;position:relative;' />").appendTo(n);Tb=e("<div class='slick-top-panel' style='width:10000px' />").appendTo(aa);d.showTopPanel||aa.hide();d.showHeaderRow||Q.hide();v=e("<div class='slick-viewport' style='width:100%;overflow:auto;outline:0;position:relative;;'>").appendTo(n);
v.css("overflow-y",d.autoHeight?"hidden":"auto");B=e("<div class='grid-canvas' />").appendTo(v);d.explicitInitialization||fb()}}});var G,A})(jQuery);