From f69c6a25b27eb998545fb806f58235a602b5fc32 Mon Sep 17 00:00:00 2001 From: Marcin Haba Date: Sun, 7 Dec 2014 05:48:21 +0100 Subject: [PATCH] baculum: Implement graphs --- gui/baculum/protected/JavaScript/flotr2.js | 27 ++ gui/baculum/protected/JavaScript/graph.js | 437 ++++++++++++++++++ .../protected/JavaScript/panel-window.js | 41 ++ gui/baculum/protected/Lang/en/messages.mo | Bin 24741 -> 25923 bytes gui/baculum/protected/Lang/en/messages.po | 66 +++ gui/baculum/protected/Lang/pl/messages.mo | Bin 22589 -> 23860 bytes gui/baculum/protected/Lang/pl/messages.po | 67 +++ gui/baculum/protected/Layouts/Main.tpl | 3 + gui/baculum/protected/Pages/Home.page | 74 ++- gui/baculum/protected/Pages/Home.php | 32 +- .../protected/Portlets/SlideWindow.tpl | 2 +- gui/baculum/themes/Baculum-v1/style.css | 66 ++- 12 files changed, 801 insertions(+), 14 deletions(-) create mode 100644 gui/baculum/protected/JavaScript/flotr2.js create mode 100644 gui/baculum/protected/JavaScript/graph.js create mode 100644 gui/baculum/protected/JavaScript/panel-window.js diff --git a/gui/baculum/protected/JavaScript/flotr2.js b/gui/baculum/protected/JavaScript/flotr2.js new file mode 100644 index 0000000000..c3601e8279 --- /dev/null +++ b/gui/baculum/protected/JavaScript/flotr2.js @@ -0,0 +1,27 @@ +/*! + * bean.js - copyright Jacob Thornton 2011 + * https://github.com/fat/bean + * MIT License + * special thanks to: + * dean edwards: http://dean.edwards.name/ + * dperini: https://github.com/dperini/nwevents + * the entire mootools team: github.com/mootools/mootools-core + *//*global module:true, define:true*/ +!function(e,t,n){typeof module!="undefined"?module.exports=n(e,t):typeof define=="function"&&typeof define.amd=="object"?define(n):t[e]=n(e,t)}("bean",this,function(e,t){var n=window,r=t[e],i=/over|out/,s=/[^\.]*(?=\..*)\.|.*/,o=/\..*/,u="addEventListener",a="attachEvent",f="removeEventListener",l="detachEvent",c=document||{},h=c.documentElement||{},p=h[u],d=p?u:a,v=Array.prototype.slice,m=/click|mouse|menu|drag|drop/i,g=/^touch|^gesture/i,y={one:1},b=function(e,t,n){for(n=0;n0){t=t.split(" ");for(f=t.length;f--;)_(e,t[f],n);return e}u=c&&t.replace(o,""),u&&w[u]&&(u=w[u].type);if(!t||c){if(a=c&&t.replace(s,""))a=a.split(".");l(e,u,n,a)}else if(typeof t=="function")l(e,null,t);else for(r in t)t.hasOwnProperty(r)&&_(e,r,t[r]);return e},D=function(e,t,n,r,i){var s,o,u,a,f=n,l=n&&typeof n=="string";if(t&&!n&&typeof t=="object")for(s in t)t.hasOwnProperty(s)&&D.apply(this,[e,s,t[s]]);else{a=arguments.length>3?v.call(arguments,3):[],o=(l?n:t).split(" "),l&&(n=M(t,f=r,i))&&(a=v.call(a,1)),this===y&&(n=L(_,e,t,n,f));for(u=o.length;u--;)O(e,o[u],n,f,a)}return e},P=function(){return D.apply(y,arguments)},H=p?function(e,t,r){var i=c.createEvent(e?"HTMLEvents":"UIEvents");i[e?"initEvent":"initUIEvent"](t,!0,!0,n,1),r.dispatchEvent(i)}:function(e,t,n){n=S(n,e),e?n.fireEvent("on"+t,c.createEventObject()):n["_on"+t]++},B=function(e,t,n){var r,i,u,a,f,l=t.split(" ");for(r=l.length;r--;){t=l[r].replace(o,"");if(a=l[r].replace(s,""))a=a.split(".");if(!a&&!n&&e[d])H(b[t],t,e);else{f=T.get(e,t),n=[!1].concat(n);for(i=0,u=f.length;i=r.computed&&(r={value:e,computed:o})}),r.value},S.min=function(e,t,n){if(!t&&S.isArray(e))return Math.min.apply(Math,e);var r={computed:Infinity};return x(e,function(e,i,s){var o=t?t.call(n,e,i,s):e;or?1:0}),"value")},S.groupBy=function(e,t){var n={};return x(e,function(e,r){var i=t(e,r);(n[i]||(n[i]=[])).push(e)}),n},S.sortedIndex=function(e,t,n){n||(n=S.identity);var r=0,i=e.length;while(r>1;n(e[s])=0})})},S.difference=function(e,t){return S.filter(e,function(e){return!S.include(t,e)})},S.zip=function(){var e=o.call(arguments),t=S.max(S.pluck(e,"length")),n=new Array(t);for(var r=0;r=0;n--)t=[e[n].apply(this,t)];return t[0]}},S.after=function(e,t){return function(){if(--e<1)return t.apply(this,arguments)}},S.keys=w||function(e){if(e!==Object(e))throw new TypeError("Invalid object");var t=[];for(var n in e)f.call(e,n)&&(t[t.length]=n);return t},S.values=function(e){return S.map(e,S.identity)},S.functions=S.methods=function(e){var t=[];for(var n in e)S.isFunction(e[n])&&t.push(n);return t.sort()},S.extend=function(e){return x(o.call(arguments,1),function(t){for(var n in t)t[n]!==void 0&&(e[n]=t[n])}),e},S.defaults=function(e){return x(o.call(arguments,1),function(t){for(var n in t)e[n]==null&&(e[n]=t[n])}),e},S.clone=function(e){return S.isArray(e)?e.slice():S.extend({},e)},S.tap=function(e,t){return t(e),e},S.isEqual=function(e,t){if(e===t)return!0;var n=typeof e,r=typeof t;if(n!=r)return!1;if(e==t)return!0;if(!e&&t||e&&!t)return!1;e._chain&&(e=e._wrapped),t._chain&&(t=t._wrapped);if(e.isEqual)return e.isEqual(t);if(t.isEqual)return t.isEqual(e);if(S.isDate(e)&&S.isDate(t))return e.getTime()===t.getTime();if(S.isNaN(e)&&S.isNaN(t))return!1;if(S.isRegExp(e)&&S.isRegExp(t))return e.source===t.source&&e.global===t.global&&e.ignoreCase===t.ignoreCase&&e.multiline===t.multiline;if(n!=="object")return!1;if(e.length&&e.length!==t.length)return!1;var i=S.keys(e),s=S.keys(t);if(i.length!=s.length)return!1;for(var o in e)if(!(o in t)||!S.isEqual(e[o],t[o]))return!1;return!0},S.isEmpty=function(e){if(S.isArray(e)||S.isString(e))return e.length===0;for(var t in e)if(f.call(e,t))return!1;return!0},S.isElement=function(e){return!!e&&e.nodeType==1},S.isArray=b||function(e){return a.call(e)==="[object Array]"},S.isObject=function(e){return e===Object(e)},S.isArguments=function(e){return!!e&&!!f.call(e,"callee")},S.isFunction=function(e){return!!(e&&e.constructor&&e.call&&e.apply)},S.isString=function(e){return!!(e===""||e&&e.charCodeAt&&e.substr)},S.isNumber=function(e){return!!(e===0||e&&e.toExponential&&e.toFixed)},S.isNaN=function(e){return e!==e},S.isBoolean=function(e){return e===!0||e===!1},S.isDate=function(e){return!!(e&&e.getTimezoneOffset&&e.setUTCFullYear)},S.isRegExp=function(e){return!(!(e&&e.test&&e.exec)||!e.ignoreCase&&e.ignoreCase!==!1)},S.isNull=function(e){return e===null},S.isUndefined=function(e){return e===void 0},S.noConflict=function(){return e._=t,this},S.identity=function(e){return e},S.times=function(e,t,n){for(var r=0;r/g,interpolate:/<%=([\s\S]+?)%>/g},S.template=function(e,t){var n=S.templateSettings,r="var __p=[],print=function(){__p.push.apply(__p,arguments);};with(obj||{}){__p.push('"+e.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(n.interpolate,function(e,t){return"',"+t.replace(/\\'/g,"'")+",'"}).replace(n.evaluate||null,function(e,t){return"');"+t.replace(/\\'/g,"'").replace(/[\r\n\t]/g," ")+"__p.push('"}).replace(/\r/g,"\\r").replace(/\n/g,"\\n").replace(/\t/g,"\\t")+"');}return __p.join('');",i=new Function("obj",r);return t?i(t):i};var k=function(e){this._wrapped=e};S.prototype=k.prototype;var L=function(e,t){return t?S(e).chain():e},A=function(e,t){k.prototype[e]=function(){var e=o.call(arguments);return u.call(e,this._wrapped),L(t.apply(S,e),this._chain)}};S.mixin(S),x(["pop","push","reverse","shift","sort","splice","unshift"],function(e){var t=r[e];k.prototype[e]=function(){return t.apply(this._wrapped,arguments),L(this._wrapped,this._chain)}}),x(["concat","join","slice"],function(e){var t=r[e];k.prototype[e]=function(){return L(t.apply(this._wrapped,arguments),this._chain)}}),k.prototype.chain=function(){return this._chain=!0,this},k.prototype.value=function(){return this._wrapped}})(); +/** + * Flotr2 (c) 2012 Carl Sutherland + * MIT License + * Special thanks to: + * Flotr: http://code.google.com/p/flotr/ (fork) + * Flot: https://github.com/flot/flot (original fork) + */ +(function(){var e=this,t=this.Flotr,n;n={_:_,bean:bean,isIphone:/iphone/i.test(navigator.userAgent),isIE:navigator.appVersion.indexOf("MSIE")!=-1?parseFloat(navigator.appVersion.split("MSIE")[1]):!1,graphTypes:{},plugins:{},addType:function(e,t){n.graphTypes[e]=t,n.defaultOptions[e]=t.options||{},n.defaultOptions.defaultType=n.defaultOptions.defaultType||e},addPlugin:function(e,t){n.plugins[e]=t,n.defaultOptions[e]=t.options||{}},draw:function(e,t,r,i){return i=i||n.Graph,new i(e,t,r)},merge:function(e,t){var r,i,s=t||{};for(r in e)i=e[r],i&&typeof i=="object"?i.constructor===Array?s[r]=this._.clone(i):i.constructor!==RegExp&&!this._.isElement(i)&&!i.jquery?s[r]=n.merge(i,t?t[r]:undefined):s[r]=i:s[r]=i;return s},clone:function(e){return n.merge(e,{})},getTickSize:function(e,t,r,i){var s=(r-t)/e,o=n.getMagnitude(s),u=10,a=s/o;return a<1.5?u=1:a<2.25?u=2:a<3?u=i===0?2:2.5:a<7.5&&(u=5),u*o},defaultTickFormatter:function(e,t){return e+""},defaultTrackFormatter:function(e){return"("+e.x+", "+e.y+")"},engineeringNotation:function(e,t,n){var r=["Y","Z","E","P","T","G","M","k",""],i=["y","z","a","f","p","n","µ","m",""],s=r.length;n=n||1e3,t=Math.pow(10,t||2);if(e===0)return 0;if(e>1)while(s--&&e>=n)e/=n;else{r=i,s=r.length;while(s--&&e<1)e*=n}return Math.round(e*t)/t+r[s]},getMagnitude:function(e){return Math.pow(10,Math.floor(Math.log(e)/Math.LN10))},toPixel:function(e){return Math.floor(e)+.5},toRad:function(e){return-e*(Math.PI/180)},floorInBase:function(e,t){return t*Math.floor(e/t)},drawText:function(e,t,r,i,s){if(!e.fillText){e.drawText(t,r,i,s);return}s=this._.extend({size:n.defaultOptions.fontSize,color:"#000000",textAlign:"left",textBaseline:"bottom",weight:1,angle:0},s),e.save(),e.translate(r,i),e.rotate(s.angle),e.fillStyle=s.color,e.font=(s.weight>1?"bold ":"")+s.size*1.3+"px sans-serif",e.textAlign=s.textAlign,e.textBaseline=s.textBaseline,e.fillText(t,0,0),e.restore()},getBestTextAlign:function(e,t){return t=t||{textAlign:"center",textBaseline:"middle"},e+=n.getTextAngleFromAlign(t),Math.abs(Math.cos(e))>.01&&(t.textAlign=Math.cos(e)>0?"right":"left"),Math.abs(Math.sin(e))>.01&&(t.textBaseline=Math.sin(e)>0?"top":"bottom"),t},alignTable:{"right middle":0,"right top":Math.PI/4,"center top":Math.PI/2,"left top":3*(Math.PI/4),"left middle":Math.PI,"left bottom":-3*(Math.PI/4),"center bottom":-Math.PI/2,"right bottom":-Math.PI/4,"center middle":0},getTextAngleFromAlign:function(e){return n.alignTable[e.textAlign+" "+e.textBaseline]||0},noConflict:function(){return e.Flotr=t,this}},e.Flotr=n})(),Flotr.defaultOptions={colors:["#00A8F0","#C0D800","#CB4B4B","#4DA74D","#9440ED"],ieBackgroundColor:"#FFFFFF",title:null,subtitle:null,shadowSize:4,defaultType:null,HtmlText:!0,fontColor:"#545454",fontSize:7.5,resolution:1,parseFloat:!0,preventDefault:!0,xaxis:{ticks:null,minorTicks:null,showLabels:!0,showMinorLabels:!1,labelsAngle:0,title:null,titleAngle:0,noTicks:5,minorTickFreq:null,tickFormatter:Flotr.defaultTickFormatter,tickDecimals:null,min:null,max:null,autoscale:!1,autoscaleMargin:0,color:null,mode:"normal",timeFormat:null,timeMode:"UTC",timeUnit:"millisecond",scaling:"linear",base:Math.E,titleAlign:"center",margin:!0},x2axis:{},yaxis:{ticks:null,minorTicks:null,showLabels:!0,showMinorLabels:!1,labelsAngle:0,title:null,titleAngle:90,noTicks:5,minorTickFreq:null,tickFormatter:Flotr.defaultTickFormatter,tickDecimals:null,min:null,max:null,autoscale:!1,autoscaleMargin:0,color:null,scaling:"linear",base:Math.E,titleAlign:"center",margin:!0},y2axis:{titleAngle:270},grid:{color:"#545454",backgroundColor:null,backgroundImage:null,watermarkAlpha:.4,tickColor:"#DDDDDD",labelMargin:3,verticalLines:!0,minorVerticalLines:null,horizontalLines:!0,minorHorizontalLines:null,outlineWidth:1,outline:"nsew",circular:!1},mouse:{track:!1,trackAll:!1,position:"se",relative:!1,trackFormatter:Flotr.defaultTrackFormatter,margin:5,lineColor:"#FF3F19",trackDecimals:1,sensibility:2,trackY:!0,radius:3,fillColor:null,fillOpacity:.4}},function(){function t(e,t,n,r){this.rgba=["r","g","b","a"];var i=4;while(-1<--i)this[this.rgba[i]]=arguments[i]||(i==3?1:0);this.normalize()}var e=Flotr._,n={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0]};t.prototype={scale:function(t,n,r,i){var s=4;while(-1<--s)e.isUndefined(arguments[s])||(this[this.rgba[s]]*=arguments[s]);return this.normalize()},alpha:function(t){return!e.isUndefined(t)&&!e.isNull(t)&&(this.a=t),this.normalize()},clone:function(){return new t(this.r,this.b,this.g,this.a)},limit:function(e,t,n){return Math.max(Math.min(e,n),t)},normalize:function(){var e=this.limit;return this.r=e(parseInt(this.r,10),0,255),this.g=e(parseInt(this.g,10),0,255),this.b=e(parseInt(this.b,10),0,255),this.a=e(this.a,0,1),this},distance:function(e){if(!e)return;e=new t.parse(e);var n=0,r=3;while(-1<--r)n+=Math.abs(this[this.rgba[r]]-e[this.rgba[r]]);return n},toString:function(){return this.a>=1?"rgb("+[this.r,this.g,this.b].join(",")+")":"rgba("+[this.r,this.g,this.b,this.a].join(",")+")"},contrast:function(){var e=1-(.299*this.r+.587*this.g+.114*this.b)/255;return e<.5?"#000000":"#ffffff"}},e.extend(t,{parse:function(e){if(e instanceof t)return e;var r;if(r=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(e))return new t(parseInt(r[1],16),parseInt(r[2],16),parseInt(r[3],16));if(r=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(e))return new t(parseInt(r[1],10),parseInt(r[2],10),parseInt(r[3],10));if(r=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(e))return new t(parseInt(r[1]+r[1],16),parseInt(r[2]+r[2],16),parseInt(r[3]+r[3],16));if(r=/rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(e))return new t(parseInt(r[1],10),parseInt(r[2],10),parseInt(r[3],10),parseFloat(r[4]));if(r=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(e))return new t(parseFloat(r[1])*2.55,parseFloat(r[2])*2.55,parseFloat(r[3])*2.55);if(r=/rgba\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(e))return new t(parseFloat(r[1])*2.55,parseFloat(r[2])*2.55,parseFloat(r[3])*2.55,parseFloat(r[4]));var i=(e+"").replace(/^\s*([\S\s]*?)\s*$/,"$1").toLowerCase();return i=="transparent"?new t(255,255,255,0):(r=n[i])?new t(r[0],r[1],r[2]):new t(0,0,0,0)},processColor:function(n,r){var i=r.opacity;if(!n)return"rgba(0, 0, 0, 0)";if(n instanceof t)return n.alpha(i).toString();if(e.isString(n))return t.parse(n).alpha(i).toString();var s=n.colors?n:{colors:n};if(!r.ctx)return e.isArray(s.colors)?t.parse(e.isArray(s.colors[0])?s.colors[0][1]:s.colors[0]).alpha(i).toString():"rgba(0, 0, 0, 0)";s=e.extend({start:"top",end:"bottom"},s),/top/i.test(s.start)&&(r.x1=0),/left/i.test(s.start)&&(r.y1=0),/bottom/i.test(s.end)&&(r.x2=0),/right/i.test(s.end)&&(r.y2=0);var o,u,a,f=r.ctx.createLinearGradient(r.x1,r.y1,r.x2,r.y2);for(o=0;o=h)break}h=i[v][0],p=i[v][1],p=="year"&&(h=Flotr.getTickSize(s.noTicks*r.year,a,f,0),h==.5&&(p="month",h=6)),e.tickUnit=p,e.tickSize=h;var g=h*r[p];m=new Date(a);switch(p){case"millisecond":y("Milliseconds");break;case"second":y("Seconds");break;case"minute":y("Minutes");break;case"hour":y("Hours");break;case"month":y("Month");break;case"year":y("FullYear")}g>=r.second&&t(m,"Milliseconds",o,0),g>=r.minute&&t(m,"Seconds",o,0),g>=r.hour&&t(m,"Minutes",o,0),g>=r.day&&t(m,"Hours",o,0),g>=r.day*4&&t(m,"Date",o,1),g>=r.year&&t(m,"Month",o,0);var b=0,w=NaN,E;do{E=w,w=m.getTime(),c.push({v:w/u,label:d(w/u,e)});if(p=="month")if(h<1){t(m,"Date",o,1);var S=m.getTime();t(m,"Month",o,n(m,"Month",o)+1);var x=m.getTime();m.setTime(w+b*r.hour+(x-S)*h),b=n(m,"Hours",o),t(m,"Hours",o,0)}else t(m,"Month",o,n(m,"Month",o)+h);else p=="year"?t(m,"FullYear",o,n(m,"FullYear",o)+h):m.setTime(w+g)}while(w0)return{x:t.touches[0].pageX,y:t.touches[0].pageY};if(!e._.isUndefined(t.changedTouches)&&t.changedTouches.length>0)return{x:t.changedTouches[0].pageX,y:t.changedTouches[0].pageY};if(t.pageX||t.pageY)return{x:t.pageX,y:t.pageY};if(t.clientX||t.clientY){var n=document,r=n.body,i=n.documentElement;return{x:t.clientX+r.scrollLeft+i.scrollLeft,y:t.clientY+r.scrollTop+i.scrollTop}}}}}(),function(){var e=Flotr,t=e.DOM,n=e._,r=function(e){this.o=e};r.prototype={dimensions:function(e,t,n,r){return e?this.o.html?this.html(e,this.o.element,n,r):this.canvas(e,t):{width:0,height:0}},canvas:function(t,n){if(!this.o.textEnabled)return;n=n||{};var r=this.measureText(t,n),i=r.width,s=n.size||e.defaultOptions.fontSize,o=n.angle||0,u=Math.cos(o),a=Math.sin(o),f=2,l=6,c;return c={width:Math.abs(u*i)+Math.abs(a*s)+f,height:Math.abs(a*i)+Math.abs(u*s)+l},c},html:function(e,n,r,i){var s=t.create("div");return t.setStyles(s,{position:"absolute",top:"-10000px"}),t.insert(s,'
'+e+"
"),t.insert(this.o.element,s),t.size(s)},measureText:function(t,r){var i=this.o.ctx,s;return!i.fillText||e.isIphone&&i.measure?{width:i.measure(t,r)}:(r=n.extend({size:e.defaultOptions.fontSize,weight:1,angle:0},r),i.save(),i.font=(r.weight>1?"bold ":"")+r.size*1.3+"px sans-serif",s=i.measureText(t),i.restore(),s)}},Flotr.Text=r}(),function(){function i(e,n,r){return t.observe.apply(this,arguments),this._handles.push(arguments),this}var e=Flotr.DOM,t=Flotr.EventAdapter,n=Flotr._,r=Flotr;Graph=function(e,i,s){this._setEl(e),this._initMembers(),this._initPlugins(),t.fire(this.el,"flotr:beforeinit",[this]),this.data=i,this.series=r.Series.getSeries(i),this._initOptions(s),this._initGraphTypes(),this._initCanvas(),this._text=new r.Text({element:this.el,ctx:this.ctx,html:this.options.HtmlText,textEnabled:this.textEnabled}),t.fire(this.el,"flotr:afterconstruct",[this]),this._initEvents(),this.findDataRanges(),this.calculateSpacing(),this.draw(n.bind(function(){t.fire(this.el,"flotr:afterinit",[this])},this))},Graph.prototype={destroy:function(){t.fire(this.el,"flotr:destroy"),n.each(this._handles,function(e){t.stopObserving.apply(this,e)}),this._handles=[],this.el.graph=null},observe:i,_observe:i,processColor:function(e,t){var i={x1:0,y1:0,x2:this.plotWidth,y2:this.plotHeight,opacity:1,ctx:this.ctx};return n.extend(i,t),r.Color.processColor(e,i)},findDataRanges:function(){var e=this.axes,t,i,s;n.each(this.series,function(e){s=e.getRange(),s&&(t=e.xaxis,i=e.yaxis,t.datamin=Math.min(s.xmin,t.datamin),t.datamax=Math.max(s.xmax,t.datamax),i.datamin=Math.min(s.ymin,i.datamin),i.datamax=Math.max(s.ymax,i.datamax),t.used=t.used||s.xused,i.used=i.used||s.yused)},this),!e.x.used&&!e.x2.used&&(e.x.used=!0),!e.y.used&&!e.y2.used&&(e.y.used=!0),n.each(e,function(e){e.calculateRange()});var o=n.keys(r.graphTypes),u=!1;n.each(this.series,function(e){if(e.hide)return;n.each(o,function(t){e[t]&&e[t].show&&(this.extendRange(t,e),u=!0)},this),u||this.extendRange(this.options.defaultType,e)},this)},extendRange:function(e,t){this[e].extendRange&&this[e].extendRange(t,t.data,t[e],this[e]),this[e].extendYRange&&this[e].extendYRange(t.yaxis,t.data,t[e],this[e]),this[e].extendXRange&&this[e].extendXRange(t.xaxis,t.data,t[e],this[e])},calculateSpacing:function(){var e=this.axes,t=this.options,r=this.series,i=t.grid.labelMargin,s=this._text,o=e.x,u=e.x2,a=e.y,f=e.y2,l=t.grid.outlineWidth,c,h,p,d;n.each(e,function(e){e.calculateTicks(),e.calculateTextDimensions(s,t)}),d=s.dimensions(t.title,{size:t.fontSize*1.5},"font-size:1em;font-weight:bold;","flotr-title"),this.titleHeight=d.height,d=s.dimensions(t.subtitle,{size:t.fontSize},"font-size:smaller;","flotr-subtitle"),this.subtitleHeight=d.height;for(h=0;h1&&(this.multitouches=n.touches),t.fire(e,"flotr:mousedown",[event,this]),this.observe(document,"touchend",r)},this)),this.observe(this.overlay,"touchmove",n.bind(function(n){var r=this.getEventPosition(n);this.options.preventDefault&&n.preventDefault(),i=!0,this.multitouches||n.touches&&n.touches.length>1?this.multitouches=n.touches:s||t.fire(e,"flotr:mousemove",[event,r,this]),this.lastMousePos=r},this))):this.observe(this.overlay,"mousedown",n.bind(this.mouseDownHandler,this)).observe(e,"mousemove",n.bind(this.mouseMoveHandler,this)).observe(this.overlay,"click",n.bind(this.clickHandler,this)).observe(e,"mouseout",function(n){t.fire(e,"flotr:mouseout",n)})},_initCanvas:function(){function l(i,s){return i||(i=e.create("canvas"),typeof FlashCanvas!="undefined"&&typeof i.getContext=="function"&&(FlashCanvas.initElement(i),this.isFlashCanvas=!0),i.className="flotr-"+s,i.style.cssText="position:absolute;left:0px;top:0px;",e.insert(t,i)),n.each(a,function(t,n){e.show(i);if(s=="canvas"&&i.getAttribute(n)===t)return;i.setAttribute(n,t*r.resolution),i.style[n]=t+"px"}),i.context_=null,i}function c(e){window.G_vmlCanvasManager&&window.G_vmlCanvasManager.initElement(e);var t=e.getContext("2d");return window.G_vmlCanvasManager||t.scale(r.resolution,r.resolution),t}var t=this.el,r=this.options,i=t.children,s=[],o,u,a,f;for(u=i.length;u--;)o=i[u],!this.canvas&&o.className==="flotr-canvas"?this.canvas=o:!this.overlay&&o.className==="flotr-overlay"?this.overlay=o:s.push(o);for(u=s.length;u--;)t.removeChild(s[u]);e.setStyles(t,{position:"relative"}),a={},a.width=t.clientWidth,a.height=t.clientHeight;if(a.width<=0||a.height<=0||r.resolution<=0)throw"Invalid dimensions for plot, width = "+a.width+", height = "+a.height+", resolution = "+r.resolution;this.canvas=l(this.canvas,"canvas"),this.overlay=l(this.overlay,"overlay"),this.ctx=c(this.canvas),this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height),this.octx=c(this.overlay),this.octx.clearRect(0,0,this.overlay.width,this.overlay.height),this.canvasHeight=a.height,this.canvasWidth=a.width,this.textEnabled=!!this.ctx.drawText||!!this.ctx.fillText},_initPlugins:function(){n.each(r.plugins,function(e,t){n.each(e.callbacks,function(e,t){this.observe(this.el,t,n.bind(e,this))},this),this[t]=r.clone(e),n.each(this[t],function(e,r){n.isFunction(e)&&(this[t][r]=n.bind(e,this))},this)},this)},_initOptions:function(e){var i=r.clone(r.defaultOptions);i.x2axis=n.extend(n.clone(i.xaxis),i.x2axis),i.y2axis=n.extend(n.clone(i.yaxis),i.y2axis),this.options=r.merge(e||{},i),this.options.grid.minorVerticalLines===null&&this.options.xaxis.scaling==="logarithmic"&&(this.options.grid.minorVerticalLines=!0),this.options.grid.minorHorizontalLines===null&&this.options.yaxis.scaling==="logarithmic"&&(this.options.grid.minorHorizontalLines=!0),t.fire(this.el,"flotr:afterinitoptions",[this]),this.axes=r.Axis.getAxes(this.options);var s=[],o=[],u=this.series.length,a=this.series.length,f=this.options.colors,l=[],c=0,h,p,d,v;for(p=a-1;p>-1;--p)h=this.series[p].color,h&&(--a,n.isNumber(h)?s.push(h):l.push(r.Color.parse(h)));for(p=s.length-1;p>-1;--p)a=Math.max(a,s[p]+1);for(p=0;o.length=f.length&&(p=0,++c)}for(p=0,d=0;p10?t.minorTickFreq=0:o-u>5?t.minorTickFreq=2:t.minorTickFreq=5)}else e.tickSize=Flotr.getTickSize(t.noTicks,n,r,t.tickDecimals);e.min=n,e.max=r,t.min===null&&t.autoscale&&(e.min-=e.tickSize*i,e.min<0&&e.datamin>=0&&(e.min=0),e.min=e.tickSize*Math.floor(e.min/e.tickSize)),t.max===null&&t.autoscale&&(e.max+=e.tickSize*i,e.max>0&&e.datamax<=0&&e.datamax!=e.datamin&&(e.max=0),e.max=e.tickSize*Math.ceil(e.max/e.tickSize)),e.min==e.max&&(e.max=e.min+1)},calculateTextDimensions:function(e,t){var n="",r,i;if(this.options.showLabels)for(i=0;in.length&&(n=this.ticks[i].label);this.maxLabel=e.dimensions(n,{size:t.fontSize,angle:Flotr.toRad(this.options.labelsAngle)},"font-size:smaller;","flotr-grid-label"),this.titleSize=e.dimensions(this.options.title,{size:t.fontSize*1.2,angle:Flotr.toRad(this.options.titleAngle)},"font-weight:bold;","flotr-axis-title")},_cleanUserTicks:function(t,n){var r=this,i=this.options,s,o,u,a;e.isFunction(t)&&(t=t({min:r.min,max:r.max}));for(o=0;o1?a[1]:i.tickFormatter(s,{min:r.min,max:r.max})):(s=a,u=i.tickFormatter(s,{min:this.min,max:this.max})),n[o]={v:s,label:u}},_calculateTimeTicks:function(){this.ticks=Flotr.Date.generator(this)},_calculateLogTicks:function(){var e=this,t=e.options,n,r,s=Math.log(e.max);t.base!=Math.E&&(s/=Math.log(t.base)),s=Math.ceil(s);var o=Math.log(e.min);t.base!=Math.E&&(o/=Math.log(t.base)),o=Math.ceil(o);for(i=o;ii&&(i=a,o=!0)),f!==null&&(fs&&(s=f,u=!0));return{xmin:n,xmax:i,ymin:r,ymax:s,xused:o,yused:u}}},e.extend(t,{getSeries:function(n){return e.map(n,function(n){var r;return n.data?(r=new t,e.extend(r,n)):r=new t({data:n}),r})}}),Flotr.Series=t}(),Flotr.addType("lines",{options:{show:!1,lineWidth:2,fill:!1,fillBorder:!1,fillColor:null,fillOpacity:.4,steps:!1,stacked:!1},stack:{values:[]},draw:function(e){var t=e.context,n=e.lineWidth,r=e.shadowSize,i;t.save(),t.lineJoin="round",r&&(t.lineWidth=r/2,i=n/2+t.lineWidth/2,t.strokeStyle="rgba(0,0,0,0.1)",this.plot(e,i+r/2,!1),t.strokeStyle="rgba(0,0,0,0.2)",this.plot(e,i,!1)),t.lineWidth=n,t.strokeStyle=e.color,this.plot(e,0,!0),t.restore()},plot:function(e,t,n){function S(){!t&&e.fill&&d&&(v=o(d[0]),r.fillStyle=e.fillStyle,r.lineTo(m,p),r.lineTo(v,p),r.lineTo(v,u(d[1])),r.fill(),e.fillBorder&&r.stroke())}var r=e.context,i=e.width,s=e.height,o=e.xScale,u=e.yScale,a=e.data,f=e.stacked?this.stack:!1,l=a.length-1,c=null,h=null,p=u(0),d=null,v,m,g,y,b,w,E;if(l<1)return;r.beginPath();for(E=0;E0&&a[E][1]!==null&&(r.stroke(),S(),d=null,r.closePath(),r.beginPath());continue}v=o(a[E][0]),m=o(a[E+1][0]),d===null&&(d=a[E]),f?(b=f.values[a[E][0]]||0,w=f.values[a[E+1][0]]||f.values[a[E][0]]||0,g=u(a[E][1]+b),y=u(a[E+1][1]+w),n&&(a[E].y0=b,f.values[a[E][0]]=a[E][1]+b,E==l-1&&(a[E+1].y0=w,f.values[a[E+1][0]]=a[E+1][1]+w))):(g=u(a[E][1]),y=u(a[E+1][1]));if(g>s&&y>s||g<0&&y<0||v<0&&m<0||v>i&&m>i)continue;(c!=v||h!=g+t)&&r.moveTo(v,g+t),c=m,h=y+t,e.steps?(r.lineTo(c+t/2,g+t),r.lineTo(c+t/2,h)):r.lineTo(c,h)}(!e.fill||e.fill&&!e.fillBorder)&&r.stroke(),S(),r.closePath()},extendYRange:function(e,t,n,r){var i=e.options;if(n.stacked&&(!i.max&&i.max!==0||!i.min&&i.min!==0)){var s=e.max,o=e.min,u=r.positiveSums||{},a=r.negativeSums||{},f,l;for(l=0;l0?(u[f]=(u[f]||0)+t[l][1],s=Math.max(s,u[f])):(a[f]=(a[f]||0)+t[l][1],o=Math.min(o,a[f]));r.negativeSums=a,r.positiveSums=u,e.max=s,e.min=o}n.steps&&(this.hit=function(e){var t=e.data,n=e.args,r=e.yScale,i=n[0],s=t.length,o=n[1],u=e.xInverse(i.relX),a=i.relY,f;for(f=0;f=t[f][0]&&u<=t[f+1][0]){Math.abs(r(t[f][1])-a)<8&&(o.x=t[f][0],o.y=t[f][1],o.index=f,o.seriesIndex=e.index);break}},this.drawHit=function(e){var t=e.context,n=e.args,r=e.data,i=e.xScale,s=n.index,o=i(n.x),u=e.yScale(n.y),a;r.length-1>s&&(a=e.xScale(r[s+1][0]),t.save(),t.strokeStyle=e.color,t.lineWidth=e.lineWidth,t.beginPath(),t.moveTo(o,u),t.lineTo(a,u),t.stroke(),t.closePath(),t.restore())},this.clearHit=function(e){var t=e.context,n=e.args,r=e.data,i=e.xScale,s=e.lineWidth,o=n.index,u=i(n.x),a=e.yScale(n.y),f;r.length-1>o&&(f=e.xScale(r[o+1][0]),t.clearRect(u-s,a-s,f-u+2*s,2*s))})}}),Flotr.addType("bars",{options:{show:!1,lineWidth:2,barWidth:1,fill:!0,fillColor:null,fillOpacity:.4,horizontal:!1,stacked:!1,centered:!0,topPadding:.1,grouped:!1},stack:{positive:[],negative:[],_positive:[],_negative:[]},draw:function(e){var t=e.context;this.current+=1,t.save(),t.lineJoin="miter",t.lineWidth=e.lineWidth,t.strokeStyle=e.color,e.fill&&(t.fillStyle=e.fillStyle),this.plot(e),t.restore()},plot:function(e){var t=e.data,n=e.context,r=e.shadowSize,i,s,o,u,a,f;if(t.length<1)return;this.translate(n,e.horizontal);for(i=0;i0?o.positive:o.negative,p=d[c]||p,d[c]=p+h),v=f(c-a),m=f(c+i-a),g=l(h+p),y=l(p),y<0&&(y=0),e===null||t===null?null:{x:c,y:h,xScale:f,yScale:l,top:g,left:Math.min(v,m)-u/2,width:Math.abs(m-v)-u,height:y-g}},hit:function(e){var t=e.data,n=e.args,r=n[0],i=n[1],s=e.xInverse(r.relX),o=e.yInverse(r.relY),u=this.getBarGeometry(s,o,e),a=u.width/2,f=u.left,l=u.y,c,h;for(h=t.length;h--;)c=this.getBarGeometry(t[h][0],t[h][1],e),(l>0&&lc.y)&&Math.abs(f-c.left)0?(f[c]=(f[c]||0)+h,o=Math.max(o,f[c])):(l[c]=(l[c]||0)+h,s=Math.min(s,l[c]));(a==1&&u||a==-1&&!u)&&n.topPadding&&(e.max===e.datamax||n.stacked&&this.stackMax!==o)&&(o+=n.topPadding*(o-s)),this.stackMin=s,this.stackMax=o,this.negativeSums=l,this.positiveSums=f,e.max=o,e.min=s}}),Flotr.addType("bubbles",{options:{show:!1,lineWidth:2,fill:!0,fillOpacity:.4,baseRadius:2},draw:function(e){var t=e.context,n=e.shadowSize;t.save(),t.lineWidth=e.lineWidth,t.fillStyle="rgba(0,0,0,0.05)",t.strokeStyle="rgba(0,0,0,0.05)",this.plot(e,n/2),t.strokeStyle="rgba(0,0,0,0.1)",this.plot(e,n/4),t.strokeStyle=e.color,t.fillStyle=e.fillStyle,this.plot(e),t.restore()},plot:function(e,t){var n=e.data,r=e.context,i,s,o,u,a;t=t||0;for(s=0;sg?"downFillColor":"upFillColor"],e.fill&&!e.barcharts&&(n.fillStyle="rgba(0,0,0,0.05)",n.fillRect(y+o,x+o,b-y,S-x),n.save(),n.globalAlpha=e.fillOpacity,n.fillStyle=l,n.fillRect(y,x+u,b-y,S-x),n.restore());if(u||a)h=Math.floor((y+b)/2)+f,n.strokeStyle=l,n.beginPath(),e.barcharts?(n.moveTo(h,Math.floor(E+u)),n.lineTo(h,Math.floor(w+u)),T=dv&&ag&&fs.max||yo.max)continue;vs.max&&(m=s.max,s.lastSerie!=e&&(p=!1)),go.max&&(y=o.max,o.lastSerie!=e&&(p=!1)),r&&(u.beginPath(),u.moveTo(s.d2p(v),o.d2p(g)+n),u.lineTo(s.d2p(v),o.d2p(y)+n),u.lineTo(s.d2p(m),o.d2p(y)+n),u.lineTo(s.d2p(m),o.d2p(g)+n),u.fill(),u.closePath()),e.gantt.lineWidth&&(h||d||p)&&(u.beginPath(),u.moveTo(s.d2p(v),o.d2p(g)+n),u[h?"lineTo":"moveTo"](s.d2p(v),o.d2p(y)+n),u[p?"lineTo":"moveTo"](s.d2p(m),o.d2p(y)+n),u[d?"lineTo":"moveTo"](s.d2p(m),o.d2p(g)+n),u.stroke(),u.closePath())}},plotShadows:function(e,t,n){var r=e.data;if(r.length<1)return;var i,s,o,u,a=e.xaxis,f=e.yaxis,l=this.ctx,c=this.options.shadowSize;for(i=0;ia.max||vf.max)continue;ha.max&&(p=a.max),df.max&&(v=f.max);var m=a.d2p(p)-a.d2p(h)-(a.d2p(p)+c<=this.plotWidth?0:c),g=f.d2p(d)-f.d2p(v)-(f.d2p(d)+c<=this.plotHeight?0:c);l.fillStyle="rgba(0,0,0,0.05)",l.fillRect(Math.min(a.d2p(h)+c,this.plotWidth),Math.min(f.d2p(v)+c,this.plotHeight),m,g)}},extendXRange:function(e){if(e.options.max===null){var t=e.min,n=e.max,r,i,s,o,u,a={},f={},l=null;for(r=0;rt&&(t=e.max+o.barWidth)}}e.lastSerie=f,e.max=t,e.min=n,e.tickSize=Flotr.getTickSize(e.options.noTicks,n,t,e.options.tickDecimals)}}}),function(){function e(e){return typeof e=="object"&&e.constructor&&(Image?!0:e.constructor===Image)}Flotr.defaultMarkerFormatter=function(e){return Math.round(e.y*100)/100+""},Flotr.addType("markers",{options:{show:!1,lineWidth:1,color:"#000000",fill:!1,fillColor:"#FFFFFF",fillOpacity:.4,stroke:!1,position:"ct",verticalMargin:0,labelFormatter:Flotr.defaultMarkerFormatter,fontSize:Flotr.defaultOptions.fontSize,stacked:!1,stackingType:"b",horizontal:!1},stack:{positive:[],negative:[],values:[]},draw:function(e){function h(e,t){return o=r.negative[e]||0,s=r.positive[e]||0,t>0?(r.positive[e]=o+t,o+t):(r.negative[e]=s+t,s+t)}var t=e.data,n=e.context,r=e.stacked?e.stack:!1,i=e.stackingType,s,o,u,a,f,l,c;n.save(),n.lineJoin="round",n.lineWidth=e.lineWidth,n.strokeStyle="rgba(0,0,0,0.5)",n.fillStyle=e.fillStyle;for(a=0;a0?"top":"bottom",C,k,L;n.save(),n.translate(u/2,o/2),n.scale(1,v),k=Math.cos(b)*a,L=Math.sin(b)*a,i>0&&(this.plotSlice(k+i,L+i,h,g,y,n),l&&(n.fillStyle="rgba(0,0,0,0.1)",n.fill())),this.plotSlice(k,L,h,g,y,n),l&&(n.fillStyle=c,n.fill()),n.lineWidth=r,n.strokeStyle=f,n.stroke(),C={size:e.fontSize*1.2,color:e.fontColor,weight:1.5},w&&(e.htmlText||!e.textEnabled?(divStyle="position:absolute;"+N+":"+(o/2+(N==="top"?x:-x))+"px;",divStyle+=T+":"+(u/2+(T==="right"?-S:S))+"px;",d.push('
',w,"
")):(C.textAlign=T,C.textBaseline=N,Flotr.drawText(n,w,S,x,C)));if(e.htmlText||!e.textEnabled){var A=Flotr.DOM.node('
');Flotr.DOM.insert(A,d.join("")),Flotr.DOM.insert(e.element,A)}n.restore(),this.startAngle=y,this.slices=this.slices||[],this.slices.push({radius:h,x:k,y:L,explode:a,start:g,end:y})},plotSlice:function(e,t,n,r,i,s){s.beginPath(),s.moveTo(e,t),s.arc(e,t,n,r,i,!1),s.lineTo(e,t),s.closePath()},hit:function(e){var t=e.data[0],n=e.args,r=e.index,i=n[0],s=n[1],o=this.slices[r],u=i.relX-e.width/2,a=i.relY-e.height/2,f=Math.sqrt(u*u+a*a),l=Math.atan(a/u),c=Math.PI*2,h=o.explode||e.explode,p=o.start%c,d=o.end%c,v=e.epsilon;u<0?l+=Math.PI:u>0&&a<0&&(l+=c),fh&&(l>p&&ld&&(lp)||p===d&&(o.start===o.end&&Math.abs(l-p)v))&&(s.x=t[0],s.y=t[1],s.sAngle=p,s.eAngle=d,s.index=0,s.seriesIndex=r,s.fraction=t[1]/this.total)},drawHit:function(e){var t=e.context,n=this.slices[e.args.seriesIndex];t.save(),t.translate(e.width/2,e.height/2),this.plotSlice(n.x,n.y,n.radius,n.start,n.end,t),t.stroke(),t.restore()},clearHit:function(e){var t=e.context,n=this.slices[e.args.seriesIndex],r=2*e.lineWidth,i=n.radius+r;t.save(),t.translate(e.width/2,e.height/2),t.clearRect(n.x-i,n.y-i,2*i+r,2*i+r),t.restore()},extendYRange:function(e,t){this.total=(this.total||0)+t[0][1]}})}(),Flotr.addType("points",{options:{show:!1,radius:3,lineWidth:2,fill:!0,fillColor:"#FFFFFF",fillOpacity:1,hitRadius:null},draw:function(e){var t=e.context,n=e.lineWidth,r=e.shadowSize;t.save(),r>0&&(t.lineWidth=r/2,t.strokeStyle="rgba(0,0,0,0.1)",this.plot(e,r/2+t.lineWidth/2),t.strokeStyle="rgba(0,0,0,0.2)",this.plot(e,t.lineWidth/2)),t.lineWidth=e.lineWidth,t.strokeStyle=e.color,e.fill&&(t.fillStyle=e.fillStyle),this.plot(e),t.restore()},plot:function(e,t){var n=e.data,r=e.context,i=e.xScale,s=e.yScale,o,u,a;for(o=n.length-1;o>-1;--o){a=n[o][1];if(a===null)continue;u=i(n[o][0]),a=s(a);if(u<0||u>e.width||a<0||a>e.height)continue;r.beginPath(),t?r.arc(u,a+t,e.radius,0,Math.PI,!1):(r.arc(u,a,e.radius,0,2*Math.PI,!0),e.fill&&r.fill()),r.stroke(),r.closePath()}}}),Flotr.addType("radar",{options:{show:!1,lineWidth:2,fill:!0,fillOpacity:.4,radiusRatio:.9,sensibility:2},draw:function(e){var t=e.context,n=e.shadowSize;t.save(),t.translate(e.width/2,e.height/2),t.lineWidth=e.lineWidth,t.fillStyle="rgba(0,0,0,0.05)",t.strokeStyle="rgba(0,0,0,0.05)",this.plot(e,n/2),t.strokeStyle="rgba(0,0,0,0.1)",this.plot(e,n/4),t.strokeStyle=e.color,t.fillStyle=e.fillStyle,this.plot(e),t.restore()},plot:function(e,t){var n=e.data,r=e.context,i=Math.min(e.height,e.width)*e.radiusRatio/2,s=2*Math.PI/n.length,o=-Math.PI/2,u,a;t=t||0,r.beginPath();for(u=0;uthis.plotWidth||t.relY>this.plotHeight){this.el.style.cursor=null,e.removeClass(this.el,"flotr-crosshair");return}r.hideCursor&&(this.el.style.cursor="none",e.addClass(this.el,"flotr-crosshair")),n.save(),n.strokeStyle=r.color,n.lineWidth=1,n.beginPath(),r.mode.indexOf("x")!=-1&&(n.moveTo(s,i.top),n.lineTo(s,i.top+this.plotHeight)),r.mode.indexOf("y")!=-1&&(n.moveTo(i.left,o),n.lineTo(i.left+this.plotWidth,o)),n.stroke(),n.restore()},clearCrosshair:function(){var e=this.plotOffset,t=this.lastMousePos,n=this.octx;t&&(n.clearRect(Math.round(t.relX)+e.left,e.top,1,this.plotHeight+1),n.clearRect(e.left,Math.round(t.relY)+e.top,this.plotWidth+1,1))}})}(),function(){function n(e,t,n,r,i,s){var o="image/"+e,u=n.getImageData(0,0,r,i),a=new Image;return n.save(),n.globalCompositeOperation="destination-over",n.fillStyle=s,n.fillRect(0,0,r,i),a.src=t.toDataURL(o),n.restore(),n.clearRect(0,0,r,i),n.putImageData(u,0,0),a}var e=Flotr.DOM,t=Flotr._;Flotr.addPlugin("download",{saveImage:function(r,i,s,o){var u=this.options.grid,a;if(Flotr.isIE&&Flotr.isIE<9)return a=""+this.canvas.firstChild.innerHTML+"",window.open().document.write(a);if(r!=="jpeg"&&r!=="png")return;a=n(r,this.canvas,this.ctx,this.canvasWidth,this.canvasHeight,u&&u.backgroundColor||"#ffffff");if(!t.isElement(a)||!o)return window.open(a.src);this.download.restoreCanvas(),e.hide(this.canvas),e.hide(this.overlay),e.setStyles({position:"absolute"}),e.insert(this.el,a),this.saveImageElement=a},restoreCanvas:function(){e.show(this.canvas),e.show(this.overlay),this.saveImageElement&&this.el.removeChild(this.saveImageElement),this.saveImageElement=null}})}(),function(){var e=Flotr.EventAdapter,t=Flotr._;Flotr.addPlugin("graphGrid",{callbacks:{"flotr:beforedraw":function(){this.graphGrid.drawGrid()},"flotr:afterdraw":function(){this.graphGrid.drawOutline()}},drawGrid:function(){function v(e){for(p=0;p=c.max||(e==c.min||e==c.max)&&i.outlineWidth)return;r(Math.floor(c.d2p(e))+n.lineWidth/2)})}function g(e){n.moveTo(e,0),n.lineTo(e,f)}function y(e){n.moveTo(0,e),n.lineTo(l,e)}var n=this.ctx,r=this.options,i=r.grid,s=i.verticalLines,o=i.horizontalLines,u=i.minorVerticalLines,a=i.minorHorizontalLines,f=this.plotHeight,l=this.plotWidth,c,h,p,d;(s||u||o||a)&&e.fire(this.el,"flotr:beforegrid",[this.axes.x,this.axes.y,r,this]),n.save(),n.lineWidth=1,n.strokeStyle=i.tickColor;if(i.circular){n.translate(this.plotOffset.left+l/2,this.plotOffset.top+f/2);var b=Math.min(f,l)*r.radar.radiusRatio/2,w=this.axes.x.ticks.length,S=2*(Math.PI/w),x=-Math.PI/2;n.beginPath(),c=this.axes.y,o&&v(c.ticks),a&&v(c.minorTicks),s&&t.times(w,function(e){n.moveTo(0,0),n.lineTo(Math.cos(e*S+x)*b,Math.sin(e*S+x)*b)}),n.stroke()}else n.translate(this.plotOffset.left,this.plotOffset.top),i.backgroundColor&&(n.fillStyle=this.processColor(i.backgroundColor,{x1:0,y1:0,x2:l,y2:f}),n.fillRect(0,0,l,f)),n.beginPath(),c=this.axes.x,s&&m(c.ticks,g),u&&m(c.minorTicks,g),c=this.axes.y,o&&m(c.ticks,y),a&&m(c.minorTicks,y),n.stroke();n.restore(),(s||u||o||a)&&e.fire(this.el,"flotr:aftergrid",[this.axes.x,this.axes.y,r,this])},drawOutline:function(){var e=this,t=e.options,n=t.grid,r=n.outline,s=e.ctx,o=n.backgroundImage,u=e.plotOffset,a=u.left,f=u.top,l=e.plotWidth,c=e.plotHeight,h,p,d,v,m,g;if(!n.outlineWidth)return;s.save();if(n.circular){s.translate(a+l/2,f+c/2);var y=Math.min(c,l)*t.radar.radiusRatio/2,b=this.axes.x.ticks.length,w=2*(Math.PI/b),E=-Math.PI/2;s.beginPath(),s.lineWidth=n.outlineWidth,s.strokeStyle=n.color,s.lineJoin="round";for(i=0;i<=b;++i)s[i===0?"moveTo":"lineTo"](Math.cos(i*w+E)*y,Math.sin(i*w+E)*y);s.stroke()}else{s.translate(a,f);var S=n.outlineWidth,x=.5-S+(S+1)%2/2,T="lineTo",N="moveTo";s.lineWidth=S,s.strokeStyle=n.color,s.lineJoin="miter",s.beginPath(),s.moveTo(x,x),l-=S/2%1,c+=S/2,s[r.indexOf("n")!==-1?T:N](l,x),s[r.indexOf("e")!==-1?T:N](l,c),s[r.indexOf("s")!==-1?T:N](x,c),s[r.indexOf("w")!==-1?T:N](x,x),s.stroke(),s.closePath()}s.restore(),o&&(d=o.src||o,v=(parseInt(o.left,10)||0)+u.left,m=(parseInt(o.top,10)||0)+u.top,p=new Image,p.onload=function(){s.save(),o.alpha&&(s.globalAlpha=o.alpha),s.globalCompositeOperation="destination-over",s.drawImage(p,0,0,p.width,p.height,v,m,l,c),s.restore()},p.src=d)}})}(),function(){var e=Flotr.DOM,t=Flotr._,n=Flotr,r="opacity:0.7;background-color:#000;color:#fff;position:absolute;padding:2px 8px;-moz-border-radius:4px;border-radius:4px;white-space:nowrap;";Flotr.addPlugin("hit",{callbacks:{"flotr:mousemove":function(e,t){this.hit.track(t)},"flotr:click":function(e){var n=this.hit.track(e);n&&!t.isUndefined(n.index)&&(e.hit=n)},"flotr:mouseout":function(e){e.relatedTarget!==this.mouseTrack&&this.hit.clearHit()},"flotr:destroy":function(){this.options.mouse.container&&e.remove(this.mouseTrack),this.mouseTrack=null}},track:function(e){if(this.options.mouse.track||t.any(this.series,function(e){return e.mouse&&e.mouse.track}))return this.hit.hit(e)},executeOnType:function(e,r,i){function u(e,u){t.each(t.keys(n.graphTypes),function(t){e[t]&&e[t].show&&!e.hide&&this[t][r]&&(o=this.getOptions(e,t),o.fill=!!e.mouse.fillColor,o.fillStyle=this.processColor(e.mouse.fillColor||"#ffffff",{opacity:e.mouse.fillOpacity}),o.color=e.mouse.lineColor,o.context=this.octx,o.index=u,i&&(o.args=i),this[t][r].call(this[t],o),s=!0)},this)}var s=!1,o;return t.isArray(e)||(e=[e]),t.each(e,u,this),s},drawHit:function(e){var t=this.octx,n=e.series;if(n.mouse.lineColor){t.save(),t.lineWidth=n.points?n.points.lineWidth:1,t.strokeStyle=n.mouse.lineColor,t.fillStyle=this.processColor(n.mouse.fillColor||"#ffffff",{opacity:n.mouse.fillOpacity}),t.translate(this.plotOffset.left,this.plotOffset.top);if(!this.hit.executeOnType(n,"drawHit",e)){var r=e.xaxis,i=e.yaxis;t.beginPath(),t.arc(r.d2p(e.x),i.d2p(e.y),n.points.hitRadius||n.points.radius||n.mouse.radius,0,2*Math.PI,!0),t.fill(),t.stroke(),t.closePath()}t.restore(),this.clip(t)}this.prevHit=e},clearHit:function(){var t=this.prevHit,n=this.octx,r=this.plotOffset;n.save(),n.translate(r.left,r.top);if(t){if(!this.hit.executeOnType(t.series,"clearHit",this.prevHit)){var i=t.series,s=i.points?i.points.lineWidth:1;offset=(i.points.hitRadius||i.points.radius||i.mouse.radius)+s,n.clearRect(t.xaxis.d2p(t.x)-offset,t.yaxis.d2p(t.y)-offset,offset*2,offset*2)}e.hide(this.mouseTrack),this.prevHit=null}n.restore()},hit:function(e){var n=this.options,r=this.prevHit,i,s,o,u,a,f,l,c,h;if(this.series.length===0)return;h={relX:e.relX,relY:e.relY,absX:e.absX,absY:e.absY,series:this.series};if(n.mouse.trackY&&!n.mouse.trackAll&&this.hit.executeOnType(this.series,"hit",[e,h])&&!t.isUndefined(h.seriesIndex))a=this.series[h.seriesIndex],h.series=a,h.mouse=a.mouse,h.xaxis=a.xaxis,h.yaxis=a.yaxis;else{i=this.hit.closest(e);if(i){i=n.mouse.trackY?i.point:i.x,u=i.seriesIndex,a=this.series[u],l=a.xaxis,c=a.yaxis,s=2*a.mouse.sensibility;if(n.mouse.trackAll||i.distanceXl.xaxis.max)continue;p=Math.abs(g-v),d=Math.abs(y-m),h=p*p+d*d,h'),this.mouseTrack=c,e.insert(b||this.el,c));if(!g||g<0)g=0;a&&a.toFixed&&(a=a.toFixed(g)),f&&f.toFixed&&(f=f.toFixed(g)),T=n.mouse.trackFormatter({x:a,y:f,series:n.series,index:n.index,nearest:n,fraction:n.fraction});if(t.isNull(T)||t.isUndefined(T)){e.hide(c);return}c.innerHTML=T,e.show(c);if(!o)return;x=e.size(c),b&&(S=e.position(this.el),w=S.top,E=S.left);if(!n.mouse.relative)i+="top:",o.charAt(0)=="n"?i+=w+u+m:o.charAt(0)=="s"&&(i+=w-u+m+this.plotHeight-x.height),i+="px;bottom:auto;left:",o.charAt(1)=="e"?i+=E-u+p+this.plotWidth-x.width:o.charAt(1)=="w"&&(i+=E+u+p),i+="px;right:auto;";else if(s.pie&&s.pie.show){var N={x:this.plotWidth/2,y:this.plotHeight/2},C=Math.min(this.canvasWidth,this.canvasHeight)*s.pie.sizeRatio/2,k=n.sAngle=5||Math.abs(e.second.y-e.first.y)>=5}})}(),function(){var e=Flotr.DOM;Flotr.addPlugin("labels",{callbacks:{"flotr:afterdraw":function(){this.labels.draw()}},draw:function(){function b(e,t,r){var i=r?t.minorTicks:t.ticks,s=t.orientation===1,u=t.n===1,l,h;l={color:t.options.color||d.grid.color,angle:Flotr.toRad(t.options.labelsAngle),textBaseline:"middle"};for(c=0;c(s?e.plotWidth:e.plotHeight))continue;Flotr.drawText(v,n.label,l(e,s,o,a),h(e,s,o,a),u),!s&&!o&&(v.save(),v.strokeStyle=u.color,v.beginPath(),v.moveTo(e.plotOffset.left+e.plotWidth-8,e.plotOffset.top+t.d2p(n.v)),v.lineTo(e.plotOffset.left+e.plotWidth,e.plotOffset.top+t.d2p(n.v)),v.stroke(),v.restore())}}function E(e,t){var r=t.orientation===1,i=t.n===1,o="",u,a,f,l=e.plotOffset;!r&&!i&&(v.save(),v.strokeStyle=t.options.color||d.grid.color,v.beginPath());if(t.options.showLabels&&(i?!0:t.used))for(c=0;c(r?e.canvasWidth:e.canvasHeight))continue;f=l.top+(r?(i?1:-1)*(e.plotHeight+d.grid.labelMargin):t.d2p(n.v)-t.maxLabel.height/2),u=r?l.left+t.d2p(n.v)-s/2:0,o="",c===0?o=" first":c===t.ticks.length-1&&(o=" last"),o+=r?" flotr-grid-label-x":" flotr-grid-label-y",h+=['
'+n.label+"
"].join(" "),!r&&!i&&(v.moveTo(l.left+e.plotWidth-8,l.top+t.d2p(n.v)),v.lineTo(l.left+e.plotWidth,l.top+t.d2p(n.v)))}}var t,n,r,i,s,o,u,a,f,l,c,h="",p=0,d=this.options,v=this.ctx,m=this.axes,g={size:d.fontSize};for(c=0;c-1;--p){if(!n[p].label||n[p].hide)continue;d=s.labelFormatter(n[p].label),E=Math.max(E,this._text.measureText(d,S).width)}var x=Math.round(m+y*3+E),T=Math.round(f*(y+g)+y);!h&&h!==0&&(h=.1);if(!i.HtmlText&&this.textEnabled&&!s.container){l.charAt(0)=="s"&&(w=r.top+this.plotHeight-(c+T)),l.charAt(0)=="c"&&(w=r.top+this.plotHeight/2-(c+T/2)),l.charAt(1)=="e"&&(b=r.left+this.plotWidth-(c+x)),v=this.processColor(s.backgroundColor,{opacity:h}),a.fillStyle=v,a.fillRect(b,w,x,T),a.strokeStyle=s.labelBoxBorderColor,a.strokeRect(Flotr.toPixel(b),Flotr.toPixel(w),x,T);var N=b+y,C=w+y;for(p=0;p":""),u=!0);var k=n[p],L=s.labelBoxWidth,A=s.labelBoxHeight;d=s.labelFormatter(k.label),v="background-color:"+(k.bars&&k.bars.show&&k.bars.fillColor&&k.bars.fill?k.bars.fillColor:k.color)+";",o.push('','
','
','
',"
","
","",'',d,"")}u&&o.push("");if(o.length>0){var O=''+o.join("")+"
";if(s.container)O=e.node(O),this.legend.markup=O,e.insert(s.container,O);else{var M={position:"absolute",zIndex:"2",border:"1px solid "+s.labelBoxBorderColor};l.charAt(0)=="n"?(M.top=c+r.top+"px",M.bottom="auto"):l.charAt(0)=="c"?(M.top=c+(this.plotHeight-T)/2+"px",M.bottom="auto"):l.charAt(0)=="s"&&(M.bottom=c+r.bottom+"px",M.top="auto"),l.charAt(1)=="e"?(M.right=c+r.right+"px",M.left="auto"):l.charAt(1)=="w"&&(M.left=c+r.left+"px",M.right="auto");var P=e.create("div"),H;P.className="flotr-legend",e.setStyles(P,M),e.insert(P,O),e.insert(this.el,P);if(!h)return;var B=s.backgroundColor||i.grid.backgroundColor||"#ffffff";t.extend(M,e.size(P),{backgroundColor:B,zIndex:"",border:""}),M.width+="px",M.height+="px",P=e.create("div"),P.className="flotr-legend-bg",e.setStyles(P,M),e.opacity(P,h),e.insert(P," "),e.insert(this.el,P)}}}}}})}(),function(){function e(e){if(this.options.spreadsheet.tickFormatter)return this.options.spreadsheet.tickFormatter(e);var t=n.find(this.axes.x.ticks,function(t){return t.v==e});return t?t.label:e}var t=Flotr.DOM,n=Flotr._;Flotr.addPlugin("spreadsheet",{options:{show:!1,tabGraphLabel:"Graph",tabDataLabel:"Data",toolbarDownload:"Download CSV",toolbarSelectAll:"Select all",csvFileSeparator:",",decimalSeparator:".",tickFormatter:null,initialTab:"graph"},callbacks:{"flotr:afterconstruct":function(){if(!this.options.spreadsheet.show)return;var e=this.spreadsheet,n=t.node('
'),r=t.node('
'+this.options.spreadsheet.tabGraphLabel+"
"),i=t.node('
'+this.options.spreadsheet.tabDataLabel+"
"),s;e.tabsContainer=n,e.tabs={graph:r,data:i},t.insert(n,r),t.insert(n,i),t.insert(this.el,n),s=t.size(i).height+2,this.plotOffset.bottom+=s,t.setStyles(n,{top:this.canvasHeight-s+"px"}),this.observe(r,"click",function(){e.showTab("graph")}).observe(i,"click",function(){e.showTab("data")}),this.options.spreadsheet.initialTab!=="graph"&&e.showTab(this.options.spreadsheet.initialTab)}},loadDataGrid:function(){if(this.seriesData)return this.seriesData;var e=this.series,t={};return n.each(e,function(e,r){n.each(e.data,function(e){var n=e[0],s=e[1],o=t[n];if(o)o[r+1]=s;else{var u=[];u[0]=n,u[r+1]=s,t[n]=u}})}),this.seriesData=n.sortBy(t,function(e,t){return parseInt(t,10)}),this.seriesData},constructDataGrid:function(){if(this.spreadsheet.datagrid)return this.spreadsheet.datagrid;var r=this.series,i=this.spreadsheet.loadDataGrid(),s=[""],o,u,a,f=[''];f.push(""),n.each(r,function(e,t){f.push('"),s.push("")}),f.push(""),n.each(i,function(t){f.push(""),n.times(r.length+1,function(r){var i="td",s=t[r],o=n.isUndefined(s)?"":Math.round(s*1e5)/1e5;if(r===0){i="th";var u=e.call(this,o);u&&(o=u)}f.push("<"+i+(i=="th"?' scope="row"':"")+">"+o+"")},this),f.push("")},this),s.push(""),a=t.node(f.join("")),o=t.node('"),u=t.node('"),this.observe(o,"click",n.bind(this.spreadsheet.downloadCSV,this)).observe(u,"click",n.bind(this.spreadsheet.selectAllData,this));var l=t.node('
');t.insert(l,o),t.insert(l,u);var c=this.canvasHeight-t.size(this.spreadsheet.tabsContainer).height-2,h=t.node('
');return t.insert(h,l),t.insert(h,a),t.insert(this.el,h),this.spreadsheet.datagrid=a,this.spreadsheet.container=h,a},showTab:function(e){if(this.spreadsheet.activeTab===e)return;switch(e){case"graph":t.hide(this.spreadsheet.container),t.removeClass(this.spreadsheet.tabs.data,"selected"),t.addClass(this.spreadsheet.tabs.graph,"selected");break;case"data":this.spreadsheet.datagrid||this.spreadsheet.constructDataGrid(),t.show(this.spreadsheet.container),t.addClass(this.spreadsheet.tabs.data,"selected"),t.removeClass(this.spreadsheet.tabs.graph,"selected");break;default:throw"Illegal tab name: "+e}this.spreadsheet.activeTab=e},selectAllData:function(){if(this.spreadsheet.tabs){var e,t,n,r,i=this.spreadsheet.constructDataGrid();return this.spreadsheet.showTab("data"),setTimeout(function(){(n=i.ownerDocument)&&(r=n.defaultView)&&r.getSelection&&n.createRange&&(e=window.getSelection())&&e.removeAllRanges?(t=n.createRange(),t.selectNode(i),e.removeAllRanges(),e.addRange(t)):document.body&&document.body.createTextRange&&(t=document.body.createTextRange())&&(t.moveToElementText(i),t.select())},0),!0}return!1},downloadCSV:function(){var t="",r=this.series,i=this.options,s=this.spreadsheet.loadDataGrid(),o=encodeURIComponent(i.spreadsheet.csvFileSeparator);if(i.spreadsheet.decimalSeparator===i.spreadsheet.csvFileSeparator)throw"The decimal separator is the same as the column separator ("+i.spreadsheet.decimalSeparator+")";n.each(r,function(e,n){t+=o+'"'+(e.label||String.fromCharCode(65+n)).replace(/\"/g,'\\"')+'"'}),t+="%0D%0A",t+=n.reduce(s,function(t,n){var r=e.call(this,n[0])||"";r='"'+(r+"").replace(/\"/g,'\\"')+'"';var s=n.slice(1).join(o);return i.spreadsheet.decimalSeparator!=="."&&(s=s.replace(/\./g,i.spreadsheet.decimalSeparator)),t+r+o+s+"%0D%0A"},"",this),Flotr.isIE&&Flotr.isIE<9?(t=t.replace(new RegExp(o,"g"),decodeURIComponent(o)).replace(/%0A/g,"\n").replace(/%0D/g,"\r"),window.open().document.write(t)):window.open("data:text/csv,"+t)}})}(),function(){var e=Flotr.DOM;Flotr.addPlugin("titles",{callbacks:{"flotr:afterdraw":function(){this.titles.drawTitles()}},drawTitles:function(){var t,n=this.options,r=n.grid.labelMargin,i=this.ctx,s=this.axes;if(!n.HtmlText&&this.textEnabled){var o={size:n.fontSize,color:n.grid.color,textAlign:"center"};n.subtitle&&Flotr.drawText(i,n.subtitle,this.plotOffset.left+this.plotWidth/2,this.titleHeight+this.subtitleHeight-2,o),o.weight=1.5,o.size*=1.5,n.title&&Flotr.drawText(i,n.title,this.plotOffset.left+this.plotWidth/2,this.titleHeight-2,o),o.weight=1.8,o.size*=.8,s.x.options.title&&s.x.used&&(o.textAlign=s.x.options.titleAlign||"center",o.textBaseline="top",o.angle=Flotr.toRad(s.x.options.titleAngle),o=Flotr.getBestTextAlign(o.angle,o),Flotr.drawText(i,s.x.options.title,this.plotOffset.left+this.plotWidth/2,this.plotOffset.top+s.x.maxLabel.height+this.plotHeight+2*r,o)),s.x2.options.title&&s.x2.used&&(o.textAlign=s.x2.options.titleAlign||"center",o.textBaseline="bottom",o.angle=Flotr.toRad(s.x2.options.titleAngle),o=Flotr.getBestTextAlign(o.angle,o),Flotr.drawText(i,s.x2.options.title,this.plotOffset.left+this.plotWidth/2,this.plotOffset.top-s.x2.maxLabel.height-2*r,o)),s.y.options.title&&s.y.used&&(o.textAlign=s.y.options.titleAlign||"right",o.textBaseline="middle",o.angle=Flotr.toRad(s.y.options.titleAngle),o=Flotr.getBestTextAlign(o.angle,o),Flotr.drawText(i,s.y.options.title,this.plotOffset.left-s.y.maxLabel.width-2*r,this.plotOffset.top+this.plotHeight/2,o)),s.y2.options.title&&s.y2.used&&(o.textAlign=s.y2.options.titleAlign||"left",o.textBaseline="middle",o.angle=Flotr.toRad(s.y2.options.titleAngle),o=Flotr.getBestTextAlign(o.angle,o),Flotr.drawText(i,s.y2.options.title,this.plotOffset.left+this.plotWidth+s.y2.maxLabel.width+2*r,this.plotOffset.top+this.plotHeight/2,o))}else{t=[],n.title&&t.push('
',n.title,"
"),n.subtitle&&t.push('
',n.subtitle,"
"),t.push(""),t.push('
'),s.x.options.title&&s.x.used&&t.push('
',s.x.options.title,"
"),s.x2.options.title&&s.x2.used&&t.push('
',s.x2.options.title,"
"),s.y.options.title&&s.y.used&&t.push('
',s.y.options.title,"
"),s.y2.options.title&&s.y2.used&&t.push('
',s.y2.options.title,"
"),t=t.join("");var u=e.create("div");e.setStyles({color:n.grid.color}),u.className="flotr-titles",e.insert(this.el,u),e.insert(u,t)}}})}(); diff --git a/gui/baculum/protected/JavaScript/graph.js b/gui/baculum/protected/JavaScript/graph.js new file mode 100644 index 0000000000..6a7a723596 --- /dev/null +++ b/gui/baculum/protected/JavaScript/graph.js @@ -0,0 +1,437 @@ +var JobClass = Class.create({ + job: null, + job_size: 0, + start_stamp: 0, + end_stamp: 0, + start_point: [], + end_point: [], + + initialize: function(job) { + this.set_job(job); + }, + + set_job: function(job) { + if (typeof(job) == "object") { + this.job = job; + this.set_job_size(); + this.set_start_stamp(); + this.set_end_stamp(); + this.set_start_point(); + this.set_end_point(); + } else { + alert('Job is not object'); + } + }, + + set_start_point: function() { + var xaxis = this.start_stamp; + var yaxis = this.job_size; + this.start_point = [xaxis, yaxis]; + }, + + set_end_point: function() { + var xaxis = this.end_stamp; + var yaxis = this.job_size; + this.end_point = [xaxis, yaxis]; + }, + + set_job_size: function(unit) { + var units = ['Bi', 'KiB', 'MiB', 'GiB', 'TiB']; + var pos = units.indexOf(unit); + var size = 0; + + if (pos != -1) { + unit = pos; + } else { + // default GiB + unit = 3; + } + + this.job_size = this.job.jobbytes / (1 << (10 * unit)); + }, + + set_start_stamp: function() { + this.start_stamp = iso_date_to_timestamp(this.job.starttime); + }, + + set_end_stamp: function() { + this.end_stamp = iso_date_to_timestamp(this.job.endtime); + } +}); + +var GraphClass = Class.create({ + jobs: [], + jobs_all: [], + series: [], + graph_obj: null, + graph_container: null, + legend_container: null, + time_range: null, + date_from: null, + date_to: null, + txt: {}, + filter_include: { + type: 'B' + }, + filter_exclude: { + start_stamp: 0, + end_stamp: 0 + }, + filter_all_mark: '@', + graph_options: { + legend: { + show: true, + noColumns: 9, + labelBoxHeight: 10, + fontColor: '#ffffff' + }, + bars: { + show: true, + fill: true, + horizontal : false, + shadowSize : 0 + }, + xaxis: { + mode : 'time', + timeMode: 'local', + labelsAngle : 45, + autoscale: true, + color: 'white', + showLabels: true + }, + yaxis: { + color: 'white', + min: 0 + }, + selection: { + mode : 'x' + }, + lines: { + show: true, + lineWidth: 0, + fill: true, + steps: true + }, + grid: { + color: '#ffffff', + outlineWidth: 0 + }, + HtmlText: false + }, + + initialize: function(jobs, txt, container, legend, time_range, date_from, date_to, client_filter, job_filter) { + this.set_jobs(jobs); + this.txt = txt; + this.set_graph_container(container); + this.set_legend_container(legend); + this.set_time_range_filter(time_range); + this.set_date_from_el(date_from); + this.set_date_to_el(date_to); + this.set_date_fields_events(date_from, date_to); + this.set_jobs_filter(job_filter); + this.set_clients_filter(client_filter); + this.update(); + this.set_events(); + }, + + update: function() { + this.extend_graph_options(); + this.apply_jobs_filter(); + this.prepare_series(); + this.draw_graph(); + }, + + set_jobs: function(jobs) { + if (typeof(jobs) == "object") { + if (jobs.hasOwnProperty('output')) { + var job; + for (var i = 0; i this.graph_options.xaxis.max) { + alert('Wrong time range.'); + return; + } + + if (value == this.graph_options.xaxis.max) { + value -= 86400000; + } + + this.graph_options.xaxis.min = value; + + if (set_range) { + var iso_date = timestamp_to_iso_date(value); + var from_el = this.get_date_from_el(); + $(from_el).value = iso_date; + } + }, + + set_xaxis_max: function(value, set_range) { + if (value < this.graph_options.xaxis.min) { + alert('Wrong time range.'); + return; + } + + if (value == this.graph_options.xaxis.min) { + value += 86400000; + } + + this.graph_options.xaxis.max = value; + + if (set_range) { + var iso_date = timestamp_to_iso_date(value); + var to_el = this.get_date_to_el(); + $(to_el).value = iso_date; + } + }, + + set_date_fields_events: function(date_from, date_to) { + var self = this; + this.date_from = date_from; + this.date_to = date_to; + $(date_from).observe('change', function() { + var from_stamp = iso_date_to_timestamp(this.value); + self.set_xaxis_min(from_stamp); + self.update(); + }); + + $(date_to).observe('change', function() { + var to_stamp = iso_date_to_timestamp(this.value); + self.set_xaxis_max(to_stamp); + self.update(); + }); + + var date = this.get_time_range(); + this.set_time_range(date); + }, + + set_clients_filter: function(client_filter) { + var self = this; + $(client_filter).observe('change', function() { + if (this.value == self.filter_all_mark) { + delete self.filter_include['clientid']; + } else { + self.filter_include['clientid'] = parseInt(this.value, 10); + } + self.update(); + }); + }, + + set_jobs_filter: function(job_filter) { + var self = this; + $(job_filter).observe('change', function() { + if (this.value == self.filter_all_mark) { + delete self.filter_include['name']; + } else { + self.filter_include['name'] = this.value; + } + self.update(); + }); + }, + + apply_jobs_filter: function() { + var self = this; + var jobs = this.jobs_all; + var filtred_jobs = []; + var to_add; + for (var i = 0; i < jobs.length; i++) { + to_add = true; + $H(this.filter_include).each(function(pair) { + if (jobs[i].hasOwnProperty(pair.key) && jobs[i][pair.key] != pair.value) { + to_add = false; + return; + } + if (jobs[i].job.hasOwnProperty(pair.key) && jobs[i].job[pair.key] != pair.value) { + to_add = false; + return; + } + }); + if (to_add === true) { + filtred_jobs.push(jobs[i]); + } + } + + for (var i = 0; i < filtred_jobs.length; i++) { + $H(this.filter_exclude).each(function(pair) { + if (filtred_jobs[i].hasOwnProperty(pair.key) && filtred_jobs[i][pair.key] != pair.value) { + return; + } + if (filtred_jobs[i].job.hasOwnProperty(pair.key) && filtred_jobs[i].job[pair.key] != pair.value) { + return; + } + delete filtred_jobs[i]; + }); + } + this.set_jobs(filtred_jobs); + }, + + prepare_series: function() { + var self = this; + this.series = []; + var series_uniq = {}; + var x_vals = []; + var y_vals = []; + var jobs = this.get_jobs(); + for (var i = 0; i < jobs.length; i++) { + if(jobs[i].start_stamp < this.graph_options.xaxis.min || jobs[i].end_stamp > this.graph_options.xaxis.max) { + continue; + } + if (series_uniq.hasOwnProperty(jobs[i].job.name) == false) { + series_uniq[jobs[i].job.name] = []; + } + series_uniq[jobs[i].job.name].push(jobs[i].start_point, jobs[i].end_point, [null, null]); + + } + $H(series_uniq).each(function(pair) { + var serie = []; + for (var i = 0; iLYi26x>1wLFGfWUg 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 delta 6507 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 HzpCbcm6f)5 diff --git a/gui/baculum/protected/Lang/en/messages.po b/gui/baculum/protected/Lang/en/messages.po index 1ebb8283d9..8bf87f9556 100755 --- a/gui/baculum/protected/Lang/en/messages.po +++ b/gui/baculum/protected/Lang/en/messages.po @@ -895,3 +895,69 @@ msgstr "Delete" msgid "Output for selected job is not available yet or you do not have enabled logging job logs to catalog database. For watching job log there is need to add to the job Messages resource next directive: console = all, !skipped, !saved" msgstr "Output for selected job is not available yet or you do not have enabled logging job logs to catalog database.\n\nFor watching job log there is need to add to the job Messages resource next directive:\n\nconsole = all, !skipped, !saved" +msgid "Workspace" +msgstr "Workspace" + +msgid "Graphs" +msgstr "Graphs" + +msgid "select job" +msgstr "select job" + +msgid "Last 6 hours" +msgstr "Last 6 hours" + +msgid "Last 12 hours" +msgstr "Last 12 hours" + +msgid "Today" +msgstr "Today" + +msgid "Two days" +msgstr "Two days" + +msgid "Last week" +msgstr "Last week" + +msgid "Last two weeks" +msgstr "Last two weeks" + +msgid "Last month" +msgstr "Last month" + +msgid "Last three months" +msgstr "Last three months" + +msgid "Last six months" +msgstr "Last six months" + +msgid "Last year" +msgstr "Last year" + +msgid "Date From:" +msgstr "Date From:" + +msgid "Date To:" +msgstr "Date To:" + +msgid "Legend:" +msgstr "Legend:" + +msgid "select client" +msgstr "select client" + +msgid "Graph: Jobs size / Time" +msgstr "Graph: Jobs size / Time" + +msgid "Jobs size (GiB)" +msgstr "Jobs size (GiB)" + +msgid "Time" +msgstr "Time" + +msgid "Tip: for getting zoom, please mark area on graph." +msgstr "Tip: for getting zoom, please mark area on graph." + +msgid "Tip 2: for back from zoom, please click somewhere on graph." +msgstr "Tip 2: for back from zoom, please click somewhere on graph." + diff --git a/gui/baculum/protected/Lang/pl/messages.mo b/gui/baculum/protected/Lang/pl/messages.mo index db61661d1057f4ce97fe02bf82e974fbbd30d10b..ae8b0c2e76e0057a2b4c164fe0c25d54c3dd0fdc 100755 GIT binary patch delta 7296 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 AYXATM delta 6016 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 diff --git a/gui/baculum/protected/Lang/pl/messages.po b/gui/baculum/protected/Lang/pl/messages.po index fdf3dbac8e..dc0b0f095e 100644 --- a/gui/baculum/protected/Lang/pl/messages.po +++ b/gui/baculum/protected/Lang/pl/messages.po @@ -826,3 +826,70 @@ msgstr "Usuń" msgid "Output for selected job is not available yet or you do not have enabled logging job logs to catalog database. For watching job log there is need to add to the job Messages resource next directive: console = all, !skipped, !saved" msgstr "Listing dla wybranego zadania nie jest jeszcze dostępny lub nie masz włączonego logowania statusów zadań do bazy katalogowej.\n\nW celu oglądania listingów ze statusami zadań potrzeba włączyć w zasobie Messages następującą dyrektywę:\n\nconsole = all, !skipped, !saved." +msgid "Workspace" +msgstr "Panel główny" + +msgid "Graphs" +msgstr "Grafy" + +msgid "select job" +msgstr "wybierz zadanie" + +msgid "Last 6 hours" +msgstr "Ostatnie 6 godzin" + +msgid "Last 12 hours" +msgstr "Ostatnie 12 godzin" + +msgid "Today" +msgstr "Dzisiaj" + +msgid "Two days" +msgstr "Dwa dni" + +msgid "Last week" +msgstr "Ostatni tydzień" + +msgid "Last two weeks" +msgstr "Ostatnie dwa tygodnie" + +msgid "Last month" +msgstr "Ostatni miesiąc" + +msgid "Last three months" +msgstr "Ostatnie trzy miesiące" + +msgid "Last six months" +msgstr "Ostatnie sześć miesięcy" + +msgid "Last year" +msgstr "Ostatni rok" + +msgid "Date From:" +msgstr "Data od:" + +msgid "Date To:" +msgstr "Data do:" + +msgid "Legend:" +msgstr "Legenda:" + +msgid "select client" +msgstr "wybierz klienta" + + +msgid "Graph: Jobs size / Time" +msgstr "Graf: Rozmiar zadania / Czas" + +msgid "Jobs size (GiB)" +msgstr "Rozmiar zadania (GiB)" + +msgid "Time" +msgstr "Czas" + +msgid "Tip: for getting zoom, please mark area on graph." +msgstr "Porada: Aby użyć zbliżenia proszę zaznaczyć obszar na grafie." + +msgid "Tip 2: for back from zoom, please click somewhere on graph." +msgstr "Porada 2: aby powrócić ze zbliżenia, proszę kliknąć gdzieś na grafie." + diff --git a/gui/baculum/protected/Layouts/Main.tpl b/gui/baculum/protected/Layouts/Main.tpl index 4af9eb083c..395cfbdc81 100644 --- a/gui/baculum/protected/Layouts/Main.tpl +++ b/gui/baculum/protected/Layouts/Main.tpl @@ -9,6 +9,9 @@ /> /> /> + /> + /> + /> diff --git a/gui/baculum/protected/Pages/Home.page b/gui/baculum/protected/Pages/Home.page index b92c295f4c..feeb2042e7 100644 --- a/gui/baculum/protected/Pages/Home.page +++ b/gui/baculum/protected/Pages/Home.page @@ -1,10 +1,16 @@ <%@ MasterClass="Application.Layouts.Main" Theme="Baculum-v1"%> -
-
+
Baculum -
+
+ +
+
+ +
+
+
- + + +
diff --git a/gui/baculum/protected/Pages/Home.php b/gui/baculum/protected/Pages/Home.php index c8fd3a0fdc..5fe09c78ed 100644 --- a/gui/baculum/protected/Pages/Home.php +++ b/gui/baculum/protected/Pages/Home.php @@ -21,9 +21,12 @@ Prado::using('System.Web.UI.ActiveControls.TActiveButton'); Prado::using('System.Web.UI.ActiveControls.TActivePanel'); Prado::using('System.Web.UI.ActiveControls.TActiveDropDownList'); Prado::using('System.Web.UI.ActiveControls.TActiveCheckBox'); +Prado::using('System.Web.UI.ActiveControls.TActiveLinkButton'); class Home extends BaculumPage { + public $jobs; + public function onInit($param) { parent::onInit($param); $isConfigExists = $this->getModule('configuration')->isApplicationConfig(); @@ -51,6 +54,8 @@ class Home extends BaculumPage $this->Director->dataSource = array_combine($directors, $directors); $this->Director->SelectedValue = $_SESSION['director']; $this->Director->dataBind(); + $this->setJobs(); + $this->setClients(); } } @@ -77,5 +82,30 @@ class Home extends BaculumPage $this->getModule('api')->set(array('bvfs', 'clear'), array()); } } + + public function getJobs() { + return json_encode($this->jobs); + } + + public function setJobs() { + $this->jobs = $this->getModule('api')->get(array('jobs')); + $jobs = array('@' => Prado::localize('select job')); + foreach($this->jobs->output as $key => $job) { + $jobs[$job->name] = $job->name; + } + $this->Jobs->dataSource = $jobs; + $this->Jobs->dataBind(); + } + + public function setClients() { + $clients_obj = $this->getModule('api')->get(array('clients')); + $clients = array('@' => Prado::localize('select client')); + foreach($clients_obj->output as $key => $client) { + $clients[$client->clientid] = $client->name; + } + $this->Clients->dataSource = $clients; + $this->Clients->dataBind(); + + } } -?> \ No newline at end of file +?> diff --git a/gui/baculum/protected/Portlets/SlideWindow.tpl b/gui/baculum/protected/Portlets/SlideWindow.tpl index 8094e46a6e..e4fa22d41b 100644 --- a/gui/baculum/protected/Portlets/SlideWindow.tpl +++ b/gui/baculum/protected/Portlets/SlideWindow.tpl @@ -75,7 +75,7 @@
 '+(e.label||String.fromCharCode(65+t))+"