Index: lams_central/web/includes/javascript/raphael.js =================================================================== RCS file: /usr/local/cvsroot/lams_central/web/includes/javascript/Attic/raphael.js,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ lams_central/web/includes/javascript/raphael.js 9 Nov 2012 11:21:41 -0000 1.1 @@ -0,0 +1,10 @@ +// ┌────────────────────────────────────────────────────────────────────┐ \\ +// │ Raphaël 2.1.0 - JavaScript Vector Library │ \\ +// ├────────────────────────────────────────────────────────────────────┤ \\ +// │ Copyright © 2008-2012 Dmitry Baranovskiy (http://raphaeljs.com) │ \\ +// │ Copyright © 2008-2012 Sencha Labs (http://sencha.com) │ \\ +// ├────────────────────────────────────────────────────────────────────┤ \\ +// │ Licensed under the MIT (http://raphaeljs.com/license.html) license.│ \\ +// └────────────────────────────────────────────────────────────────────┘ \\ + +(function(a){var b="0.3.4",c="hasOwnProperty",d=/[\.\/]/,e="*",f=function(){},g=function(a,b){return a-b},h,i,j={n:{}},k=function(a,b){var c=j,d=i,e=Array.prototype.slice.call(arguments,2),f=k.listeners(a),l=0,m=!1,n,o=[],p={},q=[],r=h,s=[];h=a,i=0;for(var t=0,u=f.length;tf*b.top){e=b.percents[y],p=b.percents[y-1]||0,t=t/b.top*(e-p),o=b.percents[y+1],j=b.anim[e];break}f&&d.attr(b.anim[b.percents[y]])}if(!!j){if(!k){for(var A in j)if(j[g](A))if(U[g](A)||d.paper.customAttributes[g](A)){u[A]=d.attr(A),u[A]==null&&(u[A]=T[A]),v[A]=j[A];switch(U[A]){case C:w[A]=(v[A]-u[A])/t;break;case"colour":u[A]=a.getRGB(u[A]);var B=a.getRGB(v[A]);w[A]={r:(B.r-u[A].r)/t,g:(B.g-u[A].g)/t,b:(B.b-u[A].b)/t};break;case"path":var D=bR(u[A],v[A]),E=D[1];u[A]=D[0],w[A]=[];for(y=0,z=u[A].length;yd)return d;while(cf?c=e:d=e,e=(d-c)/2+c}return e}function n(a,b){var c=o(a,b);return((l*c+k)*c+j)*c}function m(a){return((i*a+h)*a+g)*a}var g=3*b,h=3*(d-b)-g,i=1-g-h,j=3*c,k=3*(e-c)-j,l=1-j-k;return n(a,1/(200*f))}function cq(){return this.x+q+this.y+q+this.width+" × "+this.height}function cp(){return this.x+q+this.y}function cb(a,b,c,d,e,f){a!=null?(this.a=+a,this.b=+b,this.c=+c,this.d=+d,this.e=+e,this.f=+f):(this.a=1,this.b=0,this.c=0,this.d=1,this.e=0,this.f=0)}function bH(b,c,d){b=a._path2curve(b),c=a._path2curve(c);var e,f,g,h,i,j,k,l,m,n,o=d?0:[];for(var p=0,q=b.length;p=0&&y<=1&&A>=0&&A<=1&&(d?n++:n.push({x:x.x,y:x.y,t1:y,t2:A}))}}return n}function bF(a,b){return bG(a,b,1)}function bE(a,b){return bG(a,b)}function bD(a,b,c,d,e,f,g,h){if(!(x(a,c)x(e,g)||x(b,d)x(f,h))){var i=(a*d-b*c)*(e-g)-(a-c)*(e*h-f*g),j=(a*d-b*c)*(f-h)-(b-d)*(e*h-f*g),k=(a-c)*(f-h)-(b-d)*(e-g);if(!k)return;var l=i/k,m=j/k,n=+l.toFixed(2),o=+m.toFixed(2);if(n<+y(a,c).toFixed(2)||n>+x(a,c).toFixed(2)||n<+y(e,g).toFixed(2)||n>+x(e,g).toFixed(2)||o<+y(b,d).toFixed(2)||o>+x(b,d).toFixed(2)||o<+y(f,h).toFixed(2)||o>+x(f,h).toFixed(2))return;return{x:l,y:m}}}function bC(a,b,c,d,e,f,g,h,i){if(!(i<0||bB(a,b,c,d,e,f,g,h)n)k/=2,l+=(m1?1:i<0?0:i;var j=i/2,k=12,l=[-0.1252,.1252,-0.3678,.3678,-0.5873,.5873,-0.7699,.7699,-0.9041,.9041,-0.9816,.9816],m=[.2491,.2491,.2335,.2335,.2032,.2032,.1601,.1601,.1069,.1069,.0472,.0472],n=0;for(var o=0;od;d+=2){var f=[{x:+a[d-2],y:+a[d-1]},{x:+a[d],y:+a[d+1]},{x:+a[d+2],y:+a[d+3]},{x:+a[d+4],y:+a[d+5]}];b?d?e-4==d?f[3]={x:+a[0],y:+a[1]}:e-2==d&&(f[2]={x:+a[0],y:+a[1]},f[3]={x:+a[2],y:+a[3]}):f[0]={x:+a[e-2],y:+a[e-1]}:e-4==d?f[3]=f[2]:d||(f[0]={x:+a[d],y:+a[d+1]}),c.push(["C",(-f[0].x+6*f[1].x+f[2].x)/6,(-f[0].y+6*f[1].y+f[2].y)/6,(f[1].x+6*f[2].x-f[3].x)/6,(f[1].y+6*f[2].y-f[3].y)/6,f[2].x,f[2].y])}return c}function bx(){return this.hex}function bv(a,b,c){function d(){var e=Array.prototype.slice.call(arguments,0),f=e.join("␀"),h=d.cache=d.cache||{},i=d.count=d.count||[];if(h[g](f)){bu(i,f);return c?c(h[f]):h[f]}i.length>=1e3&&delete h[i.shift()],i.push(f),h[f]=a[m](b,e);return c?c(h[f]):h[f]}return d}function bu(a,b){for(var c=0,d=a.length;c',bl=bk.firstChild,bl.style.behavior="url(#default#VML)";if(!bl||typeof bl.adj!="object")return a.type=p;bk=null}a.svg=!(a.vml=a.type=="VML"),a._Paper=j,a.fn=k=j.prototype=a.prototype,a._id=0,a._oid=0,a.is=function(a,b){b=v.call(b);if(b=="finite")return!M[g](+a);if(b=="array")return a instanceof Array;return b=="null"&&a===null||b==typeof a&&a!==null||b=="object"&&a===Object(a)||b=="array"&&Array.isArray&&Array.isArray(a)||H.call(a).slice(8,-1).toLowerCase()==b},a.angle=function(b,c,d,e,f,g){if(f==null){var h=b-d,i=c-e;if(!h&&!i)return 0;return(180+w.atan2(-i,-h)*180/B+360)%360}return a.angle(b,c,f,g)-a.angle(d,e,f,g)},a.rad=function(a){return a%360*B/180},a.deg=function(a){return a*180/B%360},a.snapTo=function(b,c,d){d=a.is(d,"finite")?d:10;if(a.is(b,E)){var e=b.length;while(e--)if(z(b[e]-c)<=d)return b[e]}else{b=+b;var f=c%b;if(fb-d)return c-f+b}return c};var bn=a.createUUID=function(a,b){return function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(a,b).toUpperCase()}}(/[xy]/g,function(a){var b=w.random()*16|0,c=a=="x"?b:b&3|8;return c.toString(16)});a.setWindow=function(b){eve("raphael.setWindow",a,h.win,b),h.win=b,h.doc=h.win.document,a._engine.initWin&&a._engine.initWin(h.win)};var bo=function(b){if(a.vml){var c=/^\s+|\s+$/g,d;try{var e=new ActiveXObject("htmlfile");e.write(""),e.close(),d=e.body}catch(f){d=createPopup().document.body}var g=d.createTextRange();bo=bv(function(a){try{d.style.color=r(a).replace(c,p);var b=g.queryCommandValue("ForeColor");b=(b&255)<<16|b&65280|(b&16711680)>>>16;return"#"+("000000"+b.toString(16)).slice(-6)}catch(e){return"none"}})}else{var i=h.doc.createElement("i");i.title="Raphaël Colour Picker",i.style.display="none",h.doc.body.appendChild(i),bo=bv(function(a){i.style.color=a;return h.doc.defaultView.getComputedStyle(i,p).getPropertyValue("color")})}return bo(b)},bp=function(){return"hsb("+[this.h,this.s,this.b]+")"},bq=function(){return"hsl("+[this.h,this.s,this.l]+")"},br=function(){return this.hex},bs=function(b,c,d){c==null&&a.is(b,"object")&&"r"in b&&"g"in b&&"b"in b&&(d=b.b,c=b.g,b=b.r);if(c==null&&a.is(b,D)){var e=a.getRGB(b);b=e.r,c=e.g,d=e.b}if(b>1||c>1||d>1)b/=255,c/=255,d/=255;return[b,c,d]},bt=function(b,c,d,e){b*=255,c*=255,d*=255;var f={r:b,g:c,b:d,hex:a.rgb(b,c,d),toString:br};a.is(e,"finite")&&(f.opacity=e);return f};a.color=function(b){var c;a.is(b,"object")&&"h"in b&&"s"in b&&"b"in b?(c=a.hsb2rgb(b),b.r=c.r,b.g=c.g,b.b=c.b,b.hex=c.hex):a.is(b,"object")&&"h"in b&&"s"in b&&"l"in b?(c=a.hsl2rgb(b),b.r=c.r,b.g=c.g,b.b=c.b,b.hex=c.hex):(a.is(b,"string")&&(b=a.getRGB(b)),a.is(b,"object")&&"r"in b&&"g"in b&&"b"in b?(c=a.rgb2hsl(b),b.h=c.h,b.s=c.s,b.l=c.l,c=a.rgb2hsb(b),b.v=c.b):(b={hex:"none"},b.r=b.g=b.b=b.h=b.s=b.v=b.l=-1)),b.toString=br;return b},a.hsb2rgb=function(a,b,c,d){this.is(a,"object")&&"h"in a&&"s"in a&&"b"in a&&(c=a.b,b=a.s,a=a.h,d=a.o),a*=360;var e,f,g,h,i;a=a%360/60,i=c*b,h=i*(1-z(a%2-1)),e=f=g=c-i,a=~~a,e+=[i,h,0,0,h,i][a],f+=[h,i,i,h,0,0][a],g+=[0,0,h,i,i,h][a];return bt(e,f,g,d)},a.hsl2rgb=function(a,b,c,d){this.is(a,"object")&&"h"in a&&"s"in a&&"l"in a&&(c=a.l,b=a.s,a=a.h);if(a>1||b>1||c>1)a/=360,b/=100,c/=100;a*=360;var e,f,g,h,i;a=a%360/60,i=2*b*(c<.5?c:1-c),h=i*(1-z(a%2-1)),e=f=g=c-i/2,a=~~a,e+=[i,h,0,0,h,i][a],f+=[h,i,i,h,0,0][a],g+=[0,0,h,i,i,h][a];return bt(e,f,g,d)},a.rgb2hsb=function(a,b,c){c=bs(a,b,c),a=c[0],b=c[1],c=c[2];var d,e,f,g;f=x(a,b,c),g=f-y(a,b,c),d=g==0?null:f==a?(b-c)/g:f==b?(c-a)/g+2:(a-b)/g+4,d=(d+360)%6*60/360,e=g==0?0:g/f;return{h:d,s:e,b:f,toString:bp}},a.rgb2hsl=function(a,b,c){c=bs(a,b,c),a=c[0],b=c[1],c=c[2];var d,e,f,g,h,i;g=x(a,b,c),h=y(a,b,c),i=g-h,d=i==0?null:g==a?(b-c)/i:g==b?(c-a)/i+2:(a-b)/i+4,d=(d+360)%6*60/360,f=(g+h)/2,e=i==0?0:f<.5?i/(2*f):i/(2-2*f);return{h:d,s:e,l:f,toString:bq}},a._path2string=function(){return this.join(",").replace(Y,"$1")};var bw=a._preload=function(a,b){var c=h.doc.createElement("img");c.style.cssText="position:absolute;left:-9999em;top:-9999em",c.onload=function(){b.call(this),this.onload=null,h.doc.body.removeChild(this)},c.onerror=function(){h.doc.body.removeChild(this)},h.doc.body.appendChild(c),c.src=a};a.getRGB=bv(function(b){if(!b||!!((b=r(b)).indexOf("-")+1))return{r:-1,g:-1,b:-1,hex:"none",error:1,toString:bx};if(b=="none")return{r:-1,g:-1,b:-1,hex:"none",toString:bx};!X[g](b.toLowerCase().substring(0,2))&&b.charAt()!="#"&&(b=bo(b));var c,d,e,f,h,i,j,k=b.match(L);if(k){k[2]&&(f=R(k[2].substring(5),16),e=R(k[2].substring(3,5),16),d=R(k[2].substring(1,3),16)),k[3]&&(f=R((i=k[3].charAt(3))+i,16),e=R((i=k[3].charAt(2))+i,16),d=R((i=k[3].charAt(1))+i,16)),k[4]&&(j=k[4][s](W),d=Q(j[0]),j[0].slice(-1)=="%"&&(d*=2.55),e=Q(j[1]),j[1].slice(-1)=="%"&&(e*=2.55),f=Q(j[2]),j[2].slice(-1)=="%"&&(f*=2.55),k[1].toLowerCase().slice(0,4)=="rgba"&&(h=Q(j[3])),j[3]&&j[3].slice(-1)=="%"&&(h/=100));if(k[5]){j=k[5][s](W),d=Q(j[0]),j[0].slice(-1)=="%"&&(d*=2.55),e=Q(j[1]),j[1].slice(-1)=="%"&&(e*=2.55),f=Q(j[2]),j[2].slice(-1)=="%"&&(f*=2.55),(j[0].slice(-3)=="deg"||j[0].slice(-1)=="°")&&(d/=360),k[1].toLowerCase().slice(0,4)=="hsba"&&(h=Q(j[3])),j[3]&&j[3].slice(-1)=="%"&&(h/=100);return a.hsb2rgb(d,e,f,h)}if(k[6]){j=k[6][s](W),d=Q(j[0]),j[0].slice(-1)=="%"&&(d*=2.55),e=Q(j[1]),j[1].slice(-1)=="%"&&(e*=2.55),f=Q(j[2]),j[2].slice(-1)=="%"&&(f*=2.55),(j[0].slice(-3)=="deg"||j[0].slice(-1)=="°")&&(d/=360),k[1].toLowerCase().slice(0,4)=="hsla"&&(h=Q(j[3])),j[3]&&j[3].slice(-1)=="%"&&(h/=100);return a.hsl2rgb(d,e,f,h)}k={r:d,g:e,b:f,toString:bx},k.hex="#"+(16777216|f|e<<8|d<<16).toString(16).slice(1),a.is(h,"finite")&&(k.opacity=h);return k}return{r:-1,g:-1,b:-1,hex:"none",error:1,toString:bx}},a),a.hsb=bv(function(b,c,d){return a.hsb2rgb(b,c,d).hex}),a.hsl=bv(function(b,c,d){return a.hsl2rgb(b,c,d).hex}),a.rgb=bv(function(a,b,c){return"#"+(16777216|c|b<<8|a<<16).toString(16).slice(1)}),a.getColor=function(a){var b=this.getColor.start=this.getColor.start||{h:0,s:1,b:a||.75},c=this.hsb2rgb(b.h,b.s,b.b);b.h+=.075,b.h>1&&(b.h=0,b.s-=.2,b.s<=0&&(this.getColor.start={h:0,s:1,b:b.b}));return c.hex},a.getColor.reset=function(){delete this.start},a.parsePathString=function(b){if(!b)return null;var c=bz(b);if(c.arr)return bJ(c.arr);var d={a:7,c:6,h:1,l:2,m:2,r:4,q:4,s:4,t:2,v:1,z:0},e=[];a.is(b,E)&&a.is(b[0],E)&&(e=bJ(b)),e.length||r(b).replace(Z,function(a,b,c){var f=[],g=b.toLowerCase();c.replace(_,function(a,b){b&&f.push(+b)}),g=="m"&&f.length>2&&(e.push([b][n](f.splice(0,2))),g="l",b=b=="m"?"l":"L");if(g=="r")e.push([b][n](f));else while(f.length>=d[g]){e.push([b][n](f.splice(0,d[g])));if(!d[g])break}}),e.toString=a._path2string,c.arr=bJ(e);return e},a.parseTransformString=bv(function(b){if(!b)return null;var c={r:3,s:4,t:2,m:6},d=[];a.is(b,E)&&a.is(b[0],E)&&(d=bJ(b)),d.length||r(b).replace($,function(a,b,c){var e=[],f=v.call(b);c.replace(_,function(a,b){b&&e.push(+b)}),d.push([b][n](e))}),d.toString=a._path2string;return d});var bz=function(a){var b=bz.ps=bz.ps||{};b[a]?b[a].sleep=100:b[a]={sleep:100},setTimeout(function(){for(var c in b)b[g](c)&&c!=a&&(b[c].sleep--,!b[c].sleep&&delete b[c])});return b[a]};a.findDotsAtSegment=function(a,b,c,d,e,f,g,h,i){var j=1-i,k=A(j,3),l=A(j,2),m=i*i,n=m*i,o=k*a+l*3*i*c+j*3*i*i*e+n*g,p=k*b+l*3*i*d+j*3*i*i*f+n*h,q=a+2*i*(c-a)+m*(e-2*c+a),r=b+2*i*(d-b)+m*(f-2*d+b),s=c+2*i*(e-c)+m*(g-2*e+c),t=d+2*i*(f-d)+m*(h-2*f+d),u=j*a+i*c,v=j*b+i*d,x=j*e+i*g,y=j*f+i*h,z=90-w.atan2(q-s,r-t)*180/B;(q>s||r=a.x&&b<=a.x2&&c>=a.y&&c<=a.y2},a.isBBoxIntersect=function(b,c){var d=a.isPointInsideBBox;return d(c,b.x,b.y)||d(c,b.x2,b.y)||d(c,b.x,b.y2)||d(c,b.x2,b.y2)||d(b,c.x,c.y)||d(b,c.x2,c.y)||d(b,c.x,c.y2)||d(b,c.x2,c.y2)||(b.xc.x||c.xb.x)&&(b.yc.y||c.yb.y)},a.pathIntersection=function(a,b){return bH(a,b)},a.pathIntersectionNumber=function(a,b){return bH(a,b,1)},a.isPointInsidePath=function(b,c,d){var e=a.pathBBox(b);return a.isPointInsideBBox(e,c,d)&&bH(b,[["M",c,d],["H",e.x2+10]],1)%2==1},a._removedFactory=function(a){return function(){eve("raphael.log",null,"Raphaël: you are calling to method “"+a+"” of removed object",a)}};var bI=a.pathBBox=function(a){var b=bz(a);if(b.bbox)return b.bbox;if(!a)return{x:0,y:0,width:0,height:0,x2:0,y2:0};a=bR(a);var c=0,d=0,e=[],f=[],g;for(var h=0,i=a.length;h1&&(v=w.sqrt(v),c=v*c,d=v*d);var x=c*c,y=d*d,A=(f==g?-1:1)*w.sqrt(z((x*y-x*u*u-y*t*t)/(x*u*u+y*t*t))),C=A*c*u/d+(a+h)/2,D=A*-d*t/c+(b+i)/2,E=w.asin(((b-D)/d).toFixed(9)),F=w.asin(((i-D)/d).toFixed(9));E=aF&&(E=E-B*2),!g&&F>E&&(F=F-B*2)}else E=j[0],F=j[1],C=j[2],D=j[3];var G=F-E;if(z(G)>k){var H=F,I=h,J=i;F=E+k*(g&&F>E?1:-1),h=C+c*w.cos(F),i=D+d*w.sin(F),m=bO(h,i,c,d,e,0,g,I,J,[F,H,C,D])}G=F-E;var K=w.cos(E),L=w.sin(E),M=w.cos(F),N=w.sin(F),O=w.tan(G/4),P=4/3*c*O,Q=4/3*d*O,R=[a,b],S=[a+P*L,b-Q*K],T=[h+P*N,i-Q*M],U=[h,i];S[0]=2*R[0]-S[0],S[1]=2*R[1]-S[1];if(j)return[S,T,U][n](m);m=[S,T,U][n](m).join()[s](",");var V=[];for(var W=0,X=m.length;W"1e12"&&(l=.5),z(n)>"1e12"&&(n=.5),l>0&&l<1&&(q=bP(a,b,c,d,e,f,g,h,l),p.push(q.x),o.push(q.y)),n>0&&n<1&&(q=bP(a,b,c,d,e,f,g,h,n),p.push(q.x),o.push(q.y)),i=f-2*d+b-(h-2*f+d),j=2*(d-b)-2*(f-d),k=b-d,l=(-j+w.sqrt(j*j-4*i*k))/2/i,n=(-j-w.sqrt(j*j-4*i*k))/2/i,z(l)>"1e12"&&(l=.5),z(n)>"1e12"&&(n=.5),l>0&&l<1&&(q=bP(a,b,c,d,e,f,g,h,l),p.push(q.x),o.push(q.y)),n>0&&n<1&&(q=bP(a,b,c,d,e,f,g,h,n),p.push(q.x),o.push(q.y));return{min:{x:y[m](0,p),y:y[m](0,o)},max:{x:x[m](0,p),y:x[m](0,o)}}}),bR=a._path2curve=bv(function(a,b){var c=!b&&bz(a);if(!b&&c.curve)return bJ(c.curve);var d=bL(a),e=b&&bL(b),f={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null},g={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null},h=function(a,b){var c,d;if(!a)return["C",b.x,b.y,b.x,b.y,b.x,b.y];!(a[0]in{T:1,Q:1})&&(b.qx=b.qy=null);switch(a[0]){case"M":b.X=a[1],b.Y=a[2];break;case"A":a=["C"][n](bO[m](0,[b.x,b.y][n](a.slice(1))));break;case"S":c=b.x+(b.x-(b.bx||b.x)),d=b.y+(b.y-(b.by||b.y)),a=["C",c,d][n](a.slice(1));break;case"T":b.qx=b.x+(b.x-(b.qx||b.x)),b.qy=b.y+(b.y-(b.qy||b.y)),a=["C"][n](bN(b.x,b.y,b.qx,b.qy,a[1],a[2]));break;case"Q":b.qx=a[1],b.qy=a[2],a=["C"][n](bN(b.x,b.y,a[1],a[2],a[3],a[4]));break;case"L":a=["C"][n](bM(b.x,b.y,a[1],a[2]));break;case"H":a=["C"][n](bM(b.x,b.y,a[1],b.y));break;case"V":a=["C"][n](bM(b.x,b.y,b.x,a[1]));break;case"Z":a=["C"][n](bM(b.x,b.y,b.X,b.Y))}return a},i=function(a,b){if(a[b].length>7){a[b].shift();var c=a[b];while(c.length)a.splice(b++,0,["C"][n](c.splice(0,6)));a.splice(b,1),l=x(d.length,e&&e.length||0)}},j=function(a,b,c,f,g){a&&b&&a[g][0]=="M"&&b[g][0]!="M"&&(b.splice(g,0,["M",f.x,f.y]),c.bx=0,c.by=0,c.x=a[g][1],c.y=a[g][2],l=x(d.length,e&&e.length||0))};for(var k=0,l=x(d.length,e&&e.length||0);ke){if(c&&!l.start){m=cs(g,h,i[1],i[2],i[3],i[4],i[5],i[6],e-n),k+=["C"+m.start.x,m.start.y,m.m.x,m.m.y,m.x,m.y];if(f)return k;l.start=k,k=["M"+m.x,m.y+"C"+m.n.x,m.n.y,m.end.x,m.end.y,i[5],i[6]].join(),n+=j,g=+i[5],h=+i[6];continue}if(!b&&!c){m=cs(g,h,i[1],i[2],i[3],i[4],i[5],i[6],e-n);return{x:m.x,y:m.y,alpha:m.alpha}}}n+=j,g=+i[5],h=+i[6]}k+=i.shift()+i}l.end=k,m=b?n:c?l:a.findDotsAtSegment(g,h,i[0],i[1],i[2],i[3],i[4],i[5],1),m.alpha&&(m={x:m.x,y:m.y,alpha:m.alpha});return m}},cu=ct(1),cv=ct(),cw=ct(0,1);a.getTotalLength=cu,a.getPointAtLength=cv,a.getSubpath=function(a,b,c){if(this.getTotalLength(a)-c<1e-6)return cw(a,b).end;var d=cw(a,c,1);return b?cw(d,b).end:d},cl.getTotalLength=function(){if(this.type=="path"){if(this.node.getTotalLength)return this.node.getTotalLength();return cu(this.attrs.path)}},cl.getPointAtLength=function(a){if(this.type=="path")return cv(this.attrs.path,a)},cl.getSubpath=function(b,c){if(this.type=="path")return a.getSubpath(this.attrs.path,b,c)};var cx=a.easing_formulas={linear:function(a){return a},"<":function(a){return A(a,1.7)},">":function(a){return A(a,.48)},"<>":function(a){var b=.48-a/1.04,c=w.sqrt(.1734+b*b),d=c-b,e=A(z(d),1/3)*(d<0?-1:1),f=-c-b,g=A(z(f),1/3)*(f<0?-1:1),h=e+g+.5;return(1-h)*3*h*h+h*h*h},backIn:function(a){var b=1.70158;return a*a*((b+1)*a-b)},backOut:function(a){a=a-1;var b=1.70158;return a*a*((b+1)*a+b)+1},elastic:function(a){if(a==!!a)return a;return A(2,-10*a)*w.sin((a-.075)*2*B/.3)+1},bounce:function(a){var b=7.5625,c=2.75,d;a<1/c?d=b*a*a:a<2/c?(a-=1.5/c,d=b*a*a+.75):a<2.5/c?(a-=2.25/c,d=b*a*a+.9375):(a-=2.625/c,d=b*a*a+.984375);return d}};cx.easeIn=cx["ease-in"]=cx["<"],cx.easeOut=cx["ease-out"]=cx[">"],cx.easeInOut=cx["ease-in-out"]=cx["<>"],cx["back-in"]=cx.backIn,cx["back-out"]=cx.backOut;var cy=[],cz=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(a){setTimeout(a,16)},cA=function(){var b=+(new Date),c=0;for(;c1&&!d.next){for(s in k)k[g](s)&&(r[s]=d.totalOrigin[s]);d.el.attr(r),cE(d.anim,d.el,d.anim.percents[0],null,d.totalOrigin,d.repeat-1)}d.next&&!d.stop&&cE(d.anim,d.el,d.next,null,d.totalOrigin,d.repeat)}}a.svg&&m&&m.paper&&m.paper.safari(),cy.length&&cz(cA)},cB=function(a){return a>255?255:a<0?0:a};cl.animateWith=function(b,c,d,e,f,g){var h=this;if(h.removed){g&&g.call(h);return h}var i=d instanceof cD?d:a.animation(d,e,f,g),j,k;cE(i,h,i.percents[0],null,h.attr());for(var l=0,m=cy.length;l.5)*2-1;i(m-.5,2)+i(n-.5,2)>.25&&(n=f.sqrt(.25-i(m-.5,2))*e+.5)&&n!=.5&&(n=n.toFixed(5)-1e-5*e)}return l}),e=e.split(/\s*\-\s*/);if(j=="linear"){var t=e.shift();t=-d(t);if(isNaN(t))return null;var u=[0,0,f.cos(a.rad(t)),f.sin(a.rad(t))],v=1/(g(h(u[2]),h(u[3]))||1);u[2]*=v,u[3]*=v,u[2]<0&&(u[0]=-u[2],u[2]=0),u[3]<0&&(u[1]=-u[3],u[3]=0)}var w=a._parseDots(e);if(!w)return null;k=k.replace(/[\(\)\s,\xb0#]/g,"_"),b.gradient&&k!=b.gradient.id&&(p.defs.removeChild(b.gradient),delete b.gradient);if(!b.gradient){s=q(j+"Gradient",{id:k}),b.gradient=s,q(s,j=="radial"?{fx:m,fy:n}:{x1:u[0],y1:u[1],x2:u[2],y2:u[3],gradientTransform:b.matrix.invert()}),p.defs.appendChild(s);for(var x=0,y=w.length;x1?G.opacity/100:G.opacity});case"stroke":G=a.getRGB(p),i.setAttribute(o,G.hex),o=="stroke"&&G[b]("opacity")&&q(i,{"stroke-opacity":G.opacity>1?G.opacity/100:G.opacity}),o=="stroke"&&d._.arrows&&("startString"in d._.arrows&&t(d,d._.arrows.startString),"endString"in d._.arrows&&t(d,d._.arrows.endString,1));break;case"gradient":(d.type=="circle"||d.type=="ellipse"||c(p).charAt()!="r")&&r(d,p);break;case"opacity":k.gradient&&!k[b]("stroke-opacity")&&q(i,{"stroke-opacity":p>1?p/100:p});case"fill-opacity":if(k.gradient){H=a._g.doc.getElementById(i.getAttribute("fill").replace(/^url\(#|\)$/g,l)),H&&(I=H.getElementsByTagName("stop"),q(I[I.length-1],{"stop-opacity":p}));break};default:o=="font-size"&&(p=e(p,10)+"px");var J=o.replace(/(\-.)/g,function(a){return a.substring(1).toUpperCase()});i.style[J]=p,d._.dirty=1,i.setAttribute(o,p)}}y(d,f),i.style.visibility=m},x=1.2,y=function(d,f){if(d.type=="text"&&!!(f[b]("text")||f[b]("font")||f[b]("font-size")||f[b]("x")||f[b]("y"))){var g=d.attrs,h=d.node,i=h.firstChild?e(a._g.doc.defaultView.getComputedStyle(h.firstChild,l).getPropertyValue("font-size"),10):10;if(f[b]("text")){g.text=f.text;while(h.firstChild)h.removeChild(h.firstChild);var j=c(f.text).split("\n"),k=[],m;for(var n=0,o=j.length;n"));var $=X.getBoundingClientRect();t.W=m.w=($.right-$.left)/Y,t.H=m.h=($.bottom-$.top)/Y,t.X=m.x,t.Y=m.y+t.H/2,("x"in i||"y"in i)&&(t.path.v=a.format("m{0},{1}l{2},{1}",f(m.x*u),f(m.y*u),f(m.x*u)+1));var _=["x","y","text","font","font-family","font-weight","font-style","font-size"];for(var ba=0,bb=_.length;ba.25&&(c=e.sqrt(.25-i(b-.5,2))*((c>.5)*2-1)+.5),m=b+n+c);return o}),f=f.split(/\s*\-\s*/);if(l=="linear"){var p=f.shift();p=-d(p);if(isNaN(p))return null}var q=a._parseDots(f);if(!q)return null;b=b.shape||b.node;if(q.length){b.removeChild(g),g.on=!0,g.method="none",g.color=q[0].color,g.color2=q[q.length-1].color;var r=[];for(var s=0,t=q.length;s')}}catch(c){F=function(a){return b.createElement("<"+a+' xmlns="urn:schemas-microsoft.com:vml" class="rvml">')}}},a._engine.initWin(a._g.win),a._engine.create=function(){var b=a._getContainer.apply(0,arguments),c=b.container,d=b.height,e,f=b.width,g=b.x,h=b.y;if(!c)throw new Error("VML container not found.");var i=new a._Paper,j=i.canvas=a._g.doc.createElement("div"),k=j.style;g=g||0,h=h||0,f=f||512,d=d||342,i.width=f,i.height=d,f==+f&&(f+="px"),d==+d&&(d+="px"),i.coordsize=u*1e3+n+u*1e3,i.coordorigin="0 0",i.span=a._g.doc.createElement("span"),i.span.style.cssText="position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;",j.appendChild(i.span),k.cssText=a.format("top:0;left:0;width:{0};height:{1};display:inline-block;position:relative;clip:rect(0 {0} {1} 0);overflow:hidden",f,d),c==1?(a._g.doc.body.appendChild(j),k.left=g+"px",k.top=h+"px",k.position="absolute"):c.firstChild?c.insertBefore(j,c.firstChild):c.appendChild(j),i.renderfix=function(){};return i},a.prototype.clear=function(){a.eve("raphael.clear",this),this.canvas.innerHTML=o,this.span=a._g.doc.createElement("span"),this.span.style.cssText="position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;display:inline;",this.canvas.appendChild(this.span),this.bottom=this.top=null},a.prototype.remove=function(){a.eve("raphael.remove",this),this.canvas.parentNode.removeChild(this.canvas);for(var b in this)this[b]=typeof this[b]=="function"?a._removedFactory(b):null;return!0};var G=a.st;for(var H in E)E[b](H)&&!G[b](H)&&(G[H]=function(a){return function(){var b=arguments;return this.forEach(function(c){c[a].apply(c,b)})}}(H))}(window.Raphael) \ No newline at end of file Index: lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/VoteAppConstants.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/VoteAppConstants.java,v diff -u -r1.51 -r1.52 --- lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/VoteAppConstants.java 17 May 2011 03:39:32 -0000 1.51 +++ lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/VoteAppConstants.java 9 Nov 2012 11:21:40 -0000 1.52 @@ -48,7 +48,6 @@ public static final String LEARNING_STARTER = "learningStarter"; public static final String MONITORING_STARTER = "monitoringStarter"; public static final String LOAD_LEARNER = "loadLearner"; - public static final String GENERATE_CHART = "generateChart"; public static final String ALL_NOMINATIONS = "allNominations"; public static final String LOAD_MONITORING_CONTENT = "loadMonitoring"; public static final String LOAD_MONITORING_CONTENT_EDITACTIVITY = "loadMonitoringEditActivity"; Index: lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/web/ExportServlet.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/web/ExportServlet.java,v diff -u -r1.26 -r1.27 --- lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/web/ExportServlet.java 3 Jun 2008 06:40:15 -0000 1.26 +++ lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/web/ExportServlet.java 9 Nov 2012 11:21:39 -0000 1.27 @@ -21,15 +21,8 @@ * **************************************************************** */ - package org.lamsfoundation.lams.tool.vote.web; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.OutputStream; - import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -46,197 +39,143 @@ import org.lamsfoundation.lams.tool.vote.pojos.VoteSession; import org.lamsfoundation.lams.tool.vote.service.IVoteService; import org.lamsfoundation.lams.tool.vote.service.VoteServiceProxy; -import org.lamsfoundation.lams.util.ChartUtil; import org.lamsfoundation.lams.util.MessageService; import org.lamsfoundation.lams.web.servlet.AbstractExportPortfolioServlet; + /** - *

