=O||i<=1||!z.isHorizontal()?z.labelRotation=a:(e=(t=z._getLabelSizes()).widest.width,o=t.highest.height-t.highest.offset,p=Math.min(z.maxWidth,z.chart.width-e),e+6>(b=c.offset?z.maxWidth/i:p/(i-1))&&(b=p/(i-(c.offset?.5:1)),n=z.maxHeight-cp(c.gridLines)-r.padding-rp(c.scaleLabel),M=Math.sqrt(e*e+o*o),s=zt.toDegrees(Math.min(Math.asin(Math.min((t.highest.height+6)/b,1)),Math.asin(Math.min(n/M,1))-Math.asin(o/M))),s=Math.max(a,Math.min(O,s))),z.labelRotation=s)},afterCalculateTickRotation:function(){zt.callback(this.options.afterCalculateTickRotation,[this])},beforeFit:function(){zt.callback(this.options.beforeFit,[this])},fit:function(){var t=this,e=t.minSize={width:0,height:0},o=t.chart,p=t.options,b=p.ticks,n=p.scaleLabel,M=p.gridLines,z=t._isVisible(),c="bottom"===p.position,r=t.isHorizontal();if(r?e.width=t.maxWidth:z&&(e.width=cp(M)+rp(n)),r?z&&(e.height=cp(M)+rp(n)):e.height=t.maxHeight,b.display&&z){var i=ap(b),a=t._getLabelSizes(),O=a.first,s=a.last,l=a.widest,d=a.highest,A=.4*i.minor.lineHeight,u=b.padding;if(r){var f=0!==t.labelRotation,q=zt.toRadians(t.labelRotation),h=Math.cos(q),W=Math.sin(q),m=W*l.width+h*(d.height-(f?d.offset:0))+(f?0:A);e.height=Math.min(t.maxHeight,e.height+m+u);var g,v,R=t.getPixelForTick(0)-t.left,y=t.right-t.getPixelForTick(t.getTicks().length-1);f?(g=c?h*O.width+W*O.offset:W*(O.height-O.offset),v=c?W*(s.height-s.offset):h*s.width+W*s.offset):(g=O.width/2,v=s.width/2),t.paddingLeft=Math.max((g-R)*t.width/(t.width-R),0)+3,t.paddingRight=Math.max((v-y)*t.width/(t.width-y),0)+3}else{var B=b.mirror?0:l.width+u+A;e.width=Math.min(t.maxWidth,e.width+B),t.paddingTop=O.height/2,t.paddingBottom=s.height/2}}t.handleMargins(),r?(t.width=t._length=o.width-t.margins.left-t.margins.right,t.height=e.height):(t.width=e.width,t.height=t._length=o.height-t.margins.top-t.margins.bottom)},handleMargins:function(){var t=this;t.margins&&(t.margins.left=Math.max(t.paddingLeft,t.margins.left),t.margins.top=Math.max(t.paddingTop,t.margins.top),t.margins.right=Math.max(t.paddingRight,t.margins.right),t.margins.bottom=Math.max(t.paddingBottom,t.margins.bottom))},afterFit:function(){zt.callback(this.options.afterFit,[this])},isHorizontal:function(){var t=this.options.position;return"top"===t||"bottom"===t},isFullWidth:function(){return this.options.fullWidth},getRightValue:function(t){if(ep(t))return NaN;if(("number"==typeof t||t instanceof Number)&&!isFinite(t))return NaN;if(t)if(this.isHorizontal()){if(void 0!==t.x)return this.getRightValue(t.x)}else if(void 0!==t.y)return this.getRightValue(t.y);return t},_convertTicksToLabels:function(t){var e,o,p,b=this;for(b.ticks=t.map((function(t){return t.value})),b.beforeTickToLabelConversion(),e=b.convertTicksToLabels(t)||b.ticks,b.afterTickToLabelConversion(),o=0,p=t.length;op-1?null:e.getPixelForDecimal(t*b+(o?b/2:0))},getPixelForDecimal:function(t){var e=this;return e._reversePixels&&(t=1-t),e._startPixel+t*e._length},getDecimalForPixel:function(t){var e=(t-this._startPixel)/this._length;return this._reversePixels?1-e:e},getBasePixel:function(){return this.getPixelForValue(this.getBaseValue())},getBaseValue:function(){var t=this,e=t.min,o=t.max;return t.beginAtZero?0:e<0&&o<0?o:e>0&&o>0?e:0},_autoSkip:function(t){var e,o,p,b,n=this,M=n.options.ticks,z=n._length,c=M.maxTicksLimit||z/n._tickSize()+1,r=M.major.enabled?dp(t):[],i=r.length,a=r[0],O=r[i-1];if(i>c)return Ap(t,r,i/c),Op(t);if(p=lp(r,t,z,c),i>0){for(e=0,o=i-1;e1?(O-a)/(i-1):null,up(t,p,zt.isNullOrUndef(b)?0:a-b,a),up(t,p,O,zt.isNullOrUndef(b)?t.length:O+b),Op(t)}return up(t,p),Op(t)},_tickSize:function(){var t=this,e=t.options.ticks,o=zt.toRadians(t.labelRotation),p=Math.abs(Math.cos(o)),b=Math.abs(Math.sin(o)),n=t._getLabelSizes(),M=e.autoSkipPadding||0,z=n?n.widest.width+M:0,c=n?n.highest.height+M:0;return t.isHorizontal()?c*p>z*b?z/p:c/b:c*b=0&&(M=t),void 0!==n&&(t=o.indexOf(n))>=0&&(z=t),e.minIndex=M,e.maxIndex=z,e.min=o[M],e.max=o[z]},buildTicks:function(){var t=this,e=t._getLabels(),o=t.minIndex,p=t.maxIndex;t.ticks=0===o&&p===e.length-1?e:e.slice(o,p+1)},getLabelForIndex:function(t,e){var o=this,p=o.chart;return p.getDatasetMeta(e).controller._getValueScaleId()===o.id?o.getRightValue(p.data.datasets[e].data[t]):o._getLabels()[t]},_configure:function(){var t=this,e=t.options.offset,o=t.ticks;qp.prototype._configure.call(t),t.isHorizontal()||(t._reversePixels=!t._reversePixels),o&&(t._startValue=t.minIndex-(e?.5:0),t._valueRange=Math.max(o.length-(e?0:1),1))},getPixelForValue:function(t,e,o){var p,b,n,M=this;return hp(e)||hp(o)||(t=M.chart.data.datasets[o].data[e]),hp(t)||(p=M.isHorizontal()?t.x:t.y),(void 0!==p||void 0!==t&&isNaN(e))&&(b=M._getLabels(),t=zt.valueOrDefault(p,t),e=-1!==(n=b.indexOf(t))?n:e,isNaN(e)&&(e=t)),M.getPixelForDecimal((e-M._startValue)/M._valueRange)},getPixelForTick:function(t){var e=this.ticks;return t<0||t>e.length-1?null:this.getPixelForValue(e[t],t+this.minIndex)},getValueForPixel:function(t){var e=this,o=Math.round(e._startValue+e.getDecimalForPixel(t)*e._valueRange);return Math.min(Math.max(o,0),e.ticks.length-1)},getBasePixel:function(){return this.bottom}}),gp=Wp;mp._defaults=gp;var vp=zt.noop,Rp=zt.isNullOrUndef;function yp(t,e){var o,p,b,n,M=[],z=1e-14,c=t.stepSize,r=c||1,i=t.maxTicks-1,a=t.min,O=t.max,s=t.precision,l=e.min,d=e.max,A=zt.niceNum((d-l)/i/r)*r;if(Ai&&(A=zt.niceNum(n*A/i/r)*r),c||Rp(s)?o=Math.pow(10,zt._decimalPlaces(A)):(o=Math.pow(10,s),A=Math.ceil(A*o)/o),p=Math.floor(l/A)*A,b=Math.ceil(d/A)*A,c&&(!Rp(a)&&zt.almostWhole(a/A,A/1e3)&&(p=a),!Rp(O)&&zt.almostWhole(O/A,A/1e3)&&(b=O)),n=(b-p)/A,n=zt.almostEquals(n,Math.round(n),A/1e3)?Math.round(n):Math.ceil(n),p=Math.round(p*o)/o,b=Math.round(b*o)/o,M.push(Rp(a)?p:a);for(var u=1;u0&&p>0&&(t.min=0)}var b=void 0!==e.min||void 0!==e.suggestedMin,n=void 0!==e.max||void 0!==e.suggestedMax;void 0!==e.min?t.min=e.min:void 0!==e.suggestedMin&&(null===t.min?t.min=e.suggestedMin:t.min=Math.min(t.min,e.suggestedMin)),void 0!==e.max?t.max=e.max:void 0!==e.suggestedMax&&(null===t.max?t.max=e.suggestedMax:t.max=Math.max(t.max,e.suggestedMax)),b!==n&&t.min>=t.max&&(b?t.max=t.min+1:t.min=t.max-1),t.min===t.max&&(t.max++,e.beginAtZero||t.min--)},getTickLimit:function(){var t,e=this,o=e.options.ticks,p=o.stepSize,b=o.maxTicksLimit;return p?t=Math.ceil(e.max/p)-Math.floor(e.min/p)+1:(t=e._computeTickLimit(),b=b||11),b&&(t=Math.min(b,t)),t},_computeTickLimit:function(){return Number.POSITIVE_INFINITY},handleDirectionalChanges:vp,buildTicks:function(){var t=this,e=t.options.ticks,o=t.getTickLimit(),p={maxTicks:o=Math.max(2,o),min:e.min,max:e.max,precision:e.precision,stepSize:zt.valueOrDefault(e.fixedStepSize,e.stepSize)},b=t.ticks=yp(p,t);t.handleDirectionalChanges(),t.max=zt.max(b),t.min=zt.min(b),e.reverse?(b.reverse(),t.start=t.max,t.end=t.min):(t.start=t.min,t.end=t.max)},convertTicksToLabels:function(){var t=this;t.ticksAsNumbers=t.ticks.slice(),t.zeroLineIndex=t.ticks.indexOf(0),qp.prototype.convertTicksToLabels.call(t)},_configure:function(){var t,e=this,o=e.getTicks(),p=e.min,b=e.max;qp.prototype._configure.call(e),e.options.offset&&o.length&&(p-=t=(b-p)/Math.max(o.length-1,1)/2,b+=t),e._startValue=p,e._endValue=b,e._valueRange=b-p}}),Lp={position:"left",ticks:{callback:Zo.formatters.linear}},Xp=0,_p=1;function Np(t,e,o){var p=[o.type,void 0===e&&void 0===o.stack?o.index:"",o.stack].join(".");return void 0===t[p]&&(t[p]={pos:[],neg:[]}),t[p]}function wp(t,e,o,p){var b,n,M=t.options,z=Np(e,M.stacked,o),c=z.pos,r=z.neg,i=p.length;for(b=0;be.length-1?null:this.getPixelForValue(e[t])}}),Cp=Lp;Tp._defaults=Cp;var Sp=zt.valueOrDefault,kp=zt.math.log10;function Ep(t,e){var o,p,b=[],n=Sp(t.min,Math.pow(10,Math.floor(kp(e.min)))),M=Math.floor(kp(e.max)),z=Math.ceil(e.max/Math.pow(10,M));0===n?(o=Math.floor(kp(e.minNotZero)),p=Math.floor(e.minNotZero/Math.pow(10,o)),b.push(n),n=p*Math.pow(10,o)):(o=Math.floor(kp(n)),p=Math.floor(n/Math.pow(10,o)));var c=o<0?Math.pow(10,Math.abs(o)):1;do{b.push(n),10==++p&&(p=1,c=++o>=0?1:c),n=Math.round(p*Math.pow(10,o)*c)/c}while(o=0?t:e}var jp=qp.extend({determineDataLimits:function(){var t,e,o,p,b,n,M=this,z=M.options,c=M.chart,r=c.data.datasets,i=M.isHorizontal();function a(t){return i?t.xAxisID===M.id:t.yAxisID===M.id}M.min=Number.POSITIVE_INFINITY,M.max=Number.NEGATIVE_INFINITY,M.minNotZero=Number.POSITIVE_INFINITY;var O=z.stacked;if(void 0===O)for(t=0;t0){var e=zt.min(t),o=zt.max(t);M.min=Math.min(M.min,e),M.max=Math.max(M.max,o)}}))}else for(t=0;t0?t.minNotZero=t.min:t.max<1?t.minNotZero=Math.pow(10,Math.floor(kp(t.max))):t.minNotZero=o)},buildTicks:function(){var t=this,e=t.options.ticks,o=!t.isHorizontal(),p={min:Pp(e.min),max:Pp(e.max)},b=t.ticks=Ep(p,t);t.max=zt.max(b),t.min=zt.min(b),e.reverse?(o=!o,t.start=t.max,t.end=t.min):(t.start=t.min,t.end=t.max),o&&b.reverse()},convertTicksToLabels:function(){this.tickValues=this.ticks.slice(),qp.prototype.convertTicksToLabels.call(this)},getLabelForIndex:function(t,e){return this._getScaleLabel(this.chart.data.datasets[e].data[t])},getPixelForTick:function(t){var e=this.tickValues;return t<0||t>e.length-1?null:this.getPixelForValue(e[t])},_getFirstTickValue:function(t){var e=Math.floor(kp(t));return Math.floor(t/Math.pow(10,e))*Math.pow(10,e)},_configure:function(){var t=this,e=t.min,o=0;qp.prototype._configure.call(t),0===e&&(e=t._getFirstTickValue(t.minNotZero),o=Sp(t.options.ticks.fontSize,Q.global.defaultFontSize)/t._length),t._startValue=kp(e),t._valueOffset=o,t._valueRange=(kp(t.max)-kp(e))/(1-o)},getPixelForValue:function(t){var e=this,o=0;return(t=+e.getRightValue(t))>e.min&&t>0&&(o=(kp(t)-e._startValue)/e._valueRange+e._valueOffset),e.getPixelForDecimal(o)},getValueForPixel:function(t){var e=this,o=e.getDecimalForPixel(t);return 0===o&&0===e.min?0:Math.pow(10,e._startValue+(o-e._valueOffset)*e._valueRange)}}),Ip=Dp;jp._defaults=Ip;var Fp=zt.valueOrDefault,Hp=zt.valueAtIndexOrDefault,Up=zt.options.resolve,Vp={display:!0,animate:!0,position:"chartArea",angleLines:{display:!0,color:"rgba(0,0,0,0.1)",lineWidth:1,borderDash:[],borderDashOffset:0},gridLines:{circular:!1},ticks:{showLabelBackdrop:!0,backdropColor:"rgba(255,255,255,0.75)",backdropPaddingY:2,backdropPaddingX:2,callback:Zo.formatters.linear},pointLabels:{display:!0,fontSize:10,callback:function(t){return t}}};function $p(t){var e=t.ticks;return e.display&&t.display?Fp(e.fontSize,Q.global.defaultFontSize)+2*e.backdropPaddingY:0}function Yp(t,e,o){return zt.isArray(o)?{w:zt.longestText(t,t.font,o),h:o.length*e}:{w:t.measureText(o).width,h:e}}function Gp(t,e,o,p,b){return t===p||t===b?{start:e-o/2,end:e+o/2}:tb?{start:e-o,end:e}:{start:e,end:e+o}}function Jp(t){var e,o,p,b=zt.options._parseFont(t.options.pointLabels),n={l:0,r:t.width,t:0,b:t.height-t.paddingTop},M={};t.ctx.font=b.string,t._pointLabelSizes=[];var z=t.chart.data.labels.length;for(e=0;en.r&&(n.r=i.end,M.r=c),a.startn.b&&(n.b=a.end,M.b=c)}t.setReductions(t.drawingArea,n,M)}function Kp(t){return 0===t||180===t?"center":t<180?"left":"right"}function Qp(t,e,o,p){var b,n,M=o.y+p/2;if(zt.isArray(e))for(b=0,n=e.length;b270||t<90)&&(o.y-=e.h)}function tb(t){var e=t.ctx,o=t.options,p=o.pointLabels,b=$p(o),n=t.getDistanceFromCenterForValue(o.ticks.reverse?t.min:t.max),M=zt.options._parseFont(p);e.save(),e.font=M.string,e.textBaseline="middle";for(var z=t.chart.data.labels.length-1;z>=0;z--){var c=0===z?b/2:0,r=t.getPointPosition(z,n+c+5),i=Hp(p.fontColor,z,Q.global.defaultFontColor);e.fillStyle=i;var a=t.getIndexAngle(z),O=zt.toDegrees(a);e.textAlign=Kp(O),Zp(O,t._pointLabelSizes[z],r),Qp(e,t.pointLabels[z],r,M.lineHeight)}e.restore()}function eb(t,e,o,p){var b,n=t.ctx,M=e.circular,z=t.chart.data.labels.length,c=Hp(e.color,p-1),r=Hp(e.lineWidth,p-1);if((M||z)&&c&&r){if(n.save(),n.strokeStyle=c,n.lineWidth=r,n.setLineDash&&(n.setLineDash(e.borderDash||[]),n.lineDashOffset=e.borderDashOffset||0),n.beginPath(),M)n.arc(t.xCenter,t.yCenter,o,0,2*Math.PI);else{b=t.getPointPosition(0,o),n.moveTo(b.x,b.y);for(var i=1;i0&&p>0?o:0)},_drawGrid:function(){var t,e,o,p=this,b=p.ctx,n=p.options,M=n.gridLines,z=n.angleLines,c=Fp(z.lineWidth,M.lineWidth),r=Fp(z.color,M.color);if(n.pointLabels.display&&tb(p),M.display&&zt.each(p.ticks,(function(t,o){0!==o&&(e=p.getDistanceFromCenterForValue(p.ticksAsNumbers[o]),eb(p,M,e,o))})),z.display&&c&&r){for(b.save(),b.lineWidth=c,b.strokeStyle=r,b.setLineDash&&(b.setLineDash(Up([z.borderDash,M.borderDash,[]])),b.lineDashOffset=Up([z.borderDashOffset,M.borderDashOffset,0])),t=p.chart.data.labels.length-1;t>=0;t--)e=p.getDistanceFromCenterForValue(n.ticks.reverse?p.min:p.max),o=p.getPointPosition(t,e),b.beginPath(),b.moveTo(p.xCenter,p.yCenter),b.lineTo(o.x,o.y),b.stroke();b.restore()}},_drawLabels:function(){var t=this,e=t.ctx,o=t.options.ticks;if(o.display){var p,b,n=t.getIndexAngle(0),M=zt.options._parseFont(o),z=Fp(o.fontColor,Q.global.defaultFontColor);e.save(),e.font=M.string,e.translate(t.xCenter,t.yCenter),e.rotate(n),e.textAlign="center",e.textBaseline="middle",zt.each(t.ticks,(function(n,c){(0!==c||o.reverse)&&(p=t.getDistanceFromCenterForValue(t.ticksAsNumbers[c]),o.showLabelBackdrop&&(b=e.measureText(n).width,e.fillStyle=o.backdropColor,e.fillRect(-b/2-o.backdropPaddingX,-p-M.size/2-o.backdropPaddingY,b+2*o.backdropPaddingX,M.size+2*o.backdropPaddingY)),e.fillStyle=z,e.fillText(n,0,-p))})),e.restore()}},_drawTitle:zt.noop}),bb=Vp;pb._defaults=bb;var nb=zt._deprecated,Mb=zt.options.resolve,zb=zt.valueOrDefault,cb=Number.MIN_SAFE_INTEGER||-9007199254740991,rb=Number.MAX_SAFE_INTEGER||9007199254740991,ib={millisecond:{common:!0,size:1,steps:1e3},second:{common:!0,size:1e3,steps:60},minute:{common:!0,size:6e4,steps:60},hour:{common:!0,size:36e5,steps:24},day:{common:!0,size:864e5,steps:30},week:{common:!1,size:6048e5,steps:4},month:{common:!0,size:2628e6,steps:12},quarter:{common:!1,size:7884e6,steps:4},year:{common:!0,size:3154e7}},ab=Object.keys(ib);function Ob(t,e){return t-e}function sb(t){var e,o,p,b={},n=[];for(e=0,o=t.length;ee&&z=0&&M<=z;){if(b=t[(p=M+z>>1)-1]||null,n=t[p],!b)return{lo:null,hi:n};if(n[e]o))return{lo:b,hi:n};z=p-1}}return{lo:n,hi:null}}function fb(t,e,o,p){var b=ub(t,e,o),n=b.lo?b.hi?b.lo:t[t.length-2]:t[0],M=b.lo?b.hi?b.hi:t[t.length-1]:t[1],z=M[e]-n[e],c=z?(o-n[e])/z:0,r=(M[p]-n[p])*c;return n[p]+r}function qb(t,e){var o=t._adapter,p=t.options.time,b=p.parser,n=b||p.format,M=e;return"function"==typeof b&&(M=b(M)),zt.isFinite(M)||(M="string"==typeof n?o.parse(M,n):o.parse(M)),null!==M?+M:(b||"function"!=typeof n||(M=n(e),zt.isFinite(M)||(M=o.parse(M))),M)}function hb(t,e){if(zt.isNullOrUndef(e))return null;var o=t.options.time,p=qb(t,t.getRightValue(e));return null===p||o.round&&(p=+t._adapter.startOf(p,o.round)),p}function Wb(t,e,o,p){var b,n,M,z=ab.length;for(b=ab.indexOf(t);b=ab.indexOf(o);n--)if(M=ab[n],ib[M].common&&t._adapter.diff(b,p,M)>=e-1)return M;return ab[o?ab.indexOf(o):0]}function gb(t){for(var e=ab.indexOf(t)+1,o=ab.length;e1e5*r)throw e+" and "+o+" are too far apart with stepSize of "+r+" "+c;for(b=a;b=0&&(e[n].major=!0);return e}function Bb(t,e,o){var p,b,n=[],M={},z=e.length;for(p=0;p1?sb(l).sort(Ob):l.sort(Ob),O=Math.min(O,l[0]),s=Math.max(s,l[l.length-1])),O=hb(z,lb(i))||O,s=hb(z,db(i))||s,O=O===rb?+r.startOf(Date.now(),a):O,s=s===cb?+r.endOf(Date.now(),a)+1:s,z.min=Math.min(O,s),z.max=Math.max(O+1,s),z._table=[],z._timestamps={data:l,datasets:d,labels:A}},buildTicks:function(){var t,e,o,p=this,b=p.min,n=p.max,M=p.options,z=M.ticks,c=M.time,r=p._timestamps,i=[],a=p.getLabelCapacity(b),O=z.source,s=M.distribution;for(r="data"===O||"auto"===O&&"series"===s?r.data:"labels"===O?r.labels:vb(p,b,n,a),"ticks"===M.bounds&&r.length&&(b=r[0],n=r[r.length-1]),b=hb(p,lb(M))||b,n=hb(p,db(M))||n,t=0,e=r.length;t=b&&o<=n&&i.push(o);return p.min=b,p.max=n,p._unit=c.unit||(z.autoSkip?Wb(c.minUnit,p.min,p.max,a):mb(p,i.length,c.minUnit,p.min,p.max)),p._majorUnit=z.major.enabled&&"year"!==p._unit?gb(p._unit):void 0,p._table=Ab(p._timestamps.data,b,n,s),p._offsets=Rb(p._table,i,b,n,M),z.reverse&&i.reverse(),Bb(p,i,p._majorUnit)},getLabelForIndex:function(t,e){var o=this,p=o._adapter,b=o.chart.data,n=o.options.time,M=b.labels&&t=0&&t0?z:1}}),_b=Lb;Xb._defaults=_b;var Nb={category:mp,linear:Tp,logarithmic:jp,radialLinear:pb,time:Xb},wb={datetime:"MMM D, YYYY, h:mm:ss a",millisecond:"h:mm:ss.SSS a",second:"h:mm:ss a",minute:"h:mm a",hour:"hA",day:"MMM D",week:"ll",month:"MMM YYYY",quarter:"[Q]Q - YYYY",year:"YYYY"};Qo._date.override("function"==typeof t?{_id:"moment",formats:function(){return wb},parse:function(e,o){return"string"==typeof e&&"string"==typeof o?e=t(e,o):e instanceof t||(e=t(e)),e.isValid()?e.valueOf():null},format:function(e,o){return t(e).format(o)},add:function(e,o,p){return t(e).add(o,p).valueOf()},diff:function(e,o,p){return t(e).diff(t(o),p)},startOf:function(e,o,p){return e=t(e),"isoWeek"===o?e.isoWeekday(p).valueOf():e.startOf(o).valueOf()},endOf:function(e,o){return t(e).endOf(o).valueOf()},_create:function(e){return t(e)}}:{}),Q._set("global",{plugins:{filler:{propagate:!0}}});var xb={dataset:function(t){var e=t.fill,o=t.chart,p=o.getDatasetMeta(e),b=p&&o.isDatasetVisible(e)&&p.dataset._children||[],n=b.length||0;return n?function(t,e){return e=o)&&p;switch(n){case"bottom":return"start";case"top":return"end";case"zero":return"origin";case"origin":case"start":case"end":return n;default:return!1}}function Cb(t){var e,o=t.el._model||{},p=t.el._scale||{},b=t.fill,n=null;if(isFinite(b))return null;if("start"===b?n=void 0===o.scaleBottom?p.bottom:o.scaleBottom:"end"===b?n=void 0===o.scaleTop?p.top:o.scaleTop:void 0!==o.scaleZero?n=o.scaleZero:p.getBasePixel&&(n=p.getBasePixel()),null!=n){if(void 0!==n.x&&void 0!==n.y)return n;if(zt.isFinite(n))return{x:(e=p.isHorizontal())?n:null,y:e?null:n}}return null}function Sb(t){var e,o,p,b,n,M=t.el._scale,z=M.options,c=M.chart.data.labels.length,r=t.fill,i=[];if(!c)return null;for(e=z.ticks.reverse?M.max:M.min,o=z.ticks.reverse?M.min:M.max,p=M.getPointPositionForValue(0,e),b=0;b0;--n)zt.canvas.lineTo(t,o[n],o[n-1],!0);else for(M=o[0].cx,z=o[0].cy,c=Math.sqrt(Math.pow(o[0].x-M,2)+Math.pow(o[0].y-z,2)),n=b-1;n>0;--n)t.arc(M,z,c,o[n].angle,o[n-1].angle,!0)}}function Ib(t,e,o,p,b,n){var M,z,c,r,i,a,O,s,l=e.length,d=p.spanGaps,A=[],u=[],f=0,q=0;for(t.beginPath(),M=0,z=l;M=0;--o)(e=c[o].$filler)&&e.visible&&(b=(p=e.el)._view,n=p._children||[],M=e.mapper,z=b.backgroundColor||Q.global.defaultColor,M&&z&&n.length&&(zt.canvas.clipArea(r,t.chartArea),Ib(r,n,M,b,z,p._loop),zt.canvas.unclipArea(r)))}},Hb=zt.rtl.getRtlAdapter,Ub=zt.noop,Vb=zt.valueOrDefault;function $b(t,e){return t.usePointStyle&&t.boxWidth>e?e:t.boxWidth}Q._set("global",{legend:{display:!0,position:"top",align:"center",fullWidth:!0,reverse:!1,weight:1e3,onClick:function(t,e){var o=e.datasetIndex,p=this.chart,b=p.getDatasetMeta(o);b.hidden=null===b.hidden?!p.data.datasets[o].hidden:null,p.update()},onHover:null,onLeave:null,labels:{boxWidth:40,padding:10,generateLabels:function(t){var e=t.data.datasets,o=t.options.legend||{},p=o.labels&&o.labels.usePointStyle;return t._getSortedDatasetMetas().map((function(o){var b=o.controller.getStyle(p?0:void 0);return{text:e[o.index].label,fillStyle:b.backgroundColor,hidden:!t.isDatasetVisible(o.index),lineCap:b.borderCapStyle,lineDash:b.borderDash,lineDashOffset:b.borderDashOffset,lineJoin:b.borderJoinStyle,lineWidth:b.borderWidth,strokeStyle:b.borderColor,pointStyle:b.pointStyle,rotation:b.rotation,datasetIndex:o.index}}),this)}}},legendCallback:function(t){var e,o,p,b=document.createElement("ul"),n=t.data.datasets;for(b.setAttribute("class",t.id+"-legend"),e=0,o=n.length;ec.width)&&(a+=M+o.padding,i[i.length-(e>0?0:1)]=0),z[e]={left:0,top:0,width:p,height:M},i[i.length-1]+=p+o.padding})),c.height+=a}else{var O=o.padding,s=t.columnWidths=[],l=t.columnHeights=[],d=o.padding,A=0,u=0;zt.each(t.legendItems,(function(t,e){var p=$b(o,M)+M/2+b.measureText(t.text).width;e>0&&u+M+2*O>c.height&&(d+=A+o.padding,s.push(A),l.push(u),A=0,u=0),A=Math.max(A,p),u+=M+O,z[e]={left:0,top:0,width:p,height:M}})),d+=A,s.push(A),l.push(u),c.width+=d}t.width=c.width,t.height=c.height}else t.width=c.width=t.height=c.height=0},afterFit:Ub,isHorizontal:function(){return"top"===this.options.position||"bottom"===this.options.position},draw:function(){var t=this,e=t.options,o=e.labels,p=Q.global,b=p.defaultColor,n=p.elements.line,M=t.height,z=t.columnHeights,c=t.width,r=t.lineWidths;if(e.display){var i,a=Hb(e.rtl,t.left,t.minSize.width),O=t.ctx,s=Vb(o.fontColor,p.defaultFontColor),l=zt.options._parseFont(o),d=l.size;O.textAlign=a.textAlign("left"),O.textBaseline="middle",O.lineWidth=.5,O.strokeStyle=s,O.fillStyle=s,O.font=l.string;var A=$b(o,d),u=t.legendHitBoxes,f=function(t,e,p){if(!(isNaN(A)||A<=0)){O.save();var M=Vb(p.lineWidth,n.borderWidth);if(O.fillStyle=Vb(p.fillStyle,b),O.lineCap=Vb(p.lineCap,n.borderCapStyle),O.lineDashOffset=Vb(p.lineDashOffset,n.borderDashOffset),O.lineJoin=Vb(p.lineJoin,n.borderJoinStyle),O.lineWidth=M,O.strokeStyle=Vb(p.strokeStyle,b),O.setLineDash&&O.setLineDash(Vb(p.lineDash,n.borderDash)),o&&o.usePointStyle){var z=A*Math.SQRT2/2,c=a.xPlus(t,A/2),r=e+d/2;zt.canvas.drawPoint(O,p.pointStyle,z,c,r,p.rotation)}else O.fillRect(a.leftForLtr(t,A),e,A,d),0!==M&&O.strokeRect(a.leftForLtr(t,A),e,A,d);O.restore()}},q=function(t,e,o,p){var b=d/2,n=a.xPlus(t,A+b),M=e+b;O.fillText(o.text,n,M),o.hidden&&(O.beginPath(),O.lineWidth=2,O.moveTo(n,M),O.lineTo(a.xPlus(n,p),M),O.stroke())},h=function(t,p){switch(e.align){case"start":return o.padding;case"end":return t-p;default:return(t-p+o.padding)/2}},W=t.isHorizontal();i=W?{x:t.left+h(c,r[0]),y:t.top+o.padding,line:0}:{x:t.left+o.padding,y:t.top+h(M,z[0]),line:0},zt.rtl.overrideTextDirection(t.ctx,e.textDirection);var m=d+o.padding;zt.each(t.legendItems,(function(e,p){var b=O.measureText(e.text).width,n=A+d/2+b,s=i.x,l=i.y;a.setWidth(t.minSize.width),W?p>0&&s+n+o.padding>t.left+t.minSize.width&&(l=i.y+=m,i.line++,s=i.x=t.left+h(c,r[i.line])):p>0&&l+m>t.top+t.minSize.height&&(s=i.x=s+t.columnWidths[i.line]+o.padding,i.line++,l=i.y=t.top+h(M,z[i.line]));var g=a.x(s);f(g,l,e),u[p].left=a.leftForLtr(g,u[p].width),u[p].top=l,q(g,l,e,b),W?i.x+=n+o.padding:i.y+=m})),zt.rtl.restoreTextDirection(t.ctx,e.textDirection)}},_getLegendItemAt:function(t,e){var o,p,b,n=this;if(t>=n.left&&t<=n.right&&e>=n.top&&e<=n.bottom)for(b=n.legendHitBoxes,o=0;o=(p=b[o]).left&&t<=p.left+p.width&&e>=p.top&&e<=p.top+p.height)return n.legendItems[o];return null},handleEvent:function(t){var e,o=this,p=o.options,b="mouseup"===t.type?"click":t.type;if("mousemove"===b){if(!p.onHover&&!p.onLeave)return}else{if("click"!==b)return;if(!p.onClick)return}e=o._getLegendItemAt(t.x,t.y),"click"===b?e&&p.onClick&&p.onClick.call(o,t.native,e):(p.onLeave&&e!==o._hoveredItem&&(o._hoveredItem&&p.onLeave.call(o,t.native,o._hoveredItem),o._hoveredItem=e),p.onHover&&e&&p.onHover.call(o,t.native,e))}});function Gb(t,e){var o=new Yb({ctx:t.ctx,options:e,chart:t});Ue.configure(t,o,e),Ue.addBox(t,o),t.legend=o}var Jb={id:"legend",_element:Yb,beforeInit:function(t){var e=t.options.legend;e&&Gb(t,e)},beforeUpdate:function(t){var e=t.options.legend,o=t.legend;e?(zt.mergeIf(e,Q.global.legend),o?(Ue.configure(t,o,e),o.options=e):Gb(t,e)):o&&(Ue.removeBox(t,o),delete t.legend)},afterEvent:function(t,e){var o=t.legend;o&&o.handleEvent(e)}},Kb=zt.noop;Q._set("global",{title:{display:!1,fontStyle:"bold",fullWidth:!0,padding:10,position:"top",text:"",weight:2e3}});var Qb=dt.extend({initialize:function(t){var e=this;zt.extend(e,t),e.legendHitBoxes=[]},beforeUpdate:Kb,update:function(t,e,o){var p=this;return p.beforeUpdate(),p.maxWidth=t,p.maxHeight=e,p.margins=o,p.beforeSetDimensions(),p.setDimensions(),p.afterSetDimensions(),p.beforeBuildLabels(),p.buildLabels(),p.afterBuildLabels(),p.beforeFit(),p.fit(),p.afterFit(),p.afterUpdate(),p.minSize},afterUpdate:Kb,beforeSetDimensions:Kb,setDimensions:function(){var t=this;t.isHorizontal()?(t.width=t.maxWidth,t.left=0,t.right=t.width):(t.height=t.maxHeight,t.top=0,t.bottom=t.height),t.paddingLeft=0,t.paddingTop=0,t.paddingRight=0,t.paddingBottom=0,t.minSize={width:0,height:0}},afterSetDimensions:Kb,beforeBuildLabels:Kb,buildLabels:Kb,afterBuildLabels:Kb,beforeFit:Kb,fit:function(){var t,e=this,o=e.options,p=e.minSize={},b=e.isHorizontal();o.display?(t=(zt.isArray(o.text)?o.text.length:1)*zt.options._parseFont(o).lineHeight+2*o.padding,e.width=p.width=b?e.maxWidth:t,e.height=p.height=b?t:e.maxHeight):e.width=p.width=e.height=p.height=0},afterFit:Kb,isHorizontal:function(){var t=this.options.position;return"top"===t||"bottom"===t},draw:function(){var t=this,e=t.ctx,o=t.options;if(o.display){var p,b,n,M=zt.options._parseFont(o),z=M.lineHeight,c=z/2+o.padding,r=0,i=t.top,a=t.left,O=t.bottom,s=t.right;e.fillStyle=zt.valueOrDefault(o.fontColor,Q.global.defaultFontColor),e.font=M.string,t.isHorizontal()?(b=a+(s-a)/2,n=i+c,p=s-a):(b="left"===o.position?a+c:s-c,n=i+(O-i)/2,p=O-i,r=Math.PI*("left"===o.position?-.5:.5)),e.save(),e.translate(b,n),e.rotate(r),e.textAlign="center",e.textBaseline="middle";var l=o.text;if(zt.isArray(l))for(var d=0,A=0;A{e.read=function(t,e,o,p,b){var n,M,z=8*b-p-1,c=(1<>1,i=-7,a=o?b-1:0,O=o?-1:1,s=t[e+a];for(a+=O,n=s&(1<<-i)-1,s>>=-i,i+=z;i>0;n=256*n+t[e+a],a+=O,i-=8);for(M=n&(1<<-i)-1,n>>=-i,i+=p;i>0;M=256*M+t[e+a],a+=O,i-=8);if(0===n)n=1-r;else{if(n===c)return M?NaN:1/0*(s?-1:1);M+=Math.pow(2,p),n-=r}return(s?-1:1)*M*Math.pow(2,n-p)},e.write=function(t,e,o,p,b,n){var M,z,c,r=8*n-b-1,i=(1<>1,O=23===b?Math.pow(2,-24)-Math.pow(2,-77):0,s=p?0:n-1,l=p?1:-1,d=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(z=isNaN(e)?1:0,M=i):(M=Math.floor(Math.log(e)/Math.LN2),e*(c=Math.pow(2,-M))<1&&(M--,c*=2),(e+=M+a>=1?O/c:O*Math.pow(2,1-a))*c>=2&&(M++,c/=2),M+a>=i?(z=0,M=i):M+a>=1?(z=(e*c-1)*Math.pow(2,b),M+=a):(z=e*Math.pow(2,a-1)*Math.pow(2,b),M=0));b>=8;t[o+s]=255&z,s+=l,z/=256,b-=8);for(M=M<0;t[o+s]=255&M,s+=l,M/=256,r-=8);t[o+s-l]|=128*d}},826:t=>{var e={}.toString;t.exports=Array.isArray||function(t){return"[object Array]"==e.call(t)}},755:function(t,e){var o;!function(e,o){"use strict";"object"==typeof t.exports?t.exports=e.document?o(e,!0):function(t){if(!t.document)throw new Error("jQuery requires a window with a document");return o(t)}:o(e)}("undefined"!=typeof window?window:this,(function(p,b){"use strict";var n=[],M=Object.getPrototypeOf,z=n.slice,c=n.flat?function(t){return n.flat.call(t)}:function(t){return n.concat.apply([],t)},r=n.push,i=n.indexOf,a={},O=a.toString,s=a.hasOwnProperty,l=s.toString,d=l.call(Object),A={},u=function(t){return"function"==typeof t&&"number"!=typeof t.nodeType&&"function"!=typeof t.item},f=function(t){return null!=t&&t===t.window},q=p.document,h={type:!0,src:!0,nonce:!0,noModule:!0};function W(t,e,o){var p,b,n=(o=o||q).createElement("script");if(n.text=t,e)for(p in h)(b=e[p]||e.getAttribute&&e.getAttribute(p))&&n.setAttribute(p,b);o.head.appendChild(n).parentNode.removeChild(n)}function m(t){return null==t?t+"":"object"==typeof t||"function"==typeof t?a[O.call(t)]||"object":typeof t}var g="3.6.1",v=function(t,e){return new v.fn.init(t,e)};function R(t){var e=!!t&&"length"in t&&t.length,o=m(t);return!u(t)&&!f(t)&&("array"===o||0===e||"number"==typeof e&&e>0&&e-1 in t)}v.fn=v.prototype={jquery:g,constructor:v,length:0,toArray:function(){return z.call(this)},get:function(t){return null==t?z.call(this):t<0?this[t+this.length]:this[t]},pushStack:function(t){var e=v.merge(this.constructor(),t);return e.prevObject=this,e},each:function(t){return v.each(this,t)},map:function(t){return this.pushStack(v.map(this,(function(e,o){return t.call(e,o,e)})))},slice:function(){return this.pushStack(z.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(v.grep(this,(function(t,e){return(e+1)%2})))},odd:function(){return this.pushStack(v.grep(this,(function(t,e){return e%2})))},eq:function(t){var e=this.length,o=+t+(t<0?e:0);return this.pushStack(o>=0&&o+~]|[\\x20\\t\\r\\n\\f])[\\x20\\t\\r\\n\\f]*"),U=new RegExp(k+"|>"),V=new RegExp(P),$=new RegExp("^"+E+"$"),Y={ID:new RegExp("^#("+E+")"),CLASS:new RegExp("^\\.("+E+")"),TAG:new RegExp("^("+E+"|[*])"),ATTR:new RegExp("^"+D),PSEUDO:new RegExp("^"+P),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\([\\x20\\t\\r\\n\\f]*(even|odd|(([+-]|)(\\d*)n|)[\\x20\\t\\r\\n\\f]*(?:([+-]|)[\\x20\\t\\r\\n\\f]*(\\d+)|))[\\x20\\t\\r\\n\\f]*\\)|)","i"),bool:new RegExp("^(?:"+S+")$","i"),needsContext:new RegExp("^[\\x20\\t\\r\\n\\f]*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\([\\x20\\t\\r\\n\\f]*((?:-\\d)?\\d*)[\\x20\\t\\r\\n\\f]*\\)|)(?=[^-]|$)","i")},G=/HTML$/i,J=/^(?:input|select|textarea|button)$/i,K=/^h\d$/i,Q=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,tt=/[+~]/,et=new RegExp("\\\\[\\da-fA-F]{1,6}[\\x20\\t\\r\\n\\f]?|\\\\([^\\r\\n\\f])","g"),ot=function(t,e){var o="0x"+t.slice(1)-65536;return e||(o<0?String.fromCharCode(o+65536):String.fromCharCode(o>>10|55296,1023&o|56320))},pt=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,bt=function(t,e){return e?"\0"===t?"�":t.slice(0,-1)+"\\"+t.charCodeAt(t.length-1).toString(16)+" ":"\\"+t},nt=function(){O()},Mt=ht((function(t){return!0===t.disabled&&"fieldset"===t.nodeName.toLowerCase()}),{dir:"parentNode",next:"legend"});try{x.apply(_=T.call(W.childNodes),W.childNodes),_[W.childNodes.length].nodeType}catch(t){x={apply:_.length?function(t,e){w.apply(t,T.call(e))}:function(t,e){for(var o=t.length,p=0;t[o++]=e[p++];);t.length=o-1}}}function zt(t,e,p,b){var n,z,r,i,a,l,u,f=e&&e.ownerDocument,W=e?e.nodeType:9;if(p=p||[],"string"!=typeof t||!t||1!==W&&9!==W&&11!==W)return p;if(!b&&(O(e),e=e||s,d)){if(11!==W&&(a=Z.exec(t)))if(n=a[1]){if(9===W){if(!(r=e.getElementById(n)))return p;if(r.id===n)return p.push(r),p}else if(f&&(r=f.getElementById(n))&&q(e,r)&&r.id===n)return p.push(r),p}else{if(a[2])return x.apply(p,e.getElementsByTagName(t)),p;if((n=a[3])&&o.getElementsByClassName&&e.getElementsByClassName)return x.apply(p,e.getElementsByClassName(n)),p}if(o.qsa&&!B[t+" "]&&(!A||!A.test(t))&&(1!==W||"object"!==e.nodeName.toLowerCase())){if(u=t,f=e,1===W&&(U.test(t)||H.test(t))){for((f=tt.test(t)&&ut(e.parentNode)||e)===e&&o.scope||((i=e.getAttribute("id"))?i=i.replace(pt,bt):e.setAttribute("id",i=h)),z=(l=M(t)).length;z--;)l[z]=(i?"#"+i:":scope")+" "+qt(l[z]);u=l.join(",")}try{return x.apply(p,f.querySelectorAll(u)),p}catch(e){B(t,!0)}finally{i===h&&e.removeAttribute("id")}}}return c(t.replace(I,"$1"),e,p,b)}function ct(){var t=[];return function e(o,b){return t.push(o+" ")>p.cacheLength&&delete e[t.shift()],e[o+" "]=b}}function rt(t){return t[h]=!0,t}function it(t){var e=s.createElement("fieldset");try{return!!t(e)}catch(t){return!1}finally{e.parentNode&&e.parentNode.removeChild(e),e=null}}function at(t,e){for(var o=t.split("|"),b=o.length;b--;)p.attrHandle[o[b]]=e}function Ot(t,e){var o=e&&t,p=o&&1===t.nodeType&&1===e.nodeType&&t.sourceIndex-e.sourceIndex;if(p)return p;if(o)for(;o=o.nextSibling;)if(o===e)return-1;return t?1:-1}function st(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function lt(t){return function(e){var o=e.nodeName.toLowerCase();return("input"===o||"button"===o)&&e.type===t}}function dt(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&Mt(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function At(t){return rt((function(e){return e=+e,rt((function(o,p){for(var b,n=t([],o.length,e),M=n.length;M--;)o[b=n[M]]&&(o[b]=!(p[b]=o[b]))}))}))}function ut(t){return t&&void 0!==t.getElementsByTagName&&t}for(e in o=zt.support={},n=zt.isXML=function(t){var e=t&&t.namespaceURI,o=t&&(t.ownerDocument||t).documentElement;return!G.test(e||o&&o.nodeName||"HTML")},O=zt.setDocument=function(t){var e,b,M=t?t.ownerDocument||t:W;return M!=s&&9===M.nodeType&&M.documentElement?(l=(s=M).documentElement,d=!n(s),W!=s&&(b=s.defaultView)&&b.top!==b&&(b.addEventListener?b.addEventListener("unload",nt,!1):b.attachEvent&&b.attachEvent("onunload",nt)),o.scope=it((function(t){return l.appendChild(t).appendChild(s.createElement("div")),void 0!==t.querySelectorAll&&!t.querySelectorAll(":scope fieldset div").length})),o.attributes=it((function(t){return t.className="i",!t.getAttribute("className")})),o.getElementsByTagName=it((function(t){return t.appendChild(s.createComment("")),!t.getElementsByTagName("*").length})),o.getElementsByClassName=Q.test(s.getElementsByClassName),o.getById=it((function(t){return l.appendChild(t).id=h,!s.getElementsByName||!s.getElementsByName(h).length})),o.getById?(p.filter.ID=function(t){var e=t.replace(et,ot);return function(t){return t.getAttribute("id")===e}},p.find.ID=function(t,e){if(void 0!==e.getElementById&&d){var o=e.getElementById(t);return o?[o]:[]}}):(p.filter.ID=function(t){var e=t.replace(et,ot);return function(t){var o=void 0!==t.getAttributeNode&&t.getAttributeNode("id");return o&&o.value===e}},p.find.ID=function(t,e){if(void 0!==e.getElementById&&d){var o,p,b,n=e.getElementById(t);if(n){if((o=n.getAttributeNode("id"))&&o.value===t)return[n];for(b=e.getElementsByName(t),p=0;n=b[p++];)if((o=n.getAttributeNode("id"))&&o.value===t)return[n]}return[]}}),p.find.TAG=o.getElementsByTagName?function(t,e){return void 0!==e.getElementsByTagName?e.getElementsByTagName(t):o.qsa?e.querySelectorAll(t):void 0}:function(t,e){var o,p=[],b=0,n=e.getElementsByTagName(t);if("*"===t){for(;o=n[b++];)1===o.nodeType&&p.push(o);return p}return n},p.find.CLASS=o.getElementsByClassName&&function(t,e){if(void 0!==e.getElementsByClassName&&d)return e.getElementsByClassName(t)},u=[],A=[],(o.qsa=Q.test(s.querySelectorAll))&&(it((function(t){var e;l.appendChild(t).innerHTML="",t.querySelectorAll("[msallowcapture^='']").length&&A.push("[*^$]=[\\x20\\t\\r\\n\\f]*(?:''|\"\")"),t.querySelectorAll("[selected]").length||A.push("\\[[\\x20\\t\\r\\n\\f]*(?:value|"+S+")"),t.querySelectorAll("[id~="+h+"-]").length||A.push("~="),(e=s.createElement("input")).setAttribute("name",""),t.appendChild(e),t.querySelectorAll("[name='']").length||A.push("\\[[\\x20\\t\\r\\n\\f]*name[\\x20\\t\\r\\n\\f]*=[\\x20\\t\\r\\n\\f]*(?:''|\"\")"),t.querySelectorAll(":checked").length||A.push(":checked"),t.querySelectorAll("a#"+h+"+*").length||A.push(".#.+[+~]"),t.querySelectorAll("\\\f"),A.push("[\\r\\n\\f]")})),it((function(t){t.innerHTML="";var e=s.createElement("input");e.setAttribute("type","hidden"),t.appendChild(e).setAttribute("name","D"),t.querySelectorAll("[name=d]").length&&A.push("name[\\x20\\t\\r\\n\\f]*[*^$|!~]?="),2!==t.querySelectorAll(":enabled").length&&A.push(":enabled",":disabled"),l.appendChild(t).disabled=!0,2!==t.querySelectorAll(":disabled").length&&A.push(":enabled",":disabled"),t.querySelectorAll("*,:x"),A.push(",.*:")}))),(o.matchesSelector=Q.test(f=l.matches||l.webkitMatchesSelector||l.mozMatchesSelector||l.oMatchesSelector||l.msMatchesSelector))&&it((function(t){o.disconnectedMatch=f.call(t,"*"),f.call(t,"[s!='']:x"),u.push("!=",P)})),A=A.length&&new RegExp(A.join("|")),u=u.length&&new RegExp(u.join("|")),e=Q.test(l.compareDocumentPosition),q=e||Q.test(l.contains)?function(t,e){var o=9===t.nodeType?t.documentElement:t,p=e&&e.parentNode;return t===p||!(!p||1!==p.nodeType||!(o.contains?o.contains(p):t.compareDocumentPosition&&16&t.compareDocumentPosition(p)))}:function(t,e){if(e)for(;e=e.parentNode;)if(e===t)return!0;return!1},L=e?function(t,e){if(t===e)return a=!0,0;var p=!t.compareDocumentPosition-!e.compareDocumentPosition;return p||(1&(p=(t.ownerDocument||t)==(e.ownerDocument||e)?t.compareDocumentPosition(e):1)||!o.sortDetached&&e.compareDocumentPosition(t)===p?t==s||t.ownerDocument==W&&q(W,t)?-1:e==s||e.ownerDocument==W&&q(W,e)?1:i?C(i,t)-C(i,e):0:4&p?-1:1)}:function(t,e){if(t===e)return a=!0,0;var o,p=0,b=t.parentNode,n=e.parentNode,M=[t],z=[e];if(!b||!n)return t==s?-1:e==s?1:b?-1:n?1:i?C(i,t)-C(i,e):0;if(b===n)return Ot(t,e);for(o=t;o=o.parentNode;)M.unshift(o);for(o=e;o=o.parentNode;)z.unshift(o);for(;M[p]===z[p];)p++;return p?Ot(M[p],z[p]):M[p]==W?-1:z[p]==W?1:0},s):s},zt.matches=function(t,e){return zt(t,null,null,e)},zt.matchesSelector=function(t,e){if(O(t),o.matchesSelector&&d&&!B[e+" "]&&(!u||!u.test(e))&&(!A||!A.test(e)))try{var p=f.call(t,e);if(p||o.disconnectedMatch||t.document&&11!==t.document.nodeType)return p}catch(t){B(e,!0)}return zt(e,s,null,[t]).length>0},zt.contains=function(t,e){return(t.ownerDocument||t)!=s&&O(t),q(t,e)},zt.attr=function(t,e){(t.ownerDocument||t)!=s&&O(t);var b=p.attrHandle[e.toLowerCase()],n=b&&X.call(p.attrHandle,e.toLowerCase())?b(t,e,!d):void 0;return void 0!==n?n:o.attributes||!d?t.getAttribute(e):(n=t.getAttributeNode(e))&&n.specified?n.value:null},zt.escape=function(t){return(t+"").replace(pt,bt)},zt.error=function(t){throw new Error("Syntax error, unrecognized expression: "+t)},zt.uniqueSort=function(t){var e,p=[],b=0,n=0;if(a=!o.detectDuplicates,i=!o.sortStable&&t.slice(0),t.sort(L),a){for(;e=t[n++];)e===t[n]&&(b=p.push(n));for(;b--;)t.splice(p[b],1)}return i=null,t},b=zt.getText=function(t){var e,o="",p=0,n=t.nodeType;if(n){if(1===n||9===n||11===n){if("string"==typeof t.textContent)return t.textContent;for(t=t.firstChild;t;t=t.nextSibling)o+=b(t)}else if(3===n||4===n)return t.nodeValue}else for(;e=t[p++];)o+=b(e);return o},p=zt.selectors={cacheLength:50,createPseudo:rt,match:Y,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(t){return t[1]=t[1].replace(et,ot),t[3]=(t[3]||t[4]||t[5]||"").replace(et,ot),"~="===t[2]&&(t[3]=" "+t[3]+" "),t.slice(0,4)},CHILD:function(t){return t[1]=t[1].toLowerCase(),"nth"===t[1].slice(0,3)?(t[3]||zt.error(t[0]),t[4]=+(t[4]?t[5]+(t[6]||1):2*("even"===t[3]||"odd"===t[3])),t[5]=+(t[7]+t[8]||"odd"===t[3])):t[3]&&zt.error(t[0]),t},PSEUDO:function(t){var e,o=!t[6]&&t[2];return Y.CHILD.test(t[0])?null:(t[3]?t[2]=t[4]||t[5]||"":o&&V.test(o)&&(e=M(o,!0))&&(e=o.indexOf(")",o.length-e)-o.length)&&(t[0]=t[0].slice(0,e),t[2]=o.slice(0,e)),t.slice(0,3))}},filter:{TAG:function(t){var e=t.replace(et,ot).toLowerCase();return"*"===t?function(){return!0}:function(t){return t.nodeName&&t.nodeName.toLowerCase()===e}},CLASS:function(t){var e=v[t+" "];return e||(e=new RegExp("(^|[\\x20\\t\\r\\n\\f])"+t+"("+k+"|$)"))&&v(t,(function(t){return e.test("string"==typeof t.className&&t.className||void 0!==t.getAttribute&&t.getAttribute("class")||"")}))},ATTR:function(t,e,o){return function(p){var b=zt.attr(p,t);return null==b?"!="===e:!e||(b+="","="===e?b===o:"!="===e?b!==o:"^="===e?o&&0===b.indexOf(o):"*="===e?o&&b.indexOf(o)>-1:"$="===e?o&&b.slice(-o.length)===o:"~="===e?(" "+b.replace(j," ")+" ").indexOf(o)>-1:"|="===e&&(b===o||b.slice(0,o.length+1)===o+"-"))}},CHILD:function(t,e,o,p,b){var n="nth"!==t.slice(0,3),M="last"!==t.slice(-4),z="of-type"===e;return 1===p&&0===b?function(t){return!!t.parentNode}:function(e,o,c){var r,i,a,O,s,l,d=n!==M?"nextSibling":"previousSibling",A=e.parentNode,u=z&&e.nodeName.toLowerCase(),f=!c&&!z,q=!1;if(A){if(n){for(;d;){for(O=e;O=O[d];)if(z?O.nodeName.toLowerCase()===u:1===O.nodeType)return!1;l=d="only"===t&&!l&&"nextSibling"}return!0}if(l=[M?A.firstChild:A.lastChild],M&&f){for(q=(s=(r=(i=(a=(O=A)[h]||(O[h]={}))[O.uniqueID]||(a[O.uniqueID]={}))[t]||[])[0]===m&&r[1])&&r[2],O=s&&A.childNodes[s];O=++s&&O&&O[d]||(q=s=0)||l.pop();)if(1===O.nodeType&&++q&&O===e){i[t]=[m,s,q];break}}else if(f&&(q=s=(r=(i=(a=(O=e)[h]||(O[h]={}))[O.uniqueID]||(a[O.uniqueID]={}))[t]||[])[0]===m&&r[1]),!1===q)for(;(O=++s&&O&&O[d]||(q=s=0)||l.pop())&&((z?O.nodeName.toLowerCase()!==u:1!==O.nodeType)||!++q||(f&&((i=(a=O[h]||(O[h]={}))[O.uniqueID]||(a[O.uniqueID]={}))[t]=[m,q]),O!==e)););return(q-=b)===p||q%p==0&&q/p>=0}}},PSEUDO:function(t,e){var o,b=p.pseudos[t]||p.setFilters[t.toLowerCase()]||zt.error("unsupported pseudo: "+t);return b[h]?b(e):b.length>1?(o=[t,t,"",e],p.setFilters.hasOwnProperty(t.toLowerCase())?rt((function(t,o){for(var p,n=b(t,e),M=n.length;M--;)t[p=C(t,n[M])]=!(o[p]=n[M])})):function(t){return b(t,0,o)}):b}},pseudos:{not:rt((function(t){var e=[],o=[],p=z(t.replace(I,"$1"));return p[h]?rt((function(t,e,o,b){for(var n,M=p(t,null,b,[]),z=t.length;z--;)(n=M[z])&&(t[z]=!(e[z]=n))})):function(t,b,n){return e[0]=t,p(e,null,n,o),e[0]=null,!o.pop()}})),has:rt((function(t){return function(e){return zt(t,e).length>0}})),contains:rt((function(t){return t=t.replace(et,ot),function(e){return(e.textContent||b(e)).indexOf(t)>-1}})),lang:rt((function(t){return $.test(t||"")||zt.error("unsupported lang: "+t),t=t.replace(et,ot).toLowerCase(),function(e){var o;do{if(o=d?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(o=o.toLowerCase())===t||0===o.indexOf(t+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}})),target:function(e){var o=t.location&&t.location.hash;return o&&o.slice(1)===e.id},root:function(t){return t===l},focus:function(t){return t===s.activeElement&&(!s.hasFocus||s.hasFocus())&&!!(t.type||t.href||~t.tabIndex)},enabled:dt(!1),disabled:dt(!0),checked:function(t){var e=t.nodeName.toLowerCase();return"input"===e&&!!t.checked||"option"===e&&!!t.selected},selected:function(t){return t.parentNode&&t.parentNode.selectedIndex,!0===t.selected},empty:function(t){for(t=t.firstChild;t;t=t.nextSibling)if(t.nodeType<6)return!1;return!0},parent:function(t){return!p.pseudos.empty(t)},header:function(t){return K.test(t.nodeName)},input:function(t){return J.test(t.nodeName)},button:function(t){var e=t.nodeName.toLowerCase();return"input"===e&&"button"===t.type||"button"===e},text:function(t){var e;return"input"===t.nodeName.toLowerCase()&&"text"===t.type&&(null==(e=t.getAttribute("type"))||"text"===e.toLowerCase())},first:At((function(){return[0]})),last:At((function(t,e){return[e-1]})),eq:At((function(t,e,o){return[o<0?o+e:o]})),even:At((function(t,e){for(var o=0;oe?e:o;--p>=0;)t.push(p);return t})),gt:At((function(t,e,o){for(var p=o<0?o+e:o;++p1?function(e,o,p){for(var b=t.length;b--;)if(!t[b](e,o,p))return!1;return!0}:t[0]}function mt(t,e,o,p,b){for(var n,M=[],z=0,c=t.length,r=null!=e;z-1&&(n[r]=!(M[r]=a))}}else u=mt(u===M?u.splice(l,u.length):u),b?b(null,M,u,c):x.apply(M,u)}))}function vt(t){for(var e,o,b,n=t.length,M=p.relative[t[0].type],z=M||p.relative[" "],c=M?1:0,i=ht((function(t){return t===e}),z,!0),a=ht((function(t){return C(e,t)>-1}),z,!0),O=[function(t,o,p){var b=!M&&(p||o!==r)||((e=o).nodeType?i(t,o,p):a(t,o,p));return e=null,b}];c1&&Wt(O),c>1&&qt(t.slice(0,c-1).concat({value:" "===t[c-2].type?"*":""})).replace(I,"$1"),o,c0,b=t.length>0,n=function(n,M,z,c,i){var a,l,A,u=0,f="0",q=n&&[],h=[],W=r,g=n||b&&p.find.TAG("*",i),v=m+=null==W?1:Math.random()||.1,R=g.length;for(i&&(r=M==s||M||i);f!==R&&null!=(a=g[f]);f++){if(b&&a){for(l=0,M||a.ownerDocument==s||(O(a),z=!d);A=t[l++];)if(A(a,M||s,z)){c.push(a);break}i&&(m=v)}o&&((a=!A&&a)&&u--,n&&q.push(a))}if(u+=f,o&&f!==u){for(l=0;A=e[l++];)A(q,h,M,z);if(n){if(u>0)for(;f--;)q[f]||h[f]||(h[f]=N.call(c));h=mt(h)}x.apply(c,h),i&&!n&&h.length>0&&u+e.length>1&&zt.uniqueSort(c)}return i&&(m=v,r=W),q};return o?rt(n):n}(n,b)),z.selector=t}return z},c=zt.select=function(t,e,o,b){var n,c,r,i,a,O="function"==typeof t&&t,s=!b&&M(t=O.selector||t);if(o=o||[],1===s.length){if((c=s[0]=s[0].slice(0)).length>2&&"ID"===(r=c[0]).type&&9===e.nodeType&&d&&p.relative[c[1].type]){if(!(e=(p.find.ID(r.matches[0].replace(et,ot),e)||[])[0]))return o;O&&(e=e.parentNode),t=t.slice(c.shift().value.length)}for(n=Y.needsContext.test(t)?0:c.length;n--&&(r=c[n],!p.relative[i=r.type]);)if((a=p.find[i])&&(b=a(r.matches[0].replace(et,ot),tt.test(c[0].type)&&ut(e.parentNode)||e))){if(c.splice(n,1),!(t=b.length&&qt(c)))return x.apply(o,b),o;break}}return(O||z(t,s))(b,e,!d,o,!e||tt.test(t)&&ut(e.parentNode)||e),o},o.sortStable=h.split("").sort(L).join("")===h,o.detectDuplicates=!!a,O(),o.sortDetached=it((function(t){return 1&t.compareDocumentPosition(s.createElement("fieldset"))})),it((function(t){return t.innerHTML="","#"===t.firstChild.getAttribute("href")}))||at("type|href|height|width",(function(t,e,o){if(!o)return t.getAttribute(e,"type"===e.toLowerCase()?1:2)})),o.attributes&&it((function(t){return t.innerHTML="",t.firstChild.setAttribute("value",""),""===t.firstChild.getAttribute("value")}))||at("value",(function(t,e,o){if(!o&&"input"===t.nodeName.toLowerCase())return t.defaultValue})),it((function(t){return null==t.getAttribute("disabled")}))||at(S,(function(t,e,o){var p;if(!o)return!0===t[e]?e.toLowerCase():(p=t.getAttributeNode(e))&&p.specified?p.value:null})),zt}(p);v.find=y,v.expr=y.selectors,v.expr[":"]=v.expr.pseudos,v.uniqueSort=v.unique=y.uniqueSort,v.text=y.getText,v.isXMLDoc=y.isXML,v.contains=y.contains,v.escapeSelector=y.escape;var B=function(t,e,o){for(var p=[],b=void 0!==o;(t=t[e])&&9!==t.nodeType;)if(1===t.nodeType){if(b&&v(t).is(o))break;p.push(t)}return p},L=function(t,e){for(var o=[];t;t=t.nextSibling)1===t.nodeType&&t!==e&&o.push(t);return o},X=v.expr.match.needsContext;function _(t,e){return t.nodeName&&t.nodeName.toLowerCase()===e.toLowerCase()}var N=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function w(t,e,o){return u(e)?v.grep(t,(function(t,p){return!!e.call(t,p,t)!==o})):e.nodeType?v.grep(t,(function(t){return t===e!==o})):"string"!=typeof e?v.grep(t,(function(t){return i.call(e,t)>-1!==o})):v.filter(e,t,o)}v.filter=function(t,e,o){var p=e[0];return o&&(t=":not("+t+")"),1===e.length&&1===p.nodeType?v.find.matchesSelector(p,t)?[p]:[]:v.find.matches(t,v.grep(e,(function(t){return 1===t.nodeType})))},v.fn.extend({find:function(t){var e,o,p=this.length,b=this;if("string"!=typeof t)return this.pushStack(v(t).filter((function(){for(e=0;e1?v.uniqueSort(o):o},filter:function(t){return this.pushStack(w(this,t||[],!1))},not:function(t){return this.pushStack(w(this,t||[],!0))},is:function(t){return!!w(this,"string"==typeof t&&X.test(t)?v(t):t||[],!1).length}});var x,T=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(v.fn.init=function(t,e,o){var p,b;if(!t)return this;if(o=o||x,"string"==typeof t){if(!(p="<"===t[0]&&">"===t[t.length-1]&&t.length>=3?[null,t,null]:T.exec(t))||!p[1]&&e)return!e||e.jquery?(e||o).find(t):this.constructor(e).find(t);if(p[1]){if(e=e instanceof v?e[0]:e,v.merge(this,v.parseHTML(p[1],e&&e.nodeType?e.ownerDocument||e:q,!0)),N.test(p[1])&&v.isPlainObject(e))for(p in e)u(this[p])?this[p](e[p]):this.attr(p,e[p]);return this}return(b=q.getElementById(p[2]))&&(this[0]=b,this.length=1),this}return t.nodeType?(this[0]=t,this.length=1,this):u(t)?void 0!==o.ready?o.ready(t):t(v):v.makeArray(t,this)}).prototype=v.fn,x=v(q);var C=/^(?:parents|prev(?:Until|All))/,S={children:!0,contents:!0,next:!0,prev:!0};function k(t,e){for(;(t=t[e])&&1!==t.nodeType;);return t}v.fn.extend({has:function(t){var e=v(t,this),o=e.length;return this.filter((function(){for(var t=0;t-1:1===o.nodeType&&v.find.matchesSelector(o,t))){n.push(o);break}return this.pushStack(n.length>1?v.uniqueSort(n):n)},index:function(t){return t?"string"==typeof t?i.call(v(t),this[0]):i.call(this,t.jquery?t[0]:t):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(t,e){return this.pushStack(v.uniqueSort(v.merge(this.get(),v(t,e))))},addBack:function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}}),v.each({parent:function(t){var e=t.parentNode;return e&&11!==e.nodeType?e:null},parents:function(t){return B(t,"parentNode")},parentsUntil:function(t,e,o){return B(t,"parentNode",o)},next:function(t){return k(t,"nextSibling")},prev:function(t){return k(t,"previousSibling")},nextAll:function(t){return B(t,"nextSibling")},prevAll:function(t){return B(t,"previousSibling")},nextUntil:function(t,e,o){return B(t,"nextSibling",o)},prevUntil:function(t,e,o){return B(t,"previousSibling",o)},siblings:function(t){return L((t.parentNode||{}).firstChild,t)},children:function(t){return L(t.firstChild)},contents:function(t){return null!=t.contentDocument&&M(t.contentDocument)?t.contentDocument:(_(t,"template")&&(t=t.content||t),v.merge([],t.childNodes))}},(function(t,e){v.fn[t]=function(o,p){var b=v.map(this,e,o);return"Until"!==t.slice(-5)&&(p=o),p&&"string"==typeof p&&(b=v.filter(p,b)),this.length>1&&(S[t]||v.uniqueSort(b),C.test(t)&&b.reverse()),this.pushStack(b)}}));var E=/[^\x20\t\r\n\f]+/g;function D(t){return t}function P(t){throw t}function j(t,e,o,p){var b;try{t&&u(b=t.promise)?b.call(t).done(e).fail(o):t&&u(b=t.then)?b.call(t,e,o):e.apply(void 0,[t].slice(p))}catch(t){o.apply(void 0,[t])}}v.Callbacks=function(t){t="string"==typeof t?function(t){var e={};return v.each(t.match(E)||[],(function(t,o){e[o]=!0})),e}(t):v.extend({},t);var e,o,p,b,n=[],M=[],z=-1,c=function(){for(b=b||t.once,p=e=!0;M.length;z=-1)for(o=M.shift();++z-1;)n.splice(o,1),o<=z&&z--})),this},has:function(t){return t?v.inArray(t,n)>-1:n.length>0},empty:function(){return n&&(n=[]),this},disable:function(){return b=M=[],n=o="",this},disabled:function(){return!n},lock:function(){return b=M=[],o||e||(n=o=""),this},locked:function(){return!!b},fireWith:function(t,o){return b||(o=[t,(o=o||[]).slice?o.slice():o],M.push(o),e||c()),this},fire:function(){return r.fireWith(this,arguments),this},fired:function(){return!!p}};return r},v.extend({Deferred:function(t){var e=[["notify","progress",v.Callbacks("memory"),v.Callbacks("memory"),2],["resolve","done",v.Callbacks("once memory"),v.Callbacks("once memory"),0,"resolved"],["reject","fail",v.Callbacks("once memory"),v.Callbacks("once memory"),1,"rejected"]],o="pending",b={state:function(){return o},always:function(){return n.done(arguments).fail(arguments),this},catch:function(t){return b.then(null,t)},pipe:function(){var t=arguments;return v.Deferred((function(o){v.each(e,(function(e,p){var b=u(t[p[4]])&&t[p[4]];n[p[1]]((function(){var t=b&&b.apply(this,arguments);t&&u(t.promise)?t.promise().progress(o.notify).done(o.resolve).fail(o.reject):o[p[0]+"With"](this,b?[t]:arguments)}))})),t=null})).promise()},then:function(t,o,b){var n=0;function M(t,e,o,b){return function(){var z=this,c=arguments,r=function(){var p,r;if(!(t=n&&(o!==P&&(z=void 0,c=[p]),e.rejectWith(z,c))}};t?i():(v.Deferred.getStackHook&&(i.stackTrace=v.Deferred.getStackHook()),p.setTimeout(i))}}return v.Deferred((function(p){e[0][3].add(M(0,p,u(b)?b:D,p.notifyWith)),e[1][3].add(M(0,p,u(t)?t:D)),e[2][3].add(M(0,p,u(o)?o:P))})).promise()},promise:function(t){return null!=t?v.extend(t,b):b}},n={};return v.each(e,(function(t,p){var M=p[2],z=p[5];b[p[1]]=M.add,z&&M.add((function(){o=z}),e[3-t][2].disable,e[3-t][3].disable,e[0][2].lock,e[0][3].lock),M.add(p[3].fire),n[p[0]]=function(){return n[p[0]+"With"](this===n?void 0:this,arguments),this},n[p[0]+"With"]=M.fireWith})),b.promise(n),t&&t.call(n,n),n},when:function(t){var e=arguments.length,o=e,p=Array(o),b=z.call(arguments),n=v.Deferred(),M=function(t){return function(o){p[t]=this,b[t]=arguments.length>1?z.call(arguments):o,--e||n.resolveWith(p,b)}};if(e<=1&&(j(t,n.done(M(o)).resolve,n.reject,!e),"pending"===n.state()||u(b[o]&&b[o].then)))return n.then();for(;o--;)j(b[o],M(o),n.reject);return n.promise()}});var I=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;v.Deferred.exceptionHook=function(t,e){p.console&&p.console.warn&&t&&I.test(t.name)&&p.console.warn("jQuery.Deferred exception: "+t.message,t.stack,e)},v.readyException=function(t){p.setTimeout((function(){throw t}))};var F=v.Deferred();function H(){q.removeEventListener("DOMContentLoaded",H),p.removeEventListener("load",H),v.ready()}v.fn.ready=function(t){return F.then(t).catch((function(t){v.readyException(t)})),this},v.extend({isReady:!1,readyWait:1,ready:function(t){(!0===t?--v.readyWait:v.isReady)||(v.isReady=!0,!0!==t&&--v.readyWait>0||F.resolveWith(q,[v]))}}),v.ready.then=F.then,"complete"===q.readyState||"loading"!==q.readyState&&!q.documentElement.doScroll?p.setTimeout(v.ready):(q.addEventListener("DOMContentLoaded",H),p.addEventListener("load",H));var U=function(t,e,o,p,b,n,M){var z=0,c=t.length,r=null==o;if("object"===m(o))for(z in b=!0,o)U(t,e,z,o[z],!0,n,M);else if(void 0!==p&&(b=!0,u(p)||(M=!0),r&&(M?(e.call(t,p),e=null):(r=e,e=function(t,e,o){return r.call(v(t),o)})),e))for(;z1,null,!0)},removeData:function(t){return this.each((function(){Z.remove(this,t)}))}}),v.extend({queue:function(t,e,o){var p;if(t)return e=(e||"fx")+"queue",p=Q.get(t,e),o&&(!p||Array.isArray(o)?p=Q.access(t,e,v.makeArray(o)):p.push(o)),p||[]},dequeue:function(t,e){e=e||"fx";var o=v.queue(t,e),p=o.length,b=o.shift(),n=v._queueHooks(t,e);"inprogress"===b&&(b=o.shift(),p--),b&&("fx"===e&&o.unshift("inprogress"),delete n.stop,b.call(t,(function(){v.dequeue(t,e)}),n)),!p&&n&&n.empty.fire()},_queueHooks:function(t,e){var o=e+"queueHooks";return Q.get(t,o)||Q.access(t,o,{empty:v.Callbacks("once memory").add((function(){Q.remove(t,[e+"queue",o])}))})}}),v.fn.extend({queue:function(t,e){var o=2;return"string"!=typeof t&&(e=t,t="fx",o--),arguments.length\x20\t\r\n\f]*)/i,ft=/^$|^module$|\/(?:java|ecma)script/i;lt=q.createDocumentFragment().appendChild(q.createElement("div")),(dt=q.createElement("input")).setAttribute("type","radio"),dt.setAttribute("checked","checked"),dt.setAttribute("name","t"),lt.appendChild(dt),A.checkClone=lt.cloneNode(!0).cloneNode(!0).lastChild.checked,lt.innerHTML="",A.noCloneChecked=!!lt.cloneNode(!0).lastChild.defaultValue,lt.innerHTML="",A.option=!!lt.lastChild;var qt={thead:[1,""],col:[2,""],tr:[2,""],td:[3,""],_default:[0,"",""]};function ht(t,e){var o;return o=void 0!==t.getElementsByTagName?t.getElementsByTagName(e||"*"):void 0!==t.querySelectorAll?t.querySelectorAll(e||"*"):[],void 0===e||e&&_(t,e)?v.merge([t],o):o}function Wt(t,e){for(var o=0,p=t.length;o",""]);var mt=/<|?\w+;/;function gt(t,e,o,p,b){for(var n,M,z,c,r,i,a=e.createDocumentFragment(),O=[],s=0,l=t.length;s-1)b&&b.push(n);else if(r=zt(n),M=ht(a.appendChild(n),"script"),r&&Wt(M),o)for(i=0;n=M[i++];)ft.test(n.type||"")&&o.push(n);return a}var vt=/^([^.]*)(?:\.(.+)|)/;function Rt(){return!0}function yt(){return!1}function Bt(t,e){return t===function(){try{return q.activeElement}catch(t){}}()==("focus"===e)}function Lt(t,e,o,p,b,n){var M,z;if("object"==typeof e){for(z in"string"!=typeof o&&(p=p||o,o=void 0),e)Lt(t,z,o,p,e[z],n);return t}if(null==p&&null==b?(b=o,p=o=void 0):null==b&&("string"==typeof o?(b=p,p=void 0):(b=p,p=o,o=void 0)),!1===b)b=yt;else if(!b)return t;return 1===n&&(M=b,b=function(t){return v().off(t),M.apply(this,arguments)},b.guid=M.guid||(M.guid=v.guid++)),t.each((function(){v.event.add(this,e,b,p,o)}))}function Xt(t,e,o){o?(Q.set(t,e,!1),v.event.add(t,e,{namespace:!1,handler:function(t){var p,b,n=Q.get(this,e);if(1&t.isTrigger&&this[e]){if(n.length)(v.event.special[e]||{}).delegateType&&t.stopPropagation();else if(n=z.call(arguments),Q.set(this,e,n),p=o(this,e),this[e](),n!==(b=Q.get(this,e))||p?Q.set(this,e,!1):b={},n!==b)return t.stopImmediatePropagation(),t.preventDefault(),b&&b.value}else n.length&&(Q.set(this,e,{value:v.event.trigger(v.extend(n[0],v.Event.prototype),n.slice(1),this)}),t.stopImmediatePropagation())}})):void 0===Q.get(t,e)&&v.event.add(t,e,Rt)}v.event={global:{},add:function(t,e,o,p,b){var n,M,z,c,r,i,a,O,s,l,d,A=Q.get(t);if(J(t))for(o.handler&&(o=(n=o).handler,b=n.selector),b&&v.find.matchesSelector(Mt,b),o.guid||(o.guid=v.guid++),(c=A.events)||(c=A.events=Object.create(null)),(M=A.handle)||(M=A.handle=function(e){return void 0!==v&&v.event.triggered!==e.type?v.event.dispatch.apply(t,arguments):void 0}),r=(e=(e||"").match(E)||[""]).length;r--;)s=d=(z=vt.exec(e[r])||[])[1],l=(z[2]||"").split(".").sort(),s&&(a=v.event.special[s]||{},s=(b?a.delegateType:a.bindType)||s,a=v.event.special[s]||{},i=v.extend({type:s,origType:d,data:p,handler:o,guid:o.guid,selector:b,needsContext:b&&v.expr.match.needsContext.test(b),namespace:l.join(".")},n),(O=c[s])||((O=c[s]=[]).delegateCount=0,a.setup&&!1!==a.setup.call(t,p,l,M)||t.addEventListener&&t.addEventListener(s,M)),a.add&&(a.add.call(t,i),i.handler.guid||(i.handler.guid=o.guid)),b?O.splice(O.delegateCount++,0,i):O.push(i),v.event.global[s]=!0)},remove:function(t,e,o,p,b){var n,M,z,c,r,i,a,O,s,l,d,A=Q.hasData(t)&&Q.get(t);if(A&&(c=A.events)){for(r=(e=(e||"").match(E)||[""]).length;r--;)if(s=d=(z=vt.exec(e[r])||[])[1],l=(z[2]||"").split(".").sort(),s){for(a=v.event.special[s]||{},O=c[s=(p?a.delegateType:a.bindType)||s]||[],z=z[2]&&new RegExp("(^|\\.)"+l.join("\\.(?:.*\\.|)")+"(\\.|$)"),M=n=O.length;n--;)i=O[n],!b&&d!==i.origType||o&&o.guid!==i.guid||z&&!z.test(i.namespace)||p&&p!==i.selector&&("**"!==p||!i.selector)||(O.splice(n,1),i.selector&&O.delegateCount--,a.remove&&a.remove.call(t,i));M&&!O.length&&(a.teardown&&!1!==a.teardown.call(t,l,A.handle)||v.removeEvent(t,s,A.handle),delete c[s])}else for(s in c)v.event.remove(t,s+e[r],o,p,!0);v.isEmptyObject(c)&&Q.remove(t,"handle events")}},dispatch:function(t){var e,o,p,b,n,M,z=new Array(arguments.length),c=v.event.fix(t),r=(Q.get(this,"events")||Object.create(null))[c.type]||[],i=v.event.special[c.type]||{};for(z[0]=c,e=1;e=1))for(;r!==this;r=r.parentNode||this)if(1===r.nodeType&&("click"!==t.type||!0!==r.disabled)){for(n=[],M={},o=0;o-1:v.find(b,this,null,[r]).length),M[b]&&n.push(p);n.length&&z.push({elem:r,handlers:n})}return r=this,c\s*$/g;function xt(t,e){return _(t,"table")&&_(11!==e.nodeType?e:e.firstChild,"tr")&&v(t).children("tbody")[0]||t}function Tt(t){return t.type=(null!==t.getAttribute("type"))+"/"+t.type,t}function Ct(t){return"true/"===(t.type||"").slice(0,5)?t.type=t.type.slice(5):t.removeAttribute("type"),t}function St(t,e){var o,p,b,n,M,z;if(1===e.nodeType){if(Q.hasData(t)&&(z=Q.get(t).events))for(b in Q.remove(e,"handle events"),z)for(o=0,p=z[b].length;o1&&"string"==typeof l&&!A.checkClone&&Nt.test(l))return t.each((function(b){var n=t.eq(b);d&&(e[0]=l.call(this,b,n.html())),Et(n,e,o,p)}));if(O&&(n=(b=gt(e,t[0].ownerDocument,!1,t,p)).firstChild,1===b.childNodes.length&&(b=n),n||p)){for(z=(M=v.map(ht(b,"script"),Tt)).length;a0&&Wt(M,!c&&ht(t,"script")),z},cleanData:function(t){for(var e,o,p,b=v.event.special,n=0;void 0!==(o=t[n]);n++)if(J(o)){if(e=o[Q.expando]){if(e.events)for(p in e.events)b[p]?v.event.remove(o,p):v.removeEvent(o,p,e.handle);o[Q.expando]=void 0}o[Z.expando]&&(o[Z.expando]=void 0)}}}),v.fn.extend({detach:function(t){return Dt(this,t,!0)},remove:function(t){return Dt(this,t)},text:function(t){return U(this,(function(t){return void 0===t?v.text(this):this.empty().each((function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=t)}))}),null,t,arguments.length)},append:function(){return Et(this,arguments,(function(t){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||xt(this,t).appendChild(t)}))},prepend:function(){return Et(this,arguments,(function(t){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var e=xt(this,t);e.insertBefore(t,e.firstChild)}}))},before:function(){return Et(this,arguments,(function(t){this.parentNode&&this.parentNode.insertBefore(t,this)}))},after:function(){return Et(this,arguments,(function(t){this.parentNode&&this.parentNode.insertBefore(t,this.nextSibling)}))},empty:function(){for(var t,e=0;null!=(t=this[e]);e++)1===t.nodeType&&(v.cleanData(ht(t,!1)),t.textContent="");return this},clone:function(t,e){return t=null!=t&&t,e=null==e?t:e,this.map((function(){return v.clone(this,t,e)}))},html:function(t){return U(this,(function(t){var e=this[0]||{},o=0,p=this.length;if(void 0===t&&1===e.nodeType)return e.innerHTML;if("string"==typeof t&&!_t.test(t)&&!qt[(ut.exec(t)||["",""])[1].toLowerCase()]){t=v.htmlPrefilter(t);try{for(;o=0&&(c+=Math.max(0,Math.ceil(t["offset"+e[0].toUpperCase()+e.slice(1)]-n-c-z-.5))||0),c}function pe(t,e,o){var p=It(t),b=(!A.boxSizingReliable()||o)&&"border-box"===v.css(t,"boxSizing",!1,p),n=b,M=Vt(t,e,p),z="offset"+e[0].toUpperCase()+e.slice(1);if(Pt.test(M)){if(!o)return M;M="auto"}return(!A.boxSizingReliable()&&b||!A.reliableTrDimensions()&&_(t,"tr")||"auto"===M||!parseFloat(M)&&"inline"===v.css(t,"display",!1,p))&&t.getClientRects().length&&(b="border-box"===v.css(t,"boxSizing",!1,p),(n=z in t)&&(M=t[z])),(M=parseFloat(M)||0)+oe(t,e,o||(b?"border":"content"),n,p,M)+"px"}function be(t,e,o,p,b){return new be.prototype.init(t,e,o,p,b)}v.extend({cssHooks:{opacity:{get:function(t,e){if(e){var o=Vt(t,"opacity");return""===o?"1":o}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(t,e,o,p){if(t&&3!==t.nodeType&&8!==t.nodeType&&t.style){var b,n,M,z=G(e),c=jt.test(e),r=t.style;if(c||(e=Kt(z)),M=v.cssHooks[e]||v.cssHooks[z],void 0===o)return M&&"get"in M&&void 0!==(b=M.get(t,!1,p))?b:r[e];"string"===(n=typeof o)&&(b=bt.exec(o))&&b[1]&&(o=it(t,e,b),n="number"),null!=o&&o==o&&("number"!==n||c||(o+=b&&b[3]||(v.cssNumber[z]?"":"px")),A.clearCloneStyle||""!==o||0!==e.indexOf("background")||(r[e]="inherit"),M&&"set"in M&&void 0===(o=M.set(t,o,p))||(c?r.setProperty(e,o):r[e]=o))}},css:function(t,e,o,p){var b,n,M,z=G(e);return jt.test(e)||(e=Kt(z)),(M=v.cssHooks[e]||v.cssHooks[z])&&"get"in M&&(b=M.get(t,!0,o)),void 0===b&&(b=Vt(t,e,p)),"normal"===b&&e in te&&(b=te[e]),""===o||o?(n=parseFloat(b),!0===o||isFinite(n)?n||0:b):b}}),v.each(["height","width"],(function(t,e){v.cssHooks[e]={get:function(t,o,p){if(o)return!Qt.test(v.css(t,"display"))||t.getClientRects().length&&t.getBoundingClientRect().width?pe(t,e,p):Ft(t,Zt,(function(){return pe(t,e,p)}))},set:function(t,o,p){var b,n=It(t),M=!A.scrollboxSize()&&"absolute"===n.position,z=(M||p)&&"border-box"===v.css(t,"boxSizing",!1,n),c=p?oe(t,e,p,z,n):0;return z&&M&&(c-=Math.ceil(t["offset"+e[0].toUpperCase()+e.slice(1)]-parseFloat(n[e])-oe(t,e,"border",!1,n)-.5)),c&&(b=bt.exec(o))&&"px"!==(b[3]||"px")&&(t.style[e]=o,o=v.css(t,e)),ee(0,o,c)}}})),v.cssHooks.marginLeft=$t(A.reliableMarginLeft,(function(t,e){if(e)return(parseFloat(Vt(t,"marginLeft"))||t.getBoundingClientRect().left-Ft(t,{marginLeft:0},(function(){return t.getBoundingClientRect().left})))+"px"})),v.each({margin:"",padding:"",border:"Width"},(function(t,e){v.cssHooks[t+e]={expand:function(o){for(var p=0,b={},n="string"==typeof o?o.split(" "):[o];p<4;p++)b[t+nt[p]+e]=n[p]||n[p-2]||n[0];return b}},"margin"!==t&&(v.cssHooks[t+e].set=ee)})),v.fn.extend({css:function(t,e){return U(this,(function(t,e,o){var p,b,n={},M=0;if(Array.isArray(e)){for(p=It(t),b=e.length;M1)}}),v.Tween=be,be.prototype={constructor:be,init:function(t,e,o,p,b,n){this.elem=t,this.prop=o,this.easing=b||v.easing._default,this.options=e,this.start=this.now=this.cur(),this.end=p,this.unit=n||(v.cssNumber[o]?"":"px")},cur:function(){var t=be.propHooks[this.prop];return t&&t.get?t.get(this):be.propHooks._default.get(this)},run:function(t){var e,o=be.propHooks[this.prop];return this.options.duration?this.pos=e=v.easing[this.easing](t,this.options.duration*t,0,1,this.options.duration):this.pos=e=t,this.now=(this.end-this.start)*e+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),o&&o.set?o.set(this):be.propHooks._default.set(this),this}},be.prototype.init.prototype=be.prototype,be.propHooks={_default:{get:function(t){var e;return 1!==t.elem.nodeType||null!=t.elem[t.prop]&&null==t.elem.style[t.prop]?t.elem[t.prop]:(e=v.css(t.elem,t.prop,""))&&"auto"!==e?e:0},set:function(t){v.fx.step[t.prop]?v.fx.step[t.prop](t):1!==t.elem.nodeType||!v.cssHooks[t.prop]&&null==t.elem.style[Kt(t.prop)]?t.elem[t.prop]=t.now:v.style(t.elem,t.prop,t.now+t.unit)}}},be.propHooks.scrollTop=be.propHooks.scrollLeft={set:function(t){t.elem.nodeType&&t.elem.parentNode&&(t.elem[t.prop]=t.now)}},v.easing={linear:function(t){return t},swing:function(t){return.5-Math.cos(t*Math.PI)/2},_default:"swing"},v.fx=be.prototype.init,v.fx.step={};var ne,Me,ze=/^(?:toggle|show|hide)$/,ce=/queueHooks$/;function re(){Me&&(!1===q.hidden&&p.requestAnimationFrame?p.requestAnimationFrame(re):p.setTimeout(re,v.fx.interval),v.fx.tick())}function ie(){return p.setTimeout((function(){ne=void 0})),ne=Date.now()}function ae(t,e){var o,p=0,b={height:t};for(e=e?1:0;p<4;p+=2-e)b["margin"+(o=nt[p])]=b["padding"+o]=t;return e&&(b.opacity=b.width=t),b}function Oe(t,e,o){for(var p,b=(se.tweeners[e]||[]).concat(se.tweeners["*"]),n=0,M=b.length;n1)},removeAttr:function(t){return this.each((function(){v.removeAttr(this,t)}))}}),v.extend({attr:function(t,e,o){var p,b,n=t.nodeType;if(3!==n&&8!==n&&2!==n)return void 0===t.getAttribute?v.prop(t,e,o):(1===n&&v.isXMLDoc(t)||(b=v.attrHooks[e.toLowerCase()]||(v.expr.match.bool.test(e)?le:void 0)),void 0!==o?null===o?void v.removeAttr(t,e):b&&"set"in b&&void 0!==(p=b.set(t,o,e))?p:(t.setAttribute(e,o+""),o):b&&"get"in b&&null!==(p=b.get(t,e))?p:null==(p=v.find.attr(t,e))?void 0:p)},attrHooks:{type:{set:function(t,e){if(!A.radioValue&&"radio"===e&&_(t,"input")){var o=t.value;return t.setAttribute("type",e),o&&(t.value=o),e}}}},removeAttr:function(t,e){var o,p=0,b=e&&e.match(E);if(b&&1===t.nodeType)for(;o=b[p++];)t.removeAttribute(o)}}),le={set:function(t,e,o){return!1===e?v.removeAttr(t,o):t.setAttribute(o,o),o}},v.each(v.expr.match.bool.source.match(/\w+/g),(function(t,e){var o=de[e]||v.find.attr;de[e]=function(t,e,p){var b,n,M=e.toLowerCase();return p||(n=de[M],de[M]=b,b=null!=o(t,e,p)?M:null,de[M]=n),b}}));var Ae=/^(?:input|select|textarea|button)$/i,ue=/^(?:a|area)$/i;function fe(t){return(t.match(E)||[]).join(" ")}function qe(t){return t.getAttribute&&t.getAttribute("class")||""}function he(t){return Array.isArray(t)?t:"string"==typeof t&&t.match(E)||[]}v.fn.extend({prop:function(t,e){return U(this,v.prop,t,e,arguments.length>1)},removeProp:function(t){return this.each((function(){delete this[v.propFix[t]||t]}))}}),v.extend({prop:function(t,e,o){var p,b,n=t.nodeType;if(3!==n&&8!==n&&2!==n)return 1===n&&v.isXMLDoc(t)||(e=v.propFix[e]||e,b=v.propHooks[e]),void 0!==o?b&&"set"in b&&void 0!==(p=b.set(t,o,e))?p:t[e]=o:b&&"get"in b&&null!==(p=b.get(t,e))?p:t[e]},propHooks:{tabIndex:{get:function(t){var e=v.find.attr(t,"tabindex");return e?parseInt(e,10):Ae.test(t.nodeName)||ue.test(t.nodeName)&&t.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),A.optSelected||(v.propHooks.selected={get:function(t){var e=t.parentNode;return e&&e.parentNode&&e.parentNode.selectedIndex,null},set:function(t){var e=t.parentNode;e&&(e.selectedIndex,e.parentNode&&e.parentNode.selectedIndex)}}),v.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],(function(){v.propFix[this.toLowerCase()]=this})),v.fn.extend({addClass:function(t){var e,o,p,b,n,M;return u(t)?this.each((function(e){v(this).addClass(t.call(this,e,qe(this)))})):(e=he(t)).length?this.each((function(){if(p=qe(this),o=1===this.nodeType&&" "+fe(p)+" "){for(n=0;n-1;)o=o.replace(" "+b+" "," ");M=fe(o),p!==M&&this.setAttribute("class",M)}})):this:this.attr("class","")},toggleClass:function(t,e){var o,p,b,n,M=typeof t,z="string"===M||Array.isArray(t);return u(t)?this.each((function(o){v(this).toggleClass(t.call(this,o,qe(this),e),e)})):"boolean"==typeof e&&z?e?this.addClass(t):this.removeClass(t):(o=he(t),this.each((function(){if(z)for(n=v(this),b=0;b-1)return!0;return!1}});var We=/\r/g;v.fn.extend({val:function(t){var e,o,p,b=this[0];return arguments.length?(p=u(t),this.each((function(o){var b;1===this.nodeType&&(null==(b=p?t.call(this,o,v(this).val()):t)?b="":"number"==typeof b?b+="":Array.isArray(b)&&(b=v.map(b,(function(t){return null==t?"":t+""}))),(e=v.valHooks[this.type]||v.valHooks[this.nodeName.toLowerCase()])&&"set"in e&&void 0!==e.set(this,b,"value")||(this.value=b))}))):b?(e=v.valHooks[b.type]||v.valHooks[b.nodeName.toLowerCase()])&&"get"in e&&void 0!==(o=e.get(b,"value"))?o:"string"==typeof(o=b.value)?o.replace(We,""):null==o?"":o:void 0}}),v.extend({valHooks:{option:{get:function(t){var e=v.find.attr(t,"value");return null!=e?e:fe(v.text(t))}},select:{get:function(t){var e,o,p,b=t.options,n=t.selectedIndex,M="select-one"===t.type,z=M?null:[],c=M?n+1:b.length;for(p=n<0?c:M?n:0;p-1)&&(o=!0);return o||(t.selectedIndex=-1),n}}}}),v.each(["radio","checkbox"],(function(){v.valHooks[this]={set:function(t,e){if(Array.isArray(e))return t.checked=v.inArray(v(t).val(),e)>-1}},A.checkOn||(v.valHooks[this].get=function(t){return null===t.getAttribute("value")?"on":t.value})})),A.focusin="onfocusin"in p;var me=/^(?:focusinfocus|focusoutblur)$/,ge=function(t){t.stopPropagation()};v.extend(v.event,{trigger:function(t,e,o,b){var n,M,z,c,r,i,a,O,l=[o||q],d=s.call(t,"type")?t.type:t,A=s.call(t,"namespace")?t.namespace.split("."):[];if(M=O=z=o=o||q,3!==o.nodeType&&8!==o.nodeType&&!me.test(d+v.event.triggered)&&(d.indexOf(".")>-1&&(A=d.split("."),d=A.shift(),A.sort()),r=d.indexOf(":")<0&&"on"+d,(t=t[v.expando]?t:new v.Event(d,"object"==typeof t&&t)).isTrigger=b?2:3,t.namespace=A.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+A.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=o),e=null==e?[t]:v.makeArray(e,[t]),a=v.event.special[d]||{},b||!a.trigger||!1!==a.trigger.apply(o,e))){if(!b&&!a.noBubble&&!f(o)){for(c=a.delegateType||d,me.test(c+d)||(M=M.parentNode);M;M=M.parentNode)l.push(M),z=M;z===(o.ownerDocument||q)&&l.push(z.defaultView||z.parentWindow||p)}for(n=0;(M=l[n++])&&!t.isPropagationStopped();)O=M,t.type=n>1?c:a.bindType||d,(i=(Q.get(M,"events")||Object.create(null))[t.type]&&Q.get(M,"handle"))&&i.apply(M,e),(i=r&&M[r])&&i.apply&&J(M)&&(t.result=i.apply(M,e),!1===t.result&&t.preventDefault());return t.type=d,b||t.isDefaultPrevented()||a._default&&!1!==a._default.apply(l.pop(),e)||!J(o)||r&&u(o[d])&&!f(o)&&((z=o[r])&&(o[r]=null),v.event.triggered=d,t.isPropagationStopped()&&O.addEventListener(d,ge),o[d](),t.isPropagationStopped()&&O.removeEventListener(d,ge),v.event.triggered=void 0,z&&(o[r]=z)),t.result}},simulate:function(t,e,o){var p=v.extend(new v.Event,o,{type:t,isSimulated:!0});v.event.trigger(p,null,e)}}),v.fn.extend({trigger:function(t,e){return this.each((function(){v.event.trigger(t,e,this)}))},triggerHandler:function(t,e){var o=this[0];if(o)return v.event.trigger(t,e,o,!0)}}),A.focusin||v.each({focus:"focusin",blur:"focusout"},(function(t,e){var o=function(t){v.event.simulate(e,t.target,v.event.fix(t))};v.event.special[e]={setup:function(){var p=this.ownerDocument||this.document||this,b=Q.access(p,e);b||p.addEventListener(t,o,!0),Q.access(p,e,(b||0)+1)},teardown:function(){var p=this.ownerDocument||this.document||this,b=Q.access(p,e)-1;b?Q.access(p,e,b):(p.removeEventListener(t,o,!0),Q.remove(p,e))}}}));var ve=p.location,Re={guid:Date.now()},ye=/\?/;v.parseXML=function(t){var e,o;if(!t||"string"!=typeof t)return null;try{e=(new p.DOMParser).parseFromString(t,"text/xml")}catch(t){}return o=e&&e.getElementsByTagName("parsererror")[0],e&&!o||v.error("Invalid XML: "+(o?v.map(o.childNodes,(function(t){return t.textContent})).join("\n"):t)),e};var Be=/\[\]$/,Le=/\r?\n/g,Xe=/^(?:submit|button|image|reset|file)$/i,_e=/^(?:input|select|textarea|keygen)/i;function Ne(t,e,o,p){var b;if(Array.isArray(e))v.each(e,(function(e,b){o||Be.test(t)?p(t,b):Ne(t+"["+("object"==typeof b&&null!=b?e:"")+"]",b,o,p)}));else if(o||"object"!==m(e))p(t,e);else for(b in e)Ne(t+"["+b+"]",e[b],o,p)}v.param=function(t,e){var o,p=[],b=function(t,e){var o=u(e)?e():e;p[p.length]=encodeURIComponent(t)+"="+encodeURIComponent(null==o?"":o)};if(null==t)return"";if(Array.isArray(t)||t.jquery&&!v.isPlainObject(t))v.each(t,(function(){b(this.name,this.value)}));else for(o in t)Ne(o,t[o],e,b);return p.join("&")},v.fn.extend({serialize:function(){return v.param(this.serializeArray())},serializeArray:function(){return this.map((function(){var t=v.prop(this,"elements");return t?v.makeArray(t):this})).filter((function(){var t=this.type;return this.name&&!v(this).is(":disabled")&&_e.test(this.nodeName)&&!Xe.test(t)&&(this.checked||!At.test(t))})).map((function(t,e){var o=v(this).val();return null==o?null:Array.isArray(o)?v.map(o,(function(t){return{name:e.name,value:t.replace(Le,"\r\n")}})):{name:e.name,value:o.replace(Le,"\r\n")}})).get()}});var we=/%20/g,xe=/#.*$/,Te=/([?&])_=[^&]*/,Ce=/^(.*?):[ \t]*([^\r\n]*)$/gm,Se=/^(?:GET|HEAD)$/,ke=/^\/\//,Ee={},De={},Pe="*/".concat("*"),je=q.createElement("a");function Ie(t){return function(e,o){"string"!=typeof e&&(o=e,e="*");var p,b=0,n=e.toLowerCase().match(E)||[];if(u(o))for(;p=n[b++];)"+"===p[0]?(p=p.slice(1)||"*",(t[p]=t[p]||[]).unshift(o)):(t[p]=t[p]||[]).push(o)}}function Fe(t,e,o,p){var b={},n=t===De;function M(z){var c;return b[z]=!0,v.each(t[z]||[],(function(t,z){var r=z(e,o,p);return"string"!=typeof r||n||b[r]?n?!(c=r):void 0:(e.dataTypes.unshift(r),M(r),!1)})),c}return M(e.dataTypes[0])||!b["*"]&&M("*")}function He(t,e){var o,p,b=v.ajaxSettings.flatOptions||{};for(o in e)void 0!==e[o]&&((b[o]?t:p||(p={}))[o]=e[o]);return p&&v.extend(!0,t,p),t}je.href=ve.href,v.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:ve.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(ve.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Pe,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":v.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(t,e){return e?He(He(t,v.ajaxSettings),e):He(v.ajaxSettings,t)},ajaxPrefilter:Ie(Ee),ajaxTransport:Ie(De),ajax:function(t,e){"object"==typeof t&&(e=t,t=void 0),e=e||{};var o,b,n,M,z,c,r,i,a,O,s=v.ajaxSetup({},e),l=s.context||s,d=s.context&&(l.nodeType||l.jquery)?v(l):v.event,A=v.Deferred(),u=v.Callbacks("once memory"),f=s.statusCode||{},h={},W={},m="canceled",g={readyState:0,getResponseHeader:function(t){var e;if(r){if(!M)for(M={};e=Ce.exec(n);)M[e[1].toLowerCase()+" "]=(M[e[1].toLowerCase()+" "]||[]).concat(e[2]);e=M[t.toLowerCase()+" "]}return null==e?null:e.join(", ")},getAllResponseHeaders:function(){return r?n:null},setRequestHeader:function(t,e){return null==r&&(t=W[t.toLowerCase()]=W[t.toLowerCase()]||t,h[t]=e),this},overrideMimeType:function(t){return null==r&&(s.mimeType=t),this},statusCode:function(t){var e;if(t)if(r)g.always(t[g.status]);else for(e in t)f[e]=[f[e],t[e]];return this},abort:function(t){var e=t||m;return o&&o.abort(e),R(0,e),this}};if(A.promise(g),s.url=((t||s.url||ve.href)+"").replace(ke,ve.protocol+"//"),s.type=e.method||e.type||s.method||s.type,s.dataTypes=(s.dataType||"*").toLowerCase().match(E)||[""],null==s.crossDomain){c=q.createElement("a");try{c.href=s.url,c.href=c.href,s.crossDomain=je.protocol+"//"+je.host!=c.protocol+"//"+c.host}catch(t){s.crossDomain=!0}}if(s.data&&s.processData&&"string"!=typeof s.data&&(s.data=v.param(s.data,s.traditional)),Fe(Ee,s,e,g),r)return g;for(a in(i=v.event&&s.global)&&0==v.active++&&v.event.trigger("ajaxStart"),s.type=s.type.toUpperCase(),s.hasContent=!Se.test(s.type),b=s.url.replace(xe,""),s.hasContent?s.data&&s.processData&&0===(s.contentType||"").indexOf("application/x-www-form-urlencoded")&&(s.data=s.data.replace(we,"+")):(O=s.url.slice(b.length),s.data&&(s.processData||"string"==typeof s.data)&&(b+=(ye.test(b)?"&":"?")+s.data,delete s.data),!1===s.cache&&(b=b.replace(Te,"$1"),O=(ye.test(b)?"&":"?")+"_="+Re.guid+++O),s.url=b+O),s.ifModified&&(v.lastModified[b]&&g.setRequestHeader("If-Modified-Since",v.lastModified[b]),v.etag[b]&&g.setRequestHeader("If-None-Match",v.etag[b])),(s.data&&s.hasContent&&!1!==s.contentType||e.contentType)&&g.setRequestHeader("Content-Type",s.contentType),g.setRequestHeader("Accept",s.dataTypes[0]&&s.accepts[s.dataTypes[0]]?s.accepts[s.dataTypes[0]]+("*"!==s.dataTypes[0]?", "+Pe+"; q=0.01":""):s.accepts["*"]),s.headers)g.setRequestHeader(a,s.headers[a]);if(s.beforeSend&&(!1===s.beforeSend.call(l,g,s)||r))return g.abort();if(m="abort",u.add(s.complete),g.done(s.success),g.fail(s.error),o=Fe(De,s,e,g)){if(g.readyState=1,i&&d.trigger("ajaxSend",[g,s]),r)return g;s.async&&s.timeout>0&&(z=p.setTimeout((function(){g.abort("timeout")}),s.timeout));try{r=!1,o.send(h,R)}catch(t){if(r)throw t;R(-1,t)}}else R(-1,"No Transport");function R(t,e,M,c){var a,O,q,h,W,m=e;r||(r=!0,z&&p.clearTimeout(z),o=void 0,n=c||"",g.readyState=t>0?4:0,a=t>=200&&t<300||304===t,M&&(h=function(t,e,o){for(var p,b,n,M,z=t.contents,c=t.dataTypes;"*"===c[0];)c.shift(),void 0===p&&(p=t.mimeType||e.getResponseHeader("Content-Type"));if(p)for(b in z)if(z[b]&&z[b].test(p)){c.unshift(b);break}if(c[0]in o)n=c[0];else{for(b in o){if(!c[0]||t.converters[b+" "+c[0]]){n=b;break}M||(M=b)}n=n||M}if(n)return n!==c[0]&&c.unshift(n),o[n]}(s,g,M)),!a&&v.inArray("script",s.dataTypes)>-1&&v.inArray("json",s.dataTypes)<0&&(s.converters["text script"]=function(){}),h=function(t,e,o,p){var b,n,M,z,c,r={},i=t.dataTypes.slice();if(i[1])for(M in t.converters)r[M.toLowerCase()]=t.converters[M];for(n=i.shift();n;)if(t.responseFields[n]&&(o[t.responseFields[n]]=e),!c&&p&&t.dataFilter&&(e=t.dataFilter(e,t.dataType)),c=n,n=i.shift())if("*"===n)n=c;else if("*"!==c&&c!==n){if(!(M=r[c+" "+n]||r["* "+n]))for(b in r)if((z=b.split(" "))[1]===n&&(M=r[c+" "+z[0]]||r["* "+z[0]])){!0===M?M=r[b]:!0!==r[b]&&(n=z[0],i.unshift(z[1]));break}if(!0!==M)if(M&&t.throws)e=M(e);else try{e=M(e)}catch(t){return{state:"parsererror",error:M?t:"No conversion from "+c+" to "+n}}}return{state:"success",data:e}}(s,h,g,a),a?(s.ifModified&&((W=g.getResponseHeader("Last-Modified"))&&(v.lastModified[b]=W),(W=g.getResponseHeader("etag"))&&(v.etag[b]=W)),204===t||"HEAD"===s.type?m="nocontent":304===t?m="notmodified":(m=h.state,O=h.data,a=!(q=h.error))):(q=m,!t&&m||(m="error",t<0&&(t=0))),g.status=t,g.statusText=(e||m)+"",a?A.resolveWith(l,[O,m,g]):A.rejectWith(l,[g,m,q]),g.statusCode(f),f=void 0,i&&d.trigger(a?"ajaxSuccess":"ajaxError",[g,s,a?O:q]),u.fireWith(l,[g,m]),i&&(d.trigger("ajaxComplete",[g,s]),--v.active||v.event.trigger("ajaxStop")))}return g},getJSON:function(t,e,o){return v.get(t,e,o,"json")},getScript:function(t,e){return v.get(t,void 0,e,"script")}}),v.each(["get","post"],(function(t,e){v[e]=function(t,o,p,b){return u(o)&&(b=b||p,p=o,o=void 0),v.ajax(v.extend({url:t,type:e,dataType:b,data:o,success:p},v.isPlainObject(t)&&t))}})),v.ajaxPrefilter((function(t){var e;for(e in t.headers)"content-type"===e.toLowerCase()&&(t.contentType=t.headers[e]||"")})),v._evalUrl=function(t,e,o){return v.ajax({url:t,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(t){v.globalEval(t,e,o)}})},v.fn.extend({wrapAll:function(t){var e;return this[0]&&(u(t)&&(t=t.call(this[0])),e=v(t,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&e.insertBefore(this[0]),e.map((function(){for(var t=this;t.firstElementChild;)t=t.firstElementChild;return t})).append(this)),this},wrapInner:function(t){return u(t)?this.each((function(e){v(this).wrapInner(t.call(this,e))})):this.each((function(){var e=v(this),o=e.contents();o.length?o.wrapAll(t):e.append(t)}))},wrap:function(t){var e=u(t);return this.each((function(o){v(this).wrapAll(e?t.call(this,o):t)}))},unwrap:function(t){return this.parent(t).not("body").each((function(){v(this).replaceWith(this.childNodes)})),this}}),v.expr.pseudos.hidden=function(t){return!v.expr.pseudos.visible(t)},v.expr.pseudos.visible=function(t){return!!(t.offsetWidth||t.offsetHeight||t.getClientRects().length)},v.ajaxSettings.xhr=function(){try{return new p.XMLHttpRequest}catch(t){}};var Ue={0:200,1223:204},Ve=v.ajaxSettings.xhr();A.cors=!!Ve&&"withCredentials"in Ve,A.ajax=Ve=!!Ve,v.ajaxTransport((function(t){var e,o;if(A.cors||Ve&&!t.crossDomain)return{send:function(b,n){var M,z=t.xhr();if(z.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(M in t.xhrFields)z[M]=t.xhrFields[M];for(M in t.mimeType&&z.overrideMimeType&&z.overrideMimeType(t.mimeType),t.crossDomain||b["X-Requested-With"]||(b["X-Requested-With"]="XMLHttpRequest"),b)z.setRequestHeader(M,b[M]);e=function(t){return function(){e&&(e=o=z.onload=z.onerror=z.onabort=z.ontimeout=z.onreadystatechange=null,"abort"===t?z.abort():"error"===t?"number"!=typeof z.status?n(0,"error"):n(z.status,z.statusText):n(Ue[z.status]||z.status,z.statusText,"text"!==(z.responseType||"text")||"string"!=typeof z.responseText?{binary:z.response}:{text:z.responseText},z.getAllResponseHeaders()))}},z.onload=e(),o=z.onerror=z.ontimeout=e("error"),void 0!==z.onabort?z.onabort=o:z.onreadystatechange=function(){4===z.readyState&&p.setTimeout((function(){e&&o()}))},e=e("abort");try{z.send(t.hasContent&&t.data||null)}catch(t){if(e)throw t}},abort:function(){e&&e()}}})),v.ajaxPrefilter((function(t){t.crossDomain&&(t.contents.script=!1)})),v.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(t){return v.globalEval(t),t}}}),v.ajaxPrefilter("script",(function(t){void 0===t.cache&&(t.cache=!1),t.crossDomain&&(t.type="GET")})),v.ajaxTransport("script",(function(t){var e,o;if(t.crossDomain||t.scriptAttrs)return{send:function(p,b){e=v("
+
+
+ openContextMenu(e)">
+
+
+
+
+
+
+
diff --git a/resources/js/Components/ContextMenus/ContextMenuItem.vue b/resources/js/Components/ContextMenus/ContextMenuItem.vue
new file mode 100644
index 00000000..0821f56b
--- /dev/null
+++ b/resources/js/Components/ContextMenus/ContextMenuItem.vue
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
diff --git a/resources/js/Components/NavLink.vue b/resources/js/Components/NavLink.vue
index d93610d5..e84b321f 100644
--- a/resources/js/Components/NavLink.vue
+++ b/resources/js/Components/NavLink.vue
@@ -15,7 +15,7 @@ const classes = computed(() => {
-
+
diff --git a/resources/js/Components/ResponsiveNavLink.vue b/resources/js/Components/ResponsiveNavLink.vue
index c8af3105..62c2f1a2 100644
--- a/resources/js/Components/ResponsiveNavLink.vue
+++ b/resources/js/Components/ResponsiveNavLink.vue
@@ -21,7 +21,7 @@ const classes = computed(() => {
-
+
diff --git a/resources/js/Components/Spork/CollapsibleArticle.vue b/resources/js/Components/Spork/CollapsibleArticle.vue
new file mode 100644
index 00000000..d18405f7
--- /dev/null
+++ b/resources/js/Components/Spork/CollapsibleArticle.vue
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+
+
+
+
![]()
+
+
{{ article.headline }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/resources/js/Components/Spork/CrudView.vue b/resources/js/Components/Spork/CrudView.vue
index 38952dce..2c5bf10d 100644
--- a/resources/js/Components/Spork/CrudView.vue
+++ b/resources/js/Components/Spork/CrudView.vue
@@ -5,80 +5,59 @@
{{ title }}
-
-
-
-
-
+
+
+
-
-
-
- Create {{singular}}
-
-
-
-
-
-
-
-
-
-
- {{ selectedItems.length }} selected
-
+
{{ selectedItems.length }} selected
+
-
-
-
+
+
+
-
+
+
+
-
-
-
-
-
-
-
- filters
-
-
-
+
+
+ filters
+
+
+
+
+
-
-
-
+
-
-
-
+
+
+
-
-
- fallback: {{ datum}}
-
+
+
@@ -86,35 +65,31 @@
-
-
- No {{ singular.toLowerCase() }} data
-
-
-
+
-
-
- Previous
-
-
- {{ data.length * currentPage }} items of {{ paginator?.total }} total items, {{ currentPage }} of {{ paginator.last_page}}
-
+
+
+ No data present in table
+
+
-
- Next
-
-
+
+
+
Previous
+
+ {{ (currentPage * itemsPerPage) - itemsPerPage }} total items, {{ currentPage }} of {{ paginator?.total}}
+
+
{
+ getData(currentPage + 1);
+ }"
+ :disabled="hasNextPage"
+ plain
+ xlarge
+ :class="[!hasNextPage ? 'opacity-50 cursor-not-allowed': 'cursor-pointer']"
+ >Next
+
+
+
@@ -163,6 +138,8 @@ import { PlayIcon, XMarkIcon, ArrowPathIcon } from "@heroicons/vue/24/outline";
import SporkInput from './SporkInput.vue';
import SporkButton from './SporkButton.vue';
import { router, Link } from '@inertiajs/vue3';
+import SporkSelect from "@/Components/Spork/SporkSelect.vue";
+import SporkTable from "@/Components/Spork/SporkTable.vue";
const {
form,
title,
@@ -174,6 +151,7 @@ const {
paginator,
settings,
description,
+ apiLink,
} = defineProps({
form: {
type: Object,
@@ -223,8 +201,17 @@ const {
fields: [],
required: [],
sorts: [],
+ tags: [],
})
- }
+ },
+ plural: {
+ type: String,
+ default: ''
+ },
+ apiLink: {
+ type: String,
+ default: '/api/crud/models'
+ }
})
const $emit = defineEmits([
'index', 'destroy', 'save', 'execute'
@@ -239,6 +226,7 @@ const searchQuery = ref(localStorage.getItem('searchQuery') ? localStorage.getIt
const debounceSearch = ref(null);
const executing = ref(false);
+const selectedTagToApply = ref(null);
const hasPreviousPage = computed(() => {
return paginator.prev_page_url !== null;
@@ -282,7 +270,21 @@ onMounted(() => {
limit: itemsPerPage.value
})
})
+const applyTag = async () => {
+ if (!selectedTagToApply.value) {
+ return;
+ }
+ await Promise.all(selectedItems.value.map(async (item) => {
+ await axios.post(`${apiLink}/${item.id}/tags`, {
+ tags: [selectedTagToApply.value]
+ })
+ }))
+
+ router.reload({
+ only: ['data', 'paginator', 'description']
+ })
+}
// const searchQuery = (newVal, oldVal) => {
// if (debounceSearch !== null) {
// clearTimeout(this.debounceSearch)
diff --git a/resources/js/Components/Spork/FileOrFolder.vue b/resources/js/Components/Spork/FileOrFolder.vue
index b8c4fb81..aa74c90b 100644
--- a/resources/js/Components/Spork/FileOrFolder.vue
+++ b/resources/js/Components/Spork/FileOrFolder.vue
@@ -5,9 +5,7 @@
['app', 'src', 'resources', 'system'].includes(name) ? 'bg-blue-500/10' :'',
['bootstrap', 'public'].includes(name) ? 'bg-stone-700/10' :'',
['vendor', 'node_modules'].includes(name) ? 'bg-orange-500/10' :'',
- //$store.getters.features?.development?.map(feature => feature?.settings?.path ?? null).includes(file.file_path) ? 'bg-amber-600/10 dark:bg-amber-400/10' :'',
- ]"
->
+ ]">
feature?.settings?.path ?? null).includes(file.file_path) ? 'text-amber-600 dark:text-amber-400' :'',
]"
@dblclick="onToggleFolderExpand"
>
@@ -43,7 +40,7 @@
['package.json', 'yarn.lock', 'package-lock.json',].includes(name) ? 'text-orange-600 dark:text-orange-400' :'',
!['artisan', 'composer', 'composer.phar', 'dev', 'sail', 'tests', 'public', 'composer.json', 'composer.lock', 'package.json', 'yarn.lock', 'package-lock.json',].includes(name) ? 'text-stone-700 dark:text-stone-100' :'',
]"
- @dblclick="$emit("openFile", file)">
+ @dblclick="$emit('openFile', file)">
@@ -197,7 +199,7 @@ const deleteCondition= () => {}
{{ tag.name?.en }}
-
+
{{ tag.servers_count }}
@@ -212,7 +214,8 @@ const deleteCondition= () => {}
- {{ tag.transactions_count }}
+ {{ tag.transactions_count }}
+ ${{ round(tag.transactions_sum_amount) }}
diff --git a/resources/js/app.js b/resources/js/app.js
index c08fa951..79935289 100644
--- a/resources/js/app.js
+++ b/resources/js/app.js
@@ -81,17 +81,32 @@ createInertiaApp({
addComponentToRegistry(BuilderText);
addComponentToRegistry(Grid);
addComponentToRegistry(TitleAndFooterTextCard);
+
if (props?.initialPage?.props?.auth?.user?.id) {
- Echo.private(`App.Models.User.${props?.initialPage?.props?.auth?.user?.id}`)
- .listen('.MessageCreated', (e) => {
+ const userId = props?.initialPage?.props?.auth?.user?.id;
+ Echo.private(`App.Models.User.${userId}`)
+ .listen('Models.Message.MessageCreated', (e) => {
router.reload({
only: ['messages', 'unread_email_count'],
});
})
- .listen('.AccountUpdated', e => {
- router.refresh({
+ .listen('Models.Account.AccountUpdated', e => {
+ router.reload({
only: ['accounts', 'unread_email_count']
})
+ })
+ .listen('Models.JobBatch.JobBatchCreated', e => {
+ router.reload({
+ only: ['job_batches', 'news']
+ })
+ })
+ .listen('Models.JobBatch.JobBatchUpdated', e => {
+ router.reload({
+ only: ['job_batches', 'news']
+ })
+ })
+ .error((error) => {
+ console.error(error);
});
}
diff --git a/resources/js/bootstrap.js b/resources/js/bootstrap.js
index 42f73fbd..372ff308 100644
--- a/resources/js/bootstrap.js
+++ b/resources/js/bootstrap.js
@@ -36,9 +36,9 @@ window.axios.interceptors.request.use(function (config) {
}, {
});
-
+//
window.onerror = (error) => {
- toaster.error(error.message);
+ console.error(error);
}
/**
@@ -55,6 +55,10 @@ window.Pusher = Pusher;
window.Echo = new Echo({
broadcaster: 'pusher',
key: import.meta.env.VITE_PUSHER_APP_KEY,
- cluster: import.meta.env.VITE_PUSHER_APP_CLUSTER,
- forceTLS: true
+ cluster: import.meta.env.VITE_PUSHER_APP_CLUSTER ?? 'mt1',
+ wsHost: import.meta.env.VITE_PUSHER_HOST ? import.meta.env.VITE_PUSHER_HOST : `ws-${import.meta.env.VITE_PUSHER_APP_CLUSTER}.pusher.com`,
+ wsPort: import.meta.env.VITE_PUSHER_PORT ?? 80,
+ wssPort: import.meta.env.VITE_PUSHER_PORT ?? 443,
+ forceTLS: (import.meta.env.VITE_PUSHER_SCHEME ?? 'https') === 'https',
+ enabledTransports: ['ws', 'wss'],
});
diff --git a/resources/screenshots/screenshot-dashboard-2024-02-25.png b/resources/screenshots/screenshot-dashboard-2024-02-25.png
new file mode 100644
index 00000000..63bab5df
Binary files /dev/null and b/resources/screenshots/screenshot-dashboard-2024-02-25.png differ
diff --git a/routes/console.php b/routes/console.php
index 174d7fd7..265c209c 100644
--- a/routes/console.php
+++ b/routes/console.php
@@ -1,3 +1,4 @@
name($name.'.destroy');
// Force delete
Route::delete($name.'/{'.$name.'}/force', [\App\Http\Controllers\Spork\LocalAdminController::class, 'forceDestroy'])->name($name.'.forceDestroy');
+ Route::post($name.'/{'.$name.'}/tags', [\App\Http\Controllers\Spork\LocalAdminController::class, 'tag'])->name($name.'.tags');
});
}
}
@@ -34,6 +35,7 @@ function developerRoute($name, $model)
developerRoute('conditions', App\Models\Condition::class);
developerRoute('credentials', App\Models\Credential::class);
developerRoute('domains', App\Models\Domain::class);
+developerRoute('domain_records', App\Models\DomainRecord::class);
developerRoute('external_rss_feeds', App\Models\ExternalRssFeed::class);
developerRoute('messages', App\Models\Message::class);
developerRoute('navigations', App\Models\Navigation::class);
diff --git a/routes/pages/spork.php b/routes/pages/spork.php
index 1708b563..13baa8f2 100644
--- a/routes/pages/spork.php
+++ b/routes/pages/spork.php
@@ -3,27 +3,12 @@
declare(strict_types=1);
use App\Actions\Spork\CustomAction;
-use App\Contracts\ModelQuery;
use App\Http\Controllers;
-use App\Models\Person;
-use App\Services\Development\DescribeTableService;
use App\Services\Programming\LaravelProgrammingStyle;
use Illuminate\Foundation\Application;
-use Illuminate\Support\Arr;
use Illuminate\Support\Facades\Route;
use Inertia\Inertia;
-/*
-|--------------------------------------------------------------------------
-| Web Routes
-|--------------------------------------------------------------------------
-|
-| Here is where you can register web routes for your application. These
-| routes are loaded by the RouteServiceProvider within a group which
-| contains the "web" middleware group. Now create something great!
-|
-*/
-
Route::get('/', function () {
return Inertia::render('Welcome', [
'canLogin' => Route::has('login'),
@@ -45,30 +30,6 @@
}
}
- Route::get('/api/files/{basepath}', function ($path) {
- $decoded = base64_decode($path);
-
- if (is_dir($decoded)) {
- $files = Storage::disk(config('spork.filesystem.default'))->files($decoded);
- $directories = Storage::disk(config('spork.filesystem.default'))->directories($decoded);
-
- return array_map(
- fn ($file) => [
- 'name' => basename($file),
- 'file_path' => base64_encode($file),
- 'is_directory' => is_dir($file),
- 'type' => 'file',
- ],
- array_merge(
- $directories,
- $files
- )
- );
- }
-
- return file_get_contents($decoded);
- });
-
Route::get('/api/device-code', function () {
$code = request()->user()->codes()->firstWhere('is_enabled', true);
@@ -108,13 +69,7 @@
Route::get('/servers/{server}', [Controllers\Spork\ServersController::class, 'show'])->name('servers.show');
Route::get('/domains/{domain}', [Controllers\Spork\DomainsController::class, 'show'])->name('domains.show');
- Route::get('/user/api-query', function (DescribeTableService $descriptionService) {
- return Inertia::render('API/QueryBuilderPage', [
- 'models' => collect(\App\Services\Code::instancesOf(ModelQuery::class)
- ->getClasses())
- ->map(fn ($model) => $descriptionService->describe(new $model)),
- ]);
- })->middleware(\App\Http\Middleware\Authenticate::class)->name('user.api-query');
+ Route::get('/user/api-query', Controllers\User\ApiQueryController::class)->middleware(\App\Http\Middleware\Authenticate::class)->name('user.api-query');
Route::post('project/{project}/deploy', [Controllers\Spork\ProjectsController::class, 'deploy'])->name('project.deploy');
@@ -130,220 +85,29 @@
config('jetstream.auth_session'),
'verified',
]], function () {
- Route::get('/dashboard', function () {
- $person = Person::whereJsonContains('emails', auth()->user()->email)
- // for now, this is fine, my email base does support this idea, but I know if someone/
- // wanted to be malicious they could take advantage of this.
- ->first();
-
- return Inertia::render('Dashboard', [
- 'project_count' => \App\Models\Project::count(),
- 'server_count' => \App\Models\Server::count(),
- 'domain_count' => \App\Models\Domain::count(),
- 'credential_count' => \App\Models\Credential::count(),
- 'user_count' => \App\Models\User::count(),
- // Unread Messages
- // Tasks due today
- // Domains that expire this month, or in the last 7 days
- // Weather at my primary address
- 'weather' => Arr::first(app(\App\Contracts\Services\WeatherServiceContract::class)->query(
- $person->primary_address,
- )),
- 'unread_messages' => request()->user()
- ->messages()
- ->count(),
- 'messages' => request()->user()
- ->messages()
- ->paginate(15, ['*'], 'messages_page'),
+ Route::get('/dashboard', Controllers\Spork\DashboardController::class)->name('dashboard');
- ]);
- })->name('dashboard');
-
- Route::get('/tag-manager', function () {
- return Inertia::render('Tags/Index', [
- 'tags' => \App\Models\Tag::withCount([
- 'conditions',
- 'articles',
- 'feeds',
- 'servers',
- 'transactions',
- 'projects',
- 'budgets',
- 'accounts',
- 'domains',
- 'people',
- 'messages' => function ($q) {
- $q->where('seen', false);
- },
- ])
- ->with(['conditions'])
- ->orderBy('type')
- ->paginate(
- request('limit', 30),
- ['*'],
- 'page',
- request('page')
- ),
- ]);
- });
- Route::get('/postal', function () {
- return Inertia::render('Postal/Index', [
- 'threads' => \App\Models\Thread::query()
- ->with([
- 'participants' => function ($query) {
- $query->where('name', 'not like', '%bridge bot%');
- },
- ])
- ->orderByDesc('origin_server_ts')
- ->paginate(request('limit', 15), ['*'], 'page', 1),
- ]);
- });
Route::get('/projects', [Controllers\Spork\ProjectsController::class, 'index'])->name('projects.index');
Route::get('/projects/{project}', [Controllers\Spork\ProjectsController::class, 'show'])->name('projects.show');
+ Route::get('/banking', Controllers\Spork\BankingController::class)->name('banking.index');
+ Route::get('/file-manager', Controllers\Spork\FileManagerController::class)->name('file-manager.index');
- Route::get('/projects/create', function () {
- return Inertia::render('Projects/Create');
- });
-
- Route::get('/research', function () {
- return Inertia::render('Research/Dashboard', [
- 'research' => request()->user()->projects()
- ->with('research')
- ->get()
- ->map(fn ($project) => $project->research)
- ->flatten(),
- ]);
- });
- Route::get('/research/{research}', function (App\Models\Research $research) {
- return Inertia::render('Research/Topic', [
- 'topic' => $research,
- ]);
- });
- Route::get('/inbox', function () {
- return Inertia::render('Postal/Inbox', [
- 'messages' => \App\Models\Message::query()
- ->with('from', 'to')
- ->where('type', 'email')
- ->orderByDesc('originated_at')
- ->paginate(),
- ]);
- });
- Route::get('/inbox/{message}', function (App\Models\Message $message) {
- abort_if($message->type !== 'email', 404);
+ Route::get('/inbox', [Controllers\Spork\InboxController::class, 'index']);
+ Route::get('/inbox/{message}', [Controllers\Spork\InboxController::class, 'show']);
- $message = (new \App\Services\ImapService)->findMessage($message->event_id, true);
- $messageBody = base64_decode($message['body']);
+ Route::get('/manage/{link}', [Controllers\Spork\ManageController::class, 'show'])->name('crud.show');
+ Route::get('/manage', [Controllers\Spork\ManageController::class, 'index']);
- $bodyWithTheImagesDisabledForPrivacy = str_replace(' src=', ' data-src=', $messageBody);
+ Route::get('/settings', Controllers\Spork\SettingsController::class);
+ Route::get('/tag-manager', Controllers\Spork\TagManagerController::class);
- return view('emails.'.$message['view'], [
- 'body' => $bodyWithTheImagesDisabledForPrivacy,
- ]);
- });
- Route::get('/postal/{thread}', function ($thread) {
- return Inertia::render('Postal/Thread', [
- 'threads' => \App\Models\Thread::query()
- ->with([
- 'participants' => function ($query) {
- $query->where('name', 'not like', '%bridge bot%');
- },
- ])
+ Route::get('/postal', [Controllers\Spork\MessageController::class, 'index'])->name('postal.index');
+ Route::get('/postal/{thread}', [Controllers\Spork\MessageController::class, 'show'])->name('postal.show');
- ->orderByDesc('origin_server_ts')
- ->paginate(request('limit', 15), ['*'], 'page', 1),
- 'thread' => \App\Models\Thread::query()
- ->with(['messages' => function ($query) {
- $query->orderBy('originated_at');
- }, 'participants' => function ($query) {
- $query->where('name', 'not like', '%bridge bot%');
- }])
- ->orderByDesc('updated_at')
- ->findOrFail($thread),
- ]);
- });
- Route::get('/file-manager', function () {
- $filesystem = \Illuminate\Support\Facades\Storage::disk(config('spork.filesystem.default'));
+ Route::get('/research', [Controllers\Spork\ResearchController::class, 'index'])->name('research.index');
+ Route::get('/research/{research}', [Controllers\Spork\ResearchController::class, 'show'])->name('research.show');
- return Inertia::render('FileManager', [
- 'files' => array_map(
- fn ($file) => [
- 'name' => basename($file),
- 'file_path' => base64_encode('/'.$file),
- 'is_directory' => false,
- 'type' => 'file',
- 'last_modified' => \Carbon\Carbon::parse($filesystem->lastModified($file)),
- ],
- $filesystem->files()
- ),
- 'directories' => array_map(
- fn ($file) => [
- 'name' => basename($file),
- 'file_path' => base64_encode('/'.$file),
- 'is_directory' => true,
- 'type' => 'folder',
- 'last_modified' => \Carbon\Carbon::parse($filesystem->lastModified($file)),
- ],
- $filesystem->directories()
- ),
-
- ]);
- });
-
- Route::get('/manage', function () {
- return Inertia::render('Manage/Index', [
- 'title' => 'Dynamic CRUD',
- 'description' => [
- 'fillable' => [],
- ],
- ]);
- });
- Route::get('/banking', function () {
- $accounts = request()->user()
- ->accounts()
- ->with('credential')->get();
-
- return Inertia::render('Finance/Index', [
- 'title' => 'Banking ',
- 'accounts' => $accounts,
- 'transactions' => \App\Models\Finance\Transaction::whereIn('account_id', $accounts->pluck('account_id'))
- ->with('tags')
- ->orderByDesc('date')
- ->paginate(),
- ]);
- });
- Route::get('/manage/{link}', function ($model) {
- $description = (new DescribeTableService)->describe(new $model);
-
- /** @var \Illuminate\Pagination\LengthAwarePaginator $paginator */
- $paginator = $model::query()
- ->paginate(request('limit', 15), ['*'], 'page', request('page', 1));
-
- $data = $paginator->items();
- $paginator = $paginator->toArray();
-
- unset($paginator['data']);
-
- return Inertia::render('Manage/Index', [
- 'title' => 'CRUD '.Str::ucfirst(str_replace('_', ' ', Str::ascii((new $model)->getTable(), 'en'))),
- 'description' => $description,
- 'singular' => Str::singular((new $model)->getTable()),
- 'plural' => Str::plural((new $model)->getTable()),
- 'link' => '/'.(new $model)->getTable(),
- 'apiLink' => '/api/crud/'.(new $model)->getTable(),
- 'data' => $data,
- 'paginator' => $paginator,
- ]);
- })->name('crud');
- Route::get('/settings', function () {
- // settings are things that can be configured in between requests.
- // They cannot be changed at run time, and might even require a restart of the servers.
- return Inertia::render('Settings/Index', [
- 'title' => 'Settings',
- 'settings' => new class()
- {
- },
- ]);
- });
+ Route::get('/projects/create', [Controllers\Spork\ProjectsController::class, 'create']);
});
Route::middleware([
@@ -358,14 +122,8 @@
Route::post('/api/enable', Controllers\EnableProviderController::class);
Route::post('/api/disable', Controllers\DisableProviderController::class);
- Route::get('/-/logic', function () {
- return Inertia::render('Logic/Index', [
- 'container_bindings' => \App\Services\Programming\LaravelProgrammingStyle::findContainerBindings(),
- 'events' => \App\Services\Programming\LaravelProgrammingStyle::findLogicalEvents(),
- 'listeners' => \App\Services\Programming\LaravelProgrammingStyle::findLogicalListeners(),
- ]);
- });
+ Route::get('/-/logic', Controllers\Spork\LogicController::class);
Route::post('/api/logic/add-listener-for-event', Controllers\Logic\AddListenerForEventController::class);
Route::post('/api/logic/remove-listener-for-event', Controllers\Logic\RemoveListenerForEventController::class);
-
+ Route::get('/api/files/{basepath}', [Controllers\Spork\FileManagerController::class, 'show']);
});
diff --git a/sail b/sail
deleted file mode 100755
index 810a32ee..00000000
--- a/sail
+++ /dev/null
@@ -1,518 +0,0 @@
-#!/usr/bin/env bash
-
-UNAMEOUT="$(uname -s)"
-
-# Verify operating system is supported...
-case "${UNAMEOUT}" in
- Linux*) MACHINE=linux;;
- Darwin*) MACHINE=mac;;
- *) MACHINE="UNKNOWN"
-esac
-
-if [ "$MACHINE" == "UNKNOWN" ]; then
- echo "Unsupported operating system [$(uname -s)]. Laravel Sail supports macOS, Linux, and Windows (WSL2)." >&2
-
- exit 1
-fi
-
-# Determine if stdout is a terminal...
-if test -t 1; then
- # Determine if colors are supported...
- ncolors=$(tput colors)
-
- if test -n "$ncolors" && test "$ncolors" -ge 8; then
- BOLD="$(tput bold)"
- YELLOW="$(tput setaf 3)"
- GREEN="$(tput setaf 2)"
- NC="$(tput sgr0)"
- fi
-fi
-
-# Function that prints the available commands...
-function display_help {
- echo "Laravel Sail"
- echo
- echo "${YELLOW}Usage:${NC}" >&2
- echo " sail COMMAND [options] [arguments]"
- echo
- echo "Unknown commands are passed to the docker-compose binary."
- echo
- echo "${YELLOW}docker-compose Commands:${NC}"
- echo " ${GREEN}sail up${NC} Start the application"
- echo " ${GREEN}sail up -d${NC} Start the application in the background"
- echo " ${GREEN}sail stop${NC} Stop the application"
- echo " ${GREEN}sail restart${NC} Restart the application"
- echo " ${GREEN}sail ps${NC} Display the status of all containers"
- echo
- echo "${YELLOW}Artisan Commands:${NC}"
- echo " ${GREEN}sail artisan ...${NC} Run an Artisan command"
- echo " ${GREEN}sail artisan queue:work${NC}"
- echo
- echo "${YELLOW}PHP Commands:${NC}"
- echo " ${GREEN}sail php ...${NC} Run a snippet of PHP code"
- echo " ${GREEN}sail php -v${NC}"
- echo
- echo "${YELLOW}Composer Commands:${NC}"
- echo " ${GREEN}sail composer ...${NC} Run a Composer command"
- echo " ${GREEN}sail composer require laravel/sanctum${NC}"
- echo
- echo "${YELLOW}Node Commands:${NC}"
- echo " ${GREEN}sail node ...${NC} Run a Node command"
- echo " ${GREEN}sail node --version${NC}"
- echo
- echo "${YELLOW}NPM Commands:${NC}"
- echo " ${GREEN}sail npm ...${NC} Run a npm command"
- echo " ${GREEN}sail npx${NC} Run a npx command"
- echo " ${GREEN}sail npm run prod${NC}"
- echo
- echo "${YELLOW}Yarn Commands:${NC}"
- echo " ${GREEN}sail yarn ...${NC} Run a Yarn command"
- echo " ${GREEN}sail yarn run prod${NC}"
- echo
- echo "${YELLOW}Database Commands:${NC}"
- echo " ${GREEN}sail mysql${NC} Start a MySQL CLI session within the 'mysql' container"
- echo " ${GREEN}sail mariadb${NC} Start a MySQL CLI session within the 'mariadb' container"
- echo " ${GREEN}sail psql${NC} Start a PostgreSQL CLI session within the 'pgsql' container"
- echo " ${GREEN}sail redis${NC} Start a Redis CLI session within the 'redis' container"
- echo
- echo "${YELLOW}Debugging:${NC}"
- echo " ${GREEN}sail debug ...${NC} Run an Artisan command in debug mode"
- echo " ${GREEN}sail debug queue:work${NC}"
- echo
- echo "${YELLOW}Running Tests:${NC}"
- echo " ${GREEN}sail test${NC} Run the PHPUnit tests via the Artisan test command"
- echo " ${GREEN}sail phpunit ...${NC} Run PHPUnit"
- echo " ${GREEN}sail pest ...${NC} Run Pest"
- echo " ${GREEN}sail pint ...${NC} Run Pint"
- echo " ${GREEN}sail dusk${NC} Run the Dusk tests (Requires the laravel/dusk package)"
- echo " ${GREEN}sail dusk:fails${NC} Re-run previously failed Dusk tests (Requires the laravel/dusk package)"
- echo
- echo "${YELLOW}Container CLI:${NC}"
- echo " ${GREEN}sail shell${NC} Start a shell session within the application container"
- echo " ${GREEN}sail bash${NC} Alias for 'sail shell'"
- echo " ${GREEN}sail root-shell${NC} Start a root shell session within the application container"
- echo " ${GREEN}sail root-bash${NC} Alias for 'sail root-shell'"
- echo " ${GREEN}sail tinker${NC} Start a new Laravel Tinker session"
- echo
- echo "${YELLOW}Sharing:${NC}"
- echo " ${GREEN}sail share${NC} Share the application publicly via a temporary URL"
- echo " ${GREEN}sail open${NC} Open the site in your browser"
- echo
- echo "${YELLOW}Binaries:${NC}"
- echo " ${GREEN}sail bin ...${NC} Run Composer binary scripts from the vendor/bin directory"
- echo
- echo "${YELLOW}Customization:${NC}"
- echo " ${GREEN}sail artisan sail:publish${NC} Publish the Sail configuration files"
- echo " ${GREEN}sail build --no-cache${NC} Rebuild all of the Sail containers"
-
- exit 1
-}
-
-# Proxy the "help" command...
-if [ $# -gt 0 ]; then
- if [ "$1" == "help" ] || [ "$1" == "-h" ] || [ "$1" == "-help" ] || [ "$1" == "--help" ]; then
- display_help
- fi
-else
- display_help
-fi
-
-# Source the ".env" file so Laravel's environment variables are available...
-if [ ! -z "$APP_ENV" ] && [ -f ./.env.$APP_ENV ]; then
- source ./.env.$APP_ENV;
-elif [ -f ./.env ]; then
- source ./.env;
-fi
-
-# Define environment variables...
-export APP_PORT=${APP_PORT:-80}
-export APP_SERVICE=${APP_SERVICE:-"laravel.test"}
-export DB_PORT=${DB_PORT:-3306}
-export WWWUSER=${WWWUSER:-$UID}
-export WWWGROUP=${WWWGROUP:-$(id -g)}
-
-export SAIL_FILES=${SAIL_FILES:-""}
-export SAIL_SHARE_DASHBOARD=${SAIL_SHARE_DASHBOARD:-4040}
-export SAIL_SHARE_SERVER_HOST=${SAIL_SHARE_SERVER_HOST:-"laravel-sail.site"}
-export SAIL_SHARE_SERVER_PORT=${SAIL_SHARE_SERVER_PORT:-8080}
-export SAIL_SHARE_SUBDOMAIN=${SAIL_SHARE_SUBDOMAIN:-""}
-export SAIL_SHARE_DOMAIN=${SAIL_SHARE_DOMAIN:-"$SAIL_SHARE_SERVER_HOST"}
-export SAIL_SHARE_SERVER=${SAIL_SHARE_SERVER:-""}
-
-# Function that outputs Sail is not running...
-function sail_is_not_running {
- echo "${BOLD}Sail is not running.${NC}" >&2
- echo "" >&2
- echo "${BOLD}You may Sail using the following commands:${NC} './vendor/bin/sail up' or './vendor/bin/sail up -d'" >&2
-
- exit 1
-}
-
-# Define Docker Compose command prefix...
-docker compose &> /dev/null
-if [ $? == 0 ]; then
- DOCKER_COMPOSE=(docker compose)
-else
- DOCKER_COMPOSE=(docker-compose)
-fi
-
-if [ -n "$SAIL_FILES" ]; then
- # Convert SAIL_FILES to an array...
- IFS=':' read -ra SAIL_FILES <<< "$SAIL_FILES"
-
- for FILE in "${SAIL_FILES[@]}"; do
- if [ -f "$FILE" ]; then
- DOCKER_COMPOSE+=(-f "$FILE")
- else
- echo "${BOLD}Unable to find Docker Compose file: '${FILE}'${NC}" >&2
-
- exit 1
- fi
- done
-fi
-
-EXEC="yes"
-
-if [ -z "$SAIL_SKIP_CHECKS" ]; then
- # Ensure that Docker is running...
- if ! docker info > /dev/null 2>&1; then
- echo "${BOLD}Docker is not running.${NC}" >&2
-
- exit 1
- fi
-
- # Determine if Sail is currently up...
- if "${DOCKER_COMPOSE[@]}" ps "$APP_SERVICE" 2>&1 | grep 'Exit\|exited'; then
- echo "${BOLD}Shutting down old Sail processes...${NC}" >&2
-
- "${DOCKER_COMPOSE[@]}" down > /dev/null 2>&1
-
- EXEC="no"
- elif [ -z "$("${DOCKER_COMPOSE[@]}" ps -q)" ]; then
- EXEC="no"
- fi
-fi
-
-ARGS=()
-
-# Proxy PHP commands to the "php" binary on the application container...
-if [ "$1" == "php" ]; then
- shift 1
-
- if [ "$EXEC" == "yes" ]; then
- ARGS+=(exec -u sail)
- [ ! -t 0 ] && ARGS+=(-T)
- ARGS+=("$APP_SERVICE" "php" "$@")
- else
- sail_is_not_running
- fi
-
-# Proxy vendor binary commands on the application container...
-elif [ "$1" == "bin" ]; then
- shift 1
-
- if [ "$EXEC" == "yes" ]; then
- ARGS+=(exec -u sail)
- [ ! -t 0 ] && ARGS+=(-T)
- ARGS+=("$APP_SERVICE" ./vendor/bin/"$@")
- else
- sail_is_not_running
- fi
-
-# Proxy docker-compose commands to the docker-compose binary on the application container...
-elif [ "$1" == "docker-compose" ]; then
- shift 1
-
- if [ "$EXEC" == "yes" ]; then
- ARGS+=(exec -u sail)
- [ ! -t 0 ] && ARGS+=(-T)
- ARGS+=("$APP_SERVICE" "${DOCKER_COMPOSE[@]}")
- else
- sail_is_not_running
- fi
-
-# Proxy Composer commands to the "composer" binary on the application container...
-elif [ "$1" == "composer" ]; then
- shift 1
-
- if [ "$EXEC" == "yes" ]; then
- ARGS+=(exec -u sail)
- [ ! -t 0 ] && ARGS+=(-T)
- ARGS+=("$APP_SERVICE" "composer" "$@")
- else
- sail_is_not_running
- fi
-
-# Proxy Artisan commands to the "artisan" binary on the application container...
-elif [ "$1" == "artisan" ] || [ "$1" == "art" ]; then
- shift 1
-
- if [ "$EXEC" == "yes" ]; then
- ARGS+=(exec -u sail)
- [ ! -t 0 ] && ARGS+=(-T)
- ARGS+=("$APP_SERVICE" php artisan "$@")
- else
- sail_is_not_running
- fi
-
-# Proxy the "debug" command to the "php artisan" binary on the application container with xdebug enabled...
-elif [ "$1" == "debug" ]; then
- shift 1
-
- if [ "$EXEC" == "yes" ]; then
- ARGS+=(exec -u sail -e XDEBUG_SESSION=1)
- [ ! -t 0 ] && ARGS+=(-T)
- ARGS+=("$APP_SERVICE" php artisan "$@")
- else
- sail_is_not_running
- fi
-
-# Proxy the "test" command to the "php artisan test" Artisan command...
-elif [ "$1" == "test" ]; then
- shift 1
-
- if [ "$EXEC" == "yes" ]; then
- ARGS+=(exec -u sail)
- [ ! -t 0 ] && ARGS+=(-T)
- ARGS+=("$APP_SERVICE" php artisan test "$@")
- else
- sail_is_not_running
- fi
-
-# Proxy the "phpunit" command to "php vendor/bin/phpunit"...
-elif [ "$1" == "phpunit" ]; then
- shift 1
-
- if [ "$EXEC" == "yes" ]; then
- ARGS+=(exec -u sail)
- [ ! -t 0 ] && ARGS+=(-T)
- ARGS+=("$APP_SERVICE" php vendor/bin/phpunit "$@")
- else
- sail_is_not_running
- fi
-
-# Proxy the "pest" command to "php vendor/bin/pest"...
-elif [ "$1" == "pest" ]; then
- shift 1
-
- if [ "$EXEC" == "yes" ]; then
- ARGS+=(exec -u sail)
- [ ! -t 0 ] && ARGS+=(-T)
- ARGS+=("$APP_SERVICE" php vendor/bin/pest "$@")
- else
- sail_is_not_running
- fi
-
-# Proxy the "pint" command to "php vendor/bin/pint"...
-elif [ "$1" == "pint" ]; then
- shift 1
-
- if [ "$EXEC" == "yes" ]; then
- ARGS+=(exec -u sail)
- [ ! -t 0 ] && ARGS+=(-T)
- ARGS+=("$APP_SERVICE" php vendor/bin/pint "$@")
- else
- sail_is_not_running
- fi
-
-# Proxy the "dusk" command to the "php artisan dusk" Artisan command...
-elif [ "$1" == "dusk" ]; then
- shift 1
-
- if [ "$EXEC" == "yes" ]; then
- ARGS+=(exec -u sail)
- [ ! -t 0 ] && ARGS+=(-T)
- ARGS+=(-e "APP_URL=http://${APP_SERVICE}")
- ARGS+=(-e "DUSK_DRIVER_URL=http://selenium:4444/wd/hub")
- ARGS+=("$APP_SERVICE" php artisan dusk "$@")
- else
- sail_is_not_running
- fi
-
-# Proxy the "dusk:fails" command to the "php artisan dusk:fails" Artisan command...
-elif [ "$1" == "dusk:fails" ]; then
- shift 1
-
- if [ "$EXEC" == "yes" ]; then
- ARGS+=(exec -u sail)
- [ ! -t 0 ] && ARGS+=(-T)
- ARGS+=(-e "APP_URL=http://${APP_SERVICE}")
- ARGS+=(-e "DUSK_DRIVER_URL=http://selenium:4444/wd/hub")
- ARGS+=("$APP_SERVICE" php artisan dusk:fails "$@")
- else
- sail_is_not_running
- fi
-
-# Initiate a Laravel Tinker session within the application container...
-elif [ "$1" == "tinker" ] ; then
- shift 1
-
- if [ "$EXEC" == "yes" ]; then
- ARGS+=(exec -u sail)
- [ ! -t 0 ] && ARGS+=(-T)
- ARGS+=("$APP_SERVICE" php artisan tinker)
- else
- sail_is_not_running
- fi
-
-# Proxy Node commands to the "node" binary on the application container...
-elif [ "$1" == "node" ]; then
- shift 1
-
- if [ "$EXEC" == "yes" ]; then
- ARGS+=(exec -u sail)
- [ ! -t 0 ] && ARGS+=(-T)
- ARGS+=("$APP_SERVICE" node "$@")
- else
- sail_is_not_running
- fi
-
-# Proxy NPM commands to the "npm" binary on the application container...
-elif [ "$1" == "npm" ]; then
- shift 1
-
- if [ "$EXEC" == "yes" ]; then
- ARGS+=(exec -u sail)
- [ ! -t 0 ] && ARGS+=(-T)
- ARGS+=("$APP_SERVICE" npm "$@")
- else
- sail_is_not_running
- fi
-
-# Proxy NPX commands to the "npx" binary on the application container...
-elif [ "$1" == "npx" ]; then
- shift 1
-
- if [ "$EXEC" == "yes" ]; then
- ARGS+=(exec -u sail)
- [ ! -t 0 ] && ARGS+=(-T)
- ARGS+=("$APP_SERVICE" npx "$@")
- else
- sail_is_not_running
- fi
-
-# Proxy YARN commands to the "yarn" binary on the application container...
-elif [ "$1" == "yarn" ]; then
- shift 1
-
- if [ "$EXEC" == "yes" ]; then
- ARGS+=(exec -u sail)
- [ ! -t 0 ] && ARGS+=(-T)
- ARGS+=("$APP_SERVICE" yarn "$@")
- else
- sail_is_not_running
- fi
-
-# Initiate a MySQL CLI terminal session within the "mysql" container...
-elif [ "$1" == "mysql" ]; then
- shift 1
-
- if [ "$EXEC" == "yes" ]; then
- ARGS+=(exec)
- [ ! -t 0 ] && ARGS+=(-T)
- ARGS+=(mysql bash -c)
- ARGS+=("MYSQL_PWD=\${MYSQL_PASSWORD} mysql -u \${MYSQL_USER} \${MYSQL_DATABASE}")
- else
- sail_is_not_running
- fi
-
-# Initiate a MySQL CLI terminal session within the "mariadb" container...
-elif [ "$1" == "mariadb" ]; then
- shift 1
-
- if [ "$EXEC" == "yes" ]; then
- ARGS+=(exec)
- [ ! -t 0 ] && ARGS+=(-T)
- ARGS+=(mariadb bash -c)
- ARGS+=("MYSQL_PWD=\${MYSQL_PASSWORD} mysql -u \${MYSQL_USER} \${MYSQL_DATABASE}")
- else
- sail_is_not_running
- fi
-
-# Initiate a PostgreSQL CLI terminal session within the "pgsql" container...
-elif [ "$1" == "psql" ]; then
- shift 1
-
- if [ "$EXEC" == "yes" ]; then
- ARGS+=(exec)
- [ ! -t 0 ] && ARGS+=(-T)
- ARGS+=(pgsql bash -c)
- ARGS+=("PGPASSWORD=\${PGPASSWORD} psql -U \${POSTGRES_USER} \${POSTGRES_DB}")
- else
- sail_is_not_running
- fi
-
-# Initiate a Bash shell within the application container...
-elif [ "$1" == "shell" ] || [ "$1" == "bash" ]; then
- shift 1
-
- if [ "$EXEC" == "yes" ]; then
- ARGS+=(exec -u sail)
- [ ! -t 0 ] && ARGS+=(-T)
- ARGS+=("$APP_SERVICE" bash "$@")
- else
- sail_is_not_running
- fi
-
-# Initiate a root user Bash shell within the application container...
-elif [ "$1" == "root-shell" ] || [ "$1" == "root-bash" ]; then
- shift 1
-
- if [ "$EXEC" == "yes" ]; then
- ARGS+=(exec)
- [ ! -t 0 ] && ARGS+=(-T)
- ARGS+=("$APP_SERVICE" bash "$@")
- else
- sail_is_not_running
- fi
-
-# Initiate a Redis CLI terminal session within the "redis" container...
-elif [ "$1" == "redis" ] ; then
- shift 1
-
- if [ "$EXEC" == "yes" ]; then
- ARGS+=(exec)
- [ ! -t 0 ] && ARGS+=(-T)
- ARGS+=(redis redis-cli)
- else
- sail_is_not_running
- fi
-
-# Share the site...
-elif [ "$1" == "share" ]; then
- shift 1
-
- if [ "$EXEC" == "yes" ]; then
- docker run --init --rm -p "$SAIL_SHARE_DASHBOARD":4040 -t beyondcodegmbh/expose-server:latest share http://host.docker.internal:"$APP_PORT" \
- --server-host="$SAIL_SHARE_SERVER_HOST" \
- --server-port="$SAIL_SHARE_SERVER_PORT" \
- --auth="$SAIL_SHARE_TOKEN" \
- --server="$SAIL_SHARE_SERVER" \
- --subdomain="$SAIL_SHARE_SUBDOMAIN" \
- --domain="$SAIL_SHARE_DOMAIN" \
- "$@"
-
- exit
- else
- sail_is_not_running
- fi
-
-# Open the site...
-elif [ "$1" == "open" ]; then
- shift 1
-
- if [ "$EXEC" == "yes" ]; then
- open $APP_URL
-
- exit
- else
- sail_is_not_running
- fi
-
-# Pass unknown commands to the "docker-compose" binary...
-else
- ARGS+=("$@")
-fi
-
-# Run Docker Compose with the defined arguments...
-"${DOCKER_COMPOSE[@]}" "${ARGS[@]}"
diff --git a/tests/Feature/Http/Controllers/CrudControllerTest.php b/tests/Feature/Http/Controllers/CrudControllerTest.php
index 1d0dbedf..75dbc611 100644
--- a/tests/Feature/Http/Controllers/CrudControllerTest.php
+++ b/tests/Feature/Http/Controllers/CrudControllerTest.php
@@ -6,7 +6,9 @@
use App;
use App\Models\Project;
+use App\Models\User;
use Illuminate\Foundation\Testing\RefreshDatabase;
+use Spatie\Permission\Models\Role;
use Tests\TestCase;
class CrudControllerTest extends TestCase
@@ -15,12 +17,18 @@ class CrudControllerTest extends TestCase
protected ?App\Models\User $user = null;
- public function actingAsUser()
+ public function actingAsUser(): User
{
- return $this->actingAs($this->user = App\Models\User::factory()->withPersonalTeam()->create());
+ if (!Role::firstWhere('name', 'developer')) {
+ Role::create(['name' => 'developer']);
+ }
+
+ $this->actingAs($this->user = App\Models\User::factory()->withPersonalTeam()->create());
+ $this->user->assignRole('developer');
+ return $this->user;
}
- public function testBasicTestWithoutBypassSuccess()
+ public function testBasicTestSuccess()
{
$this->actingAsUser();
Project::factory()->create([
@@ -32,7 +40,7 @@ public function testBasicTestWithoutBypassSuccess()
$response->assertStatus(200);
}
- public function testCreateTestWithoutBypassSuccess()
+ public function testCreateTestSuccess()
{
$this->actingAsUser();
Project::factory()->create([
@@ -48,7 +56,7 @@ public function testCreateTestWithoutBypassSuccess()
$response->assertStatus(201);
}
- public function testUpdateTestWithoutBypassSuccess()
+ public function testUpdateTestSuccess()
{
$this->actingAsUser();
$project = Project::factory()->create([
@@ -65,7 +73,7 @@ public function testUpdateTestWithoutBypassSuccess()
$response->assertJsonFragment(['name' => 'Austin Kregel']);
}
- public function testUpdatePatchTestWithoutBypassSuccess()
+ public function testUpdatePatchTestSuccess()
{
$this->actingAsUser();
$project = Project::factory()->create([
@@ -82,7 +90,7 @@ public function testUpdatePatchTestWithoutBypassSuccess()
$response->assertJsonFragment(['name' => 'Austin Kregel']);
}
- public function testDeleteTestWithoutBypassSuccess()
+ public function testDeleteTestSuccess()
{
$this->actingAsUser();
$project = Project::factory()->create([
@@ -98,7 +106,7 @@ public function testDeleteTestWithoutBypassSuccess()
$this->assertDatabaseMissing('projects', $project2->toArray());
}
- public function testShowTestWithoutBypassSuccess()
+ public function testShowTestSuccess()
{
$this->actingAsUser();
$project = Project::factory()->create([
diff --git a/vite.config.js b/vite.config.js
index dbae3c35..9e8ef092 100644
--- a/vite.config.js
+++ b/vite.config.js
@@ -5,7 +5,7 @@ import vue from '@vitejs/plugin-vue';
export default defineConfig({
plugins: [
laravel({
- input: 'resources/js/app.js',
+ input: [ 'resources/css/app.css','resources/js/app.js'],
refresh: true,
}),
vue({