Enables exporting portfolio for teacher and learner modes.

+ *

+ * Enables exporting portfolio for teacher and learner modes. + *

* * @author Ozgur Demirtas */ -public class ExportServlet extends AbstractExportPortfolioServlet implements VoteAppConstants{ - static Logger logger = Logger.getLogger(ExportServlet.class.getName()); - private static final long serialVersionUID = -1529093489007108983L; - private final String FILENAME = "vote_main.html"; - - - public String doExport(HttpServletRequest request, HttpServletResponse response, String directoryName, Cookie[] cookies) - { - String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath(); +public class ExportServlet extends AbstractExportPortfolioServlet implements VoteAppConstants { + static Logger logger = Logger.getLogger(ExportServlet.class.getName()); + private static final long serialVersionUID = -1529093489007108983L; + private final String FILENAME = "vote_main.html"; - boolean generateCharts = false; - - if (StringUtils.equals(mode,ToolAccessMode.LEARNER.toString())){ - generateCharts = learner(request,response,directoryName,cookies); - }else if (StringUtils.equals(mode,ToolAccessMode.TEACHER.toString())){ - generateCharts = teacher(request,response,directoryName,cookies); + @Override + public String doExport(HttpServletRequest request, HttpServletResponse response, String directoryName, + Cookie[] cookies) { + String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + + request.getContextPath(); + + if (StringUtils.equals(mode, ToolAccessMode.LEARNER.toString())) { + learner(request, response, directoryName, cookies); + } else if (StringUtils.equals(mode, ToolAccessMode.TEACHER.toString())) { + teacher(request, response, directoryName, cookies); + } + + writeResponseToFile(basePath + "/export/exportportfolio.jsp", directoryName, FILENAME, cookies); + + return FILENAME; + } + + @Override + protected String doOfflineExport(HttpServletRequest request, HttpServletResponse response, String directoryName, + Cookie[] cookies) { + if ((toolContentID == null) && (toolSessionID == null)) { + ExportServlet.logger.error("Tool content Id or and session Id are null. Unable to activity title"); + } else { + IVoteService service = VoteServiceProxy.getVoteService(getServletContext()); + + VoteContent content = null; + if (toolContentID != null) { + content = service.retrieveVote(toolContentID); + } else { + VoteSession session = service.retrieveVoteSession(toolSessionID); + if (session != null) { + content = session.getVoteContent(); } - - if ( generateCharts ) { - writeOutChart(request, response, ChartUtil.CHART_TYPE_PIE, directoryName); - writeOutChart(request, response, ChartUtil.CHART_TYPE_BAR, directoryName); - } - - writeResponseToFile(basePath+"/export/exportportfolio.jsp",directoryName,FILENAME,cookies); - - return FILENAME; + } + if (content != null) { + activityTitle = content.getTitle(); + } } - - protected String doOfflineExport(HttpServletRequest request, HttpServletResponse response, String directoryName, Cookie[] cookies) { - if (toolContentID == null && toolSessionID == null) { - logger.error("Tool content Id or and session Id are null. Unable to activity title"); - } else { - IVoteService service = VoteServiceProxy.getVoteService(getServletContext()); + return super.doOfflineExport(request, response, directoryName, cookies); + } - VoteContent content = null; - if ( toolContentID != null ) { - content = service.retrieveVote(toolContentID); - } else { - VoteSession session=service.retrieveVoteSession(toolSessionID); - if ( session != null ) - content = session.getVoteContent(); - } - if ( content != null ) { - activityTitle = content.getTitle(); - } - } - return super.doOfflineExport(request, response, directoryName, cookies); + public void learner(HttpServletRequest request, HttpServletResponse response, String directoryName, Cookie[] cookies) { + ExportPortfolioDTO exportPortfolioDTO = new ExportPortfolioDTO(); + + exportPortfolioDTO.setPortfolioExportMode("learner"); + + IVoteService voteService = VoteServiceProxy.getVoteService(getServletContext()); + MessageService messageService = VoteServiceProxy.getMessageService(getServletContext()); + + if ((userID == null) || (toolSessionID == null)) { + String error = "Tool session Id or user Id is null. Unable to continue"; + ExportServlet.logger.error(error); + throw new VoteApplicationException(error); } - public boolean learner(HttpServletRequest request, HttpServletResponse response, String directoryName, Cookie[] cookies) - { - boolean generateCharts = false; - ExportPortfolioDTO exportPortfolioDTO= new ExportPortfolioDTO(); - - exportPortfolioDTO.setPortfolioExportMode("learner"); - - IVoteService voteService = VoteServiceProxy.getVoteService(getServletContext()); - MessageService messageService = VoteServiceProxy.getMessageService(getServletContext()); - - if (userID == null || toolSessionID == null) - { - String error = "Tool session Id or user Id is null. Unable to continue"; - logger.error(error); - throw new VoteApplicationException(error); - } - - VoteSession voteSession=voteService.retrieveVoteSession(toolSessionID); - - // If the learner hasn't voted yet, then they won't exist in the session. - // Yet we might be asked for their page, as the activity has been commenced. - // So need to do a "blank" page in that case - VoteQueUsr learner = voteService.getVoteUserBySession(userID,voteSession.getUid()); - - if ( learner != null && learner.isFinalScreenRequested() ) { - - VoteContent content=voteSession.getVoteContent(); - - if (content == null) - { - String error="The content for this activity has not been defined yet."; - logger.error(error); - throw new VoteApplicationException(error); - } - - exportPortfolioDTO.setAllowText(content.isAllowText()); - - VoteGeneralMonitoringDTO voteGeneralMonitoringDTO=new VoteGeneralMonitoringDTO(); - - VoteMonitoringAction voteMonitoringAction= new VoteMonitoringAction(); - voteMonitoringAction.refreshSummaryData(request, content, voteService, true, true, - toolSessionID.toString(), userID.toString() , true, null, voteGeneralMonitoringDTO, exportPortfolioDTO); - - - MonitoringUtil.prepareChartDataForExportTeacher(request, voteService, null, content.getVoteContentId(), - voteSession.getUid(), exportPortfolioDTO, messageService); - - // VoteChartGenerator.create{Pie|Bar}Chart expects these to be session attributes - if ( voteSession.getVoteContent().isShowResults() ) { - generateCharts = true; - request.getSession().setAttribute(MAP_STANDARD_NOMINATIONS_CONTENT, exportPortfolioDTO.getMapStandardNominationsContent()); - request.getSession().setAttribute(MAP_STANDARD_RATES_CONTENT, exportPortfolioDTO.getMapStandardRatesContent()); - exportPortfolioDTO.setShowResults(Boolean.TRUE.toString()); - } else { - exportPortfolioDTO.setShowResults(Boolean.FALSE.toString()); - } - - voteMonitoringAction.prepareReflectionData(request, content, voteService, userID.toString(), true, ""); - } else { - // thise field is needed for the jsp. - exportPortfolioDTO.setUserExceptionNoToolSessions("false"); - } - - request.getSession().setAttribute(EXPORT_PORTFOLIO_DTO, exportPortfolioDTO); - return generateCharts; + VoteSession voteSession = voteService.retrieveVoteSession(toolSessionID); + + // If the learner hasn't voted yet, then they won't exist in the session. + // Yet we might be asked for their page, as the activity has been commenced. + // So need to do a "blank" page in that case + VoteQueUsr learner = voteService.getVoteUserBySession(userID, voteSession.getUid()); + + if ((learner != null) && learner.isFinalScreenRequested()) { + + VoteContent content = voteSession.getVoteContent(); + + if (content == null) { + String error = "The content for this activity has not been defined yet."; + ExportServlet.logger.error(error); + throw new VoteApplicationException(error); + } + + exportPortfolioDTO.setAllowText(content.isAllowText()); + + VoteGeneralMonitoringDTO voteGeneralMonitoringDTO = new VoteGeneralMonitoringDTO(); + + VoteMonitoringAction voteMonitoringAction = new VoteMonitoringAction(); + voteMonitoringAction.refreshSummaryData(request, content, voteService, true, true, + toolSessionID.toString(), userID.toString(), true, null, voteGeneralMonitoringDTO, + exportPortfolioDTO); + + voteMonitoringAction.prepareReflectionData(request, content, voteService, userID.toString(), true, ""); + } else { + // thise field is needed for the jsp. + exportPortfolioDTO.setUserExceptionNoToolSessions("false"); + } + + request.getSession().setAttribute(VoteAppConstants.EXPORT_PORTFOLIO_DTO, exportPortfolioDTO); } - - public boolean teacher(HttpServletRequest request, HttpServletResponse response, String directoryName, Cookie[] cookies) - { - ExportPortfolioDTO exportPortfolioDTO= new ExportPortfolioDTO(); - exportPortfolioDTO.setPortfolioExportMode("teacher"); - - IVoteService voteService = VoteServiceProxy.getVoteService(getServletContext()); - MessageService messageService = VoteServiceProxy.getMessageService(getServletContext()); - - if (toolContentID==null) - { - String error="Tool Content Id is missing. Unable to continue"; - logger.error(error); - throw new VoteApplicationException(error); - } - VoteContent content=voteService.retrieveVote(toolContentID); - - if (content == null) - { - String error="Data is missing from the database. Unable to Continue"; - logger.error(error); - throw new VoteApplicationException(error); - } - - exportPortfolioDTO.setAllowText(content.isAllowText()); - - VoteGeneralMonitoringDTO voteGeneralMonitoringDTO=new VoteGeneralMonitoringDTO(); - VoteMonitoringAction voteMonitoringAction= new VoteMonitoringAction(); - - voteMonitoringAction.refreshSummaryData(request, content, voteService, true, false, null, null, false, null, voteGeneralMonitoringDTO, exportPortfolioDTO); - - MonitoringUtil.prepareChartDataForExportTeacher(request, voteService, null, content.getVoteContentId(), null, exportPortfolioDTO, messageService); - // VoteChartGenerator.create{Pie|Bar}Chart expects these to be session attributes - request.getSession().setAttribute(MAP_STANDARD_NOMINATIONS_CONTENT, exportPortfolioDTO.getMapStandardNominationsContent()); - request.getSession().setAttribute(MAP_STANDARD_RATES_CONTENT, exportPortfolioDTO.getMapStandardRatesContent()); - exportPortfolioDTO.setShowResults(Boolean.TRUE.toString()); + public void teacher(HttpServletRequest request, HttpServletResponse response, String directoryName, Cookie[] cookies) { + ExportPortfolioDTO exportPortfolioDTO = new ExportPortfolioDTO(); + exportPortfolioDTO.setPortfolioExportMode("teacher"); - request.getSession().setAttribute(EXPORT_PORTFOLIO_DTO, exportPortfolioDTO); - - voteMonitoringAction.prepareReflectionData(request, content, voteService, null, true, "All"); + IVoteService voteService = VoteServiceProxy.getVoteService(getServletContext()); + MessageService messageService = VoteServiceProxy.getMessageService(getServletContext()); - // always generate the charts - return true; + if (toolContentID == null) { + String error = "Tool Content Id is missing. Unable to continue"; + ExportServlet.logger.error(error); + throw new VoteApplicationException(error); + } + + VoteContent content = voteService.retrieveVote(toolContentID); + + if (content == null) { + String error = "Data is missing from the database. Unable to Continue"; + ExportServlet.logger.error(error); + throw new VoteApplicationException(error); + } + + exportPortfolioDTO.setAllowText(content.isAllowText()); + + VoteGeneralMonitoringDTO voteGeneralMonitoringDTO = new VoteGeneralMonitoringDTO(); + VoteMonitoringAction voteMonitoringAction = new VoteMonitoringAction(); + + voteMonitoringAction.refreshSummaryData(request, content, voteService, true, false, null, null, false, null, + voteGeneralMonitoringDTO, exportPortfolioDTO); + + request.getSession().setAttribute(VoteAppConstants.EXPORT_PORTFOLIO_DTO, exportPortfolioDTO); + + voteMonitoringAction.prepareReflectionData(request, content, voteService, null, true, "All"); } - - /** - * creates JFreeCharts for offline visibility - * @param request - * @param chartType - * @param directoryName - */ - public void writeOutChart(HttpServletRequest request, HttpServletResponse response, String chartType, String directoryName) { - String fileName=chartType + ".png"; - - try{ - OutputStream out = new FileOutputStream(directoryName + File.separator + fileName); - VoteChartGenerator voteChartGenerator= new VoteChartGenerator(); - voteChartGenerator.outputChart(request, response, chartType, out); - } - catch(FileNotFoundException e) - { - logger.error("Exception creating chart: ",e) ; - } - catch(IOException e) - { - logger.error("exception creating chart: ",e) ; - } - } -} +} \ No newline at end of file Index: lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/web/MonitoringUtil.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/web/MonitoringUtil.java,v diff -u -r1.49 -r1.50 --- lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/web/MonitoringUtil.java 1 Jun 2011 12:37:45 -0000 1.49 +++ lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/web/MonitoringUtil.java 9 Nov 2012 11:21:39 -0000 1.50 @@ -634,7 +634,7 @@ } /** - * Generates JFreeChart data for all sessions in the Monitoring Summary. + * Generates chart data for all sessions in the Monitoring Summary. * * @param request * @param voteService @@ -837,7 +837,7 @@ } /** - * Generates JFreeChart data for the learner module and monitoring module + * Generates chart data for the learner module and monitoring module * Summary tab (Individual Sessions mode) * * @param request @@ -1070,130 +1070,6 @@ request.setAttribute(VOTE_GENERAL_MONITORING_DTO, voteGeneralMonitoringDTO); } - /** - * generates JFreeChart for the teacher export portfolio - * - * @param request - * @param voteService - * @param voteMonitoringForm - * @param toolContentID - * @param toolSessionUid - */ - public static void prepareChartDataForExportTeacher(HttpServletRequest request, IVoteService voteService, - VoteMonitoringForm voteMonitoringForm, Long toolContentID, Long toolSessionUid, - ExportPortfolioDTO exportPortfolioDTO, MessageService messageService) { - logger.debug("starting prepareChartDataForExportTeacher, toolContentID: " + toolContentID); - logger.debug("starting prepareChartDataForExportTeacher, toolSessionUid: " + toolSessionUid); - logger.debug("pased exportPortfolioDTO: " + exportPortfolioDTO); - - VoteContent voteContent = voteService.retrieveVote(toolContentID); - logger.debug("starting prepareChartData, voteContent uid: " + voteContent.getUid()); - logger.debug("starting prepareChartDataForExport, voteMonitoringForm: " + voteMonitoringForm); - logger.debug("existing voteContent:" + voteContent); - - Map mapOptionsContent = new TreeMap(new VoteComparator()); - Map mapVoteRatesContent = new TreeMap(new VoteComparator()); - Map mapStandardUserCount = new TreeMap(new VoteComparator()); - - Iterator queIterator = voteContent.getVoteQueContents().iterator(); - Long mapIndex = new Long(1); - int totalStandardVotesCount = 0; - int totalStandardContentVotesCount = 0; - int entriesCount = 0; - - logger.debug("get all entries for content: " + voteContent); - entriesCount = voteService.getUserEnteredVotesCountForContent(voteContent.getUid()); - logger.debug("entriesCount: " + entriesCount); - - Map mapStandardNominationsHTMLedContent = new TreeMap(new VoteComparator()); - - while (queIterator.hasNext()) { - VoteQueContent voteQueContent = (VoteQueContent) queIterator.next(); - if (voteQueContent != null) { - logger.debug("question: " + voteQueContent.getQuestion()); - mapStandardNominationsHTMLedContent.put(mapIndex.toString(), voteQueContent.getQuestion()); - String noHTMLNomination = VoteUtils.stripHTML(voteQueContent.getQuestion()); - logger.debug("noHTMLNomination: " + noHTMLNomination); - mapOptionsContent.put(mapIndex.toString(), noHTMLNomination); - - int votesCount = voteService.getStandardAttemptsForQuestionContentAndContentUid( - voteQueContent.getUid(), voteContent.getUid()); - logger.debug("standardContentAttemptCount: " + votesCount); - - mapStandardUserCount.put(mapIndex.toString(), new Integer(votesCount).toString()); - totalStandardVotesCount = totalStandardVotesCount + votesCount; - - double voteRate = 0d; - double doubleVotesCount = votesCount * 1d; - logger.debug("doubleVotesCount: " + doubleVotesCount); - double doubleEntriesCount = entriesCount * 1d; - logger.debug("doubleEntriesCount: " + doubleEntriesCount); - if (entriesCount != 0) { - voteRate = ((doubleVotesCount * 100) / doubleEntriesCount); - } - - logger.debug("voteRate" + voteRate); - String stringVoteRate = new Double(voteRate).toString(); - int lengthVoteRate = stringVoteRate.length(); - logger.debug("lengthVoteRate" + lengthVoteRate); - if (lengthVoteRate > 5) - stringVoteRate = stringVoteRate.substring(0, 6); - - mapVoteRatesContent.put(mapIndex.toString(), stringVoteRate); - mapIndex = new Long(mapIndex.longValue() + 1); - } - } - logger.debug("test1: Map initialized with existing contentid to: " + mapOptionsContent); - Map mapStandardNominationsContent = new TreeMap(new VoteComparator()); - mapStandardNominationsContent = mapOptionsContent; - logger.debug("mapStandardNominationsContent: " + mapStandardNominationsContent); - logger.debug("mapStandardNominationsHTMLedContent: " + mapStandardNominationsHTMLedContent); - - Map mapStandardRatesContent = new TreeMap(new VoteComparator()); - mapStandardRatesContent = mapVoteRatesContent; - logger.debug("test1: mapStandardRatesContent: " + mapStandardRatesContent); - logger.debug("test1: mapStandardUserCount: " + mapStandardUserCount); - - int mapVoteRatesSize = mapVoteRatesContent.size(); - logger.debug("mapVoteRatesSize: " + mapVoteRatesSize); - mapIndex = new Long(mapVoteRatesSize + 1); - logger.debug("updated mapIndex: " + mapIndex); - - double total = MonitoringUtil.calculateTotal(mapVoteRatesContent); - logger.debug("updated mapIndex: " + mapIndex); - double share = 100d - total; - logger.debug("share: " + share); - - logger.debug("totalStandardVotesCount: " + totalStandardVotesCount); - int userEnteredVotesCount = entriesCount - totalStandardVotesCount; - logger.debug("userEnteredVotesCount for this session: " + userEnteredVotesCount); - - if (userEnteredVotesCount != 0) { - share = ((userEnteredVotesCount * 100) / entriesCount); - logger.debug("calculated share normally, userEnteredVotesCount: " + userEnteredVotesCount); - logger.debug("calculated share normally, entriesCount: " + entriesCount); - } else { - share = 0; - logger.debug("reset share"); - } - logger.debug("final share: " + share); - - if (voteContent.isAllowText()) { - mapStandardNominationsContent.put(mapIndex.toString(), messageService.getMessage("label.open.vote")); - mapStandardNominationsHTMLedContent.put(mapIndex.toString(), messageService.getMessage("label.open.vote")); - } - mapStandardRatesContent.put(mapIndex.toString(), new Double(share).toString()); - mapStandardUserCount.put(mapIndex.toString(), new Integer(userEnteredVotesCount).toString()); - - if (exportPortfolioDTO != null) { - exportPortfolioDTO.setMapStandardNominationsHTMLedContent(mapStandardNominationsHTMLedContent); - exportPortfolioDTO.setMapStandardRatesContent(mapStandardRatesContent); - exportPortfolioDTO.setMapStandardUserCount(mapStandardUserCount); - exportPortfolioDTO.setMapStandardNominationsContent(mapStandardNominationsContent); - } - logger.debug("ending prepareChartDataForExportTeacher, exportPortfolioDTO: " + exportPortfolioDTO); - } - public static boolean notebookEntriesExist(IVoteService voteService, VoteContent voteContent) { logger.debug("finding out about content level notebook entries: " + voteContent); Iterator iteratorSession = voteContent.getVoteSessions().iterator(); Fisheye: Tag 1.20 refers to a dead (removed) revision in file `lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/web/VoteChartGenerator.java'. Fisheye: No comparison available. Pass `N' to diff? Index: lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/web/VoteChartGeneratorAction.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/web/VoteChartGeneratorAction.java,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/web/VoteChartGeneratorAction.java 9 Nov 2012 11:21:39 -0000 1.1 @@ -0,0 +1,104 @@ +/*************************************************************************** + * Copyright (C) 2005 LAMS Foundation (http://lamsfoundation.org) + * ============================================================= + * License Information: http://lamsfoundation.org/licensing/lams/2.0/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2.0 + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 + * USA + * + * http://www.gnu.org/licenses/gpl.txt + * ***********************************************************************/ + +package org.lamsfoundation.lams.tool.vote.web; + +import java.io.IOException; +import java.util.Map; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.commons.lang.StringUtils; +import org.apache.log4j.Logger; +import org.apache.struts.action.ActionForm; +import org.apache.struts.action.ActionForward; +import org.apache.struts.action.ActionMapping; +import org.apache.tomcat.util.json.JSONException; +import org.apache.tomcat.util.json.JSONObject; +import org.lamsfoundation.lams.tool.vote.VoteAppConstants; +import org.lamsfoundation.lams.tool.vote.VoteGeneralMonitoringDTO; +import org.lamsfoundation.lams.tool.vote.pojos.VoteContent; +import org.lamsfoundation.lams.tool.vote.pojos.VoteSession; +import org.lamsfoundation.lams.tool.vote.service.IVoteService; +import org.lamsfoundation.lams.tool.vote.service.VoteServiceProxy; +import org.lamsfoundation.lams.util.MessageService; +import org.lamsfoundation.lams.web.action.LamsDispatchAction; + +/** + * Prepares data for charts. + * + * @author Marcin Cieslak + */ +public class VoteChartGeneratorAction extends LamsDispatchAction { + private static final Logger logger = Logger.getLogger(VoteChartGeneratorAction.class.getName()); + + private static IVoteService voteService; + private static MessageService messageService; + + @SuppressWarnings("unchecked") + public ActionForward unspecified(ActionMapping mapping, ActionForm form, HttpServletRequest request, + HttpServletResponse response) throws JSONException, IOException { + String currentSessionId = request.getParameter("currentSessionId"); + + if (!StringUtils.isBlank(currentSessionId)) { + // it is a call from Monitor + VoteSession voteSession = getVoteService().retrieveVoteSession(new Long(currentSessionId)); + VoteContent voteContent = voteSession.getVoteContent(); + + VoteGeneralMonitoringDTO voteGeneralMonitoringDTO = new VoteGeneralMonitoringDTO(); + MonitoringUtil.prepareChartData(request, getVoteService(), null, voteContent.getVoteContentId().toString(), + voteSession.getUid().toString(), null, voteGeneralMonitoringDTO, getMessageService()); + } + + Map nominationNames = (Map) request.getSession().getAttribute( + VoteAppConstants.MAP_STANDARD_NOMINATIONS_CONTENT); + Map nominationVotes = (Map) request.getSession().getAttribute( + VoteAppConstants.MAP_STANDARD_RATES_CONTENT); + + JSONObject responseJSON = new JSONObject(); + for (String index : nominationNames.keySet()) { + JSONObject nomination = new JSONObject(); + // nominations' names and values go separately + nomination.put("name", nominationNames.get(index)); + nomination.put("value", nominationVotes.get(index)); + responseJSON.append("data", nomination); + } + + response.getWriter().write(responseJSON.toString()); + return null; + } + + private MessageService getMessageService() { + if (messageService == null) { + messageService = (MessageService) VoteServiceProxy.getMessageService(getServlet().getServletContext()); + } + return messageService; + } + + private IVoteService getVoteService() { + if (voteService == null) { + voteService = (IVoteService) VoteServiceProxy.getVoteService(getServlet().getServletContext()); + } + return voteService; + } +} \ No newline at end of file Index: lams_tool_vote/test/web/WEB-INF/web.xml =================================================================== RCS file: /usr/local/cvsroot/lams_tool_vote/test/web/WEB-INF/Attic/web.xml,v diff -u -r1.8 -r1.9 --- lams_tool_vote/test/web/WEB-INF/web.xml 30 Jul 2012 18:54:20 -0000 1.8 +++ lams_tool_vote/test/web/WEB-INF/web.xml 9 Nov 2012 11:21:40 -0000 1.9 @@ -127,11 +127,6 @@ exportPortfolio org.lamsfoundation.lams.tool.vote.web.ExportServlet - - - chartGenerator - org.lamsfoundation.lams.tool.vote.web.VoteChartGenerator - @@ -164,11 +159,6 @@ /exportPortfolio/* - - chartGenerator - /chartGenerator/* - - Connector /ckeditor/filemanager/browser/default/connectors/jsp/connector Index: lams_tool_vote/web/WEB-INF/struts-config.xml =================================================================== RCS file: /usr/local/cvsroot/lams_tool_vote/web/WEB-INF/struts-config.xml,v diff -u -r1.32 -r1.33 --- lams_tool_vote/web/WEB-INF/struts-config.xml 9 Dec 2008 05:38:13 -0000 1.32 +++ lams_tool_vote/web/WEB-INF/struts-config.xml 9 Nov 2012 11:21:39 -0000 1.33 @@ -432,6 +432,12 @@ redirect="false" /> + + + Index: lams_tool_vote/web/WEB-INF/web.xml =================================================================== RCS file: /usr/local/cvsroot/lams_tool_vote/web/WEB-INF/web.xml,v diff -u -r1.23 -r1.24 --- lams_tool_vote/web/WEB-INF/web.xml 30 Jul 2012 18:54:18 -0000 1.23 +++ lams_tool_vote/web/WEB-INF/web.xml 9 Nov 2012 11:21:39 -0000 1.24 @@ -143,11 +143,6 @@ exportPortfolio org.lamsfoundation.lams.tool.vote.web.ExportServlet - - - chartGenerator - org.lamsfoundation.lams.tool.vote.web.VoteChartGenerator - @@ -180,11 +175,6 @@ /exportPortfolio/* - - chartGenerator - /chartGenerator/* - - Connector /ckeditor/filemanager/browser/default/connectors/jsp/connector Index: lams_tool_vote/web/export/ExportContent.jsp =================================================================== RCS file: /usr/local/cvsroot/lams_tool_vote/web/export/ExportContent.jsp,v diff -u -r1.20 -r1.21 --- lams_tool_vote/web/export/ExportContent.jsp 23 May 2008 06:05:24 -0000 1.20 +++ lams_tool_vote/web/export/ExportContent.jsp 9 Nov 2012 11:21:39 -0000 1.21 @@ -181,24 +181,8 @@ - + - - - - - Pie Chart - - - - - - Bar Chart - - - - -    Index: lams_tool_vote/web/includes/javascript/chart.js =================================================================== RCS file: /usr/local/cvsroot/lams_tool_vote/web/includes/javascript/Attic/chart.js,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ lams_tool_vote/web/includes/javascript/chart.js 9 Nov 2012 11:21:39 -0000 1.1 @@ -0,0 +1,174 @@ +/* + * Functions using gRaphael to draw charts + */ + +// prevent columns in bar chart from being too wide +var MAX_BAR_WIDTH = 100; + +var currentChartType = null; +var legend = null; +var values = null; +var paper = null; +var pieChart = null; +var barChart = null; + +// all labels will have this CSS set +Raphael.g.txtattr = { + 'font-family' : 'verdana,arial,helvetica,sans-serif', + 'font-size' : '11 px' +}; + +function drawChart(type, currentSessionId) { + var chartDiv = $('#chartDiv'); + + // redrawing charts was unstable, so it is better to draw once and only show/hide later + if (pieChart) { + pieChart.hide(); + } + if (barChart) { + barChart.hide(); + } + + if ((type == currentChartType) && chartDiv.is(':visible')) { + chartDiv.slideUp('slow'); + currentChartType = null; + } else { + if (!values) { + // get data only once + getChartData(currentSessionId); + } + + currentChartType = type; + + chartDiv.slideDown('slow', function() { + if (!paper) { + paper = Raphael('chartDiv'); + } + + if (type == 'pie') { + drawPieChart(); + } else if (type == 'bar') { + drawBarChart(); + } + }); + } +} + +function drawPieChart() { + if (pieChart) { + // show if already was drawn and hidden + pieChart.show(); + } else { + pieChart = paper.piechart(110, 110, 100, values, { + 'legend' : legend, + 'legendpos' : 'east' + }).hover(function() { + this.sector.stop(); + this.sector.scale(1.1, 1.1, this.cx, this.cy); + + highlightLabel(this.label); + }, function() { + this.sector.animate({ + transform : 's1 1 ' + this.cx + ' ' + this.cy + }, 500, "bounce"); + + normaliseLabel(this.label); + }); + } +} + +function drawBarChart() { + if (barChart) { + // show if already was drawn and hidden + barChart.show(); + } else { + var chartWidth = Math.round(Math.min(values.length * MAX_BAR_WIDTH, $( + '#chartDiv').width() * 0.6)); + + barChart = paper.barchart(10, 10, chartWidth, 200, values, { + 'gutter' : '10%', // space between columns + 'type' : 'soft' // edges round a bit + }); + + // bar chart does not provide a legend similar to pie chart, so draw it manually + var legendX = chartWidth + 20; + var entryY = 120; + barChart.labels = paper.set(); + + for ( var i = 0; i < legend.length; i++) { + var color = barChart.bars[i].attr("fill"); + + barChart.labels.push(paper.set()); + barChart.labels[i].push(paper.circle(legendX + 5, entryY, 5).attr({ + fill : color, + stroke : 'none' + })); + + var txt = paper.text(legendX + 20, entryY, legend[i]).attr( + Raphael.g.txtattr).attr({ + fill : '#000', + 'text-anchor' : 'start' + }); + barChart.labels[i].push(txt); + + entryY += txt.getBBox().height * 1.2; + } + + // make it appear in the middle + barChart.labels.translate.apply(barChart.labels, [ 0, + -barChart.labels.getBBox().height / 2 ]); + barChart.push(barChart.labels); + + barChart.hover(function() { + highlightLabel(barChart.labels[this.bar.id]); + }, function() { + normaliseLabel(barChart.labels[this.bar.id]); + }); + } +} + +function getChartData(currentSessionId) { + $.ajax({ + url : TOOL_URL + 'chartGenerator.do', + data : {'currentSessionId' : currentSessionId}, + async : false, + cache : false, + dataType : 'json', + success : function(result) { + legend = []; + values = []; + jQuery.each(result.data, function(index, nomination) { + // pie chart has problems reading string values + var value = +nomination.value; + if (value > 0) { + // pie chart has problems reading 0 values, so just skip them + legend.push(value + '% - ' + nomination.name); + values.push(value); + } + }); + } + }); +} + +function highlightLabel(label) { + if (label) { + label[0].stop(); + label[0].attr({ + r : 7.5 + }); + label[1].attr({ + "font-weight" : 800 + }); + } +} + +function normaliseLabel(label) { + if (label) { + label[0].animate({ + r : 5 + }, 500, "bounce"); + label[1].attr({ + "font-weight" : 400 + }); + } +} \ No newline at end of file Fisheye: Tag 1.2 refers to a dead (removed) revision in file `lams_tool_vote/web/includes/javascript/common.js'. Fisheye: No comparison available. Pass `N' to diff? Index: lams_tool_vote/web/includes/javascript/g.bar.js =================================================================== RCS file: /usr/local/cvsroot/lams_tool_vote/web/includes/javascript/Attic/g.bar.js,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ lams_tool_vote/web/includes/javascript/g.bar.js 9 Nov 2012 11:21:40 -0000 1.1 @@ -0,0 +1,19 @@ +/*! + * g.Raphael 0.51 - Charting library, based on Raphaël + * + * Copyright (c) 2009-2012 Dmitry Baranovskiy (http://g.raphaeljs.com) + * Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license. + */ +(function(){function B(f,m,i,b,a,h,n,A){var c;if(a&&!b||!a&&!i)return n?"":A.path();h={round:"round",sharp:"sharp",soft:"soft",square:"square"}[h]||"square";b=Math.round(b);i=Math.round(i);f=Math.round(f);m=Math.round(m);switch(h){case "round":a?(a=~~(i/2),c=bg)r=!1, +d[g].value+=d[c],d[g].others=!0,p=d[g].value;o=Math.min(g+1,d.length);p&&d.splice(o)&&(d[g].others=!0);for(c=0;c")}for(c=0;c=2*a?e.attr({path:["M",b,f+a,"a",a,a,0,1,1,0,2*-a,a,a,0,1,1,0,2*a,"m",0,2*-a-3,"a",a+3,a+3,0,1,0,0,2*(a+3),"L",b+a+3,f+c.height/2+3,"l",c.width+6,0, +0,-c.height-6,-c.width-6,0,"L",b,f-a-3].join()}):(g=Math.sqrt(Math.pow(a+3,2)-Math.pow(c.height/2+3,2)),e.attr({path:["M",b,f+a,"c",-i,0,-a,i-a,-a,-a,0,-i,a-i,-a,a,-a,i,0,a,a-i,a,a,0,i,i-a,a,-a,a,"M",b+g,f-c.height/2-3,"a",a+3,a+3,0,1,0,0,c.height+6,"l",a+3-g+c.width+6,0,0,-c.height-6,"L",b+g,f-c.height/2-3].join()}));d=360-d;e.rotate(d,b,f);this.attrs?(this.attr(this.attrs.x?"x":"cx",b+a+3+(!h?"text"==this.type?c.width:0:c.width/2)).attr("y",h?f:f-c.height/2),this.rotate(d,b,f),90d&&this.attr(this.attrs.x? +"x":"cx",b-a-3-(!h?c.width:c.width/2)).rotate(180,b,f)):90d?(this.translate(b-c.x-c.width-a-3,f-c.y-c.height/2),this.rotate(d-180,c.x+c.width+a+3,c.y+c.height/2)):(this.translate(b-c.x+a+3,f-c.y-c.height/2),this.rotate(d,c.x-a-3,c.y+c.height/2));return e.insertBefore(this.node?this:this[0])}}; +Raphael.el.drop=function(d,a,b){var f=this.getBBox(),e=this.paper||this[0].paper,c,g;if(e){switch(this.type){case "text":case "circle":case "ellipse":c=!0;break;default:c=!1}d=d||0;a="number"==typeof a?a:c?f.x+f.width/2:f.x;b="number"==typeof b?b:c?f.y+f.height/2:f.y;g=Math.max(f.width,f.height)+Math.min(f.width,f.height);e=e.path(["M",a,b,"l",g,0,"A",0.4*g,0.4*g,0,1,0,a+0.7*g,b-0.7*g,"z"]).attr({fill:"#000",stroke:"none"}).rotate(22.5-d,a,b);d=(d+90)*Math.PI/180;a=a+g*Math.sin(d)-(c?0:f.width/2); +d=b+g*Math.cos(d)-(c?0:f.height/2);this.attrs?this.attr(this.attrs.x?"x":"cx",a).attr(this.attrs.y?"y":"cy",d):this.translate(a-f.x,d-f.y);return e.insertBefore(this.node?this:this[0])}}; +Raphael.el.flag=function(d,a,b){var f=this.paper||this[0].paper;if(f){var f=f.path().attr({fill:"#000",stroke:"#000"}),e=this.getBBox(),c=e.height/2,g;switch(this.type){case "text":case "circle":case "ellipse":g=!0;break;default:g=!1}d=d||0;a="number"==typeof a?a:g?e.x+e.width/2:e.x;b="number"==typeof b?b:g?e.y+e.height/2:e.y;f.attr({path:["M",a,b,"l",c+3,-c-3,e.width+6,0,0,e.height+6,-e.width-6,0,"z"].join()});d=360-d;f.rotate(d,a,b);this.attrs?(this.attr(this.attrs.x?"x":"cx",a+c+3+(!g?"text"== +this.type?e.width:0:e.width/2)).attr("y",g?b:b-e.height/2),this.rotate(d,a,b),90d&&this.attr(this.attrs.x?"x":"cx",a-c-3-(!g?e.width:e.width/2)).rotate(180,a,b)):90d?(this.translate(a-e.x-e.width-c-3,b-e.y-e.height/2),this.rotate(d-180,e.x+e.width+c+3,e.y+e.height/2)):(this.translate(a-e.x+c+3,b-e.y-e.height/2),this.rotate(d,e.x-c-3,e.y+e.height/2));return f.insertBefore(this.node?this:this[0])}}; +Raphael.el.label=function(){var d=this.getBBox(),a=this.paper||this[0].paper,b=Math.min(20,d.width+10,d.height+10)/2;if(a)return a.rect(d.x-b/2,d.y-b/2,d.width+b,d.height+b,b).attr({stroke:"none",fill:"#000"}).insertBefore(this.node?this:this[0])}; +Raphael.el.blob=function(d,a,b){var f=this.getBBox(),e=Math.PI/180,c=this.paper||this[0].paper,g,i;if(c){switch(this.type){case "text":case "circle":case "ellipse":g=!0;break;default:g=!1}c=c.path().attr({fill:"#000",stroke:"none"});d=(+d+1?d:45)+90;i=Math.min(f.height,f.width);var a="number"==typeof a?a:g?f.x+f.width/2:f.x,b="number"==typeof b?b:g?f.y+f.height/2:f.y,h=Math.max(f.width+i,25*i/12),j=Math.max(f.height+i,25*i/12);g=a+i*Math.sin((d-22.5)*e);var o=b+i*Math.cos((d-22.5)*e),l=a+i*Math.sin((d+ +22.5)*e),d=b+i*Math.cos((d+22.5)*e),e=(l-g)/2;i=(d-o)/2;var h=h/2,j=j/2,n=-Math.sqrt(Math.abs(h*h*j*j-h*h*i*i-j*j*e*e)/(h*h*i*i+j*j*e*e));i=n*h*i/j+(l+g)/2;e=n*-j*e/h+(d+o)/2;c.attr({x:i,y:e,path:["M",a,b,"L",l,d,"A",h,j,0,1,1,g,o,"z"].join()});this.translate(i-f.x-f.width/2,e-f.y-f.height/2);return c.insertBefore(this.node?this:this[0])}};Raphael.fn.label=function(d,a,b){var f=this.set(),b=this.text(d,a,b).attr(Raphael.g.txtattr);return f.push(b.label(),b)}; +Raphael.fn.popup=function(d,a,b,f,e){var c=this.set(),b=this.text(d,a,b).attr(Raphael.g.txtattr);return c.push(b.popup(f,e),b)};Raphael.fn.tag=function(d,a,b,f,e){var c=this.set(),b=this.text(d,a,b).attr(Raphael.g.txtattr);return c.push(b.tag(f,e),b)};Raphael.fn.flag=function(d,a,b,f){var e=this.set(),b=this.text(d,a,b).attr(Raphael.g.txtattr);return e.push(b.flag(f),b)};Raphael.fn.drop=function(d,a,b,f){var e=this.set(),b=this.text(d,a,b).attr(Raphael.g.txtattr);return e.push(b.drop(f),b)}; +Raphael.fn.blob=function(d,a,b,f){var e=this.set(),b=this.text(d,a,b).attr(Raphael.g.txtattr);return e.push(b.blob(f),b)};Raphael.el.lighter=function(d){var d=d||2,a=[this.attrs.fill,this.attrs.stroke];this.fs=this.fs||[a[0],a[1]];a[0]=Raphael.rgb2hsb(Raphael.getRGB(a[0]).hex);a[1]=Raphael.rgb2hsb(Raphael.getRGB(a[1]).hex);a[0].b=Math.min(a[0].b*d,1);a[0].s/=d;a[1].b=Math.min(a[1].b*d,1);a[1].s/=d;this.attr({fill:"hsb("+[a[0].h,a[0].s,a[0].b]+")",stroke:"hsb("+[a[1].h,a[1].s,a[1].b]+")"});return this}; +Raphael.el.darker=function(d){var d=d||2,a=[this.attrs.fill,this.attrs.stroke];this.fs=this.fs||[a[0],a[1]];a[0]=Raphael.rgb2hsb(Raphael.getRGB(a[0]).hex);a[1]=Raphael.rgb2hsb(Raphael.getRGB(a[1]).hex);a[0].s=Math.min(a[0].s*d,1);a[0].b/=d;a[1].s=Math.min(a[1].s*d,1);a[1].b/=d;this.attr({fill:"hsb("+[a[0].h,a[0].s,a[0].b]+")",stroke:"hsb("+[a[1].h,a[1].s,a[1].b]+")"});return this};Raphael.el.resetBrightness=function(){this.fs&&(this.attr({fill:this.fs[0],stroke:this.fs[1]}),delete this.fs);return this}; +(function(){var d=["lighter","darker","resetBrightness"],a="popup tag flag label drop blob".split(" "),b;for(b in a)(function(a){Raphael.st[a]=function(){return Raphael.el[a].apply(this,arguments)}})(a[b]);for(b in d)(function(a){Raphael.st[a]=function(){for(var b=0;bb;b++)bMath.abs(a-0.5)?~~a+0.5:Math.round(a)}var e=d,c=a;if(e==c)return{from:e,to:c,power:0};var e=(c-e)/b,g=c=~~e,b=0;if(c){for(;g;)b--,g=~~(e*Math.pow(10,b))/Math.pow(10,b); +b++}else{if(0==e||!isFinite(e))b=1;else for(;!c;)b=b||1,c=~~(e*Math.pow(10,b))/Math.pow(10,b),b++;b&&b--}c=f(a*Math.pow(10,b))/Math.pow(10,b);c=a-b;)"-"!=h&&" "!=h&&(l=l.concat(["M",d-("+"==h||"|"==h?j:2*!(g-1)*j),m+0.5,"l",2*j+1,0])),n.push(o.text(d+p,m,i&&i[u++]||(Math.round(k)==k?k:+k.toFixed(r))).attr(v).attr({"text-anchor":g-1?"start":"end"})),k+=t,m-=s;Math.round(m+s-(a-b))&&("-"!=h&&" "!=h&&(l=l.concat(["M",d-("+"==h||"|"==h?j:2*!(g-1)*j),a-b+0.5,"l",2*j+1,0])),n.push(o.text(d+ +p,a-b,i&&i[u]||(Math.round(k)==k?k:+k.toFixed(r))).attr(v).attr({"text-anchor":g-1?"start":"end"})))}else{for(var k=p,r=(0=q.x-5?n.pop(n.length-1).remove():w=q.x+q.width,k+=t,m+=s;Math.round(m-s-d-b)&&("-"!=h&&" "!=h&&(l=l.concat(["M",d+b+0.5,a-("+"==h?j:2*!!g*j),"l",0,2*j+1])),n.push(o.text(d+ +b,a+p,i&&i[u]||(Math.round(k)==k?k:+k.toFixed(r))).attr(v)))}l=o.path(l);l.text=n;l.all=o.set([l,n]);l.remove=function(){this.text.remove();this.constructor.prototype.remove.call(this)};return l},labelise:function(d,a,b){return d?(d+"").replace(/(##+(?:\.#+)?)|(%%+(?:\.%+)?)/g,function(d,e,c){if(e)return(+a).toFixed(e.replace(/^#+\.?/g,"").length);if(c)return(100*a/b).toFixed(c.replace(/^%+\.?/g,"").length)+"%"}):(+a).toFixed(0)}}; \ No newline at end of file Index: lams_tool_vote/web/learning/AllNominations.jsp =================================================================== RCS file: /usr/local/cvsroot/lams_tool_vote/web/learning/AllNominations.jsp,v diff -u -r1.47 -r1.48 --- lams_tool_vote/web/learning/AllNominations.jsp 17 Mar 2010 10:50:00 -0000 1.47 +++ lams_tool_vote/web/learning/AllNominations.jsp 9 Nov 2012 11:21:39 -0000 1.48 @@ -35,14 +35,19 @@ - - <fmt:message key="activity.title" /> - - - + + + + + + + + + + + + + + <fmt:message key="activity.title" /> + + + + + + + <fmt:message key="activity.title" /> - + + + + + + + + + + + + + + + + + + + + + +